fix(Scripts/BlackrockSpire): Scarshield Infiltrator (#12920)

This commit is contained in:
SoglaHash
2022-09-19 04:59:59 +02:00
committed by GitHub
parent 6ae8b787e5
commit 0f84e3ed34
3 changed files with 127 additions and 2 deletions

View File

@@ -76,6 +76,8 @@ enum CreaturesIds
NPC_BLACKHAND_INCARCERATOR = 10316,
NPC_LORD_VICTOR_NEFARIUS = 10162,
NPC_SCARSHIELD_INFILTRATOR = 10299,
NPC_SOLAKAR = 10264,
NPC_ROOKERY_GUARDIAN = 10258,
NPC_ROOKERY_HATCHER = 10683,
@@ -95,7 +97,8 @@ enum AdditionalData
AREATRIGGER = 1,
AREATRIGGER_DRAGONSPIRE_HALL = 2046,
AREATRIGGER_BLACKROCK_STADIUM = 2026,
SAY_FINKLE_GANG = 0
SAY_FINKLE_GANG = 0,
ITEM_UNADORNED_SEAL = 12219
};
enum GameObjectsIds

View File

@@ -53,7 +53,8 @@ Position SolakarPosBoss = Position(80.0f, -280.0f, 93.0f, 3.0f * M_PI / 2.0);
enum Texts
{
SAY_NEFARIUS_REND_WIPE = 11,
SAY_SOLAKAR_FIRST_HATCHER = 0
SAY_SOLAKAR_FIRST_HATCHER = 0,
SAY_SCARSHIELD_INF_WHISPER = 0
};
MinionData const minionData[] =
@@ -823,10 +824,65 @@ public:
}
};
class near_scarshield_infiltrator : public AreaTriggerScript
{
public:
near_scarshield_infiltrator() : AreaTriggerScript("near_scarshield_infiltrator") { }
bool OnTrigger(Player* player, const AreaTrigger* /*at*/) override
{
if (player && player->IsAlive())
{
if (Creature* creature = player->FindNearestCreature(NPC_SCARSHIELD_INFILTRATOR, 100.0f, true))
{
bool transformHasStarted = creature->AI()->GetData(0) == 1;
if ((player->getLevel() < 57 || !player->HasItemCount(ITEM_UNADORNED_SEAL)) && !transformHasStarted)
{
// Send whisper if not already sent
std::list<ObjectGuid>::iterator itr = std::find(whisperedTargets.begin(), whisperedTargets.end(), player->GetGUID());
if (itr == whisperedTargets.end())
{
creature->AI()->Talk(SAY_SCARSHIELD_INF_WHISPER, player);
whisperedTargets.push_back(player->GetGUID());
return true;
}
}
}
}
return false;
}
private:
GuidList whisperedTargets;
};
class at_scarshield_infiltrator : public AreaTriggerScript
{
public:
at_scarshield_infiltrator() : AreaTriggerScript("at_scarshield_infiltrator") { }
bool OnTrigger(Player* player, const AreaTrigger* /*at*/) override
{
if (player && player->IsAlive())
{
if (Creature* creature = player->FindNearestCreature(NPC_SCARSHIELD_INFILTRATOR, 100.0f, true))
{
if (player->getLevel() >= 57 && player->HasItemCount(ITEM_UNADORNED_SEAL))
{
creature->AI()->SetData(0, 1); // Start transform into Vaelan
return true;
}
}
}
return false;
}
};
void AddSC_instance_blackrock_spire()
{
new instance_blackrock_spire();
new at_dragonspire_hall();
new at_blackrock_stadium();
new go_father_flame();
new near_scarshield_infiltrator();
new at_scarshield_infiltrator();
}