Bläddra i källkod

Further attempt to fix ghosts in the machine, clients removing early and still having packets sent to them

Emagi 1 år sedan
förälder
incheckning
1538c41bbc
2 ändrade filer med 4 tillägg och 3 borttagningar
  1. 1 0
      EQ2/source/WorldServer/client.cpp
  2. 3 3
      EQ2/source/WorldServer/zoneserver.cpp

+ 1 - 0
EQ2/source/WorldServer/client.cpp

@@ -3216,6 +3216,7 @@ bool Client::Process(bool zone_process) {
 	}
 
 	if(spawn_removal_timer.Check() && GetPlayer()) {
+		GetPlayer()->ProcessSpawnRangeUpdates();
 		GetPlayer()->CheckSpawnStateQueue();
 	}
 

+ 3 - 3
EQ2/source/WorldServer/zoneserver.cpp

@@ -1872,7 +1872,7 @@ void ZoneServer::SendSpawnChangesByDBID(int32 db_id, Client* client, bool overri
 }
 
 void ZoneServer::SendSpawnChanges(Spawn* spawn, Client* client, bool override_changes, bool override_vis_changes){
-	if(client && client->IsReadyForUpdates() && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && (spawn->IsTransportSpawn() || client->GetPlayer()->GetDistance(spawn) < SEND_SPAWN_DISTANCE)){
+	if(client && client->IsConnected() && client->IsReadyForUpdates() && client->GetPlayer()->WasSentSpawn(spawn->GetID()) && (spawn->IsTransportSpawn() || client->GetPlayer()->GetDistance(spawn) < SEND_SPAWN_DISTANCE)){
 		EQ2Packet* outapp = spawn->spawn_update_packet(client->GetPlayer(), client->GetVersion(), override_changes, override_vis_changes);
 		if(outapp)
 			client->QueuePacket(outapp);
@@ -3423,8 +3423,8 @@ void ZoneServer::ClientProcess()
 
 				}
 				
-				client->Disconnect();
 				RemoveClient(client);
+				client->Disconnect();
 			}
 #ifndef NO_CATCH
 		}
@@ -3442,8 +3442,8 @@ void ZoneServer::ClientProcess()
 					}
 				}
 				
-				client->Disconnect();
 				RemoveClient(client);
+				client->Disconnect();
 			}
 			catch(...){
 				LogWrite(ZONE__ERROR, 0, "Zone", "Exception caught when in ZoneServer::ClientProcess(), second try\n%s, %i", __FUNCTION__, __LINE__);