Browse Source

Fix for visual/info updates not transmitting correctly (eg. hp/race change/etc)

Image 3 years ago
parent
commit
6f5d3e2244

+ 10 - 9
EQ2/source/WorldServer/client.cpp

@@ -4555,7 +4555,7 @@ void Client::AddPlayerQuest(Quest* quest, bool call_accepted, bool send_packets)
 	quest->SetPlayer(player);
 	current_quest_id = quest->GetQuestID();
 	if(send_packets && quest->GetQuestGiver() > 0)
-		GetCurrentZone()->SendSpawnChanges(quest->GetQuestGiver(), this, false, true);
+		GetCurrentZone()->SendSpawnChangesByDBID(quest->GetQuestGiver(), this, false, true);
 	if(lua_interface && call_accepted)
 		lua_interface->CallQuestFunction(quest, "Accepted", player);
 	if(send_packets) {
@@ -4584,7 +4584,7 @@ void Client::RemovePlayerQuest(int32 id, bool send_update, bool delete_quest){
 			database.DeleteCharacterQuest(id, GetCharacterID(), player->GetCompletedPlayerQuests()->count(id) > 0);
 		}
 		if(send_update && player->player_quests[id]->GetQuestGiver() > 0)
-			GetCurrentZone()->SendSpawnChanges(player->player_quests[id]->GetQuestGiver(), this, false, true);
+			GetCurrentZone()->SendSpawnChangesByDBID(player->player_quests[id]->GetQuestGiver(), this, false, true);
 		if(send_update) {
 			LogWrite(CCLIENT__DEBUG, 0, "Client", "Send Quest Journal...");
 			SendQuestJournal();
@@ -4655,7 +4655,7 @@ void Client::SendQuestUpdate(Quest* quest){
 			lua_interface->CallQuestFunction(quest, quest->GetCompleteAction(), player);
 		if(quest->GetCompleted()){
 			if (quest->GetQuestReturnNPC() > 0)
-				GetCurrentZone()->SendSpawnChanges(quest->GetQuestReturnNPC(), this, false, true);
+				GetCurrentZone()->SendSpawnChangesByDBID(quest->GetQuestReturnNPC(), this, false, true);
 			if (quest->GetCompletedFlag())
 				quest->SetCompletedFlag(false);
 		}
@@ -4977,7 +4977,7 @@ void Client::GiveQuestReward(Quest* quest){
 		SimpleMessage(type, message.c_str());
 	}
 	if(quest->GetQuestGiver() > 0)
-		GetCurrentZone()->SendSpawnChanges(quest->GetQuestGiver(), this, false, true);
+		GetCurrentZone()->SendSpawnChangesByDBID(quest->GetQuestGiver(), this, false, true);
 	RemovePlayerQuest(quest->GetQuestID(), true, false);
 
 }
@@ -8282,16 +8282,17 @@ void Client::SendSpawnChanges(set<Spawn*>& spawns) {
 			pos_size = 0;
 			vis_size = 0;
 		}
-		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)
 		{
-			GetPlayer()->GetZone()->SendSpawnChanges(spawn->GetID(), this, false, false);
+			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->info_changed) {
 			auto info_change = spawn->spawn_info_changes_ex(GetPlayer(), GetVersion());
 

+ 4 - 6
EQ2/source/WorldServer/zoneserver.cpp

@@ -1710,8 +1710,8 @@ void ZoneServer::SendSpawnVisualState(Spawn* spawn, int16 type){
 	MClientList.releasereadlock(__FUNCTION__, __LINE__);
 }
 
-void ZoneServer::SendSpawnChanges(int32 spawn_id, Client* client, bool override_changes, bool override_vis_changes){
-	Spawn* spawn = GetSpawnByDatabaseID(spawn_id);
+void ZoneServer::SendSpawnChangesByDBID(int32 db_id, Client* client, bool override_changes, bool override_vis_changes){
+	Spawn* spawn = GetSpawnByID(db_id);
 	if(spawn && (spawn->changed || override_changes || override_vis_changes))
 		SendSpawnChanges(spawn, client, override_changes, override_vis_changes);
 }
@@ -1844,10 +1844,8 @@ void ZoneServer::SendSpawnChanges(){
 	int count = 0;
 	while(spawn_iter.Next()){		
 		spawn = GetSpawnByID(spawn_iter->value);
-		if(spawn && spawn->changed){
-			if(!spawn->IsPlayer() || (spawn->IsPlayer() && (spawn->info_changed || spawn->vis_changed))){
-					spawns_to_send.insert(spawn);
-			}
+		if(spawn){
+			spawns_to_send.insert(spawn);
 		}
 		if (!spawn)
 			changed_spawns.Remove(spawn_iter->value);

+ 1 - 1
EQ2/source/WorldServer/zoneserver.h

@@ -290,7 +290,7 @@ public:
 	void	SendSpawnChanges();
 	void	SendSpawnChanges(Spawn* spawn);
 	void	SendSpawnChanges(Spawn* spawn, Client* client, bool override_changes = false, bool override_vis_changes = false);
-	void	SendSpawnChanges(int32 spawn_id, Client* client, bool override_changes = false, bool override_vis_changes = false);
+	void	SendSpawnChangesByDBID(int32 spawn_id, Client* client, bool override_changes = false, bool override_vis_changes = false);
 	void	SendPlayerPositionChanges(Player* player);
 	
 	void	UpdateVitality(float amount);