From 80f539e8c17de65dcf2ad526ed7b797d52769770 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Sun, 29 Oct 2023 23:47:27 -0500 Subject: [PATCH] Make sure packet stuff is aware of instance_id --- common/servertalk.h | 6 +++--- zone/questmgr.cpp | 11 +++++++---- zone/worldserver.cpp | 23 +++++++++++------------ 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/common/servertalk.h b/common/servertalk.h index f27f2a46a..1e286bfc7 100644 --- a/common/servertalk.h +++ b/common/servertalk.h @@ -1142,10 +1142,10 @@ struct ServerInstanceUpdateTime_Struct uint32 new_duration; }; -struct ServerSpawnStatusChange_Struct -{ +struct ServerSpawnStatusChange_Struct { uint32 id; - bool new_status; + bool new_status; + uint32 instance_id; }; struct ServerQGlobalUpdate_Struct diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index a4d5130eb..ae67ed79b 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -362,8 +362,9 @@ void QuestManager::enable_spawn2(uint32 spawn2_id) database.UpdateSpawn2Status(spawn2_id, 1, zone->GetInstanceID()); auto pack = new ServerPacket(ServerOP_SpawnStatusChange, sizeof(ServerSpawnStatusChange_Struct)); auto *ssc = (ServerSpawnStatusChange_Struct *) pack->pBuffer; - ssc->id = spawn2_id; - ssc->new_status = true; + ssc->id = spawn2_id; + ssc->new_status = true; + scc->instance_id = zone->GetInstanceID(); worldserver.SendPacket(pack); safe_delete(pack); } @@ -373,8 +374,10 @@ void QuestManager::disable_spawn2(uint32 spawn2_id) database.UpdateSpawn2Status(spawn2_id, 0, zone->GetInstanceID()); auto pack = new ServerPacket(ServerOP_SpawnStatusChange, sizeof(ServerSpawnStatusChange_Struct)); auto *ssc = (ServerSpawnStatusChange_Struct *) pack->pBuffer; - ssc->id = spawn2_id; - ssc->new_status = false; + ssc->id = spawn2_id; + ssc->new_status = false; + scc->instance_id = zone->GetInstanceID(); + worldserver.SendPacket(pack); safe_delete(pack); } diff --git a/zone/worldserver.cpp b/zone/worldserver.cpp index 291848a9f..e1bc27cbe 100644 --- a/zone/worldserver.cpp +++ b/zone/worldserver.cpp @@ -1729,28 +1729,27 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) if (zone) { ServerSpawnStatusChange_Struct *ssc = (ServerSpawnStatusChange_Struct*)pack->pBuffer; - LinkedListIterator iterator(zone->spawn2_list); + if (ssc->instance_id != zone->GetInstanceID()) { + break; + } + + LinkedListIterator iterator(zone->spawn2_list); iterator.Reset(); Spawn2 *found_spawn = nullptr; - while (iterator.MoreElements()) - { - Spawn2* cur = iterator.GetData(); - if (cur->GetID() == ssc->id) - { + while (iterator.MoreElements()) { + Spawn2 *cur = iterator.GetData(); + if (cur->GetID() == ssc->id) { found_spawn = cur; break; } iterator.Advance(); } - if (found_spawn) - { - if (ssc->new_status == 0) - { + if (found_spawn) { + if (ssc->new_status == 0) { found_spawn->Disable(); } - else - { + else { found_spawn->Enable(); } }