Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "ScriptPCH.h"
- #include "Player.h"
- #include "ScriptMgr.h"
- #include "Creature.h"
- #include "ScriptedCreature.h"
- #include "../Global.h"
- #include "Item.h"
- #include "ScriptedGossip.h"
- #include "MapManager.h"
- #include "Map.h"
- #include "Quest.h"
- Position const finalBossPos = { 1452.521729f, 1046.348877f, 33.847805f, 4.314608f};
- Position const spawnPosIron = { 1436.746338f, 1021.107483f, 34.471546f, 4.888280f };
- enum RageFireCreaIds
- {
- //gob squad
- NPC_PATCH = 70607,
- NPC_GRIT = 70605,
- NPC_NEWT = 70606,
- NPC_TICKER = 70609,
- NPC_VOLT = 70608,
- //stage 3
- NPC_MATID_BOMB = 71174,
- NPC_CANNON_BALLS = 71176,
- NPC_BATTERY = 71195,
- NPC_POOL_PONY = 71175,
- NPC_EGG_YOLK = 71197,
- //stage 4
- NPC_TRIGGER_1 = 98000,
- NPC_TRIGGER_2 = 98001,
- NPC_TRIGGER_3 = 98002,
- NPC_TRIGGER_4 = 98003,
- NPC_TRIGGER_5 = 98004,
- NPC_KORKRON_SHADOWBLADE = 71244,
- NPC_KOR_KRON_DIRE_SOLDIER = 70665,
- NPC_DARK_SHAMAN = 71245,
- NPC_FLAME_HOUND = 70702,
- NPC_EMBER_GUARD = 70798,
- NPC_OVERSEER_ELAGLO = 71030,
- NPC_IRON_BODY_PONSHU_RAGEFIRE = 98005,
- };
- enum RageFireGobIds
- {
- GOBJ_INITIAL_TELEPORTER = 220065,
- GOBJ_EMERGENCY_TELEPORTER = 220066,
- };
- enum ragefireCoreCriteriaIds
- {
- //stage 1
- CRITERIA_DETONATION = 23213,
- CRITERIA_ENEMY_FORCES = 23216,
- //stage 2
- CRITERIA_PROTO_DRAKE = 23254,
- CRITERIA_SUPPLY_CRATES = 23255,
- CRITERIA_PANDARIA_ARTIFACTS = 23256,
- //stage 3
- CRITERIA_MEET_UP = 23313,
- CRITERIA_CANNON_BALLS = 23307,
- CRITERIA_BATTERIES = 23310,
- CRITERIA_POOL_PONY = 23308,
- CRITERIA_EGG_YOLK = 23309,
- //stage 4
- CRITERIA_GOB_SQUAD_DEFEATED = 23311,
- };
- enum stage3SpellIds
- {
- SPELL_CANNON_BALL = 141832,
- SPELL_THROW_CANNON_BALL = 141937,
- SPELL_ATTACH_CANNON_BALL1 = 141879,
- SPELL_ATTACH_CANNON_BALL2 = 141880,
- SPELL_ATTACH_CANNON_BALL3 = 141881,
- SPELL_ATTACH_BATTERY1 = 141887,
- SPELL_ATTACH_BATTERY2 = 141888,
- SPELL_BATTERY = 141904,
- SPELL_THROW_BATTERY = 141949,
- SPELL_POOL_PONY = 141898,
- SPELL_ATTACH_POOL_PONY = 141889,
- SPELL_THROW_POOL_PONY = 141951,
- SPELL_EGG_YOLK = 141914,
- SPELL_ATTACH_EGG_YOLK = 141891,
- SPELL_HUGE_EXPLOSION = 141954,//mantid bomb
- SPELL_MASSIVE_EXPLOSION = 142438,
- SPELL_GHOST_AURA = 137125,
- };
- class instance_ragefire_core : public InstanceMapScript
- {
- public:
- instance_ragefire_core() : InstanceMapScript("instance_ragefire_core", 1131) { }
- struct instance_ragefire_core_InstanceScript : public InstanceScript
- {
- instance_ragefire_core_InstanceScript(Map* map) : InstanceScript(map), m_scenario(map, 219, STEP_4), _map(map)
- {
- squadGuids.clear();
- bombGuids.clear();
- darkShamanAddsGuids.clear();
- ragefirePeonGuids.clear();
- stage3DeliveryGuids.clear();
- stage4Entries.clear();
- stage4_1Guids.clear();
- stage4_2Guids.clear();
- stage4_3Guids.clear();
- stage4_4Guids.clear();
- stage4Entries.push_back(NPC_KOR_KRON_DIRE_SOLDIER);
- stage4Entries.push_back(NPC_DARK_SHAMAN);
- stage4Entries.push_back(NPC_FLAME_HOUND);
- stage4Entries.push_back(NPC_EMBER_GUARD);
- stageOneKills = 0;
- stageTwoKills = 0;
- stageThreeKills = 0;
- stageFourKills = 0;
- stageFourLevel = 0;
- onStageFour = false;
- m_scenario.GetStep(STEP_1).AddCriteria(CRITERIA_DETONATION, 1);//32525
- m_scenario.GetStep(STEP_1).AddCriteria(CRITERIA_ENEMY_FORCES, 1);//32556
- m_scenario.GetStep(STEP_2).AddCriteria(CRITERIA_PROTO_DRAKE, 1);//32588
- m_scenario.GetStep(STEP_2).AddCriteria(CRITERIA_SUPPLY_CRATES, 1);
- m_scenario.GetStep(STEP_2).AddCriteria(CRITERIA_PANDARIA_ARTIFACTS, 1);
- m_scenario.GetStep(STEP_3).AddCriteria(CRITERIA_MEET_UP, 1);//meet up with patch
- m_scenario.GetStep(STEP_3).AddCriteria(CRITERIA_CANNON_BALLS, 3);//cannon balls
- m_scenario.GetStep(STEP_3).AddCriteria(CRITERIA_BATTERIES, 2);//batteries del
- m_scenario.GetStep(STEP_3).AddCriteria(CRITERIA_POOL_PONY, 1);//pool pony
- m_scenario.GetStep(STEP_3).AddCriteria(CRITERIA_EGG_YOLK, 1);//egg yolk
- m_scenario.GetStep(STEP_4).AddCriteria(CRITERIA_GOB_SQUAD_DEFEATED, 1);//gob squad defeated
- }
- Map* _map;
- ScenarioController m_scenario;
- std::vector<uint64> squadGuids;
- std::vector<uint64> bombGuids;
- std::vector<uint64> darkShamanAddsGuids;
- std::vector<uint64> ragefirePeonGuids;
- std::vector<uint64> stage3DeliveryGuids;
- ///stage 4 Ids
- std::vector<uint32> stage4Entries;
- std::vector<uint64> stage4_1Guids;
- std::vector<uint64> stage4_2Guids;
- std::vector<uint64> stage4_3Guids;
- std::vector<uint64> stage4_4Guids;
- uint64 darkShamanXorenthGuid;
- uint64 matidBombGuid;
- uint32 stageOneKills;
- uint32 stageTwoKills;
- uint32 stageThreeKills;
- uint32 stageFourKills;
- uint32 stageFourLevel;
- bool onStageFour;
- void CompleteScenario()
- {
- //@TODO
- if (Player* player = instance->GetPlayers().getFirst()->getSource())
- {
- if (Creature* creature = instance->SummonCreature(NPC_IRON_BODY_PONSHU_RAGEFIRE, spawnPosIron))
- {
- creature->CastSpell(creature, SPELL_GHOST_AURA);
- creature->GetAI()->DoAction(1);
- }
- }
- }
- void checkStageTwo()
- {
- if (stageTwoKills == 3)
- {
- if (Creature* c = instance->GetCreature(matidBombGuid))
- c->SetVisible(true);
- for (uint64 guid : squadGuids)
- if (Creature* creature = instance->GetCreature(guid))
- creature->GetAI()->DoAction(13);
- for (uint64 guid : stage3DeliveryGuids)
- if (Creature* c = instance->GetCreature(guid))
- c->GetAI()->DoAction(1);
- }
- }
- void checkStageThree()
- {
- if (stageThreeKills >= 7)
- for (uint64 guid : stage3DeliveryGuids)
- if (Creature* c = instance->GetCreature(guid))
- c->DespawnOrUnsummon();
- }
- void checkStageFour()
- {
- ++stageFourKills;
- switch (stageFourLevel)
- {
- case 0:
- if (stageFourKills == 5)
- {
- stageFourKills = 0;
- stageFourLevel = 1;
- startStageFour();
- }
- break;
- case 1:
- if (stageFourKills == 4)
- {
- stageFourKills = 0;
- stageFourLevel = 2;
- startStageFour();
- }
- break;
- case 2:
- if (stageFourKills == 3)
- {
- stageFourKills = 0;
- stageFourLevel = 3;
- startStageFour();
- }
- break;
- case 3:
- if (stageFourKills == 4)
- {
- stageFourKills = 0;
- stageFourLevel = 4;
- startStageFour();
- }
- break;
- }
- }
- void startStageFour()
- {
- if (!onStageFour)
- onStageFour = true;
- switch (stageFourLevel)
- {
- case 0:
- for (uint64 guid : stage4_1Guids)
- if (Creature* c = instance->GetCreature(guid))
- c->GetAI()->DoAction(10);
- break;
- case 1:
- for (uint64 guid : stage4_2Guids)
- if (Creature* c = instance->GetCreature(guid))
- c->GetAI()->DoAction(10);
- break;
- case 2:
- for (uint64 guid : stage4_3Guids)
- if (Creature* c = instance->GetCreature(guid))
- c->GetAI()->DoAction(10);
- break;
- case 3:
- for (uint64 guid : stage4_4Guids)
- if (Creature* c = instance->GetCreature(guid))
- c->GetAI()->DoAction(10);
- break;
- case 4:
- instance->SummonCreature(NPC_OVERSEER_ELAGLO, finalBossPos);
- break;
- }
- }
- void OnPlayerEnter(Player* player)
- {
- m_scenario.SendScenarioState(player);
- if (!player->isGMChat() && !player->IsGameMaster())
- {
- player->CastSpell(player, 140714, true);
- for (auto it : _map->GetCreatureBySpawnIdStore())
- {
- Creature* creature = it.second;
- if (creature && !creature->isInCombat() && creature->isAlive())
- {
- uint32 hvalue = creature->GetCreateHealth();
- uint32 level = player->getLevel();
- creature->SetCanModifyStats(true);
- creature->UpdateAllStats();
- creature->SetLevel(level);
- hvalue *= (1 + ((level - 80) / 2));
- creature->SetMaxHealth(hvalue);
- creature->SetFullHealth();
- creature->m_mgWorth = sObjectMgr->GetCreatureTemplate(creature->GetEntry())->mg + ((level - 80) / 2);
- }
- }
- }
- }
- void OnGameObjectCreate(GameObject* go)
- {
- switch (go->GetEntry())
- {
- case 220066:
- break;
- }
- }
- void insertGuidsInVectorFromCreatureEntryArray(WorldObject* o, std::vector<uint64> &guids, std::vector<uint32> entries, float range)
- {
- for (uint32 entry : entries)
- {
- std::list<Creature*> mobs;
- o->GetCreatureListWithEntryInGrid(mobs, entry, range);
- for (Creature* c : mobs)
- guids.push_back(c->GetGUID());
- mobs.clear();
- }
- }
- void OnCreatureCreate(Creature* creature) override
- {
- switch (creature->GetEntry())
- {
- case NPC_PATCH:
- case NPC_GRIT:
- case NPC_NEWT:
- case NPC_TICKER:
- case NPC_VOLT:
- squadGuids.push_back(creature->GetGUID());
- break;
- case 70672://bomb
- bombGuids.push_back(creature->GetGUID());
- break;
- case 71244://shadowblade
- case 71245://dark shaman
- darkShamanAddsGuids.push_back(creature->GetGUID());
- break;
- case 70683:
- darkShamanXorenthGuid = creature->GetGUID();
- break;
- case 71097:
- ragefirePeonGuids.push_back(creature->GetGUID());
- break;
- case NPC_MATID_BOMB:
- matidBombGuid = creature->GetGUID();
- creature->SetVisible(false);
- break;
- case NPC_CANNON_BALLS:
- case NPC_BATTERY:
- case NPC_POOL_PONY:
- case NPC_EGG_YOLK:
- stage3DeliveryGuids.push_back(creature->GetGUID());
- break;
- case NPC_TRIGGER_1:
- insertGuidsInVectorFromCreatureEntryArray(creature, stage4_1Guids, stage4Entries, 10.0f);
- break;
- case NPC_TRIGGER_2:
- insertGuidsInVectorFromCreatureEntryArray(creature, stage4_2Guids, stage4Entries, 10.0f);
- break;
- case NPC_TRIGGER_4:
- insertGuidsInVectorFromCreatureEntryArray(creature, stage4_3Guids, stage4Entries, 10.0f);
- break;
- case NPC_TRIGGER_5:
- insertGuidsInVectorFromCreatureEntryArray(creature, stage4_4Guids, stage4Entries, 10.0f);
- break;
- }
- }
- void SetData(uint32 type, uint32 data) override
- {
- if (data == SPECIAL)
- {
- switch (type)
- {
- case NPC_KOR_KRON_DIRE_SOLDIER:
- case NPC_DARK_SHAMAN:
- case NPC_FLAME_HOUND:
- case NPC_EMBER_GUARD:
- checkStageFour();
- break;
- case 70672://bombs
- for (uint64 guid : bombGuids)
- if (Creature* creature = instance->GetCreature(guid))
- creature->GetAI()->DoAction(2);//rather than casting spell, which is wrong one in first place, setentry, then cast explosion. so after 5 secs cast spell, and entry set to will be 71098
- // creature->CastSpell(creature, 103546, true);
- break;
- case 70683:
- for (uint64 guid : ragefirePeonGuids)
- if (Creature* creature = instance->GetCreature(guid))
- creature->GetMotionMaster()->MovePoint(1, 1501.083374f, 1001.316284f, 38.346649f);
- break;
- case NPC_KORKRON_SHADOWBLADE:
- for (uint64 guid : squadGuids)
- if (Creature* creature = instance->GetCreature(guid))
- {
- creature->SetReactState(REACT_AGGRESSIVE);
- if (Creature* enemy = creature->FindNearestCreature(71244, 350.0f))
- {
- creature->SetInCombatWith(enemy);
- creature->Attack(enemy, true);
- }
- }
- break;
- }
- }
- if (data == DONE)
- {
- switch (type)
- {
- case 70662://denotator
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_DETONATION, 1);//Breach the main chamber
- for (uint64 guid : squadGuids)
- if (Creature* creature = instance->GetCreature(guid))
- creature->GetAI()->DoAction(4);
- break;
- case 70683://dark shaman xorenth
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_ENEMY_FORCES, 1);//defeated enemy forces
- for (uint64 guid : squadGuids)
- if (Creature* creature = instance->GetCreature(guid))
- creature->GetAI()->DoAction(9);//activate step 2: reconnaissance
- break;
- case 71244:
- case 71245:
- stageOneKills++;
- if (stageOneKills == 5)
- if (Creature* c = instance->GetCreature(darkShamanXorenthGuid))
- c->GetAI()->DoAction(2);
- break;
- case 71203:
- stageTwoKills++;
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_SUPPLY_CRATES, 1);
- checkStageTwo();
- break;
- case 71208:
- stageTwoKills++;
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_PROTO_DRAKE, 1);
- checkStageTwo();
- break;
- case 71209:
- stageTwoKills++;
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_PANDARIA_ARTIFACTS, 1);
- checkStageTwo();
- break;
- case NPC_PATCH:
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_MEET_UP);
- break;
- case NPC_CANNON_BALLS:
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_CANNON_BALLS);
- ++stageThreeKills;
- checkStageThree();
- break;
- case NPC_BATTERY:
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_BATTERIES);
- ++stageThreeKills;
- checkStageThree();
- break;
- case NPC_POOL_PONY:
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_POOL_PONY);
- ++stageThreeKills;
- checkStageThree();
- break;
- case NPC_EGG_YOLK:
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_EGG_YOLK);
- ++stageThreeKills;
- checkStageThree();
- break;
- case NPC_MATID_BOMB:
- startStageFour();
- break;
- case NPC_OVERSEER_ELAGLO:
- m_scenario.UpdateCurrentStepCriteria(CRITERIA_GOB_SQUAD_DEFEATED);
- break;
- }
- }
- if (data == IN_PROGRESS)
- {
- switch (type)
- {
- case 70683://dark shaman xorenth
- {
- for (uint64 cGuid : darkShamanAddsGuids)
- {
- if (Creature* c = instance->GetCreature(cGuid))
- {
- c->GetAI()->DoAction(1);//Set in combat.
- }
- }
- }
- case NPC_PATCH:
- for (uint64 guid : squadGuids)
- if (Creature* creature = instance->GetCreature(guid))
- {
- creature->SetHomePosition(creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), creature->GetOrientation());//if the player is noob and dies, just stay there..
- creature->GetAI()->DoAction(6);
- }
- break;
- }
- }
- if (m_scenario.IsCompleted())
- CompleteScenario();
- }
- };
- InstanceScript* GetInstanceScript(InstanceMap* map) const
- {
- return new instance_ragefire_core_InstanceScript(map);
- }
- };
- class ragefire_core_detonator : public CreatureScript
- {
- public:
- ragefire_core_detonator() : CreatureScript("ragefire_core_detonator") { }
- struct ragefire_core_detonatorAI : public ScriptedAI
- {
- ragefire_core_detonatorAI(Creature* creature) : ScriptedAI(creature), startTicking(false), msg("5") { }
- void OnSpellClick(Unit* /*clicker*/) override
- {
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- if (!startTicking)
- {
- startTicking = true;
- me->GetInstanceScript()->SetData(70672, SPECIAL);
- events.ScheduleEvent(1, 5000);
- std::list<Creature*> bombList;
- me->GetCreatureListWithEntryInGrid(bombList, 71098, 50.0f);
- for (Creature* c : bombList)
- {
- c->SetMaxHealth(999999);
- c->SetFullHealth();
- DoCast(c, 141624);//ignite the bombs spell
- }
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!startTicking)
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- if (GameObject* pDoor = me->FindNearestGameObject(220168, 40.0f))
- {
- pDoor->SetLootState(GO_READY);
- pDoor->UseDoorOrButton(10000 * 999, false, me);
- pDoor->CastSpell(me, 148964);
- }
- me->GetInstanceScript()->SetData(me->GetEntry(), DONE);
- DoCastAOE(137548);
- me->DespawnOrUnsummon();
- break;
- case 2:
- SendNotifiactionToMap(me->GetMap(), "");
- break;
- }
- }
- }
- private:
- std::string msg;
- bool startTicking;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_detonatorAI(creature);
- }
- };
- class ragefire_core_ticking_bomb : public CreatureScript
- {
- public:
- ragefire_core_ticking_bomb() : CreatureScript("ragefire_core_ticking_bomb") { }
- struct ragefire_core_ticking_bombAI : public ScriptedAI
- {
- ragefire_core_ticking_bombAI(Creature* creature) : ScriptedAI(creature), startTicking(false) { }
- void Reset()
- {
- // me->SetVisible(false);
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- me->SetVisible(true);
- break;
- case 2:
- startTicking = true;
- me->SetEntry(71098);
- DoCast(142072);
- events.ScheduleEvent(1, 5000);
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!startTicking)
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- DoCast(149353);
- me->DespawnOrUnsummon();
- break;
- }
- }
- }
- private:
- bool startTicking;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_ticking_bombAI(creature);
- }
- };
- class ragefire_core_npc_patch : public CreatureScript
- {
- public:
- ragefire_core_npc_patch() : CreatureScript("ragefire_core_npc_patch") { }
- struct ragefire_core_npc_patchAI : public ScriptedAI
- {
- ragefire_core_npc_patchAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- events.ScheduleEvent(1, 3000);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- }
- void Reset() override
- {
- }
- InstanceScript* instance;
- void MovementInform(uint32 /*type*/, uint32 id)
- {
- switch (id)
- {
- case 1:
- Say(me, "Newt, we need this door open now.");
- if (Creature* c = NearestCreature(me, NPC_NEWT))
- c->GetAI()->DoAction(2);
- break;
- case 2:
- me->SetOrientation(1.768873f);
- me->GetMotionMaster()->MovePoint(3, 1424.620850f, 864.095642f, 38.610504f);
- break;
- case 4:
- Say(me, "What the..");
- if (Creature* boss = me->FindNearestCreature(70683, 120.0f))
- boss->GetAI()->DoAction(1);
- if (Creature* c = NearestCreature(me, NPC_TICKER))
- c->GetAI()->DoAction(5);
- break;
- }
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- events.ScheduleEvent(2, 2000);
- break;
- case 2:
- events.ScheduleEvent(3, 2000);
- break;
- case 3:
- events.ScheduleEvent(7, 1000);
- break;
- case 4:
- Yell(me, "Move! Move! Move!");
- events.ScheduleEvent(8, 1000);
- break;
- case 5:
- events.ScheduleEvent(9, 4000);
- break;
- case 6:
- if (Creature* enemy = me->FindNearestCreature(71244, 50.0f))
- {
- me->SetInCombatWith(enemy);
- me->Attack(enemy, true);
- me->AddThreat(enemy, 500.0f);
- }
- break;
- case 7:
- events.ScheduleEvent(10, 3000);
- break;
- case 8:
- events.ScheduleEvent(12, 3000);
- break;
- case 9:
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(0, 1412.650635f, 1043.317871f, 34.165894f);
- events.ScheduleEvent(13, 2000);
- break;
- case 12:
- Say(me, "These supply crates came from Orgrimmar. What is Garrosh planning to do with so many war supplies?");
- break;
- case 13:
- me->GetMotionMaster()->MovePoint(5, 1489.619629f, 1004.998657f, 38.381786f);
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- Say(me, "Newt, get that door open.");
- me->PlayOneShotAnimKit(25); //point
- if (Creature* c = NearestCreature(me, NPC_NEWT))
- c->GetAI()->DoAction(1);
- break;
- case 2:
- Say(me, "Grit, Ticker and Volt, you three back her up.");
- if (Creature* c = NearestCreature(me, NPC_TICKER))
- c->GetAI()->DoAction(1);
- break;
- case 3:
- if (Player* p = me->FindNearestPlayer(150.0f))//warning gms will trigger this
- me->MonsterSay("Recruit $n, you're with me", 0, p->GetGUID());
- events.ScheduleEvent(4, 3000);
- break;
- case 4:
- Say(me, "We've tracked the recent disappearences in Durotar to this abandoned section of Ragefire.");
- events.ScheduleEvent(5, 4000);
- break;
- case 5:
- Say(me, "It's our job to find out who's behind these abductions and put a stop to them.");
- events.ScheduleEvent(6, 4000);
- break;
- case 6:
- Say(me, "Stay close.");
- me->GetMotionMaster()->MovePoint(1, 1417.978516f, 870.028076f, 38.061775f);
- break;
- case 7:
- me->GetMotionMaster()->MovePoint(2, 1425.401001f, 862.816650f, 38.733353f);
- break;
- case 8:
- me->GetMotionMaster()->MovePoint(4, 1409.4255659f, 925.447998f, 36.675375f);
- break;
- case 9:
- Yell(me, "Gob Squad, defend yourselves!");
- if (instance)
- instance->SetData(me->GetEntry(), IN_PROGRESS);
- break;
- case 10:
- Yell(me, "We arn't your enemy, Xorenth!");
- events.ScheduleEvent(11, 3000);
- break;
- case 11:
- if (Creature* c = NearestCreature(me, 70683))
- c->GetAI()->DoAction(3);
- break;
- case 12:
- Yell(me, "We'll show you who's lesser!");
- break;
- case 13:
- Say(me, "This is bad.");
- events.ScheduleEvent(14, 2000);
- break;
- case 14:
- Say(me, "All of you fan out and search the chamber. If Garrosh is behind this we're going to need proof.");
- break;
- }
- if (UpdateVictim())
- DoMeleeAttackIfReady();
- }
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_npc_patchAI(creature);
- }
- };
- class ragefire_core_npc_newt : public CreatureScript
- {
- public:
- ragefire_core_npc_newt() : CreatureScript("ragefire_core_npc_newt") { }
- struct ragefire_core_npc_newtAI : public ScriptedAI
- {
- ragefire_core_npc_newtAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() override
- {
- }
- void MovementInform(uint32 /*type*/, uint32 id)
- {
- switch (id)
- {
- case 1:
- break;
- case 2:
- Say(me, "The charges are all set; hit the detonator as soon as you're ready!");
- me->SummonCreature(70662, 1420.861450f, 865.418701f, 38.158325f, TEMPSUMMON_MANUAL_DESPAWN);
- me->SetOrientation(1.768873f);
- me->GetMotionMaster()->MovePoint(3, 1420.794434f, 864.493469f, 38.186062f);
- break;
- case 3:
- break;
- }
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- events.ScheduleEvent(1, 3000);
- break;
- case 2:
- events.ScheduleEvent(6, 2000);
- break;
- case 4:
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- me->GetMotionMaster()->MoveFollow(c, 5.0f, 3.0f);
- break;
- case 6:
- if (Creature* enemy = me->FindNearestCreature(71244, 50.0f))
- {
- me->SetInCombatWith(enemy);
- DoZoneInCombat(enemy);
- me->Attack(enemy, true);
- }
- break;
- case 9:
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(0, 1453.287476f, 1059.285400f, 34.403152f);
- break;
- case 13:
- me->GetMotionMaster()->MovePoint(5, 1487.163818f, 1002.904053f, 37.929745f);
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- Say(me, "Yes, Sir!");
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- c->GetAI()->DoAction(1);
- events.ScheduleEvent(2, 2000);
- break;
- case 2:
- me->GetMotionMaster()->MovePoint(1, 1417.096069f, 885.688904f, 37.775940f);
- break;
- case 3://SPELLID ticking timebomb: 141601
- case 4:
- case 5://planting bombs TODO
- break;
- case 6:
- Say(me, "I'm setting the last charge now, sir!");
- me->GetMotionMaster()->MovePoint(2, 1420.563965f, 864.112671f, 38.187874f);
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- c->GetAI()->DoAction(3);
- break;
- }
- }
- if (UpdateVictim())
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_npc_newtAI(creature);
- }
- };
- class ragefire_core_npc_grit : public CreatureScript
- {
- public:
- ragefire_core_npc_grit() : CreatureScript("ragefire_core_npc_grit") { }
- struct ragefire_core_npc_gritAI : public ScriptedAI
- {
- ragefire_core_npc_gritAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() override
- {
- me->LoadEquipment(62249);
- }
- void MovementInform(uint32 /*type*/, uint32 id)
- {
- switch (id)
- {
- case 1:
- break;
- }
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- events.ScheduleEvent(1, 10);
- break;
- case 4:
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- me->GetMotionMaster()->MoveFollow(c, 5.0f, 4.0f);
- break;
- case 6:
- if (Creature* enemy = me->FindNearestCreature(71244, 50.0f))
- {
- me->SetInCombatWith(enemy);
- DoZoneInCombat(enemy);
- me->Attack(enemy, true);
- }
- break;
- case 9:
- events.ScheduleEvent(2, 2000);
- break;
- case 13:
- me->GetMotionMaster()->MovePoint(5, 1489.619629f, 997.013855f, 39.032120f);
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- me->GetMotionMaster()->MovePoint(1, 1401.851074f, 861.117004f, 38.370773f);
- break;
- }
- }
- if (UpdateVictim())
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_npc_gritAI(creature);
- }
- };
- class ragefire_core_npc_ticker : public CreatureScript
- {
- public:
- ragefire_core_npc_ticker() : CreatureScript("ragefire_core_npc_ticker") { }
- struct ragefire_core_npc_tickerAI : public ScriptedAI
- {
- ragefire_core_npc_tickerAI(Creature* creature) : ScriptedAI(creature), _cannonBalls(0), meetUp(false), _batteries(0), _poolPony(false), _eggYolk(false), _count(0)
- {
- instance = me->GetInstanceScript();
- }
- void Reset() override
- {
- me->LoadEquipment(62249);
- }
- InstanceScript* instance;
- void MovementInform(uint32 /*type*/, uint32 id)
- {
- switch (id)
- {
- case 5:
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- Say(me, "Recruit, bring me that pool pony, three cannon balls, two batteries and some of that protodrake egg yolk.");
- events.ScheduleEvent(20, 10000);
- break;
- }
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- events.ScheduleEvent(1, 3000);
- break;
- case 4:
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- me->GetMotionMaster()->MoveFollow(c, 5.0f, 1.0f);
- break;
- case 5:
- events.ScheduleEvent(3, 1000);
- break;
- case 6:
- if (Creature* enemy = me->FindNearestCreature(71244, 50.0f))
- {
- me->SetInCombatWith(enemy);
- DoZoneInCombat(enemy);
- me->Attack(enemy, true);
- }
- break;
- case 13:
- me->GetMotionMaster()->MovePoint(5, 1496.913818f, 1001.985840f, 38.286098f);
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- Say(me, "On it.");
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- c->GetAI()->DoAction(2);
- events.ScheduleEvent(2, 2000);
- break;
- case 2:
- if (Creature* c = NearestCreature(me, NPC_GRIT))
- c->GetAI()->DoAction(1);
- if (Creature* c = NearestCreature(me, NPC_VOLT))
- c->GetAI()->DoAction(1);
- me->GetMotionMaster()->MovePoint(1, 1411.282471f, 858.3328825f, 37.793259f);
- break;
- case 3:
- Yell(me, "Sir, these Kor'kron don't seem very friendly!");
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- c->GetAI()->DoAction(5);
- break;
- case 20://move to ticker LOL
- if (_count >= 7)
- {
- Yell(me, "My masterpiece is finished!");
- events.ScheduleEvent(21, 2000);
- }
- else
- events.ScheduleEvent(20, 3000);
- break;
- case 21:
- if (Creature* c = NearestCreature(me, NPC_VOLT))
- Yell(c, "It's... it's beautiful!");
- if (Creature* c = NearestCreature(me, NPC_NEWT))
- Say(c, "What the heck is the pool pony for?");
- events.ScheduleEvent(22, 2000);
- break;
- case 22:
- Say(me, "Don't question my genius!");
- events.ScheduleEvent(23, 2000);
- break;
- case 23:
- if (Creature* c = NearestCreature(me, NPC_GRIT))
- Say(c, "I don't care what it's for, is it going to get this door open?");
- events.ScheduleEvent(24, 4000);
- break;
- case 24:
- Say(me, "This thing could open Gallywix's personal safe!");
- if (Creature* c = NearestCreature(me, NPC_MATID_BOMB))
- c->CastSpell(c, SPELL_MASSIVE_EXPLOSION);
- events.ScheduleEvent(25, 2000);
- break;
- case 25:
- if (Creature* c = NearestCreature(me, NPC_MATID_BOMB))
- c->GetAI()->DoAction(1);
- Say(me, "Once the detonator goes off in... err... NOW!");
- break;
- }
- }
- if (UpdateVictim())
- DoMeleeAttackIfReady();
- }
- void mantidBombCast(uint32 spellId)
- {
- if (Creature* c = me->FindNearestCreature(NPC_MATID_BOMB, 60.0f))
- c->CastSpell(c, spellId, false);
- _count++;
- }
- void sGossipHello(Player* player) override
- {
- if (player->isGameMaster())
- {
- instance->SetData(NPC_CANNON_BALLS, DONE);
- instance->SetData(NPC_CANNON_BALLS, DONE);
- instance->SetData(NPC_CANNON_BALLS, DONE);
- instance->SetData(NPC_BATTERY, DONE);
- instance->SetData(NPC_POOL_PONY, DONE);
- instance->SetData(NPC_EGG_YOLK, DONE);
- instance->SetData(NPC_BATTERY, DONE);
- instance->SetData(NPC_BATTERY, DONE);
- _count = 7;
- }
- if (!meetUp)
- {
- meetUp = true;
- instance->SetData(NPC_PATCH, DONE);
- }
- if (player->HasAura(SPELL_CANNON_BALL))
- {
- player->RemoveAura(SPELL_CANNON_BALL);
- if (_cannonBalls < 3)
- {
- instance->SetData(NPC_CANNON_BALLS, DONE);
- mantidBombCast(SPELL_ATTACH_CANNON_BALL1 + _cannonBalls);
- switch (_cannonBalls)
- {
- case 0:
- Say(me, "That's exactly what we needed!");
- break;
- case 1:
- Say(me, "Careful! This isn't a toy!");
- break;
- case 2:
- Say(me, "This may be my greatest work yet!");
- break;
- }
- ++_cannonBalls;
- }
- }
- if (player->HasAura(SPELL_BATTERY))
- {
- player->RemoveAura(SPELL_BATTERY);
- if (_batteries < 2)
- {
- instance->SetData(NPC_BATTERY, DONE);
- mantidBombCast(SPELL_ATTACH_BATTERY1 + _batteries);
- switch (_batteries)
- {
- case 0:
- Say(me, "Just a little more power...");
- break;
- case 1:
- Say(me, "This should give us enough power to disable the stabilization matrix");
- break;
- }
- _batteries++;
- }
- }
- if (player->HasAura(SPELL_POOL_PONY))
- {
- player->RemoveAura(SPELL_POOL_PONY);
- if (!_poolPony)
- {
- Say(me, "The most important ingredient!");
- mantidBombCast(SPELL_ATTACH_POOL_PONY);
- _poolPony = true;
- instance->SetData(NPC_POOL_PONY, DONE);
- }
- }
- if (player->HasAura(SPELL_EGG_YOLK))
- {
- player->RemoveAura(SPELL_EGG_YOLK);
- if (!_eggYolk)
- {
- _eggYolk = true;
- mantidBombCast(SPELL_ATTACH_EGG_YOLK);
- Say(me, "You carried that with your hands?! Uh... you should probably see a medic when we get back...");
- instance->SetData(NPC_EGG_YOLK, DONE);
- }
- }
- player->CLOSE_GOSSIP_MENU();
- }
- private:
- uint32 _cannonBalls;
- uint32 _batteries;
- bool _poolPony;
- bool _eggYolk;
- bool meetUp;
- uint32 _count;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_npc_tickerAI(creature);
- }
- };
- class ragefire_core_npc_volt : public CreatureScript
- {
- public:
- ragefire_core_npc_volt() : CreatureScript("ragefire_core_npc_volt") { }
- struct ragefire_core_npc_voltAI : public ScriptedAI
- {
- ragefire_core_npc_voltAI(Creature* creature) : ScriptedAI(creature) { }
- void Reset() override
- {
- me->LoadEquipment(62249);
- }
- void MovementInform(uint32 /*type*/, uint32 id)
- {
- switch (id)
- {
- case 1:
- break;
- }
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- events.ScheduleEvent(1, 10);
- break;
- case 4:
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- me->GetMotionMaster()->MoveFollow(c, 5.0f, 5.0f);
- break;
- case 6:
- if (Creature* enemy = me->FindNearestCreature(71244, 50.0f))
- {
- me->SetInCombatWith(enemy);
- DoZoneInCombat(enemy);
- me->Attack(enemy, true);
- }
- break;
- case 9:
- Say(me, "Sir these are Garrosh's men.");
- me->GetMotionMaster()->Clear();
- me->GetMotionMaster()->MovePoint(0, 1392.202026f, 999.338257f, 33.381569f);
- break;
- case 13:
- me->GetMotionMaster()->MovePoint(5, 1482.913818f, 998.0f, 38.286098f);
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- me->GetMotionMaster()->MovePoint(1, 1421.058228f, 853.469604f, 38.675117f);
- break;
- }
- }
- if (UpdateVictim())
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_npc_voltAI(creature);
- }
- };
- enum darkShamanXorenthSpells
- {
- SPELL_GLACIAL_TOTEM = 142320,
- SPELL_RUINED_EARTH = 142306,
- SPELL_TWISTED_ELEMENTS = 142296,
- };
- class boss_ragefire_dark_shaman_xorenth : public CreatureScript
- {
- public:
- boss_ragefire_dark_shaman_xorenth() : CreatureScript("boss_ragefire_dark_shaman_xorenth") { }
- CreatureAI* GetAI(Creature* pCreature) const
- {
- return new boss_ragefire_dark_shaman_xorenthAI(pCreature);
- }
- /*
- Introduction
- Dark Shaman Xorenth yells: Intruders! Stop them!
- Ticker yells: These Kor'kron don't seem very friendly!
- Patch yells: Gob Squad, defend yourselves!
- Aggro
- Dark Shaman Xorenth yells: Weaklings!
- Dark Shaman Xorenth yells: Seal the gate, and inform the overseer immediately.
- Patch yells: We aren't your enemy, Xorenth!
- Dark Shaman Xorenth yells: All lesser races are enemies of the true Horde!
- Patch yells: Lesser? We'll show you who's lesser!
- */
- struct boss_ragefire_dark_shaman_xorenthAI : public BossAI
- {
- boss_ragefire_dark_shaman_xorenthAI(Creature* pCreature) : BossAI(pCreature, 0), intro(false), _startCombat(false)
- {
- instance = me->GetInstanceScript();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetReactState(REACT_DEFENSIVE);
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- if (!intro)
- {
- intro = true;
- Yell(me, "Intruders! Stop them!");
- }
- if (instance)
- instance->SetData(me->GetEntry(), IN_PROGRESS);
- break;
- case 2:
- me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetInCombatWithZone();
- EnterCombat(me);
- break;
- case 3:
- Yell(me, "All lesser races are enemies of the true horde!");
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- c->GetAI()->DoAction(8);
- break;
- }
- }
- void Reset()
- {
- if (instance)
- instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
- if (intro)
- {
- me->SetReactState(REACT_AGGRESSIVE);
- me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- }
- _Reset();
- }
- void EnterCombat(Unit* /*attacker*/) override
- {
- if (!_startCombat)
- {
- _startCombat = true;
- Yell(me, "Seal the gate, and inform the overseer immediately.");
- instance->SetData(me->GetEntry(), SPECIAL);
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- c->GetAI()->DoAction(7);
- }
- if (instance)
- instance->SendEncounterUnit(ENCOUNTER_FRAME_ENGAGE, me);
- events.Reset();
- events.ScheduleEvent(1, urand(8000, 12000));
- events.ScheduleEvent(2, urand(14000, 27000));
- events.ScheduleEvent(3, urand(8000, 9000));
- events.ScheduleEvent(4, 10);//not correct at all but it should be fine for now, more of a visual
- }
- void JustDied(Unit* /*killer*/) override
- {
- if (instance)
- instance->SetData(me->GetEntry(), DONE);
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!UpdateVictim())
- return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1://Twisted Elements
- if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 15.0f, true))
- DoCast(target, SPELL_TWISTED_ELEMENTS);
- events.ScheduleEvent(1, urand(4000, 7000));
- break;
- case 2://Glacial Freeze Totem
- DoCast(SPELL_GLACIAL_TOTEM);
- events.ScheduleEvent(2, urand(14000, 27000));
- break;
- case 3://Ruined Earth
- DoCast(SPELL_RUINED_EARTH);
- events.ScheduleEvent(3, urand(8000, 9000));
- break;
- case 4:
- if (GameObject* pDoor = me->FindNearestGameObject(220169, 440.0f))
- {
- pDoor->SetLootState(GO_READY);
- pDoor->UseDoorOrButton(10000 * 999, false, me);
- }
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- private:
- bool intro;
- bool _startCombat;
- InstanceScript* instance;
- };
- };
- class spell_ruined_earth_71262 : public CreatureScript
- {
- public:
- spell_ruined_earth_71262() : CreatureScript("spell_ruined_earth_71262") { }
- struct spell_ruined_earth_71262AI : public ScriptedAI
- {
- spell_ruined_earth_71262AI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetReactState(REACT_DEFENSIVE);
- }
- void Reset() override
- {
- DoCast(142310);
- events.ScheduleEvent(1, 6000);
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- me->RemoveAura(142310);
- DoCast(142311);
- break;
- }
- }
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new spell_ruined_earth_71262AI(creature);
- }
- };
- class npc_glacial_freeze_totem : public CreatureScript
- {
- public:
- npc_glacial_freeze_totem() : CreatureScript("npc_glacial_freeze_totem") { }
- struct npc_glacial_freeze_totemAI : public ScriptedAI
- {
- npc_glacial_freeze_totemAI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetReactState(REACT_PASSIVE);
- }
- void Reset() override
- {
- events.ScheduleEvent(1, 2000);
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- DoCast(142322);
- events.ScheduleEvent(1, 2000);
- break;
- }
- }
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_glacial_freeze_totemAI(creature);
- }
- };
- class ragefire_core_npc_korkron_shadowblade : public CreatureScript
- {
- public:
- ragefire_core_npc_korkron_shadowblade() : CreatureScript("ragefire_core_npc_korkron_shadowblade") { }
- struct ragefire_core_npc_korkron_shadowbladeAI : public ScriptedAI
- {
- ragefire_core_npc_korkron_shadowbladeAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- }
- InstanceScript* instance;
- void Reset()
- {
- events.Reset();
- _shadowStep = true;
- }
- void MovementInform(uint32 /*type*/, uint32 id) override
- {
- if (id == 22)
- {
- me->SetInCombatWithZone();
- me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- }
- }
- void JustDied(Unit* /*killer*/) override
- {
- if (instance)
- instance->SetData(me->GetEntry(), DONE);
- }
- void EnterCombat(Unit* /*attacker*/) override
- {
- events.ScheduleEvent(1, urand(13000, 15000));
- instance->SetData(me->GetEntry(), SPECIAL);
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- if (Creature* boss = me->FindNearestCreature(70683, 28.0f))
- {
- me->SetInCombatWithZone();
- }
- break;
- case 10:
- events.ScheduleEvent(10, 1000);
- me->SetInCombatWithZone();
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!UpdateVictim())
- return;
- events.Update(diff);
- if (_shadowStep && me->GetDistance2d(me->GetVictim()) <= 40.0f)
- {
- _shadowStep = false;
- DoCastVictim(80576);//ShadowStep can be143262, wowhead says 80576
- }
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- _shadowStep = true;
- events.ScheduleEvent(1, urand(13000, 15000));
- break;
- case 10:
- if (Creature* creature = NearestCreature(me, NPC_TRIGGER_3, 30.0f))
- me->GetMotionMaster()->MovePoint(22, creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), false);
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- private:
- bool _shadowStep;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_npc_korkron_shadowbladeAI(creature);
- }
- };
- enum korkronDarkShamanSpells
- {
- SPELL_ELECTRIFIED_GROUND = 145547,
- SPELL_LAVA_BURST = 142338,
- SPELL_POISON_BOLT_TOTEM = 145549,
- };
- class ragefire_core_npc_korkron_dark_shaman : public CreatureScript
- {
- public:
- ragefire_core_npc_korkron_dark_shaman() : CreatureScript("ragefire_core_npc_korkron_dark_shaman") { }
- struct ragefire_core_npc_korkron_dark_shamanAI : public ScriptedAI
- {
- ragefire_core_npc_korkron_dark_shamanAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- }
- InstanceScript* instance;
- void Reset()
- {
- events.Reset();
- }
- void MovementInform(uint32 /*type*/, uint32 id) override
- {
- if (id == 22)
- {
- me->SetInCombatWithZone();
- me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- }
- }
- void JustDied(Unit* /*killer*/) override
- {
- if (instance)
- {
- instance->SetData(me->GetEntry(), DONE);
- instance->SetData(me->GetEntry(), SPECIAL);
- }
- }
- void EnterCombat(Unit* /*attacker*/) override
- {
- events.ScheduleEvent(1, urand(10000, 12000));
- events.ScheduleEvent(2, urand(6000, 8000));//reset 8 sec
- events.ScheduleEvent(3, urand(20000, 30000)); //reset 20-30
- }
- void DoAction(const int32 action) override
- {
- switch (action)
- {
- case 1:
- if (Creature* boss = me->FindNearestCreature(70683, 28.0f))
- {
- me->SetInCombatWithZone();
- }
- break;
- case 10:
- me->SetInCombatWithZone();
- events.ScheduleEvent(10, 1000);
- break;
- }
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!UpdateVictim())
- return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- DoCast(SPELL_ELECTRIFIED_GROUND);
- events.ScheduleEvent(1, urand(20000, 30000));
- break;
- case 2:
- DoCastVictim(SPELL_LAVA_BURST);
- events.ScheduleEvent(2, 8000);
- break;
- case 3:
- DoCast(SPELL_POISON_BOLT_TOTEM);
- events.ScheduleEvent(3, urand(20000, 30000));
- break;
- case 10:
- if (Creature* creature = NearestCreature(me, NPC_TRIGGER_3, 30.0f))
- me->GetMotionMaster()->MovePoint(22, creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), false);
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new ragefire_core_npc_korkron_dark_shamanAI(creature);
- }
- };
- //71097 - npc_ragefire_core_ragefire_peon
- class npc_ragefire_core_ragefire_peon : public CreatureScript
- {
- public:
- npc_ragefire_core_ragefire_peon() : CreatureScript("npc_ragefire_core_ragefire_peon") { }
- struct npc_ragefire_core_ragefire_peonAI : public ScriptedAI
- {
- npc_ragefire_core_ragefire_peonAI(Creature* creature) : ScriptedAI(creature)
- {
- instance = me->GetInstanceScript();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetReactState(REACT_PASSIVE);
- }
- InstanceScript* instance;
- void MovementInform(uint32 /*type*/, uint32 id) override
- {
- if (id == 1)
- me->GetMotionMaster()->MovePoint(2, 1535.967896f, 1028.711792f, 38.705750f);
- if (id == 2)
- me->DespawnOrUnsummon();
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_ragefire_peonAI(creature);
- }
- };
- //71203 npc_ragefire_core_supply_crates
- class npc_ragefire_core_supply_crates : public CreatureScript
- {
- public:
- npc_ragefire_core_supply_crates() : CreatureScript("npc_ragefire_core_supply_crates") { }
- struct npc_ragefire_core_supply_cratesAI : public ScriptedAI
- {
- npc_ragefire_core_supply_cratesAI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- instance = me->GetInstanceScript();
- pGossip = false;
- }
- bool pGossip;
- InstanceScript* instance;
- void sGossipHello(Player* player)
- {
- if (!pGossip)
- {
- pGossip = true;
- if (instance)
- instance->SetData(me->GetEntry(), DONE);
- if (Creature* c = NearestCreature(me, NPC_VOLT))
- Say(c, "These supply crates came from Orgrimmar. What is Garrosh planning to do with so many war supplies?");
- }
- player->SEND_GOSSIP_MENU(me->GetEntry(), me->GetGUID());
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_supply_cratesAI(creature);
- }
- };
- //71208 npc_ragefire_core_protodrake_eggs
- class npc_ragefire_core_protodrake_eggs : public CreatureScript
- {
- public:
- npc_ragefire_core_protodrake_eggs() : CreatureScript("npc_ragefire_core_protodrake_eggs") { }
- struct npc_ragefire_core_protodrake_eggsAI : public ScriptedAI
- {
- npc_ragefire_core_protodrake_eggsAI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- instance = me->GetInstanceScript();
- pGossip = false;
- }
- bool pGossip;
- InstanceScript* instance;
- void sGossipHello(Player* player)
- {
- if (!pGossip)
- {
- pGossip = true;
- if (instance)
- instance->SetData(me->GetEntry(), DONE);
- if (Creature* c = NearestCreature(me, NPC_PATCH))
- c->MonsterSay("Protodrakes eggs... Is Garrosh working with the Dragonmaw? Orcs on protodrakes sounds bad to me, $n, very bad.", 0, player->GetGUID());
- }
- player->SEND_GOSSIP_MENU(me->GetEntry(), me->GetGUID());
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_protodrake_eggsAI(creature);
- }
- };
- //71209 npc_ragefire_core_pandaria_artifacts
- class npc_ragefire_core_pandaria_artifacts : public CreatureScript
- {
- public:
- npc_ragefire_core_pandaria_artifacts() : CreatureScript("npc_ragefire_core_pandaria_artifacts") { }
- struct npc_ragefire_core_pandaria_artifactsAI : public ScriptedAI
- {
- npc_ragefire_core_pandaria_artifactsAI(Creature* creature) : ScriptedAI(creature)
- {
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- instance = me->GetInstanceScript();
- pGossip = false;
- }
- bool pGossip;
- InstanceScript* instance;
- void sGossipHello(Player* player)
- {
- if (!pGossip)
- {
- pGossip = true;
- if (instance)
- instance->SetData(me->GetEntry(), DONE);
- if (Creature* c = NearestCreature(me, NPC_NEWT))
- Say(c, "These are from the dig site in the Vale of Eternal Blossoms. What is Garrosh trying to find there?");
- }
- player->SEND_GOSSIP_MENU(me->GetEntry(), me->GetGUID());
- }
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_pandaria_artifactsAI(creature);
- }
- };
- class npc_ragefire_stage3 : public CreatureScript
- {
- public:
- npc_ragefire_stage3() : CreatureScript("npc_ragefire_stage3") { }
- struct npc_ragefire_stage3AI : public ScriptedAI
- {
- npc_ragefire_stage3AI(Creature* creature) : ScriptedAI(creature), startUpdate(false), spawned(false)
- {
- instance = me->GetInstanceScript();
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- }
- InstanceScript* instance;
- void DoAction(const int32 action) override
- {
- if (action == 1)
- {
- startUpdate = true;
- me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK);
- }
- }
- void OnSpellClick(Unit* /*clicker*/) override
- {
- if (spawned)
- return;
- switch (me->GetEntry())
- {
- case NPC_BATTERY:
- SendNotifiactionToMap(me->GetMap(), "|cffFFFF00Embercores wakes from the lava!");
- events.ScheduleEvent(1, 500);
- break;
- case NPC_EGG_YOLK:
- events.ScheduleEvent(2, 500);
- break;
- }
- spawned = true;
- }
- void JustDied(Unit* /*killer*/) override
- {
- events.Reset();
- startUpdate = false;
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!startUpdate)
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1://embercore
- if (Creature* emberCore = me->SummonCreature(70663, 1383.007935f, 985.9666553f, 31.678915f, 6.0f, TEMPSUMMON_MANUAL_DESPAWN))
- emberCore->GetAI()->DoAction(1);
- if (Creature* emberCore = me->SummonCreature(70663, 1386.297974f, 974.14063f, 33.518883f, 1.110001f, TEMPSUMMON_MANUAL_DESPAWN))
- emberCore->GetAI()->DoAction(1);
- if (Creature* emberCore = me->SummonCreature(70663, 1388.084229f, 1019.177124f, 31.682781f, 1.110001f, TEMPSUMMON_MANUAL_DESPAWN))
- emberCore->GetAI()->DoAction(1);
- break;
- case 2:
- break;
- }
- }
- }
- private:
- bool startUpdate;
- bool spawned;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_stage3AI(creature);
- }
- };
- class npc_ragefire_embercore : public CreatureScript
- {
- public:
- npc_ragefire_embercore() : CreatureScript("npc_ragefire_embercore") { }
- struct npc_ragefire_core_embercoreAI : public ScriptedAI
- {
- npc_ragefire_core_embercoreAI(Creature* creature) : ScriptedAI(creature), startTicking(false)
- {
- instance = me->GetInstanceScript();
- DoCast(me, 141186);
- if (Player* player = me->FindNearestPlayer(200.0f))
- me->SetLevel(player->getLevel());
- }
- InstanceScript* instance;
- void JustDied(Unit* /*killer*/) override
- {
- events.Reset();
- startTicking = false;
- }
- void MovementInform(uint32 /*data*/, uint32 id) override
- {
- if (id == 1)
- {
- startTicking = true;
- chooseNewVictim();
- events.ScheduleEvent(1, urand(2000, 5000));
- }
- }
- void DoAction(const int32 action) override
- {
- if (action == 1)
- {
- startTicking = true;
- me->GetMotionMaster()->MovePoint(1, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 15.0f, false);
- }
- }
- void chooseNewVictim()
- {
- me->SetInCombatWithZone();
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!startTicking)
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- if (UpdateVictim())
- DoCastVictim(142298);//burning embers;
- else
- chooseNewVictim();
- events.ScheduleEvent(1, 8000);
- break;
- }
- }
- }
- private:
- bool startTicking;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_embercoreAI(creature);
- }
- };
- class npc_ragefire_core_mantid_bomb : public CreatureScript
- {
- public:
- npc_ragefire_core_mantid_bomb() : CreatureScript("npc_ragefire_core_mantid_bomb") { }
- struct npc_ragefire_core_mantid_bombAI : public ScriptedAI
- {
- npc_ragefire_core_mantid_bombAI(Creature* creature) : ScriptedAI(creature), startUpdate(false)
- {
- instance = me->GetInstanceScript();
- }
- InstanceScript* instance;
- void DoAction(const int32 action) override
- {
- if (action == 1)
- {
- startUpdate = true;
- events.ScheduleEvent(1, 1000);
- }
- }
- void JustDied(Unit* /*killer*/) override
- {
- events.Reset();
- startUpdate = false;
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!startUpdate)
- return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- DoCast(SPELL_HUGE_EXPLOSION);
- me->DespawnOrUnsummon(500);
- instance->SetData(me->GetEntry(), DONE);
- break;
- }
- }
- }
- private:
- bool startUpdate;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_mantid_bombAI(creature);
- }
- };
- class npc_ragefire_core_kor_kron_dire_soldier : public CreatureScript
- {
- public:
- npc_ragefire_core_kor_kron_dire_soldier() : CreatureScript("npc_ragefire_core_kor_kron_dire_soldier") { }
- struct npc_ragefire_core_kor_kron_dire_soldierAI : public ScriptedAI
- {
- npc_ragefire_core_kor_kron_dire_soldierAI(Creature* creature) : ScriptedAI(creature), startUpdate(false)
- {
- instance = me->GetInstanceScript();
- }
- InstanceScript* instance;
- void MovementInform(uint32 /*type*/, uint32 id) override
- {
- if (id == 22)
- {
- me->SetInCombatWithZone();
- me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- }
- }
- void DoAction(const int32 action) override
- {
- if (action == 10)
- {
- me->SetInCombatWithZone();
- startUpdate = true;
- events.ScheduleEvent(1, 1000);
- }
- }
- void JustDied(Unit* /*killer*/) override
- {
- events.Reset();
- startUpdate = false;
- instance->SetData(me->GetEntry(), SPECIAL);
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!UpdateVictim())
- return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- if (Creature* creature = NearestCreature(me, NPC_TRIGGER_3, 30.0f))
- me->GetMotionMaster()->MovePoint(22, creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), false);
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- private:
- bool startUpdate;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_kor_kron_dire_soldierAI(creature);
- }
- };
- class npc_ragefire_core_flame_hound : public CreatureScript
- {
- public:
- npc_ragefire_core_flame_hound() : CreatureScript("npc_ragefire_core_flame_hound") { }
- struct npc_ragefire_core_flame_houndAI : public ScriptedAI
- {
- npc_ragefire_core_flame_houndAI(Creature* creature) : ScriptedAI(creature), startUpdate(false)
- {
- instance = me->GetInstanceScript();
- }
- InstanceScript* instance;
- void MovementInform(uint32 /*type*/, uint32 id) override
- {
- if (id == 22)
- {
- me->SetInCombatWithZone();
- me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- }
- }
- void DoAction(const int32 action) override
- {
- if (action == 10)
- {
- me->SetInCombatWithZone();
- startUpdate = true;
- events.ScheduleEvent(1, 1000);
- }
- }
- void JustDied(Unit* /*killer*/) override
- {
- events.Reset();
- startUpdate = false;
- instance->SetData(me->GetEntry(), SPECIAL);
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!UpdateVictim())
- return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- if (Creature* creature = NearestCreature(me, NPC_TRIGGER_3, 30.0f))
- me->GetMotionMaster()->MovePoint(22, creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), false);
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- private:
- bool startUpdate;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_flame_houndAI(creature);
- }
- };
- class npc_ragefire_core_kor_kron_emberguard : public CreatureScript
- {
- public:
- npc_ragefire_core_kor_kron_emberguard() : CreatureScript("npc_ragefire_core_kor_kron_emberguard") { }
- struct npc_ragefire_core_kor_kron_emberguardAI : public ScriptedAI
- {
- npc_ragefire_core_kor_kron_emberguardAI(Creature* creature) : ScriptedAI(creature), startUpdate(false)
- {
- instance = me->GetInstanceScript();
- }
- InstanceScript* instance;
- void MovementInform(uint32 /*type*/, uint32 id) override
- {
- if (id == 22)
- {
- me->SetInCombatWithZone();
- me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation());
- }
- }
- void DoAction(const int32 action) override
- {
- if (action == 10)
- {
- me->SetInCombatWithZone();
- startUpdate = true;
- events.ScheduleEvent(1, 1000);
- }
- }
- void JustDied(Unit* /*killer*/) override
- {
- events.Reset();
- startUpdate = false;
- instance->SetData(me->GetEntry(), SPECIAL);
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!UpdateVictim())
- return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- if (Creature* creature = NearestCreature(me, NPC_TRIGGER_3, 30.0f))
- me->GetMotionMaster()->MovePoint(22, creature->GetPositionX(), creature->GetPositionY(), creature->GetPositionZ(), false);
- me->SetInCombatWithZone();
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- private:
- bool startUpdate;
- };
- CreatureAI* GetAI(Creature* creature) const
- {
- return new npc_ragefire_core_kor_kron_emberguardAI(creature);
- }
- };
- enum overseerSpells
- {
- SPELL_SHATTERING_CHARGE = 142773,
- SPELL_DEMOLISH_ARMOR = 142764,
- SPELL_SHATTERING_STOMP = 142771,
- };
- class boss_ragefire_overseer_elaglo : public CreatureScript
- {
- public:
- boss_ragefire_overseer_elaglo() : CreatureScript("boss_ragefire_overseer_elaglo") { }
- CreatureAI* GetAI(Creature* pCreature) const
- {
- return new boss_ragefire_overseer_elagloAI(pCreature);
- }
- struct boss_ragefire_overseer_elagloAI : public BossAI
- {
- boss_ragefire_overseer_elagloAI(Creature* pCreature) : BossAI(pCreature, 0)
- {
- instance = me->GetInstanceScript();
- me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- me->SetReactState(REACT_DEFENSIVE);
- }
- InstanceScript* instance;
- void DoAction(const int32 action) override
- {
- }
- void Reset()
- {
- if (instance)
- instance->SendEncounterUnit(ENCOUNTER_FRAME_DISENGAGE, me);
- _Reset();
- }
- void EnterCombat(Unit* /*attacker*/) override
- {
- _EnterCombat();
- DoCastVictim(SPELL_SHATTERING_CHARGE);
- events.ScheduleEvent(1, urand(3000, 20000));
- events.ScheduleEvent(2, urand(10000, 20000));
- }
- void JustDied(Unit* /*killer*/) override
- {
- if (instance)
- instance->SetData(me->GetEntry(), DONE);
- }
- void UpdateAI(const uint32 diff) override
- {
- if (!UpdateVictim())
- return;
- if (me->HasUnitState(UNIT_STATE_CASTING))
- return;
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch (eventId)
- {
- case 1:
- DoCastVictim(SPELL_DEMOLISH_ARMOR);
- events.ScheduleEvent(1, urand(10000, 20000));
- break;
- case 2:
- DoCast(SPELL_SHATTERING_STOMP);
- events.ScheduleEvent(2, urand(10000, 20000));
- break;
- }
- }
- DoMeleeAttackIfReady();
- }
- };
- };
- //stage 3 the sealed gate
- //misc spells found in sniffs
- /*
- Holding Bomb - 141806
- Unconscious - 141985
- Self Set on Fire - 141964
- */
- //misc npcs
- //protodrake whelp - 71401
- //Holding battery - 141904
- //holding cannon ball - 141832
- //egg yolk - 141914
- //stage 4
- //dire rage - 142760 Kor'kron dire soldier uses
- //this is custom
- class NPC_IRON_BODY_PONSHU_RAGEFIRE : public CreatureScript //CID : 98005
- {
- public:
- NPC_IRON_BODY_PONSHU_RAGEFIRE() : CreatureScript("NPC_IRON_BODY_PONSHU_RAGEFIRE")
- {
- }
- struct NPC_IRON_BODY_PONSHU_RAGEFIREAI : public ScriptedAI
- {
- InstanceScript* instance;
- void Reset()
- {
- instance = me->GetInstanceScript();
- if (!instance)
- me->DespawnOrUnsummon(1);
- me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
- }
- void DoAction(const int32 action) override
- {
- if (action == 1) // called on spawn
- events.ScheduleEvent(1, 2000);
- }
- void UpdateAI(const uint32 diff) override
- {
- events.Update(diff);
- while (uint32 eventId = events.ExecuteEvent())
- {
- switch(eventId)
- {
- case 1:
- if (Player* player = me->FindNearestPlayer(200.0f))
- me->MonsterSay("Very nice young $c", 0, player->GetGUID());
- me->HandleEmoteCommand(Emote::EMOTE_ONESHOT_TALK);
- events.ScheduleEvent(2, 4000);
- break;
- case 2:
- Say(me, "Now for my next task.");
- break;
- }
- }
- }
- };
- };
- void AddSC_secrets_of_ragefire()
- {
- new instance_ragefire_core();
- new ragefire_core_ticking_bomb();
- new ragefire_core_detonator();
- new ragefire_core_npc_volt();
- new ragefire_core_npc_grit();
- new ragefire_core_npc_newt();
- new ragefire_core_npc_patch();
- new ragefire_core_npc_ticker();
- new boss_ragefire_dark_shaman_xorenth();
- new spell_ruined_earth_71262();
- new npc_glacial_freeze_totem();
- new ragefire_core_npc_korkron_shadowblade();
- new ragefire_core_npc_korkron_dark_shaman();
- new npc_ragefire_core_ragefire_peon();
- new npc_ragefire_core_supply_crates();
- new npc_ragefire_core_protodrake_eggs();
- new npc_ragefire_core_pandaria_artifacts();
- new npc_ragefire_stage3();
- new npc_ragefire_embercore();
- new npc_ragefire_core_mantid_bomb();
- new npc_ragefire_core_kor_kron_dire_soldier();
- new npc_ragefire_core_flame_hound();
- new npc_ragefire_core_kor_kron_emberguard();
- new boss_ragefire_overseer_elaglo();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement