mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-16 10:30:27 +00:00
fix(Core): fix a few issues with "Battle for the Undercity" (#1648)
This commit is contained in:
@@ -981,6 +981,7 @@ public:
|
||||
memset(generatorGUID, 0, sizeof(generatorGUID));
|
||||
memset(allianceForcesGUID, 0, sizeof(allianceForcesGUID));
|
||||
memset(hordeForcesGUID, 0, sizeof(hordeForcesGUID));
|
||||
allianceGuardsGUID.clear();
|
||||
}
|
||||
|
||||
bool bStepping;
|
||||
@@ -1001,6 +1002,7 @@ public:
|
||||
uint64 generatorGUID[GENERATOR_MAXCOUNT];
|
||||
uint64 allianceForcesGUID[ALLIANCE_FORCE_MAXCOUNT];
|
||||
uint64 hordeForcesGUID[HORDE_FORCE_MAXCOUNT];
|
||||
std::vector<uint64> allianceGuardsGUID;
|
||||
|
||||
EventMap _events;
|
||||
|
||||
@@ -1070,6 +1072,12 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
for (std::vector<uint64>::const_iterator i = allianceGuardsGUID.begin(); i != allianceGuardsGUID.end(); ++i)
|
||||
if (Creature* temp = ObjectAccessor::GetCreature(*me, *i))
|
||||
temp->DespawnOrUnsummon();
|
||||
|
||||
allianceGuardsGUID.clear();
|
||||
|
||||
for (uint8 i = 0; i < HORDE_FORCE_MAXCOUNT; ++i)
|
||||
{
|
||||
if (Creature* temp = ObjectAccessor::GetCreature(*me, hordeForcesGUID[i]))
|
||||
@@ -1326,13 +1334,25 @@ public:
|
||||
break;
|
||||
case 7:
|
||||
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
|
||||
{
|
||||
allianceGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePath(NPC_SW_SOLDIER * 10, false);
|
||||
}
|
||||
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
|
||||
{
|
||||
allianceGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 1, false);
|
||||
}
|
||||
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
|
||||
{
|
||||
allianceGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 2, false);
|
||||
}
|
||||
if (Unit* temp = me->SummonCreature(NPC_SW_SOLDIER, AllianceSpawn[8].x, AllianceSpawn[8].y, AllianceSpawn[8].z, 0, TEMPSUMMON_TIMED_DESPAWN, 90000))
|
||||
{
|
||||
allianceGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePath((NPC_SW_SOLDIER * 10) + 3, false);
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
break;
|
||||
@@ -2328,6 +2348,7 @@ public:
|
||||
npc_thrall_bfuAI(Creature* creature) : npc_escortAI(creature)
|
||||
{
|
||||
memset(allianceForcesGUID, 0, sizeof(allianceForcesGUID));
|
||||
hordeGuardsGUID.clear();
|
||||
}
|
||||
|
||||
bool bStepping;
|
||||
@@ -2343,6 +2364,7 @@ public:
|
||||
uint64 WrynnGUID;
|
||||
uint64 JainaGUID;
|
||||
uint64 SaurfangGUID;
|
||||
std::vector<uint64> hordeGuardsGUID;
|
||||
|
||||
EventMap _events;
|
||||
|
||||
@@ -2350,6 +2372,7 @@ public:
|
||||
{
|
||||
if (!HasEscortState(STATE_ESCORT_ESCORTING))
|
||||
{
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
me->Mount(MODEL_WHITE_WULF);
|
||||
me->SetCorpseDelay(1);
|
||||
me->SetRespawnTime(1);
|
||||
@@ -2396,6 +2419,12 @@ public:
|
||||
saurfang->DespawnOrUnsummon();
|
||||
SaurfangGUID = 0;
|
||||
}
|
||||
|
||||
for (std::vector<uint64>::const_iterator i = hordeGuardsGUID.begin(); i != hordeGuardsGUID.end(); ++i)
|
||||
if (Creature* temp = ObjectAccessor::GetCreature(*me, *i))
|
||||
temp->DespawnOrUnsummon();
|
||||
|
||||
hordeGuardsGUID.clear();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2534,7 +2563,7 @@ public:
|
||||
sylvanas->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_NPC | UNIT_FLAG_IMMUNE_TO_PC);
|
||||
sylvanas->SetReactState(REACT_AGGRESSIVE);
|
||||
sylvanas->setFaction(FACTION_ESCORT_N_NEUTRAL_ACTIVE);
|
||||
sylvanas->GetMotionMaster()->MoveFollow(me, 1, 0);
|
||||
sylvanas->GetMotionMaster()->MoveFollow(me, 1, M_PI * 0.1f);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2611,15 +2640,28 @@ public:
|
||||
case 6:
|
||||
// COURTYARD_DONE Spawn
|
||||
if (Unit* temp = me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[29].x, ThrallSpawn[29].y, ThrallSpawn[29].z, ThrallSpawn[29].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS))
|
||||
{
|
||||
hordeGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[30].x, ThrallSpawn[30].y, ThrallSpawn[30].z);
|
||||
}
|
||||
if (Unit* temp = me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[31].x, ThrallSpawn[31].y, ThrallSpawn[31].z, ThrallSpawn[31].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS))
|
||||
{
|
||||
hordeGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[32].x, ThrallSpawn[32].y, ThrallSpawn[32].z);
|
||||
}
|
||||
if (Unit* temp = me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[33].x, ThrallSpawn[33].y, ThrallSpawn[33].z, ThrallSpawn[33].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS))
|
||||
{
|
||||
hordeGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[34].x, ThrallSpawn[34].y, ThrallSpawn[34].z);
|
||||
}
|
||||
if (Unit* temp = me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[35].x, ThrallSpawn[35].y, ThrallSpawn[35].z, ThrallSpawn[35].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS))
|
||||
{
|
||||
hordeGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->GetMotionMaster()->MovePoint(0, ThrallSpawn[36].x, ThrallSpawn[36].y, ThrallSpawn[36].z);
|
||||
}
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[i + 44].x, ThrallSpawn[i + 44].y, ThrallSpawn[i + 44].z, ThrallSpawn[i + 44].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS);
|
||||
if (Unit* temp = me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[i + 44].x, ThrallSpawn[i + 44].y, ThrallSpawn[i + 44].z, ThrallSpawn[i + 44].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS))
|
||||
hordeGuardsGUID.push_back(temp->GetGUID());
|
||||
break;
|
||||
case 7:
|
||||
for (uint8 i = 0; i < 9; ++i)
|
||||
@@ -2627,7 +2669,8 @@ public:
|
||||
break;
|
||||
case 8:
|
||||
for (uint8 i = 0; i < 2; ++i)
|
||||
me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[i + 57].x, ThrallSpawn[i + 57].y, ThrallSpawn[i + 57].z, ThrallSpawn[i + 57].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS);
|
||||
if (Unit* temp = me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[i + 57].x, ThrallSpawn[i + 57].y, ThrallSpawn[i + 57].z, ThrallSpawn[i + 57].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 300 * IN_MILLISECONDS))
|
||||
hordeGuardsGUID.push_back(temp->GetGUID());
|
||||
break;
|
||||
case 9:
|
||||
// Top of Undercity - Attacktrashpack
|
||||
@@ -2760,6 +2803,7 @@ public:
|
||||
case 18:
|
||||
if (Creature* temp = me->SummonCreature(NPC_WARSONG_BATTLEGUARD, ThrallSpawn[69].x, ThrallSpawn[69].y, ThrallSpawn[69].z, ThrallSpawn[69].o, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 240 * IN_MILLISECONDS))
|
||||
{
|
||||
hordeGuardsGUID.push_back(temp->GetGUID());
|
||||
temp->AI()->Talk(SAY_FOR_THE_HORDE);
|
||||
temp->GetMotionMaster()->MovePath(NPC_WARSONG_BATTLEGUARD * 100, false);
|
||||
}
|
||||
@@ -3661,7 +3705,10 @@ public:
|
||||
break;
|
||||
case 143:
|
||||
if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID))
|
||||
{
|
||||
sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true);
|
||||
sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM);
|
||||
}
|
||||
JumpToNextStep(10 * IN_MILLISECONDS);
|
||||
break;
|
||||
case 144:
|
||||
@@ -3669,6 +3716,7 @@ public:
|
||||
{
|
||||
sylvanas->AI()->Talk(SYLVANAS_SAY_THRONE_1);
|
||||
me->SetFacingToObject(sylvanas);
|
||||
sylvanas->SetFacingToObject(me);
|
||||
me->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
|
||||
}
|
||||
JumpToNextStep(3 * IN_MILLISECONDS);
|
||||
@@ -3945,6 +3993,11 @@ public:
|
||||
me->Mount(MODEL_SKELETON_MOUNT);
|
||||
}
|
||||
|
||||
void JustRespawned() override
|
||||
{
|
||||
me->Mount(MODEL_SKELETON_MOUNT);
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
{
|
||||
me->SetCorpseDelay(1);
|
||||
|
||||
Reference in New Issue
Block a user