mirror of
https://github.com/rehlds/rehlds.git
synced 2025-01-05 19:45:33 +03:00
Fixed #103: Server sends TeamScore to early connection client which leads to bug in ScoreBoard CS 1.6
This commit is contained in:
parent
979450a7a3
commit
6dcdc8a600
@ -1514,6 +1514,10 @@ void SV_WriteSpawn(sizebuf_t *msg)
|
|||||||
host_client->connected = TRUE;
|
host_client->connected = TRUE;
|
||||||
host_client->fully_connected = FALSE;
|
host_client->fully_connected = FALSE;
|
||||||
|
|
||||||
|
#ifdef REHLDS_FIXES
|
||||||
|
g_GameClients[host_client - g_psvs.clients]->SetSpawnedOnce(true);
|
||||||
|
#endif // REHLDS_FIXES
|
||||||
|
|
||||||
NotifyDedicatedServerUI("UpdatePlayers");
|
NotifyDedicatedServerUI("UpdatePlayers");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2400,6 +2404,10 @@ void EXT_FUNC SV_ConnectClient_internal(void)
|
|||||||
host_client->uploading = FALSE;
|
host_client->uploading = FALSE;
|
||||||
host_client->fully_connected = FALSE;
|
host_client->fully_connected = FALSE;
|
||||||
|
|
||||||
|
#ifdef REHLDS_FIXES
|
||||||
|
g_GameClients[host_client - g_psvs.clients]->SetSpawnedOnce(false);
|
||||||
|
#endif // REHLDS_FIXES
|
||||||
|
|
||||||
bIsSecure = Steam_GSBSecure();
|
bIsSecure = Steam_GSBSecure();
|
||||||
Netchan_OutOfBandPrint(NS_SERVER, adr, "%c %i \"%s\" %i %i", 66, host_client->userid, NET_AdrToString(host_client->netchan.remote_address), bIsSecure, build_number());
|
Netchan_OutOfBandPrint(NS_SERVER, adr, "%c %i \"%s\" %i %i", 66, host_client->userid, NET_AdrToString(host_client->netchan.remote_address), bIsSecure, build_number());
|
||||||
Log_Printf("\"%s<%i><%s><>\" connected, address \"%s\"\n", name, host_client->userid, SV_GetClientIDString(host_client), NET_AdrToString(host_client->netchan.remote_address));
|
Log_Printf("\"%s<%i><%s><>\" connected, address \"%s\"\n", name, host_client->userid, SV_GetClientIDString(host_client), NET_AdrToString(host_client->netchan.remote_address));
|
||||||
@ -4657,7 +4665,7 @@ void SV_UpdateToReliableMessages(void)
|
|||||||
//Fix for the "server failed to transmit file 'AY&SY..." bug
|
//Fix for the "server failed to transmit file 'AY&SY..." bug
|
||||||
//https://github.com/dreamstalker/rehlds/issues/38
|
//https://github.com/dreamstalker/rehlds/issues/38
|
||||||
#ifdef REHLDS_FIXES
|
#ifdef REHLDS_FIXES
|
||||||
if (!client->fakeclient && (client->active || client->connected))
|
if (!client->fakeclient && (client->active || g_GameClients[i]->GetSpawnedOnce()))
|
||||||
{
|
{
|
||||||
if (!svReliableCompressed && g_psv.reliable_datagram.cursize + client->netchan.message.cursize < client->netchan.message.maxsize)
|
if (!svReliableCompressed && g_psv.reliable_datagram.cursize + client->netchan.message.cursize < client->netchan.message.maxsize)
|
||||||
{
|
{
|
||||||
|
@ -35,6 +35,7 @@ CGameClient::CGameClient(int id, client_t* cl)
|
|||||||
{
|
{
|
||||||
m_Id = id;
|
m_Id = id;
|
||||||
m_pClient = cl;
|
m_pClient = cl;
|
||||||
|
m_bSpawnedOnce = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int EXT_FUNC CGameClient::GetId()
|
int EXT_FUNC CGameClient::GetId()
|
||||||
|
@ -52,6 +52,10 @@ private:
|
|||||||
client_t* m_pClient;
|
client_t* m_pClient;
|
||||||
CNetChan m_NetChan;
|
CNetChan m_NetChan;
|
||||||
|
|
||||||
|
// added this field to handle a bug with hanging clients in scoreboard after a map change.
|
||||||
|
// we would also use the field client_t:connected, but actually can't because there is a bug in CS client when server sends TeamScore
|
||||||
|
// and client is not yet initialized ScoreBoard which leads to memory corruption in the client.
|
||||||
|
bool m_bSpawnedOnce;
|
||||||
public:
|
public:
|
||||||
CGameClient(int id, client_t* cl);
|
CGameClient(int id, client_t* cl);
|
||||||
|
|
||||||
@ -82,6 +86,10 @@ public:
|
|||||||
virtual bool GetLoopback();
|
virtual bool GetLoopback();
|
||||||
|
|
||||||
virtual client_t* GetClient();
|
virtual client_t* GetClient();
|
||||||
|
|
||||||
|
public:
|
||||||
|
bool GetSpawnedOnce() const { return m_bSpawnedOnce; }
|
||||||
|
void SetSpawnedOnce(bool spawned) { m_bSpawnedOnce = spawned; }
|
||||||
};
|
};
|
||||||
|
|
||||||
class CRehldsServerStatic : public IRehldsServerStatic {
|
class CRehldsServerStatic : public IRehldsServerStatic {
|
||||||
|
Loading…
Reference in New Issue
Block a user