From 7bd4838bfea8653657864ef97bcc3445f4b8b9ed Mon Sep 17 00:00:00 2001 From: Ovalord <1Don7H4v3@m41L.com> Date: Thu, 21 Dec 2017 23:38:21 +0100 Subject: [PATCH] Scripts/SFK: fixed a typo that was causing doors not being saved properly * for now we remove the gossip flag while the faction npc's are moving. --- .../instance_shadowfang_keep.cpp | 13 ++++--- .../ShadowfangKeep/shadowfang_keep.cpp | 21 ++++++++++-- .../ShadowfangKeep/shadowfang_keep.h | 34 +++++++++---------- 3 files changed, 43 insertions(+), 25 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp index 5c229da9c77..83d31baa35f 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp @@ -37,9 +37,9 @@ ObjectData const creatureData[] = ObjectData const gameobjectData[] = { - { DATA_COURTYARD_DOOR, GO_COURTYARD_DOOR }, - { DATA_SORCERER_GATE, GO_SORCERER_DOOR }, - { DATA_ARUGAL_DOOR, GO_ARUGAL_DOOR }, + { GO_COURTYARD_DOOR, DATA_COURTYARD_DOOR, }, + { GO_SORCERER_DOOR, DATA_SORCERER_GATE, }, + { GO_ARUGAL_DOOR, DATA_ARUGAL_DOOR, }, { 0, 0 } // END }; @@ -88,6 +88,10 @@ public: SetupInstance(); _instanceSpawned = true; } + + if (GetData(DATA_GODFREY_INTRO) != DONE) + if (GameObject* door = GetGameObject(DATA_ARUGAL_DOOR)) + door->SetGoState(GO_STATE_READY); } void SetupInstance() // set up instance state depending on the progression within the instance after unloading the instance for some reason (eg. crash) @@ -111,9 +115,8 @@ public: HandleSpringvaleDeath(); else if (GetBossState(DATA_BARON_ASHBURY) == DONE && GetBossState(DATA_BARON_SILVERLAINE) == DONE && GetBossState(DATA_COMMANDER_SPRINGVALE) == DONE && GetBossState(DATA_LORD_WALDEN) == DONE - && GetBossState(DATA_LORD_GODFREY) != DONE) + && GetBossState(DATA_LORD_GODFREY) != DONE) HandleWaldenDeath(); - break; case HORDE: if (_teamInInstance == HORDE) diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp index 8f2f35cc771..4b47e3e5876 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp @@ -435,9 +435,9 @@ class npc_sfk_packleader_ivar_bloodfang : public CreatureScript public: npc_sfk_packleader_ivar_bloodfang() : CreatureScript("npc_sfk_packleader_ivar_bloodfang") { } - struct npc_sfk_packleader_ivar_bloodfangAI : public npc_escortAI + struct npc_sfk_packleader_ivar_bloodfangAI : public ScriptedAI { - npc_sfk_packleader_ivar_bloodfangAI(Creature* creature) : npc_escortAI(creature), instance(creature->GetInstanceScript()), summons(me) { } + npc_sfk_packleader_ivar_bloodfangAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()), summons(me) { } InstanceScript* instance; EventMap events; @@ -448,7 +448,6 @@ public: summons.Summon(summon); } - void DoAction(int32 action) override { switch (action) @@ -472,6 +471,7 @@ public: events.ScheduleEvent(EVENT_FACE_DIRECTION_4, Seconds(4) + Milliseconds(500)); break; case ACTION_WALDEN_DEAD: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MovePoint(0, IvarWalkPos1, false); events.ScheduleEvent(EVENT_TALK_WALDEN_DEAD, Seconds(7)); break; @@ -504,6 +504,7 @@ public: switch (eventId) { case EVENT_MOVE_TO_BALCONY_1: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MovePath(PATH_IVAR_ASHBURY_BALCONY, false); events.ScheduleEvent(EVENT_JUMP_TO_ASHUBRY, Seconds(3) + Milliseconds(500)); break; @@ -512,6 +513,7 @@ public: events.ScheduleEvent(EVENT_FACE_DIRECTION, Seconds(2) + Milliseconds(500)); break; case EVENT_FACE_DIRECTION: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFacingTo(7.497746f); events.ScheduleEvent(EVENT_TALK_ASHBURY_DEAD_1, Seconds(2) + Milliseconds(700)); break; @@ -553,6 +555,7 @@ public: events.ScheduleEvent(EVENT_MOVE_TO_DOOR, Seconds(8)); break; case EVENT_MOVE_TO_DOOR: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MoveSmoothPath(0, SKIvarPath2, 11); events.ScheduleEvent(EVENT_TALK_OPEN, Seconds(10)); break; @@ -573,6 +576,7 @@ public: events.ScheduleEvent(EVENT_FACE_DIRECTION_3, Seconds(7)); break; case EVENT_FACE_DIRECTION_3: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFacingTo(9.010136f); break; case EVENT_TALK_SILVERLAINE_DEAD: @@ -613,6 +617,7 @@ public: events.ScheduleEvent(EVENT_FACE_DIRECTION_5, Seconds(11)); break; case EVENT_FACE_DIRECTION_5: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFacingTo(9.053417f); events.ScheduleEvent(EVENT_OPEN_GATE, Seconds(3)); break; @@ -620,6 +625,7 @@ public: instance->SetData(DATA_WALDEN_OUTRO, DONE); break; case EVENT_MOVE_TO_ARUGAL_DOOR: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MovePoint(0, IvarArugalDoorPos); events.ScheduleEvent(EVENT_TALK_DOOR_CLOSED_1, Seconds(6)); break; @@ -641,6 +647,7 @@ public: events.ScheduleEvent(EVENT_TALK_FINAL, Seconds(2)); break; case EVENT_TALK_FINAL: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFacingTo(9.029113f); Talk(SAY_IVAR_ROOM_OPEN); break; @@ -914,10 +921,12 @@ public: events.ScheduleEvent(EVENT_FACE_DIRECTION_3, Seconds(6)); break; case ACTION_WALDEN_DEAD: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MoveSmoothPath(0, SKBelmontPath5, 7); events.ScheduleEvent(EVENT_TALK_WALDEN_DEAD, Seconds(7) + Milliseconds(300)); break; case ACTION_GODFREY_INTRO: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MoveSmoothPath(0, SKBelmontFinalPath, 8); events.ScheduleEvent(EVENT_TALK_DOOR_CLOSED_1, Seconds(11)); events.ScheduleEvent(EVENT_MOVE_TO_ARUGAL_DOOR, Seconds(6)); @@ -952,6 +961,7 @@ public: { // Event chain after Baron Ashbury's death case EVENT_WALK_STAIRS_1: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MovePoint(POINT_WALK_STAIRS_1, SKBelmontPath1[0]); break; case EVENT_WALK_STAIRS_2: @@ -959,6 +969,7 @@ public: me->GetMotionMaster()->MoveJump(SKBelmontPath1[1], 10.0f, 10.0f); break; case EVENT_FACE_DIRECTION: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFacingTo(1.308997f); events.ScheduleEvent(EVENT_TALK_ASHBURY_DEAD_1, Seconds(2) + Milliseconds(400)); break; @@ -971,6 +982,7 @@ public: events.ScheduleEvent(EVENT_MOVE_TO_DOOR, Seconds(2)); break; case EVENT_MOVE_TO_DOOR: + me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->GetMotionMaster()->MoveSmoothPath(0, SKBelmontPath2, 10); events.ScheduleEvent(EVENT_TALK_OPEN, Seconds(10)); break; @@ -989,6 +1001,7 @@ public: events.ScheduleEvent(EVENT_FACE_DIRECTION_2, Seconds(11)); break; case EVENT_FACE_DIRECTION_2: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFacingTo(9.077573f); break; // Event chain after Baron Silverlaine's death @@ -1038,6 +1051,7 @@ public: events.ScheduleEvent(EVENT_FACE_DIRECTION_4, Seconds(6)); break; case EVENT_FACE_DIRECTION_4: + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); me->SetFacingTo(9.055001f); events.ScheduleEvent(EVENT_OPEN_GATE, Seconds(1)); break; @@ -1055,6 +1069,7 @@ public: case EVENT_OPEN_ROOM: instance->SetData(DATA_GODFREY_INTRO, DONE); Talk(SAY_BELMONT_DOOR_OPENED); + me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); if (Creature* cromush = me->FindNearestCreature(NPC_HIGH_WARLORD_CROMUSH, 10.0f, true)) cromush->AI()->DoAction(ACTION_CROMUSH_POISONED); events.ScheduleEvent(EVENT_TALK_FINAL, Seconds(12)); diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h index 37c071cfdf3..12ad964ae8d 100644 --- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h +++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.h @@ -96,24 +96,24 @@ enum SKGameObjectIds enum SKDataTypes { - DATA_BARON_ASHBURY = 1, - DATA_BARON_SILVERLAINE = 2, - DATA_COMMANDER_SPRINGVALE = 3, - DATA_LORD_WALDEN = 4, - DATA_LORD_GODFREY = 5, - DATA_APOTHECARY_HUMMEL = 6, + DATA_BARON_ASHBURY = 0, + DATA_BARON_SILVERLAINE = 1, + DATA_COMMANDER_SPRINGVALE = 2, + DATA_LORD_WALDEN = 3, + DATA_LORD_GODFREY = 4, + DATA_APOTHECARY_HUMMEL = 5, - DATA_TEAM_IN_INSTANCE = 7, - DATA_PACKLEADER_IVAR = 8, - DATA_DEATHSTALKER_BELMONT = 9, - DATA_ASHBURY_OUTRO = 10, - DATA_WALDEN_INTRO = 11, - DATA_WALDEN_OUTRO = 12, - DATA_GODFREY_INTRO = 13, - DATA_ARUGAL_DOOR = 14, - DATA_SORCERER_GATE = 15, - DATA_COURTYARD_DOOR = 16, - DATA_HIGH_WARLORD_CROMUSH = 17 + DATA_TEAM_IN_INSTANCE = 6, + DATA_PACKLEADER_IVAR = 7, + DATA_DEATHSTALKER_BELMONT = 8, + DATA_ASHBURY_OUTRO = 9, + DATA_WALDEN_INTRO = 10, + DATA_WALDEN_OUTRO = 11, + DATA_GODFREY_INTRO = 12, + DATA_ARUGAL_DOOR = 13, + DATA_SORCERER_GATE = 14, + DATA_COURTYARD_DOOR = 15, + DATA_HIGH_WARLORD_CROMUSH = 16 }; enum SKSummonGroups