diff options
author | Andrew Letson <velinath@users.noreply.github.com> | 2017-11-20 13:36:37 -0500 |
---|---|---|
committer | funjoker <funjoker109@gmail.com> | 2021-02-15 19:13:25 +0100 |
commit | a36ddf47a9eeedc680dbea6252dec38fc4746529 (patch) | |
tree | 8846092342d8dd6d871a4a74690c65ddf8c18aa3 /src | |
parent | 9affe3628cd24d27009adc8595a40e996ab6ea49 (diff) |
DB/Scripts: Terokkar Forest SAI migration
(cherry picked from commit 4d338b1d4d6ddf449e52c38f6cb9cdeb9cbf32fe)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/scripts/Outland/zone_terokkar_forest.cpp | 334 |
1 files changed, 3 insertions, 331 deletions
diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index 225de071d7f..8ecac60dcff 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -18,26 +18,22 @@ /* ScriptData SDName: Terokkar_Forest SD%Complete: 85 -SDComment: Quest support: 9889, 10009, 10873, 10896, 10898, 11096, 10052, 10051. Skettis->Ogri'la Flight +SDComment: Quest support: 9889, 10898, 10052, 10051. SDCategory: Terokkar Forest EndScriptData */ /* ContentData npc_unkor_the_ruthless -npc_infested_root_walker -npc_rotting_forest_rager -npc_floon npc_isla_starmane -npc_slim +npc_skywing +npc_akuno EndContentData */ #include "ScriptMgr.h" #include "GameObject.h" -#include "GameObjectAI.h" #include "Group.h" #include "Player.h" #include "ScriptedEscortAI.h" -#include "ScriptedGossip.h" #include "WorldSession.h" /*###### @@ -165,43 +161,6 @@ public: }; /*###### -## npc_infested_root_walker -######*/ - -enum InfestedRootWalker -{ - SPELL_SUMMON_WOOD_MITES = 39130 -}; - -class npc_infested_root_walker : public CreatureScript -{ -public: - npc_infested_root_walker() : CreatureScript("npc_infested_root_walker") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_infested_root_walkerAI(creature); - } - - struct npc_infested_root_walkerAI : public ScriptedAI - { - npc_infested_root_walkerAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override { } - void EnterCombat(Unit* /*who*/) override { } - - void DamageTaken(Unit* done_by, uint32 &damage) override - { - if (done_by && done_by->GetTypeId() == TYPEID_PLAYER) - if (me->GetHealth() <= damage) - if (rand32() % 100 < 75) - //Summon Wood Mites - DoCast(me, SPELL_SUMMON_WOOD_MITES, true); - } - }; -}; - -/*###### ## npc_skywing ######*/ @@ -263,159 +222,6 @@ public: }; /*###### -## npc_rotting_forest_rager -######*/ - -enum RottingForestRager -{ - SPELL_SUMMON_LOTS_OF_WOOD_MITES = 39134 -}; - -class npc_rotting_forest_rager : public CreatureScript -{ -public: - npc_rotting_forest_rager() : CreatureScript("npc_rotting_forest_rager") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_rotting_forest_ragerAI(creature); - } - - struct npc_rotting_forest_ragerAI : public ScriptedAI - { - npc_rotting_forest_ragerAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override { } - void EnterCombat(Unit* /*who*/) override { } - - void DamageTaken(Unit* done_by, uint32 &damage) override - { - if (done_by->GetTypeId() == TYPEID_PLAYER) - if (me->GetHealth() <= damage) - if (rand32() % 100 < 75) - //Summon Lots of Wood Mites - DoCast(me, SPELL_SUMMON_LOTS_OF_WOOD_MITES, true); - } - }; -}; - -/*###### -## npc_floon -######*/ - -enum Floon -{ - SAY_FLOON_ATTACK = 0, - OPTION_ID_PAY_UP_OR_DIE = 0, - OPTION_ID_COLLECT_A_DEBT = 0, - MENU_ID_PAY_UP_OR_DIE = 7731, - MENU_ID_COLLECT_A_DEBT = 7732, - GOSSIP_FLOON_STRANGE_SOUNDS = 9442, - GOSSIP_HE_ALREADY_KILLED_ME = 9443, - - SPELL_SILENCE = 6726, - SPELL_FROSTBOLT = 9672, - SPELL_FROST_NOVA = 11831, - - QUEST_CRACKIN_SOME_SKULLS = 10009 -}; - -class npc_floon : public CreatureScript -{ -public: - npc_floon() : CreatureScript("npc_floon") { } - - struct npc_floonAI : public ScriptedAI - { - npc_floonAI(Creature* creature) : ScriptedAI(creature) - { - Initialize(); - m_uiNormFaction = creature->GetFaction(); - } - - void Initialize() - { - Silence_Timer = 2000; - Frostbolt_Timer = 4000; - FrostNova_Timer = 9000; - } - - uint32 m_uiNormFaction; - uint32 Silence_Timer; - uint32 Frostbolt_Timer; - uint32 FrostNova_Timer; - - void Reset() override - { - Initialize(); - if (me->GetFaction() != m_uiNormFaction) - me->SetFaction(m_uiNormFaction); - } - - void EnterCombat(Unit* /*who*/) override { } - - void UpdateAI(uint32 diff) override - { - if (!UpdateVictim()) - return; - - if (Silence_Timer <= diff) - { - DoCastVictim(SPELL_SILENCE); - Silence_Timer = 30000; - } else Silence_Timer -= diff; - - if (FrostNova_Timer <= diff) - { - DoCast(me, SPELL_FROST_NOVA); - FrostNova_Timer = 20000; - } else FrostNova_Timer -= diff; - - if (Frostbolt_Timer <= diff) - { - DoCastVictim(SPELL_FROSTBOLT); - Frostbolt_Timer = 5000; - } else Frostbolt_Timer -= diff; - - DoMeleeAttackIfReady(); - } - - bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override - { - uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId); - ClearGossipMenuFor(player); - if (action == GOSSIP_ACTION_INFO_DEF) - { - AddGossipItemFor(player, MENU_ID_PAY_UP_OR_DIE, OPTION_ID_PAY_UP_OR_DIE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - SendGossipMenuFor(player, GOSSIP_HE_ALREADY_KILLED_ME, me->GetGUID()); - } - if (action == GOSSIP_ACTION_INFO_DEF + 1) - { - CloseGossipMenuFor(player); - me->SetFaction(FACTION_ARAKKOA); - Talk(SAY_FLOON_ATTACK, player); - AttackStart(player); - } - return true; - } - - bool GossipHello(Player* player) override - { - if (player->GetQuestStatus(QUEST_CRACKIN_SOME_SKULLS) == QUEST_STATUS_INCOMPLETE) - AddGossipItemFor(player, MENU_ID_COLLECT_A_DEBT, OPTION_ID_COLLECT_A_DEBT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - - SendGossipMenuFor(player, GOSSIP_FLOON_STRANGE_SOUNDS, me->GetGUID()); - return true; - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_floonAI(creature); - } -}; - -/*###### ## npc_isla_starmane ######*/ enum IslaStarmaneData @@ -511,135 +317,6 @@ public: } }; -/*###### -## go_skull_pile -######*/ - -enum SkullPile -{ - OPTION_ID_GEZZARAK_THE_HUNTRESS = 0, - OPTION_ID_DARKSCREECHER_AKKARAI = 1, - OPTION_ID_KARROG = 2, - OPTION_ID_VAKKIZ_THE_WINDRAGER = 3, - GOSSIP_MENU_ID_SKULL_PILE = 8660, - ADVERSARIAL_BLOOD = 11885, - SUMMON_GEZZARAK_THE_HUNTRESS = 40632, - SUMMON_KARROG = 40640, - SUMMON_DARKSCREECHER_AKKARAI = 40642, - SUMMON_VAKKIZ_THE_WINDRAGER = 40644 -}; - -class go_skull_pile : public GameObjectScript -{ -public: - go_skull_pile() : GameObjectScript("go_skull_pile") { } - - struct go_skull_pileAI : public GameObjectAI - { - go_skull_pileAI(GameObject* go) : GameObjectAI(go) { } - - bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override - { - uint32 const sender = player->PlayerTalkClass->GetGossipOptionSender(gossipListId); - uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId); - ClearGossipMenuFor(player); - switch (sender) - { - case GOSSIP_SENDER_MAIN: SendActionMenu(player, action); break; - } - return true; - } - - bool GossipHello(Player* player) override - { - if ((player->GetQuestStatus(ADVERSARIAL_BLOOD) == QUEST_STATUS_INCOMPLETE) || player->GetQuestRewardStatus(ADVERSARIAL_BLOOD)) - { - AddGossipItemFor(player, GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_GEZZARAK_THE_HUNTRESS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - AddGossipItemFor(player, GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_DARKSCREECHER_AKKARAI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - AddGossipItemFor(player, GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_KARROG, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - AddGossipItemFor(player, GOSSIP_MENU_ID_SKULL_PILE, OPTION_ID_VAKKIZ_THE_WINDRAGER, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - } - - SendGossipMenuFor(player, me->GetGOInfo()->questgiver.gossipID, me->GetGUID()); - return true; - } - - void SendActionMenu(Player* player, uint32 action) - { - switch (action) - { - case GOSSIP_ACTION_INFO_DEF + 1: - player->CastSpell(player, SUMMON_GEZZARAK_THE_HUNTRESS, false); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - player->CastSpell(player, SUMMON_DARKSCREECHER_AKKARAI, false); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - player->CastSpell(player, SUMMON_KARROG, false); - break; - case GOSSIP_ACTION_INFO_DEF + 4: - player->CastSpell(player, SUMMON_VAKKIZ_THE_WINDRAGER, false); - break; - } - } - }; - - GameObjectAI* GetAI(GameObject* go) const override - { - return new go_skull_pileAI(go); - } -}; - -/*###### -## npc_slim -######*/ - -enum Slim -{ - FACTION_CONSORTIUM = 933, - NPC_TEXT_NEITHER_SLIM_NOR_SHADY = 9895, - NPC_TEXT_I_SEE_YOU_ARE_A_FRIEND = 9896 -}; - -class npc_slim : public CreatureScript -{ -public: - npc_slim() : CreatureScript("npc_slim") { } - - struct npc_slimAI : public ScriptedAI - { - npc_slimAI(Creature* creature) : ScriptedAI(creature) { } - - bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override - { - uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId); - ClearGossipMenuFor(player); - if (action == GOSSIP_ACTION_TRADE) - player->GetSession()->SendListInventory(me->GetGUID()); - - return true; - } - - bool GossipHello(Player* player) override - { - if (me->IsVendor() && player->GetReputationRank(FACTION_CONSORTIUM) >= REP_FRIENDLY) - { - AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - SendGossipMenuFor(player, NPC_TEXT_I_SEE_YOU_ARE_A_FRIEND, me->GetGUID()); - } - else - SendGossipMenuFor(player, NPC_TEXT_NEITHER_SLIM_NOR_SHADY, me->GetGUID()); - - return true; - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_slimAI(creature); - } -}; - /*######## ####npc_akuno #####*/ @@ -706,12 +383,7 @@ public: void AddSC_terokkar_forest() { new npc_unkor_the_ruthless(); - new npc_infested_root_walker(); - new npc_rotting_forest_rager(); - new npc_floon(); new npc_isla_starmane(); - new go_skull_pile(); new npc_skywing(); - new npc_slim(); new npc_akuno(); } |