Skip to content

Commit 9f4d3de

Browse files
committed
Refactored player joined flag
1 parent 599d85e commit 9f4d3de

File tree

10 files changed

+58
-73
lines changed

10 files changed

+58
-73
lines changed

Server/mods/deathmatch/logic/CGame.cpp

Lines changed: 28 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1243,7 +1243,7 @@ void CGame::InitialDataStream(CPlayer& Player)
12431243
marker.Set("SetParentObject");
12441244

12451245
// He's joined now
1246-
Player.SetStatus(STATUS_JOINED);
1246+
Player.SetJoined();
12471247
m_pPlayerManager->OnPlayerJoin(&Player);
12481248

12491249
// Console
@@ -1375,7 +1375,7 @@ void CGame::QuitPlayer(CPlayer& Player, CClient::eQuitReasons Reason, bool bSayI
13751375
}
13761376

13771377
// If he had joined
1378-
if (Player.GetStatus() == STATUS_JOINED)
1378+
if (Player.IsJoined())
13791379
{
13801380
// Tell our scripts the player has quit, but only if the scripts got told he joined
13811381
CLuaArguments Arguments;
@@ -1788,7 +1788,7 @@ void CGame::Packet_PlayerJoinData(CPlayerJoinDataPacket& Packet)
17881788
// Add him to the whowas list
17891789
m_WhoWas.Add(szNick, Packet.GetSourceIP(), pPlayer->GetSerial(), pPlayer->GetPlayerVersion(), pPlayer->GetAccount()->GetName());
17901790

1791-
PlayerCompleteConnect(pPlayer, true, NULL);
1791+
PlayerCompleteConnect(pPlayer);
17921792
}
17931793
else
17941794
{
@@ -3638,7 +3638,7 @@ void CGame::Packet_CameraSync(CCameraSyncPacket& Packet)
36383638
void CGame::Packet_PlayerTransgression(CPlayerTransgressionPacket& Packet)
36393639
{
36403640
CPlayer* pPlayer = Packet.GetSourcePlayer();
3641-
if (pPlayer && pPlayer->IsJoined())
3641+
if (pPlayer)
36423642
{
36433643
// If ac# not disabled on this server, do a kick
36443644
if (!g_pGame->GetConfig()->IsDisableAC(SString("%d", Packet.m_uiLevel)))
@@ -3875,51 +3875,39 @@ void CGame::Packet_PlayerACInfo(CPlayerACInfoPacket& Packet)
38753875
}
38763876
}
38773877

3878-
void CGame::PlayerCompleteConnect(CPlayer* pPlayer, bool bSuccess, const char* szError)
3878+
void CGame::PlayerCompleteConnect(CPlayer* pPlayer)
38793879
{
38803880
SString strIPAndSerial("IP: %s Serial: %s Version: %s", pPlayer->GetSourceIP(), pPlayer->GetSerial().c_str(), pPlayer->GetPlayerVersion().c_str());
3881-
if (bSuccess)
3881+
// Call the onPlayerConnect event. If it returns false, disconnect the player
3882+
CLuaArguments Arguments;
3883+
Arguments.PushString(pPlayer->GetNick());
3884+
Arguments.PushString(pPlayer->GetSourceIP());
3885+
Arguments.PushString(pPlayer->GetSerialUser().c_str());
3886+
Arguments.PushString(pPlayer->GetSerial().c_str());
3887+
Arguments.PushNumber(pPlayer->GetMTAVersion());
3888+
Arguments.PushString(pPlayer->GetPlayerVersion());
3889+
if (!g_pGame->GetMapManager()->GetRootElement()->CallEvent("onPlayerConnect", Arguments))
38823890
{
3883-
// Call the onPlayerConnect event. If it returns false, disconnect the player
3884-
CLuaArguments Arguments;
3885-
Arguments.PushString(pPlayer->GetNick());
3886-
Arguments.PushString(pPlayer->GetSourceIP());
3887-
Arguments.PushString(pPlayer->GetSerialUser().c_str());
3888-
Arguments.PushString(pPlayer->GetSerial().c_str());
3889-
Arguments.PushNumber(pPlayer->GetMTAVersion());
3890-
Arguments.PushString(pPlayer->GetPlayerVersion());
3891-
if (!g_pGame->GetMapManager()->GetRootElement()->CallEvent("onPlayerConnect", Arguments))
3891+
// event cancelled, disconnect the player
3892+
CLogger::LogPrintf("CONNECT: %s failed to connect. (onPlayerConnect event cancelled) (%s)\n", pPlayer->GetNick(), strIPAndSerial.c_str());
3893+
const char* szError = g_pGame->GetEvents()->GetLastError();
3894+
if (szError && szError[0])
38923895
{
3893-
// event cancelled, disconnect the player
3894-
CLogger::LogPrintf("CONNECT: %s failed to connect. (onPlayerConnect event cancelled) (%s)\n", pPlayer->GetNick(), strIPAndSerial.c_str());
3895-
const char* szError = g_pGame->GetEvents()->GetLastError();
3896-
if (szError && szError[0])
3897-
{
3898-
DisconnectPlayer(g_pGame, *pPlayer, szError);
3899-
return;
3900-
}
3901-
DisconnectPlayer(g_pGame, *pPlayer, CPlayerDisconnectedPacket::GENERAL_REFUSED);
3896+
DisconnectPlayer(g_pGame, *pPlayer, szError);
39023897
return;
39033898
}
3899+
DisconnectPlayer(g_pGame, *pPlayer, CPlayerDisconnectedPacket::GENERAL_REFUSED);
3900+
return;
3901+
}
39043902

3905-
// Tell the console
3906-
CLogger::LogPrintf("CONNECT: %s connected (%s)\n", pPlayer->GetNick(), strIPAndSerial.c_str());
3903+
// Tell the console
3904+
CLogger::LogPrintf("CONNECT: %s connected (%s)\n", pPlayer->GetNick(), strIPAndSerial.c_str());
39073905

3908-
// Send him the join details
3909-
pPlayer->Send(CPlayerConnectCompletePacket());
3906+
// Send him the join details
3907+
pPlayer->Send(CPlayerConnectCompletePacket());
39103908

3911-
// The player is spawned when he's connected, just the Camera is not faded in/not targetting
3912-
pPlayer->SetSpawned(true);
3913-
}
3914-
else
3915-
{
3916-
CLogger::LogPrintf("CONNECT: %s failed to connect (Invalid serial) (%s)\n", pPlayer->GetNick(), strIPAndSerial.c_str());
3917-
if (szError && strlen(szError) > 0)
3918-
DisconnectPlayer(g_pGame, *pPlayer, szError);
3919-
else
3920-
DisconnectPlayer(g_pGame, *pPlayer, CPlayerDisconnectedPacket::SERIAL_VERIFICATION);
3921-
return;
3922-
}
3909+
// The player is spawned when he's connected, just the Camera is not faded in/not targetting
3910+
pPlayer->SetSpawned(true);
39233911
}
39243912

39253913
void CGame::Lock(void)

Server/mods/deathmatch/logic/CGame.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ class CGame
497497
void Packet_PlayerNoSocket(class CPlayerNoSocketPacket& Packet);
498498
void Packet_PlayerNetworkStatus(class CPlayerNetworkStatusPacket& Packet);
499499

500-
static void PlayerCompleteConnect(CPlayer* pPlayer, bool bSuccess, const char* szError);
500+
static void PlayerCompleteConnect(CPlayer* pPlayer);
501501

502502
// Technically, this could be put somewhere else. It's a callback function
503503
// which the voice server library will call to send out data.

Server/mods/deathmatch/logic/CPlayer.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,10 @@ CPlayer::CPlayer(CPlayerManager* pPlayerManager, class CScriptDebugging* pScript
3333
m_usMTAVersion = 0;
3434
m_usBitStreamVersion = 0;
3535
m_bIsMuted = false;
36+
m_bIsJoined = false;
3637
m_lMoney = 0;
3738
m_bNametagColorOverridden = false;
3839

39-
m_iStatus = STATUS_CONNECTED;
40-
4140
m_fRotation = 0.0f;
4241
m_fAimDirection = 0.0f;
4342
m_ucDriveByDirection = 0;
@@ -183,7 +182,7 @@ void CPlayer::Unlink(void)
183182

184183
void CPlayer::DoPulse(void)
185184
{
186-
if (GetStatus() == STATUS_JOINED)
185+
if (IsJoined())
187186
{
188187
if (m_pPlayerTextManager != NULL)
189188
m_pPlayerTextManager->Process();

Server/mods/deathmatch/logic/CPlayer.h

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,6 @@ class CPlayer;
2626
class CKeyBinds;
2727
class CPlayerCamera;
2828

29-
enum
30-
{
31-
STATUS_CONNECTED,
32-
STATUS_VERIFYING,
33-
STATUS_JOINED,
34-
};
35-
3629
enum eVoiceState
3730
{
3831
VOICESTATE_IDLE = 0,
@@ -106,12 +99,8 @@ class CPlayer : public CPed, public CClient
10699

107100
bool IsMuted(void) { return m_bIsMuted; };
108101
void SetMuted(bool bSetMuted) { m_bIsMuted = bSetMuted; };
109-
110-
int GetStatus(void) { return m_iStatus; };
111-
void SetStatus(int iStatus) { m_iStatus = iStatus; };
112-
113-
bool IsIngame(void) { return m_iStatus >= STATUS_VERIFYING; };
114-
bool IsJoined(void) { return m_iStatus == STATUS_JOINED; };
102+
bool IsJoined(void) { return m_bIsJoined; }
103+
void SetJoined(void) { m_bIsJoined = true; }
115104

116105
float GetCameraRotation(void) { return m_fCameraRotation; };
117106
void SetCameraRotation(float fRotation) { m_fCameraRotation = fRotation; };
@@ -359,7 +348,7 @@ class CPlayer : public CPed, public CClient
359348
unsigned short m_usBitStreamVersion;
360349
SString m_strPlayerVersion;
361350
bool m_bIsMuted;
362-
int m_iStatus;
351+
bool m_bIsJoined;
363352

364353
bool m_bNametagColorOverridden;
365354

Server/mods/deathmatch/logic/CPlayerManager.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ void CPlayerManager::PulseZombieCheck(void)
4646
{
4747
CPlayer* pPlayer = *iter;
4848

49-
if (pPlayer->GetStatus() == STATUS_CONNECTED)
49+
if (pPlayer->IsJoined() == false)
5050
{
5151
// Remove any players that have been connected for very long (90 sec) but haven't reached the verifying step
5252
if (pPlayer->GetTimeSinceConnected() > 90000)
@@ -95,14 +95,14 @@ CPlayer* CPlayerManager::Create(const NetServerPlayerID& PlayerSocket)
9595
return pPlayer;
9696
}
9797

98-
unsigned int CPlayerManager::CountWithStatus(int iStatus)
98+
unsigned int CPlayerManager::CountJoined(void)
9999
{
100100
// Count each ingame player
101101
unsigned int uiCount = 0;
102102
list<CPlayer*>::const_iterator iter = m_Players.begin();
103103
for (; iter != m_Players.end(); iter++)
104104
{
105-
if ((*iter)->GetStatus() == iStatus)
105+
if ((*iter)->IsJoined())
106106
{
107107
++uiCount;
108108
}

Server/mods/deathmatch/logic/CPlayerManager.h

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,9 @@ class CPlayerManager
3434
CPlayer* Create(const NetServerPlayerID& PlayerSocket);
3535
void DeleteAll(void);
3636

37-
unsigned int Count(void)
38-
{
39-
return static_cast<unsigned int>(m_Players.size());
40-
;
41-
};
42-
unsigned int CountJoined(void) { return CountWithStatus(STATUS_JOINED); };
43-
unsigned int CountWithStatus(int iStatus);
44-
bool Exists(CPlayer* pPlayer);
37+
unsigned int Count(void) { return static_cast<unsigned int>(m_Players.size()); }
38+
unsigned int CountJoined(void);
39+
bool Exists(CPlayer* pPlayer);
4540

4641
CPlayer* Get(const NetServerPlayerID& PlayerSocket);
4742
CPlayer* Get(const char* szNick, bool bCaseSensitive = false);

Server/mods/deathmatch/logic/CRPCFunctions.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ void CRPCFunctions::PlayerInGameNotice(NetBitStreamInterface& bitStream)
8686
{
8787
CLOCK("NetServerPulse::RPC", "PlayerInGameNotice");
8888
// Already ingame? Protocol error
89-
if (m_pSourcePlayer->IsIngame())
89+
if (m_pSourcePlayer->IsJoined())
9090
{
9191
DisconnectPlayer(g_pGame, *m_pSourcePlayer, "Protocol error: Already ingame");
9292
}

Server/mods/deathmatch/logic/net/CNetBuffer.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,6 +1227,20 @@ void CNetServerBuffer::ProcessPacket(unsigned char ucPacketID, const NetServerPl
12271227
// Reset bitstream pointer so game can also read the packet data
12281228
BitStream->ResetReadPointer();
12291229
}
1230+
else if (ucPacketID == PACKET_ID_SERVER_DISCONNECTED)
1231+
{
1232+
// Handle request from net module to immediately send disconnected packet
1233+
uchar m_eType;
1234+
SString strReason;
1235+
BitStream->Read(m_eType);
1236+
BitStream->ReadString(strReason);
1237+
NetBitStreamInterface* pSendBitStream = g_pRealNetServer->AllocateNetServerBitStream(BitStream->Version());
1238+
CPlayerDisconnectedPacket packet((CPlayerDisconnectedPacket::ePlayerDisconnectType)m_eType, strReason);
1239+
packet.Write(*pSendBitStream);
1240+
g_pRealNetServer->SendPacket(packet.GetPacketID(), Socket, pSendBitStream, false, PACKET_PRIORITY_HIGH, PACKET_RELIABILITY_RELIABLE_ORDERED);
1241+
g_pRealNetServer->DeallocateNetServerBitStream(pSendBitStream);
1242+
return;
1243+
}
12301244

12311245
ms_StatsRecvNumMessages++;
12321246

Server/mods/deathmatch/logic/net/CSimPlayer.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@ class CSimPlayer
2525
CSimPlayer(void) { DEBUG_CREATE_COUNT("CSimPlayer"); }
2626
~CSimPlayer(void) { DEBUG_DESTROY_COUNT("CSimPlayer"); }
2727

28-
bool IsJoined(void) { return m_iStatus == STATUS_JOINED; };
28+
bool IsJoined(void) { return m_bIsJoined; };
2929
const std::multimap<ushort, CSimPlayer*>& GetPuresyncSendList(void);
3030
unsigned short GetBitStreamVersion(void) { return m_usBitStreamVersion; };
3131
NetServerPlayerID& GetSocket(void) { return m_PlayerSocket; };
3232

3333
// General synced vars
34-
int m_iStatus;
34+
bool m_bIsJoined;
3535
unsigned short m_usBitStreamVersion;
3636
NetServerPlayerID m_PlayerSocket;
3737
std::vector<CSimPlayer*> m_PuresyncSendListFlat;

Server/mods/deathmatch/logic/net/CSimPlayerManager.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ void CSimPlayerManager::UpdateSimPlayer(CPlayer* pPlayer)
127127
//
128128
CVehicle* pVehicle = pPlayer->GetOccupiedVehicle();
129129

130-
pSim->m_iStatus = pPlayer->GetStatus();
130+
pSim->m_bIsJoined = pPlayer->IsJoined();
131131
pSim->m_usBitStreamVersion = pPlayer->GetBitStreamVersion();
132132
pSim->m_bHasOccupiedVehicle = pVehicle != NULL;
133133
pSim->m_PlayerID = pPlayer->GetID();

0 commit comments

Comments
 (0)