Browse Source

More changes to spawn update packets

Still working to narrow the right ordering of packets and such.. seems there may be some outstanding problems or another netcode issue at a lower level
Image 4 years ago
parent
commit
e3d37fc0ed
1 changed files with 19 additions and 6 deletions
  1. 19 6
      EQ2/source/WorldServer/client.cpp

+ 19 - 6
EQ2/source/WorldServer/client.cpp

@@ -8248,6 +8248,9 @@ bool Client::HandleNewLogin(int32 account_id, int32 access_code)
 
 
 void Client::SendSpawnChanges(set<Spawn*>& spawns) {
+	if (!IsReadyForUpdates())
+		return;
+
 	map<int32, SpawnData> info_changes;
 	map<int32, SpawnData> pos_changes;
 	map<int32, SpawnData> vis_changes;
@@ -8258,6 +8261,8 @@ void Client::SendSpawnChanges(set<Spawn*>& spawns) {
 
 	int count = 0;
 	bool forceSend = false;
+	deque<EQ2Packet*> individualSpawns;
+
 	for (const auto& spawn : spawns) {
 		if (forceSend)
 		{
@@ -8283,16 +8288,17 @@ void Client::SendSpawnChanges(set<Spawn*>& spawns) {
 			vis_size = 0;
 		}
 
-		if (spawn->info_changed || spawn->vis_changed)
-		{
-			GetPlayer()->GetZone()->SendSpawnChanges(spawn, this, false, false);
-			continue;
-		}
-
 		int16 index = GetPlayer()->GetIndexForSpawn(spawn);
 		if (index == 0 || !GetPlayer()->WasSentSpawn(spawn->GetID()) || GetPlayer()->NeedsSpawnResent(spawn) || GetPlayer()->GetDistance(spawn) >= SEND_SPAWN_DISTANCE)
 			continue;
 
+		if (spawn->IsWidget() || spawn->info_changed || spawn->vis_changed)
+		{
+			EQ2Packet* outapp = spawn->spawn_update_packet(GetPlayer(), GetVersion(), false, false);
+			individualSpawns.push_back(outapp);
+			continue;
+		}
+
 		if (spawn->info_changed) {
 			auto info_change = spawn->spawn_info_changes_ex(GetPlayer(), GetVersion());
 
@@ -8359,6 +8365,13 @@ void Client::SendSpawnChanges(set<Spawn*>& spawns) {
 	for (auto& kv : vis_changes) {
 		safe_delete_array(kv.second.data);
 	}
+	
+	for (int i = 0; i < individualSpawns.size(); i++)
+	{
+		QueuePacket(individualSpawns[i], true);
+	}
+
+	individualSpawns.clear();	
 }
 
 void Client::MakeSpawnChangePacket(map<int32, SpawnData> info_changes, map<int32, SpawnData> pos_changes, map<int32, SpawnData> vis_changes, int32 info_size, int32 pos_size, int32 vis_size)