mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-10 09:32:29 +01:00
Fixes clients receiving commands before the map data is sent and loaded.
This commit is contained in:
committed by
Michał Janiszewski
parent
bb0a655558
commit
ea59769cfd
@@ -595,9 +595,18 @@ const char* Network::FormatChat(NetworkPlayer* fromplayer, const char* text)
|
||||
return formatted;
|
||||
}
|
||||
|
||||
void Network::SendPacketToClients(NetworkPacket& packet, bool front)
|
||||
void Network::SendPacketToClients(NetworkPacket& packet, bool front, bool gameCmd)
|
||||
{
|
||||
for (auto it = client_connection_list.begin(); it != client_connection_list.end(); it++) {
|
||||
|
||||
if (gameCmd) {
|
||||
// If marked as game command we can not send the packet to connections that are not fully connected.
|
||||
// Sending the packet would cause the client to store a command that is behind the tick where he starts,
|
||||
// which would be essentially never executed. The clients do not require commands before the map is loaded.
|
||||
if ((*it)->Player == nullptr) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
(*it)->QueuePacket(NetworkPacket::Duplicate(packet), front);
|
||||
}
|
||||
}
|
||||
@@ -1122,7 +1131,7 @@ void Network::Server_Send_GAMECMD(uint32 eax, uint32 ebx, uint32 ecx, uint32 edx
|
||||
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
|
||||
*packet << (uint32)NETWORK_COMMAND_GAMECMD << (uint32)gCurrentTicks << eax << (ebx | GAME_COMMAND_FLAG_NETWORKED)
|
||||
<< ecx << edx << esi << edi << ebp << playerid << callback;
|
||||
SendPacketToClients(*packet);
|
||||
SendPacketToClients(*packet, false, true);
|
||||
}
|
||||
|
||||
void Network::Server_Send_TICK()
|
||||
|
||||
@@ -113,7 +113,7 @@ public:
|
||||
std::vector<std::unique_ptr<NetworkGroup>>::iterator GetGroupIteratorByID(uint8 id);
|
||||
NetworkGroup* GetGroupByID(uint8 id);
|
||||
static const char* FormatChat(NetworkPlayer* fromplayer, const char* text);
|
||||
void SendPacketToClients(NetworkPacket& packet, bool front = false);
|
||||
void SendPacketToClients(NetworkPacket& packet, bool front = false, bool gameCmd = false);
|
||||
bool CheckSRAND(uint32 tick, uint32 srand0);
|
||||
void KickPlayer(sint32 playerId);
|
||||
void SetPassword(const char* password);
|
||||
|
||||
Reference in New Issue
Block a user