From 65afafe3490b1e56d6f7f72b6a9be91be06d4a61 Mon Sep 17 00:00:00 2001 From: Killerwife Date: Tue, 29 Dec 2020 16:53:10 +0100 Subject: [PATCH] ZA: Safeguard starting npc event again through saving in DB Perhaps in future, make NPCs not respawn? --- .../eastern_kingdoms/zulaman/zulaman.cpp | 12 ++++++++-- .../eastern_kingdoms/zulaman/zulaman.h | 14 +++++++---- .../zulaman/zulamanScripts.cpp | 24 +++++++++++++++++++ 3 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.cpp b/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.cpp index d426db20ba1..ccc7d8029a5 100644 --- a/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.cpp +++ b/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.cpp @@ -478,6 +478,12 @@ void instance_zulaman::SetData(uint32 type, uint32 data) } } + break; + case TYPE_TANZAR: + case TYPE_KRAZ: + case TYPE_ASHLI: + case TYPE_HARKOR: + m_auiEncounter[type] = data; break; case TYPE_RUN_EVENT_TIME: m_auiEncounter[type] = data; @@ -512,7 +518,8 @@ void instance_zulaman::SetData(uint32 type, uint32 data) std::ostringstream saveStream; saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3] << " " << m_auiEncounter[4] << " " << m_auiEncounter[5] << " " - << m_auiEncounter[6] << " " << m_auiEncounter[7]; + << m_auiEncounter[6] << " " << m_auiEncounter[7] << " " << m_auiEncounter[8] << " " + << m_auiEncounter[9] << " " << m_auiEncounter[10] << " " << m_auiEncounter[11]; m_strInstData = saveStream.str(); @@ -533,7 +540,8 @@ void instance_zulaman::Load(const char* chrIn) std::istringstream loadStream(chrIn); loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3] - >> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6] >> m_auiEncounter[7]; + >> m_auiEncounter[4] >> m_auiEncounter[5] >> m_auiEncounter[6] >> m_auiEncounter[7] + >> m_auiEncounter[8] >> m_auiEncounter[9] >> m_auiEncounter[10] >> m_auiEncounter[11]; // Skip m_auiEncounter[7], to start the time event properly if needed for (uint8 i = 0; i < MAX_ENCOUNTER - 1; ++i) diff --git a/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.h b/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.h index 01f4916e638..7b119ac0b1b 100644 --- a/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.h +++ b/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulaman.h @@ -44,11 +44,17 @@ enum InstanceZA TYPE_HALAZZI = 4, TYPE_MALACRASS = 5, TYPE_ZULJIN = 6, - TYPE_RUN_EVENT_TIME = 7, // Must be MAX_ENCOUNTER -1 - TYPE_AKILZON_GAUNTLET = 8, + TYPE_RUN_EVENT_TIME = 7, - TYPE_RAND_VENDOR_1 = 9, - TYPE_RAND_VENDOR_2 = 10, + TYPE_TANZAR = 8, + TYPE_KRAZ = 9, + TYPE_ASHLI = 10, + TYPE_HARKOR = 11, // Must be MAX_ENCOUNTER -1 + + TYPE_AKILZON_GAUNTLET = 12, + + TYPE_RAND_VENDOR_1 = 13, + TYPE_RAND_VENDOR_2 = 14, NPC_AKILZON = 23574, NPC_NALORAKK = 23576, diff --git a/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulamanScripts.cpp b/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulamanScripts.cpp index 6c87b65c839..d72add08f0c 100644 --- a/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulamanScripts.cpp +++ b/src/game/AI/ScriptDevAI/scripts/eastern_kingdoms/zulaman/zulamanScripts.cpp @@ -902,6 +902,9 @@ struct npc_harkorAI : public ScriptedAI itr->SetRespawnTime(7 * DAY); } + if (m_instance) + m_instance->SetData(TYPE_HARKOR, DONE); + m_uiEventTimer = 0; m_uiEvent = 0; break; @@ -971,6 +974,9 @@ struct npc_harkorAI : public ScriptedAI void StartEvent() { + if (m_instance && m_instance->GetData(TYPE_HARKOR) == DONE) + return; + m_bChestEventInProgress = true; m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -1213,6 +1219,9 @@ struct npc_tanzarAI : public ScriptedAI pTrunk->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_LOCKED); } + if (m_instance) + m_instance->SetData(TYPE_TANZAR, DONE); + m_uiEventTimer = 0; m_uiEvent = 0; break; @@ -1302,6 +1311,9 @@ struct npc_tanzarAI : public ScriptedAI void StartEvent() { + if (m_instance && m_instance->GetData(TYPE_TANZAR) == DONE) + return; + m_bChestEventInProgress = true; m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -1560,6 +1572,9 @@ struct npc_krazAI : public ScriptedAI itr->SetRespawnTime(7 * DAY); } + if (m_instance) + m_instance->SetData(TYPE_KRAZ, DONE); + lCoinList.clear(); m_uiEventTimer = 1000; @@ -1591,6 +1606,9 @@ struct npc_krazAI : public ScriptedAI void StartEvent() { + if (m_instance && m_instance->GetData(TYPE_KRAZ) == DONE) + return; + m_bChestEventInProgress = true; m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); @@ -1909,10 +1927,16 @@ struct npc_ashliAI : public ScriptedAI if (GameObject* pVase = GetClosestGameObjectWithEntry(pTarget, GO_ASHLIS_VASE, 10.0f)) pVase->Delete(); + + if (m_instance) + m_instance->SetData(TYPE_ASHLI, DONE); } void StartEvent() { + if (m_instance && m_instance->GetData(TYPE_ASHLI) == DONE) + return; + m_bChestEventInProgress = true; m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);