mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 09:17:36 +01:00
Scripts/Misc: Replace some unsafe WorldObject* class members in scripts with ObjectGuid
Replace some unsafe WorldObject* class members and derived types in scripts with ObjectGuid. Code cleanup.
This commit is contained in:
@@ -579,105 +579,6 @@ enum DughalQuests
|
||||
#define SAY_DUGHAL_FREE "Thank you, $N! I'm free!!!"
|
||||
#define GOSSIP_DUGHAL "You're free, Dughal! Get out of here!"
|
||||
|
||||
/*
|
||||
class npc_dughal_stormwing : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_dughal_stormwing() : CreatureScript("npc_dughal_stormwing") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
npc_dughal_stormwingAI* dughal_stormwingAI = new npc_dughal_stormwingAI(creature);
|
||||
|
||||
dughal_stormwingAI->AddWaypoint(0, 280.42f, -82.86f, -77.12f, 0);
|
||||
dughal_stormwingAI->AddWaypoint(1, 287.64f, -87.01f, -76.79f, 0);
|
||||
dughal_stormwingAI->AddWaypoint(2, 354.63f, -64.95f, -67.53f, 0);
|
||||
|
||||
return dughal_stormwingAI;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
|
||||
{
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
if (action == GOSSIP_ACTION_INFO_DEF + 1)
|
||||
{
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
CAST_AI(npc_escort::npc_escortAI, (creature->AI()))->Start(false, true, player->GetGUID());
|
||||
creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_IN_PROGRESS);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player* player, Creature* creature) override
|
||||
{
|
||||
if (player->GetQuestStatus(QUEST_JAIL_BREAK) == QUEST_STATUS_INCOMPLETE && instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS)
|
||||
{
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_DUGHAL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
player->SEND_GOSSIP_MENU(2846, creature->GetGUID());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
struct npc_dughal_stormwingAI : public npc_escortAI
|
||||
{
|
||||
npc_dughal_stormwingAI(Creature* creature) : npc_escortAI(creature) { }
|
||||
|
||||
void WaypointReached(uint32 waypointId) override
|
||||
{
|
||||
switch (waypointId)
|
||||
{
|
||||
case 0:
|
||||
me->Say(SAY_DUGHAL_FREE, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 1:
|
||||
instance->SetData(DATA_DUGHAL, ENCOUNTER_STATE_OBJECTIVE_COMPLETED);
|
||||
break;
|
||||
case 2:
|
||||
me->SetVisible(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
instance->SetData(DATA_DUGHAL, ENCOUNTER_STATE_ENDED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who) override { }
|
||||
void Reset() override { }
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
if (IsBeingEscorted && killer == me)
|
||||
{
|
||||
me->SetVisible(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
instance->SetData(DATA_DUGHAL, ENCOUNTER_STATE_ENDED);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED) return;
|
||||
if ((instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_FAILED || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_ENDED)&& instance->GetData(DATA_DUGHAL) == ENCOUNTER_STATE_ENDED)
|
||||
{
|
||||
me->SetVisible(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
me->SetVisible(true);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
// npc_marshal_windsor
|
||||
#define SAY_WINDSOR_AGGRO1 "You locked up the wrong Marshal. Prepare to be destroyed!"
|
||||
#define SAY_WINDSOR_AGGRO2 "I bet you're sorry now, aren't you !?!!"
|
||||
@@ -694,168 +595,6 @@ enum MarshalWindsor
|
||||
NPC_REGINALD_WINDSOR = 9682
|
||||
};
|
||||
|
||||
/*
|
||||
Player* playerStart;
|
||||
class npc_marshal_windsor : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_marshal_windsor() : CreatureScript("npc_marshal_windsor") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
npc_marshal_windsorAI* marshal_windsorAI = new npc_marshal_windsorAI(creature);
|
||||
|
||||
marshal_windsorAI->AddWaypoint(0, 316.336f, -225.528f, -77.7258f, 7000);
|
||||
marshal_windsorAI->AddWaypoint(1, 316.336f, -225.528f, -77.7258f, 2000);
|
||||
marshal_windsorAI->AddWaypoint(2, 322.96f, -207.13f, -77.87f, 0);
|
||||
marshal_windsorAI->AddWaypoint(3, 281.05f, -172.16f, -75.12f, 0);
|
||||
marshal_windsorAI->AddWaypoint(4, 272.19f, -139.14f, -70.61f, 0);
|
||||
marshal_windsorAI->AddWaypoint(5, 283.62f, -116.09f, -70.21f, 0);
|
||||
marshal_windsorAI->AddWaypoint(6, 296.18f, -94.30f, -74.08f, 0);
|
||||
marshal_windsorAI->AddWaypoint(7, 294.57f, -93.11f, -74.08f, 0);
|
||||
marshal_windsorAI->AddWaypoint(8, 314.31f, -74.31f, -76.09f, 0);
|
||||
marshal_windsorAI->AddWaypoint(9, 360.22f, -62.93f, -66.77f, 0);
|
||||
marshal_windsorAI->AddWaypoint(10, 383.38f, -69.40f, -63.25f, 0);
|
||||
marshal_windsorAI->AddWaypoint(11, 389.99f, -67.86f, -62.57f, 0);
|
||||
marshal_windsorAI->AddWaypoint(12, 400.98f, -72.01f, -62.31f, 0);
|
||||
marshal_windsorAI->AddWaypoint(13, 404.22f, -62.30f, -63.50f, 2300);
|
||||
marshal_windsorAI->AddWaypoint(14, 404.22f, -62.30f, -63.50f, 1500);
|
||||
marshal_windsorAI->AddWaypoint(15, 407.65f, -51.86f, -63.96f, 0);
|
||||
marshal_windsorAI->AddWaypoint(16, 403.61f, -51.71f, -63.92f, 1000);
|
||||
marshal_windsorAI->AddWaypoint(17, 403.61f, -51.71f, -63.92f, 2000);
|
||||
marshal_windsorAI->AddWaypoint(18, 403.61f, -51.71f, -63.92f, 1000);
|
||||
marshal_windsorAI->AddWaypoint(19, 403.61f, -51.71f, -63.92f, 0);
|
||||
|
||||
return marshal_windsorAI;
|
||||
}
|
||||
|
||||
bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
|
||||
{
|
||||
if (quest->GetQuestId() == 4322)
|
||||
{
|
||||
PlayerStart = player;
|
||||
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
{
|
||||
CAST_AI(npc_escort::npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
|
||||
instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_IN_PROGRESS);
|
||||
creature->setFaction(11);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
struct npc_marshal_windsorAI : public npc_escortAI
|
||||
{
|
||||
npc_marshal_windsorAI(Creature* creature) : npc_escortAI(creature)
|
||||
{
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 waypointId) override
|
||||
{
|
||||
switch (waypointId)
|
||||
{
|
||||
case 1:
|
||||
me->Say(SAY_WINDSOR_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 7:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_POINT);
|
||||
me->Say(SAY_WINDSOR_4_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
IsOnHold = true;
|
||||
break;
|
||||
case 10:
|
||||
me->setFaction(534);
|
||||
break;
|
||||
case 12:
|
||||
me->Say(SAY_WINDSOR_6, LANG_UNIVERSAL, PlayerGUID);
|
||||
instance->SetData(DATA_SUPPLY_ROOM, ENCOUNTER_STATE_IN_PROGRESS);
|
||||
break;
|
||||
case 13:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_USESTANDING);//EMOTE_STATE_WORK
|
||||
break;
|
||||
case 14:
|
||||
instance->SetData(DATA_GATE_SR, 0);
|
||||
me->setFaction(11);
|
||||
break;
|
||||
case 16:
|
||||
me->Say(SAY_WINDSOR_9, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 17:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_USESTANDING);//EMOTE_STATE_WORK
|
||||
break;
|
||||
case 18:
|
||||
instance->SetData(DATA_GATE_SC, 0);
|
||||
break;
|
||||
case 19:
|
||||
me->SetVisible(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
me->SummonCreature(NPC_REGINALD_WINDSOR, 403.61f, -51.71f, -63.92f, 3.600434f, TEMPSUMMON_DEAD_DESPAWN, 0);
|
||||
instance->SetData(DATA_SUPPLY_ROOM, ENCOUNTER_STATE_ENDED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who) override
|
||||
{
|
||||
switch (urand(0, 2))
|
||||
{
|
||||
case 0:
|
||||
me->Say(SAY_WINDSOR_AGGRO1, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 1:
|
||||
me->Say(SAY_WINDSOR_AGGRO2, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 2:
|
||||
me->Say(SAY_WINDSOR_AGGRO3, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Reset() override { }
|
||||
|
||||
void JustDied(Unit* slayer) override
|
||||
{
|
||||
instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_FAILED);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
return;
|
||||
|
||||
if (instance->GetData(DATA_DUGHAL) == ENCOUNTER_STATE_OBJECTIVE_COMPLETED)
|
||||
SetEscortPaused(false);
|
||||
|
||||
if (!instance->GetData(DATA_GATE_D) && instance->GetData(DATA_DUGHAL) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
{
|
||||
me->Say(SAY_WINDSOR_4_2, LANG_UNIVERSAL, PlayerGUID);
|
||||
instance->SetData(DATA_DUGHAL, ENCOUNTER_STATE_BEFORE_START);
|
||||
}
|
||||
if (instance->GetData(DATA_DUGHAL) == ENCOUNTER_STATE_OBJECTIVE_COMPLETED)
|
||||
{
|
||||
me->Say(SAY_WINDSOR_4_3, LANG_UNIVERSAL, PlayerGUID);
|
||||
instance->SetData(DATA_DUGHAL, ENCOUNTER_STATE_ENDED);
|
||||
}
|
||||
if ((instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_FAILED || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_ENDED)&& instance->GetData(DATA_SUPPLY_ROOM) == ENCOUNTER_STATE_ENDED)
|
||||
{
|
||||
me->SetVisible(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
me->SetVisible(true);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
// npc_marshal_reginald_windsor
|
||||
#define SAY_REGINALD_WINDSOR_0_1 "Can you feel the power, $N??? It's time to ROCK!"
|
||||
#define SAY_REGINALD_WINDSOR_0_2 "Now we just have to free Tobias and we can get out of here. This way!"
|
||||
@@ -878,320 +617,6 @@ enum MarshalReginaldWindor
|
||||
NPC_CREST_KILLER = 9680
|
||||
};
|
||||
|
||||
/*
|
||||
int wp = 0;
|
||||
class npc_marshal_reginald_windsor : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_marshal_reginald_windsor() : CreatureScript("npc_marshal_reginald_windsor") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
npc_marshal_reginald_windsorAI* marshal_reginald_windsorAI = new npc_marshal_reginald_windsorAI(creature);
|
||||
|
||||
marshal_reginald_windsorAI->AddWaypoint(0, 403.61f, -52.71f, -63.92f, 4000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(1, 403.61f, -52.71f, -63.92f, 4000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(2, 406.33f, -54.87f, -63.95f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(3, 407.99f, -73.91f, -62.26f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(4, 557.03f, -119.71f, -61.83f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(5, 573.40f, -124.39f, -65.07f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(6, 593.91f, -130.29f, -69.25f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(7, 593.21f, -132.16f, -69.25f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(8, 593.21f, -132.16f, -69.25f, 3000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(9, 622.81f, -135.55f, -71.92f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(10, 634.68f, -151.29f, -70.32f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(11, 635.06f, -153.25f, -70.32f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(12, 635.06f, -153.25f, -70.32f, 3000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(13, 635.06f, -153.25f, -70.32f, 1500);
|
||||
marshal_reginald_windsorAI->AddWaypoint(14, 655.25f, -172.39f, -73.72f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(15, 654.79f, -226.30f, -83.06f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(16, 622.85f, -268.85f, -83.96f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(17, 579.45f, -275.56f, -80.44f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(18, 561.19f, -266.85f, -75.59f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(19, 547.91f, -253.92f, -70.34f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(20, 549.20f, -252.40f, -70.34f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(21, 549.20f, -252.40f, -70.34f, 4000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(22, 555.33f, -269.16f, -74.40f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(23, 554.31f, -270.88f, -74.40f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(24, 554.31f, -270.88f, -74.40f, 4000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(25, 536.10f, -249.60f, -67.47f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(26, 520.94f, -216.65f, -59.28f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(27, 505.99f, -148.74f, -62.17f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(28, 484.21f, -56.24f, -62.43f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(29, 470.39f, -6.01f, -70.10f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(30, 451.27f, 30.85f, -70.07f, 0);
|
||||
marshal_reginald_windsorAI->AddWaypoint(31, 452.45f, 29.85f, -70.37f, 1500);
|
||||
marshal_reginald_windsorAI->AddWaypoint(32, 452.45f, 29.85f, -70.37f, 7000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(33, 452.45f, 29.85f, -70.37f, 10000);
|
||||
marshal_reginald_windsorAI->AddWaypoint(34, 451.27f, 31.85f, -70.07f, 0);
|
||||
|
||||
return marshal_reginald_windsorAI;
|
||||
}
|
||||
|
||||
struct npc_marshal_reginald_windsorAI : public npc_escortAI
|
||||
{
|
||||
npc_marshal_reginald_windsorAI(Creature* creature) : npc_escortAI(creature)
|
||||
{
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 waypointId) override
|
||||
{
|
||||
wp = waypointId;
|
||||
switch (waypointId)
|
||||
{
|
||||
case 0:
|
||||
me->setFaction(11);
|
||||
me->Say(SAY_REGINALD_WINDSOR_0_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 1:
|
||||
me->Say(SAY_REGINALD_WINDSOR_0_2, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 7:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_POINT);
|
||||
me->Say(SAY_REGINALD_WINDSOR_5_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
IsOnHold=true;
|
||||
break;
|
||||
case 8:
|
||||
me->Say(SAY_REGINALD_WINDSOR_5_2, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 11:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_POINT);
|
||||
me->Say(SAY_REGINALD_WINDSOR_7_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
IsOnHold=true;
|
||||
break;
|
||||
case 12:
|
||||
me->Say(SAY_REGINALD_WINDSOR_7_2, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 13:
|
||||
me->Say(SAY_REGINALD_WINDSOR_7_3, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 20:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_POINT);
|
||||
me->Say(SAY_REGINALD_WINDSOR_13_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
IsOnHold=true;
|
||||
break;
|
||||
case 21:
|
||||
me->Say(SAY_REGINALD_WINDSOR_13_3, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 23:
|
||||
me->HandleEmoteCommand(EMOTE_STATE_POINT);
|
||||
me->Say(SAY_REGINALD_WINDSOR_14_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
IsOnHold=true;
|
||||
break;
|
||||
case 24:
|
||||
me->Say(SAY_REGINALD_WINDSOR_14_2, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 31:
|
||||
me->Say(SAY_REGINALD_WINDSOR_20_1, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 32:
|
||||
me->Say(SAY_REGINALD_WINDSOR_20_2, LANG_UNIVERSAL, PlayerGUID);
|
||||
PlayerStart->GroupEventHappens(QUEST_JAIL_BREAK, me);
|
||||
instance->SetData(DATA_SHILL, ENCOUNTER_STATE_ENDED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MoveInLineOfSight(Unit* who) override
|
||||
|
||||
{
|
||||
if (HasEscortState(STATE_ESCORT_ESCORTING))
|
||||
return;
|
||||
|
||||
if (Player* player = who->ToPlayer())
|
||||
{
|
||||
if (player->GetQuestStatus(4322) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
float Radius = 10.0f;
|
||||
if (me->IsWithinDistInMap(who, Radius))
|
||||
{
|
||||
SetEscortPaused(false);
|
||||
Start(true, false, who->GetGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void EnterCombat(Unit* who) override
|
||||
{
|
||||
switch (urand(0, 2))
|
||||
{
|
||||
case 0:
|
||||
me->Say(SAY_WINDSOR_AGGRO1, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 1:
|
||||
me->Say(SAY_WINDSOR_AGGRO2, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 2:
|
||||
me->Say(SAY_WINDSOR_AGGRO3, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
}
|
||||
}
|
||||
void Reset() override { }
|
||||
|
||||
void JustDied(Unit* slayer) override
|
||||
{
|
||||
instance->SetData(DATA_QUEST_JAIL_BREAK, ENCOUNTER_STATE_FAILED);
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
return;
|
||||
|
||||
if (wp == 7)
|
||||
{
|
||||
if (!instance->GetData(DATA_GATE_J) && instance->GetData(DATA_JAZ) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
{
|
||||
instance->SetData(DATA_NPC_JAZ, 1);
|
||||
instance->SetData(DATA_JAZ, ENCOUNTER_STATE_IN_PROGRESS);
|
||||
}
|
||||
if (instance->GetData(DATA_NPC_JAZ) && instance->GetData(DATA_NPC_OGRABISI) && instance->GetData(DATA_JAZ) == ENCOUNTER_STATE_IN_PROGRESS)
|
||||
{
|
||||
SetEscortPaused(false);
|
||||
instance->SetData(DATA_JAZ, ENCOUNTER_STATE_ENDED);
|
||||
}
|
||||
}
|
||||
else if (wp == 11)
|
||||
{
|
||||
if (!instance->GetData(DATA_GATE_S) && instance->GetData(DATA_SHILL) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
{
|
||||
instance->SetData(DATA_NPC_SHILL, 1);
|
||||
instance->SetData(DATA_SHILL, ENCOUNTER_STATE_IN_PROGRESS);
|
||||
}
|
||||
if (instance->GetData(DATA_NPC_SHILL) && instance->GetData(DATA_SHILL) == ENCOUNTER_STATE_IN_PROGRESS)
|
||||
{
|
||||
instance->SetData(DATA_SHILL, ENCOUNTER_STATE_ENDED);
|
||||
SetEscortPaused(false);
|
||||
}
|
||||
}
|
||||
else if (wp == 20)
|
||||
{
|
||||
if (!instance->GetData(DATA_GATE_C) && instance->GetData(DATA_CREST) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
{
|
||||
instance->SetData(DATA_NPC_CREST, 1);
|
||||
me->Say(SAY_REGINALD_WINDSOR_13_2, LANG_UNIVERSAL, PlayerGUID);
|
||||
instance->SetData(DATA_CREST, ENCOUNTER_STATE_IN_PROGRESS);
|
||||
}
|
||||
if (instance->GetData(DATA_NPC_CREST) && instance->GetData(DATA_CREST) == ENCOUNTER_STATE_IN_PROGRESS)
|
||||
{
|
||||
SetEscortPaused(false);
|
||||
instance->SetData(DATA_CREST, ENCOUNTER_STATE_ENDED);
|
||||
}
|
||||
}
|
||||
if (instance->GetData(DATA_TOBIAS) == ENCOUNTER_STATE_OBJECTIVE_COMPLETED) SetEscortPaused(false);
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
};
|
||||
*/
|
||||
|
||||
// npc_tobias_seecher
|
||||
#define SAY_TOBIAS_FREE "Thank you! I will run for safety immediately!"
|
||||
|
||||
/*
|
||||
class npc_tobias_seecher : public CreatureScript
|
||||
{
|
||||
public:
|
||||
npc_tobias_seecher() : CreatureScript("npc_tobias_seecher") { }
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
{
|
||||
npc_tobias_seecherAI* tobias_seecherAI = new npc_tobias_seecherAI(creature);
|
||||
|
||||
tobias_seecherAI->AddWaypoint(0, 549.21f, -281.07f, -75.27f);
|
||||
tobias_seecherAI->AddWaypoint(1, 554.39f, -267.39f, -73.68f);
|
||||
tobias_seecherAI->AddWaypoint(2, 533.59f, -249.38f, -67.04f);
|
||||
tobias_seecherAI->AddWaypoint(3, 519.44f, -217.02f, -59.34f);
|
||||
tobias_seecherAI->AddWaypoint(4, 506.55f, -153.49f, -62.34f);
|
||||
|
||||
return tobias_seecherAI;
|
||||
}
|
||||
|
||||
bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
|
||||
{
|
||||
player->PlayerTalkClass->ClearMenus();
|
||||
if (action == GOSSIP_ACTION_INFO_DEF + 1)
|
||||
{
|
||||
player->CLOSE_GOSSIP_MENU();
|
||||
CAST_AI(npc_escort::npc_escortAI, (creature->AI()))->Start(false, true, player->GetGUID());
|
||||
creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
|
||||
instance->SetData(DATA_TOBIAS, ENCOUNTER_STATE_IN_PROGRESS);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool OnGossipHello(Player* player, Creature* creature) override
|
||||
{
|
||||
if (player->GetQuestStatus(QUEST_JAIL_BREAK) == QUEST_STATUS_INCOMPLETE && instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS)
|
||||
{
|
||||
player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Get out of here, Tobias, you're free!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
|
||||
player->SEND_GOSSIP_MENU(2847, creature->GetGUID());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
struct npc_tobias_seecherAI : public npc_escortAI
|
||||
{
|
||||
npc_tobias_seecherAI(Creature* creature) : npc_escortAI(creature) { }
|
||||
|
||||
void EnterCombat(Unit* who) override { }
|
||||
void Reset() override { }
|
||||
|
||||
void JustDied(Unit* killer) override
|
||||
{
|
||||
if (IsBeingEscorted && killer == me)
|
||||
{
|
||||
me->SetVisible(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
instance->SetData(DATA_TOBIAS, ENCOUNTER_STATE_ENDED);
|
||||
}
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 waypointId) override
|
||||
{
|
||||
switch (waypointId)
|
||||
{
|
||||
case 0:
|
||||
me->Say(SAY_TOBIAS_FREE, LANG_UNIVERSAL, PlayerGUID);
|
||||
break;
|
||||
case 2:
|
||||
instance->SetData(DATA_TOBIAS, ENCOUNTER_STATE_OBJECTIVE_COMPLETED);
|
||||
break;
|
||||
case 4:
|
||||
me->SetVisible(false);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
instance->SetData(DATA_TOBIAS, ENCOUNTER_STATE_ENDED);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
{
|
||||
if (instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_NOT_STARTED)
|
||||
return;
|
||||
|
||||
if ((instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_IN_PROGRESS || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_FAILED || instance->GetData(DATA_QUEST_JAIL_BREAK) == ENCOUNTER_STATE_ENDED)&& instance->GetData(DATA_TOBIAS) == ENCOUNTER_STATE_ENDED)
|
||||
{
|
||||
me->SetVisible(false);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
else
|
||||
{
|
||||
me->SetVisible(true);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
}
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
*/
|
||||
|
||||
// npc_rocknot
|
||||
enum RocknotSays
|
||||
{
|
||||
@@ -1349,10 +774,4 @@ void AddSC_blackrock_depths()
|
||||
new npc_kharan_mighthammer();
|
||||
new npc_lokhtos_darkbargainer();
|
||||
new npc_rocknot();
|
||||
// Fix us
|
||||
/*new npc_dughal_stormwing();
|
||||
new npc_tobias_seecher();
|
||||
new npc_marshal_windsor();
|
||||
new npc_marshal_reginald_windsor();
|
||||
*/
|
||||
}
|
||||
|
||||
@@ -536,8 +536,7 @@ public:
|
||||
|
||||
void SpawnEyeTentacle(float x, float y)
|
||||
{
|
||||
Creature* Spawned;
|
||||
Spawned = DoSpawnCreature(NPC_EYE_TENTACLE, x, y, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 500);
|
||||
Creature* Spawned = DoSpawnCreature(NPC_EYE_TENTACLE, x, y, 0, 0, TEMPSUMMON_CORPSE_DESPAWN, 500);
|
||||
if (Spawned && Spawned->AI())
|
||||
if (Unit* target = SelectRandomNotStomach())
|
||||
Spawned->AI()->AttackStart(target);
|
||||
|
||||
@@ -559,8 +559,7 @@ public:
|
||||
|
||||
if (ArcaneBurst_Timer <= diff)
|
||||
{
|
||||
Unit* mvic;
|
||||
if ((mvic=SelectTarget(SELECT_TARGET_NEAREST, 0, NOMINAL_MELEE_RANGE, true)) != NULL)
|
||||
if (Unit* mvic = SelectTarget(SELECT_TARGET_NEAREST, 0, NOMINAL_MELEE_RANGE, true))
|
||||
{
|
||||
DoCast(mvic, SPELL_ARCANEBURST);
|
||||
ArcaneBurst_Timer = 5000;
|
||||
|
||||
@@ -664,10 +664,9 @@ struct boss_faction_championsAI : public BossAI
|
||||
{
|
||||
std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList();
|
||||
std::list<HostileReference*>::const_iterator iter;
|
||||
Unit* target;
|
||||
for (iter = tList.begin(); iter!=tList.end(); ++iter)
|
||||
{
|
||||
target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
|
||||
Unit* target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
|
||||
if (target && target->getPowerType() == POWER_MANA)
|
||||
return target;
|
||||
}
|
||||
@@ -679,10 +678,9 @@ struct boss_faction_championsAI : public BossAI
|
||||
std::list<HostileReference*> const& tList = me->getThreatManager().getThreatList();
|
||||
std::list<HostileReference*>::const_iterator iter;
|
||||
uint32 count = 0;
|
||||
Unit* target;
|
||||
for (iter = tList.begin(); iter != tList.end(); ++iter)
|
||||
{
|
||||
target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
|
||||
Unit* target = ObjectAccessor::GetUnit(*me, (*iter)->getUnitGuid());
|
||||
if (target && me->GetDistance2d(target) < distance)
|
||||
++count;
|
||||
}
|
||||
|
||||
@@ -137,9 +137,8 @@ class boss_ick : public CreatureScript
|
||||
|
||||
struct boss_ickAI : public BossAI
|
||||
{
|
||||
boss_ickAI(Creature* creature) : BossAI(creature, DATA_ICK), _vehicle(creature->GetVehicleKit())
|
||||
boss_ickAI(Creature* creature) : BossAI(creature, DATA_ICK)
|
||||
{
|
||||
ASSERT(_vehicle);
|
||||
_tempThreat = 0;
|
||||
}
|
||||
|
||||
@@ -177,7 +176,8 @@ class boss_ick : public CreatureScript
|
||||
{
|
||||
if (Creature* krick = GetKrick())
|
||||
{
|
||||
_vehicle->RemoveAllPassengers();
|
||||
if (Vehicle* _vehicle = me->GetVehicleKit())
|
||||
_vehicle->RemoveAllPassengers();
|
||||
if (krick->AI())
|
||||
krick->AI()->DoAction(ACTION_OUTRO);
|
||||
}
|
||||
@@ -268,7 +268,6 @@ class boss_ick : public CreatureScript
|
||||
}
|
||||
|
||||
private:
|
||||
Vehicle* _vehicle;
|
||||
float _tempThreat;
|
||||
};
|
||||
|
||||
|
||||
@@ -290,9 +290,8 @@ class boss_rimefang : public CreatureScript
|
||||
|
||||
struct boss_rimefangAI : public ScriptedAI
|
||||
{
|
||||
boss_rimefangAI(Creature* creature) : ScriptedAI(creature), _vehicle(creature->GetVehicleKit())
|
||||
boss_rimefangAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
ASSERT(_vehicle);
|
||||
Initialize();
|
||||
}
|
||||
|
||||
@@ -314,7 +313,8 @@ class boss_rimefang : public CreatureScript
|
||||
|
||||
void JustReachedHome() override
|
||||
{
|
||||
_vehicle->InstallAllAccessories(false);
|
||||
if (Vehicle* _vehicle = me->GetVehicleKit())
|
||||
_vehicle->InstallAllAccessories(false);
|
||||
}
|
||||
|
||||
void DoAction(int32 actionId) override
|
||||
@@ -376,7 +376,6 @@ class boss_rimefang : public CreatureScript
|
||||
}
|
||||
|
||||
private:
|
||||
Vehicle* _vehicle;
|
||||
ObjectGuid _hoarfrostTargetGUID;
|
||||
EventMap _events;
|
||||
uint8 _currentWaypoint;
|
||||
|
||||
@@ -110,9 +110,8 @@ class npc_iceborn_protodrake : public CreatureScript
|
||||
|
||||
struct npc_iceborn_protodrakeAI: public ScriptedAI
|
||||
{
|
||||
npc_iceborn_protodrakeAI(Creature* creature) : ScriptedAI(creature), _vehicle(creature->GetVehicleKit())
|
||||
npc_iceborn_protodrakeAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
ASSERT(_vehicle);
|
||||
Initialize();
|
||||
}
|
||||
|
||||
@@ -128,7 +127,8 @@ class npc_iceborn_protodrake : public CreatureScript
|
||||
|
||||
void EnterCombat(Unit* /*who*/) override
|
||||
{
|
||||
_vehicle->RemoveAllPassengers();
|
||||
if (Vehicle* _vehicle = me->GetVehicleKit())
|
||||
_vehicle->RemoveAllPassengers();
|
||||
}
|
||||
|
||||
void UpdateAI(uint32 diff) override
|
||||
@@ -148,7 +148,6 @@ class npc_iceborn_protodrake : public CreatureScript
|
||||
}
|
||||
|
||||
private:
|
||||
Vehicle* _vehicle;
|
||||
uint32 _frostBreathCooldown;
|
||||
};
|
||||
|
||||
|
||||
@@ -432,20 +432,21 @@ class StartMovementEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
StartMovementEvent(Creature* summoner, Creature* owner)
|
||||
: _summoner(summoner), _owner(owner)
|
||||
: _summonerGuid(summoner->GetGUID()), _owner(owner)
|
||||
{
|
||||
}
|
||||
|
||||
bool Execute(uint64 /*time*/, uint32 /*diff*/)
|
||||
{
|
||||
_owner->SetReactState(REACT_AGGRESSIVE);
|
||||
if (Unit* target = _summoner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(_summoner)))
|
||||
_owner->AI()->AttackStart(target);
|
||||
if (Creature* _summoner = ObjectAccessor::GetCreature(*_owner, _summonerGuid))
|
||||
if (Unit* target = _summoner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, NonTankTargetSelector(_summoner)))
|
||||
_owner->AI()->AttackStart(target);
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _summoner;
|
||||
ObjectGuid _summonerGuid;
|
||||
Creature* _owner;
|
||||
};
|
||||
|
||||
|
||||
@@ -117,14 +117,12 @@ class boss_keristrasza : public CreatureScript
|
||||
ContainmentSphereGUIDs[1] = instance->GetGuidData(ORMOROKS_CONTAINMET_SPHERE);
|
||||
ContainmentSphereGUIDs[2] = instance->GetGuidData(TELESTRAS_CONTAINMET_SPHERE);
|
||||
|
||||
GameObject* ContainmentSpheres[DATA_CONTAINMENT_SPHERES];
|
||||
|
||||
for (uint8 i = 0; i < DATA_CONTAINMENT_SPHERES; ++i)
|
||||
{
|
||||
ContainmentSpheres[i] = ObjectAccessor::GetGameObject(*me, ContainmentSphereGUIDs[i]);
|
||||
if (!ContainmentSpheres[i])
|
||||
GameObject* ContainmentSphere = ObjectAccessor::GetGameObject(*me, ContainmentSphereGUIDs[i]);
|
||||
if (!ContainmentSphere)
|
||||
return false;
|
||||
if (ContainmentSpheres[i]->GetGoState() != GO_STATE_ACTIVE)
|
||||
if (ContainmentSphere->GetGoState() != GO_STATE_ACTIVE)
|
||||
return false;
|
||||
}
|
||||
if (remove_prison)
|
||||
|
||||
@@ -224,7 +224,7 @@ class boss_flame_leviathan : public CreatureScript
|
||||
|
||||
struct boss_flame_leviathanAI : public BossAI
|
||||
{
|
||||
boss_flame_leviathanAI(Creature* creature) : BossAI(creature, BOSS_LEVIATHAN), vehicle(creature->GetVehicleKit())
|
||||
boss_flame_leviathanAI(Creature* creature) : BossAI(creature, BOSS_LEVIATHAN)
|
||||
{
|
||||
Initialize();
|
||||
}
|
||||
@@ -244,7 +244,6 @@ class boss_flame_leviathan : public CreatureScript
|
||||
|
||||
void InitializeAI() override
|
||||
{
|
||||
ASSERT(vehicle);
|
||||
if (!me->isDead())
|
||||
Reset();
|
||||
|
||||
@@ -256,7 +255,6 @@ class boss_flame_leviathan : public CreatureScript
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
}
|
||||
|
||||
Vehicle* vehicle;
|
||||
uint8 ActiveTowersCount;
|
||||
uint8 Shutdown;
|
||||
bool ActiveTowers;
|
||||
@@ -339,7 +337,7 @@ class boss_flame_leviathan : public CreatureScript
|
||||
void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override
|
||||
{
|
||||
if (spell->Id == SPELL_START_THE_ENGINE)
|
||||
vehicle->InstallAllAccessories(false);
|
||||
ASSERT_NOTNULL(me->GetVehicleKit())->InstallAllAccessories(false);
|
||||
|
||||
if (spell->Id == SPELL_ELECTROSHOCK)
|
||||
me->InterruptSpell(CURRENT_CHANNELED_SPELL);
|
||||
@@ -584,16 +582,14 @@ class boss_flame_leviathan_seat : public CreatureScript
|
||||
|
||||
struct boss_flame_leviathan_seatAI : public ScriptedAI
|
||||
{
|
||||
boss_flame_leviathan_seatAI(Creature* creature) : ScriptedAI(creature), vehicle(creature->GetVehicleKit())
|
||||
boss_flame_leviathan_seatAI(Creature* creature) : ScriptedAI(creature)
|
||||
{
|
||||
ASSERT(vehicle);
|
||||
me->SetReactState(REACT_PASSIVE);
|
||||
me->SetDisplayId(me->GetCreatureTemplate()->Modelid2);
|
||||
instance = creature->GetInstanceScript();
|
||||
}
|
||||
|
||||
InstanceScript* instance;
|
||||
Vehicle* vehicle;
|
||||
|
||||
void PassengerBoarded(Unit* who, int8 seatId, bool apply) override
|
||||
{
|
||||
@@ -628,7 +624,7 @@ class boss_flame_leviathan_seat : public CreatureScript
|
||||
if (apply)
|
||||
return;
|
||||
|
||||
if (Unit* device = vehicle->GetPassenger(SEAT_DEVICE))
|
||||
if (Unit* device = ASSERT_NOTNULL(me->GetVehicleKit())->GetPassenger(SEAT_DEVICE))
|
||||
{
|
||||
device->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
|
||||
device->SetUInt32Value(UNIT_FIELD_FLAGS, 0); // unselectable
|
||||
|
||||
@@ -611,17 +611,16 @@ class boss_freya : public CreatureScript
|
||||
me->DespawnOrUnsummon(7500);
|
||||
me->CastSpell(me, SPELL_KNOCK_ON_WOOD_CREDIT, true);
|
||||
|
||||
Creature* Elder[3];
|
||||
for (uint8 n = 0; n < 3; ++n)
|
||||
{
|
||||
Elder[n] = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_BRIGHTLEAF + n));
|
||||
if (Elder[n] && Elder[n]->IsAlive())
|
||||
Creature* Elder = ObjectAccessor::GetCreature(*me, instance->GetGuidData(BOSS_BRIGHTLEAF + n));
|
||||
if (Elder && Elder->IsAlive())
|
||||
{
|
||||
Elder[n]->RemoveAllAuras();
|
||||
Elder[n]->AttackStop();
|
||||
Elder[n]->CombatStop(true);
|
||||
Elder[n]->DeleteThreatList();
|
||||
Elder[n]->GetAI()->DoAction(ACTION_ELDER_FREYA_KILLED);
|
||||
Elder->RemoveAllAuras();
|
||||
Elder->AttackStop();
|
||||
Elder->CombatStop(true);
|
||||
Elder->DeleteThreatList();
|
||||
Elder->GetAI()->DoAction(ACTION_ELDER_FREYA_KILLED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,10 +117,9 @@ class boss_ignis : public CreatureScript
|
||||
|
||||
struct boss_ignis_AI : public BossAI
|
||||
{
|
||||
boss_ignis_AI(Creature* creature) : BossAI(creature, BOSS_IGNIS), _vehicle(me->GetVehicleKit())
|
||||
boss_ignis_AI(Creature* creature) : BossAI(creature, BOSS_IGNIS)
|
||||
{
|
||||
Initialize();
|
||||
ASSERT(_vehicle);
|
||||
}
|
||||
|
||||
void Initialize()
|
||||
@@ -133,7 +132,7 @@ class boss_ignis : public CreatureScript
|
||||
void Reset() override
|
||||
{
|
||||
_Reset();
|
||||
if (_vehicle)
|
||||
if (Vehicle* _vehicle = me->GetVehicleKit())
|
||||
_vehicle->RemoveAllPassengers();
|
||||
|
||||
instance->DoStopTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, ACHIEVEMENT_IGNIS_START_EVENT);
|
||||
@@ -284,7 +283,6 @@ class boss_ignis : public CreatureScript
|
||||
|
||||
private:
|
||||
ObjectGuid _slagPotGUID;
|
||||
Vehicle* _vehicle;
|
||||
time_t _firstConstructKill;
|
||||
bool _shattered;
|
||||
|
||||
|
||||
@@ -100,11 +100,9 @@ class boss_kologarn : public CreatureScript
|
||||
|
||||
struct boss_kologarnAI : public BossAI
|
||||
{
|
||||
boss_kologarnAI(Creature* creature) : BossAI(creature, BOSS_KOLOGARN), vehicle(creature->GetVehicleKit()),
|
||||
boss_kologarnAI(Creature* creature) : BossAI(creature, BOSS_KOLOGARN),
|
||||
left(false), right(false)
|
||||
{
|
||||
ASSERT(vehicle);
|
||||
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
|
||||
|
||||
@@ -113,7 +111,6 @@ class boss_kologarn : public CreatureScript
|
||||
Reset();
|
||||
}
|
||||
|
||||
Vehicle* vehicle;
|
||||
bool left, right;
|
||||
ObjectGuid eyebeamTarget;
|
||||
|
||||
@@ -128,9 +125,10 @@ class boss_kologarn : public CreatureScript
|
||||
events.ScheduleEvent(EVENT_FOCUSED_EYEBEAM, 21000);
|
||||
events.ScheduleEvent(EVENT_ENRAGE, 600000);
|
||||
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
if (Unit* arm = vehicle->GetPassenger(i))
|
||||
arm->ToCreature()->SetInCombatWithZone();
|
||||
if (Vehicle* vehicle = me->GetVehicleKit())
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
if (Unit* arm = vehicle->GetPassenger(i))
|
||||
arm->ToCreature()->SetInCombatWithZone();
|
||||
|
||||
_EnterCombat();
|
||||
}
|
||||
@@ -283,7 +281,7 @@ class boss_kologarn : public CreatureScript
|
||||
case EVENT_RESPAWN_LEFT_ARM:
|
||||
case EVENT_RESPAWN_RIGHT_ARM:
|
||||
{
|
||||
if (vehicle)
|
||||
if (Vehicle* vehicle = me->GetVehicleKit())
|
||||
{
|
||||
int8 seat = eventId == EVENT_RESPAWN_LEFT_ARM ? 0 : 1;
|
||||
uint32 entry = eventId == EVENT_RESPAWN_LEFT_ARM ? NPC_LEFT_ARM : NPC_RIGHT_ARM;
|
||||
|
||||
@@ -401,20 +401,21 @@ class StartAttackEvent : public BasicEvent
|
||||
{
|
||||
public:
|
||||
StartAttackEvent(Creature* summoner, Creature* owner)
|
||||
: _summoner(summoner), _owner(owner)
|
||||
: _summonerGuid(summoner->GetGUID()), _owner(owner)
|
||||
{
|
||||
}
|
||||
|
||||
bool Execute(uint64 /*time*/, uint32 /*diff*/)
|
||||
{
|
||||
_owner->SetReactState(REACT_AGGRESSIVE);
|
||||
if (Unit* target = _summoner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 300.0f))
|
||||
_owner->AI()->AttackStart(target);
|
||||
if (Creature* _summoner = ObjectAccessor::GetCreature(*_owner, _summonerGuid))
|
||||
if (Unit* target = _summoner->AI()->SelectTarget(SELECT_TARGET_RANDOM, 0, 300.0f))
|
||||
_owner->AI()->AttackStart(target);
|
||||
return true;
|
||||
}
|
||||
|
||||
private:
|
||||
Creature* _summoner;
|
||||
ObjectGuid _summonerGuid;
|
||||
Creature* _owner;
|
||||
};
|
||||
|
||||
|
||||
@@ -381,7 +381,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript
|
||||
class npc_hyldsmeet_protodrakeAI : public CreatureAI
|
||||
{
|
||||
public:
|
||||
npc_hyldsmeet_protodrakeAI(Creature* creature) : CreatureAI(creature), _accessoryRespawnTimer(0), _vehicleKit(creature->GetVehicleKit()) { }
|
||||
npc_hyldsmeet_protodrakeAI(Creature* creature) : CreatureAI(creature), _accessoryRespawnTimer(0) { }
|
||||
|
||||
void PassengerBoarded(Unit* who, int8 /*seat*/, bool apply) override
|
||||
{
|
||||
@@ -396,6 +396,7 @@ class npc_hyldsmeet_protodrake : public CreatureScript
|
||||
{
|
||||
//! We need to manually reinstall accessories because the vehicle itself is friendly to players,
|
||||
//! so EnterEvadeMode is never triggered. The accessory on the other hand is hostile and killable.
|
||||
Vehicle* _vehicleKit = me->GetVehicleKit();
|
||||
if (_accessoryRespawnTimer && _accessoryRespawnTimer <= diff && _vehicleKit)
|
||||
{
|
||||
_vehicleKit->InstallAllAccessories(true);
|
||||
@@ -407,7 +408,6 @@ class npc_hyldsmeet_protodrake : public CreatureScript
|
||||
|
||||
private:
|
||||
uint32 _accessoryRespawnTimer;
|
||||
Vehicle* _vehicleKit;
|
||||
};
|
||||
|
||||
CreatureAI* GetAI(Creature* creature) const override
|
||||
|
||||
@@ -219,12 +219,12 @@ public:
|
||||
if (WateryGrave_Timer <= diff)
|
||||
{
|
||||
//Teleport 4 players under the waterfalls
|
||||
Unit* target;
|
||||
GuidSet targets;
|
||||
GuidSet::const_iterator itr;
|
||||
for (uint8 i = 0; i < 4; ++i)
|
||||
{
|
||||
counter = 0;
|
||||
Unit* target;
|
||||
do
|
||||
{
|
||||
target = SelectTarget(SELECT_TARGET_RANDOM, 1, 50, true); //target players only
|
||||
@@ -257,12 +257,12 @@ public:
|
||||
//WateryGlobules_Timer
|
||||
if (WateryGlobules_Timer <= diff)
|
||||
{
|
||||
Unit* pGlobuleTarget;
|
||||
GuidSet globules;
|
||||
GuidSet::const_iterator itr;
|
||||
for (uint8 g = 0; g < 4; g++) //one unit can't cast more than one spell per update, so some players have to cast for us XD
|
||||
{
|
||||
counter = 0;
|
||||
Unit* pGlobuleTarget;
|
||||
do
|
||||
{
|
||||
pGlobuleTarget = SelectTarget(SELECT_TARGET_RANDOM, 0, 50, true);
|
||||
|
||||
@@ -689,10 +689,9 @@ class boss_kaelthas : public CreatureScript
|
||||
//Respawn advisors
|
||||
Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0);
|
||||
|
||||
Creature* Advisor;
|
||||
for (uint8 i = 0; i < MAX_ADVISORS; ++i)
|
||||
{
|
||||
Advisor = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i]);
|
||||
Creature* Advisor = ObjectAccessor::GetCreature(*me, m_auiAdvisorGuid[i]);
|
||||
|
||||
if (!Advisor)
|
||||
TC_LOG_ERROR("scripts", "SD2: Kael'Thas Advisor %u does not exist. Possibly despawned? Incorrectly Killed?", i);
|
||||
|
||||
Reference in New Issue
Block a user