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.
This commit is contained in:
Ovalord
2017-12-21 23:38:21 +01:00
parent 421316124c
commit 7bd4838bfe
3 changed files with 43 additions and 25 deletions

View File

@@ -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)

View File

@@ -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));

View File

@@ -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