From e00175d23bc6905d7ca75ec09c6eca6e58409717 Mon Sep 17 00:00:00 2001 From: Kudlaty Date: Sun, 16 Aug 2009 00:10:26 +0200 Subject: Merge [SD2] r1287 Move all non-instance scripts that are not related to any special continent to new world folder. sorry about mistake in last sd2 merge. there should be: r1286 Restructure file layout and move all non-instance source files to a logical continental single folder. --HG-- branch : trunk --- src/bindings/scripts/CMakeLists.txt | 24 +- src/bindings/scripts/VC80/80ScriptDev2.vcproj | 124 +- src/bindings/scripts/VC90/90ScriptDev2.vcproj | 124 +- .../scripts/areatrigger/areatrigger_scripts.cpp | 92 - src/bindings/scripts/scripts/boss/boss_emeriss.cpp | 146 -- src/bindings/scripts/scripts/boss/boss_lethon.cpp | 25 - src/bindings/scripts/scripts/boss/boss_taerar.cpp | 263 --- src/bindings/scripts/scripts/boss/boss_ysondre.cpp | 203 -- .../scripts/creature/mob_generic_creature.cpp | 260 --- src/bindings/scripts/scripts/go/go_scripts.cpp | 476 ----- src/bindings/scripts/scripts/item/item_scripts.cpp | 253 --- src/bindings/scripts/scripts/item/item_test.cpp | 43 - src/bindings/scripts/scripts/npc/npc_innkeeper.cpp | 145 -- .../scripts/scripts/npc/npc_professions.cpp | 1342 ------------- src/bindings/scripts/scripts/npc/npc_taxi.cpp | 262 --- src/bindings/scripts/scripts/npc/npcs_special.cpp | 1965 -------------------- .../scripts/scripts/world/areatrigger_scripts.cpp | 92 + .../scripts/scripts/world/boss_emeriss.cpp | 146 ++ src/bindings/scripts/scripts/world/boss_lethon.cpp | 25 + src/bindings/scripts/scripts/world/boss_taerar.cpp | 263 +++ .../scripts/scripts/world/boss_ysondre.cpp | 203 ++ src/bindings/scripts/scripts/world/go_scripts.cpp | 476 +++++ .../scripts/scripts/world/item_scripts.cpp | 253 +++ .../scripts/scripts/world/mob_generic_creature.cpp | 260 +++ .../scripts/scripts/world/npc_innkeeper.cpp | 145 ++ .../scripts/scripts/world/npc_professions.cpp | 1342 +++++++++++++ src/bindings/scripts/scripts/world/npc_taxi.cpp | 262 +++ .../scripts/scripts/world/npcs_special.cpp | 1965 ++++++++++++++++++++ 28 files changed, 5548 insertions(+), 5631 deletions(-) delete mode 100644 src/bindings/scripts/scripts/areatrigger/areatrigger_scripts.cpp delete mode 100644 src/bindings/scripts/scripts/boss/boss_emeriss.cpp delete mode 100644 src/bindings/scripts/scripts/boss/boss_lethon.cpp delete mode 100644 src/bindings/scripts/scripts/boss/boss_taerar.cpp delete mode 100644 src/bindings/scripts/scripts/boss/boss_ysondre.cpp delete mode 100644 src/bindings/scripts/scripts/creature/mob_generic_creature.cpp delete mode 100644 src/bindings/scripts/scripts/go/go_scripts.cpp delete mode 100644 src/bindings/scripts/scripts/item/item_scripts.cpp delete mode 100644 src/bindings/scripts/scripts/item/item_test.cpp delete mode 100644 src/bindings/scripts/scripts/npc/npc_innkeeper.cpp delete mode 100644 src/bindings/scripts/scripts/npc/npc_professions.cpp delete mode 100644 src/bindings/scripts/scripts/npc/npc_taxi.cpp delete mode 100644 src/bindings/scripts/scripts/npc/npcs_special.cpp create mode 100644 src/bindings/scripts/scripts/world/areatrigger_scripts.cpp create mode 100644 src/bindings/scripts/scripts/world/boss_emeriss.cpp create mode 100644 src/bindings/scripts/scripts/world/boss_lethon.cpp create mode 100644 src/bindings/scripts/scripts/world/boss_taerar.cpp create mode 100644 src/bindings/scripts/scripts/world/boss_ysondre.cpp create mode 100644 src/bindings/scripts/scripts/world/go_scripts.cpp create mode 100644 src/bindings/scripts/scripts/world/item_scripts.cpp create mode 100644 src/bindings/scripts/scripts/world/mob_generic_creature.cpp create mode 100644 src/bindings/scripts/scripts/world/npc_innkeeper.cpp create mode 100644 src/bindings/scripts/scripts/world/npc_professions.cpp create mode 100644 src/bindings/scripts/scripts/world/npc_taxi.cpp create mode 100644 src/bindings/scripts/scripts/world/npcs_special.cpp (limited to 'src') diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index bdb9291e4fd..88b134108e9 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -10,12 +10,6 @@ SET(trinityscript_LIB_SRCS include/sc_creature.h include/sc_gossip.h include/sc_instance.h - scripts/areatrigger/areatrigger_scripts.cpp - scripts/boss/boss_emeriss.cpp - scripts/boss/boss_lethon.cpp - scripts/boss/boss_taerar.cpp - scripts/boss/boss_ysondre.cpp - scripts/creature/mob_generic_creature.cpp scripts/creature/simple_ai.cpp scripts/creature/simple_ai.h scripts/eastern_kingdoms/alterac_mountains.cpp @@ -44,11 +38,9 @@ SET(trinityscript_LIB_SRCS scripts/examples/example_escort.cpp scripts/examples/example_gossip_codebox.cpp scripts/examples/example_misc.cpp - scripts/go/go_scripts.cpp scripts/guard/guard_ai.cpp scripts/guard/guard_ai.h scripts/guard/guards.cpp - scripts/item/item_scripts.cpp scripts/kalimdor/ashenvale.cpp scripts/kalimdor/azshara.cpp scripts/kalimdor/azuremyst_isle.cpp @@ -78,10 +70,6 @@ SET(trinityscript_LIB_SRCS scripts/northrend/zuldrak.cpp scripts/npc/npc_escortAI.cpp scripts/npc/npc_escortAI.h - scripts/npc/npc_innkeeper.cpp - scripts/npc/npc_professions.cpp - scripts/npc/npcs_special.cpp - scripts/npc/npc_taxi.cpp scripts/outland/blades_edge_mountains.cpp scripts/outland/boss_doomlord_kazzak.cpp scripts/outland/boss_doomwalker.cpp @@ -508,6 +496,18 @@ SET(trinityscript_LIB_SRCS scripts/zone/ulduar/ulduar/boss_yoggsaron.cpp scripts/zone/ulduar/ulduar/def_ulduar.h scripts/zone/ulduar/ulduar/instance_ulduar.cpp + scripts/world/areatrigger_scripts.cpp + scripts/world/boss_emeriss.cpp + scripts/world/boss_lethon.cpp + scripts/world/boss_taerar.cpp + scripts/world/boss_ysondre.cpp + scripts/world/go_scripts.cpp + scripts/world/item_scripts.cpp + scripts/world/mob_generic_creature.cpp + scripts/world/npc_innkeeper.cpp + scripts/world/npc_professions.cpp + scripts/world/npcs_special.cpp + scripts/world/npc_taxi.cpp system.cpp ) diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index e4a32705566..5518d35f66f 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -363,41 +363,9 @@ - - - - - - - - - - - - - - - - @@ -519,14 +487,6 @@ > - - - - @@ -543,14 +503,6 @@ > - - - - @@ -677,22 +629,6 @@ RelativePath="..\scripts\npc\npc_escortAI.h" > - - - - - - - - - - - - @@ -2795,6 +2723,58 @@ > + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - @@ -516,14 +484,6 @@ > - - - - @@ -540,14 +500,6 @@ > - - - - @@ -674,22 +626,6 @@ RelativePath="..\scripts\npc\npc_escortAI.h" > - - - - - - - - - - - - @@ -2792,6 +2720,58 @@ > + + + + + + + + + + + + + + + + + + + + + + + + + + - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Areatrigger_Scripts -SD%Complete: 100 -SDComment: Scripts for areatriggers -SDCategory: Areatrigger -EndScriptData */ - -/* ContentData -at_legion_teleporter 4560 Teleporter TO Invasion Point: Cataclysm -EndContentData */ - -#include "precompiled.h" - -/*##### -## at_legion_teleporter -#####*/ - -enum -{ - SPELL_TELE_A_TO = 37387, - QUEST_GAINING_ACCESS_A = 10589, - - SPELL_TELE_H_TO = 37389, - QUEST_GAINING_ACCESS_H = 10604 -}; - -bool AreaTrigger_at_legion_teleporter(Player* pPlayer, AreaTriggerEntry* pAt) -{ - if (pPlayer->isAlive() && !pPlayer->isInCombat()) - { - if (pPlayer->GetTeam()== ALLIANCE && pPlayer->GetQuestRewardStatus(QUEST_GAINING_ACCESS_A)) - { - pPlayer->CastSpell(pPlayer,SPELL_TELE_A_TO,false); - return true; - } - - if (pPlayer->GetTeam()== HORDE && pPlayer->GetQuestRewardStatus(QUEST_GAINING_ACCESS_H)) - { - pPlayer->CastSpell(pPlayer,SPELL_TELE_H_TO,false); - return true; - } - - return false; - } - return false; -} - -enum -{ - QUEST_MANOR_RAVENHOLDT = 6681, - NPC_RAVENHOLDT = 13936 -}; - -bool AreaTrigger_at_ravenholdt(Player* pPlayer, AreaTriggerEntry* pAt) -{ - if (pPlayer->GetQuestStatus(QUEST_MANOR_RAVENHOLDT) == QUEST_STATUS_INCOMPLETE) - pPlayer->KilledMonsterCredit(NPC_RAVENHOLDT, 0); - - return false; -} - -void AddSC_areatrigger_scripts() -{ - Script *newscript; - - newscript = new Script; - newscript->Name = "at_legion_teleporter"; - newscript->pAreaTrigger = &AreaTrigger_at_legion_teleporter; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "at_ravenholdt"; - newscript->pAreaTrigger = &AreaTrigger_at_ravenholdt; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/boss/boss_emeriss.cpp b/src/bindings/scripts/scripts/boss/boss_emeriss.cpp deleted file mode 100644 index 9881525e3ad..00000000000 --- a/src/bindings/scripts/scripts/boss/boss_emeriss.cpp +++ /dev/null @@ -1,146 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Emeriss -SD%Complete: 90 -SDComment: Teleport function & Mark of Nature missing -SDCategory: Bosses -EndScriptData */ - -#include "precompiled.h" - -enum -{ - SAY_AGGRO = -1000401, - SAY_CASTCORRUPTION = -1000402, - - SPELL_SLEEP = 24777, - SPELL_NOXIOUSBREATH = 24818, - SPELL_TAILSWEEP = 15847, - //SPELL_MARKOFNATURE = 25040, // Not working - SPELL_VOLATILEINFECTION = 24928, - SPELL_CORRUPTIONOFEARTH = 24910 -}; - -struct TRINITY_DLL_DECL boss_emerissAI : public ScriptedAI -{ - boss_emerissAI(Creature *c) : ScriptedAI(c) {} - - uint32 m_uiSleep_Timer; - uint32 m_uiNoxiousBreath_Timer; - uint32 m_uiTailSweep_Timer; - //uint32 m_uiMarkOfNature_Timer; - uint32 m_uiVolatileInfection_Timer; - uint32 m_uiCorruptionsCasted; - - - void Reset() - { - m_uiSleep_Timer = 15000 + rand()%5000; - m_uiNoxiousBreath_Timer = 8000; - m_uiTailSweep_Timer = 4000; - //m_uiMarkOfNature_Timer = 45000; - m_uiVolatileInfection_Timer = 12000; - m_uiCorruptionsCasted = 0; - } - - void Aggro(Unit* pWho) - { - DoScriptText(SAY_AGGRO, m_creature); - } - - void UpdateAI(const uint32 uiDiff) - { - //Return since we have no target - if (!UpdateVictim()) - return; - - //Sleep_Timer - if (m_uiSleep_Timer < uiDiff) - { - if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) - DoCast(pTarget, SPELL_SLEEP); - - m_uiSleep_Timer = 8000 + rand()%8000; - } - else - m_uiSleep_Timer -= uiDiff; - - //NoxiousBreath_Timer - if (m_uiNoxiousBreath_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_NOXIOUSBREATH); - m_uiNoxiousBreath_Timer = 14000 + rand()%6000; - } - else - m_uiNoxiousBreath_Timer -= uiDiff; - - //Tailsweep every 2 seconds - if (m_uiTailSweep_Timer < uiDiff) - { - DoCast(m_creature, SPELL_TAILSWEEP); - m_uiTailSweep_Timer = 2000; - } - else - m_uiTailSweep_Timer -= uiDiff; - - //MarkOfNature_Timer - //if (m_uiMarkOfNature_Timer < uiDiff) - //{ - // DoCast(m_creature->getVictim(), SPELL_MARKOFNATURE); - // m_uiMarkOfNature_Timer = 45000; - //} - //else - // m_uiMarkOfNature_Timer -= uiDiff; - - - //VolatileInfection_Timer - if (m_uiVolatileInfection_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_VOLATILEINFECTION); - m_uiVolatileInfection_Timer = 7000 + rand()%5000; - } - else - m_uiVolatileInfection_Timer -= uiDiff; - - //CorruptionofEarth_Timer - //CorruptionofEarth at 75%, 50% and 25% - if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= (100-(25*m_uiCorruptionsCasted))) - { - ++m_uiCorruptionsCasted; // prevent casting twice on same hp - DoScriptText(SAY_CASTCORRUPTION, m_creature); - DoCast(m_creature->getVictim(), SPELL_CORRUPTIONOFEARTH); - } - - DoMeleeAttackIfReady(); - } -}; - -CreatureAI* GetAI_boss_emeriss(Creature* pCreature) -{ - return new boss_emerissAI (pCreature); -} - -void AddSC_boss_emeriss() -{ - Script *newscript; - newscript = new Script; - newscript->Name="boss_emeriss"; - newscript->GetAI = &GetAI_boss_emeriss; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/boss/boss_lethon.cpp b/src/bindings/scripts/scripts/boss/boss_lethon.cpp deleted file mode 100644 index e387891efed..00000000000 --- a/src/bindings/scripts/scripts/boss/boss_lethon.cpp +++ /dev/null @@ -1,25 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Lethon -SD%Complete: 0 -SDComment: Place Holder -SDCategory: Bosses -EndScriptData */ - -#include "precompiled.h" - diff --git a/src/bindings/scripts/scripts/boss/boss_taerar.cpp b/src/bindings/scripts/scripts/boss/boss_taerar.cpp deleted file mode 100644 index 3f45ab26331..00000000000 --- a/src/bindings/scripts/scripts/boss/boss_taerar.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Taerar -SD%Complete: 70 -SDComment: Mark of Nature & Teleport NYI. Fix the way to be banished. -SDCategory: Bosses -EndScriptData */ - -#include "precompiled.h" - -enum -{ - SAY_AGGRO = -1000399, - SAY_SUMMONSHADE = -1000400, - - //Spells of Taerar - SPELL_SLEEP = 24777, - SPELL_NOXIOUSBREATH = 24818, - SPELL_TAILSWEEP = 15847, - // SPELL_MARKOFNATURE = 25040, // Not working - SPELL_ARCANEBLAST = 24857, - SPELL_BELLOWINGROAR = 22686, - - SPELL_SUMMONSHADE_1 = 24841, - SPELL_SUMMONSHADE_2 = 24842, - SPELL_SUMMONSHADE_3 = 24843, - - //Spells of Shades of Taerar - SPELL_POSIONCLOUD = 24840, - SPELL_POSIONBREATH = 20667 -}; - -uint32 m_auiSpellSummonShade[]= -{ - SPELL_SUMMONSHADE_1, SPELL_SUMMONSHADE_2, SPELL_SUMMONSHADE_3 -}; - -struct TRINITY_DLL_DECL boss_taerarAI : public ScriptedAI -{ - boss_taerarAI(Creature *c) : ScriptedAI(c) {} - - uint32 m_uiSleep_Timer; - uint32 m_uiNoxiousBreath_Timer; - uint32 m_uiTailSweep_Timer; - //uint32 m_uiMarkOfNature_Timer; - uint32 m_uiArcaneBlast_Timer; - uint32 m_uiBellowingRoar_Timer; - uint32 m_uiShades_Timer; - uint32 m_uiShadesSummoned; - - bool m_bShades; - - void Reset() - { - m_uiSleep_Timer = 15000 + rand()%5000; - m_uiNoxiousBreath_Timer = 8000; - m_uiTailSweep_Timer = 4000; - //m_uiMarkOfNature_Timer = 45000; - m_uiArcaneBlast_Timer = 12000; - m_uiBellowingRoar_Timer = 30000; - m_uiShades_Timer = 60000; //The time that Taerar is banished - m_uiShadesSummoned = 0; - - m_bShades = false; - } - - void EnterCombat(Unit* pWho) - { - DoScriptText(SAY_AGGRO, m_creature); - } - - void JustSummoned(Creature* pSummoned) - { - if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) - pSummoned->AI()->AttackStart(pTarget); - } - - void UpdateAI(const uint32 uiDiff) - { - if (m_bShades && m_uiShades_Timer < uiDiff) - { - //Become unbanished again - m_creature->setFaction(14); - m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - m_bShades = false; - } - else if (m_bShades) - { - m_uiShades_Timer -= uiDiff; - //Do nothing while banished - return; - } - - //Return since we have no target - if (!UpdateVictim()) - return; - - //Sleep_Timer - if (m_uiSleep_Timer < uiDiff) - { - if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) - DoCast(pTarget, SPELL_SLEEP); - - m_uiSleep_Timer = 8000 + rand()%7000; - } - else - m_uiSleep_Timer -= uiDiff; - - //NoxiousBreath_Timer - if (m_uiNoxiousBreath_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_NOXIOUSBREATH); - m_uiNoxiousBreath_Timer = 14000 + rand()%6000; - } - else - m_uiNoxiousBreath_Timer -= uiDiff; - - //Tailsweep every 2 seconds - if (m_uiTailSweep_Timer < uiDiff) - { - DoCast(m_creature, SPELL_TAILSWEEP); - m_uiTailSweep_Timer = 2000; - } - else - m_uiTailSweep_Timer -= uiDiff; - - //MarkOfNature_Timer - //if (m_uiMarkOfNature_Timer < uiDiff) - //{ - // DoCast(m_creature->getVictim(), SPELL_MARKOFNATURE); - // m_uiMarkOfNature_Timer = 45000; - //} - //else - // m_uiMarkOfNature_Timer -= uiDiff; - - //ArcaneBlast_Timer - if (m_uiArcaneBlast_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_ARCANEBLAST); - m_uiArcaneBlast_Timer = 7000 + rand()%5000; - } - else - m_uiArcaneBlast_Timer -= uiDiff; - - //BellowingRoar_Timer - if (m_uiBellowingRoar_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_BELLOWINGROAR); - m_uiBellowingRoar_Timer = 20000 + rand()%10000; - } - else - m_uiBellowingRoar_Timer -= uiDiff; - - //Summon 3 Shades at 75%, 50% and 25% (if bShades is true we already left in line 117, no need to check here again) - if (!m_bShades && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= (100-(25*m_uiShadesSummoned))) - { - if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) - { - //Inturrupt any spell casting - m_creature->InterruptNonMeleeSpells(false); - - //horrible workaround, need to fix - m_creature->setFaction(35); - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - - DoScriptText(SAY_SUMMONSHADE, m_creature); - - int iSize = sizeof(m_auiSpellSummonShade) / sizeof(uint32); - - for(int i = 0; i < iSize; ++i) - m_creature->CastSpell(pTarget, m_auiSpellSummonShade[i], true); - - ++m_uiShadesSummoned; // prevent casting twice at same health - m_bShades = true; - } - m_uiShades_Timer = 60000; - } - - DoMeleeAttackIfReady(); - } -}; - -// Shades of Taerar Script -struct TRINITY_DLL_DECL boss_shadeoftaerarAI : public ScriptedAI -{ - boss_shadeoftaerarAI(Creature *c) : ScriptedAI(c) {} - - uint32 m_uiPoisonCloud_Timer; - uint32 m_uiPosionBreath_Timer; - - void Reset() - { - m_uiPoisonCloud_Timer = 8000; - m_uiPosionBreath_Timer = 12000; - } - - void UpdateAI(const uint32 uiDiff) - { - if (!UpdateVictim()) - return; - - //PoisonCloud_Timer - if (m_uiPoisonCloud_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_POSIONCLOUD); - m_uiPoisonCloud_Timer = 30000; - } - else - m_uiPoisonCloud_Timer -= uiDiff; - - //PosionBreath_Timer - if (m_uiPosionBreath_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_POSIONBREATH); - m_uiPosionBreath_Timer = 12000; - } - else - m_uiPosionBreath_Timer -= uiDiff; - - DoMeleeAttackIfReady(); - } -}; - -CreatureAI* GetAI_boss_taerar(Creature* pCreature) -{ - return new boss_taerarAI (pCreature); -} - -CreatureAI* GetAI_boss_shadeoftaerar(Creature* pCreature) -{ - return new boss_shadeoftaerarAI (pCreature); -} - -void AddSC_boss_taerar() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="boss_taerar"; - newscript->GetAI = &GetAI_boss_taerar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="boss_shade_of_taerar"; - newscript->GetAI = &GetAI_boss_shadeoftaerar; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/boss/boss_ysondre.cpp b/src/bindings/scripts/scripts/boss/boss_ysondre.cpp deleted file mode 100644 index 1b93f54c047..00000000000 --- a/src/bindings/scripts/scripts/boss/boss_ysondre.cpp +++ /dev/null @@ -1,203 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Ysondre -SD%Complete: 90 -SDComment: Mark of Nature & Teleport missing -SDCategory: Bosses -EndScriptData */ - -#include "precompiled.h" - -enum -{ - SAY_AGGRO = -1000360, - SAY_SUMMONDRUIDS = -1000361, - - SPELL_SLEEP = 24777, - SPELL_NOXIOUSBREATH = 24818, - SPELL_TAILSWEEP = 15847, - //SPELL_MARKOFNATURE = 25040, // Not working - SPELL_LIGHTNINGWAVE = 24819, - SPELL_SUMMONDRUIDS = 24795, - - SPELL_SUMMON_PLAYER = 24776, - - //druid spells - SPELL_MOONFIRE = 21669 -}; - -// Ysondre script -struct TRINITY_DLL_DECL boss_ysondreAI : public ScriptedAI -{ - boss_ysondreAI(Creature* pCreature) : ScriptedAI(pCreature) {} - - uint32 m_uiSleep_Timer; - uint32 m_uiNoxiousBreath_Timer; - uint32 m_uiTailSweep_Timer; - //uint32 m_uiMarkOfNature_Timer; - uint32 m_uiLightningWave_Timer; - uint32 m_uiSummonDruidModifier; - - void Reset() - { - m_uiSleep_Timer = 15000 + rand()%5000; - m_uiNoxiousBreath_Timer = 8000; - m_uiTailSweep_Timer = 4000; - //m_uiMarkOfNature_Timer = 45000; - m_uiLightningWave_Timer = 12000; - m_uiSummonDruidModifier = 0; - } - - void EnterCombat(Unit* pWho) - { - DoScriptText(SAY_AGGRO, m_creature); - } - - void JustSummoned(Creature* pSummoned) - { - if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) - pSummoned->AI()->AttackStart(pTarget); - } - - void UpdateAI(const uint32 uiDiff) - { - if (!UpdateVictim()) - return; - - //Sleep_Timer - if (m_uiSleep_Timer < uiDiff) - { - if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) - DoCast(pTarget, SPELL_SLEEP); - - m_uiSleep_Timer = 8000 + rand()%7000; - } - else - m_uiSleep_Timer -= uiDiff; - - //NoxiousBreath_Timer - if (m_uiNoxiousBreath_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_NOXIOUSBREATH); - m_uiNoxiousBreath_Timer = 14000 + rand()%6000; - } - else - m_uiNoxiousBreath_Timer -= uiDiff; - - //Tailsweep every 2 seconds - if (m_uiTailSweep_Timer < uiDiff) - { - if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_TAILSWEEP); - - m_uiTailSweep_Timer = 2000; - } - else - m_uiTailSweep_Timer -= uiDiff; - - //MarkOfNature_Timer - //if (m_uiMarkOfNature_Timer < uiDiff) - //{ - // DoCast(m_creature->getVictim(), SPELL_MARKOFNATURE); - // m_uiMarkOfNature_Timer = 45000; - //} - //else - // m_uiMarkOfNature_Timer -= uiDiff; - - //LightningWave_Timer - if (m_uiLightningWave_Timer < uiDiff) - { - //Cast LIGHTNINGWAVE on a Random target - if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0)) - DoCast(target, SPELL_LIGHTNINGWAVE); - - m_uiLightningWave_Timer = 7000 + rand()%5000; - } - else - m_uiLightningWave_Timer -= uiDiff; - - //Summon Druids - if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= (100-(25*m_uiSummonDruidModifier))) - { - DoScriptText(SAY_SUMMONDRUIDS, m_creature); - - for(int i = 0; i < 10; ++i) - DoCast(m_creature, SPELL_SUMMONDRUIDS, true); - - ++m_uiSummonDruidModifier; - } - - DoMeleeAttackIfReady(); - } -}; - -// Summoned druid script -struct TRINITY_DLL_DECL mob_dementeddruidsAI : public ScriptedAI -{ - mob_dementeddruidsAI(Creature *c) : ScriptedAI(c) {} - - uint32 m_uiMoonFire_Timer; - - void Reset() - { - m_uiMoonFire_Timer = 3000; - } - - void UpdateAI(const uint32 uiDiff) - { - if (!UpdateVictim()) - return; - - //MoonFire_Timer - if (m_uiMoonFire_Timer < uiDiff) - { - DoCast(m_creature->getVictim(), SPELL_MOONFIRE); - m_uiMoonFire_Timer = 5000; - } - else - m_uiMoonFire_Timer -= uiDiff; - - DoMeleeAttackIfReady(); - } -}; - -CreatureAI* GetAI_boss_ysondre(Creature* pCreature) -{ - return new boss_ysondreAI (pCreature); -} - -CreatureAI* GetAI_mob_dementeddruids(Creature* pCreature) -{ - return new mob_dementeddruidsAI (pCreature); -} - -void AddSC_boss_ysondre() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="boss_ysondre"; - newscript->GetAI = &GetAI_boss_ysondre; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="mob_dementeddruids"; - newscript->GetAI = &GetAI_mob_dementeddruids; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/creature/mob_generic_creature.cpp b/src/bindings/scripts/scripts/creature/mob_generic_creature.cpp deleted file mode 100644 index 30a57e56dd5..00000000000 --- a/src/bindings/scripts/scripts/creature/mob_generic_creature.cpp +++ /dev/null @@ -1,260 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -/* ScriptData -SDName: Generic_Creature -SD%Complete: 80 -SDComment: Should be replaced with core based AI -SDCategory: Creatures -EndScriptData */ - -#include "precompiled.h" - -#define GENERIC_CREATURE_COOLDOWN 5000 - -struct TRINITY_DLL_DECL generic_creatureAI : public ScriptedAI -{ - generic_creatureAI(Creature *c) : ScriptedAI(c) {} - - uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds) - uint32 BuffTimer; //This variable keeps track of buffs - bool IsSelfRooted; - - void Reset() - { - GlobalCooldown = 0; - BuffTimer = 0; //Rebuff as soon as we can - IsSelfRooted = false; - } - - void EnterCombat(Unit *who) - { - if (!m_creature->IsWithinMeleeRange(who)) - { - IsSelfRooted = true; - } - } - - void UpdateAI(const uint32 diff) - { - //Always decrease our global cooldown first - if (GlobalCooldown > diff) - GlobalCooldown -= diff; - else GlobalCooldown = 0; - - //Buff timer (only buff when we are alive and not in combat - if (!m_creature->isInCombat() && m_creature->isAlive()) - if (BuffTimer < diff) - { - //Find a spell that targets friendly and applies an aura (these are generally buffs) - SpellEntry const *info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_AURA); - - if (info && !GlobalCooldown) - { - //Cast the buff spell - DoCastSpell(m_creature, info); - - //Set our global cooldown - GlobalCooldown = GENERIC_CREATURE_COOLDOWN; - - //Set our timer to 10 minutes before rebuff - BuffTimer = 600000; - }//Try agian in 30 seconds - else BuffTimer = 30000; - }else BuffTimer -= diff; - - //Return since we have no target - if (!UpdateVictim()) - return; - - //If we are within range melee the target - if (m_creature->IsWithinMeleeRange(m_creature->getVictim())) - { - //Make sure our attack is ready and we arn't currently casting - if (m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false)) - { - bool Healing = false; - SpellEntry const *info = NULL; - - //Select a healing spell if less than 30% hp - if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30) - info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); - - //No healing spell available, select a hostile spell - if (info) Healing = true; - else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, 0, 0, SELECT_EFFECT_DONTCARE); - - //50% chance if elite or higher, 20% chance if not, to replace our white hit with a spell - if (info && (rand() % (m_creature->GetCreatureInfo()->rank > 1 ? 2 : 5) == 0) && !GlobalCooldown) - { - //Cast the spell - if (Healing)DoCastSpell(m_creature, info); - else DoCastSpell(m_creature->getVictim(), info); - - //Set our global cooldown - GlobalCooldown = GENERIC_CREATURE_COOLDOWN; - } - else m_creature->AttackerStateUpdate(m_creature->getVictim()); - - m_creature->resetAttackTimer(); - } - } - else - { - //Only run this code if we arn't already casting - if (!m_creature->IsNonMeleeSpellCasted(false)) - { - bool Healing = false; - SpellEntry const *info = NULL; - - //Select a healing spell if less than 30% hp ONLY 33% of the time - if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30 && rand() % 3 == 0) - info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); - - //No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE) - if (info) Healing = true; - else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, NOMINAL_MELEE_RANGE, 0, SELECT_EFFECT_DONTCARE); - - //Found a spell, check if we arn't on cooldown - if (info && !GlobalCooldown) - { - //If we are currently moving stop us and set the movement generator - if (!IsSelfRooted) - { - IsSelfRooted = true; - } - - //Cast spell - if (Healing) DoCastSpell(m_creature,info); - else DoCastSpell(m_creature->getVictim(),info); - - //Set our global cooldown - GlobalCooldown = GENERIC_CREATURE_COOLDOWN; - - - }//If no spells available and we arn't moving run to target - else if (IsSelfRooted) - { - //Cancel our current spell and then allow movement agian - m_creature->InterruptNonMeleeSpells(false); - IsSelfRooted = false; - } - } - } - } -}; - -CreatureAI* GetAI_generic_creature(Creature* pCreature) -{ - return new generic_creatureAI (pCreature); -} - -struct TRINITY_DLL_DECL trigger_periodicAI : public NullCreatureAI -{ - trigger_periodicAI(Creature* c) : NullCreatureAI(c) - { - spell = me->m_spells[0] ? GetSpellStore()->LookupEntry(me->m_spells[0]) : NULL; - interval = me->GetAttackTime(BASE_ATTACK); - timer = interval; - } - - uint32 timer, interval; - const SpellEntry * spell; - - void UpdateAI(const uint32 diff) - { - if (timer < diff) - { - if (spell) - me->CastSpell(me, spell, true); - timer = interval; - } - else - timer -= diff; - } -}; - -struct TRINITY_DLL_DECL trigger_deathAI : public NullCreatureAI -{ - trigger_deathAI(Creature* c) : NullCreatureAI(c) {} - void JustDied(Unit *killer) - { - if (me->m_spells[0]) - me->CastSpell(killer, me->m_spells[0], true); - } -}; - -struct TRINITY_DLL_DECL mob_webwrapAI : public NullCreatureAI -{ - mob_webwrapAI(Creature *c) : NullCreatureAI(c), victimGUID(0) {} - - uint64 victimGUID; - - void SetGUID(const uint64 &guid, int32 param) - { - victimGUID = guid; - if (me->m_spells[0] && victimGUID) - if (Unit *victim = Unit::GetUnit(*me, victimGUID)) - victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID()); - } - - void JustDied(Unit *killer) - { - if (me->m_spells[0] && victimGUID) - if (Unit *victim = Unit::GetUnit(*me, victimGUID)) - victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID()); - } -}; - -CreatureAI* GetAI_trigger_periodic(Creature* pCreature) -{ - return new trigger_periodicAI (pCreature); -} - -CreatureAI* GetAI_trigger_death(Creature* pCreature) -{ - return new trigger_deathAI (pCreature); -} - -CreatureAI* GetAI_mob_webwrap(Creature* pCreature) -{ - return new mob_webwrapAI (pCreature); -} - -void AddSC_generic_creature() -{ - Script *newscript; - /*newscript = new Script; - newscript->Name="generic_creature"; - newscript->GetAI = &GetAI_generic_creature; - newscript->RegisterSelf();*/ - - newscript = new Script; - newscript->Name="trigger_periodic"; - newscript->GetAI = &GetAI_trigger_periodic; - newscript->RegisterSelf(); - - /*newscript = new Script; - newscript->Name="trigger_death"; - newscript->GetAI = &GetAI_trigger_death; - newscript->RegisterSelf();*/ - - newscript = new Script; - newscript->Name="mob_webwrap"; - newscript->GetAI = &GetAI_mob_webwrap; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/go/go_scripts.cpp b/src/bindings/scripts/scripts/go/go_scripts.cpp deleted file mode 100644 index d0818fe8dc0..00000000000 --- a/src/bindings/scripts/scripts/go/go_scripts.cpp +++ /dev/null @@ -1,476 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: GO_Scripts -SD%Complete: 100 -SDComment: Quest support: 4285,4287,4288(crystal pylons), 4296, 6481, 10990, 10991, 10992, Field_Repair_Bot->Teaches spell 22704. Barov_journal->Teaches spell 26089 -SDCategory: Game Objects -EndScriptData */ - -/* ContentData -go_cat_figurine (the "trap" version of GO, two different exist) -go_northern_crystal_pylon -go_eastern_crystal_pylon -go_western_crystal_pylon -go_barov_journal -go_ethereum_prison -go_ethereum_stasis -go_sacred_fire_of_life -go_shrine_of_the_birds -go_field_repair_bot_74A -go_orb_of_command -go_resonite_cask -go_tablet_of_madness -go_tablet_of_the_seven -go_tele_to_dalaran_crystal -go_tele_to_violet_stand -EndContentData */ - -#include "precompiled.h" - -/*###### -## go_cat_figurine -######*/ - -enum -{ - SPELL_SUMMON_GHOST_SABER = 5968, -}; - -bool GOHello_go_cat_figurine(Player* pPlayer, GameObject* pGo) -{ - pPlayer->CastSpell(pPlayer,SPELL_SUMMON_GHOST_SABER,true); - return false; -} - -/*###### -## go_crystal_pylons (3x) -######*/ - -bool GOHello_go_northern_crystal_pylon(Player* pPlayer, GameObject* pGo) -{ - if (pGo->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) - { - pPlayer->PrepareQuestMenu(pGo->GetGUID()); - pPlayer->SendPreparedQuest(pGo->GetGUID()); - } - - if (pPlayer->GetQuestStatus(4285) == QUEST_STATUS_INCOMPLETE) - pPlayer->AreaExploredOrEventHappens(4285); - - return true; -} - -bool GOHello_go_eastern_crystal_pylon(Player* pPlayer, GameObject* pGo) -{ - if (pGo->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) - { - pPlayer->PrepareQuestMenu(pGo->GetGUID()); - pPlayer->SendPreparedQuest(pGo->GetGUID()); - } - - if (pPlayer->GetQuestStatus(4287) == QUEST_STATUS_INCOMPLETE) - pPlayer->AreaExploredOrEventHappens(4287); - - return true; -} - -bool GOHello_go_western_crystal_pylon(Player* pPlayer, GameObject* pGo) -{ - if (pGo->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) - { - pPlayer->PrepareQuestMenu(pGo->GetGUID()); - pPlayer->SendPreparedQuest(pGo->GetGUID()); - } - - if (pPlayer->GetQuestStatus(4288) == QUEST_STATUS_INCOMPLETE) - pPlayer->AreaExploredOrEventHappens(4288); - - return true; -} - -/*###### -## go_barov_journal -######*/ - -bool GOHello_go_barov_journal(Player* pPlayer, GameObject* pGo) -{ - if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING) >= 280 && !pPlayer->HasSpell(26086)) - { - pPlayer->CastSpell(pPlayer,26095,false); - } - return true; -} - -/*###### -## go_field_repair_bot_74A -######*/ - -bool GOHello_go_field_repair_bot_74A(Player* pPlayer, GameObject* pGo) -{ - if (pPlayer->HasSkill(SKILL_ENGINERING) && pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 300 && !pPlayer->HasSpell(22704)) - { - pPlayer->CastSpell(pPlayer,22864,false); - } - return true; -} - -/*###### -## go_gilded_brazier -######*/ - -enum -{ - NPC_STILLBLADE = 17716, -}; - -bool GOHello_go_gilded_brazier(Player* pPlayer, GameObject* pGO) -{ - if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) - { - if (Creature* pCreature = pPlayer->SummonCreature(NPC_STILLBLADE, 8087.632, -7542.740, 151.568, 0.122, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) - pCreature->AI()->AttackStart(pPlayer); - } - - return true; -} - -/*###### -## go_orb_of_command -######*/ - -bool GOHello_go_orb_of_command(Player* pPlayer, GameObject* pGo) -{ - if (pPlayer->GetQuestRewardStatus(7761)) - pPlayer->CastSpell(pPlayer,23460,true); - - return true; -} - -/*###### -## go_tablet_of_madness -######*/ - -bool GOHello_go_tablet_of_madness(Player* pPlayer, GameObject* pGo) -{ - if (pPlayer->HasSkill(SKILL_ALCHEMY) && pPlayer->GetSkillValue(SKILL_ALCHEMY) >= 300 && !pPlayer->HasSpell(24266)) - { - pPlayer->CastSpell(pPlayer,24267,false); - } - return true; -} - -/*###### -## go_tablet_of_the_seven -######*/ - -//TODO: use gossip option ("Transcript the Tablet") instead, if Trinity adds support. -bool GOHello_go_tablet_of_the_seven(Player* pPlayer, GameObject* pGo) -{ - if (pGo->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) - return true; - - if (pPlayer->GetQuestStatus(4296) == QUEST_STATUS_INCOMPLETE) - pPlayer->CastSpell(pPlayer,15065,false); - - return true; -} - -/*##### -## go_jump_a_tron -######*/ - -bool GOHello_go_jump_a_tron(Player* pPlayer, GameObject* pGo) -{ - if (pPlayer->GetQuestStatus(10111) == QUEST_STATUS_INCOMPLETE) - pPlayer->CastSpell(pPlayer,33382,true); - - return true; -} - -/*###### -## go_ethereum_prison -######*/ - -enum -{ - SPELL_REP_LC = 39456, - SPELL_REP_SHAT = 39457, - SPELL_REP_CE = 39460, - SPELL_REP_CON = 39474, - SPELL_REP_KT = 39475, - SPELL_REP_SPOR = 39476 -}; - -const uint32 NpcPrisonEntry[] = -{ - 22810, 22811, 22812, 22813, 22814, 22815, //good guys - 20783, 20784, 20785, 20786, 20788, 20789, 20790 //bad guys -}; - -bool GOHello_go_ethereum_prison(Player* pPlayer, GameObject* pGo) -{ - int Random = rand() % (sizeof(NpcPrisonEntry) / sizeof(uint32)); - - if (Creature* pCreature = pPlayer->SummonCreature(NpcPrisonEntry[Random], - pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer), - TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000)) - { - if (!pCreature->IsHostileTo(pPlayer)) - { - uint32 Spell = 0; - - if (FactionTemplateEntry const* pFaction = pCreature->getFactionTemplateEntry()) - { - switch(pFaction->faction) - { - case 1011: Spell = SPELL_REP_LC; break; - case 935: Spell = SPELL_REP_SHAT; break; - case 942: Spell = SPELL_REP_CE; break; - case 933: Spell = SPELL_REP_CON; break; - case 989: Spell = SPELL_REP_KT; break; - case 970: Spell = SPELL_REP_SPOR; break; - } - - if (Spell) - pCreature->CastSpell(pPlayer, Spell, false); - else - error_log("TSCR: go_ethereum_prison summoned Creature (entry %u) but faction (%u) are not expected by script.", pCreature->GetEntry(), pCreature->getFaction()); - } - } - } - - return false; -} - -/*###### -## go_ethereum_stasis -######*/ - -const uint32 NpcStasisEntry[] = -{ - 22825, 20888, 22827, 22826, 22828 -}; - -bool GOHello_go_ethereum_stasis(Player* pPlayer, GameObject* pGo) -{ - int Random = rand() % (sizeof(NpcStasisEntry) / sizeof(uint32)); - - pPlayer->SummonCreature(NpcStasisEntry[Random], - pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer), - TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - - return false; -} - -/*###### -## go_resonite_cask -######*/ - -enum -{ - NPC_GOGGEROC = 11920 -}; - -bool GOHello_go_resonite_cask(Player* pPlayer, GameObject* pGO) -{ - if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) - pGO->SummonCreature(NPC_GOGGEROC, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); - - return false; -} - -/*###### -## go_sacred_fire_of_life -######*/ - -#define NPC_ARIKARA 10882 - -bool GOHello_go_sacred_fire_of_life(Player* pPlayer, GameObject* pGO) -{ - if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) - pPlayer->SummonCreature(NPC_ARIKARA, -5008.338, -2118.894, 83.657, 0.874, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); - - return true; -} - -/*###### -## go_shrine_of_the_birds -######*/ - -enum -{ - NPC_HAWK_GUARD = 22992, - NPC_EAGLE_GUARD = 22993, - NPC_FALCON_GUARD = 22994, - GO_SHRINE_HAWK = 185551, - GO_SHRINE_EAGLE = 185547, - GO_SHRINE_FALCON = 185553 -}; - -bool GOHello_go_shrine_of_the_birds(Player* pPlayer, GameObject* pGo) -{ - uint32 BirdEntry = 0; - - float fX, fY, fZ; - pGo->GetClosePoint(fX, fY, fZ, pGo->GetObjectSize(), INTERACTION_DISTANCE); - - switch(pGo->GetEntry()) - { - case GO_SHRINE_HAWK: - BirdEntry = NPC_HAWK_GUARD; - break; - case GO_SHRINE_EAGLE: - BirdEntry = NPC_EAGLE_GUARD; - break; - case GO_SHRINE_FALCON: - BirdEntry = NPC_FALCON_GUARD; - break; - } - - if (BirdEntry) - pPlayer->SummonCreature(BirdEntry, fX, fY, fZ, pGo->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); - - return false; -} - -/*###### -## go_tele_to_dalaran_crystal -######*/ - -enum -{ - QUEST_LEARN_LEAVE_RETURN = 12790, - QUEST_TELE_CRYSTAL_FLAG = 12845 -}; - -bool GOHello_go_tele_to_dalaran_crystal(Player* pPlayer, GameObject* pGo) -{ - if (pPlayer->GetQuestRewardStatus(QUEST_TELE_CRYSTAL_FLAG)) - return false; - - //TODO: must send error message (what kind of message? On-screen?) - return true; -} - -/*###### -## go_tele_to_violet_stand -######*/ - -bool GOHello_go_tele_to_violet_stand(Player* pPlayer, GameObject* pGo) -{ - if (pPlayer->GetQuestRewardStatus(QUEST_LEARN_LEAVE_RETURN) || pPlayer->GetQuestStatus(QUEST_LEARN_LEAVE_RETURN) == QUEST_STATUS_INCOMPLETE) - return false; - - return true; -} - -void AddSC_go_scripts() -{ - Script *newscript; - - newscript = new Script; - newscript->Name = "go_cat_figurine"; - newscript->pGOHello = &GOHello_go_cat_figurine; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_northern_crystal_pylon"; - newscript->pGOHello = &GOHello_go_northern_crystal_pylon; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_eastern_crystal_pylon"; - newscript->pGOHello = &GOHello_go_eastern_crystal_pylon; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_western_crystal_pylon"; - newscript->pGOHello = &GOHello_go_western_crystal_pylon; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_barov_journal"; - newscript->pGOHello = &GOHello_go_barov_journal; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_field_repair_bot_74A"; - newscript->pGOHello = &GOHello_go_field_repair_bot_74A; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "go_gilded_brazier"; - newscript->pGOHello = &GOHello_go_gilded_brazier; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_orb_of_command"; - newscript->pGOHello = &GOHello_go_orb_of_command; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "go_shrine_of_the_birds"; - newscript->pGOHello = &GOHello_go_shrine_of_the_birds; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_tablet_of_madness"; - newscript->pGOHello = &GOHello_go_tablet_of_madness; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_tablet_of_the_seven"; - newscript->pGOHello = &GOHello_go_tablet_of_the_seven; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_jump_a_tron"; - newscript->pGOHello = &GOHello_go_jump_a_tron; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_ethereum_prison"; - newscript->pGOHello = &GOHello_go_ethereum_prison; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "go_ethereum_stasis"; - newscript->pGOHello = &GOHello_go_ethereum_stasis; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "go_resonite_cask"; - newscript->pGOHello = &GOHello_go_resonite_cask; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "go_sacred_fire_of_life"; - newscript->pGOHello = &GOHello_go_sacred_fire_of_life; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "go_tele_to_dalaran_crystal"; - newscript->pGOHello = &GOHello_go_tele_to_dalaran_crystal; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "go_tele_to_violet_stand"; - newscript->pGOHello = &GOHello_go_tele_to_violet_stand; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/item/item_scripts.cpp b/src/bindings/scripts/scripts/item/item_scripts.cpp deleted file mode 100644 index f103dc86cdc..00000000000 --- a/src/bindings/scripts/scripts/item/item_scripts.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Item_Scripts -SD%Complete: 100 -SDComment: Items for a range of different items. See content below (in script) -SDCategory: Items -EndScriptData */ - -/* ContentData -item_draenei_fishing_net(i23654) Hacklike implements chance to spawn item or creature -item_nether_wraith_beacon(i31742) Summons creatures for quest Becoming a Spellfire Tailor (q10832) -item_flying_machine(i34060,i34061) Engineering crafted flying machines -item_gor_dreks_ointment(i30175) Protecting Our Own(q10488) -item_only_for_flight Items which should only useable while flying -EndContentData */ - -#include "precompiled.h" -#include "Spell.h" - -/*##### -# item_only_for_flight -#####*/ - -enum -{ - SPELL_ARCANE_CHARGES = 45072 -}; - -bool ItemUse_item_only_for_flight(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) -{ - uint32 itemId = _Item->GetEntry(); - bool disabled = false; - - //for special scripts - switch(itemId) - { - case 24538: - if (pPlayer->GetAreaId() != 3628) - disabled = true; - break; - case 34489: - if (pPlayer->GetZoneId() != 4080) - disabled = true; - break; - case 34475: - if (const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(SPELL_ARCANE_CHARGES)) - Spell::SendCastResult(pPlayer, pSpellInfo, 1, SPELL_FAILED_NOT_ON_GROUND); - break; - } - - // allow use in flight only - if (pPlayer->isInFlight() && !disabled) - return false; - - // error - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL); - return true; -} - -/*##### -# item_draenei_fishing_net -#####*/ - -//This is just a hack and should be removed from here. -//Creature/Item are in fact created before spell are sucessfully casted, without any checks at all to ensure proper/expected behavior. -bool ItemUse_item_draenei_fishing_net(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) -{ - //if (targets.getGOTarget() && targets.getGOTarget()->GetTypeId() == TYPEID_GAMEOBJECT && - //targets.getGOTarget()->GetGOInfo()->type == GAMEOBJECT_TYPE_SPELL_FOCUS && targets.getGOTarget()->GetEntry() == 181616) - //{ - if (pPlayer->GetQuestStatus(9452) == QUEST_STATUS_INCOMPLETE) - { - if (rand()%100 < 35) - { - Creature *Murloc = pPlayer->SummonCreature(17102,pPlayer->GetPositionX() ,pPlayer->GetPositionY()+20, pPlayer->GetPositionZ(), 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); - if (Murloc) - Murloc->AI()->AttackStart(pPlayer); - } - else - { - ItemPosCountVec dest; - uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 23614, 1); - if (msg == EQUIP_ERR_OK) - { - Item* item = pPlayer->StoreNewItem(dest,23614,true); - if (item) - pPlayer->SendNewItem(item,1,false,true); - }else - pPlayer->SendEquipError(msg,NULL,NULL); - } - } - //} - return false; -} - -/*##### -# item_nether_wraith_beacon -#####*/ - -bool ItemUse_item_nether_wraith_beacon(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) -{ - if (pPlayer->GetQuestStatus(10832) == QUEST_STATUS_INCOMPLETE) - { - Creature *Nether; - Nether = pPlayer->SummonCreature(22408,pPlayer->GetPositionX() ,pPlayer->GetPositionY()+20, pPlayer->GetPositionZ(), 0,TEMPSUMMON_TIMED_DESPAWN,180000); - Nether = pPlayer->SummonCreature(22408,pPlayer->GetPositionX() ,pPlayer->GetPositionY()-20, pPlayer->GetPositionZ(), 0,TEMPSUMMON_TIMED_DESPAWN,180000); - if (Nether) - (Nether->AI())->AttackStart(pPlayer); - } - return false; -} - -/*##### -# item_flying_machine -#####*/ - -bool ItemUse_item_flying_machine(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) -{ - uint32 itemId = _Item->GetEntry(); - if (itemId == 34060) - if (pPlayer->GetBaseSkillValue(SKILL_RIDING) >= 225) - return false; - - if (itemId == 34061) - if (pPlayer->GetBaseSkillValue(SKILL_RIDING) == 300) - return false; - - debug_log("TSCR: Player attempt to use item %u, but did not meet riding requirement",itemId); - pPlayer->SendEquipError(EQUIP_ERR_ERR_CANT_EQUIP_SKILL,_Item,NULL); - return true; -} - -/*##### -# item_gor_dreks_ointment -#####*/ - -bool ItemUse_item_gor_dreks_ointment(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) -{ - if (targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && - targets.getUnitTarget()->GetEntry() == 20748 && !targets.getUnitTarget()->HasAura(32578)) - return false; - - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL); - return true; -} - -/*##### -# item_incendiary_explosives -#####*/ - -bool ItemUse_item_incendiary_explosives(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) -{ - if (pPlayer->FindNearestCreature(26248,15) || pPlayer->FindNearestCreature(26249,15)) - { - return false; - } - else - { - pPlayer->SendEquipError(EQUIP_ERR_OUT_OF_RANGE,_Item,NULL); - return true; - } -} - -/*##### -# item_mysterious_egg -#####*/ - -bool ItemExpire_item_mysterious_egg(Player* pPlayer, ItemPrototype const * _ItemProto) -{ - ItemPosCountVec dest; - uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 39883, 1); // Cracked Egg - if (msg == EQUIP_ERR_OK) - { - pPlayer->StoreNewItem(dest, 39883, true, Item::GenerateItemRandomPropertyId(39883)); - } - return true; -} - -/*##### -# item_disgusting_jar -#####*/ - -bool ItemExpire_item_disgusting_jar(Player* pPlayer, ItemPrototype const * _ItemProto) -{ - ItemPosCountVec dest; - uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 44718, 1); // Ripe Disgusting Jar - if (msg == EQUIP_ERR_OK) - { - pPlayer->StoreNewItem(dest, 44718, true, Item::GenerateItemRandomPropertyId(44718)); - } - return true; -} - -void AddSC_item_scripts() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="item_only_for_flight"; - newscript->pItemUse = &ItemUse_item_only_for_flight; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_draenei_fishing_net"; - newscript->pItemUse = &ItemUse_item_draenei_fishing_net; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_nether_wraith_beacon"; - newscript->pItemUse = &ItemUse_item_nether_wraith_beacon; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_flying_machine"; - newscript->pItemUse = &ItemUse_item_flying_machine; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_gor_dreks_ointment"; - newscript->pItemUse = &ItemUse_item_gor_dreks_ointment; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_incendiary_explosives"; - newscript->pItemUse = &ItemUse_item_incendiary_explosives; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_mysterious_egg"; - newscript->pItemExpire = &ItemExpire_item_mysterious_egg; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="item_disgusting_jar"; - newscript->pItemExpire = &ItemExpire_item_disgusting_jar; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/item/item_test.cpp b/src/bindings/scripts/scripts/item/item_test.cpp deleted file mode 100644 index 0c2d9ac2793..00000000000 --- a/src/bindings/scripts/scripts/item/item_test.cpp +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2006 - 2008 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Item_Test -SD%Complete: 100 -SDComment: Used for Testing Item Scripts -SDCategory: Items -EndScriptData */ - -#include "precompiled.h" - -extern void LoadDatabase(); - -bool ItemUse_item_test(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) -{ - LoadDatabase(); - return true; -} - -void AddSC_item_test() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="item_test"; - newscript->pItemUse = &ItemUse_item_test; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/npc/npc_innkeeper.cpp b/src/bindings/scripts/scripts/npc/npc_innkeeper.cpp deleted file mode 100644 index 8a99ea7fc7a..00000000000 --- a/src/bindings/scripts/scripts/npc/npc_innkeeper.cpp +++ /dev/null @@ -1,145 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Npc_Innkeeper -SD%Complete: 50 -SDComment: This script are currently not in use. EventSystem cannot be used on Windows build of SD2 -SDCategory: NPCs -EndScriptData */ - -#include "precompiled.h" - -#define HALLOWEEN_EVENTID 12 -#define SPELL_TRICK_OR_TREATED 24755 -#define SPELL_TREAT 24715 - -#define LOCALE_TRICK_OR_TREAT_0 "Trick or Treat!" -#define LOCALE_TRICK_OR_TREAT_2 "Des bonbons ou des blagues!" -#define LOCALE_TRICK_OR_TREAT_3 "Süßes oder Saures!" -#define LOCALE_TRICK_OR_TREAT_6 "¡Truco o trato!" - -bool isEventActive() -{ - /* - const GameEvent::ActiveEvents *ActiveEventsList = gameeventmgr.GetActiveEventList(); - GameEvent::ActiveEvents::const_iterator itr; - for (itr = ActiveEventsList->begin(); itr != ActiveEventsList->end(); ++itr) - { - if (*itr==HALLOWEEN_EVENTID) - { - return true; - } - }*/ - return false; -} - -bool GossipHello_npc_innkeeper(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - - if (isEventActive()&& !pPlayer->GetAura(SPELL_TRICK_OR_TREATED, pPlayer->GetGUID())) - { - char* localizedEntry; - switch (pPlayer->GetSession()->GetSessionDbLocaleIndex()) - { - case 0: - localizedEntry=LOCALE_TRICK_OR_TREAT_0; - break; - case 2: - localizedEntry=LOCALE_TRICK_OR_TREAT_2; - break; - case 3: - localizedEntry=LOCALE_TRICK_OR_TREAT_3; - break; - case 6: - localizedEntry=LOCALE_TRICK_OR_TREAT_6; - break; - default: - localizedEntry=LOCALE_TRICK_OR_TREAT_0; - } - - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, localizedEntry, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+HALLOWEEN_EVENTID); - } - - pPlayer->TalkedToCreature(pCreature->GetEntry(), pCreature->GetGUID()); - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -bool GossipSelect_npc_innkeeper(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF+HALLOWEEN_EVENTID && isEventActive() && !pPlayer->GetAura(SPELL_TRICK_OR_TREATED, pPlayer->GetGUID())) - { - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer, SPELL_TRICK_OR_TREATED, true); - - // either trick or treat, 50% chance - if (rand()%2) - { - pPlayer->CastSpell(pPlayer, SPELL_TREAT, true); - } - else - { - int32 trickspell=0; - switch (rand()%9) // note that female characters can get male costumes and vice versa - { - case 0: - trickspell=24753; // cannot cast, random 30sec - break; - case 1: - trickspell=24713; // lepper gnome costume - break; - case 2: - trickspell=24735; // male ghost costume - break; - case 3: - trickspell=24736; // female ghostcostume - break; - case 4: - trickspell=24710; // male ninja costume - break; - case 5: - trickspell=24711; // female ninja costume - break; - case 6: - trickspell=24708; // male pirate costume - break; - case 7: - trickspell=24709; // female pirate costume - break; - case 8: - trickspell=24723; // skeleton costume - break; - } - pPlayer->CastSpell(pPlayer, trickspell, true); - } - return true; // prevent Trinity core handling - } - return false; // the player didn't select "trick or treat" or cheated, normal core handling -} - -void AddSC_npc_innkeeper() -{ - Script *newscript; - newscript = new Script; - newscript->Name="npc_innkeeper"; - newscript->pGossipHello = &GossipHello_npc_innkeeper; - newscript->pGossipSelect = &GossipSelect_npc_innkeeper; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/npc/npc_professions.cpp b/src/bindings/scripts/scripts/npc/npc_professions.cpp deleted file mode 100644 index 07b40555fd5..00000000000 --- a/src/bindings/scripts/scripts/npc/npc_professions.cpp +++ /dev/null @@ -1,1342 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Npc_Professions -SD%Complete: 80 -SDComment: Provides learn/unlearn/relearn-options for professions. Not supported: Unlearn engineering, re-learn engineering, re-learn leatherworking. -SDCategory: NPCs -EndScriptData */ - -#include "precompiled.h" - -/* -A few notes for future developement: -- A full implementation of gossip for GO's is required. They must have the same scripting capabilities as creatures. Basically, -there is no difference here (except that default text is chosen with `gameobject_template`.`data3` (for GO type2, different dataN for a few others) -- It's possible blacksmithing still require some tweaks and adjustments due to the way we _have_ to use reputation. -*/ - -/* --- UPDATE `gameobject_template` SET `ScriptName` = 'go_soothsaying_for_dummies' WHERE `entry` = 177226; -*/ - -/*### -# to be removed from here (->ncp_text). This is data for database projects. -###*/ -#define TALK_MUST_UNLEARN_WEAPON "You must forget your weapon type specialty before I can help you. Go to Everlook in Winterspring and seek help there." - -#define TALK_HAMMER_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the hammersmith." -#define TALK_AXE_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the axesmith." -#define TALK_SWORD_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the swordsmith." - -#define TALK_HAMMER_UNLEARN "Forgetting your Hammersmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Hammersmithing to create!" -#define TALK_AXE_UNLEARN "Forgetting your Axesmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Axesmithing to create!" -#define TALK_SWORD_UNLEARN "Forgetting your Swordsmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Swordsmithing to create!" - -/*### -# generic defines -###*/ - -#define GOSSIP_SENDER_LEARN 50 -#define GOSSIP_SENDER_UNLEARN 51 -#define GOSSIP_SENDER_CHECK 52 - -/*### -# gossip item and box texts -###*/ - -#define GOSSIP_LEARN_POTION "Please teach me how to become a Master of Potions, Lauranna" -#define GOSSIP_UNLEARN_POTION "I wish to unlearn Potion Mastery" -#define GOSSIP_LEARN_TRANSMUTE "Please teach me how to become a Master of Transmutations, Zarevhi" -#define GOSSIP_UNLEARN_TRANSMUTE "I wish to unlearn Transmutation Mastery" -#define GOSSIP_LEARN_ELIXIR "Please teach me how to become a Master of Elixirs, Lorokeem" -#define GOSSIP_UNLEARN_ELIXIR "I wish to unlearn Elixir Mastery" - -#define BOX_UNLEARN_ALCHEMY_SPEC "Do you really want to unlearn your alchemy specialty and lose all associated recipes? \n Cost: " - -#define GOSSIP_WEAPON_LEARN "Please teach me how to become a Weaponsmith" -#define GOSSIP_WEAPON_UNLEARN "I wish to unlearn the art of Weaponsmithing" -#define GOSSIP_ARMOR_LEARN "Please teach me how to become a Armorsmith" -#define GOSSIP_ARMOR_UNLEARN "I wish to unlearn the art of Armorsmithing" - -#define GOSSIP_UNLEARN_SMITH_SPEC "I wish to unlearn my blacksmith specialty" -#define BOX_UNLEARN_ARMORORWEAPON "Do you really want to unlearn your blacksmith specialty and lose all associated recipes? \n Cost: " - -#define GOSSIP_LEARN_HAMMER "Please teach me how to become a Hammersmith, Lilith" -#define GOSSIP_UNLEARN_HAMMER "I wish to unlearn Hammersmithing" -#define GOSSIP_LEARN_AXE "Please teach me how to become a Axesmith, Kilram" -#define GOSSIP_UNLEARN_AXE "I wish to unlearn Axesmithing" -#define GOSSIP_LEARN_SWORD "Please teach me how to become a Swordsmith, Seril" -#define GOSSIP_UNLEARN_SWORD "I wish to unlearn Swordsmithing" - -#define BOX_UNLEARN_WEAPON_SPEC "Do you really want to unlearn your weaponsmith specialty and lose all associated recipes? \n Cost: " - -#define GOSSIP_LEARN_DRAGON "I am absolutely certain that i want to learn dragonscale leatherworking" -#define GOSSIP_UNLEARN_DRAGON "I wish to unlearn Dragonscale Leatherworking" -#define GOSSIP_LEARN_ELEMENTAL "I am absolutely certain that i want to learn elemental leatherworking" -#define GOSSIP_UNLEARN_ELEMENTAL "I wish to unlearn Elemental Leatherworking" -#define GOSSIP_LEARN_TRIBAL "I am absolutely certain that i want to learn tribal leatherworking" -#define GOSSIP_UNLEARN_TRIBAL "I wish to unlearn Tribal Leatherworking" - -#define BOX_UNLEARN_LEATHER_SPEC "Do you really want to unlearn your leatherworking specialty and lose all associated recipes? \n Cost: " - -#define GOSSIP_LEARN_SPELLFIRE "Please teach me how to become a Spellcloth tailor" -#define GOSSIP_UNLEARN_SPELLFIRE "I wish to unlearn Spellfire Tailoring" -#define GOSSIP_LEARN_MOONCLOTH "Please teach me how to become a Mooncloth tailor" -#define GOSSIP_UNLEARN_MOONCLOTH "I wish to unlearn Mooncloth Tailoring" -#define GOSSIP_LEARN_SHADOWEAVE "Please teach me how to become a Shadoweave tailor" -#define GOSSIP_UNLEARN_SHADOWEAVE "I wish to unlearn Shadoweave Tailoring" - -#define BOX_UNLEARN_TAILOR_SPEC "Do you really want to unlearn your tailoring specialty and lose all associated recipes? \n Cost: " - -#define GOSSIP_LEARN_GOBLIN "I am absolutely certain that i want to learn Goblin engineering" -#define GOSSIP_LEARN_GNOMISH "I am absolutely certain that i want to learn Gnomish engineering" - -/*### -# spells defines -###*/ - -#define S_WEAPON 9787 -#define S_ARMOR 9788 -#define S_HAMMER 17040 -#define S_AXE 17041 -#define S_SWORD 17039 - -#define S_LEARN_WEAPON 9789 -#define S_LEARN_ARMOR 9790 -#define S_LEARN_HAMMER 39099 -#define S_LEARN_AXE 39098 -#define S_LEARN_SWORD 39097 - -#define S_UNLEARN_WEAPON 36436 -#define S_UNLEARN_ARMOR 36435 -#define S_UNLEARN_HAMMER 36441 -#define S_UNLEARN_AXE 36439 -#define S_UNLEARN_SWORD 36438 - -#define S_REP_ARMOR 17451 -#define S_REP_WEAPON 17452 - -#define REP_ARMOR 46 -#define REP_WEAPON 289 -#define REP_HAMMER 569 -#define REP_AXE 570 -#define REP_SWORD 571 - -#define S_DRAGON 10656 -#define S_ELEMENTAL 10658 -#define S_TRIBAL 10660 - -#define S_LEARN_DRAGON 10657 -#define S_LEARN_ELEMENTAL 10659 -#define S_LEARN_TRIBAL 10661 - -#define S_UNLEARN_DRAGON 36434 -#define S_UNLEARN_ELEMENTAL 36328 -#define S_UNLEARN_TRIBAL 36433 - -#define S_GOBLIN 20222 -#define S_GNOMISH 20219 - -#define S_LEARN_GOBLIN 20221 -#define S_LEARN_GNOMISH 20220 - -#define S_SPELLFIRE 26797 -#define S_MOONCLOTH 26798 -#define S_SHADOWEAVE 26801 - -#define S_LEARN_SPELLFIRE 26796 -#define S_LEARN_MOONCLOTH 26799 -#define S_LEARN_SHADOWEAVE 26800 - -#define S_UNLEARN_SPELLFIRE 41299 -#define S_UNLEARN_MOONCLOTH 41558 -#define S_UNLEARN_SHADOWEAVE 41559 - -#define S_TRANSMUTE 28672 -#define S_ELIXIR 28677 -#define S_POTION 28675 - -#define S_LEARN_TRANSMUTE 28674 -#define S_LEARN_ELIXIR 28678 -#define S_LEARN_POTION 28676 - -#define S_UNLEARN_TRANSMUTE 41565 -#define S_UNLEARN_ELIXIR 41564 -#define S_UNLEARN_POTION 41563 - -/*### -# formulas to calculate unlearning cost -###*/ - -int32 DoLearnCost(Player* pPlayer) //tailor, alchemy -{ - return 200000; -} - -int32 DoHighUnlearnCost(Player* pPlayer) //tailor, alchemy -{ - return 1500000; -} - -int32 DoMedUnlearnCost(Player* pPlayer) //blacksmith, leatherwork -{ - uint32 level = pPlayer->getLevel(); - if (level < 51) - return 250000; - else if (level < 66) - return 500000; - else - return 1000000; -} - -int32 DoLowUnlearnCost(Player* pPlayer) //blacksmith -{ - uint32 level = pPlayer->getLevel(); - if (level < 66) - return 50000; - else - return 100000; -} - -/*### -# unlearning related profession spells -###*/ - -bool EquippedOk(Player* pPlayer, uint32 spellId) -{ - SpellEntry const* spell = GetSpellStore()->LookupEntry(spellId); - - if (!spell) - return false; - - for(uint8 i=0; i<3; ++i) - { - uint32 reqSpell = spell->EffectTriggerSpell[i]; - if (!reqSpell) - continue; - - Item* pItem; - for(uint8 j = EQUIPMENT_SLOT_START; j < EQUIPMENT_SLOT_END; j++) - { - pItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, j); - if (pItem) - if (pItem->GetProto()->RequiredSpell == reqSpell) - { - //player has item equipped that require specialty. Not allow to unlearn, player has to unequip first - debug_log("TSCR: player attempt to unlearn spell %u, but item %u is equipped.",reqSpell,pItem->GetProto()->ItemId); - return false; - } - } - } - return true; -} - -void ProfessionUnlearnSpells(Player* pPlayer, uint32 type) -{ - switch (type) - { - case 36436: // S_UNLEARN_WEAPON - pPlayer->removeSpell(36125); // Light Earthforged Blade - pPlayer->removeSpell(36128); // Light Emberforged Hammer - pPlayer->removeSpell(36126); // Light Skyforged Axe - break; - case 36435: // S_UNLEARN_ARMOR - pPlayer->removeSpell(36122); // Earthforged Leggings - pPlayer->removeSpell(36129); // Heavy Earthforged Breastplate - pPlayer->removeSpell(36130); // Stormforged Hauberk - pPlayer->removeSpell(34533); // Breastplate of Kings - pPlayer->removeSpell(34529); // Nether Chain Shirt - pPlayer->removeSpell(34534); // Bulwark of Kings - pPlayer->removeSpell(36257); // Bulwark of the Ancient Kings - pPlayer->removeSpell(36256); // Embrace of the Twisting Nether - pPlayer->removeSpell(34530); // Twisting Nether Chain Shirt - pPlayer->removeSpell(36124); // Windforged Leggings - break; - case 36441: // S_UNLEARN_HAMMER - pPlayer->removeSpell(36262); // Dragonstrike - pPlayer->removeSpell(34546); // Dragonmaw - pPlayer->removeSpell(34545); // Drakefist Hammer - pPlayer->removeSpell(36136); // Lavaforged Warhammer - pPlayer->removeSpell(34547); // Thunder - pPlayer->removeSpell(34567); // Deep Thunder - pPlayer->removeSpell(36263); // Stormherald - pPlayer->removeSpell(36137); // Great Earthforged Hammer - break; - case 36439: // S_UNLEARN_AXE - pPlayer->removeSpell(36260); // Wicked Edge of the Planes - pPlayer->removeSpell(34562); // Black Planar Edge - pPlayer->removeSpell(34541); // The Planar Edge - pPlayer->removeSpell(36134); // Stormforged Axe - pPlayer->removeSpell(36135); // Skyforged Great Axe - pPlayer->removeSpell(36261); // Bloodmoon - pPlayer->removeSpell(34543); // Lunar Crescent - pPlayer->removeSpell(34544); // Mooncleaver - break; - case 36438: // S_UNLEARN_SWORD - pPlayer->removeSpell(36258); // Blazefury - pPlayer->removeSpell(34537); // Blazeguard - pPlayer->removeSpell(34535); // Fireguard - pPlayer->removeSpell(36131); // Windforged Rapier - pPlayer->removeSpell(36133); // Stoneforged Claymore - pPlayer->removeSpell(34538); // Lionheart Blade - pPlayer->removeSpell(34540); // Lionheart Champion - pPlayer->removeSpell(36259); // Lionheart Executioner - break; - case 36434: // S_UNLEARN_DRAGON - pPlayer->removeSpell(36076); // Dragonstrike Leggings - pPlayer->removeSpell(36079); // Golden Dragonstrike Breastplate - pPlayer->removeSpell(35576); // Ebon Netherscale Belt - pPlayer->removeSpell(35577); // Ebon Netherscale Bracers - pPlayer->removeSpell(35575); // Ebon Netherscale Breastplate - pPlayer->removeSpell(35582); // Netherstrike Belt - pPlayer->removeSpell(35584); // Netherstrike Bracers - pPlayer->removeSpell(35580); // Netherstrike Breastplate - break; - case 36328: // S_UNLEARN_ELEMENTAL - pPlayer->removeSpell(36074); // Blackstorm Leggings - pPlayer->removeSpell(36077); // Primalstorm Breastplate - pPlayer->removeSpell(35590); // Primalstrike Belt - pPlayer->removeSpell(35591); // Primalstrike Bracers - pPlayer->removeSpell(35589); // Primalstrike Vest - break; - case 36433: // S_UNLEARN_TRIBAL - pPlayer->removeSpell(35585); // Windhawk Hauberk - pPlayer->removeSpell(35587); // Windhawk Belt - pPlayer->removeSpell(35588); // Windhawk Bracers - pPlayer->removeSpell(36075); // Wildfeather Leggings - pPlayer->removeSpell(36078); // Living Crystal Breastplate - break; - case 41299: // S_UNLEARN_SPELLFIRE - pPlayer->removeSpell(26752); // Spellfire Belt - pPlayer->removeSpell(26753); // Spellfire Gloves - pPlayer->removeSpell(26754); // Spellfire Robe - break; - case 41558: // S_UNLEARN_MOONCLOTH - pPlayer->removeSpell(26760); // Primal Mooncloth Belt - pPlayer->removeSpell(26761); // Primal Mooncloth Shoulders - pPlayer->removeSpell(26762); // Primal Mooncloth Robe - break; - case 41559: // S_UNLEARN_SHADOWEAVE - pPlayer->removeSpell(26756); // Frozen Shadoweave Shoulders - pPlayer->removeSpell(26757); // Frozen Shadoweave Boots - pPlayer->removeSpell(26758); // Frozen Shadoweave Robe - break; - } -} - -/*### -# start menues alchemy -###*/ - -bool HasAlchemySpell(Player* pPlayer) -{ - if (pPlayer->HasSpell(S_TRANSMUTE) || pPlayer->HasSpell(S_ELIXIR) || pPlayer->HasSpell(S_POTION)) - return true; - return false; -} - -bool GossipHello_npc_prof_alchemy(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - if (pCreature->isVendor()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - if (pCreature->isTrainer()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - - uint32 eCreature = pCreature->GetEntry(); - - if (pPlayer->HasSkill(SKILL_ALCHEMY) && pPlayer->GetBaseSkillValue(SKILL_ALCHEMY)>=350 && pPlayer->getLevel() > 67) - { - if (pPlayer->GetQuestRewardStatus(10899) || pPlayer->GetQuestRewardStatus(10902) || pPlayer->GetQuestRewardStatus(10897)) - { - switch (eCreature) - { - case 22427: //Zarevhi - if (!HasAlchemySpell(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1); - if (pPlayer->HasSpell(S_TRANSMUTE)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); - break; - case 19052: //Lorokeem - if (!HasAlchemySpell(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2); - if (pPlayer->HasSpell(S_ELIXIR)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); - break; - case 17909: //Lauranna Thar'well - if (!HasAlchemySpell(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3); - if (pPlayer->HasSpell(S_POTION)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6); - break; - } - } - } - - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -void SendActionMenu_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch(uiAction) - { - case GOSSIP_ACTION_TRADE: - pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); - break; - case GOSSIP_ACTION_TRAIN: - pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); - break; - //Learn Alchemy - case GOSSIP_ACTION_INFO_DEF + 1: - if (!pPlayer->HasSpell(S_TRANSMUTE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_TRANSMUTE, true); - pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - if (!pPlayer->HasSpell(S_ELIXIR) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_ELIXIR, true); - pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - if (!pPlayer->HasSpell(S_POTION) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_POTION, true); - pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - //Unlearn Alchemy - case GOSSIP_ACTION_INFO_DEF + 4: - if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) - { - pCreature->CastSpell(pPlayer, S_UNLEARN_TRANSMUTE, true); - pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 5: - if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) - { - pCreature->CastSpell(pPlayer, S_UNLEARN_ELIXIR, true); - pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 6: - if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) - { - pCreature->CastSpell(pPlayer, S_UNLEARN_POTION, true); - pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - } -} - -void SendConfirmLearn_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction) - { - uint32 eCreature = pCreature->GetEntry(); - switch(eCreature) - { - case 22427: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 19052: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 17909: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - } - } -} - -void SendConfirmUnlearn_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction) - { - uint32 eCreature = pCreature->GetEntry(); - switch(eCreature) - { - case 22427: //Zarevhi - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 19052: //Lorokeem - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 17909: //Lauranna Thar'well - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - } - } -} - -bool GossipSelect_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch(uiSender) - { - case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/*### -# start menues blacksmith -###*/ - -bool HasWeaponSub(Player* pPlayer) -{ - if (pPlayer->HasSpell(S_HAMMER) || pPlayer->HasSpell(S_AXE) || pPlayer->HasSpell(S_SWORD)) - return true; - return false; -} - -bool GossipHello_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - if (pCreature->isVendor()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - if (pCreature->isTrainer()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - - uint32 eCreature = pCreature->GetEntry(); - //WEAPONSMITH & ARMORSMITH - if (pPlayer->GetBaseSkillValue(SKILL_BLACKSMITHING)>=225) - { - switch (eCreature) - { - case 11145: //Myolor Sunderfury - case 11176: //Krathok Moltenfist - if (!pPlayer->HasSpell(S_ARMOR) && !pPlayer->HasSpell(S_WEAPON) && pPlayer->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - if (!pPlayer->HasSpell(S_WEAPON) && !pPlayer->HasSpell(S_ARMOR) && pPlayer->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - break; - case 11146: //Ironus Coldsteel - case 11178: //Borgosh Corebender - if (pPlayer->HasSpell(S_WEAPON)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); - break; - case 5164: //Grumnus Steelshaper - case 11177: //Okothos Ironrager - if (pPlayer->HasSpell(S_ARMOR)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); - break; - } - } - //WEAPONSMITH SPEC - if (pPlayer->HasSpell(S_WEAPON) && pPlayer->getLevel() > 49 && pPlayer->GetBaseSkillValue(SKILL_BLACKSMITHING)>=250) - { - switch (eCreature) - { - case 11191: //Lilith the Lithe - if (!HasWeaponSub(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5); - if (pPlayer->HasSpell(S_HAMMER)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8); - break; - case 11192: //Kilram - if (!HasWeaponSub(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6); - if (pPlayer->HasSpell(S_AXE)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9); - break; - case 11193: //Seril Scourgebane - if (!HasWeaponSub(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7); - if (pPlayer->HasSpell(S_SWORD)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10); - break; - } - } - - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -void SendActionMenu_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch(uiAction) - { - case GOSSIP_ACTION_TRADE: - pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); - break; - case GOSSIP_ACTION_TRAIN: - pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); - break; - //Learn Armor/Weapon - case GOSSIP_ACTION_INFO_DEF + 1: - if (!pPlayer->HasSpell(S_ARMOR)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_ARMOR, true); - //_Creature->CastSpell(pPlayer, S_REP_ARMOR, true); - } - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - if (!pPlayer->HasSpell(S_WEAPON)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_WEAPON, true); - //_Creature->CastSpell(pPlayer, S_REP_WEAPON, true); - } - pPlayer->CLOSE_GOSSIP_MENU(); - break; - //Unlearn Armor/Weapon - case GOSSIP_ACTION_INFO_DEF + 3: - if (HasWeaponSub(pPlayer)) - { - //unknown textID (TALK_MUST_UNLEARN_WEAPON) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - } - else if (EquippedOk(pPlayer,S_UNLEARN_WEAPON)) - { - if (pPlayer->GetMoney() >= DoLowUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_WEAPON, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_WEAPON); - pPlayer->ModifyMoney(-DoLowUnlearnCost(pPlayer)); - pCreature->CastSpell(pPlayer, S_REP_ARMOR, true); - pPlayer->CLOSE_GOSSIP_MENU(); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } - else - { - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - } - break; - case GOSSIP_ACTION_INFO_DEF + 4: - if (EquippedOk(pPlayer,S_UNLEARN_ARMOR)) - { - if (pPlayer->GetMoney() >= DoLowUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_ARMOR, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_ARMOR); - pPlayer->ModifyMoney(-DoLowUnlearnCost(pPlayer)); - pCreature->CastSpell(pPlayer, S_REP_WEAPON, true); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - //Learn Hammer/Axe/Sword - case GOSSIP_ACTION_INFO_DEF + 5: - pPlayer->CastSpell(pPlayer, S_LEARN_HAMMER, true); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 6: - pPlayer->CastSpell(pPlayer, S_LEARN_AXE, true); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 7: - pPlayer->CastSpell(pPlayer, S_LEARN_SWORD, true); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - //Unlearn Hammer/Axe/Sword - case GOSSIP_ACTION_INFO_DEF + 8: - if (EquippedOk(pPlayer,S_UNLEARN_HAMMER)) - { - if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_HAMMER, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_HAMMER); - pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 9: - if (EquippedOk(pPlayer,S_UNLEARN_AXE)) - { - if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_AXE, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_AXE); - pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 10: - if (EquippedOk(pPlayer,S_UNLEARN_SWORD)) - { - if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_SWORD, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SWORD); - pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - } -} - -void SendConfirmLearn_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction) - { - uint32 eCreature = pCreature->GetEntry(); - switch(eCreature) - { - case 11191: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID (TALK_HAMMER_LEARN) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 11192: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID (TALK_AXE_LEARN) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 11193: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID (TALK_SWORD_LEARN) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - } - } -} - -void SendConfirmUnlearn_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction) - { - uint32 eCreature = pCreature->GetEntry(); - switch(eCreature) - { - case 11146: //Ironus Coldsteel - case 11178: //Borgosh Corebender - case 5164: //Grumnus Steelshaper - case 11177: //Okothos Ironrager - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(pPlayer),false); - //unknown textID (TALK_UNLEARN_AXEORWEAPON) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - - case 11191: - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false); - //unknown textID (TALK_HAMMER_UNLEARN) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 11192: - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false); - //unknown textID (TALK_AXE_UNLEARN) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 11193: - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false); - //unknown textID (TALK_SWORD_UNLEARN) - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - } - } -} - -bool GossipSelect_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch(uiSender) - { - case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/*bool QuestComplete_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, Quest const *_Quest) -{ - if ((_Quest->GetQuestId() == 5283) || (_Quest->GetQuestId() == 5301)) //armorsmith - pCreature->CastSpell(pPlayer, 17451, true); - - if ((_Quest->GetQuestId() == 5284) || (_Quest->GetQuestId() == 5302)) //weaponsmith - pCreature->CastSpell(pPlayer, 17452, true); - - return true; -}*/ - -/*### -# engineering trinkets -###*/ - -enum -{ - NPC_ZAP = 14742, - NPC_JHORDY = 14743, - NPC_KABLAM = 21493, - NPC_SMILES = 21494, - - SPELL_LEARN_TO_EVERLOOK = 23490, - SPELL_LEARN_TO_GADGET = 23491, - SPELL_LEARN_TO_AREA52 = 36956, - SPELL_LEARN_TO_TOSHLEY = 36957, - - SPELL_TO_EVERLOOK = 23486, - SPELL_TO_GADGET = 23489, - SPELL_TO_AREA52 = 36954, - SPELL_TO_TOSHLEY = 36955, - - ITEM_GNOMISH_CARD = 10790, - ITEM_GOBLIN_CARD = 10791 -}; - -#define GOSSIP_ITEM_ZAP "[PH] Unknown" -#define GOSSIP_ITEM_JHORDY "I must build a beacon for this marvelous device!" -#define GOSSIP_ITEM_KABLAM "[PH] Unknown" -#define GOSSIP_ITEM_SMILES "[PH] Unknown" - -bool GossipHello_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature) -{ - uint32 NpcTextId = 0; - std::string GossipItem; - bool CanLearn = false; - - if (pPlayer->HasSkill(SKILL_ENGINERING)) - { - switch(pCreature->GetEntry()) - { - case NPC_ZAP: - NpcTextId = 7249; - if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GOBLIN)) - { - if (!pPlayer->HasSpell(SPELL_TO_EVERLOOK)) - { - CanLearn = true; - GossipItem = GOSSIP_ITEM_ZAP; - } - else if (pPlayer->HasSpell(SPELL_TO_EVERLOOK)) - NpcTextId = 0; - } - break; - case NPC_JHORDY: - NpcTextId = 7251; - if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GNOMISH)) - { - if (!pPlayer->HasSpell(SPELL_TO_GADGET)) - { - CanLearn = true; - GossipItem = GOSSIP_ITEM_JHORDY; - } - else if (pPlayer->HasSpell(SPELL_TO_GADGET)) - NpcTextId = 7252; - } - break; - case NPC_KABLAM: - NpcTextId = 10365; - if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GOBLIN)) - { - if (!pPlayer->HasSpell(SPELL_TO_AREA52)) - { - CanLearn = true; - GossipItem = GOSSIP_ITEM_KABLAM; - } - else if (pPlayer->HasSpell(SPELL_TO_AREA52)) - NpcTextId = 0; - } - break; - case NPC_SMILES: - NpcTextId = 10363; - if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GNOMISH)) - { - if (!pPlayer->HasSpell(SPELL_TO_TOSHLEY)) - { - CanLearn = true; - GossipItem = GOSSIP_ITEM_SMILES; - } - else if (pPlayer->HasSpell(SPELL_TO_TOSHLEY)) - NpcTextId = 0; - } - break; - } - } - - if (CanLearn) - { - if (pPlayer->HasItemCount(ITEM_GOBLIN_CARD,1) || pPlayer->HasItemCount(ITEM_GNOMISH_CARD,1)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GossipItem, pCreature->GetEntry(), GOSSIP_ACTION_INFO_DEF+1); - } - - pPlayer->SEND_GOSSIP_MENU(NpcTextId ? NpcTextId : pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -bool GossipSelect_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF+1) - pPlayer->CLOSE_GOSSIP_MENU(); - - if (uiSender != pCreature->GetEntry()) - return true; - - switch(uiSender) - { - case NPC_ZAP: - pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_EVERLOOK, false); - break; - case NPC_JHORDY: - pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_GADGET, false); - break; - case NPC_KABLAM: - pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_AREA52, false); - break; - case NPC_SMILES: - pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_TOSHLEY, false); - break; - } - - return true; -} - -/*### -# start menues leatherworking -###*/ - -bool GossipHello_npc_prof_leather(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - if (pCreature->isVendor()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - if (pCreature->isTrainer()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - - uint32 eCreature = pCreature->GetEntry(); - - if (pPlayer->HasSkill(SKILL_LEATHERWORKING) && pPlayer->GetBaseSkillValue(SKILL_LEATHERWORKING)>=250 && pPlayer->getLevel() > 49) - { - switch (eCreature) - { - case 7866: //Peter Galen - case 7867: //Thorkaf Dragoneye - if (pPlayer->HasSpell(S_DRAGON)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1); - break; - case 7868: //Sarah Tanner - case 7869: //Brumn Winterhoof - if (pPlayer->HasSpell(S_ELEMENTAL)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2); - break; - case 7870: //Caryssia Moonhunter - case 7871: //Se'Jib - if (pPlayer->HasSpell(S_TRIBAL)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); - break; - } - } - - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -void SendActionMenu_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch(uiAction) - { - case GOSSIP_ACTION_TRADE: - pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); - break; - case GOSSIP_ACTION_TRAIN: - pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); - break; - //Unlearn Leather - case GOSSIP_ACTION_INFO_DEF + 1: - if (EquippedOk(pPlayer,S_UNLEARN_DRAGON)) - { - if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_DRAGON, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_DRAGON); - pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - if (EquippedOk(pPlayer,S_UNLEARN_ELEMENTAL)) - { - if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_ELEMENTAL, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_ELEMENTAL); - pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - if (EquippedOk(pPlayer,S_UNLEARN_TRIBAL)) - { - if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_TRIBAL, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_TRIBAL); - pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - } -} - -void SendConfirmUnlearn_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction) - { - uint32 eCreature = pCreature->GetEntry(); - switch(eCreature) - { - case 7866: //Peter Galen - case 7867: //Thorkaf Dragoneye - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 7868: //Sarah Tanner - case 7869: //Brumn Winterhoof - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 7870: //Caryssia Moonhunter - case 7871: //Se'Jib - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - } - } -} - -bool GossipSelect_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch(uiSender) - { - case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_leather(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_leather(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_leather(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/*### -# start menues tailoring -###*/ - -bool HasTailorSpell(Player* pPlayer) -{ - if (pPlayer->HasSpell(S_MOONCLOTH) || pPlayer->HasSpell(S_SHADOWEAVE) || pPlayer->HasSpell(S_SPELLFIRE)) - return true; - return false; -} - -bool GossipHello_npc_prof_tailor(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - if (pCreature->isVendor()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - if (pCreature->isTrainer()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - - uint32 eCreature = pCreature->GetEntry(); - //TAILORING SPEC - if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING)>=350 && pPlayer->getLevel() > 59) - { - if (pPlayer->GetQuestRewardStatus(10831) || pPlayer->GetQuestRewardStatus(10832) || pPlayer->GetQuestRewardStatus(10833)) - { - switch (eCreature) - { - case 22213: //Gidge Spellweaver - if (!HasTailorSpell(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1); - if (pPlayer->HasSpell(S_SPELLFIRE)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); - break; - case 22208: //Nasmara Moonsong - if (!HasTailorSpell(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2); - if (pPlayer->HasSpell(S_MOONCLOTH)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); - break; - case 22212: //Andrion Darkspinner - if (!HasTailorSpell(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3); - if (pPlayer->HasSpell(S_SHADOWEAVE)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6); - break; - } - } - } - - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -void SendActionMenu_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch(uiAction) - { - case GOSSIP_ACTION_TRADE: - pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); - break; - case GOSSIP_ACTION_TRAIN: - pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); - break; - //Learn Tailor - case GOSSIP_ACTION_INFO_DEF + 1: - if (!pPlayer->HasSpell(S_SPELLFIRE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_SPELLFIRE, true); - pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - if (!pPlayer->HasSpell(S_MOONCLOTH) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_MOONCLOTH, true); - pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - if (!pPlayer->HasSpell(S_SHADOWEAVE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_LEARN_SHADOWEAVE, true); - pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - //Unlearn Tailor - case GOSSIP_ACTION_INFO_DEF + 4: - if (EquippedOk(pPlayer,S_UNLEARN_SPELLFIRE)) - { - if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_SPELLFIRE, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SPELLFIRE); - pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 5: - if (EquippedOk(pPlayer,S_UNLEARN_MOONCLOTH)) - { - if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_MOONCLOTH, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_MOONCLOTH); - pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - case GOSSIP_ACTION_INFO_DEF + 6: - if (EquippedOk(pPlayer,S_UNLEARN_SHADOWEAVE)) - { - if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) - { - pPlayer->CastSpell(pPlayer, S_UNLEARN_SHADOWEAVE, true); - ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SHADOWEAVE); - pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); - } else - pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); - } else - pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); - pPlayer->CLOSE_GOSSIP_MENU(); - break; - } -} - -void SendConfirmLearn_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction) - { - uint32 eCreature = pCreature->GetEntry(); - switch(eCreature) - { - case 22213: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 22208: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 22212: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, uiAction); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - } - } -} - -void SendConfirmUnlearn_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction) - { - uint32 eCreature = pCreature->GetEntry(); - switch(eCreature) - { - case 22213: //Gidge Spellweaver - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 22208: //Nasmara Moonsong - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - case 22212: //Andrion Darkspinner - pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, uiAction,BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false); - //unknown textID () - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - break; - } - } -} - -bool GossipSelect_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch(uiSender) - { - case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_tailor(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_tailor(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_tailor(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_tailor(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/*### -# start menues for GO (engineering and leatherworking) -###*/ - -/*bool GOHello_go_soothsaying_for_dummies(Player* pPlayer, GameObject* pGo) -{ - pPlayer->PlayerTalkClass->GetGossipMenu()->AddMenuItem(0,GOSSIP_LEARN_DRAGON, GOSSIP_SENDER_INFO, GOSSIP_ACTION_INFO_DEF, "", 0); - - pPlayer->SEND_GOSSIP_MENU(5584, pGo->GetGUID()); - - return true; -}*/ - -/*### -# -###*/ - -void AddSC_npc_professions() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="npc_prof_alchemy"; - newscript->pGossipHello = &GossipHello_npc_prof_alchemy; - newscript->pGossipSelect = &GossipSelect_npc_prof_alchemy; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_prof_blacksmith"; - newscript->pGossipHello = &GossipHello_npc_prof_blacksmith; - newscript->pGossipSelect = &GossipSelect_npc_prof_blacksmith; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "npc_engineering_tele_trinket"; - newscript->pGossipHello = &GossipHello_npc_engineering_tele_trinket; - newscript->pGossipSelect = &GossipSelect_npc_engineering_tele_trinket; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_prof_leather"; - newscript->pGossipHello = &GossipHello_npc_prof_leather; - newscript->pGossipSelect = &GossipSelect_npc_prof_leather; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_prof_tailor"; - newscript->pGossipHello = &GossipHello_npc_prof_tailor; - newscript->pGossipSelect = &GossipSelect_npc_prof_tailor; - newscript->RegisterSelf(); - - /*newscript = new Script; - newscript->Name="go_soothsaying_for_dummies"; - newscript->pGOHello = &GOHello_go_soothsaying_for_dummies; - //newscript->pGossipSelect = &GossipSelect_go_soothsaying_for_dummies; - newscript->RegisterSelf();*/ -} - diff --git a/src/bindings/scripts/scripts/npc/npc_taxi.cpp b/src/bindings/scripts/scripts/npc/npc_taxi.cpp deleted file mode 100644 index 161b663fbb1..00000000000 --- a/src/bindings/scripts/scripts/npc/npc_taxi.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Npc_Taxi -SD%Complete: 0% -SDComment: To be used for taxi NPCs that are located globally. -SDCategory: NPCs -EndScriptData -*/ - -#include "precompiled.h" - -bool GossipHello_npc_taxi(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - - switch(pCreature->GetEntry()) { - case 17435: // Azuremyst Isle - Susurrus - if (pPlayer->HasItemCount(23843,1,true)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I am ready.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - break; - case 20903: // Netherstorm - Protectorate Nether Drake - if (pPlayer->GetQuestStatus(10438) == QUEST_STATUS_INCOMPLETE && pPlayer->HasItemCount(29778,1)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I'm ready to fly! Take me up, dragon!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - break; - case 18725: // Old Hillsbrad Foothills - Brazen - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I am ready to go to Durnholde Keep.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - break; - case 29154: // Stormwind City - Thargold Ironwing - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I'd like to take a flight around Stormwind Harbor.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - break; - case 19409: // Hellfire Peninsula - Wing Commander Dabir'ee - //Mission: The Murketh and Shaadraz Gateways - if (pPlayer->GetQuestStatus(10146) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Murketh and Shaadraz Gateways", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - - //Shatter Point - if (!pPlayer->GetQuestRewardStatus(10340)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Shatter Point", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - break; - case 20235: // Hellfire Peninsula - Gryphoneer Windbellow - //Mission: The Abyssal Shelf || Return to the Abyssal Shelf - if (pPlayer->GetQuestStatus(10163) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(10346) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to The Abyssal Shelf", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - - //Go to the Front - if (pPlayer->GetQuestStatus(10382) != QUEST_STATUS_NONE && !pPlayer->GetQuestRewardStatus(10382)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Honor Point", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - break; - case 19401: // Hellfire Peninsula - Wing Commander Brack - //Mission: The Murketh and Shaadraz Gateways - if (pPlayer->GetQuestStatus(10129) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Murketh and Shaadraz Gateways", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - - //Mission: The Abyssal Shelf || Return to the Abyssal Shelf - if (pPlayer->GetQuestStatus(10162) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(10347) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to The Abyssal Shelf", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - - //Spinebreaker Post - if (pPlayer->GetQuestStatus(10242) == QUEST_STATUS_COMPLETE && !pPlayer->GetQuestRewardStatus(10242)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Spinebreaker Post", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - break; - case 23413: // Blade's Edge Mountains - Skyguard Handler Irena - if (pPlayer->GetReputationRank(1031) >= REP_HONORED) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Skettis please", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - break; - case 25059: // Isle of Quel'Danas - Ayren Cloudbreaker - if (pPlayer->GetQuestStatus(11532) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(11533) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Speaking of uiAction, I've been ordered to undertake an air strike.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - - if (pPlayer->GetQuestStatus(11542) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(11543) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I need to intercept the Dawnblade reinforcements.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); - break; - case 25236: // Isle of Quel'Danas - Unrestrained Dragonhawk - if (pPlayer->GetQuestStatus(11542) == QUEST_STATUS_COMPLETE || pPlayer->GetQuestStatus(11543) == QUEST_STATUS_COMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14); - break; - case 20162: // Netherstorm - Veronia - //Behind Enemy Lines - if (pPlayer->GetQuestStatus(10652) && !pPlayer->GetQuestRewardStatus(10652)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Manaforge Coruu please", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15); - break; - case 23415: // Terokkar Forest - Skyguard Handler Deesak - if (pPlayer->GetReputationRank(1031) >= REP_HONORED) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Ogri'la please", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 16); - break; - case 27575: // Dragonblight - Lord Afrasastrasz - // middle -> ground - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I would like to take a flight to the ground, Lord Of Afrasastrasz.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 17); - // middle -> top - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "My Lord, I must go to the upper floor of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 18); - break; - case 26443: // Dragonblight - Tariolstrasz //need to check if quests are required before gossip available (12123, 12124) - // ground -> top - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "My Lord, I must go to the upper floor of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 19); - // ground -> middle - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Can you spare a drake to travel to Lord Of Afrasastrasz, in the middle of the temple?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 20); - break; - case 26949: // Dragonblight - Torastrasza - // top -> middle - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I would like to see Lord Of Afrasastrasz, in the middle of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 21); - // top -> ground - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Yes, Please. I would like to return to the ground floor of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22); - break; - case 23816: // Howling Fjord - Bat Handler Camille - if (!pPlayer->GetQuestRewardStatus(11229)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I need to fly to the Windrunner Official business!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 23); - if (pPlayer->GetQuestStatus(11170) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I need to commandeer a riding bat for special assignment for us.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 24); - break; - case 23704: // Dustwallow Marsh - Cassa Crimsonwing - if (pPlayer->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT,"",GOSSIP_SENDER_MAIN,GOSSIP_ACTION_INFO_DEF+25); - break; - } - - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -bool GossipSelect_npc_taxi(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch(uiAction) { - case GOSSIP_ACTION_INFO_DEF: - //spellId is correct, however it gives flight a somewhat funny effect //TaxiPath 506. - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,32474,true); - break; - case GOSSIP_ACTION_INFO_DEF + 1: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(627); //TaxiPath 627 (possibly 627+628(152->153->154->155)) - break; - case GOSSIP_ACTION_INFO_DEF + 2: - if (!pPlayer->HasItemCount(25853,1)) { - pPlayer->SEND_GOSSIP_MENU(9780, pCreature->GetGUID()); - } else { - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(534); //TaxiPath 534 - } - break; - case GOSSIP_ACTION_INFO_DEF + 3: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->GetSession()->SendDoFlight(1149, 1041); - break; - case GOSSIP_ACTION_INFO_DEF + 4: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,33768,true); //TaxiPath 585 (Gateways Murket and Shaadraz) - break; - case GOSSIP_ACTION_INFO_DEF + 5: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,35069,true); //TaxiPath 612 (Taxi - Hellfire Peninsula - Expedition Point to Shatter Point) - break; - case GOSSIP_ACTION_INFO_DEF + 6: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,33899,true); //TaxiPath 589 (Aerial Assault Flight (Alliance)) - break; - case GOSSIP_ACTION_INFO_DEF + 7: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,35065,true); //TaxiPath 607 (Taxi - Hellfire Peninsula - Shatter Point to Beach Head) - break; - case GOSSIP_ACTION_INFO_DEF + 8: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,33659,true); //TaxiPath 584 (Gateways Murket and Shaadraz) - break; - case GOSSIP_ACTION_INFO_DEF + 9: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,33825,true); //TaxiPath 587 (Aerial Assault Flight (Horde)) - break; - case GOSSIP_ACTION_INFO_DEF + 10: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,34578,true); //TaxiPath 604 (Taxi - Reaver's Fall to Spinebreaker Ridge) - break; - case GOSSIP_ACTION_INFO_DEF + 11: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,41278,true); //TaxiPath 706 - break; - case GOSSIP_ACTION_INFO_DEF + 12: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,45071,true); //TaxiPath 779 - break; - case GOSSIP_ACTION_INFO_DEF + 13: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,45113,true); //TaxiPath 784 - break; - case GOSSIP_ACTION_INFO_DEF + 14: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,45353,true); //TaxiPath 788 - break; - case GOSSIP_ACTION_INFO_DEF + 15: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,34905,true); //TaxiPath 606 - break; - case GOSSIP_ACTION_INFO_DEF + 16: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,41279,true); //TaxiPath 705 (Taxi - Skettis to Skyguard Outpost) - break; - case GOSSIP_ACTION_INFO_DEF + 17: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(882); - break; - case GOSSIP_ACTION_INFO_DEF + 18: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(881); - break; - case GOSSIP_ACTION_INFO_DEF + 19: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(878); - break; - case GOSSIP_ACTION_INFO_DEF + 20: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(883); - break; - case GOSSIP_ACTION_INFO_DEF + 21: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(880); - break; - case GOSSIP_ACTION_INFO_DEF + 22: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(879); - break; - case GOSSIP_ACTION_INFO_DEF + 23: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,43074,true); //TaxiPath 736 - break; - case GOSSIP_ACTION_INFO_DEF + 24: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->ActivateTaxiPathTo(738); - break; - case GOSSIP_ACTION_INFO_DEF + 25: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,42295,true); - break; - } - - return true; -} - -void AddSC_npc_taxi() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="npc_taxi"; - newscript->pGossipHello = &GossipHello_npc_taxi; - newscript->pGossipSelect = &GossipSelect_npc_taxi; - newscript->RegisterSelf(); -} diff --git a/src/bindings/scripts/scripts/npc/npcs_special.cpp b/src/bindings/scripts/scripts/npc/npcs_special.cpp deleted file mode 100644 index 64f89628528..00000000000 --- a/src/bindings/scripts/scripts/npc/npcs_special.cpp +++ /dev/null @@ -1,1965 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Npcs_Special -SD%Complete: 100 -SDComment: To be used for special NPCs that are located globally. -SDCategory: NPCs -EndScriptData -*/ - -/* ContentData -npc_air_force_bots 80% support for misc (invisible) guard bots in areas where player allowed to fly. Summon guards after a preset time if tagged by spell -npc_chicken_cluck 100% support for quest 3861 (Cluck!) -npc_dancing_flames 100% midsummer event NPC -npc_guardian 100% guardianAI used to prevent players from accessing off-limits areas. Not in use by SD2 -npc_garments_of_quests 80% NPC's related to all Garments of-quests 5621, 5624, 5625, 5648, 565 -npc_injured_patient 100% patients for triage-quests (6622 and 6624) -npc_doctor 100% Gustaf Vanhowzen and Gregory Victor, quest 6622 and 6624 (Triage) -npc_kingdom_of_dalaran_quests Misc NPC's gossip option related to quests 12791, 12794 and 12796 -npc_mount_vendor 100% Regular mount vendors all over the world. Display gossip if player doesn't meet the requirements to buy -npc_rogue_trainer 80% Scripted trainers, so they are able to offer item 17126 for class quest 6681 -npc_sayge 100% Darkmoon event fortune teller, buff player based on answers given -npc_snake_trap_serpents 80% AI for snakes that summoned by Snake Trap -EndContentData */ - -#include "precompiled.h" -#include "../npc/npc_escortAI.h" -#include "ObjectMgr.h" - -/*######## -# npc_air_force_bots -#########*/ - -enum SpawnType -{ - SPAWNTYPE_TRIPWIRE_ROOFTOP, // no warning, summon Creature at smaller range - SPAWNTYPE_ALARMBOT, // cast guards mark and summon npc - if player shows up with that buff duration < 5 seconds attack -}; - -struct SpawnAssociation -{ - uint32 m_uiThisCreatureEntry; - uint32 m_uiSpawnedCreatureEntry; - SpawnType m_SpawnType; -}; - -enum -{ - SPELL_GUARDS_MARK = 38067, - AURA_DURATION_TIME_LEFT = 5000 -}; - -const float RANGE_TRIPWIRE = 15.0f; -const float RANGE_GUARDS_MARK = 50.0f; - -SpawnAssociation m_aSpawnAssociations[] = -{ - {2614, 15241, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Alliance) - {2615, 15242, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Horde) - {21974, 21976, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Area 52) - {21993, 15242, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Horde - Bat Rider) - {21996, 15241, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Alliance - Gryphon) - {21997, 21976, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Goblin - Area 52 - Zeppelin) - {21999, 15241, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Alliance) - {22001, 15242, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Horde) - {22002, 15242, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Ground (Horde) - {22003, 15241, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Ground (Alliance) - {22063, 21976, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Goblin - Area 52) - {22065, 22064, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Ethereal - Stormspire) - {22066, 22067, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Scryer - Dragonhawk) - {22068, 22064, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Ethereal - Stormspire) - {22069, 22064, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Stormspire) - {22070, 22067, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Scryer) - {22071, 22067, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Scryer) - {22078, 22077, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Aldor) - {22079, 22077, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Aldor - Gryphon) - {22080, 22077, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Aldor) - {22086, 22085, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Sporeggar) - {22087, 22085, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Sporeggar - Spore Bat) - {22088, 22085, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Sporeggar) - {22090, 22089, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Toshley's Station - Flying Machine) - {22124, 22122, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Cenarion) - {22125, 22122, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Cenarion - Stormcrow) - {22126, 22122, SPAWNTYPE_ALARMBOT} //Air Force Trip Wire - Rooftop (Cenarion Expedition) -}; - -struct TRINITY_DLL_DECL npc_air_force_botsAI : public ScriptedAI -{ - npc_air_force_botsAI(Creature* pCreature) : ScriptedAI(pCreature) - { - m_pSpawnAssoc = NULL; - m_uiSpawnedGUID = 0; - - // find the correct spawnhandling - static uint32 uiEntryCount = sizeof(m_aSpawnAssociations)/sizeof(SpawnAssociation); - - for (uint8 i=0; iGetEntry()) - { - m_pSpawnAssoc = &m_aSpawnAssociations[i]; - break; - } - } - - if (!m_pSpawnAssoc) - error_db_log("TCSR: Creature template entry %u has ScriptName npc_air_force_bots, but it's not handled by that script", pCreature->GetEntry()); - else - { - CreatureInfo const* spawnedTemplate = GetCreatureTemplateStore(m_pSpawnAssoc->m_uiSpawnedCreatureEntry); - - if (!spawnedTemplate) - { - m_pSpawnAssoc = NULL; - error_db_log("TCSR: Creature template entry %u does not exist in DB, which is required by npc_air_force_bots", m_pSpawnAssoc->m_uiSpawnedCreatureEntry); - return; - } - } - } - - SpawnAssociation* m_pSpawnAssoc; - uint64 m_uiSpawnedGUID; - - void Reset() { } - - Creature* SummonGuard() - { - Creature* pSummoned = m_creature->SummonCreature(m_pSpawnAssoc->m_uiSpawnedCreatureEntry, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); - - if (pSummoned) - m_uiSpawnedGUID = pSummoned->GetGUID(); - else - { - error_db_log("TCSR: npc_air_force_bots: wasn't able to spawn Creature %u", m_pSpawnAssoc->m_uiSpawnedCreatureEntry); - m_pSpawnAssoc = NULL; - } - - return pSummoned; - } - - Creature* GetSummonedGuard() - { - Creature* pCreature = Unit::GetCreature(*m_creature, m_uiSpawnedGUID); - - if (pCreature && pCreature->isAlive()) - return pCreature; - - return NULL; - } - - void MoveInLineOfSight(Unit* pWho) - { - if (!m_pSpawnAssoc) - return; - - if (pWho->isTargetableForAttack() && m_creature->IsHostileTo(pWho)) - { - Player* pPlayerTarget = pWho->GetTypeId() == TYPEID_PLAYER ? CAST_PLR(pWho) : NULL; - - // airforce guards only spawn for players - if (!pPlayerTarget) - return; - - Creature* pLastSpawnedGuard = m_uiSpawnedGUID == 0 ? NULL : GetSummonedGuard(); - - // prevent calling Unit::GetUnit at next MoveInLineOfSight call - speedup - if (!pLastSpawnedGuard) - m_uiSpawnedGUID = 0; - - switch(m_pSpawnAssoc->m_SpawnType) - { - case SPAWNTYPE_ALARMBOT: - { - if (!pWho->IsWithinDistInMap(m_creature, RANGE_GUARDS_MARK)) - return; - - Aura* pMarkAura = pWho->GetAura(SPELL_GUARDS_MARK, 0); - if (pMarkAura) - { - // the target wasn't able to move out of our range within 25 seconds - if (!pLastSpawnedGuard) - { - pLastSpawnedGuard = SummonGuard(); - - if (!pLastSpawnedGuard) - return; - } - - if (pMarkAura->GetAuraDuration() < AURA_DURATION_TIME_LEFT) - { - if (!pLastSpawnedGuard->getVictim()) - pLastSpawnedGuard->AI()->AttackStart(pWho); - } - } - else - { - if (!pLastSpawnedGuard) - pLastSpawnedGuard = SummonGuard(); - - if (!pLastSpawnedGuard) - return; - - pLastSpawnedGuard->CastSpell(pWho, SPELL_GUARDS_MARK, true); - } - break; - } - case SPAWNTYPE_TRIPWIRE_ROOFTOP: - { - if (!pWho->IsWithinDistInMap(m_creature, RANGE_TRIPWIRE)) - return; - - if (!pLastSpawnedGuard) - pLastSpawnedGuard = SummonGuard(); - - if (!pLastSpawnedGuard) - return; - - // ROOFTOP only triggers if the player is on the ground - if (!pPlayerTarget->IsFlying()) - { - if (!pLastSpawnedGuard->getVictim()) - pLastSpawnedGuard->AI()->AttackStart(pWho); - } - break; - } - } - } - } -}; - -CreatureAI* GetAI_npc_air_force_bots(Creature* pCreature) -{ - return new npc_air_force_botsAI(pCreature); -} - -/*######## -# npc_chicken_cluck -#########*/ - -#define EMOTE_HELLO -1070004 -#define EMOTE_CLUCK_TEXT -1070006 - -#define QUEST_CLUCK 3861 -#define FACTION_FRIENDLY 35 -#define FACTION_CHICKEN 31 - -struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI -{ - npc_chicken_cluckAI(Creature *c) : ScriptedAI(c) {} - - uint32 ResetFlagTimer; - - void Reset() - { - ResetFlagTimer = 120000; - m_creature->setFaction(FACTION_CHICKEN); - m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - } - - void EnterCombat(Unit *who) {} - - void UpdateAI(const uint32 diff) - { - // Reset flags after a certain time has passed so that the next player has to start the 'event' again - if (m_creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) - { - if (ResetFlagTimer < diff) - { - EnterEvadeMode(); - return; - }else ResetFlagTimer -= diff; - } - - if (UpdateVictim()) - DoMeleeAttackIfReady(); - } - - void ReceiveEmote(Player* pPlayer, uint32 emote) - { - switch(emote) - { - case TEXTEMOTE_CHICKEN: - if (pPlayer->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand()%30 == 1) - { - m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - m_creature->setFaction(FACTION_FRIENDLY); - DoScriptText(EMOTE_HELLO, m_creature); - } - break; - case TEXTEMOTE_CHEER: - if (pPlayer->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_COMPLETE) - { - m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); - m_creature->setFaction(FACTION_FRIENDLY); - DoScriptText(EMOTE_CLUCK_TEXT, m_creature); - } - break; - } - } -}; - -CreatureAI* GetAI_npc_chicken_cluck(Creature* pCreature) -{ - return new npc_chicken_cluckAI(pCreature); -} - -bool QuestAccept_npc_chicken_cluck(Player* pPlayer, Creature* pCreature, const Quest *_Quest) -{ - if (_Quest->GetQuestId() == QUEST_CLUCK) - CAST_AI(npc_chicken_cluckAI, pCreature->AI())->Reset(); - - return true; -} - -bool QuestComplete_npc_chicken_cluck(Player* pPlayer, Creature* pCreature, const Quest *_Quest) -{ - if (_Quest->GetQuestId() == QUEST_CLUCK) - CAST_AI(npc_chicken_cluckAI, pCreature->AI())->Reset(); - - return true; -} - -/*###### -## npc_dancing_flames -######*/ - -#define SPELL_BRAZIER 45423 -#define SPELL_SEDUCTION 47057 -#define SPELL_FIERY_AURA 45427 - -struct TRINITY_DLL_DECL npc_dancing_flamesAI : public ScriptedAI -{ - npc_dancing_flamesAI(Creature *c) : ScriptedAI(c) {} - - bool active; - uint32 can_iteract; - - void Reset() - { - active = true; - can_iteract = 3500; - DoCast(m_creature,SPELL_BRAZIER,true); - DoCast(m_creature,SPELL_FIERY_AURA,false); - float x, y, z; - m_creature->GetPosition(x,y,z); - m_creature->Relocate(x,y,z + 0.94f); - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); - m_creature->HandleEmoteCommand(EMOTE_ONESHOT_DANCE); - WorldPacket data; //send update position to client - m_creature->BuildHeartBeatMsg(&data); - m_creature->SendMessageToSet(&data,true); - } - - void UpdateAI(const uint32 diff) - { - if (!active) - { - if (can_iteract <= diff){ - active = true; - can_iteract = 3500; - m_creature->HandleEmoteCommand(EMOTE_ONESHOT_DANCE); - }else can_iteract -= diff; - } - } - - void EnterCombat(Unit* who){} - - void ReceiveEmote(Player* pPlayer, uint32 emote) - { - if (m_creature->IsWithinLOS(pPlayer->GetPositionX(),pPlayer->GetPositionY(),pPlayer->GetPositionZ()) && m_creature->IsWithinDistInMap(pPlayer,30.0f)) - { - m_creature->SetInFront(pPlayer); - active = false; - - WorldPacket data; - m_creature->BuildHeartBeatMsg(&data); - m_creature->SendMessageToSet(&data,true); - switch(emote) - { - case TEXTEMOTE_KISS: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_SHY); break; - case TEXTEMOTE_WAVE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_WAVE); break; - case TEXTEMOTE_BOW: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_BOW); break; - case TEXTEMOTE_JOKE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); break; - case TEXTEMOTE_DANCE: - { - if (!pPlayer->HasAura(SPELL_SEDUCTION)) - m_creature->CastSpell(pPlayer,SPELL_SEDUCTION,true); - } - break; - } - } - } -}; - -CreatureAI* GetAI_npc_dancing_flames(Creature* pCreature) -{ - return new npc_dancing_flamesAI(pCreature); -} - -/*###### -## Triage quest -######*/ - -#define SAY_DOC1 -1000201 -#define SAY_DOC2 -1000202 -#define SAY_DOC3 -1000203 - -#define DOCTOR_ALLIANCE 12939 -#define DOCTOR_HORDE 12920 -#define ALLIANCE_COORDS 7 -#define HORDE_COORDS 6 - -struct Location -{ - float x, y, z, o; -}; - -static Location AllianceCoords[]= -{ - {-3757.38, -4533.05, 14.16, 3.62}, // Top-far-right bunk as seen from entrance - {-3754.36, -4539.13, 14.16, 5.13}, // Top-far-left bunk - {-3749.54, -4540.25, 14.28, 3.34}, // Far-right bunk - {-3742.10, -4536.85, 14.28, 3.64}, // Right bunk near entrance - {-3755.89, -4529.07, 14.05, 0.57}, // Far-left bunk - {-3749.51, -4527.08, 14.07, 5.26}, // Mid-left bunk - {-3746.37, -4525.35, 14.16, 5.22}, // Left bunk near entrance -}; - -//alliance run to where -#define A_RUNTOX -3742.96 -#define A_RUNTOY -4531.52 -#define A_RUNTOZ 11.91 - -static Location HordeCoords[]= -{ - {-1013.75, -3492.59, 62.62, 4.34}, // Left, Behind - {-1017.72, -3490.92, 62.62, 4.34}, // Right, Behind - {-1015.77, -3497.15, 62.82, 4.34}, // Left, Mid - {-1019.51, -3495.49, 62.82, 4.34}, // Right, Mid - {-1017.25, -3500.85, 62.98, 4.34}, // Left, front - {-1020.95, -3499.21, 62.98, 4.34} // Right, Front -}; - -//horde run to where -#define H_RUNTOX -1016.44 -#define H_RUNTOY -3508.48 -#define H_RUNTOZ 62.96 - -const uint32 AllianceSoldierId[3] = -{ - 12938, // 12938 Injured Alliance Soldier - 12936, // 12936 Badly injured Alliance Soldier - 12937 // 12937 Critically injured Alliance Soldier -}; - -const uint32 HordeSoldierId[3] = -{ - 12923, //12923 Injured Soldier - 12924, //12924 Badly injured Soldier - 12925 //12925 Critically injured Soldier -}; - -/*###### -## npc_doctor (handles both Gustaf Vanhowzen and Gregory Victor) -######*/ - -struct TRINITY_DLL_DECL npc_doctorAI : public ScriptedAI -{ - npc_doctorAI(Creature *c) : ScriptedAI(c) {} - - uint64 PlayerGUID; - - uint32 SummonPatient_Timer; - uint32 SummonPatientCount; - uint32 PatientDiedCount; - uint32 PatientSavedCount; - - bool Event; - - std::list Patients; - std::vector Coordinates; - - void Reset() - { - PlayerGUID = 0; - - SummonPatient_Timer = 10000; - SummonPatientCount = 0; - PatientDiedCount = 0; - PatientSavedCount = 0; - - Patients.clear(); - Coordinates.clear(); - - Event = false; - - m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - } - - void BeginEvent(Player* pPlayer); - void PatientDied(Location* Point); - void PatientSaved(Creature* soldier, Player* pPlayer, Location* Point); - void UpdateAI(const uint32 diff); - - void EnterCombat(Unit* who){} -}; - -/*##### -## npc_injured_patient (handles all the patients, no matter Horde or Alliance) -#####*/ - -struct TRINITY_DLL_DECL npc_injured_patientAI : public ScriptedAI -{ - npc_injured_patientAI(Creature *c) : ScriptedAI(c) {} - - uint64 Doctorguid; - Location* Coord; - - void Reset() - { - Doctorguid = 0; - Coord = NULL; - - //no select - m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - - //no regen health - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); - - //to make them lay with face down - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD); - - uint32 mobId = m_creature->GetEntry(); - - switch (mobId) - { //lower max health - case 12923: - case 12938: //Injured Soldier - m_creature->SetHealth(uint32(m_creature->GetMaxHealth()*.75)); - break; - case 12924: - case 12936: //Badly injured Soldier - m_creature->SetHealth(uint32(m_creature->GetMaxHealth()*.50)); - break; - case 12925: - case 12937: //Critically injured Soldier - m_creature->SetHealth(uint32(m_creature->GetMaxHealth()*.25)); - break; - } - } - - void EnterCombat(Unit* who){} - - void SpellHit(Unit *caster, const SpellEntry *spell) - { - if (caster->GetTypeId() == TYPEID_PLAYER && m_creature->isAlive() && spell->Id == 20804) - { - if ((CAST_PLR(caster)->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (CAST_PLR(caster)->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)) - { - if (Doctorguid) - { - if (Creature* Doctor = Unit::GetCreature(*m_creature, Doctorguid)) - CAST_AI(npc_doctorAI, Doctor->AI())->PatientSaved(m_creature, CAST_PLR(caster), Coord); - } - } - - //make not selectable - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - - //regen health - m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); - - //stand up - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_STAND); - - switch(rand()%3) - { - case 0: DoScriptText(SAY_DOC1,m_creature); break; - case 1: DoScriptText(SAY_DOC2,m_creature); break; - case 2: DoScriptText(SAY_DOC3,m_creature); break; - } - - uint32 mobId = m_creature->GetEntry(); - m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - - switch (mobId) - { - case 12923: - case 12924: - case 12925: - m_creature->GetMotionMaster()->MovePoint(0, H_RUNTOX, H_RUNTOY, H_RUNTOZ); - break; - case 12936: - case 12937: - case 12938: - m_creature->GetMotionMaster()->MovePoint(0, A_RUNTOX, A_RUNTOY, A_RUNTOZ); - break; - } - } - } - - void UpdateAI(const uint32 diff) - { - //lower HP on every world tick makes it a useful counter, not officlone though - if (m_creature->isAlive() && m_creature->GetHealth() > 6) - { - m_creature->SetHealth(uint32(m_creature->GetHealth()-5)); - } - - if (m_creature->isAlive() && m_creature->GetHealth() <= 6) - { - m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - m_creature->setDeathState(JUST_DIED); - m_creature->SetFlag(UNIT_DYNAMIC_FLAGS, 32); - - if (Doctorguid) - { - if (Creature* Doctor = Unit::GetCreature((*m_creature), Doctorguid)) - CAST_AI(npc_doctorAI, Doctor->AI())->PatientDied(Coord); - } - } - } -}; - -CreatureAI* GetAI_npc_injured_patient(Creature* pCreature) -{ - return new npc_injured_patientAI (pCreature); -} - -/* -npc_doctor (continue) -*/ - -void npc_doctorAI::BeginEvent(Player* pPlayer) -{ - PlayerGUID = pPlayer->GetGUID(); - - SummonPatient_Timer = 10000; - SummonPatientCount = 0; - PatientDiedCount = 0; - PatientSavedCount = 0; - - switch(m_creature->GetEntry()) - { - case DOCTOR_ALLIANCE: - for(uint8 i = 0; i < ALLIANCE_COORDS; ++i) - Coordinates.push_back(&AllianceCoords[i]); - break; - case DOCTOR_HORDE: - for(uint8 i = 0; i < HORDE_COORDS; ++i) - Coordinates.push_back(&HordeCoords[i]); - break; - } - - Event = true; - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); -} - -void npc_doctorAI::PatientDied(Location* Point) -{ - Player* pPlayer = Unit::GetPlayer(PlayerGUID); - if (pPlayer && ((pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE))) - { - ++PatientDiedCount; - - if (PatientDiedCount > 5 && Event) - { - if (pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) - pPlayer->FailQuest(6624); - else if (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE) - pPlayer->FailQuest(6622); - - Reset(); - return; - } - - Coordinates.push_back(Point); - } - else - // If no player or player abandon quest in progress - Reset(); -} - -void npc_doctorAI::PatientSaved(Creature* soldier, Player* pPlayer, Location* Point) -{ - if (pPlayer && PlayerGUID == pPlayer->GetGUID()) - { - if ((pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)) - { - ++PatientSavedCount; - - if (PatientSavedCount == 15) - { - if (!Patients.empty()) - { - std::list::iterator itr; - for(itr = Patients.begin(); itr != Patients.end(); ++itr) - { - if (Creature* Patient = Unit::GetCreature((*m_creature), *itr)) - Patient->setDeathState(JUST_DIED); - } - } - - if (pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) - pPlayer->AreaExploredOrEventHappens(6624); - else if (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE) - pPlayer->AreaExploredOrEventHappens(6622); - - Reset(); - return; - } - - Coordinates.push_back(Point); - } - } -} - -void npc_doctorAI::UpdateAI(const uint32 diff) -{ - if (Event && SummonPatientCount >= 20) - { - Reset(); - return; - } - - if (Event) - { - if (SummonPatient_Timer < diff) - { - Creature* Patient = NULL; - Location* Point = NULL; - - if (Coordinates.empty()) - return; - - std::vector::iterator itr = Coordinates.begin()+rand()%Coordinates.size(); - uint32 patientEntry = 0; - - switch(m_creature->GetEntry()) - { - case DOCTOR_ALLIANCE: patientEntry = AllianceSoldierId[rand()%3]; break; - case DOCTOR_HORDE: patientEntry = HordeSoldierId[rand()%3]; break; - default: - error_log("TSCR: Invalid entry for Triage doctor. Please check your database"); - return; - } - - Point = *itr; - - Patient = m_creature->SummonCreature(patientEntry, Point->x, Point->y, Point->z, Point->o, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); - - if (Patient) - { - //303, this flag appear to be required for client side item->spell to work (TARGET_SINGLE_FRIEND) - Patient->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); - - Patients.push_back(Patient->GetGUID()); - CAST_AI(npc_injured_patientAI, Patient->AI())->Doctorguid = m_creature->GetGUID(); - - if (Point) - CAST_AI(npc_injured_patientAI, Patient->AI())->Coord = Point; - - Coordinates.erase(itr); - } - SummonPatient_Timer = 10000; - SummonPatientCount++; - }else SummonPatient_Timer -= diff; - } -} - -bool QuestAccept_npc_doctor(Player* pPlayer, Creature* pCreature, Quest const *quest) -{ - if ((quest->GetQuestId() == 6624) || (quest->GetQuestId() == 6622)) - CAST_AI(npc_doctorAI, pCreature->AI())->BeginEvent(pPlayer); - - return true; -} - -CreatureAI* GetAI_npc_doctor(Creature* pCreature) -{ - return new npc_doctorAI (pCreature); -} - -/*###### -## npc_garments_of_quests -######*/ - -//TODO: get text for each NPC - -enum -{ - SPELL_LESSER_HEAL_R2 = 2052, - SPELL_FORTITUDE_R1 = 1243, - - QUEST_MOON = 5621, - QUEST_LIGHT_1 = 5624, - QUEST_LIGHT_2 = 5625, - QUEST_SPIRIT = 5648, - QUEST_DARKNESS = 5650, - - ENTRY_SHAYA = 12429, - ENTRY_ROBERTS = 12423, - ENTRY_DOLF = 12427, - ENTRY_KORJA = 12430, - ENTRY_DG_KEL = 12428, - - SAY_COMMON_HEALED = -1000164, - SAY_DG_KEL_THANKS = -1000165, - SAY_DG_KEL_GOODBYE = -1000166, - SAY_ROBERTS_THANKS = -1000167, - SAY_ROBERTS_GOODBYE = -1000168, - SAY_KORJA_THANKS = -1000169, - SAY_KORJA_GOODBYE = -1000170, - SAY_DOLF_THANKS = -1000171, - SAY_DOLF_GOODBYE = -1000172, - SAY_SHAYA_THANKS = -1000173, - SAY_SHAYA_GOODBYE = -1000174, -}; - -struct TRINITY_DLL_DECL npc_garments_of_questsAI : public npc_escortAI -{ - npc_garments_of_questsAI(Creature *c) : npc_escortAI(c) {Reset();} - - uint64 caster; - - bool bIsHealed; - bool bCanRun; - - uint32 RunAwayTimer; - - void Reset() - { - caster = 0; - - bIsHealed = false; - bCanRun = false; - - RunAwayTimer = 5000; - - m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); - //expect database to have RegenHealth=0 - m_creature->SetHealth(int(m_creature->GetMaxHealth()*0.7)); - } - - void EnterCombat(Unit *who) {} - - void SpellHit(Unit* pCaster, const SpellEntry *Spell) - { - if (Spell->Id == SPELL_LESSER_HEAL_R2 || Spell->Id == SPELL_FORTITUDE_R1) - { - //not while in combat - if (m_creature->isInCombat()) - return; - - //nothing to be done now - if (bIsHealed && bCanRun) - return; - - if (pCaster->GetTypeId() == TYPEID_PLAYER) - { - switch(m_creature->GetEntry()) - { - case ENTRY_SHAYA: - if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_MOON) == QUEST_STATUS_INCOMPLETE) - { - if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) - { - DoScriptText(SAY_SHAYA_THANKS,m_creature,pCaster); - bCanRun = true; - } - else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) - { - caster = pCaster->GetGUID(); - m_creature->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); - bIsHealed = true; - } - } - break; - case ENTRY_ROBERTS: - if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_LIGHT_1) == QUEST_STATUS_INCOMPLETE) - { - if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) - { - DoScriptText(SAY_ROBERTS_THANKS,m_creature,pCaster); - bCanRun = true; - } - else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) - { - caster = pCaster->GetGUID(); - m_creature->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); - bIsHealed = true; - } - } - break; - case ENTRY_DOLF: - if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_LIGHT_2) == QUEST_STATUS_INCOMPLETE) - { - if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) - { - DoScriptText(SAY_DOLF_THANKS,m_creature,pCaster); - bCanRun = true; - } - else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) - { - caster = pCaster->GetGUID(); - m_creature->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); - bIsHealed = true; - } - } - break; - case ENTRY_KORJA: - if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_SPIRIT) == QUEST_STATUS_INCOMPLETE) - { - if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) - { - DoScriptText(SAY_KORJA_THANKS,m_creature,pCaster); - bCanRun = true; - } - else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) - { - caster = pCaster->GetGUID(); - m_creature->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); - bIsHealed = true; - } - } - break; - case ENTRY_DG_KEL: - if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_DARKNESS) == QUEST_STATUS_INCOMPLETE) - { - if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) - { - DoScriptText(SAY_DG_KEL_THANKS,m_creature,pCaster); - bCanRun = true; - } - else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) - { - caster = pCaster->GetGUID(); - m_creature->SetStandState(UNIT_STAND_STATE_STAND); - DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); - bIsHealed = true; - } - } - break; - } - - //give quest credit, not expect any special quest objectives - if (bCanRun) - CAST_PLR(pCaster)->TalkedToCreature(m_creature->GetEntry(),m_creature->GetGUID()); - } - } - } - - void WaypointReached(uint32 uiPoint) - { - } - - void UpdateAI(const uint32 diff) - { - if (bCanRun && !m_creature->isInCombat()) - { - if (RunAwayTimer <= diff) - { - if (Unit *pUnit = Unit::GetUnit(*m_creature,caster)) - { - switch(m_creature->GetEntry()) - { - case ENTRY_SHAYA: DoScriptText(SAY_SHAYA_GOODBYE,m_creature,pUnit); break; - case ENTRY_ROBERTS: DoScriptText(SAY_ROBERTS_GOODBYE,m_creature,pUnit); break; - case ENTRY_DOLF: DoScriptText(SAY_DOLF_GOODBYE,m_creature,pUnit); break; - case ENTRY_KORJA: DoScriptText(SAY_KORJA_GOODBYE,m_creature,pUnit); break; - case ENTRY_DG_KEL: DoScriptText(SAY_DG_KEL_GOODBYE,m_creature,pUnit); break; - } - - Start(false,true,true); - } - else - EnterEvadeMode(); //something went wrong - - RunAwayTimer = 30000; - }else RunAwayTimer -= diff; - } - - npc_escortAI::UpdateAI(diff); - } -}; - -CreatureAI* GetAI_npc_garments_of_quests(Creature* pCreature) -{ - npc_garments_of_questsAI* tempAI = new npc_garments_of_questsAI(pCreature); - - tempAI->FillPointMovementListForCreature(); - - return tempAI; -} - -/*###### -## npc_guardian -######*/ - -#define SPELL_DEATHTOUCH 5 - -struct TRINITY_DLL_DECL npc_guardianAI : public ScriptedAI -{ - npc_guardianAI(Creature *c) : ScriptedAI(c) {} - - void Reset() - { - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - } - - void EnterCombat(Unit *who) - { - } - - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - - if (m_creature->isAttackReady()) - { - m_creature->CastSpell(m_creature->getVictim(),SPELL_DEATHTOUCH, true); - m_creature->resetAttackTimer(); - } - } -}; - -CreatureAI* GetAI_npc_guardian(Creature* pCreature) -{ - return new npc_guardianAI (pCreature); -} - -/*###### -## npc_kingdom_of_dalaran_quests -######*/ - -enum -{ - SPELL_TELEPORT_DALARAN = 53360, - ITEM_KT_SIGNET = 39740, - QUEST_MAGICAL_KINGDOM_A = 12794, - QUEST_MAGICAL_KINGDOM_H = 12791, - QUEST_MAGICAL_KINGDOM_N = 12796 -}; - -#define GOSSIP_ITEM_TELEPORT_TO "I am ready to be teleported to Dalaran." - -bool GossipHello_npc_kingdom_of_dalaran_quests(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - - if (pPlayer->HasItemCount(ITEM_KT_SIGNET,1) && (!pPlayer->GetQuestRewardStatus(QUEST_MAGICAL_KINGDOM_A) || - !pPlayer->GetQuestRewardStatus(QUEST_MAGICAL_KINGDOM_H) || !pPlayer->GetQuestRewardStatus(QUEST_MAGICAL_KINGDOM_N))) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TELEPORT_TO, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - return true; -} - -bool GossipSelect_npc_kingdom_of_dalaran_quests(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF+1) - { - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,SPELL_TELEPORT_DALARAN,false); - } - return true; -} - -/*###### -## npc_mount_vendor -######*/ - -bool GossipHello_npc_mount_vendor(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - - bool canBuy; - canBuy = false; - uint32 vendor = pCreature->GetEntry(); - uint8 race = pPlayer->getRace(); - - switch (vendor) - { - case 384: //Katie Hunter - case 1460: //Unger Statforth - case 2357: //Merideth Carlson - case 4885: //Gregor MacVince - if (pPlayer->GetReputationRank(72) != REP_EXALTED && race != RACE_HUMAN) - pPlayer->SEND_GOSSIP_MENU(5855, pCreature->GetGUID()); - else canBuy = true; - break; - case 1261: //Veron Amberstill - if (pPlayer->GetReputationRank(47) != REP_EXALTED && race != RACE_DWARF) - pPlayer->SEND_GOSSIP_MENU(5856, pCreature->GetGUID()); - else canBuy = true; - break; - case 3362: //Ogunaro Wolfrunner - if (pPlayer->GetReputationRank(76) != REP_EXALTED && race != RACE_ORC) - pPlayer->SEND_GOSSIP_MENU(5841, pCreature->GetGUID()); - else canBuy = true; - break; - case 3685: //Harb Clawhoof - if (pPlayer->GetReputationRank(81) != REP_EXALTED && race != RACE_TAUREN) - pPlayer->SEND_GOSSIP_MENU(5843, pCreature->GetGUID()); - else canBuy = true; - break; - case 4730: //Lelanai - if (pPlayer->GetReputationRank(69) != REP_EXALTED && race != RACE_NIGHTELF) - pPlayer->SEND_GOSSIP_MENU(5844, pCreature->GetGUID()); - else canBuy = true; - break; - case 4731: //Zachariah Post - if (pPlayer->GetReputationRank(68) != REP_EXALTED && race != RACE_UNDEAD_PLAYER) - pPlayer->SEND_GOSSIP_MENU(5840, pCreature->GetGUID()); - else canBuy = true; - break; - case 7952: //Zjolnir - if (pPlayer->GetReputationRank(530) != REP_EXALTED && race != RACE_TROLL) - pPlayer->SEND_GOSSIP_MENU(5842, pCreature->GetGUID()); - else canBuy = true; - break; - case 7955: //Milli Featherwhistle - if (pPlayer->GetReputationRank(54) != REP_EXALTED && race != RACE_GNOME) - pPlayer->SEND_GOSSIP_MENU(5857, pCreature->GetGUID()); - else canBuy = true; - break; - case 16264: //Winaestra - if (pPlayer->GetReputationRank(911) != REP_EXALTED && race != RACE_BLOODELF) - pPlayer->SEND_GOSSIP_MENU(10305, pCreature->GetGUID()); - else canBuy = true; - break; - case 17584: //Torallius the Pack Handler - if (pPlayer->GetReputationRank(930) != REP_EXALTED && race != RACE_DRAENEI) - pPlayer->SEND_GOSSIP_MENU(10239, pCreature->GetGUID()); - else canBuy = true; - break; - } - - if (canBuy) - { - if (pCreature->isVendor()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - } - return true; -} - -bool GossipSelect_npc_mount_vendor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_TRADE) - pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); - - return true; -} - -/*###### -## npc_rogue_trainer -######*/ - -bool GossipHello_npc_rogue_trainer(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - - if (pCreature->isTrainer()) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); - - if (pCreature->isCanTrainingAndResetTalentsOf(pPlayer)) - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "I wish to unlearn my talents", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_UNLEARNTALENTS); - - if (pPlayer->getClass() == CLASS_ROGUE && pPlayer->getLevel() >= 24 && !pPlayer->HasItemCount(17126,1) && !pPlayer->GetQuestRewardStatus(6681)) - { - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - pPlayer->SEND_GOSSIP_MENU(5996, pCreature->GetGUID()); - } else - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); - - return true; -} - -bool GossipSelect_npc_rogue_trainer(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch(uiAction) - { - case GOSSIP_ACTION_INFO_DEF+1: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->CastSpell(pPlayer,21100,false); - break; - case GOSSIP_ACTION_TRAIN: - pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); - break; - case GOSSIP_OPTION_UNLEARNTALENTS: - pPlayer->CLOSE_GOSSIP_MENU(); - pPlayer->SendTalentWipeConfirm(pCreature->GetGUID()); - break; - } - return true; -} - -/*###### -## npc_sayge -######*/ - -#define SPELL_DMG 23768 //dmg -#define SPELL_RES 23769 //res -#define SPELL_ARM 23767 //arm -#define SPELL_SPI 23738 //spi -#define SPELL_INT 23766 //int -#define SPELL_STM 23737 //stm -#define SPELL_STR 23735 //str -#define SPELL_AGI 23736 //agi -#define SPELL_FORTUNE 23765 //faire fortune - -bool GossipHello_npc_sayge(Player* pPlayer, Creature* pCreature) -{ - if (pCreature->isQuestGiver()) - pPlayer->PrepareQuestMenu(pCreature->GetGUID()); - - if (pPlayer->HasSpellCooldown(SPELL_INT) || - pPlayer->HasSpellCooldown(SPELL_ARM) || - pPlayer->HasSpellCooldown(SPELL_DMG) || - pPlayer->HasSpellCooldown(SPELL_RES) || - pPlayer->HasSpellCooldown(SPELL_STR) || - pPlayer->HasSpellCooldown(SPELL_AGI) || - pPlayer->HasSpellCooldown(SPELL_STM) || - pPlayer->HasSpellCooldown(SPELL_SPI)) - pPlayer->SEND_GOSSIP_MENU(7393, pCreature->GetGUID()); - else - { - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Yes", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); - pPlayer->SEND_GOSSIP_MENU(7339, pCreature->GetGUID()); - } - - return true; -} - -void SendAction_npc_sayge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch(uiAction) - { - case GOSSIP_ACTION_INFO_DEF+1: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Slay the Man", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Turn him over to liege", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Confiscate the corn", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Let him go and have the corn", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5); - pPlayer->SEND_GOSSIP_MENU(7340, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+2: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Execute your friend painfully", GOSSIP_SENDER_MAIN+1, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Execute your friend painlessly", GOSSIP_SENDER_MAIN+2, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Let your friend go", GOSSIP_SENDER_MAIN+3, GOSSIP_ACTION_INFO_DEF); - pPlayer->SEND_GOSSIP_MENU(7341, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+3: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Confront the diplomat", GOSSIP_SENDER_MAIN+4, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Show not so quiet defiance", GOSSIP_SENDER_MAIN+5, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Remain quiet", GOSSIP_SENDER_MAIN+2, GOSSIP_ACTION_INFO_DEF); - pPlayer->SEND_GOSSIP_MENU(7361, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+4: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Speak against your brother openly", GOSSIP_SENDER_MAIN+6, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Help your brother in", GOSSIP_SENDER_MAIN+7, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Keep your brother out without letting him know", GOSSIP_SENDER_MAIN+8, GOSSIP_ACTION_INFO_DEF); - pPlayer->SEND_GOSSIP_MENU(7362, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+5: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Take credit, keep gold", GOSSIP_SENDER_MAIN+5, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Take credit, share the gold", GOSSIP_SENDER_MAIN+4, GOSSIP_ACTION_INFO_DEF); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Let the knight take credit", GOSSIP_SENDER_MAIN+3, GOSSIP_ACTION_INFO_DEF); - pPlayer->SEND_GOSSIP_MENU(7363, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF: - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Thanks", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6); - pPlayer->SEND_GOSSIP_MENU(7364, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF+6: - pCreature->CastSpell(pPlayer, SPELL_FORTUNE, false); - pPlayer->SEND_GOSSIP_MENU(7365, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_npc_sayge(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch(uiSender) - { - case GOSSIP_SENDER_MAIN: - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+1: - pCreature->CastSpell(pPlayer, SPELL_DMG, false); - pPlayer->AddSpellCooldown(SPELL_DMG,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+2: - pCreature->CastSpell(pPlayer, SPELL_RES, false); - pPlayer->AddSpellCooldown(SPELL_RES,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+3: - pCreature->CastSpell(pPlayer, SPELL_ARM, false); - pPlayer->AddSpellCooldown(SPELL_ARM,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+4: - pCreature->CastSpell(pPlayer, SPELL_SPI, false); - pPlayer->AddSpellCooldown(SPELL_SPI,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+5: - pCreature->CastSpell(pPlayer, SPELL_INT, false); - pPlayer->AddSpellCooldown(SPELL_INT,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+6: - pCreature->CastSpell(pPlayer, SPELL_STM, false); - pPlayer->AddSpellCooldown(SPELL_STM,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+7: - pCreature->CastSpell(pPlayer, SPELL_STR, false); - pPlayer->AddSpellCooldown(SPELL_STR,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - case GOSSIP_SENDER_MAIN+8: - pCreature->CastSpell(pPlayer, SPELL_AGI, false); - pPlayer->AddSpellCooldown(SPELL_AGI,0,time(NULL) + 7200); - SendAction_npc_sayge(pPlayer, pCreature, uiAction); - break; - } - return true; -} - -struct TRINITY_DLL_DECL npc_steam_tonkAI : public ScriptedAI -{ - npc_steam_tonkAI(Creature *c) : ScriptedAI(c) {} - - void Reset() {} - void EnterCombat(Unit *who) {} - - void OnPossess(bool apply) - { - if (apply) - { - // Initialize the action bar without the melee attack command - m_creature->InitCharmInfo(); - m_creature->GetCharmInfo()->InitEmptyActionBar(false); - - m_creature->SetReactState(REACT_PASSIVE); - } - else - m_creature->SetReactState(REACT_AGGRESSIVE); - } - -}; - -CreatureAI* GetAI_npc_steam_tonk(Creature* pCreature) -{ - return new npc_steam_tonkAI(pCreature); -} - -#define SPELL_TONK_MINE_DETONATE 25099 - -struct TRINITY_DLL_DECL npc_tonk_mineAI : public ScriptedAI -{ - npc_tonk_mineAI(Creature *c) : ScriptedAI(c) - { - m_creature->SetReactState(REACT_PASSIVE); - } - - uint32 ExplosionTimer; - - void Reset() - { - ExplosionTimer = 3000; - } - - void EnterCombat(Unit *who) {} - void AttackStart(Unit *who) {} - void MoveInLineOfSight(Unit *who) {} - - void UpdateAI(const uint32 diff) - { - if (ExplosionTimer < diff) - { - m_creature->CastSpell(m_creature, SPELL_TONK_MINE_DETONATE, true); - m_creature->setDeathState(DEAD); // unsummon it - } else - ExplosionTimer -= diff; - } -}; - -CreatureAI* GetAI_npc_tonk_mine(Creature* pCreature) -{ - return new npc_tonk_mineAI(pCreature); -} - -/*#### -## npc_winter_reveler -####*/ - -bool ReceiveEmote_npc_winter_reveler(Player* pPlayer, Creature* pCreature, uint32 emote) -{ - //TODO: check auralist. - if (pPlayer->HasAura(26218)) - return false; - - if (emote == TEXTEMOTE_KISS) - { - pCreature->CastSpell(pCreature, 26218, false); - pPlayer->CastSpell(pPlayer, 26218, false); - switch(rand()%3) - { - case 0: pCreature->CastSpell(pPlayer, 26207, false); break; - case 1: pCreature->CastSpell(pPlayer, 26206, false); break; - case 2: pCreature->CastSpell(pPlayer, 45036, false); break; - } - } - return true; -} - -/*#### -## npc_brewfest_reveler -####*/ - -bool ReceiveEmote_npc_brewfest_reveler(Player* pPlayer, Creature* pCreature, uint32 emote) -{ - if (emote == TEXTEMOTE_DANCE) - pCreature->CastSpell(pPlayer, 41586, false); - - return true; -} - -/*#### -## npc_snake_trap_serpents -####*/ - -#define SPELL_MIND_NUMBING_POISON 8692 //Viper -#define SPELL_DEADLY_POISON 34655 //Venomous Snake -#define SPELL_CRIPPLING_POISON 3409 //Viper - -#define VENOMOUS_SNAKE_TIMER 1200 -#define VIPER_TIMER 3000 - -#define C_VIPER 19921 - -#define RAND 5 - -struct TRINITY_DLL_DECL npc_snake_trap_serpentsAI : public ScriptedAI -{ - npc_snake_trap_serpentsAI(Creature *c) : ScriptedAI(c) {} - - uint32 SpellTimer; - bool IsViper; - bool Spawn; - - void EnterCombat(Unit *who) {} - - void Reset() - { - Spawn = true; - SpellTimer = 0; - - CreatureInfo const *Info = m_creature->GetCreatureInfo(); - - if (Info->Entry == C_VIPER) - IsViper = true; - else - IsViper = false; - - //We have to reload the states from db for summoned guardians - m_creature->SetMaxHealth(Info->maxhealth); - m_creature->SetHealth(Info->maxhealth); - m_creature->SetStatFloatValue(UNIT_FIELD_MINDAMAGE, Info->mindmg); - m_creature->SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, Info->maxdmg); - - //Add delta to make them not all hit the same time - uint32 delta = (rand() % 7) *100; - m_creature->SetStatFloatValue(UNIT_FIELD_BASEATTACKTIME, Info->baseattacktime + delta); - m_creature->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER , Info->attackpower); - } - - //Redefined for random target selection: - void MoveInLineOfSight(Unit *who) - { - if (!m_creature->getVictim() && who->isTargetableForAttack() && (m_creature->IsHostileTo(who)) && who->isInAccessiblePlaceFor(m_creature)) - { - if (m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE) - return; - - float attackRadius = m_creature->GetAttackDistance(who); - if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who)) - { - if (!(rand() % RAND)) - { - m_creature->setAttackTimer(BASE_ATTACK, (rand() % 10) * 100); - SpellTimer = (rand() % 10) * 100; - AttackStart(who); - } - } - } - } - - void UpdateAI(const uint32 diff) - { - if (Spawn) - { - Spawn = false; - // Start attacking attacker of owner on first ai update after spawn - move in line of sight may choose better target - if (!m_creature->getVictim() && m_creature->isSummon()) - if (Unit * Owner = CAST_SUM(m_creature)->GetSummoner()) - if (Owner->getAttackerForHelper()) - AttackStart(Owner->getAttackerForHelper()); - } - - if (!m_creature->getVictim()) - { - if (m_creature->isInCombat()) - DoStopAttack(); - return; - } - - if (SpellTimer < diff) - { - if (IsViper) //Viper - { - if (rand() % 3 == 0) //33% chance to cast - { - uint32 spell; - if (rand() % 2 == 0) - spell = SPELL_MIND_NUMBING_POISON; - else - spell = SPELL_CRIPPLING_POISON; - - DoCast(m_creature->getVictim(),spell); - } - - SpellTimer = VIPER_TIMER; - } - else //Venomous Snake - { - if (rand() % 10 < 8) //80% chance to cast - DoCast(m_creature->getVictim(),SPELL_DEADLY_POISON); - SpellTimer = VENOMOUS_SNAKE_TIMER + (rand() %5)*100; - } - }else SpellTimer-=diff; - DoMeleeAttackIfReady(); - } -}; - -CreatureAI* GetAI_npc_snake_trap_serpents(Creature* pCreature) -{ - return new npc_snake_trap_serpentsAI(pCreature); -} - -struct TRINITY_DLL_DECL mob_mojoAI : public ScriptedAI -{ - mob_mojoAI(Creature *c) : ScriptedAI(c) {Reset();} - uint32 hearts; - uint64 victimGUID; - void Reset() - { - victimGUID = 0; - hearts = 15000; - Unit* own = m_creature->GetOwner(); - if (own) - m_creature->GetMotionMaster()->MoveFollow(own,0,0); - } - void Aggro(Unit *who){} - void UpdateAI(const uint32 diff) - { - if (m_creature->HasAura(20372,0)) - { - if (heartsRemoveAurasDueToSpell(20372); - hearts = 15000; - }hearts-=diff; - } - } - void ReceiveEmote(Player* pPlayer, uint32 emote) - { - m_creature->HandleEmoteCommand(emote); - Unit* own = m_creature->GetOwner(); - if (!own || own->GetTypeId() != TYPEID_PLAYER || CAST_PLR(own)->GetTeam() != pPlayer->GetTeam()) - return; - if (emote == TEXTEMOTE_KISS) - { - std::string whisp = ""; - switch (rand()%8) - { - case 0:whisp.append("Now that's what I call froggy-style!");break; - case 1:whisp.append("Your lily pad or mine?");break; - case 2:whisp.append("This won't take long, did it?");break; - case 3:whisp.append("I thought you'd never ask!");break; - case 4:whisp.append("I promise not to give you warts...");break; - case 5:whisp.append("Feelin' a little froggy, are ya?");break; - case 6: - whisp.append("Listen, "); - whisp.append(pPlayer->GetName()); - whisp.append(", I know of a little swamp not too far from here...."); - break; - case 7:whisp.append("There's just never enough Mojo to go around...");break; - } - m_creature->MonsterWhisper(whisp.c_str(),pPlayer->GetGUID()); - if (victimGUID) - { - Player* victim = Unit::GetPlayer(victimGUID); - if (victim) - victim->RemoveAura(43906);//remove polymorph frog thing - } - m_creature->AddAura(43906,pPlayer);//add polymorph frog thing - victimGUID = pPlayer->GetGUID(); - m_creature->CastSpell(m_creature,20372,true);//tag.hearts - m_creature->GetMotionMaster()->MoveFollow(pPlayer,0,0); - hearts = 15000; - } - } -}; - -CreatureAI* GetAI_mob_mojo(Creature* pCreature) -{ - return new mob_mojoAI (pCreature); -} - -struct TRINITY_DLL_DECL npc_mirror_image : SpellCasterAI -{ - npc_mirror_image(Creature *c) : SpellCasterAI(c) {} - - void InitializeAI() - { - SpellCasterAI::InitializeAI(); - Unit * owner = me->GetOwner(); - if (!owner) - return; - // Inherit Master's Threat List (not yet implemented) - owner->CastSpell((Unit*)NULL, 58838, true); - // here mirror image casts on summoner spell (not present in client dbc) 49866 - // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcasted by mirror images (stats related?) - // Clone Me! - owner->CastSpell(me, 45204, false); - } - - // Do not reload Creature templates on evade mode enter - prevent visual lost - void EnterEvadeMode() - { - if (me->IsInEvadeMode() || !me->isAlive()) - return; - - Unit *owner = me->GetCharmerOrOwner(); - - me->CombatStop(true); - if (owner && !me->hasUnitState(UNIT_STAT_FOLLOW)) - { - me->GetMotionMaster()->Clear(false); - me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, m_creature->GetFollowAngle(), MOTION_SLOT_ACTIVE); - } - } -}; - -CreatureAI* GetAI_npc_mirror_image(Creature* pCreature) -{ - return new npc_mirror_image (pCreature); -} - -struct TRINITY_DLL_DECL npc_ebon_gargoyleAI : SpellCasterAI -{ - npc_ebon_gargoyleAI(Creature *c) : SpellCasterAI(c) {} - - int despawnTimer; - - void InitializeAI() - { - SpellCasterAI::InitializeAI(); - Unit * owner = me->GetOwner(); - if (!owner) - return; - // Not needed to be despawned now - despawnTimer = 0; - // Find victim of Summon Gargoyle spell - std::list targets; - Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(m_creature, m_creature, 30); - Trinity::UnitListSearcher searcher(m_creature, targets, u_check); - m_creature->VisitNearbyObject(30, searcher); - for(std::list::iterator iter = targets.begin(); iter != targets.end(); ++iter) - if((*iter)->GetAura(49206,owner->GetGUID())) - { - me->Attack((*iter),false); - break; - } - } - - void JustDied(Unit *killer) - { - // Stop Feeding Gargoyle when it dies - if (Unit *owner = me->GetOwner()) - owner->RemoveAurasDueToSpell(50514); - } - - // Fly away when dismissed - void SpellHit(Unit *source, const SpellEntry *spell) - { - if(spell->Id != 50515 || !me->isAlive() ) - return; - - Unit *owner = me->GetOwner(); - - if (!owner || owner != source) - return; - - // Stop Fighting - me->ApplyModFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE, true); - // Sanctuary - me->CastSpell(m_creature, 54661, true); - me->SetReactState(REACT_PASSIVE); - - // Fly Away - me->AddUnitMovementFlag(MOVEMENTFLAG_FLY_MODE); - me->SetSpeed(MOVE_FLIGHT, 0.25f, true); - me->SetSpeed(MOVE_RUN, 0.25f, true); - float x = me->GetPositionX() + 10 * cos(me->GetOrientation()); - float y = me->GetPositionY() + 10 * sin(me->GetOrientation()); - float z = me->GetPositionZ() + 25; - me->GetMotionMaster()->MovePoint(0, x, y, z); - - // Despawn as soon as possible - despawnTimer = 4 * IN_MILISECONDS; - } - - void UpdateAI(const uint32 diff) - { - if (despawnTimer > 0) - { - if (despawnTimer > diff) - despawnTimer -= diff; - else - { - me->ForcedDespawn(); - } - return; - } - SpellCasterAI::UpdateAI(diff); - } -}; - -CreatureAI* GetAI_npc_ebon_gargoyle(Creature* pCreature) -{ - return new npc_ebon_gargoyleAI (pCreature); -} - -//TODO: 30% Attackdamage check for Lightwell -struct TRINITY_DLL_DECL npc_lightwellAI : public PassiveAI -{ - npc_lightwellAI(Creature *c) : PassiveAI(c) {} - - //uint32 desummon_timer; - - void Reset() - { - //desummon_timer = 180000; - m_creature->CastSpell(m_creature, 59907, false); // Spell for Lightwell Charges - } - - /* - void UpdateAI(const uint32 diff) - { - if (desummon_timer < diff) - { - m_creature->Kill(m_creature); - }else desummon_timer -= diff; - - if (!m_creature->HasAura(59907)) - { - m_creature->Kill(m_creature); - } - } - */ -}; - -CreatureAI* GetAI_npc_lightwellAI(Creature* pCreature) -{ - return new npc_lightwellAI (pCreature); -} - -struct TRINITY_DLL_DECL npc_training_dummy : Scripted_NoMovementAI -{ - npc_training_dummy(Creature *c) : Scripted_NoMovementAI(c) {} - - uint32 ResetTimer; - void Reset() - { - m_creature->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate - m_creature->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);//imune to knock aways like blast wave - m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true); - ResetTimer = 10000; - } - - void DamageTaken(Unit *done_by, uint32 &damage) - { - ResetTimer = 10000; - damage = 0; - } - - void EnterCombat(Unit *who){return;} - - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - if (!m_creature->hasUnitState(UNIT_STAT_STUNNED)) - m_creature->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate - if (ResetTimer <= diff) - { - EnterEvadeMode(); - ResetTimer = 10000; - }else ResetTimer -= diff; - return; - } - void MoveInLineOfSight(Unit *who){return;} -}; - -CreatureAI* GetAI_npc_training_dummy(Creature* pCreature) -{ - return new npc_training_dummy (pCreature); -} - -void AddSC_npcs_special() -{ - Script *newscript; - - newscript = new Script; - newscript->Name = "npc_air_force_bots"; - newscript->GetAI = &GetAI_npc_air_force_bots; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_chicken_cluck"; - newscript->GetAI = &GetAI_npc_chicken_cluck; - newscript->pQuestAccept = &QuestAccept_npc_chicken_cluck; - newscript->pQuestComplete = &QuestComplete_npc_chicken_cluck; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_dancing_flames"; - newscript->GetAI = &GetAI_npc_dancing_flames; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_injured_patient"; - newscript->GetAI = &GetAI_npc_injured_patient; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_doctor"; - newscript->GetAI = &GetAI_npc_doctor; - newscript->pQuestAccept = &QuestAccept_npc_doctor; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name = "npc_garments_of_quests"; - newscript->GetAI = &GetAI_npc_garments_of_quests; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_guardian"; - newscript->GetAI = &GetAI_npc_guardian; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_kingdom_of_dalaran_quests"; - newscript->pGossipHello = &GossipHello_npc_kingdom_of_dalaran_quests; - newscript->pGossipSelect = &GossipSelect_npc_kingdom_of_dalaran_quests; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_mount_vendor"; - newscript->pGossipHello = &GossipHello_npc_mount_vendor; - newscript->pGossipSelect = &GossipSelect_npc_mount_vendor; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_rogue_trainer"; - newscript->pGossipHello = &GossipHello_npc_rogue_trainer; - newscript->pGossipSelect = &GossipSelect_npc_rogue_trainer; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_sayge"; - newscript->pGossipHello = &GossipHello_npc_sayge; - newscript->pGossipSelect = &GossipSelect_npc_sayge; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_steam_tonk"; - newscript->GetAI = &GetAI_npc_steam_tonk; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_tonk_mine"; - newscript->GetAI = &GetAI_npc_tonk_mine; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_winter_reveler"; - //newscript->pReceiveEmote = &ReceiveEmote_npc_winter_reveler; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_brewfest_reveler"; - //newscript->pReceiveEmote = &ReceiveEmote_npc_brewfest_reveler; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_snake_trap_serpents"; - newscript->GetAI = &GetAI_npc_snake_trap_serpents; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_mirror_image"; - newscript->GetAI = &GetAI_npc_mirror_image; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_ebon_gargoyle"; - newscript->GetAI = &GetAI_npc_ebon_gargoyle; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_lightwell"; - newscript->GetAI = &GetAI_npc_lightwellAI; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="mob_mojo"; - newscript->GetAI = &GetAI_mob_mojo; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_training_dummy"; - newscript->GetAI = &GetAI_npc_training_dummy; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/world/areatrigger_scripts.cpp b/src/bindings/scripts/scripts/world/areatrigger_scripts.cpp new file mode 100644 index 00000000000..9ed608ce97b --- /dev/null +++ b/src/bindings/scripts/scripts/world/areatrigger_scripts.cpp @@ -0,0 +1,92 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Areatrigger_Scripts +SD%Complete: 100 +SDComment: Scripts for areatriggers +SDCategory: Areatrigger +EndScriptData */ + +/* ContentData +at_legion_teleporter 4560 Teleporter TO Invasion Point: Cataclysm +EndContentData */ + +#include "precompiled.h" + +/*##### +## at_legion_teleporter +#####*/ + +enum +{ + SPELL_TELE_A_TO = 37387, + QUEST_GAINING_ACCESS_A = 10589, + + SPELL_TELE_H_TO = 37389, + QUEST_GAINING_ACCESS_H = 10604 +}; + +bool AreaTrigger_at_legion_teleporter(Player* pPlayer, AreaTriggerEntry* pAt) +{ + if (pPlayer->isAlive() && !pPlayer->isInCombat()) + { + if (pPlayer->GetTeam()== ALLIANCE && pPlayer->GetQuestRewardStatus(QUEST_GAINING_ACCESS_A)) + { + pPlayer->CastSpell(pPlayer,SPELL_TELE_A_TO,false); + return true; + } + + if (pPlayer->GetTeam()== HORDE && pPlayer->GetQuestRewardStatus(QUEST_GAINING_ACCESS_H)) + { + pPlayer->CastSpell(pPlayer,SPELL_TELE_H_TO,false); + return true; + } + + return false; + } + return false; +} + +enum +{ + QUEST_MANOR_RAVENHOLDT = 6681, + NPC_RAVENHOLDT = 13936 +}; + +bool AreaTrigger_at_ravenholdt(Player* pPlayer, AreaTriggerEntry* pAt) +{ + if (pPlayer->GetQuestStatus(QUEST_MANOR_RAVENHOLDT) == QUEST_STATUS_INCOMPLETE) + pPlayer->KilledMonsterCredit(NPC_RAVENHOLDT, 0); + + return false; +} + +void AddSC_areatrigger_scripts() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "at_legion_teleporter"; + newscript->pAreaTrigger = &AreaTrigger_at_legion_teleporter; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "at_ravenholdt"; + newscript->pAreaTrigger = &AreaTrigger_at_ravenholdt; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/boss_emeriss.cpp b/src/bindings/scripts/scripts/world/boss_emeriss.cpp new file mode 100644 index 00000000000..9881525e3ad --- /dev/null +++ b/src/bindings/scripts/scripts/world/boss_emeriss.cpp @@ -0,0 +1,146 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Emeriss +SD%Complete: 90 +SDComment: Teleport function & Mark of Nature missing +SDCategory: Bosses +EndScriptData */ + +#include "precompiled.h" + +enum +{ + SAY_AGGRO = -1000401, + SAY_CASTCORRUPTION = -1000402, + + SPELL_SLEEP = 24777, + SPELL_NOXIOUSBREATH = 24818, + SPELL_TAILSWEEP = 15847, + //SPELL_MARKOFNATURE = 25040, // Not working + SPELL_VOLATILEINFECTION = 24928, + SPELL_CORRUPTIONOFEARTH = 24910 +}; + +struct TRINITY_DLL_DECL boss_emerissAI : public ScriptedAI +{ + boss_emerissAI(Creature *c) : ScriptedAI(c) {} + + uint32 m_uiSleep_Timer; + uint32 m_uiNoxiousBreath_Timer; + uint32 m_uiTailSweep_Timer; + //uint32 m_uiMarkOfNature_Timer; + uint32 m_uiVolatileInfection_Timer; + uint32 m_uiCorruptionsCasted; + + + void Reset() + { + m_uiSleep_Timer = 15000 + rand()%5000; + m_uiNoxiousBreath_Timer = 8000; + m_uiTailSweep_Timer = 4000; + //m_uiMarkOfNature_Timer = 45000; + m_uiVolatileInfection_Timer = 12000; + m_uiCorruptionsCasted = 0; + } + + void Aggro(Unit* pWho) + { + DoScriptText(SAY_AGGRO, m_creature); + } + + void UpdateAI(const uint32 uiDiff) + { + //Return since we have no target + if (!UpdateVictim()) + return; + + //Sleep_Timer + if (m_uiSleep_Timer < uiDiff) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(pTarget, SPELL_SLEEP); + + m_uiSleep_Timer = 8000 + rand()%8000; + } + else + m_uiSleep_Timer -= uiDiff; + + //NoxiousBreath_Timer + if (m_uiNoxiousBreath_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_NOXIOUSBREATH); + m_uiNoxiousBreath_Timer = 14000 + rand()%6000; + } + else + m_uiNoxiousBreath_Timer -= uiDiff; + + //Tailsweep every 2 seconds + if (m_uiTailSweep_Timer < uiDiff) + { + DoCast(m_creature, SPELL_TAILSWEEP); + m_uiTailSweep_Timer = 2000; + } + else + m_uiTailSweep_Timer -= uiDiff; + + //MarkOfNature_Timer + //if (m_uiMarkOfNature_Timer < uiDiff) + //{ + // DoCast(m_creature->getVictim(), SPELL_MARKOFNATURE); + // m_uiMarkOfNature_Timer = 45000; + //} + //else + // m_uiMarkOfNature_Timer -= uiDiff; + + + //VolatileInfection_Timer + if (m_uiVolatileInfection_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_VOLATILEINFECTION); + m_uiVolatileInfection_Timer = 7000 + rand()%5000; + } + else + m_uiVolatileInfection_Timer -= uiDiff; + + //CorruptionofEarth_Timer + //CorruptionofEarth at 75%, 50% and 25% + if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= (100-(25*m_uiCorruptionsCasted))) + { + ++m_uiCorruptionsCasted; // prevent casting twice on same hp + DoScriptText(SAY_CASTCORRUPTION, m_creature); + DoCast(m_creature->getVictim(), SPELL_CORRUPTIONOFEARTH); + } + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_emeriss(Creature* pCreature) +{ + return new boss_emerissAI (pCreature); +} + +void AddSC_boss_emeriss() +{ + Script *newscript; + newscript = new Script; + newscript->Name="boss_emeriss"; + newscript->GetAI = &GetAI_boss_emeriss; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/boss_lethon.cpp b/src/bindings/scripts/scripts/world/boss_lethon.cpp new file mode 100644 index 00000000000..e387891efed --- /dev/null +++ b/src/bindings/scripts/scripts/world/boss_lethon.cpp @@ -0,0 +1,25 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Lethon +SD%Complete: 0 +SDComment: Place Holder +SDCategory: Bosses +EndScriptData */ + +#include "precompiled.h" + diff --git a/src/bindings/scripts/scripts/world/boss_taerar.cpp b/src/bindings/scripts/scripts/world/boss_taerar.cpp new file mode 100644 index 00000000000..3f45ab26331 --- /dev/null +++ b/src/bindings/scripts/scripts/world/boss_taerar.cpp @@ -0,0 +1,263 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Taerar +SD%Complete: 70 +SDComment: Mark of Nature & Teleport NYI. Fix the way to be banished. +SDCategory: Bosses +EndScriptData */ + +#include "precompiled.h" + +enum +{ + SAY_AGGRO = -1000399, + SAY_SUMMONSHADE = -1000400, + + //Spells of Taerar + SPELL_SLEEP = 24777, + SPELL_NOXIOUSBREATH = 24818, + SPELL_TAILSWEEP = 15847, + // SPELL_MARKOFNATURE = 25040, // Not working + SPELL_ARCANEBLAST = 24857, + SPELL_BELLOWINGROAR = 22686, + + SPELL_SUMMONSHADE_1 = 24841, + SPELL_SUMMONSHADE_2 = 24842, + SPELL_SUMMONSHADE_3 = 24843, + + //Spells of Shades of Taerar + SPELL_POSIONCLOUD = 24840, + SPELL_POSIONBREATH = 20667 +}; + +uint32 m_auiSpellSummonShade[]= +{ + SPELL_SUMMONSHADE_1, SPELL_SUMMONSHADE_2, SPELL_SUMMONSHADE_3 +}; + +struct TRINITY_DLL_DECL boss_taerarAI : public ScriptedAI +{ + boss_taerarAI(Creature *c) : ScriptedAI(c) {} + + uint32 m_uiSleep_Timer; + uint32 m_uiNoxiousBreath_Timer; + uint32 m_uiTailSweep_Timer; + //uint32 m_uiMarkOfNature_Timer; + uint32 m_uiArcaneBlast_Timer; + uint32 m_uiBellowingRoar_Timer; + uint32 m_uiShades_Timer; + uint32 m_uiShadesSummoned; + + bool m_bShades; + + void Reset() + { + m_uiSleep_Timer = 15000 + rand()%5000; + m_uiNoxiousBreath_Timer = 8000; + m_uiTailSweep_Timer = 4000; + //m_uiMarkOfNature_Timer = 45000; + m_uiArcaneBlast_Timer = 12000; + m_uiBellowingRoar_Timer = 30000; + m_uiShades_Timer = 60000; //The time that Taerar is banished + m_uiShadesSummoned = 0; + + m_bShades = false; + } + + void EnterCombat(Unit* pWho) + { + DoScriptText(SAY_AGGRO, m_creature); + } + + void JustSummoned(Creature* pSummoned) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + pSummoned->AI()->AttackStart(pTarget); + } + + void UpdateAI(const uint32 uiDiff) + { + if (m_bShades && m_uiShades_Timer < uiDiff) + { + //Become unbanished again + m_creature->setFaction(14); + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + m_bShades = false; + } + else if (m_bShades) + { + m_uiShades_Timer -= uiDiff; + //Do nothing while banished + return; + } + + //Return since we have no target + if (!UpdateVictim()) + return; + + //Sleep_Timer + if (m_uiSleep_Timer < uiDiff) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(pTarget, SPELL_SLEEP); + + m_uiSleep_Timer = 8000 + rand()%7000; + } + else + m_uiSleep_Timer -= uiDiff; + + //NoxiousBreath_Timer + if (m_uiNoxiousBreath_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_NOXIOUSBREATH); + m_uiNoxiousBreath_Timer = 14000 + rand()%6000; + } + else + m_uiNoxiousBreath_Timer -= uiDiff; + + //Tailsweep every 2 seconds + if (m_uiTailSweep_Timer < uiDiff) + { + DoCast(m_creature, SPELL_TAILSWEEP); + m_uiTailSweep_Timer = 2000; + } + else + m_uiTailSweep_Timer -= uiDiff; + + //MarkOfNature_Timer + //if (m_uiMarkOfNature_Timer < uiDiff) + //{ + // DoCast(m_creature->getVictim(), SPELL_MARKOFNATURE); + // m_uiMarkOfNature_Timer = 45000; + //} + //else + // m_uiMarkOfNature_Timer -= uiDiff; + + //ArcaneBlast_Timer + if (m_uiArcaneBlast_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_ARCANEBLAST); + m_uiArcaneBlast_Timer = 7000 + rand()%5000; + } + else + m_uiArcaneBlast_Timer -= uiDiff; + + //BellowingRoar_Timer + if (m_uiBellowingRoar_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_BELLOWINGROAR); + m_uiBellowingRoar_Timer = 20000 + rand()%10000; + } + else + m_uiBellowingRoar_Timer -= uiDiff; + + //Summon 3 Shades at 75%, 50% and 25% (if bShades is true we already left in line 117, no need to check here again) + if (!m_bShades && (m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= (100-(25*m_uiShadesSummoned))) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + { + //Inturrupt any spell casting + m_creature->InterruptNonMeleeSpells(false); + + //horrible workaround, need to fix + m_creature->setFaction(35); + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + + DoScriptText(SAY_SUMMONSHADE, m_creature); + + int iSize = sizeof(m_auiSpellSummonShade) / sizeof(uint32); + + for(int i = 0; i < iSize; ++i) + m_creature->CastSpell(pTarget, m_auiSpellSummonShade[i], true); + + ++m_uiShadesSummoned; // prevent casting twice at same health + m_bShades = true; + } + m_uiShades_Timer = 60000; + } + + DoMeleeAttackIfReady(); + } +}; + +// Shades of Taerar Script +struct TRINITY_DLL_DECL boss_shadeoftaerarAI : public ScriptedAI +{ + boss_shadeoftaerarAI(Creature *c) : ScriptedAI(c) {} + + uint32 m_uiPoisonCloud_Timer; + uint32 m_uiPosionBreath_Timer; + + void Reset() + { + m_uiPoisonCloud_Timer = 8000; + m_uiPosionBreath_Timer = 12000; + } + + void UpdateAI(const uint32 uiDiff) + { + if (!UpdateVictim()) + return; + + //PoisonCloud_Timer + if (m_uiPoisonCloud_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_POSIONCLOUD); + m_uiPoisonCloud_Timer = 30000; + } + else + m_uiPoisonCloud_Timer -= uiDiff; + + //PosionBreath_Timer + if (m_uiPosionBreath_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_POSIONBREATH); + m_uiPosionBreath_Timer = 12000; + } + else + m_uiPosionBreath_Timer -= uiDiff; + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_taerar(Creature* pCreature) +{ + return new boss_taerarAI (pCreature); +} + +CreatureAI* GetAI_boss_shadeoftaerar(Creature* pCreature) +{ + return new boss_shadeoftaerarAI (pCreature); +} + +void AddSC_boss_taerar() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="boss_taerar"; + newscript->GetAI = &GetAI_boss_taerar; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="boss_shade_of_taerar"; + newscript->GetAI = &GetAI_boss_shadeoftaerar; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/boss_ysondre.cpp b/src/bindings/scripts/scripts/world/boss_ysondre.cpp new file mode 100644 index 00000000000..1b93f54c047 --- /dev/null +++ b/src/bindings/scripts/scripts/world/boss_ysondre.cpp @@ -0,0 +1,203 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Ysondre +SD%Complete: 90 +SDComment: Mark of Nature & Teleport missing +SDCategory: Bosses +EndScriptData */ + +#include "precompiled.h" + +enum +{ + SAY_AGGRO = -1000360, + SAY_SUMMONDRUIDS = -1000361, + + SPELL_SLEEP = 24777, + SPELL_NOXIOUSBREATH = 24818, + SPELL_TAILSWEEP = 15847, + //SPELL_MARKOFNATURE = 25040, // Not working + SPELL_LIGHTNINGWAVE = 24819, + SPELL_SUMMONDRUIDS = 24795, + + SPELL_SUMMON_PLAYER = 24776, + + //druid spells + SPELL_MOONFIRE = 21669 +}; + +// Ysondre script +struct TRINITY_DLL_DECL boss_ysondreAI : public ScriptedAI +{ + boss_ysondreAI(Creature* pCreature) : ScriptedAI(pCreature) {} + + uint32 m_uiSleep_Timer; + uint32 m_uiNoxiousBreath_Timer; + uint32 m_uiTailSweep_Timer; + //uint32 m_uiMarkOfNature_Timer; + uint32 m_uiLightningWave_Timer; + uint32 m_uiSummonDruidModifier; + + void Reset() + { + m_uiSleep_Timer = 15000 + rand()%5000; + m_uiNoxiousBreath_Timer = 8000; + m_uiTailSweep_Timer = 4000; + //m_uiMarkOfNature_Timer = 45000; + m_uiLightningWave_Timer = 12000; + m_uiSummonDruidModifier = 0; + } + + void EnterCombat(Unit* pWho) + { + DoScriptText(SAY_AGGRO, m_creature); + } + + void JustSummoned(Creature* pSummoned) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + pSummoned->AI()->AttackStart(pTarget); + } + + void UpdateAI(const uint32 uiDiff) + { + if (!UpdateVictim()) + return; + + //Sleep_Timer + if (m_uiSleep_Timer < uiDiff) + { + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(pTarget, SPELL_SLEEP); + + m_uiSleep_Timer = 8000 + rand()%7000; + } + else + m_uiSleep_Timer -= uiDiff; + + //NoxiousBreath_Timer + if (m_uiNoxiousBreath_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_NOXIOUSBREATH); + m_uiNoxiousBreath_Timer = 14000 + rand()%6000; + } + else + m_uiNoxiousBreath_Timer -= uiDiff; + + //Tailsweep every 2 seconds + if (m_uiTailSweep_Timer < uiDiff) + { + if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_TAILSWEEP); + + m_uiTailSweep_Timer = 2000; + } + else + m_uiTailSweep_Timer -= uiDiff; + + //MarkOfNature_Timer + //if (m_uiMarkOfNature_Timer < uiDiff) + //{ + // DoCast(m_creature->getVictim(), SPELL_MARKOFNATURE); + // m_uiMarkOfNature_Timer = 45000; + //} + //else + // m_uiMarkOfNature_Timer -= uiDiff; + + //LightningWave_Timer + if (m_uiLightningWave_Timer < uiDiff) + { + //Cast LIGHTNINGWAVE on a Random target + if (Unit *target = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(target, SPELL_LIGHTNINGWAVE); + + m_uiLightningWave_Timer = 7000 + rand()%5000; + } + else + m_uiLightningWave_Timer -= uiDiff; + + //Summon Druids + if ((m_creature->GetHealth()*100 / m_creature->GetMaxHealth()) <= (100-(25*m_uiSummonDruidModifier))) + { + DoScriptText(SAY_SUMMONDRUIDS, m_creature); + + for(int i = 0; i < 10; ++i) + DoCast(m_creature, SPELL_SUMMONDRUIDS, true); + + ++m_uiSummonDruidModifier; + } + + DoMeleeAttackIfReady(); + } +}; + +// Summoned druid script +struct TRINITY_DLL_DECL mob_dementeddruidsAI : public ScriptedAI +{ + mob_dementeddruidsAI(Creature *c) : ScriptedAI(c) {} + + uint32 m_uiMoonFire_Timer; + + void Reset() + { + m_uiMoonFire_Timer = 3000; + } + + void UpdateAI(const uint32 uiDiff) + { + if (!UpdateVictim()) + return; + + //MoonFire_Timer + if (m_uiMoonFire_Timer < uiDiff) + { + DoCast(m_creature->getVictim(), SPELL_MOONFIRE); + m_uiMoonFire_Timer = 5000; + } + else + m_uiMoonFire_Timer -= uiDiff; + + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_boss_ysondre(Creature* pCreature) +{ + return new boss_ysondreAI (pCreature); +} + +CreatureAI* GetAI_mob_dementeddruids(Creature* pCreature) +{ + return new mob_dementeddruidsAI (pCreature); +} + +void AddSC_boss_ysondre() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="boss_ysondre"; + newscript->GetAI = &GetAI_boss_ysondre; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="mob_dementeddruids"; + newscript->GetAI = &GetAI_mob_dementeddruids; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/go_scripts.cpp b/src/bindings/scripts/scripts/world/go_scripts.cpp new file mode 100644 index 00000000000..d0818fe8dc0 --- /dev/null +++ b/src/bindings/scripts/scripts/world/go_scripts.cpp @@ -0,0 +1,476 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: GO_Scripts +SD%Complete: 100 +SDComment: Quest support: 4285,4287,4288(crystal pylons), 4296, 6481, 10990, 10991, 10992, Field_Repair_Bot->Teaches spell 22704. Barov_journal->Teaches spell 26089 +SDCategory: Game Objects +EndScriptData */ + +/* ContentData +go_cat_figurine (the "trap" version of GO, two different exist) +go_northern_crystal_pylon +go_eastern_crystal_pylon +go_western_crystal_pylon +go_barov_journal +go_ethereum_prison +go_ethereum_stasis +go_sacred_fire_of_life +go_shrine_of_the_birds +go_field_repair_bot_74A +go_orb_of_command +go_resonite_cask +go_tablet_of_madness +go_tablet_of_the_seven +go_tele_to_dalaran_crystal +go_tele_to_violet_stand +EndContentData */ + +#include "precompiled.h" + +/*###### +## go_cat_figurine +######*/ + +enum +{ + SPELL_SUMMON_GHOST_SABER = 5968, +}; + +bool GOHello_go_cat_figurine(Player* pPlayer, GameObject* pGo) +{ + pPlayer->CastSpell(pPlayer,SPELL_SUMMON_GHOST_SABER,true); + return false; +} + +/*###### +## go_crystal_pylons (3x) +######*/ + +bool GOHello_go_northern_crystal_pylon(Player* pPlayer, GameObject* pGo) +{ + if (pGo->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) + { + pPlayer->PrepareQuestMenu(pGo->GetGUID()); + pPlayer->SendPreparedQuest(pGo->GetGUID()); + } + + if (pPlayer->GetQuestStatus(4285) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(4285); + + return true; +} + +bool GOHello_go_eastern_crystal_pylon(Player* pPlayer, GameObject* pGo) +{ + if (pGo->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) + { + pPlayer->PrepareQuestMenu(pGo->GetGUID()); + pPlayer->SendPreparedQuest(pGo->GetGUID()); + } + + if (pPlayer->GetQuestStatus(4287) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(4287); + + return true; +} + +bool GOHello_go_western_crystal_pylon(Player* pPlayer, GameObject* pGo) +{ + if (pGo->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) + { + pPlayer->PrepareQuestMenu(pGo->GetGUID()); + pPlayer->SendPreparedQuest(pGo->GetGUID()); + } + + if (pPlayer->GetQuestStatus(4288) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(4288); + + return true; +} + +/*###### +## go_barov_journal +######*/ + +bool GOHello_go_barov_journal(Player* pPlayer, GameObject* pGo) +{ + if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING) >= 280 && !pPlayer->HasSpell(26086)) + { + pPlayer->CastSpell(pPlayer,26095,false); + } + return true; +} + +/*###### +## go_field_repair_bot_74A +######*/ + +bool GOHello_go_field_repair_bot_74A(Player* pPlayer, GameObject* pGo) +{ + if (pPlayer->HasSkill(SKILL_ENGINERING) && pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 300 && !pPlayer->HasSpell(22704)) + { + pPlayer->CastSpell(pPlayer,22864,false); + } + return true; +} + +/*###### +## go_gilded_brazier +######*/ + +enum +{ + NPC_STILLBLADE = 17716, +}; + +bool GOHello_go_gilded_brazier(Player* pPlayer, GameObject* pGO) +{ + if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) + { + if (Creature* pCreature = pPlayer->SummonCreature(NPC_STILLBLADE, 8087.632, -7542.740, 151.568, 0.122, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000)) + pCreature->AI()->AttackStart(pPlayer); + } + + return true; +} + +/*###### +## go_orb_of_command +######*/ + +bool GOHello_go_orb_of_command(Player* pPlayer, GameObject* pGo) +{ + if (pPlayer->GetQuestRewardStatus(7761)) + pPlayer->CastSpell(pPlayer,23460,true); + + return true; +} + +/*###### +## go_tablet_of_madness +######*/ + +bool GOHello_go_tablet_of_madness(Player* pPlayer, GameObject* pGo) +{ + if (pPlayer->HasSkill(SKILL_ALCHEMY) && pPlayer->GetSkillValue(SKILL_ALCHEMY) >= 300 && !pPlayer->HasSpell(24266)) + { + pPlayer->CastSpell(pPlayer,24267,false); + } + return true; +} + +/*###### +## go_tablet_of_the_seven +######*/ + +//TODO: use gossip option ("Transcript the Tablet") instead, if Trinity adds support. +bool GOHello_go_tablet_of_the_seven(Player* pPlayer, GameObject* pGo) +{ + if (pGo->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) + return true; + + if (pPlayer->GetQuestStatus(4296) == QUEST_STATUS_INCOMPLETE) + pPlayer->CastSpell(pPlayer,15065,false); + + return true; +} + +/*##### +## go_jump_a_tron +######*/ + +bool GOHello_go_jump_a_tron(Player* pPlayer, GameObject* pGo) +{ + if (pPlayer->GetQuestStatus(10111) == QUEST_STATUS_INCOMPLETE) + pPlayer->CastSpell(pPlayer,33382,true); + + return true; +} + +/*###### +## go_ethereum_prison +######*/ + +enum +{ + SPELL_REP_LC = 39456, + SPELL_REP_SHAT = 39457, + SPELL_REP_CE = 39460, + SPELL_REP_CON = 39474, + SPELL_REP_KT = 39475, + SPELL_REP_SPOR = 39476 +}; + +const uint32 NpcPrisonEntry[] = +{ + 22810, 22811, 22812, 22813, 22814, 22815, //good guys + 20783, 20784, 20785, 20786, 20788, 20789, 20790 //bad guys +}; + +bool GOHello_go_ethereum_prison(Player* pPlayer, GameObject* pGo) +{ + int Random = rand() % (sizeof(NpcPrisonEntry) / sizeof(uint32)); + + if (Creature* pCreature = pPlayer->SummonCreature(NpcPrisonEntry[Random], + pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer), + TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000)) + { + if (!pCreature->IsHostileTo(pPlayer)) + { + uint32 Spell = 0; + + if (FactionTemplateEntry const* pFaction = pCreature->getFactionTemplateEntry()) + { + switch(pFaction->faction) + { + case 1011: Spell = SPELL_REP_LC; break; + case 935: Spell = SPELL_REP_SHAT; break; + case 942: Spell = SPELL_REP_CE; break; + case 933: Spell = SPELL_REP_CON; break; + case 989: Spell = SPELL_REP_KT; break; + case 970: Spell = SPELL_REP_SPOR; break; + } + + if (Spell) + pCreature->CastSpell(pPlayer, Spell, false); + else + error_log("TSCR: go_ethereum_prison summoned Creature (entry %u) but faction (%u) are not expected by script.", pCreature->GetEntry(), pCreature->getFaction()); + } + } + } + + return false; +} + +/*###### +## go_ethereum_stasis +######*/ + +const uint32 NpcStasisEntry[] = +{ + 22825, 20888, 22827, 22826, 22828 +}; + +bool GOHello_go_ethereum_stasis(Player* pPlayer, GameObject* pGo) +{ + int Random = rand() % (sizeof(NpcStasisEntry) / sizeof(uint32)); + + pPlayer->SummonCreature(NpcStasisEntry[Random], + pGo->GetPositionX(), pGo->GetPositionY(), pGo->GetPositionZ(), pGo->GetAngle(pPlayer), + TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + + return false; +} + +/*###### +## go_resonite_cask +######*/ + +enum +{ + NPC_GOGGEROC = 11920 +}; + +bool GOHello_go_resonite_cask(Player* pPlayer, GameObject* pGO) +{ + if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) + pGO->SummonCreature(NPC_GOGGEROC, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); + + return false; +} + +/*###### +## go_sacred_fire_of_life +######*/ + +#define NPC_ARIKARA 10882 + +bool GOHello_go_sacred_fire_of_life(Player* pPlayer, GameObject* pGO) +{ + if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) + pPlayer->SummonCreature(NPC_ARIKARA, -5008.338, -2118.894, 83.657, 0.874, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + + return true; +} + +/*###### +## go_shrine_of_the_birds +######*/ + +enum +{ + NPC_HAWK_GUARD = 22992, + NPC_EAGLE_GUARD = 22993, + NPC_FALCON_GUARD = 22994, + GO_SHRINE_HAWK = 185551, + GO_SHRINE_EAGLE = 185547, + GO_SHRINE_FALCON = 185553 +}; + +bool GOHello_go_shrine_of_the_birds(Player* pPlayer, GameObject* pGo) +{ + uint32 BirdEntry = 0; + + float fX, fY, fZ; + pGo->GetClosePoint(fX, fY, fZ, pGo->GetObjectSize(), INTERACTION_DISTANCE); + + switch(pGo->GetEntry()) + { + case GO_SHRINE_HAWK: + BirdEntry = NPC_HAWK_GUARD; + break; + case GO_SHRINE_EAGLE: + BirdEntry = NPC_EAGLE_GUARD; + break; + case GO_SHRINE_FALCON: + BirdEntry = NPC_FALCON_GUARD; + break; + } + + if (BirdEntry) + pPlayer->SummonCreature(BirdEntry, fX, fY, fZ, pGo->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); + + return false; +} + +/*###### +## go_tele_to_dalaran_crystal +######*/ + +enum +{ + QUEST_LEARN_LEAVE_RETURN = 12790, + QUEST_TELE_CRYSTAL_FLAG = 12845 +}; + +bool GOHello_go_tele_to_dalaran_crystal(Player* pPlayer, GameObject* pGo) +{ + if (pPlayer->GetQuestRewardStatus(QUEST_TELE_CRYSTAL_FLAG)) + return false; + + //TODO: must send error message (what kind of message? On-screen?) + return true; +} + +/*###### +## go_tele_to_violet_stand +######*/ + +bool GOHello_go_tele_to_violet_stand(Player* pPlayer, GameObject* pGo) +{ + if (pPlayer->GetQuestRewardStatus(QUEST_LEARN_LEAVE_RETURN) || pPlayer->GetQuestStatus(QUEST_LEARN_LEAVE_RETURN) == QUEST_STATUS_INCOMPLETE) + return false; + + return true; +} + +void AddSC_go_scripts() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "go_cat_figurine"; + newscript->pGOHello = &GOHello_go_cat_figurine; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_northern_crystal_pylon"; + newscript->pGOHello = &GOHello_go_northern_crystal_pylon; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_eastern_crystal_pylon"; + newscript->pGOHello = &GOHello_go_eastern_crystal_pylon; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_western_crystal_pylon"; + newscript->pGOHello = &GOHello_go_western_crystal_pylon; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_barov_journal"; + newscript->pGOHello = &GOHello_go_barov_journal; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_field_repair_bot_74A"; + newscript->pGOHello = &GOHello_go_field_repair_bot_74A; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_gilded_brazier"; + newscript->pGOHello = &GOHello_go_gilded_brazier; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_orb_of_command"; + newscript->pGOHello = &GOHello_go_orb_of_command; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_shrine_of_the_birds"; + newscript->pGOHello = &GOHello_go_shrine_of_the_birds; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_tablet_of_madness"; + newscript->pGOHello = &GOHello_go_tablet_of_madness; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_tablet_of_the_seven"; + newscript->pGOHello = &GOHello_go_tablet_of_the_seven; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_jump_a_tron"; + newscript->pGOHello = &GOHello_go_jump_a_tron; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_ethereum_prison"; + newscript->pGOHello = &GOHello_go_ethereum_prison; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_ethereum_stasis"; + newscript->pGOHello = &GOHello_go_ethereum_stasis; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_resonite_cask"; + newscript->pGOHello = &GOHello_go_resonite_cask; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_sacred_fire_of_life"; + newscript->pGOHello = &GOHello_go_sacred_fire_of_life; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_tele_to_dalaran_crystal"; + newscript->pGOHello = &GOHello_go_tele_to_dalaran_crystal; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "go_tele_to_violet_stand"; + newscript->pGOHello = &GOHello_go_tele_to_violet_stand; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/item_scripts.cpp b/src/bindings/scripts/scripts/world/item_scripts.cpp new file mode 100644 index 00000000000..f103dc86cdc --- /dev/null +++ b/src/bindings/scripts/scripts/world/item_scripts.cpp @@ -0,0 +1,253 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Item_Scripts +SD%Complete: 100 +SDComment: Items for a range of different items. See content below (in script) +SDCategory: Items +EndScriptData */ + +/* ContentData +item_draenei_fishing_net(i23654) Hacklike implements chance to spawn item or creature +item_nether_wraith_beacon(i31742) Summons creatures for quest Becoming a Spellfire Tailor (q10832) +item_flying_machine(i34060,i34061) Engineering crafted flying machines +item_gor_dreks_ointment(i30175) Protecting Our Own(q10488) +item_only_for_flight Items which should only useable while flying +EndContentData */ + +#include "precompiled.h" +#include "Spell.h" + +/*##### +# item_only_for_flight +#####*/ + +enum +{ + SPELL_ARCANE_CHARGES = 45072 +}; + +bool ItemUse_item_only_for_flight(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) +{ + uint32 itemId = _Item->GetEntry(); + bool disabled = false; + + //for special scripts + switch(itemId) + { + case 24538: + if (pPlayer->GetAreaId() != 3628) + disabled = true; + break; + case 34489: + if (pPlayer->GetZoneId() != 4080) + disabled = true; + break; + case 34475: + if (const SpellEntry* pSpellInfo = GetSpellStore()->LookupEntry(SPELL_ARCANE_CHARGES)) + Spell::SendCastResult(pPlayer, pSpellInfo, 1, SPELL_FAILED_NOT_ON_GROUND); + break; + } + + // allow use in flight only + if (pPlayer->isInFlight() && !disabled) + return false; + + // error + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL); + return true; +} + +/*##### +# item_draenei_fishing_net +#####*/ + +//This is just a hack and should be removed from here. +//Creature/Item are in fact created before spell are sucessfully casted, without any checks at all to ensure proper/expected behavior. +bool ItemUse_item_draenei_fishing_net(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) +{ + //if (targets.getGOTarget() && targets.getGOTarget()->GetTypeId() == TYPEID_GAMEOBJECT && + //targets.getGOTarget()->GetGOInfo()->type == GAMEOBJECT_TYPE_SPELL_FOCUS && targets.getGOTarget()->GetEntry() == 181616) + //{ + if (pPlayer->GetQuestStatus(9452) == QUEST_STATUS_INCOMPLETE) + { + if (rand()%100 < 35) + { + Creature *Murloc = pPlayer->SummonCreature(17102,pPlayer->GetPositionX() ,pPlayer->GetPositionY()+20, pPlayer->GetPositionZ(), 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000); + if (Murloc) + Murloc->AI()->AttackStart(pPlayer); + } + else + { + ItemPosCountVec dest; + uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 23614, 1); + if (msg == EQUIP_ERR_OK) + { + Item* item = pPlayer->StoreNewItem(dest,23614,true); + if (item) + pPlayer->SendNewItem(item,1,false,true); + }else + pPlayer->SendEquipError(msg,NULL,NULL); + } + } + //} + return false; +} + +/*##### +# item_nether_wraith_beacon +#####*/ + +bool ItemUse_item_nether_wraith_beacon(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) +{ + if (pPlayer->GetQuestStatus(10832) == QUEST_STATUS_INCOMPLETE) + { + Creature *Nether; + Nether = pPlayer->SummonCreature(22408,pPlayer->GetPositionX() ,pPlayer->GetPositionY()+20, pPlayer->GetPositionZ(), 0,TEMPSUMMON_TIMED_DESPAWN,180000); + Nether = pPlayer->SummonCreature(22408,pPlayer->GetPositionX() ,pPlayer->GetPositionY()-20, pPlayer->GetPositionZ(), 0,TEMPSUMMON_TIMED_DESPAWN,180000); + if (Nether) + (Nether->AI())->AttackStart(pPlayer); + } + return false; +} + +/*##### +# item_flying_machine +#####*/ + +bool ItemUse_item_flying_machine(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) +{ + uint32 itemId = _Item->GetEntry(); + if (itemId == 34060) + if (pPlayer->GetBaseSkillValue(SKILL_RIDING) >= 225) + return false; + + if (itemId == 34061) + if (pPlayer->GetBaseSkillValue(SKILL_RIDING) == 300) + return false; + + debug_log("TSCR: Player attempt to use item %u, but did not meet riding requirement",itemId); + pPlayer->SendEquipError(EQUIP_ERR_ERR_CANT_EQUIP_SKILL,_Item,NULL); + return true; +} + +/*##### +# item_gor_dreks_ointment +#####*/ + +bool ItemUse_item_gor_dreks_ointment(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) +{ + if (targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT && + targets.getUnitTarget()->GetEntry() == 20748 && !targets.getUnitTarget()->HasAura(32578)) + return false; + + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,_Item,NULL); + return true; +} + +/*##### +# item_incendiary_explosives +#####*/ + +bool ItemUse_item_incendiary_explosives(Player* pPlayer, Item* _Item, SpellCastTargets const& targets) +{ + if (pPlayer->FindNearestCreature(26248,15) || pPlayer->FindNearestCreature(26249,15)) + { + return false; + } + else + { + pPlayer->SendEquipError(EQUIP_ERR_OUT_OF_RANGE,_Item,NULL); + return true; + } +} + +/*##### +# item_mysterious_egg +#####*/ + +bool ItemExpire_item_mysterious_egg(Player* pPlayer, ItemPrototype const * _ItemProto) +{ + ItemPosCountVec dest; + uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 39883, 1); // Cracked Egg + if (msg == EQUIP_ERR_OK) + { + pPlayer->StoreNewItem(dest, 39883, true, Item::GenerateItemRandomPropertyId(39883)); + } + return true; +} + +/*##### +# item_disgusting_jar +#####*/ + +bool ItemExpire_item_disgusting_jar(Player* pPlayer, ItemPrototype const * _ItemProto) +{ + ItemPosCountVec dest; + uint8 msg = pPlayer->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, 44718, 1); // Ripe Disgusting Jar + if (msg == EQUIP_ERR_OK) + { + pPlayer->StoreNewItem(dest, 44718, true, Item::GenerateItemRandomPropertyId(44718)); + } + return true; +} + +void AddSC_item_scripts() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="item_only_for_flight"; + newscript->pItemUse = &ItemUse_item_only_for_flight; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="item_draenei_fishing_net"; + newscript->pItemUse = &ItemUse_item_draenei_fishing_net; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="item_nether_wraith_beacon"; + newscript->pItemUse = &ItemUse_item_nether_wraith_beacon; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="item_flying_machine"; + newscript->pItemUse = &ItemUse_item_flying_machine; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="item_gor_dreks_ointment"; + newscript->pItemUse = &ItemUse_item_gor_dreks_ointment; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="item_incendiary_explosives"; + newscript->pItemUse = &ItemUse_item_incendiary_explosives; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="item_mysterious_egg"; + newscript->pItemExpire = &ItemExpire_item_mysterious_egg; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="item_disgusting_jar"; + newscript->pItemExpire = &ItemExpire_item_disgusting_jar; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/mob_generic_creature.cpp b/src/bindings/scripts/scripts/world/mob_generic_creature.cpp new file mode 100644 index 00000000000..30a57e56dd5 --- /dev/null +++ b/src/bindings/scripts/scripts/world/mob_generic_creature.cpp @@ -0,0 +1,260 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* ScriptData +SDName: Generic_Creature +SD%Complete: 80 +SDComment: Should be replaced with core based AI +SDCategory: Creatures +EndScriptData */ + +#include "precompiled.h" + +#define GENERIC_CREATURE_COOLDOWN 5000 + +struct TRINITY_DLL_DECL generic_creatureAI : public ScriptedAI +{ + generic_creatureAI(Creature *c) : ScriptedAI(c) {} + + uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds) + uint32 BuffTimer; //This variable keeps track of buffs + bool IsSelfRooted; + + void Reset() + { + GlobalCooldown = 0; + BuffTimer = 0; //Rebuff as soon as we can + IsSelfRooted = false; + } + + void EnterCombat(Unit *who) + { + if (!m_creature->IsWithinMeleeRange(who)) + { + IsSelfRooted = true; + } + } + + void UpdateAI(const uint32 diff) + { + //Always decrease our global cooldown first + if (GlobalCooldown > diff) + GlobalCooldown -= diff; + else GlobalCooldown = 0; + + //Buff timer (only buff when we are alive and not in combat + if (!m_creature->isInCombat() && m_creature->isAlive()) + if (BuffTimer < diff) + { + //Find a spell that targets friendly and applies an aura (these are generally buffs) + SpellEntry const *info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_AURA); + + if (info && !GlobalCooldown) + { + //Cast the buff spell + DoCastSpell(m_creature, info); + + //Set our global cooldown + GlobalCooldown = GENERIC_CREATURE_COOLDOWN; + + //Set our timer to 10 minutes before rebuff + BuffTimer = 600000; + }//Try agian in 30 seconds + else BuffTimer = 30000; + }else BuffTimer -= diff; + + //Return since we have no target + if (!UpdateVictim()) + return; + + //If we are within range melee the target + if (m_creature->IsWithinMeleeRange(m_creature->getVictim())) + { + //Make sure our attack is ready and we arn't currently casting + if (m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false)) + { + bool Healing = false; + SpellEntry const *info = NULL; + + //Select a healing spell if less than 30% hp + if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30) + info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); + + //No healing spell available, select a hostile spell + if (info) Healing = true; + else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, 0, 0, SELECT_EFFECT_DONTCARE); + + //50% chance if elite or higher, 20% chance if not, to replace our white hit with a spell + if (info && (rand() % (m_creature->GetCreatureInfo()->rank > 1 ? 2 : 5) == 0) && !GlobalCooldown) + { + //Cast the spell + if (Healing)DoCastSpell(m_creature, info); + else DoCastSpell(m_creature->getVictim(), info); + + //Set our global cooldown + GlobalCooldown = GENERIC_CREATURE_COOLDOWN; + } + else m_creature->AttackerStateUpdate(m_creature->getVictim()); + + m_creature->resetAttackTimer(); + } + } + else + { + //Only run this code if we arn't already casting + if (!m_creature->IsNonMeleeSpellCasted(false)) + { + bool Healing = false; + SpellEntry const *info = NULL; + + //Select a healing spell if less than 30% hp ONLY 33% of the time + if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30 && rand() % 3 == 0) + info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); + + //No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE) + if (info) Healing = true; + else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, NOMINAL_MELEE_RANGE, 0, SELECT_EFFECT_DONTCARE); + + //Found a spell, check if we arn't on cooldown + if (info && !GlobalCooldown) + { + //If we are currently moving stop us and set the movement generator + if (!IsSelfRooted) + { + IsSelfRooted = true; + } + + //Cast spell + if (Healing) DoCastSpell(m_creature,info); + else DoCastSpell(m_creature->getVictim(),info); + + //Set our global cooldown + GlobalCooldown = GENERIC_CREATURE_COOLDOWN; + + + }//If no spells available and we arn't moving run to target + else if (IsSelfRooted) + { + //Cancel our current spell and then allow movement agian + m_creature->InterruptNonMeleeSpells(false); + IsSelfRooted = false; + } + } + } + } +}; + +CreatureAI* GetAI_generic_creature(Creature* pCreature) +{ + return new generic_creatureAI (pCreature); +} + +struct TRINITY_DLL_DECL trigger_periodicAI : public NullCreatureAI +{ + trigger_periodicAI(Creature* c) : NullCreatureAI(c) + { + spell = me->m_spells[0] ? GetSpellStore()->LookupEntry(me->m_spells[0]) : NULL; + interval = me->GetAttackTime(BASE_ATTACK); + timer = interval; + } + + uint32 timer, interval; + const SpellEntry * spell; + + void UpdateAI(const uint32 diff) + { + if (timer < diff) + { + if (spell) + me->CastSpell(me, spell, true); + timer = interval; + } + else + timer -= diff; + } +}; + +struct TRINITY_DLL_DECL trigger_deathAI : public NullCreatureAI +{ + trigger_deathAI(Creature* c) : NullCreatureAI(c) {} + void JustDied(Unit *killer) + { + if (me->m_spells[0]) + me->CastSpell(killer, me->m_spells[0], true); + } +}; + +struct TRINITY_DLL_DECL mob_webwrapAI : public NullCreatureAI +{ + mob_webwrapAI(Creature *c) : NullCreatureAI(c), victimGUID(0) {} + + uint64 victimGUID; + + void SetGUID(const uint64 &guid, int32 param) + { + victimGUID = guid; + if (me->m_spells[0] && victimGUID) + if (Unit *victim = Unit::GetUnit(*me, victimGUID)) + victim->CastSpell(victim, me->m_spells[0], true, NULL, NULL, me->GetGUID()); + } + + void JustDied(Unit *killer) + { + if (me->m_spells[0] && victimGUID) + if (Unit *victim = Unit::GetUnit(*me, victimGUID)) + victim->RemoveAurasDueToSpell(me->m_spells[0], me->GetGUID()); + } +}; + +CreatureAI* GetAI_trigger_periodic(Creature* pCreature) +{ + return new trigger_periodicAI (pCreature); +} + +CreatureAI* GetAI_trigger_death(Creature* pCreature) +{ + return new trigger_deathAI (pCreature); +} + +CreatureAI* GetAI_mob_webwrap(Creature* pCreature) +{ + return new mob_webwrapAI (pCreature); +} + +void AddSC_generic_creature() +{ + Script *newscript; + /*newscript = new Script; + newscript->Name="generic_creature"; + newscript->GetAI = &GetAI_generic_creature; + newscript->RegisterSelf();*/ + + newscript = new Script; + newscript->Name="trigger_periodic"; + newscript->GetAI = &GetAI_trigger_periodic; + newscript->RegisterSelf(); + + /*newscript = new Script; + newscript->Name="trigger_death"; + newscript->GetAI = &GetAI_trigger_death; + newscript->RegisterSelf();*/ + + newscript = new Script; + newscript->Name="mob_webwrap"; + newscript->GetAI = &GetAI_mob_webwrap; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/npc_innkeeper.cpp b/src/bindings/scripts/scripts/world/npc_innkeeper.cpp new file mode 100644 index 00000000000..8a99ea7fc7a --- /dev/null +++ b/src/bindings/scripts/scripts/world/npc_innkeeper.cpp @@ -0,0 +1,145 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Npc_Innkeeper +SD%Complete: 50 +SDComment: This script are currently not in use. EventSystem cannot be used on Windows build of SD2 +SDCategory: NPCs +EndScriptData */ + +#include "precompiled.h" + +#define HALLOWEEN_EVENTID 12 +#define SPELL_TRICK_OR_TREATED 24755 +#define SPELL_TREAT 24715 + +#define LOCALE_TRICK_OR_TREAT_0 "Trick or Treat!" +#define LOCALE_TRICK_OR_TREAT_2 "Des bonbons ou des blagues!" +#define LOCALE_TRICK_OR_TREAT_3 "Süßes oder Saures!" +#define LOCALE_TRICK_OR_TREAT_6 "¡Truco o trato!" + +bool isEventActive() +{ + /* + const GameEvent::ActiveEvents *ActiveEventsList = gameeventmgr.GetActiveEventList(); + GameEvent::ActiveEvents::const_iterator itr; + for (itr = ActiveEventsList->begin(); itr != ActiveEventsList->end(); ++itr) + { + if (*itr==HALLOWEEN_EVENTID) + { + return true; + } + }*/ + return false; +} + +bool GossipHello_npc_innkeeper(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + + if (isEventActive()&& !pPlayer->GetAura(SPELL_TRICK_OR_TREATED, pPlayer->GetGUID())) + { + char* localizedEntry; + switch (pPlayer->GetSession()->GetSessionDbLocaleIndex()) + { + case 0: + localizedEntry=LOCALE_TRICK_OR_TREAT_0; + break; + case 2: + localizedEntry=LOCALE_TRICK_OR_TREAT_2; + break; + case 3: + localizedEntry=LOCALE_TRICK_OR_TREAT_3; + break; + case 6: + localizedEntry=LOCALE_TRICK_OR_TREAT_6; + break; + default: + localizedEntry=LOCALE_TRICK_OR_TREAT_0; + } + + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, localizedEntry, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+HALLOWEEN_EVENTID); + } + + pPlayer->TalkedToCreature(pCreature->GetEntry(), pCreature->GetGUID()); + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +bool GossipSelect_npc_innkeeper(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF+HALLOWEEN_EVENTID && isEventActive() && !pPlayer->GetAura(SPELL_TRICK_OR_TREATED, pPlayer->GetGUID())) + { + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer, SPELL_TRICK_OR_TREATED, true); + + // either trick or treat, 50% chance + if (rand()%2) + { + pPlayer->CastSpell(pPlayer, SPELL_TREAT, true); + } + else + { + int32 trickspell=0; + switch (rand()%9) // note that female characters can get male costumes and vice versa + { + case 0: + trickspell=24753; // cannot cast, random 30sec + break; + case 1: + trickspell=24713; // lepper gnome costume + break; + case 2: + trickspell=24735; // male ghost costume + break; + case 3: + trickspell=24736; // female ghostcostume + break; + case 4: + trickspell=24710; // male ninja costume + break; + case 5: + trickspell=24711; // female ninja costume + break; + case 6: + trickspell=24708; // male pirate costume + break; + case 7: + trickspell=24709; // female pirate costume + break; + case 8: + trickspell=24723; // skeleton costume + break; + } + pPlayer->CastSpell(pPlayer, trickspell, true); + } + return true; // prevent Trinity core handling + } + return false; // the player didn't select "trick or treat" or cheated, normal core handling +} + +void AddSC_npc_innkeeper() +{ + Script *newscript; + newscript = new Script; + newscript->Name="npc_innkeeper"; + newscript->pGossipHello = &GossipHello_npc_innkeeper; + newscript->pGossipSelect = &GossipSelect_npc_innkeeper; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/world/npc_professions.cpp b/src/bindings/scripts/scripts/world/npc_professions.cpp new file mode 100644 index 00000000000..07b40555fd5 --- /dev/null +++ b/src/bindings/scripts/scripts/world/npc_professions.cpp @@ -0,0 +1,1342 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Npc_Professions +SD%Complete: 80 +SDComment: Provides learn/unlearn/relearn-options for professions. Not supported: Unlearn engineering, re-learn engineering, re-learn leatherworking. +SDCategory: NPCs +EndScriptData */ + +#include "precompiled.h" + +/* +A few notes for future developement: +- A full implementation of gossip for GO's is required. They must have the same scripting capabilities as creatures. Basically, +there is no difference here (except that default text is chosen with `gameobject_template`.`data3` (for GO type2, different dataN for a few others) +- It's possible blacksmithing still require some tweaks and adjustments due to the way we _have_ to use reputation. +*/ + +/* +-- UPDATE `gameobject_template` SET `ScriptName` = 'go_soothsaying_for_dummies' WHERE `entry` = 177226; +*/ + +/*### +# to be removed from here (->ncp_text). This is data for database projects. +###*/ +#define TALK_MUST_UNLEARN_WEAPON "You must forget your weapon type specialty before I can help you. Go to Everlook in Winterspring and seek help there." + +#define TALK_HAMMER_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the hammersmith." +#define TALK_AXE_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the axesmith." +#define TALK_SWORD_LEARN "Ah, a seasoned veteran you once were. I know you are capable, you merely need to ask and I shall teach you the way of the swordsmith." + +#define TALK_HAMMER_UNLEARN "Forgetting your Hammersmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Hammersmithing to create!" +#define TALK_AXE_UNLEARN "Forgetting your Axesmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Axesmithing to create!" +#define TALK_SWORD_UNLEARN "Forgetting your Swordsmithing skill is not something to do lightly. If you choose to abandon it you will forget all recipes that require Swordsmithing to create!" + +/*### +# generic defines +###*/ + +#define GOSSIP_SENDER_LEARN 50 +#define GOSSIP_SENDER_UNLEARN 51 +#define GOSSIP_SENDER_CHECK 52 + +/*### +# gossip item and box texts +###*/ + +#define GOSSIP_LEARN_POTION "Please teach me how to become a Master of Potions, Lauranna" +#define GOSSIP_UNLEARN_POTION "I wish to unlearn Potion Mastery" +#define GOSSIP_LEARN_TRANSMUTE "Please teach me how to become a Master of Transmutations, Zarevhi" +#define GOSSIP_UNLEARN_TRANSMUTE "I wish to unlearn Transmutation Mastery" +#define GOSSIP_LEARN_ELIXIR "Please teach me how to become a Master of Elixirs, Lorokeem" +#define GOSSIP_UNLEARN_ELIXIR "I wish to unlearn Elixir Mastery" + +#define BOX_UNLEARN_ALCHEMY_SPEC "Do you really want to unlearn your alchemy specialty and lose all associated recipes? \n Cost: " + +#define GOSSIP_WEAPON_LEARN "Please teach me how to become a Weaponsmith" +#define GOSSIP_WEAPON_UNLEARN "I wish to unlearn the art of Weaponsmithing" +#define GOSSIP_ARMOR_LEARN "Please teach me how to become a Armorsmith" +#define GOSSIP_ARMOR_UNLEARN "I wish to unlearn the art of Armorsmithing" + +#define GOSSIP_UNLEARN_SMITH_SPEC "I wish to unlearn my blacksmith specialty" +#define BOX_UNLEARN_ARMORORWEAPON "Do you really want to unlearn your blacksmith specialty and lose all associated recipes? \n Cost: " + +#define GOSSIP_LEARN_HAMMER "Please teach me how to become a Hammersmith, Lilith" +#define GOSSIP_UNLEARN_HAMMER "I wish to unlearn Hammersmithing" +#define GOSSIP_LEARN_AXE "Please teach me how to become a Axesmith, Kilram" +#define GOSSIP_UNLEARN_AXE "I wish to unlearn Axesmithing" +#define GOSSIP_LEARN_SWORD "Please teach me how to become a Swordsmith, Seril" +#define GOSSIP_UNLEARN_SWORD "I wish to unlearn Swordsmithing" + +#define BOX_UNLEARN_WEAPON_SPEC "Do you really want to unlearn your weaponsmith specialty and lose all associated recipes? \n Cost: " + +#define GOSSIP_LEARN_DRAGON "I am absolutely certain that i want to learn dragonscale leatherworking" +#define GOSSIP_UNLEARN_DRAGON "I wish to unlearn Dragonscale Leatherworking" +#define GOSSIP_LEARN_ELEMENTAL "I am absolutely certain that i want to learn elemental leatherworking" +#define GOSSIP_UNLEARN_ELEMENTAL "I wish to unlearn Elemental Leatherworking" +#define GOSSIP_LEARN_TRIBAL "I am absolutely certain that i want to learn tribal leatherworking" +#define GOSSIP_UNLEARN_TRIBAL "I wish to unlearn Tribal Leatherworking" + +#define BOX_UNLEARN_LEATHER_SPEC "Do you really want to unlearn your leatherworking specialty and lose all associated recipes? \n Cost: " + +#define GOSSIP_LEARN_SPELLFIRE "Please teach me how to become a Spellcloth tailor" +#define GOSSIP_UNLEARN_SPELLFIRE "I wish to unlearn Spellfire Tailoring" +#define GOSSIP_LEARN_MOONCLOTH "Please teach me how to become a Mooncloth tailor" +#define GOSSIP_UNLEARN_MOONCLOTH "I wish to unlearn Mooncloth Tailoring" +#define GOSSIP_LEARN_SHADOWEAVE "Please teach me how to become a Shadoweave tailor" +#define GOSSIP_UNLEARN_SHADOWEAVE "I wish to unlearn Shadoweave Tailoring" + +#define BOX_UNLEARN_TAILOR_SPEC "Do you really want to unlearn your tailoring specialty and lose all associated recipes? \n Cost: " + +#define GOSSIP_LEARN_GOBLIN "I am absolutely certain that i want to learn Goblin engineering" +#define GOSSIP_LEARN_GNOMISH "I am absolutely certain that i want to learn Gnomish engineering" + +/*### +# spells defines +###*/ + +#define S_WEAPON 9787 +#define S_ARMOR 9788 +#define S_HAMMER 17040 +#define S_AXE 17041 +#define S_SWORD 17039 + +#define S_LEARN_WEAPON 9789 +#define S_LEARN_ARMOR 9790 +#define S_LEARN_HAMMER 39099 +#define S_LEARN_AXE 39098 +#define S_LEARN_SWORD 39097 + +#define S_UNLEARN_WEAPON 36436 +#define S_UNLEARN_ARMOR 36435 +#define S_UNLEARN_HAMMER 36441 +#define S_UNLEARN_AXE 36439 +#define S_UNLEARN_SWORD 36438 + +#define S_REP_ARMOR 17451 +#define S_REP_WEAPON 17452 + +#define REP_ARMOR 46 +#define REP_WEAPON 289 +#define REP_HAMMER 569 +#define REP_AXE 570 +#define REP_SWORD 571 + +#define S_DRAGON 10656 +#define S_ELEMENTAL 10658 +#define S_TRIBAL 10660 + +#define S_LEARN_DRAGON 10657 +#define S_LEARN_ELEMENTAL 10659 +#define S_LEARN_TRIBAL 10661 + +#define S_UNLEARN_DRAGON 36434 +#define S_UNLEARN_ELEMENTAL 36328 +#define S_UNLEARN_TRIBAL 36433 + +#define S_GOBLIN 20222 +#define S_GNOMISH 20219 + +#define S_LEARN_GOBLIN 20221 +#define S_LEARN_GNOMISH 20220 + +#define S_SPELLFIRE 26797 +#define S_MOONCLOTH 26798 +#define S_SHADOWEAVE 26801 + +#define S_LEARN_SPELLFIRE 26796 +#define S_LEARN_MOONCLOTH 26799 +#define S_LEARN_SHADOWEAVE 26800 + +#define S_UNLEARN_SPELLFIRE 41299 +#define S_UNLEARN_MOONCLOTH 41558 +#define S_UNLEARN_SHADOWEAVE 41559 + +#define S_TRANSMUTE 28672 +#define S_ELIXIR 28677 +#define S_POTION 28675 + +#define S_LEARN_TRANSMUTE 28674 +#define S_LEARN_ELIXIR 28678 +#define S_LEARN_POTION 28676 + +#define S_UNLEARN_TRANSMUTE 41565 +#define S_UNLEARN_ELIXIR 41564 +#define S_UNLEARN_POTION 41563 + +/*### +# formulas to calculate unlearning cost +###*/ + +int32 DoLearnCost(Player* pPlayer) //tailor, alchemy +{ + return 200000; +} + +int32 DoHighUnlearnCost(Player* pPlayer) //tailor, alchemy +{ + return 1500000; +} + +int32 DoMedUnlearnCost(Player* pPlayer) //blacksmith, leatherwork +{ + uint32 level = pPlayer->getLevel(); + if (level < 51) + return 250000; + else if (level < 66) + return 500000; + else + return 1000000; +} + +int32 DoLowUnlearnCost(Player* pPlayer) //blacksmith +{ + uint32 level = pPlayer->getLevel(); + if (level < 66) + return 50000; + else + return 100000; +} + +/*### +# unlearning related profession spells +###*/ + +bool EquippedOk(Player* pPlayer, uint32 spellId) +{ + SpellEntry const* spell = GetSpellStore()->LookupEntry(spellId); + + if (!spell) + return false; + + for(uint8 i=0; i<3; ++i) + { + uint32 reqSpell = spell->EffectTriggerSpell[i]; + if (!reqSpell) + continue; + + Item* pItem; + for(uint8 j = EQUIPMENT_SLOT_START; j < EQUIPMENT_SLOT_END; j++) + { + pItem = pPlayer->GetItemByPos(INVENTORY_SLOT_BAG_0, j); + if (pItem) + if (pItem->GetProto()->RequiredSpell == reqSpell) + { + //player has item equipped that require specialty. Not allow to unlearn, player has to unequip first + debug_log("TSCR: player attempt to unlearn spell %u, but item %u is equipped.",reqSpell,pItem->GetProto()->ItemId); + return false; + } + } + } + return true; +} + +void ProfessionUnlearnSpells(Player* pPlayer, uint32 type) +{ + switch (type) + { + case 36436: // S_UNLEARN_WEAPON + pPlayer->removeSpell(36125); // Light Earthforged Blade + pPlayer->removeSpell(36128); // Light Emberforged Hammer + pPlayer->removeSpell(36126); // Light Skyforged Axe + break; + case 36435: // S_UNLEARN_ARMOR + pPlayer->removeSpell(36122); // Earthforged Leggings + pPlayer->removeSpell(36129); // Heavy Earthforged Breastplate + pPlayer->removeSpell(36130); // Stormforged Hauberk + pPlayer->removeSpell(34533); // Breastplate of Kings + pPlayer->removeSpell(34529); // Nether Chain Shirt + pPlayer->removeSpell(34534); // Bulwark of Kings + pPlayer->removeSpell(36257); // Bulwark of the Ancient Kings + pPlayer->removeSpell(36256); // Embrace of the Twisting Nether + pPlayer->removeSpell(34530); // Twisting Nether Chain Shirt + pPlayer->removeSpell(36124); // Windforged Leggings + break; + case 36441: // S_UNLEARN_HAMMER + pPlayer->removeSpell(36262); // Dragonstrike + pPlayer->removeSpell(34546); // Dragonmaw + pPlayer->removeSpell(34545); // Drakefist Hammer + pPlayer->removeSpell(36136); // Lavaforged Warhammer + pPlayer->removeSpell(34547); // Thunder + pPlayer->removeSpell(34567); // Deep Thunder + pPlayer->removeSpell(36263); // Stormherald + pPlayer->removeSpell(36137); // Great Earthforged Hammer + break; + case 36439: // S_UNLEARN_AXE + pPlayer->removeSpell(36260); // Wicked Edge of the Planes + pPlayer->removeSpell(34562); // Black Planar Edge + pPlayer->removeSpell(34541); // The Planar Edge + pPlayer->removeSpell(36134); // Stormforged Axe + pPlayer->removeSpell(36135); // Skyforged Great Axe + pPlayer->removeSpell(36261); // Bloodmoon + pPlayer->removeSpell(34543); // Lunar Crescent + pPlayer->removeSpell(34544); // Mooncleaver + break; + case 36438: // S_UNLEARN_SWORD + pPlayer->removeSpell(36258); // Blazefury + pPlayer->removeSpell(34537); // Blazeguard + pPlayer->removeSpell(34535); // Fireguard + pPlayer->removeSpell(36131); // Windforged Rapier + pPlayer->removeSpell(36133); // Stoneforged Claymore + pPlayer->removeSpell(34538); // Lionheart Blade + pPlayer->removeSpell(34540); // Lionheart Champion + pPlayer->removeSpell(36259); // Lionheart Executioner + break; + case 36434: // S_UNLEARN_DRAGON + pPlayer->removeSpell(36076); // Dragonstrike Leggings + pPlayer->removeSpell(36079); // Golden Dragonstrike Breastplate + pPlayer->removeSpell(35576); // Ebon Netherscale Belt + pPlayer->removeSpell(35577); // Ebon Netherscale Bracers + pPlayer->removeSpell(35575); // Ebon Netherscale Breastplate + pPlayer->removeSpell(35582); // Netherstrike Belt + pPlayer->removeSpell(35584); // Netherstrike Bracers + pPlayer->removeSpell(35580); // Netherstrike Breastplate + break; + case 36328: // S_UNLEARN_ELEMENTAL + pPlayer->removeSpell(36074); // Blackstorm Leggings + pPlayer->removeSpell(36077); // Primalstorm Breastplate + pPlayer->removeSpell(35590); // Primalstrike Belt + pPlayer->removeSpell(35591); // Primalstrike Bracers + pPlayer->removeSpell(35589); // Primalstrike Vest + break; + case 36433: // S_UNLEARN_TRIBAL + pPlayer->removeSpell(35585); // Windhawk Hauberk + pPlayer->removeSpell(35587); // Windhawk Belt + pPlayer->removeSpell(35588); // Windhawk Bracers + pPlayer->removeSpell(36075); // Wildfeather Leggings + pPlayer->removeSpell(36078); // Living Crystal Breastplate + break; + case 41299: // S_UNLEARN_SPELLFIRE + pPlayer->removeSpell(26752); // Spellfire Belt + pPlayer->removeSpell(26753); // Spellfire Gloves + pPlayer->removeSpell(26754); // Spellfire Robe + break; + case 41558: // S_UNLEARN_MOONCLOTH + pPlayer->removeSpell(26760); // Primal Mooncloth Belt + pPlayer->removeSpell(26761); // Primal Mooncloth Shoulders + pPlayer->removeSpell(26762); // Primal Mooncloth Robe + break; + case 41559: // S_UNLEARN_SHADOWEAVE + pPlayer->removeSpell(26756); // Frozen Shadoweave Shoulders + pPlayer->removeSpell(26757); // Frozen Shadoweave Boots + pPlayer->removeSpell(26758); // Frozen Shadoweave Robe + break; + } +} + +/*### +# start menues alchemy +###*/ + +bool HasAlchemySpell(Player* pPlayer) +{ + if (pPlayer->HasSpell(S_TRANSMUTE) || pPlayer->HasSpell(S_ELIXIR) || pPlayer->HasSpell(S_POTION)) + return true; + return false; +} + +bool GossipHello_npc_prof_alchemy(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + if (pCreature->isVendor()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + if (pCreature->isTrainer()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + + uint32 eCreature = pCreature->GetEntry(); + + if (pPlayer->HasSkill(SKILL_ALCHEMY) && pPlayer->GetBaseSkillValue(SKILL_ALCHEMY)>=350 && pPlayer->getLevel() > 67) + { + if (pPlayer->GetQuestRewardStatus(10899) || pPlayer->GetQuestRewardStatus(10902) || pPlayer->GetQuestRewardStatus(10897)) + { + switch (eCreature) + { + case 22427: //Zarevhi + if (!HasAlchemySpell(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1); + if (pPlayer->HasSpell(S_TRANSMUTE)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); + break; + case 19052: //Lorokeem + if (!HasAlchemySpell(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2); + if (pPlayer->HasSpell(S_ELIXIR)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); + break; + case 17909: //Lauranna Thar'well + if (!HasAlchemySpell(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3); + if (pPlayer->HasSpell(S_POTION)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6); + break; + } + } + } + + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +void SendActionMenu_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch(uiAction) + { + case GOSSIP_ACTION_TRADE: + pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); + break; + case GOSSIP_ACTION_TRAIN: + pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); + break; + //Learn Alchemy + case GOSSIP_ACTION_INFO_DEF + 1: + if (!pPlayer->HasSpell(S_TRANSMUTE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_TRANSMUTE, true); + pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + if (!pPlayer->HasSpell(S_ELIXIR) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_ELIXIR, true); + pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 3: + if (!pPlayer->HasSpell(S_POTION) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_POTION, true); + pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + //Unlearn Alchemy + case GOSSIP_ACTION_INFO_DEF + 4: + if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) + { + pCreature->CastSpell(pPlayer, S_UNLEARN_TRANSMUTE, true); + pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 5: + if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) + { + pCreature->CastSpell(pPlayer, S_UNLEARN_ELIXIR, true); + pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 6: + if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) + { + pCreature->CastSpell(pPlayer, S_UNLEARN_POTION, true); + pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + } +} + +void SendConfirmLearn_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction) + { + uint32 eCreature = pCreature->GetEntry(); + switch(eCreature) + { + case 22427: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 19052: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_ELIXIR, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 17909: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_POTION, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + } + } +} + +void SendConfirmUnlearn_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction) + { + uint32 eCreature = pCreature->GetEntry(); + switch(eCreature) + { + case 22427: //Zarevhi + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRANSMUTE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 19052: //Lorokeem + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELIXIR, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 17909: //Lauranna Thar'well + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_POTION, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ALCHEMY_SPEC, DoHighUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + } + } +} + +bool GossipSelect_npc_prof_alchemy(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch(uiSender) + { + case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_alchemy(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/*### +# start menues blacksmith +###*/ + +bool HasWeaponSub(Player* pPlayer) +{ + if (pPlayer->HasSpell(S_HAMMER) || pPlayer->HasSpell(S_AXE) || pPlayer->HasSpell(S_SWORD)) + return true; + return false; +} + +bool GossipHello_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + if (pCreature->isVendor()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + if (pCreature->isTrainer()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + + uint32 eCreature = pCreature->GetEntry(); + //WEAPONSMITH & ARMORSMITH + if (pPlayer->GetBaseSkillValue(SKILL_BLACKSMITHING)>=225) + { + switch (eCreature) + { + case 11145: //Myolor Sunderfury + case 11176: //Krathok Moltenfist + if (!pPlayer->HasSpell(S_ARMOR) && !pPlayer->HasSpell(S_WEAPON) && pPlayer->GetReputationRank(REP_ARMOR) >= REP_FRIENDLY) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + if (!pPlayer->HasSpell(S_WEAPON) && !pPlayer->HasSpell(S_ARMOR) && pPlayer->GetReputationRank(REP_WEAPON) >= REP_FRIENDLY) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_LEARN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + break; + case 11146: //Ironus Coldsteel + case 11178: //Borgosh Corebender + if (pPlayer->HasSpell(S_WEAPON)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_WEAPON_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); + break; + case 5164: //Grumnus Steelshaper + case 11177: //Okothos Ironrager + if (pPlayer->HasSpell(S_ARMOR)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ARMOR_UNLEARN, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); + break; + } + } + //WEAPONSMITH SPEC + if (pPlayer->HasSpell(S_WEAPON) && pPlayer->getLevel() > 49 && pPlayer->GetBaseSkillValue(SKILL_BLACKSMITHING)>=250) + { + switch (eCreature) + { + case 11191: //Lilith the Lithe + if (!HasWeaponSub(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 5); + if (pPlayer->HasSpell(S_HAMMER)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8); + break; + case 11192: //Kilram + if (!HasWeaponSub(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 6); + if (pPlayer->HasSpell(S_AXE)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9); + break; + case 11193: //Seril Scourgebane + if (!HasWeaponSub(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 7); + if (pPlayer->HasSpell(S_SWORD)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10); + break; + } + } + + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +void SendActionMenu_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch(uiAction) + { + case GOSSIP_ACTION_TRADE: + pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); + break; + case GOSSIP_ACTION_TRAIN: + pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); + break; + //Learn Armor/Weapon + case GOSSIP_ACTION_INFO_DEF + 1: + if (!pPlayer->HasSpell(S_ARMOR)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_ARMOR, true); + //_Creature->CastSpell(pPlayer, S_REP_ARMOR, true); + } + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + if (!pPlayer->HasSpell(S_WEAPON)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_WEAPON, true); + //_Creature->CastSpell(pPlayer, S_REP_WEAPON, true); + } + pPlayer->CLOSE_GOSSIP_MENU(); + break; + //Unlearn Armor/Weapon + case GOSSIP_ACTION_INFO_DEF + 3: + if (HasWeaponSub(pPlayer)) + { + //unknown textID (TALK_MUST_UNLEARN_WEAPON) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + } + else if (EquippedOk(pPlayer,S_UNLEARN_WEAPON)) + { + if (pPlayer->GetMoney() >= DoLowUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_WEAPON, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_WEAPON); + pPlayer->ModifyMoney(-DoLowUnlearnCost(pPlayer)); + pCreature->CastSpell(pPlayer, S_REP_ARMOR, true); + pPlayer->CLOSE_GOSSIP_MENU(); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } + else + { + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + } + break; + case GOSSIP_ACTION_INFO_DEF + 4: + if (EquippedOk(pPlayer,S_UNLEARN_ARMOR)) + { + if (pPlayer->GetMoney() >= DoLowUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_ARMOR, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_ARMOR); + pPlayer->ModifyMoney(-DoLowUnlearnCost(pPlayer)); + pCreature->CastSpell(pPlayer, S_REP_WEAPON, true); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + //Learn Hammer/Axe/Sword + case GOSSIP_ACTION_INFO_DEF + 5: + pPlayer->CastSpell(pPlayer, S_LEARN_HAMMER, true); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 6: + pPlayer->CastSpell(pPlayer, S_LEARN_AXE, true); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 7: + pPlayer->CastSpell(pPlayer, S_LEARN_SWORD, true); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + //Unlearn Hammer/Axe/Sword + case GOSSIP_ACTION_INFO_DEF + 8: + if (EquippedOk(pPlayer,S_UNLEARN_HAMMER)) + { + if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_HAMMER, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_HAMMER); + pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 9: + if (EquippedOk(pPlayer,S_UNLEARN_AXE)) + { + if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_AXE, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_AXE); + pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 10: + if (EquippedOk(pPlayer,S_UNLEARN_SWORD)) + { + if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_SWORD, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SWORD); + pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + } +} + +void SendConfirmLearn_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction) + { + uint32 eCreature = pCreature->GetEntry(); + switch(eCreature) + { + case 11191: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_HAMMER, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID (TALK_HAMMER_LEARN) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 11192: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_AXE, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID (TALK_AXE_LEARN) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 11193: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SWORD, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID (TALK_SWORD_LEARN) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + } + } +} + +void SendConfirmUnlearn_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction) + { + uint32 eCreature = pCreature->GetEntry(); + switch(eCreature) + { + case 11146: //Ironus Coldsteel + case 11178: //Borgosh Corebender + case 5164: //Grumnus Steelshaper + case 11177: //Okothos Ironrager + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SMITH_SPEC, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_ARMORORWEAPON, DoLowUnlearnCost(pPlayer),false); + //unknown textID (TALK_UNLEARN_AXEORWEAPON) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + + case 11191: + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_HAMMER, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false); + //unknown textID (TALK_HAMMER_UNLEARN) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 11192: + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_AXE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false); + //unknown textID (TALK_AXE_UNLEARN) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 11193: + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SWORD, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_WEAPON_SPEC, DoMedUnlearnCost(pPlayer),false); + //unknown textID (TALK_SWORD_UNLEARN) + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + } + } +} + +bool GossipSelect_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch(uiSender) + { + case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_blacksmith(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/*bool QuestComplete_npc_prof_blacksmith(Player* pPlayer, Creature* pCreature, Quest const *_Quest) +{ + if ((_Quest->GetQuestId() == 5283) || (_Quest->GetQuestId() == 5301)) //armorsmith + pCreature->CastSpell(pPlayer, 17451, true); + + if ((_Quest->GetQuestId() == 5284) || (_Quest->GetQuestId() == 5302)) //weaponsmith + pCreature->CastSpell(pPlayer, 17452, true); + + return true; +}*/ + +/*### +# engineering trinkets +###*/ + +enum +{ + NPC_ZAP = 14742, + NPC_JHORDY = 14743, + NPC_KABLAM = 21493, + NPC_SMILES = 21494, + + SPELL_LEARN_TO_EVERLOOK = 23490, + SPELL_LEARN_TO_GADGET = 23491, + SPELL_LEARN_TO_AREA52 = 36956, + SPELL_LEARN_TO_TOSHLEY = 36957, + + SPELL_TO_EVERLOOK = 23486, + SPELL_TO_GADGET = 23489, + SPELL_TO_AREA52 = 36954, + SPELL_TO_TOSHLEY = 36955, + + ITEM_GNOMISH_CARD = 10790, + ITEM_GOBLIN_CARD = 10791 +}; + +#define GOSSIP_ITEM_ZAP "[PH] Unknown" +#define GOSSIP_ITEM_JHORDY "I must build a beacon for this marvelous device!" +#define GOSSIP_ITEM_KABLAM "[PH] Unknown" +#define GOSSIP_ITEM_SMILES "[PH] Unknown" + +bool GossipHello_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature) +{ + uint32 NpcTextId = 0; + std::string GossipItem; + bool CanLearn = false; + + if (pPlayer->HasSkill(SKILL_ENGINERING)) + { + switch(pCreature->GetEntry()) + { + case NPC_ZAP: + NpcTextId = 7249; + if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GOBLIN)) + { + if (!pPlayer->HasSpell(SPELL_TO_EVERLOOK)) + { + CanLearn = true; + GossipItem = GOSSIP_ITEM_ZAP; + } + else if (pPlayer->HasSpell(SPELL_TO_EVERLOOK)) + NpcTextId = 0; + } + break; + case NPC_JHORDY: + NpcTextId = 7251; + if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 260 && pPlayer->HasSpell(S_GNOMISH)) + { + if (!pPlayer->HasSpell(SPELL_TO_GADGET)) + { + CanLearn = true; + GossipItem = GOSSIP_ITEM_JHORDY; + } + else if (pPlayer->HasSpell(SPELL_TO_GADGET)) + NpcTextId = 7252; + } + break; + case NPC_KABLAM: + NpcTextId = 10365; + if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GOBLIN)) + { + if (!pPlayer->HasSpell(SPELL_TO_AREA52)) + { + CanLearn = true; + GossipItem = GOSSIP_ITEM_KABLAM; + } + else if (pPlayer->HasSpell(SPELL_TO_AREA52)) + NpcTextId = 0; + } + break; + case NPC_SMILES: + NpcTextId = 10363; + if (pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 350 && pPlayer->HasSpell(S_GNOMISH)) + { + if (!pPlayer->HasSpell(SPELL_TO_TOSHLEY)) + { + CanLearn = true; + GossipItem = GOSSIP_ITEM_SMILES; + } + else if (pPlayer->HasSpell(SPELL_TO_TOSHLEY)) + NpcTextId = 0; + } + break; + } + } + + if (CanLearn) + { + if (pPlayer->HasItemCount(ITEM_GOBLIN_CARD,1) || pPlayer->HasItemCount(ITEM_GNOMISH_CARD,1)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GossipItem, pCreature->GetEntry(), GOSSIP_ACTION_INFO_DEF+1); + } + + pPlayer->SEND_GOSSIP_MENU(NpcTextId ? NpcTextId : pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +bool GossipSelect_npc_engineering_tele_trinket(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF+1) + pPlayer->CLOSE_GOSSIP_MENU(); + + if (uiSender != pCreature->GetEntry()) + return true; + + switch(uiSender) + { + case NPC_ZAP: + pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_EVERLOOK, false); + break; + case NPC_JHORDY: + pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_GADGET, false); + break; + case NPC_KABLAM: + pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_AREA52, false); + break; + case NPC_SMILES: + pPlayer->CastSpell(pPlayer, SPELL_LEARN_TO_TOSHLEY, false); + break; + } + + return true; +} + +/*### +# start menues leatherworking +###*/ + +bool GossipHello_npc_prof_leather(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + if (pCreature->isVendor()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + if (pCreature->isTrainer()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + + uint32 eCreature = pCreature->GetEntry(); + + if (pPlayer->HasSkill(SKILL_LEATHERWORKING) && pPlayer->GetBaseSkillValue(SKILL_LEATHERWORKING)>=250 && pPlayer->getLevel() > 49) + { + switch (eCreature) + { + case 7866: //Peter Galen + case 7867: //Thorkaf Dragoneye + if (pPlayer->HasSpell(S_DRAGON)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1); + break; + case 7868: //Sarah Tanner + case 7869: //Brumn Winterhoof + if (pPlayer->HasSpell(S_ELEMENTAL)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2); + break; + case 7870: //Caryssia Moonhunter + case 7871: //Se'Jib + if (pPlayer->HasSpell(S_TRIBAL)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); + break; + } + } + + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +void SendActionMenu_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch(uiAction) + { + case GOSSIP_ACTION_TRADE: + pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); + break; + case GOSSIP_ACTION_TRAIN: + pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); + break; + //Unlearn Leather + case GOSSIP_ACTION_INFO_DEF + 1: + if (EquippedOk(pPlayer,S_UNLEARN_DRAGON)) + { + if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_DRAGON, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_DRAGON); + pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + if (EquippedOk(pPlayer,S_UNLEARN_ELEMENTAL)) + { + if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_ELEMENTAL, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_ELEMENTAL); + pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 3: + if (EquippedOk(pPlayer,S_UNLEARN_TRIBAL)) + { + if (pPlayer->GetMoney() >= DoMedUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_TRIBAL, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_TRIBAL); + pPlayer->ModifyMoney(-DoMedUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + } +} + +void SendConfirmUnlearn_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction) + { + uint32 eCreature = pCreature->GetEntry(); + switch(eCreature) + { + case 7866: //Peter Galen + case 7867: //Thorkaf Dragoneye + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_DRAGON, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 7868: //Sarah Tanner + case 7869: //Brumn Winterhoof + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_ELEMENTAL, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 7870: //Caryssia Moonhunter + case 7871: //Se'Jib + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_TRIBAL, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_LEATHER_SPEC, DoMedUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + } + } +} + +bool GossipSelect_npc_prof_leather(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch(uiSender) + { + case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_leather(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_leather(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_leather(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/*### +# start menues tailoring +###*/ + +bool HasTailorSpell(Player* pPlayer) +{ + if (pPlayer->HasSpell(S_MOONCLOTH) || pPlayer->HasSpell(S_SHADOWEAVE) || pPlayer->HasSpell(S_SPELLFIRE)) + return true; + return false; +} + +bool GossipHello_npc_prof_tailor(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + if (pCreature->isVendor()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + if (pCreature->isTrainer()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + + uint32 eCreature = pCreature->GetEntry(); + //TAILORING SPEC + if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING)>=350 && pPlayer->getLevel() > 59) + { + if (pPlayer->GetQuestRewardStatus(10831) || pPlayer->GetQuestRewardStatus(10832) || pPlayer->GetQuestRewardStatus(10833)) + { + switch (eCreature) + { + case 22213: //Gidge Spellweaver + if (!HasTailorSpell(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 1); + if (pPlayer->HasSpell(S_SPELLFIRE)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); + break; + case 22208: //Nasmara Moonsong + if (!HasTailorSpell(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 2); + if (pPlayer->HasSpell(S_MOONCLOTH)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); + break; + case 22212: //Andrion Darkspinner + if (!HasTailorSpell(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_LEARN, GOSSIP_ACTION_INFO_DEF + 3); + if (pPlayer->HasSpell(S_SHADOWEAVE)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6); + break; + } + } + } + + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +void SendActionMenu_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch(uiAction) + { + case GOSSIP_ACTION_TRADE: + pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); + break; + case GOSSIP_ACTION_TRAIN: + pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); + break; + //Learn Tailor + case GOSSIP_ACTION_INFO_DEF + 1: + if (!pPlayer->HasSpell(S_SPELLFIRE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_SPELLFIRE, true); + pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + if (!pPlayer->HasSpell(S_MOONCLOTH) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_MOONCLOTH, true); + pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 3: + if (!pPlayer->HasSpell(S_SHADOWEAVE) && pPlayer->GetMoney() >= DoLearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_LEARN_SHADOWEAVE, true); + pPlayer->ModifyMoney(-DoLearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + //Unlearn Tailor + case GOSSIP_ACTION_INFO_DEF + 4: + if (EquippedOk(pPlayer,S_UNLEARN_SPELLFIRE)) + { + if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_SPELLFIRE, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SPELLFIRE); + pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 5: + if (EquippedOk(pPlayer,S_UNLEARN_MOONCLOTH)) + { + if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_MOONCLOTH, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_MOONCLOTH); + pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + case GOSSIP_ACTION_INFO_DEF + 6: + if (EquippedOk(pPlayer,S_UNLEARN_SHADOWEAVE)) + { + if (pPlayer->GetMoney() >= DoHighUnlearnCost(pPlayer)) + { + pPlayer->CastSpell(pPlayer, S_UNLEARN_SHADOWEAVE, true); + ProfessionUnlearnSpells(pPlayer, S_UNLEARN_SHADOWEAVE); + pPlayer->ModifyMoney(-DoHighUnlearnCost(pPlayer)); + } else + pPlayer->SendBuyError(BUY_ERR_NOT_ENOUGHT_MONEY, pCreature, 0, 0); + } else + pPlayer->SendEquipError(EQUIP_ERR_CANT_DO_RIGHT_NOW,NULL,NULL); + pPlayer->CLOSE_GOSSIP_MENU(); + break; + } +} + +void SendConfirmLearn_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction) + { + uint32 eCreature = pCreature->GetEntry(); + switch(eCreature) + { + case 22213: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 22208: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 22212: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_LEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, uiAction); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + } + } +} + +void SendConfirmUnlearn_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction) + { + uint32 eCreature = pCreature->GetEntry(); + switch(eCreature) + { + case 22213: //Gidge Spellweaver + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SPELLFIRE, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 22208: //Nasmara Moonsong + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_MOONCLOTH, GOSSIP_SENDER_CHECK, uiAction, BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + case 22212: //Andrion Darkspinner + pPlayer->ADD_GOSSIP_ITEM_EXTENDED(0, GOSSIP_UNLEARN_SHADOWEAVE, GOSSIP_SENDER_CHECK, uiAction,BOX_UNLEARN_TAILOR_SPEC, DoHighUnlearnCost(pPlayer),false); + //unknown textID () + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + break; + } + } +} + +bool GossipSelect_npc_prof_tailor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch(uiSender) + { + case GOSSIP_SENDER_MAIN: SendActionMenu_npc_prof_tailor(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_LEARN: SendConfirmLearn_npc_prof_tailor(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_UNLEARN: SendConfirmUnlearn_npc_prof_tailor(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_CHECK: SendActionMenu_npc_prof_tailor(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/*### +# start menues for GO (engineering and leatherworking) +###*/ + +/*bool GOHello_go_soothsaying_for_dummies(Player* pPlayer, GameObject* pGo) +{ + pPlayer->PlayerTalkClass->GetGossipMenu()->AddMenuItem(0,GOSSIP_LEARN_DRAGON, GOSSIP_SENDER_INFO, GOSSIP_ACTION_INFO_DEF, "", 0); + + pPlayer->SEND_GOSSIP_MENU(5584, pGo->GetGUID()); + + return true; +}*/ + +/*### +# +###*/ + +void AddSC_npc_professions() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="npc_prof_alchemy"; + newscript->pGossipHello = &GossipHello_npc_prof_alchemy; + newscript->pGossipSelect = &GossipSelect_npc_prof_alchemy; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_prof_blacksmith"; + newscript->pGossipHello = &GossipHello_npc_prof_blacksmith; + newscript->pGossipSelect = &GossipSelect_npc_prof_blacksmith; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_engineering_tele_trinket"; + newscript->pGossipHello = &GossipHello_npc_engineering_tele_trinket; + newscript->pGossipSelect = &GossipSelect_npc_engineering_tele_trinket; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_prof_leather"; + newscript->pGossipHello = &GossipHello_npc_prof_leather; + newscript->pGossipSelect = &GossipSelect_npc_prof_leather; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_prof_tailor"; + newscript->pGossipHello = &GossipHello_npc_prof_tailor; + newscript->pGossipSelect = &GossipSelect_npc_prof_tailor; + newscript->RegisterSelf(); + + /*newscript = new Script; + newscript->Name="go_soothsaying_for_dummies"; + newscript->pGOHello = &GOHello_go_soothsaying_for_dummies; + //newscript->pGossipSelect = &GossipSelect_go_soothsaying_for_dummies; + newscript->RegisterSelf();*/ +} + diff --git a/src/bindings/scripts/scripts/world/npc_taxi.cpp b/src/bindings/scripts/scripts/world/npc_taxi.cpp new file mode 100644 index 00000000000..161b663fbb1 --- /dev/null +++ b/src/bindings/scripts/scripts/world/npc_taxi.cpp @@ -0,0 +1,262 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Npc_Taxi +SD%Complete: 0% +SDComment: To be used for taxi NPCs that are located globally. +SDCategory: NPCs +EndScriptData +*/ + +#include "precompiled.h" + +bool GossipHello_npc_taxi(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + + switch(pCreature->GetEntry()) { + case 17435: // Azuremyst Isle - Susurrus + if (pPlayer->HasItemCount(23843,1,true)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I am ready.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); + break; + case 20903: // Netherstorm - Protectorate Nether Drake + if (pPlayer->GetQuestStatus(10438) == QUEST_STATUS_INCOMPLETE && pPlayer->HasItemCount(29778,1)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I'm ready to fly! Take me up, dragon!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + break; + case 18725: // Old Hillsbrad Foothills - Brazen + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I am ready to go to Durnholde Keep.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + break; + case 29154: // Stormwind City - Thargold Ironwing + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I'd like to take a flight around Stormwind Harbor.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + break; + case 19409: // Hellfire Peninsula - Wing Commander Dabir'ee + //Mission: The Murketh and Shaadraz Gateways + if (pPlayer->GetQuestStatus(10146) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Murketh and Shaadraz Gateways", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + + //Shatter Point + if (!pPlayer->GetQuestRewardStatus(10340)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Shatter Point", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + break; + case 20235: // Hellfire Peninsula - Gryphoneer Windbellow + //Mission: The Abyssal Shelf || Return to the Abyssal Shelf + if (pPlayer->GetQuestStatus(10163) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(10346) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to The Abyssal Shelf", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + + //Go to the Front + if (pPlayer->GetQuestStatus(10382) != QUEST_STATUS_NONE && !pPlayer->GetQuestRewardStatus(10382)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Honor Point", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + break; + case 19401: // Hellfire Peninsula - Wing Commander Brack + //Mission: The Murketh and Shaadraz Gateways + if (pPlayer->GetQuestStatus(10129) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Murketh and Shaadraz Gateways", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + + //Mission: The Abyssal Shelf || Return to the Abyssal Shelf + if (pPlayer->GetQuestStatus(10162) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(10347) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to The Abyssal Shelf", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + + //Spinebreaker Post + if (pPlayer->GetQuestStatus(10242) == QUEST_STATUS_COMPLETE && !pPlayer->GetQuestRewardStatus(10242)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Spinebreaker Post", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + break; + case 23413: // Blade's Edge Mountains - Skyguard Handler Irena + if (pPlayer->GetReputationRank(1031) >= REP_HONORED) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Skettis please", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + break; + case 25059: // Isle of Quel'Danas - Ayren Cloudbreaker + if (pPlayer->GetQuestStatus(11532) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(11533) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Speaking of uiAction, I've been ordered to undertake an air strike.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + + if (pPlayer->GetQuestStatus(11542) == QUEST_STATUS_INCOMPLETE || pPlayer->GetQuestStatus(11543) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I need to intercept the Dawnblade reinforcements.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); + break; + case 25236: // Isle of Quel'Danas - Unrestrained Dragonhawk + if (pPlayer->GetQuestStatus(11542) == QUEST_STATUS_COMPLETE || pPlayer->GetQuestStatus(11543) == QUEST_STATUS_COMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14); + break; + case 20162: // Netherstorm - Veronia + //Behind Enemy Lines + if (pPlayer->GetQuestStatus(10652) && !pPlayer->GetQuestRewardStatus(10652)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Manaforge Coruu please", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15); + break; + case 23415: // Terokkar Forest - Skyguard Handler Deesak + if (pPlayer->GetReputationRank(1031) >= REP_HONORED) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Fly me to Ogri'la please", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 16); + break; + case 27575: // Dragonblight - Lord Afrasastrasz + // middle -> ground + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I would like to take a flight to the ground, Lord Of Afrasastrasz.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 17); + // middle -> top + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "My Lord, I must go to the upper floor of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 18); + break; + case 26443: // Dragonblight - Tariolstrasz //need to check if quests are required before gossip available (12123, 12124) + // ground -> top + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "My Lord, I must go to the upper floor of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 19); + // ground -> middle + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Can you spare a drake to travel to Lord Of Afrasastrasz, in the middle of the temple?", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 20); + break; + case 26949: // Dragonblight - Torastrasza + // top -> middle + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I would like to see Lord Of Afrasastrasz, in the middle of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 21); + // top -> ground + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Yes, Please. I would like to return to the ground floor of the temple.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 22); + break; + case 23816: // Howling Fjord - Bat Handler Camille + if (!pPlayer->GetQuestRewardStatus(11229)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I need to fly to the Windrunner Official business!", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 23); + if (pPlayer->GetQuestStatus(11170) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "I need to commandeer a riding bat for special assignment for us.", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 24); + break; + case 23704: // Dustwallow Marsh - Cassa Crimsonwing + if (pPlayer->GetQuestStatus(11142) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT,"",GOSSIP_SENDER_MAIN,GOSSIP_ACTION_INFO_DEF+25); + break; + } + + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +bool GossipSelect_npc_taxi(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch(uiAction) { + case GOSSIP_ACTION_INFO_DEF: + //spellId is correct, however it gives flight a somewhat funny effect //TaxiPath 506. + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,32474,true); + break; + case GOSSIP_ACTION_INFO_DEF + 1: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(627); //TaxiPath 627 (possibly 627+628(152->153->154->155)) + break; + case GOSSIP_ACTION_INFO_DEF + 2: + if (!pPlayer->HasItemCount(25853,1)) { + pPlayer->SEND_GOSSIP_MENU(9780, pCreature->GetGUID()); + } else { + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(534); //TaxiPath 534 + } + break; + case GOSSIP_ACTION_INFO_DEF + 3: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->GetSession()->SendDoFlight(1149, 1041); + break; + case GOSSIP_ACTION_INFO_DEF + 4: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,33768,true); //TaxiPath 585 (Gateways Murket and Shaadraz) + break; + case GOSSIP_ACTION_INFO_DEF + 5: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,35069,true); //TaxiPath 612 (Taxi - Hellfire Peninsula - Expedition Point to Shatter Point) + break; + case GOSSIP_ACTION_INFO_DEF + 6: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,33899,true); //TaxiPath 589 (Aerial Assault Flight (Alliance)) + break; + case GOSSIP_ACTION_INFO_DEF + 7: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,35065,true); //TaxiPath 607 (Taxi - Hellfire Peninsula - Shatter Point to Beach Head) + break; + case GOSSIP_ACTION_INFO_DEF + 8: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,33659,true); //TaxiPath 584 (Gateways Murket and Shaadraz) + break; + case GOSSIP_ACTION_INFO_DEF + 9: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,33825,true); //TaxiPath 587 (Aerial Assault Flight (Horde)) + break; + case GOSSIP_ACTION_INFO_DEF + 10: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,34578,true); //TaxiPath 604 (Taxi - Reaver's Fall to Spinebreaker Ridge) + break; + case GOSSIP_ACTION_INFO_DEF + 11: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,41278,true); //TaxiPath 706 + break; + case GOSSIP_ACTION_INFO_DEF + 12: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,45071,true); //TaxiPath 779 + break; + case GOSSIP_ACTION_INFO_DEF + 13: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,45113,true); //TaxiPath 784 + break; + case GOSSIP_ACTION_INFO_DEF + 14: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,45353,true); //TaxiPath 788 + break; + case GOSSIP_ACTION_INFO_DEF + 15: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,34905,true); //TaxiPath 606 + break; + case GOSSIP_ACTION_INFO_DEF + 16: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,41279,true); //TaxiPath 705 (Taxi - Skettis to Skyguard Outpost) + break; + case GOSSIP_ACTION_INFO_DEF + 17: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(882); + break; + case GOSSIP_ACTION_INFO_DEF + 18: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(881); + break; + case GOSSIP_ACTION_INFO_DEF + 19: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(878); + break; + case GOSSIP_ACTION_INFO_DEF + 20: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(883); + break; + case GOSSIP_ACTION_INFO_DEF + 21: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(880); + break; + case GOSSIP_ACTION_INFO_DEF + 22: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(879); + break; + case GOSSIP_ACTION_INFO_DEF + 23: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,43074,true); //TaxiPath 736 + break; + case GOSSIP_ACTION_INFO_DEF + 24: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->ActivateTaxiPathTo(738); + break; + case GOSSIP_ACTION_INFO_DEF + 25: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,42295,true); + break; + } + + return true; +} + +void AddSC_npc_taxi() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="npc_taxi"; + newscript->pGossipHello = &GossipHello_npc_taxi; + newscript->pGossipSelect = &GossipSelect_npc_taxi; + newscript->RegisterSelf(); +} diff --git a/src/bindings/scripts/scripts/world/npcs_special.cpp b/src/bindings/scripts/scripts/world/npcs_special.cpp new file mode 100644 index 00000000000..64f89628528 --- /dev/null +++ b/src/bindings/scripts/scripts/world/npcs_special.cpp @@ -0,0 +1,1965 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Npcs_Special +SD%Complete: 100 +SDComment: To be used for special NPCs that are located globally. +SDCategory: NPCs +EndScriptData +*/ + +/* ContentData +npc_air_force_bots 80% support for misc (invisible) guard bots in areas where player allowed to fly. Summon guards after a preset time if tagged by spell +npc_chicken_cluck 100% support for quest 3861 (Cluck!) +npc_dancing_flames 100% midsummer event NPC +npc_guardian 100% guardianAI used to prevent players from accessing off-limits areas. Not in use by SD2 +npc_garments_of_quests 80% NPC's related to all Garments of-quests 5621, 5624, 5625, 5648, 565 +npc_injured_patient 100% patients for triage-quests (6622 and 6624) +npc_doctor 100% Gustaf Vanhowzen and Gregory Victor, quest 6622 and 6624 (Triage) +npc_kingdom_of_dalaran_quests Misc NPC's gossip option related to quests 12791, 12794 and 12796 +npc_mount_vendor 100% Regular mount vendors all over the world. Display gossip if player doesn't meet the requirements to buy +npc_rogue_trainer 80% Scripted trainers, so they are able to offer item 17126 for class quest 6681 +npc_sayge 100% Darkmoon event fortune teller, buff player based on answers given +npc_snake_trap_serpents 80% AI for snakes that summoned by Snake Trap +EndContentData */ + +#include "precompiled.h" +#include "../npc/npc_escortAI.h" +#include "ObjectMgr.h" + +/*######## +# npc_air_force_bots +#########*/ + +enum SpawnType +{ + SPAWNTYPE_TRIPWIRE_ROOFTOP, // no warning, summon Creature at smaller range + SPAWNTYPE_ALARMBOT, // cast guards mark and summon npc - if player shows up with that buff duration < 5 seconds attack +}; + +struct SpawnAssociation +{ + uint32 m_uiThisCreatureEntry; + uint32 m_uiSpawnedCreatureEntry; + SpawnType m_SpawnType; +}; + +enum +{ + SPELL_GUARDS_MARK = 38067, + AURA_DURATION_TIME_LEFT = 5000 +}; + +const float RANGE_TRIPWIRE = 15.0f; +const float RANGE_GUARDS_MARK = 50.0f; + +SpawnAssociation m_aSpawnAssociations[] = +{ + {2614, 15241, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Alliance) + {2615, 15242, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Horde) + {21974, 21976, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Area 52) + {21993, 15242, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Horde - Bat Rider) + {21996, 15241, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Alliance - Gryphon) + {21997, 21976, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Goblin - Area 52 - Zeppelin) + {21999, 15241, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Alliance) + {22001, 15242, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Horde) + {22002, 15242, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Ground (Horde) + {22003, 15241, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Ground (Alliance) + {22063, 21976, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Goblin - Area 52) + {22065, 22064, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Ethereal - Stormspire) + {22066, 22067, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Scryer - Dragonhawk) + {22068, 22064, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Ethereal - Stormspire) + {22069, 22064, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Stormspire) + {22070, 22067, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Scryer) + {22071, 22067, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Scryer) + {22078, 22077, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Aldor) + {22079, 22077, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Aldor - Gryphon) + {22080, 22077, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Aldor) + {22086, 22085, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Sporeggar) + {22087, 22085, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Sporeggar - Spore Bat) + {22088, 22085, SPAWNTYPE_TRIPWIRE_ROOFTOP}, //Air Force Trip Wire - Rooftop (Sporeggar) + {22090, 22089, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Toshley's Station - Flying Machine) + {22124, 22122, SPAWNTYPE_ALARMBOT}, //Air Force Alarm Bot (Cenarion) + {22125, 22122, SPAWNTYPE_ALARMBOT}, //Air Force Guard Post (Cenarion - Stormcrow) + {22126, 22122, SPAWNTYPE_ALARMBOT} //Air Force Trip Wire - Rooftop (Cenarion Expedition) +}; + +struct TRINITY_DLL_DECL npc_air_force_botsAI : public ScriptedAI +{ + npc_air_force_botsAI(Creature* pCreature) : ScriptedAI(pCreature) + { + m_pSpawnAssoc = NULL; + m_uiSpawnedGUID = 0; + + // find the correct spawnhandling + static uint32 uiEntryCount = sizeof(m_aSpawnAssociations)/sizeof(SpawnAssociation); + + for (uint8 i=0; iGetEntry()) + { + m_pSpawnAssoc = &m_aSpawnAssociations[i]; + break; + } + } + + if (!m_pSpawnAssoc) + error_db_log("TCSR: Creature template entry %u has ScriptName npc_air_force_bots, but it's not handled by that script", pCreature->GetEntry()); + else + { + CreatureInfo const* spawnedTemplate = GetCreatureTemplateStore(m_pSpawnAssoc->m_uiSpawnedCreatureEntry); + + if (!spawnedTemplate) + { + m_pSpawnAssoc = NULL; + error_db_log("TCSR: Creature template entry %u does not exist in DB, which is required by npc_air_force_bots", m_pSpawnAssoc->m_uiSpawnedCreatureEntry); + return; + } + } + } + + SpawnAssociation* m_pSpawnAssoc; + uint64 m_uiSpawnedGUID; + + void Reset() { } + + Creature* SummonGuard() + { + Creature* pSummoned = m_creature->SummonCreature(m_pSpawnAssoc->m_uiSpawnedCreatureEntry, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); + + if (pSummoned) + m_uiSpawnedGUID = pSummoned->GetGUID(); + else + { + error_db_log("TCSR: npc_air_force_bots: wasn't able to spawn Creature %u", m_pSpawnAssoc->m_uiSpawnedCreatureEntry); + m_pSpawnAssoc = NULL; + } + + return pSummoned; + } + + Creature* GetSummonedGuard() + { + Creature* pCreature = Unit::GetCreature(*m_creature, m_uiSpawnedGUID); + + if (pCreature && pCreature->isAlive()) + return pCreature; + + return NULL; + } + + void MoveInLineOfSight(Unit* pWho) + { + if (!m_pSpawnAssoc) + return; + + if (pWho->isTargetableForAttack() && m_creature->IsHostileTo(pWho)) + { + Player* pPlayerTarget = pWho->GetTypeId() == TYPEID_PLAYER ? CAST_PLR(pWho) : NULL; + + // airforce guards only spawn for players + if (!pPlayerTarget) + return; + + Creature* pLastSpawnedGuard = m_uiSpawnedGUID == 0 ? NULL : GetSummonedGuard(); + + // prevent calling Unit::GetUnit at next MoveInLineOfSight call - speedup + if (!pLastSpawnedGuard) + m_uiSpawnedGUID = 0; + + switch(m_pSpawnAssoc->m_SpawnType) + { + case SPAWNTYPE_ALARMBOT: + { + if (!pWho->IsWithinDistInMap(m_creature, RANGE_GUARDS_MARK)) + return; + + Aura* pMarkAura = pWho->GetAura(SPELL_GUARDS_MARK, 0); + if (pMarkAura) + { + // the target wasn't able to move out of our range within 25 seconds + if (!pLastSpawnedGuard) + { + pLastSpawnedGuard = SummonGuard(); + + if (!pLastSpawnedGuard) + return; + } + + if (pMarkAura->GetAuraDuration() < AURA_DURATION_TIME_LEFT) + { + if (!pLastSpawnedGuard->getVictim()) + pLastSpawnedGuard->AI()->AttackStart(pWho); + } + } + else + { + if (!pLastSpawnedGuard) + pLastSpawnedGuard = SummonGuard(); + + if (!pLastSpawnedGuard) + return; + + pLastSpawnedGuard->CastSpell(pWho, SPELL_GUARDS_MARK, true); + } + break; + } + case SPAWNTYPE_TRIPWIRE_ROOFTOP: + { + if (!pWho->IsWithinDistInMap(m_creature, RANGE_TRIPWIRE)) + return; + + if (!pLastSpawnedGuard) + pLastSpawnedGuard = SummonGuard(); + + if (!pLastSpawnedGuard) + return; + + // ROOFTOP only triggers if the player is on the ground + if (!pPlayerTarget->IsFlying()) + { + if (!pLastSpawnedGuard->getVictim()) + pLastSpawnedGuard->AI()->AttackStart(pWho); + } + break; + } + } + } + } +}; + +CreatureAI* GetAI_npc_air_force_bots(Creature* pCreature) +{ + return new npc_air_force_botsAI(pCreature); +} + +/*######## +# npc_chicken_cluck +#########*/ + +#define EMOTE_HELLO -1070004 +#define EMOTE_CLUCK_TEXT -1070006 + +#define QUEST_CLUCK 3861 +#define FACTION_FRIENDLY 35 +#define FACTION_CHICKEN 31 + +struct TRINITY_DLL_DECL npc_chicken_cluckAI : public ScriptedAI +{ + npc_chicken_cluckAI(Creature *c) : ScriptedAI(c) {} + + uint32 ResetFlagTimer; + + void Reset() + { + ResetFlagTimer = 120000; + m_creature->setFaction(FACTION_CHICKEN); + m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + } + + void EnterCombat(Unit *who) {} + + void UpdateAI(const uint32 diff) + { + // Reset flags after a certain time has passed so that the next player has to start the 'event' again + if (m_creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER)) + { + if (ResetFlagTimer < diff) + { + EnterEvadeMode(); + return; + }else ResetFlagTimer -= diff; + } + + if (UpdateVictim()) + DoMeleeAttackIfReady(); + } + + void ReceiveEmote(Player* pPlayer, uint32 emote) + { + switch(emote) + { + case TEXTEMOTE_CHICKEN: + if (pPlayer->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_NONE && rand()%30 == 1) + { + m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + m_creature->setFaction(FACTION_FRIENDLY); + DoScriptText(EMOTE_HELLO, m_creature); + } + break; + case TEXTEMOTE_CHEER: + if (pPlayer->GetQuestStatus(QUEST_CLUCK) == QUEST_STATUS_COMPLETE) + { + m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER); + m_creature->setFaction(FACTION_FRIENDLY); + DoScriptText(EMOTE_CLUCK_TEXT, m_creature); + } + break; + } + } +}; + +CreatureAI* GetAI_npc_chicken_cluck(Creature* pCreature) +{ + return new npc_chicken_cluckAI(pCreature); +} + +bool QuestAccept_npc_chicken_cluck(Player* pPlayer, Creature* pCreature, const Quest *_Quest) +{ + if (_Quest->GetQuestId() == QUEST_CLUCK) + CAST_AI(npc_chicken_cluckAI, pCreature->AI())->Reset(); + + return true; +} + +bool QuestComplete_npc_chicken_cluck(Player* pPlayer, Creature* pCreature, const Quest *_Quest) +{ + if (_Quest->GetQuestId() == QUEST_CLUCK) + CAST_AI(npc_chicken_cluckAI, pCreature->AI())->Reset(); + + return true; +} + +/*###### +## npc_dancing_flames +######*/ + +#define SPELL_BRAZIER 45423 +#define SPELL_SEDUCTION 47057 +#define SPELL_FIERY_AURA 45427 + +struct TRINITY_DLL_DECL npc_dancing_flamesAI : public ScriptedAI +{ + npc_dancing_flamesAI(Creature *c) : ScriptedAI(c) {} + + bool active; + uint32 can_iteract; + + void Reset() + { + active = true; + can_iteract = 3500; + DoCast(m_creature,SPELL_BRAZIER,true); + DoCast(m_creature,SPELL_FIERY_AURA,false); + float x, y, z; + m_creature->GetPosition(x,y,z); + m_creature->Relocate(x,y,z + 0.94f); + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); + m_creature->HandleEmoteCommand(EMOTE_ONESHOT_DANCE); + WorldPacket data; //send update position to client + m_creature->BuildHeartBeatMsg(&data); + m_creature->SendMessageToSet(&data,true); + } + + void UpdateAI(const uint32 diff) + { + if (!active) + { + if (can_iteract <= diff){ + active = true; + can_iteract = 3500; + m_creature->HandleEmoteCommand(EMOTE_ONESHOT_DANCE); + }else can_iteract -= diff; + } + } + + void EnterCombat(Unit* who){} + + void ReceiveEmote(Player* pPlayer, uint32 emote) + { + if (m_creature->IsWithinLOS(pPlayer->GetPositionX(),pPlayer->GetPositionY(),pPlayer->GetPositionZ()) && m_creature->IsWithinDistInMap(pPlayer,30.0f)) + { + m_creature->SetInFront(pPlayer); + active = false; + + WorldPacket data; + m_creature->BuildHeartBeatMsg(&data); + m_creature->SendMessageToSet(&data,true); + switch(emote) + { + case TEXTEMOTE_KISS: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_SHY); break; + case TEXTEMOTE_WAVE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_WAVE); break; + case TEXTEMOTE_BOW: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_BOW); break; + case TEXTEMOTE_JOKE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); break; + case TEXTEMOTE_DANCE: + { + if (!pPlayer->HasAura(SPELL_SEDUCTION)) + m_creature->CastSpell(pPlayer,SPELL_SEDUCTION,true); + } + break; + } + } + } +}; + +CreatureAI* GetAI_npc_dancing_flames(Creature* pCreature) +{ + return new npc_dancing_flamesAI(pCreature); +} + +/*###### +## Triage quest +######*/ + +#define SAY_DOC1 -1000201 +#define SAY_DOC2 -1000202 +#define SAY_DOC3 -1000203 + +#define DOCTOR_ALLIANCE 12939 +#define DOCTOR_HORDE 12920 +#define ALLIANCE_COORDS 7 +#define HORDE_COORDS 6 + +struct Location +{ + float x, y, z, o; +}; + +static Location AllianceCoords[]= +{ + {-3757.38, -4533.05, 14.16, 3.62}, // Top-far-right bunk as seen from entrance + {-3754.36, -4539.13, 14.16, 5.13}, // Top-far-left bunk + {-3749.54, -4540.25, 14.28, 3.34}, // Far-right bunk + {-3742.10, -4536.85, 14.28, 3.64}, // Right bunk near entrance + {-3755.89, -4529.07, 14.05, 0.57}, // Far-left bunk + {-3749.51, -4527.08, 14.07, 5.26}, // Mid-left bunk + {-3746.37, -4525.35, 14.16, 5.22}, // Left bunk near entrance +}; + +//alliance run to where +#define A_RUNTOX -3742.96 +#define A_RUNTOY -4531.52 +#define A_RUNTOZ 11.91 + +static Location HordeCoords[]= +{ + {-1013.75, -3492.59, 62.62, 4.34}, // Left, Behind + {-1017.72, -3490.92, 62.62, 4.34}, // Right, Behind + {-1015.77, -3497.15, 62.82, 4.34}, // Left, Mid + {-1019.51, -3495.49, 62.82, 4.34}, // Right, Mid + {-1017.25, -3500.85, 62.98, 4.34}, // Left, front + {-1020.95, -3499.21, 62.98, 4.34} // Right, Front +}; + +//horde run to where +#define H_RUNTOX -1016.44 +#define H_RUNTOY -3508.48 +#define H_RUNTOZ 62.96 + +const uint32 AllianceSoldierId[3] = +{ + 12938, // 12938 Injured Alliance Soldier + 12936, // 12936 Badly injured Alliance Soldier + 12937 // 12937 Critically injured Alliance Soldier +}; + +const uint32 HordeSoldierId[3] = +{ + 12923, //12923 Injured Soldier + 12924, //12924 Badly injured Soldier + 12925 //12925 Critically injured Soldier +}; + +/*###### +## npc_doctor (handles both Gustaf Vanhowzen and Gregory Victor) +######*/ + +struct TRINITY_DLL_DECL npc_doctorAI : public ScriptedAI +{ + npc_doctorAI(Creature *c) : ScriptedAI(c) {} + + uint64 PlayerGUID; + + uint32 SummonPatient_Timer; + uint32 SummonPatientCount; + uint32 PatientDiedCount; + uint32 PatientSavedCount; + + bool Event; + + std::list Patients; + std::vector Coordinates; + + void Reset() + { + PlayerGUID = 0; + + SummonPatient_Timer = 10000; + SummonPatientCount = 0; + PatientDiedCount = 0; + PatientSavedCount = 0; + + Patients.clear(); + Coordinates.clear(); + + Event = false; + + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + } + + void BeginEvent(Player* pPlayer); + void PatientDied(Location* Point); + void PatientSaved(Creature* soldier, Player* pPlayer, Location* Point); + void UpdateAI(const uint32 diff); + + void EnterCombat(Unit* who){} +}; + +/*##### +## npc_injured_patient (handles all the patients, no matter Horde or Alliance) +#####*/ + +struct TRINITY_DLL_DECL npc_injured_patientAI : public ScriptedAI +{ + npc_injured_patientAI(Creature *c) : ScriptedAI(c) {} + + uint64 Doctorguid; + Location* Coord; + + void Reset() + { + Doctorguid = 0; + Coord = NULL; + + //no select + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + + //no regen health + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + + //to make them lay with face down + m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_DEAD); + + uint32 mobId = m_creature->GetEntry(); + + switch (mobId) + { //lower max health + case 12923: + case 12938: //Injured Soldier + m_creature->SetHealth(uint32(m_creature->GetMaxHealth()*.75)); + break; + case 12924: + case 12936: //Badly injured Soldier + m_creature->SetHealth(uint32(m_creature->GetMaxHealth()*.50)); + break; + case 12925: + case 12937: //Critically injured Soldier + m_creature->SetHealth(uint32(m_creature->GetMaxHealth()*.25)); + break; + } + } + + void EnterCombat(Unit* who){} + + void SpellHit(Unit *caster, const SpellEntry *spell) + { + if (caster->GetTypeId() == TYPEID_PLAYER && m_creature->isAlive() && spell->Id == 20804) + { + if ((CAST_PLR(caster)->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (CAST_PLR(caster)->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)) + { + if (Doctorguid) + { + if (Creature* Doctor = Unit::GetCreature(*m_creature, Doctorguid)) + CAST_AI(npc_doctorAI, Doctor->AI())->PatientSaved(m_creature, CAST_PLR(caster), Coord); + } + } + + //make not selectable + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + + //regen health + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + + //stand up + m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, UNIT_STAND_STATE_STAND); + + switch(rand()%3) + { + case 0: DoScriptText(SAY_DOC1,m_creature); break; + case 1: DoScriptText(SAY_DOC2,m_creature); break; + case 2: DoScriptText(SAY_DOC3,m_creature); break; + } + + uint32 mobId = m_creature->GetEntry(); + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + + switch (mobId) + { + case 12923: + case 12924: + case 12925: + m_creature->GetMotionMaster()->MovePoint(0, H_RUNTOX, H_RUNTOY, H_RUNTOZ); + break; + case 12936: + case 12937: + case 12938: + m_creature->GetMotionMaster()->MovePoint(0, A_RUNTOX, A_RUNTOY, A_RUNTOZ); + break; + } + } + } + + void UpdateAI(const uint32 diff) + { + //lower HP on every world tick makes it a useful counter, not officlone though + if (m_creature->isAlive() && m_creature->GetHealth() > 6) + { + m_creature->SetHealth(uint32(m_creature->GetHealth()-5)); + } + + if (m_creature->isAlive() && m_creature->GetHealth() <= 6) + { + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT); + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + m_creature->setDeathState(JUST_DIED); + m_creature->SetFlag(UNIT_DYNAMIC_FLAGS, 32); + + if (Doctorguid) + { + if (Creature* Doctor = Unit::GetCreature((*m_creature), Doctorguid)) + CAST_AI(npc_doctorAI, Doctor->AI())->PatientDied(Coord); + } + } + } +}; + +CreatureAI* GetAI_npc_injured_patient(Creature* pCreature) +{ + return new npc_injured_patientAI (pCreature); +} + +/* +npc_doctor (continue) +*/ + +void npc_doctorAI::BeginEvent(Player* pPlayer) +{ + PlayerGUID = pPlayer->GetGUID(); + + SummonPatient_Timer = 10000; + SummonPatientCount = 0; + PatientDiedCount = 0; + PatientSavedCount = 0; + + switch(m_creature->GetEntry()) + { + case DOCTOR_ALLIANCE: + for(uint8 i = 0; i < ALLIANCE_COORDS; ++i) + Coordinates.push_back(&AllianceCoords[i]); + break; + case DOCTOR_HORDE: + for(uint8 i = 0; i < HORDE_COORDS; ++i) + Coordinates.push_back(&HordeCoords[i]); + break; + } + + Event = true; + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); +} + +void npc_doctorAI::PatientDied(Location* Point) +{ + Player* pPlayer = Unit::GetPlayer(PlayerGUID); + if (pPlayer && ((pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE))) + { + ++PatientDiedCount; + + if (PatientDiedCount > 5 && Event) + { + if (pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) + pPlayer->FailQuest(6624); + else if (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE) + pPlayer->FailQuest(6622); + + Reset(); + return; + } + + Coordinates.push_back(Point); + } + else + // If no player or player abandon quest in progress + Reset(); +} + +void npc_doctorAI::PatientSaved(Creature* soldier, Player* pPlayer, Location* Point) +{ + if (pPlayer && PlayerGUID == pPlayer->GetGUID()) + { + if ((pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) || (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE)) + { + ++PatientSavedCount; + + if (PatientSavedCount == 15) + { + if (!Patients.empty()) + { + std::list::iterator itr; + for(itr = Patients.begin(); itr != Patients.end(); ++itr) + { + if (Creature* Patient = Unit::GetCreature((*m_creature), *itr)) + Patient->setDeathState(JUST_DIED); + } + } + + if (pPlayer->GetQuestStatus(6624) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(6624); + else if (pPlayer->GetQuestStatus(6622) == QUEST_STATUS_INCOMPLETE) + pPlayer->AreaExploredOrEventHappens(6622); + + Reset(); + return; + } + + Coordinates.push_back(Point); + } + } +} + +void npc_doctorAI::UpdateAI(const uint32 diff) +{ + if (Event && SummonPatientCount >= 20) + { + Reset(); + return; + } + + if (Event) + { + if (SummonPatient_Timer < diff) + { + Creature* Patient = NULL; + Location* Point = NULL; + + if (Coordinates.empty()) + return; + + std::vector::iterator itr = Coordinates.begin()+rand()%Coordinates.size(); + uint32 patientEntry = 0; + + switch(m_creature->GetEntry()) + { + case DOCTOR_ALLIANCE: patientEntry = AllianceSoldierId[rand()%3]; break; + case DOCTOR_HORDE: patientEntry = HordeSoldierId[rand()%3]; break; + default: + error_log("TSCR: Invalid entry for Triage doctor. Please check your database"); + return; + } + + Point = *itr; + + Patient = m_creature->SummonCreature(patientEntry, Point->x, Point->y, Point->z, Point->o, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); + + if (Patient) + { + //303, this flag appear to be required for client side item->spell to work (TARGET_SINGLE_FRIEND) + Patient->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PVP_ATTACKABLE); + + Patients.push_back(Patient->GetGUID()); + CAST_AI(npc_injured_patientAI, Patient->AI())->Doctorguid = m_creature->GetGUID(); + + if (Point) + CAST_AI(npc_injured_patientAI, Patient->AI())->Coord = Point; + + Coordinates.erase(itr); + } + SummonPatient_Timer = 10000; + SummonPatientCount++; + }else SummonPatient_Timer -= diff; + } +} + +bool QuestAccept_npc_doctor(Player* pPlayer, Creature* pCreature, Quest const *quest) +{ + if ((quest->GetQuestId() == 6624) || (quest->GetQuestId() == 6622)) + CAST_AI(npc_doctorAI, pCreature->AI())->BeginEvent(pPlayer); + + return true; +} + +CreatureAI* GetAI_npc_doctor(Creature* pCreature) +{ + return new npc_doctorAI (pCreature); +} + +/*###### +## npc_garments_of_quests +######*/ + +//TODO: get text for each NPC + +enum +{ + SPELL_LESSER_HEAL_R2 = 2052, + SPELL_FORTITUDE_R1 = 1243, + + QUEST_MOON = 5621, + QUEST_LIGHT_1 = 5624, + QUEST_LIGHT_2 = 5625, + QUEST_SPIRIT = 5648, + QUEST_DARKNESS = 5650, + + ENTRY_SHAYA = 12429, + ENTRY_ROBERTS = 12423, + ENTRY_DOLF = 12427, + ENTRY_KORJA = 12430, + ENTRY_DG_KEL = 12428, + + SAY_COMMON_HEALED = -1000164, + SAY_DG_KEL_THANKS = -1000165, + SAY_DG_KEL_GOODBYE = -1000166, + SAY_ROBERTS_THANKS = -1000167, + SAY_ROBERTS_GOODBYE = -1000168, + SAY_KORJA_THANKS = -1000169, + SAY_KORJA_GOODBYE = -1000170, + SAY_DOLF_THANKS = -1000171, + SAY_DOLF_GOODBYE = -1000172, + SAY_SHAYA_THANKS = -1000173, + SAY_SHAYA_GOODBYE = -1000174, +}; + +struct TRINITY_DLL_DECL npc_garments_of_questsAI : public npc_escortAI +{ + npc_garments_of_questsAI(Creature *c) : npc_escortAI(c) {Reset();} + + uint64 caster; + + bool bIsHealed; + bool bCanRun; + + uint32 RunAwayTimer; + + void Reset() + { + caster = 0; + + bIsHealed = false; + bCanRun = false; + + RunAwayTimer = 5000; + + m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); + //expect database to have RegenHealth=0 + m_creature->SetHealth(int(m_creature->GetMaxHealth()*0.7)); + } + + void EnterCombat(Unit *who) {} + + void SpellHit(Unit* pCaster, const SpellEntry *Spell) + { + if (Spell->Id == SPELL_LESSER_HEAL_R2 || Spell->Id == SPELL_FORTITUDE_R1) + { + //not while in combat + if (m_creature->isInCombat()) + return; + + //nothing to be done now + if (bIsHealed && bCanRun) + return; + + if (pCaster->GetTypeId() == TYPEID_PLAYER) + { + switch(m_creature->GetEntry()) + { + case ENTRY_SHAYA: + if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_MOON) == QUEST_STATUS_INCOMPLETE) + { + if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) + { + DoScriptText(SAY_SHAYA_THANKS,m_creature,pCaster); + bCanRun = true; + } + else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) + { + caster = pCaster->GetGUID(); + m_creature->SetStandState(UNIT_STAND_STATE_STAND); + DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); + bIsHealed = true; + } + } + break; + case ENTRY_ROBERTS: + if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_LIGHT_1) == QUEST_STATUS_INCOMPLETE) + { + if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) + { + DoScriptText(SAY_ROBERTS_THANKS,m_creature,pCaster); + bCanRun = true; + } + else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) + { + caster = pCaster->GetGUID(); + m_creature->SetStandState(UNIT_STAND_STATE_STAND); + DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); + bIsHealed = true; + } + } + break; + case ENTRY_DOLF: + if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_LIGHT_2) == QUEST_STATUS_INCOMPLETE) + { + if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) + { + DoScriptText(SAY_DOLF_THANKS,m_creature,pCaster); + bCanRun = true; + } + else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) + { + caster = pCaster->GetGUID(); + m_creature->SetStandState(UNIT_STAND_STATE_STAND); + DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); + bIsHealed = true; + } + } + break; + case ENTRY_KORJA: + if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_SPIRIT) == QUEST_STATUS_INCOMPLETE) + { + if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) + { + DoScriptText(SAY_KORJA_THANKS,m_creature,pCaster); + bCanRun = true; + } + else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) + { + caster = pCaster->GetGUID(); + m_creature->SetStandState(UNIT_STAND_STATE_STAND); + DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); + bIsHealed = true; + } + } + break; + case ENTRY_DG_KEL: + if (CAST_PLR(pCaster)->GetQuestStatus(QUEST_DARKNESS) == QUEST_STATUS_INCOMPLETE) + { + if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1) + { + DoScriptText(SAY_DG_KEL_THANKS,m_creature,pCaster); + bCanRun = true; + } + else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2) + { + caster = pCaster->GetGUID(); + m_creature->SetStandState(UNIT_STAND_STATE_STAND); + DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster); + bIsHealed = true; + } + } + break; + } + + //give quest credit, not expect any special quest objectives + if (bCanRun) + CAST_PLR(pCaster)->TalkedToCreature(m_creature->GetEntry(),m_creature->GetGUID()); + } + } + } + + void WaypointReached(uint32 uiPoint) + { + } + + void UpdateAI(const uint32 diff) + { + if (bCanRun && !m_creature->isInCombat()) + { + if (RunAwayTimer <= diff) + { + if (Unit *pUnit = Unit::GetUnit(*m_creature,caster)) + { + switch(m_creature->GetEntry()) + { + case ENTRY_SHAYA: DoScriptText(SAY_SHAYA_GOODBYE,m_creature,pUnit); break; + case ENTRY_ROBERTS: DoScriptText(SAY_ROBERTS_GOODBYE,m_creature,pUnit); break; + case ENTRY_DOLF: DoScriptText(SAY_DOLF_GOODBYE,m_creature,pUnit); break; + case ENTRY_KORJA: DoScriptText(SAY_KORJA_GOODBYE,m_creature,pUnit); break; + case ENTRY_DG_KEL: DoScriptText(SAY_DG_KEL_GOODBYE,m_creature,pUnit); break; + } + + Start(false,true,true); + } + else + EnterEvadeMode(); //something went wrong + + RunAwayTimer = 30000; + }else RunAwayTimer -= diff; + } + + npc_escortAI::UpdateAI(diff); + } +}; + +CreatureAI* GetAI_npc_garments_of_quests(Creature* pCreature) +{ + npc_garments_of_questsAI* tempAI = new npc_garments_of_questsAI(pCreature); + + tempAI->FillPointMovementListForCreature(); + + return tempAI; +} + +/*###### +## npc_guardian +######*/ + +#define SPELL_DEATHTOUCH 5 + +struct TRINITY_DLL_DECL npc_guardianAI : public ScriptedAI +{ + npc_guardianAI(Creature *c) : ScriptedAI(c) {} + + void Reset() + { + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + } + + void EnterCombat(Unit *who) + { + } + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + if (m_creature->isAttackReady()) + { + m_creature->CastSpell(m_creature->getVictim(),SPELL_DEATHTOUCH, true); + m_creature->resetAttackTimer(); + } + } +}; + +CreatureAI* GetAI_npc_guardian(Creature* pCreature) +{ + return new npc_guardianAI (pCreature); +} + +/*###### +## npc_kingdom_of_dalaran_quests +######*/ + +enum +{ + SPELL_TELEPORT_DALARAN = 53360, + ITEM_KT_SIGNET = 39740, + QUEST_MAGICAL_KINGDOM_A = 12794, + QUEST_MAGICAL_KINGDOM_H = 12791, + QUEST_MAGICAL_KINGDOM_N = 12796 +}; + +#define GOSSIP_ITEM_TELEPORT_TO "I am ready to be teleported to Dalaran." + +bool GossipHello_npc_kingdom_of_dalaran_quests(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + + if (pPlayer->HasItemCount(ITEM_KT_SIGNET,1) && (!pPlayer->GetQuestRewardStatus(QUEST_MAGICAL_KINGDOM_A) || + !pPlayer->GetQuestRewardStatus(QUEST_MAGICAL_KINGDOM_H) || !pPlayer->GetQuestRewardStatus(QUEST_MAGICAL_KINGDOM_N))) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_TELEPORT_TO, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +bool GossipSelect_npc_kingdom_of_dalaran_quests(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF+1) + { + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,SPELL_TELEPORT_DALARAN,false); + } + return true; +} + +/*###### +## npc_mount_vendor +######*/ + +bool GossipHello_npc_mount_vendor(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + + bool canBuy; + canBuy = false; + uint32 vendor = pCreature->GetEntry(); + uint8 race = pPlayer->getRace(); + + switch (vendor) + { + case 384: //Katie Hunter + case 1460: //Unger Statforth + case 2357: //Merideth Carlson + case 4885: //Gregor MacVince + if (pPlayer->GetReputationRank(72) != REP_EXALTED && race != RACE_HUMAN) + pPlayer->SEND_GOSSIP_MENU(5855, pCreature->GetGUID()); + else canBuy = true; + break; + case 1261: //Veron Amberstill + if (pPlayer->GetReputationRank(47) != REP_EXALTED && race != RACE_DWARF) + pPlayer->SEND_GOSSIP_MENU(5856, pCreature->GetGUID()); + else canBuy = true; + break; + case 3362: //Ogunaro Wolfrunner + if (pPlayer->GetReputationRank(76) != REP_EXALTED && race != RACE_ORC) + pPlayer->SEND_GOSSIP_MENU(5841, pCreature->GetGUID()); + else canBuy = true; + break; + case 3685: //Harb Clawhoof + if (pPlayer->GetReputationRank(81) != REP_EXALTED && race != RACE_TAUREN) + pPlayer->SEND_GOSSIP_MENU(5843, pCreature->GetGUID()); + else canBuy = true; + break; + case 4730: //Lelanai + if (pPlayer->GetReputationRank(69) != REP_EXALTED && race != RACE_NIGHTELF) + pPlayer->SEND_GOSSIP_MENU(5844, pCreature->GetGUID()); + else canBuy = true; + break; + case 4731: //Zachariah Post + if (pPlayer->GetReputationRank(68) != REP_EXALTED && race != RACE_UNDEAD_PLAYER) + pPlayer->SEND_GOSSIP_MENU(5840, pCreature->GetGUID()); + else canBuy = true; + break; + case 7952: //Zjolnir + if (pPlayer->GetReputationRank(530) != REP_EXALTED && race != RACE_TROLL) + pPlayer->SEND_GOSSIP_MENU(5842, pCreature->GetGUID()); + else canBuy = true; + break; + case 7955: //Milli Featherwhistle + if (pPlayer->GetReputationRank(54) != REP_EXALTED && race != RACE_GNOME) + pPlayer->SEND_GOSSIP_MENU(5857, pCreature->GetGUID()); + else canBuy = true; + break; + case 16264: //Winaestra + if (pPlayer->GetReputationRank(911) != REP_EXALTED && race != RACE_BLOODELF) + pPlayer->SEND_GOSSIP_MENU(10305, pCreature->GetGUID()); + else canBuy = true; + break; + case 17584: //Torallius the Pack Handler + if (pPlayer->GetReputationRank(930) != REP_EXALTED && race != RACE_DRAENEI) + pPlayer->SEND_GOSSIP_MENU(10239, pCreature->GetGUID()); + else canBuy = true; + break; + } + + if (canBuy) + { + if (pCreature->isVendor()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + } + return true; +} + +bool GossipSelect_npc_mount_vendor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_TRADE) + pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); + + return true; +} + +/*###### +## npc_rogue_trainer +######*/ + +bool GossipHello_npc_rogue_trainer(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + + if (pCreature->isTrainer()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN); + + if (pCreature->isCanTrainingAndResetTalentsOf(pPlayer)) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_TRAINER, "I wish to unlearn my talents", GOSSIP_SENDER_MAIN, GOSSIP_OPTION_UNLEARNTALENTS); + + if (pPlayer->getClass() == CLASS_ROGUE && pPlayer->getLevel() >= 24 && !pPlayer->HasItemCount(17126,1) && !pPlayer->GetQuestRewardStatus(6681)) + { + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + pPlayer->SEND_GOSSIP_MENU(5996, pCreature->GetGUID()); + } else + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + + return true; +} + +bool GossipSelect_npc_rogue_trainer(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch(uiAction) + { + case GOSSIP_ACTION_INFO_DEF+1: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->CastSpell(pPlayer,21100,false); + break; + case GOSSIP_ACTION_TRAIN: + pPlayer->SEND_TRAINERLIST(pCreature->GetGUID()); + break; + case GOSSIP_OPTION_UNLEARNTALENTS: + pPlayer->CLOSE_GOSSIP_MENU(); + pPlayer->SendTalentWipeConfirm(pCreature->GetGUID()); + break; + } + return true; +} + +/*###### +## npc_sayge +######*/ + +#define SPELL_DMG 23768 //dmg +#define SPELL_RES 23769 //res +#define SPELL_ARM 23767 //arm +#define SPELL_SPI 23738 //spi +#define SPELL_INT 23766 //int +#define SPELL_STM 23737 //stm +#define SPELL_STR 23735 //str +#define SPELL_AGI 23736 //agi +#define SPELL_FORTUNE 23765 //faire fortune + +bool GossipHello_npc_sayge(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + + if (pPlayer->HasSpellCooldown(SPELL_INT) || + pPlayer->HasSpellCooldown(SPELL_ARM) || + pPlayer->HasSpellCooldown(SPELL_DMG) || + pPlayer->HasSpellCooldown(SPELL_RES) || + pPlayer->HasSpellCooldown(SPELL_STR) || + pPlayer->HasSpellCooldown(SPELL_AGI) || + pPlayer->HasSpellCooldown(SPELL_STM) || + pPlayer->HasSpellCooldown(SPELL_SPI)) + pPlayer->SEND_GOSSIP_MENU(7393, pCreature->GetGUID()); + else + { + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Yes", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + pPlayer->SEND_GOSSIP_MENU(7339, pCreature->GetGUID()); + } + + return true; +} + +void SendAction_npc_sayge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch(uiAction) + { + case GOSSIP_ACTION_INFO_DEF+1: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Slay the Man", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Turn him over to liege", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Confiscate the corn", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Let him go and have the corn", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5); + pPlayer->SEND_GOSSIP_MENU(7340, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF+2: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Execute your friend painfully", GOSSIP_SENDER_MAIN+1, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Execute your friend painlessly", GOSSIP_SENDER_MAIN+2, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Let your friend go", GOSSIP_SENDER_MAIN+3, GOSSIP_ACTION_INFO_DEF); + pPlayer->SEND_GOSSIP_MENU(7341, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF+3: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Confront the diplomat", GOSSIP_SENDER_MAIN+4, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Show not so quiet defiance", GOSSIP_SENDER_MAIN+5, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Remain quiet", GOSSIP_SENDER_MAIN+2, GOSSIP_ACTION_INFO_DEF); + pPlayer->SEND_GOSSIP_MENU(7361, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF+4: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Speak against your brother openly", GOSSIP_SENDER_MAIN+6, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Help your brother in", GOSSIP_SENDER_MAIN+7, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Keep your brother out without letting him know", GOSSIP_SENDER_MAIN+8, GOSSIP_ACTION_INFO_DEF); + pPlayer->SEND_GOSSIP_MENU(7362, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF+5: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Take credit, keep gold", GOSSIP_SENDER_MAIN+5, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Take credit, share the gold", GOSSIP_SENDER_MAIN+4, GOSSIP_ACTION_INFO_DEF); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Let the knight take credit", GOSSIP_SENDER_MAIN+3, GOSSIP_ACTION_INFO_DEF); + pPlayer->SEND_GOSSIP_MENU(7363, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF: + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "Thanks", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6); + pPlayer->SEND_GOSSIP_MENU(7364, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF+6: + pCreature->CastSpell(pPlayer, SPELL_FORTUNE, false); + pPlayer->SEND_GOSSIP_MENU(7365, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_npc_sayge(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch(uiSender) + { + case GOSSIP_SENDER_MAIN: + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+1: + pCreature->CastSpell(pPlayer, SPELL_DMG, false); + pPlayer->AddSpellCooldown(SPELL_DMG,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+2: + pCreature->CastSpell(pPlayer, SPELL_RES, false); + pPlayer->AddSpellCooldown(SPELL_RES,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+3: + pCreature->CastSpell(pPlayer, SPELL_ARM, false); + pPlayer->AddSpellCooldown(SPELL_ARM,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+4: + pCreature->CastSpell(pPlayer, SPELL_SPI, false); + pPlayer->AddSpellCooldown(SPELL_SPI,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+5: + pCreature->CastSpell(pPlayer, SPELL_INT, false); + pPlayer->AddSpellCooldown(SPELL_INT,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+6: + pCreature->CastSpell(pPlayer, SPELL_STM, false); + pPlayer->AddSpellCooldown(SPELL_STM,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+7: + pCreature->CastSpell(pPlayer, SPELL_STR, false); + pPlayer->AddSpellCooldown(SPELL_STR,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + case GOSSIP_SENDER_MAIN+8: + pCreature->CastSpell(pPlayer, SPELL_AGI, false); + pPlayer->AddSpellCooldown(SPELL_AGI,0,time(NULL) + 7200); + SendAction_npc_sayge(pPlayer, pCreature, uiAction); + break; + } + return true; +} + +struct TRINITY_DLL_DECL npc_steam_tonkAI : public ScriptedAI +{ + npc_steam_tonkAI(Creature *c) : ScriptedAI(c) {} + + void Reset() {} + void EnterCombat(Unit *who) {} + + void OnPossess(bool apply) + { + if (apply) + { + // Initialize the action bar without the melee attack command + m_creature->InitCharmInfo(); + m_creature->GetCharmInfo()->InitEmptyActionBar(false); + + m_creature->SetReactState(REACT_PASSIVE); + } + else + m_creature->SetReactState(REACT_AGGRESSIVE); + } + +}; + +CreatureAI* GetAI_npc_steam_tonk(Creature* pCreature) +{ + return new npc_steam_tonkAI(pCreature); +} + +#define SPELL_TONK_MINE_DETONATE 25099 + +struct TRINITY_DLL_DECL npc_tonk_mineAI : public ScriptedAI +{ + npc_tonk_mineAI(Creature *c) : ScriptedAI(c) + { + m_creature->SetReactState(REACT_PASSIVE); + } + + uint32 ExplosionTimer; + + void Reset() + { + ExplosionTimer = 3000; + } + + void EnterCombat(Unit *who) {} + void AttackStart(Unit *who) {} + void MoveInLineOfSight(Unit *who) {} + + void UpdateAI(const uint32 diff) + { + if (ExplosionTimer < diff) + { + m_creature->CastSpell(m_creature, SPELL_TONK_MINE_DETONATE, true); + m_creature->setDeathState(DEAD); // unsummon it + } else + ExplosionTimer -= diff; + } +}; + +CreatureAI* GetAI_npc_tonk_mine(Creature* pCreature) +{ + return new npc_tonk_mineAI(pCreature); +} + +/*#### +## npc_winter_reveler +####*/ + +bool ReceiveEmote_npc_winter_reveler(Player* pPlayer, Creature* pCreature, uint32 emote) +{ + //TODO: check auralist. + if (pPlayer->HasAura(26218)) + return false; + + if (emote == TEXTEMOTE_KISS) + { + pCreature->CastSpell(pCreature, 26218, false); + pPlayer->CastSpell(pPlayer, 26218, false); + switch(rand()%3) + { + case 0: pCreature->CastSpell(pPlayer, 26207, false); break; + case 1: pCreature->CastSpell(pPlayer, 26206, false); break; + case 2: pCreature->CastSpell(pPlayer, 45036, false); break; + } + } + return true; +} + +/*#### +## npc_brewfest_reveler +####*/ + +bool ReceiveEmote_npc_brewfest_reveler(Player* pPlayer, Creature* pCreature, uint32 emote) +{ + if (emote == TEXTEMOTE_DANCE) + pCreature->CastSpell(pPlayer, 41586, false); + + return true; +} + +/*#### +## npc_snake_trap_serpents +####*/ + +#define SPELL_MIND_NUMBING_POISON 8692 //Viper +#define SPELL_DEADLY_POISON 34655 //Venomous Snake +#define SPELL_CRIPPLING_POISON 3409 //Viper + +#define VENOMOUS_SNAKE_TIMER 1200 +#define VIPER_TIMER 3000 + +#define C_VIPER 19921 + +#define RAND 5 + +struct TRINITY_DLL_DECL npc_snake_trap_serpentsAI : public ScriptedAI +{ + npc_snake_trap_serpentsAI(Creature *c) : ScriptedAI(c) {} + + uint32 SpellTimer; + bool IsViper; + bool Spawn; + + void EnterCombat(Unit *who) {} + + void Reset() + { + Spawn = true; + SpellTimer = 0; + + CreatureInfo const *Info = m_creature->GetCreatureInfo(); + + if (Info->Entry == C_VIPER) + IsViper = true; + else + IsViper = false; + + //We have to reload the states from db for summoned guardians + m_creature->SetMaxHealth(Info->maxhealth); + m_creature->SetHealth(Info->maxhealth); + m_creature->SetStatFloatValue(UNIT_FIELD_MINDAMAGE, Info->mindmg); + m_creature->SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, Info->maxdmg); + + //Add delta to make them not all hit the same time + uint32 delta = (rand() % 7) *100; + m_creature->SetStatFloatValue(UNIT_FIELD_BASEATTACKTIME, Info->baseattacktime + delta); + m_creature->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER , Info->attackpower); + } + + //Redefined for random target selection: + void MoveInLineOfSight(Unit *who) + { + if (!m_creature->getVictim() && who->isTargetableForAttack() && (m_creature->IsHostileTo(who)) && who->isInAccessiblePlaceFor(m_creature)) + { + if (m_creature->GetDistanceZ(who) > CREATURE_Z_ATTACK_RANGE) + return; + + float attackRadius = m_creature->GetAttackDistance(who); + if (m_creature->IsWithinDistInMap(who, attackRadius) && m_creature->IsWithinLOSInMap(who)) + { + if (!(rand() % RAND)) + { + m_creature->setAttackTimer(BASE_ATTACK, (rand() % 10) * 100); + SpellTimer = (rand() % 10) * 100; + AttackStart(who); + } + } + } + } + + void UpdateAI(const uint32 diff) + { + if (Spawn) + { + Spawn = false; + // Start attacking attacker of owner on first ai update after spawn - move in line of sight may choose better target + if (!m_creature->getVictim() && m_creature->isSummon()) + if (Unit * Owner = CAST_SUM(m_creature)->GetSummoner()) + if (Owner->getAttackerForHelper()) + AttackStart(Owner->getAttackerForHelper()); + } + + if (!m_creature->getVictim()) + { + if (m_creature->isInCombat()) + DoStopAttack(); + return; + } + + if (SpellTimer < diff) + { + if (IsViper) //Viper + { + if (rand() % 3 == 0) //33% chance to cast + { + uint32 spell; + if (rand() % 2 == 0) + spell = SPELL_MIND_NUMBING_POISON; + else + spell = SPELL_CRIPPLING_POISON; + + DoCast(m_creature->getVictim(),spell); + } + + SpellTimer = VIPER_TIMER; + } + else //Venomous Snake + { + if (rand() % 10 < 8) //80% chance to cast + DoCast(m_creature->getVictim(),SPELL_DEADLY_POISON); + SpellTimer = VENOMOUS_SNAKE_TIMER + (rand() %5)*100; + } + }else SpellTimer-=diff; + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_npc_snake_trap_serpents(Creature* pCreature) +{ + return new npc_snake_trap_serpentsAI(pCreature); +} + +struct TRINITY_DLL_DECL mob_mojoAI : public ScriptedAI +{ + mob_mojoAI(Creature *c) : ScriptedAI(c) {Reset();} + uint32 hearts; + uint64 victimGUID; + void Reset() + { + victimGUID = 0; + hearts = 15000; + Unit* own = m_creature->GetOwner(); + if (own) + m_creature->GetMotionMaster()->MoveFollow(own,0,0); + } + void Aggro(Unit *who){} + void UpdateAI(const uint32 diff) + { + if (m_creature->HasAura(20372,0)) + { + if (heartsRemoveAurasDueToSpell(20372); + hearts = 15000; + }hearts-=diff; + } + } + void ReceiveEmote(Player* pPlayer, uint32 emote) + { + m_creature->HandleEmoteCommand(emote); + Unit* own = m_creature->GetOwner(); + if (!own || own->GetTypeId() != TYPEID_PLAYER || CAST_PLR(own)->GetTeam() != pPlayer->GetTeam()) + return; + if (emote == TEXTEMOTE_KISS) + { + std::string whisp = ""; + switch (rand()%8) + { + case 0:whisp.append("Now that's what I call froggy-style!");break; + case 1:whisp.append("Your lily pad or mine?");break; + case 2:whisp.append("This won't take long, did it?");break; + case 3:whisp.append("I thought you'd never ask!");break; + case 4:whisp.append("I promise not to give you warts...");break; + case 5:whisp.append("Feelin' a little froggy, are ya?");break; + case 6: + whisp.append("Listen, "); + whisp.append(pPlayer->GetName()); + whisp.append(", I know of a little swamp not too far from here...."); + break; + case 7:whisp.append("There's just never enough Mojo to go around...");break; + } + m_creature->MonsterWhisper(whisp.c_str(),pPlayer->GetGUID()); + if (victimGUID) + { + Player* victim = Unit::GetPlayer(victimGUID); + if (victim) + victim->RemoveAura(43906);//remove polymorph frog thing + } + m_creature->AddAura(43906,pPlayer);//add polymorph frog thing + victimGUID = pPlayer->GetGUID(); + m_creature->CastSpell(m_creature,20372,true);//tag.hearts + m_creature->GetMotionMaster()->MoveFollow(pPlayer,0,0); + hearts = 15000; + } + } +}; + +CreatureAI* GetAI_mob_mojo(Creature* pCreature) +{ + return new mob_mojoAI (pCreature); +} + +struct TRINITY_DLL_DECL npc_mirror_image : SpellCasterAI +{ + npc_mirror_image(Creature *c) : SpellCasterAI(c) {} + + void InitializeAI() + { + SpellCasterAI::InitializeAI(); + Unit * owner = me->GetOwner(); + if (!owner) + return; + // Inherit Master's Threat List (not yet implemented) + owner->CastSpell((Unit*)NULL, 58838, true); + // here mirror image casts on summoner spell (not present in client dbc) 49866 + // here should be auras (not present in client dbc): 35657, 35658, 35659, 35660 selfcasted by mirror images (stats related?) + // Clone Me! + owner->CastSpell(me, 45204, false); + } + + // Do not reload Creature templates on evade mode enter - prevent visual lost + void EnterEvadeMode() + { + if (me->IsInEvadeMode() || !me->isAlive()) + return; + + Unit *owner = me->GetCharmerOrOwner(); + + me->CombatStop(true); + if (owner && !me->hasUnitState(UNIT_STAT_FOLLOW)) + { + me->GetMotionMaster()->Clear(false); + me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, m_creature->GetFollowAngle(), MOTION_SLOT_ACTIVE); + } + } +}; + +CreatureAI* GetAI_npc_mirror_image(Creature* pCreature) +{ + return new npc_mirror_image (pCreature); +} + +struct TRINITY_DLL_DECL npc_ebon_gargoyleAI : SpellCasterAI +{ + npc_ebon_gargoyleAI(Creature *c) : SpellCasterAI(c) {} + + int despawnTimer; + + void InitializeAI() + { + SpellCasterAI::InitializeAI(); + Unit * owner = me->GetOwner(); + if (!owner) + return; + // Not needed to be despawned now + despawnTimer = 0; + // Find victim of Summon Gargoyle spell + std::list targets; + Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(m_creature, m_creature, 30); + Trinity::UnitListSearcher searcher(m_creature, targets, u_check); + m_creature->VisitNearbyObject(30, searcher); + for(std::list::iterator iter = targets.begin(); iter != targets.end(); ++iter) + if((*iter)->GetAura(49206,owner->GetGUID())) + { + me->Attack((*iter),false); + break; + } + } + + void JustDied(Unit *killer) + { + // Stop Feeding Gargoyle when it dies + if (Unit *owner = me->GetOwner()) + owner->RemoveAurasDueToSpell(50514); + } + + // Fly away when dismissed + void SpellHit(Unit *source, const SpellEntry *spell) + { + if(spell->Id != 50515 || !me->isAlive() ) + return; + + Unit *owner = me->GetOwner(); + + if (!owner || owner != source) + return; + + // Stop Fighting + me->ApplyModFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE, true); + // Sanctuary + me->CastSpell(m_creature, 54661, true); + me->SetReactState(REACT_PASSIVE); + + // Fly Away + me->AddUnitMovementFlag(MOVEMENTFLAG_FLY_MODE); + me->SetSpeed(MOVE_FLIGHT, 0.25f, true); + me->SetSpeed(MOVE_RUN, 0.25f, true); + float x = me->GetPositionX() + 10 * cos(me->GetOrientation()); + float y = me->GetPositionY() + 10 * sin(me->GetOrientation()); + float z = me->GetPositionZ() + 25; + me->GetMotionMaster()->MovePoint(0, x, y, z); + + // Despawn as soon as possible + despawnTimer = 4 * IN_MILISECONDS; + } + + void UpdateAI(const uint32 diff) + { + if (despawnTimer > 0) + { + if (despawnTimer > diff) + despawnTimer -= diff; + else + { + me->ForcedDespawn(); + } + return; + } + SpellCasterAI::UpdateAI(diff); + } +}; + +CreatureAI* GetAI_npc_ebon_gargoyle(Creature* pCreature) +{ + return new npc_ebon_gargoyleAI (pCreature); +} + +//TODO: 30% Attackdamage check for Lightwell +struct TRINITY_DLL_DECL npc_lightwellAI : public PassiveAI +{ + npc_lightwellAI(Creature *c) : PassiveAI(c) {} + + //uint32 desummon_timer; + + void Reset() + { + //desummon_timer = 180000; + m_creature->CastSpell(m_creature, 59907, false); // Spell for Lightwell Charges + } + + /* + void UpdateAI(const uint32 diff) + { + if (desummon_timer < diff) + { + m_creature->Kill(m_creature); + }else desummon_timer -= diff; + + if (!m_creature->HasAura(59907)) + { + m_creature->Kill(m_creature); + } + } + */ +}; + +CreatureAI* GetAI_npc_lightwellAI(Creature* pCreature) +{ + return new npc_lightwellAI (pCreature); +} + +struct TRINITY_DLL_DECL npc_training_dummy : Scripted_NoMovementAI +{ + npc_training_dummy(Creature *c) : Scripted_NoMovementAI(c) {} + + uint32 ResetTimer; + void Reset() + { + m_creature->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate + m_creature->ApplySpellImmune(0, IMMUNITY_EFFECT, SPELL_EFFECT_KNOCK_BACK, true);//imune to knock aways like blast wave + m_creature->ApplySpellImmune(0, IMMUNITY_MECHANIC, MECHANIC_STUN, true); + ResetTimer = 10000; + } + + void DamageTaken(Unit *done_by, uint32 &damage) + { + ResetTimer = 10000; + damage = 0; + } + + void EnterCombat(Unit *who){return;} + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + if (!m_creature->hasUnitState(UNIT_STAT_STUNNED)) + m_creature->SetControlled(true,UNIT_STAT_STUNNED);//disable rotate + if (ResetTimer <= diff) + { + EnterEvadeMode(); + ResetTimer = 10000; + }else ResetTimer -= diff; + return; + } + void MoveInLineOfSight(Unit *who){return;} +}; + +CreatureAI* GetAI_npc_training_dummy(Creature* pCreature) +{ + return new npc_training_dummy (pCreature); +} + +void AddSC_npcs_special() +{ + Script *newscript; + + newscript = new Script; + newscript->Name = "npc_air_force_bots"; + newscript->GetAI = &GetAI_npc_air_force_bots; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_chicken_cluck"; + newscript->GetAI = &GetAI_npc_chicken_cluck; + newscript->pQuestAccept = &QuestAccept_npc_chicken_cluck; + newscript->pQuestComplete = &QuestComplete_npc_chicken_cluck; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_dancing_flames"; + newscript->GetAI = &GetAI_npc_dancing_flames; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_injured_patient"; + newscript->GetAI = &GetAI_npc_injured_patient; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_doctor"; + newscript->GetAI = &GetAI_npc_doctor; + newscript->pQuestAccept = &QuestAccept_npc_doctor; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name = "npc_garments_of_quests"; + newscript->GetAI = &GetAI_npc_garments_of_quests; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_guardian"; + newscript->GetAI = &GetAI_npc_guardian; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_kingdom_of_dalaran_quests"; + newscript->pGossipHello = &GossipHello_npc_kingdom_of_dalaran_quests; + newscript->pGossipSelect = &GossipSelect_npc_kingdom_of_dalaran_quests; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_mount_vendor"; + newscript->pGossipHello = &GossipHello_npc_mount_vendor; + newscript->pGossipSelect = &GossipSelect_npc_mount_vendor; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_rogue_trainer"; + newscript->pGossipHello = &GossipHello_npc_rogue_trainer; + newscript->pGossipSelect = &GossipSelect_npc_rogue_trainer; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_sayge"; + newscript->pGossipHello = &GossipHello_npc_sayge; + newscript->pGossipSelect = &GossipSelect_npc_sayge; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_steam_tonk"; + newscript->GetAI = &GetAI_npc_steam_tonk; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_tonk_mine"; + newscript->GetAI = &GetAI_npc_tonk_mine; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_winter_reveler"; + //newscript->pReceiveEmote = &ReceiveEmote_npc_winter_reveler; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_brewfest_reveler"; + //newscript->pReceiveEmote = &ReceiveEmote_npc_brewfest_reveler; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_snake_trap_serpents"; + newscript->GetAI = &GetAI_npc_snake_trap_serpents; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_mirror_image"; + newscript->GetAI = &GetAI_npc_mirror_image; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_ebon_gargoyle"; + newscript->GetAI = &GetAI_npc_ebon_gargoyle; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_lightwell"; + newscript->GetAI = &GetAI_npc_lightwellAI; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="mob_mojo"; + newscript->GetAI = &GetAI_mob_mojo; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_training_dummy"; + newscript->GetAI = &GetAI_npc_training_dummy; + newscript->RegisterSelf(); +} + -- cgit v1.2.3 From 6337c3adfb6b7ee6326f2bfa9f0b0992ce412ae1 Mon Sep 17 00:00:00 2001 From: Kudlaty Date: Sun, 16 Aug 2009 00:53:16 +0200 Subject: Merge [SD2] r1288 Update include guards with better naming. r1289 Fix typo in makefile.am - skip r1290 Move AI remaining in misc folders to own folder base. Rename file to same as others for consistency and update includes accordingly. --HG-- branch : trunk --- CMakeLists.txt | 1 + src/bindings/scripts/CMakeLists.txt | 14 +- src/bindings/scripts/ScriptMgr.h | 4 +- src/bindings/scripts/VC80/80ScriptDev2.vcproj | 80 +- src/bindings/scripts/VC90/90ScriptDev2.vcproj | 80 +- src/bindings/scripts/base/escortAI.cpp | 388 ++ src/bindings/scripts/base/escortAI.h | 106 + src/bindings/scripts/base/guard_ai.cpp | 196 + src/bindings/scripts/base/guard_ai.h | 43 + src/bindings/scripts/base/guards.cpp | 4110 ++++++++++++++++++++ src/bindings/scripts/base/simple_ai.cpp | 278 ++ src/bindings/scripts/base/simple_ai.h | 71 + src/bindings/scripts/include/sc_gossip.h | 4 +- .../scripts/scripts/creature/simple_ai.cpp | 278 -- src/bindings/scripts/scripts/creature/simple_ai.h | 71 - src/bindings/scripts/scripts/custom/test.cpp | 2 +- .../scripts/eastern_kingdoms/arathi_highlands.cpp | 2 +- .../scripts/eastern_kingdoms/eversong_woods.cpp | 2 +- .../scripts/eastern_kingdoms/ghostlands.cpp | 2 +- .../scripts/eastern_kingdoms/hinterlands.cpp | 2 +- .../scripts/eastern_kingdoms/silverpine_forest.cpp | 2 +- .../scripts/scripts/eastern_kingdoms/westfall.cpp | 2 +- .../scripts/scripts/examples/example_escort.cpp | 2 +- src/bindings/scripts/scripts/guard/guard_ai.cpp | 196 - src/bindings/scripts/scripts/guard/guard_ai.h | 43 - src/bindings/scripts/scripts/guard/guards.cpp | 4110 -------------------- .../scripts/scripts/kalimdor/ashenvale.cpp | 2 +- .../scripts/scripts/kalimdor/azuremyst_isle.cpp | 2 +- .../scripts/scripts/kalimdor/darkshore.cpp | 2 +- src/bindings/scripts/scripts/kalimdor/feralas.cpp | 2 +- .../scripts/scripts/kalimdor/moonglade.cpp | 2 +- src/bindings/scripts/scripts/kalimdor/mulgore.cpp | 2 +- .../scripts/kalimdor/stonetalon_mountains.cpp | 2 +- src/bindings/scripts/scripts/kalimdor/tanaris.cpp | 2 +- .../scripts/scripts/kalimdor/the_barrens.cpp | 2 +- .../scripts/scripts/kalimdor/thousand_needles.cpp | 2 +- .../scripts/scripts/northrend/sholazar_basin.cpp | 2 +- src/bindings/scripts/scripts/npc/npc_escortAI.cpp | 388 -- src/bindings/scripts/scripts/npc/npc_escortAI.h | 106 - .../scripts/scripts/outland/hellfire_peninsula.cpp | 2 +- .../scripts/scripts/outland/netherstorm.cpp | 2 +- .../scripts/scripts/outland/shadowmoon_valley.cpp | 2 +- .../scripts/scripts/outland/shattrath_city.cpp | 2 +- .../scripts/scripts/outland/terokkar_forest.cpp | 2 +- .../scripts/scripts/outland/zangarmarsh.cpp | 2 +- .../scripts/scripts/world/npcs_special.cpp | 2 +- .../shadow_labyrinth/boss_ambassador_hellmaw.cpp | 2 +- .../zone/blackrock_depths/blackrock_depths.cpp | 2 +- .../scripts/zone/caverns_of_time/hyjal/hyjalAI.h | 2 +- .../zone/caverns_of_time/hyjal/hyjal_trash.h | 2 +- .../old_hillsbrad/boss_leutenant_drake.cpp | 2 +- .../old_hillsbrad/old_hillsbrad.cpp | 2 +- .../serpent_shrine/boss_fathomlord_karathress.cpp | 2 +- .../serpent_shrine/boss_lady_vashj.cpp | 2 +- .../serpent_shrine/boss_lurker_below.cpp | 2 +- .../eastern_plaguelands/the_scarlet_enclave.cpp | 2 +- .../scripts/zone/karazhan/boss_shade_of_aran.cpp | 2 +- .../scripts/scripts/zone/karazhan/karazhan.cpp | 2 +- .../scripts/zone/molten_core/molten_core.cpp | 2 +- .../scripts/zone/razorfen_kraul/razorfen_kraul.cpp | 2 +- .../scripts/zone/scarlet_monastery/boss_herod.cpp | 2 +- .../zone/shadowfang_keep/shadowfang_keep.cpp | 2 +- .../scripts/zone/ungoro_crater/ungoro_crater.cpp | 2 +- .../zone/wailing_caverns/wailing_caverns.cpp | 2 +- 64 files changed, 5320 insertions(+), 5335 deletions(-) create mode 100644 src/bindings/scripts/base/escortAI.cpp create mode 100644 src/bindings/scripts/base/escortAI.h create mode 100644 src/bindings/scripts/base/guard_ai.cpp create mode 100644 src/bindings/scripts/base/guard_ai.h create mode 100644 src/bindings/scripts/base/guards.cpp create mode 100644 src/bindings/scripts/base/simple_ai.cpp create mode 100644 src/bindings/scripts/base/simple_ai.h delete mode 100644 src/bindings/scripts/scripts/creature/simple_ai.cpp delete mode 100644 src/bindings/scripts/scripts/creature/simple_ai.h delete mode 100644 src/bindings/scripts/scripts/guard/guard_ai.cpp delete mode 100644 src/bindings/scripts/scripts/guard/guard_ai.h delete mode 100644 src/bindings/scripts/scripts/guard/guards.cpp delete mode 100644 src/bindings/scripts/scripts/npc/npc_escortAI.cpp delete mode 100644 src/bindings/scripts/scripts/npc/npc_escortAI.h (limited to 'src') diff --git a/CMakeLists.txt b/CMakeLists.txt index 1c8237a562e..facb6e377c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -189,6 +189,7 @@ src/framework src/shared/Database src/shared/vmap src/game +src/bindings/scripts/base ${CMAKE_BINARY_DIR} ${SCRIPT_INCLUDE} ${MYSQL_INCLUDE_DIR} diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index 88b134108e9..d8f5e9180b3 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -4,14 +4,19 @@ SET(trinityscript_LIB_SRCS ScriptMgr.cpp ScriptMgr.h + base/escortAI.cpp + base/escortAI.h + base/guard_ai.cpp + base/guard_ai.h + base/guards.cpp + base/simple_ai.cpp + base/simple_ai.h include/precompiled.cpp include/precompiled.h include/sc_creature.cpp include/sc_creature.h include/sc_gossip.h include/sc_instance.h - scripts/creature/simple_ai.cpp - scripts/creature/simple_ai.h scripts/eastern_kingdoms/alterac_mountains.cpp scripts/eastern_kingdoms/arathi_highlands.cpp scripts/eastern_kingdoms/blasted_lands.cpp @@ -38,9 +43,6 @@ SET(trinityscript_LIB_SRCS scripts/examples/example_escort.cpp scripts/examples/example_gossip_codebox.cpp scripts/examples/example_misc.cpp - scripts/guard/guard_ai.cpp - scripts/guard/guard_ai.h - scripts/guard/guards.cpp scripts/kalimdor/ashenvale.cpp scripts/kalimdor/azshara.cpp scripts/kalimdor/azuremyst_isle.cpp @@ -68,8 +70,6 @@ SET(trinityscript_LIB_SRCS scripts/northrend/icecrown.cpp scripts/northrend/sholazar_basin.cpp scripts/northrend/zuldrak.cpp - scripts/npc/npc_escortAI.cpp - scripts/npc/npc_escortAI.h scripts/outland/blades_edge_mountains.cpp scripts/outland/boss_doomlord_kazzak.cpp scripts/outland/boss_doomwalker.cpp diff --git a/src/bindings/scripts/ScriptMgr.h b/src/bindings/scripts/ScriptMgr.h index 06830532c9b..ad341a98098 100644 --- a/src/bindings/scripts/ScriptMgr.h +++ b/src/bindings/scripts/ScriptMgr.h @@ -5,8 +5,8 @@ * This program is free software licensed under GPL version 2 * Please see the included DOCS/LICENSE.TXT for more information */ -#ifndef SCRIPTMGR_H -#define SCRIPTMGR_H +#ifndef SC_SCRIPTMGR_H +#define SC_SCRIPTMGR_H #include "Common.h" #include "Platform/CompilerDefs.h" diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index 5518d35f66f..f2df15cf407 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -46,7 +46,7 @@ - - - - - - + + + + + + + + + + + + + + + @@ -487,22 +507,6 @@ > - - - - - - - - @@ -618,18 +622,6 @@ > - - - - - - diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index 5bdbd099d7f..5d46c04a913 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -46,7 +46,7 @@ - - - - - - + + + + + + + + + + + + + + + @@ -484,22 +504,6 @@ > - - - - - - - - @@ -615,18 +619,6 @@ > - - - - - - diff --git a/src/bindings/scripts/base/escortAI.cpp b/src/bindings/scripts/base/escortAI.cpp new file mode 100644 index 00000000000..4fcfb00b0f9 --- /dev/null +++ b/src/bindings/scripts/base/escortAI.cpp @@ -0,0 +1,388 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software licensed under GPL version 2 + * Please see the included DOCS/LICENSE.TXT for more information */ + +/* ScriptData +SDName: Npc_EscortAI +SD%Complete: 100 +SDComment: +SDCategory: Npc +EndScriptData */ + +#include "precompiled.h" +#include "escortAI.h" + +enum +{ + POINT_LAST_POINT = 0xFFFFFF, + POINT_HOME = 0xFFFFFE +}; + +extern std::list PointMovementList; + +void npc_escortAI::AttackStart(Unit* pWho) +{ + if (!pWho) + return; + + if (m_creature->Attack(pWho, true)) + { + if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) + m_creature->GetMotionMaster()->MovementExpired(); + + if (IsCombatMovement()) + m_creature->GetMotionMaster()->MoveChase(pWho); + } +} + +void npc_escortAI::MoveInLineOfSight(Unit* pWho) +{ + if (IsBeingEscorted && !m_bIsActiveAttacker) + return; + + ScriptedAI::MoveInLineOfSight(pWho); +} + +void npc_escortAI::JustDied(Unit* pKiller) +{ + if (!IsBeingEscorted || !PlayerGUID || !m_pQuestForEscort) + return; + + if (Player* pPlayer = Unit::GetPlayer(PlayerGUID)) + { + if (Group* pGroup = pPlayer->GetGroup()) + { + for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) + { + if (Player* pMember = pRef->getSource()) + { + if (pPlayer->GetQuestStatus(m_pQuestForEscort->GetQuestId()) == QUEST_STATUS_INCOMPLETE) + pPlayer->FailQuest(m_pQuestForEscort->GetQuestId()); + } + } + } + else + { + if (pPlayer->GetQuestStatus(m_pQuestForEscort->GetQuestId()) == QUEST_STATUS_INCOMPLETE) + pPlayer->FailQuest(m_pQuestForEscort->GetQuestId()); + } + } +} + +void npc_escortAI::JustRespawned() +{ + IsBeingEscorted = false; + IsOnHold = false; + + if (!IsCombatMovement()) + SetCombatMovement(true); + + //add a small delay before going to first waypoint, normal in near all cases + m_uiWPWaitTimer = 2500; + + if (m_creature->getFaction() != m_creature->GetCreatureInfo()->faction_A) + me->RestoreFaction(); + + Reset(); +} + +void npc_escortAI::ReturnToLastPoint() +{ + float x, y, z, o; + m_creature->GetHomePosition(x, y, z, o); + m_creature->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z); +} + +void npc_escortAI::EnterEvadeMode() +{ + m_creature->RemoveAllAuras(); + m_creature->DeleteThreatList(); + m_creature->CombatStop(true); + m_creature->SetLootRecipient(NULL); + + if (IsBeingEscorted) + { + m_bIsReturning = true; + ReturnToLastPoint(); + debug_log("TSCR: EscortAI has left combat and is now returning to last point"); + } + else + m_creature->GetMotionMaster()->MoveTargetedHome(); + + Reset(); +} + +void npc_escortAI::UpdateAI(const uint32 uiDiff) +{ + //Waypoint Updating + if (IsBeingEscorted && !m_creature->getVictim() && m_uiWPWaitTimer && !m_bIsReturning) + { + if (m_uiWPWaitTimer <= uiDiff) + { + //End of the line + if (CurrentWP == WaypointList.end()) + { + if (DespawnAtEnd) + { + debug_log("TSCR: EscortAI reached end of waypoints"); + + if (m_bCanReturnToStart) + { + float fRetX, fRetY, fRetZ; + m_creature->GetRespawnCoord(fRetX, fRetY, fRetZ); + + m_creature->GetMotionMaster()->MovePoint(POINT_HOME, fRetX, fRetY, fRetZ); + + m_uiWPWaitTimer = 0; + + debug_log("TSCR: EscortAI are returning home to spawn location: %u, %f, %f, %f", POINT_HOME, fRetX, fRetY, fRetZ); + return; + } + + if (m_bCanInstantRespawn) + { + m_creature->setDeathState(JUST_DIED); + m_creature->Respawn(); + } + else + m_creature->ForcedDespawn(); + + return; + } + else + { + debug_log("TSCR: EscortAI reached end of waypoints with Despawn off"); + + return; + } + } + + if (!IsOnHold) + { + m_creature->GetMotionMaster()->MovePoint(CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z); + debug_log("TSCR: EscortAI Next WP is: %u, %f, %f, %f", CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z); + m_uiWPWaitTimer = 0; + } + } + else + m_uiWPWaitTimer -= uiDiff; + } + + //Check if player or any member of his group is within range + if (IsBeingEscorted && PlayerGUID && !m_creature->getVictim() && !m_bIsReturning) + { + if (m_uiPlayerCheckTimer < uiDiff) + { + bool bIsMaxRangeExceeded = true; + + if (Player* pPlayer = Unit::GetPlayer(PlayerGUID)) + { + if (Group* pGroup = pPlayer->GetGroup()) + { + for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) + { + Player* pMember = pRef->getSource(); + + if (pMember && m_creature->IsWithinDistInMap(pMember, GetMaxPlayerDistance())) + { + bIsMaxRangeExceeded = false; + break; + } + } + } + else + { + if (m_creature->IsWithinDistInMap(pPlayer, GetMaxPlayerDistance())) + bIsMaxRangeExceeded = false; + } + } + + if (DespawnAtFar && bIsMaxRangeExceeded) + { + debug_log("TSCR: EscortAI failed because player/group was to far away or not found"); + + if (m_bCanInstantRespawn) + { + m_creature->setDeathState(JUST_DIED); + m_creature->Respawn(); + } + else + m_creature->ForcedDespawn(); + + return; + } + + m_uiPlayerCheckTimer = 1000; + } + else + m_uiPlayerCheckTimer -= uiDiff; + } + + if (CanMelee && UpdateVictim()) + DoMeleeAttackIfReady(); +} + +void npc_escortAI::MovementInform(uint32 uiMoveType, uint32 uiPointId) +{ + if (uiMoveType != POINT_MOTION_TYPE || !IsBeingEscorted) + return; + + //Combat start position reached, continue waypoint movement + if (uiPointId == POINT_LAST_POINT) + { + debug_log("TSCR: EscortAI has returned to original position before combat"); + + if (m_bIsRunning && m_creature->HasUnitMovementFlag(MOVEMENTFLAG_WALK_MODE)) + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + else if (!m_bIsRunning && !m_creature->HasUnitMovementFlag(MOVEMENTFLAG_WALK_MODE)) + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + + m_bIsReturning = false; + + if (!m_uiWPWaitTimer) + m_uiWPWaitTimer = 1; + } + else if (uiPointId == POINT_HOME) + { + debug_log("TSCR: EscortAI has returned to original home location and will continue from beginning of waypoint list."); + + CurrentWP = WaypointList.begin(); + m_uiWPWaitTimer = 1; + } + else + { + //Make sure that we are still on the right waypoint + if (CurrentWP->id != uiPointId) + { + debug_log("TSCR ERROR: EscortAI reached waypoint out of order %d, expected %d", uiPointId, CurrentWP->id); + return; + } + + debug_log("TSCR: EscortAI Waypoint %d reached", CurrentWP->id); + + //Call WP function + WaypointReached(CurrentWP->id); + + m_uiWPWaitTimer = CurrentWP->WaitTimeMs + 1; + + ++CurrentWP; + } +} + +/* +void npc_escortAI::OnPossess(bool apply) +{ + // We got possessed in the middle of being escorted, store the point + // where we left off to come back to when possess is removed + if (IsBeingEscorted) + { + if (apply) + m_creature->GetPosition(LastPos.x, LastPos.y, LastPos.z); + else + { + Returning = true; + m_creature->GetMotionMaster()->MovementExpired(); + m_creature->GetMotionMaster()->MovePoint(WP_LAST_POINT, LastPos.x, LastPos.y, LastPos.z); + } + } +} +*/ + +void npc_escortAI::AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs) +{ + Escort_Waypoint t(id, x, y, z, WaitTimeMs); + + WaypointList.push_back(t); +} + +void npc_escortAI::FillPointMovementListForCreature() +{ + UNORDERED_MAP >::iterator pPointsEntries = PointMovementMap.find(m_creature->GetEntry()); + + if (pPointsEntries != PointMovementMap.end()) + { + std::vector::iterator itr; + + for (itr = pPointsEntries->second.begin(); itr != pPointsEntries->second.end(); ++itr) + { + Escort_Waypoint pPoint(itr->m_uiPointId,itr->m_fX,itr->m_fY,itr->m_fZ,itr->m_uiWaitTime); + WaypointList.push_back(pPoint); + } + } +} + +void npc_escortAI::SetRun(bool bRun) +{ + if (bRun) + { + if (!m_bIsRunning) + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + else + debug_log("TSCR: EscortAI attempt to set run mode, but is already running."); + } + else + { + if (m_bIsRunning) + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + else + debug_log("TSCR: EscortAI attempt to set walk mode, but is already walking."); + } + m_bIsRunning = bRun; +} + +//TODO: get rid of this many variables passed in function. +void npc_escortAI::Start(bool bIsActiveAttacker, bool bRun, uint64 uiPlayerGUID, const Quest* pQuest, bool bInstantRespawn, bool bCanLoopPath) +{ + if (m_creature->getVictim()) + { + debug_log("TSCR ERROR: EscortAI attempt to Start while in combat"); + return; + } + + if (IsBeingEscorted) + { + error_log("TSCR: EscortAI attempt to Start while already escorting"); + return; + } + + if (WaypointList.empty()) + { + error_db_log("TSCR: EscortAI Start with 0 waypoints (possible missing entry in script_waypoint)"); + return; + } + + //set variables + m_bIsActiveAttacker = bIsActiveAttacker; + m_bIsRunning = bRun; + + PlayerGUID = uiPlayerGUID; + m_pQuestForEscort = pQuest; + + m_bCanInstantRespawn = bInstantRespawn; + m_bCanReturnToStart = bCanLoopPath; + + if (m_bCanReturnToStart && m_bCanInstantRespawn) + debug_log("TSCR: EscortAI is set to return home after waypoint end and instant respawn at waypoint end. Creature will never despawn."); + + if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE) + { + m_creature->GetMotionMaster()->MovementExpired(); + m_creature->GetMotionMaster()->MoveIdle(); + debug_log("TSCR: EscortAI start with WAYPOINT_MOTION_TYPE, changed to MoveIdle."); + } + + //disable npcflags + m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); + + debug_log("TSCR: EscortAI started with %d waypoints. ActiveAttacker = %d, Run = %d, PlayerGUID = %d", WaypointList.size(), m_bIsActiveAttacker, m_bIsRunning, PlayerGUID); + + CurrentWP = WaypointList.begin(); + + //Set initial speed + if (m_bIsRunning) + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + else + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + + IsBeingEscorted = true; +} diff --git a/src/bindings/scripts/base/escortAI.h b/src/bindings/scripts/base/escortAI.h new file mode 100644 index 00000000000..90a99152b68 --- /dev/null +++ b/src/bindings/scripts/base/escortAI.h @@ -0,0 +1,106 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software licensed under GPL version 2 + * Please see the included DOCS/LICENSE.TXT for more information */ + +#ifndef SC_ESCORTAI_H +#define SC_ESCORTAI_H + +#define DEFAULT_MAX_PLAYER_DISTANCE 50 + +extern UNORDERED_MAP > PointMovementMap; + +struct Escort_Waypoint +{ + Escort_Waypoint(uint32 _id, float _x, float _y, float _z, uint32 _w) + { + id = _id; + x = _x; + y = _y; + z = _z; + WaitTimeMs = _w; + } + + uint32 id; + float x; + float y; + float z; + uint32 WaitTimeMs; +}; + +struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI +{ + public: + explicit npc_escortAI(Creature* pCreature) : ScriptedAI(pCreature), + IsBeingEscorted(false), IsOnHold(false), PlayerGUID(0), MaxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE), CanMelee(true), m_uiPlayerCheckTimer(1000), m_uiWPWaitTimer(2500), m_bIsReturning(false), m_bIsActiveAttacker(true), m_bIsRunning(false), DespawnAtEnd(true), DespawnAtFar(true), m_pQuestForEscort(NULL), m_bCanInstantRespawn(false), m_bCanReturnToStart(false) {} + ~npc_escortAI() {} + + // Pure Virtual Functions + virtual void WaypointReached(uint32) = 0; + + // CreatureAI functions + void AttackStart(Unit* who); + + void MoveInLineOfSight(Unit* who); + + void JustDied(Unit*); + + void JustRespawned(); + + void ReturnToLastPoint(); + + void EnterEvadeMode(); + + void UpdateAI(const uint32); + + void MovementInform(uint32, uint32); + + // EscortAI functions + void AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs = 0); + + void FillPointMovementListForCreature(); + + void Start(bool bIsActiveAttacker = true, bool bRun = false, uint64 uiPlayerGUID = 0, const Quest* pQuest = NULL, bool bInstantRespawn = false, bool bCanLoopPath = false); + + void SetRun(bool bRun = true); + + void SetMaxPlayerDistance(float newMax) { MaxPlayerDistance = newMax; } + float GetMaxPlayerDistance() { return MaxPlayerDistance; } + + bool IsEscorted() {return IsBeingEscorted;} + + void SetCanMelee(bool usemelee) { CanMelee = usemelee; } + void SetDespawnAtEnd(bool despawn) { DespawnAtEnd = despawn; } + void SetDespawnAtFar(bool despawn) { DespawnAtFar = despawn; } + bool GetAttack() { return m_bIsActiveAttacker; }//used in EnterEvadeMode override + bool GetIsBeingEscorted() { return IsBeingEscorted; }//used in EnterEvadeMode override + void SetReturning(bool returning) { m_bIsReturning = returning; }//used in EnterEvadeMode override + void SetCanAttack(bool attack) { m_bIsActiveAttacker = attack; } + uint64 GetEventStarterGUID() { return PlayerGUID; } + + // EscortAI variables + protected: + uint64 PlayerGUID; + bool IsBeingEscorted; + bool IsOnHold; + + private: + uint32 m_uiWPWaitTimer; + uint32 m_uiPlayerCheckTimer; + float MaxPlayerDistance; + + const Quest* m_pQuestForEscort; //generally passed in Start() when regular escort script. + + std::list WaypointList; + std::list::iterator CurrentWP; + + bool m_bIsActiveAttacker; //possible obsolete, and should be determined with db only (civilian) + bool m_bIsReturning; //in use when creature leave combat, and are returning to combat start position + bool m_bIsRunning; //all creatures are walking by default (has flag MOVEMENTFLAG_WALK) + bool m_bCanInstantRespawn; //if creature should respawn instantly after escort over (if not, database respawntime are used) + bool m_bCanReturnToStart; //if creature can walk same path (loop) without despawn. Not for regular escort quests. + bool CanMelee; + bool DespawnAtEnd; + bool DespawnAtFar; +}; +#endif + diff --git a/src/bindings/scripts/base/guard_ai.cpp b/src/bindings/scripts/base/guard_ai.cpp new file mode 100644 index 00000000000..7f1daa1e2df --- /dev/null +++ b/src/bindings/scripts/base/guard_ai.cpp @@ -0,0 +1,196 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Guard_AI +SD%Complete: 90 +SDComment: +SDCategory: Guards +EndScriptData */ + +#include "precompiled.h" +#include "guard_ai.h" + +// **** This script is for use within every single guard to save coding time **** + +#define GENERIC_CREATURE_COOLDOWN 5000 + +#define SAY_GUARD_SIL_AGGRO1 -1070001 +#define SAY_GUARD_SIL_AGGRO2 -1070002 +#define SAY_GUARD_SIL_AGGRO3 -1070003 + +void guardAI::Reset() +{ + GlobalCooldown = 0; + BuffTimer = 0; //Rebuff as soon as we can +} + +void guardAI::EnterCombat(Unit *who) +{ + if (m_creature->GetEntry() == 15184) + { + switch(rand()%3) + { + case 0: DoScriptText(SAY_GUARD_SIL_AGGRO1, m_creature, who); break; + case 1: DoScriptText(SAY_GUARD_SIL_AGGRO1, m_creature, who); break; + case 2: DoScriptText(SAY_GUARD_SIL_AGGRO1, m_creature, who); break; + } + } + + if (SpellEntry const *spell = m_creature->reachWithSpellAttack(who)) + DoCastSpell(who, spell); +} + +void guardAI::JustDied(Unit *Killer) +{ + //Send Zone Under Attack message to the LocalDefense and WorldDefense Channels + if (Player* pKiller = Killer->GetCharmerOrOwnerPlayerOrPlayerItself()) + m_creature->SendZoneUnderAttackMessage(pKiller); +} + +void guardAI::UpdateAI(const uint32 diff) +{ + //Always decrease our global cooldown first + if (GlobalCooldown > diff) + GlobalCooldown -= diff; + else GlobalCooldown = 0; + + //Buff timer (only buff when we are alive and not in combat + if (m_creature->isAlive() && !m_creature->isInCombat()) + if (BuffTimer < diff) + { + //Find a spell that targets friendly and applies an aura (these are generally buffs) + SpellEntry const *info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_AURA); + + if (info && !GlobalCooldown) + { + //Cast the buff spell + DoCastSpell(m_creature, info); + + //Set our global cooldown + GlobalCooldown = GENERIC_CREATURE_COOLDOWN; + + //Set our timer to 10 minutes before rebuff + BuffTimer = 600000; + } //Try agian in 30 seconds + else BuffTimer = 30000; + }else BuffTimer -= diff; + + //Return since we have no target + if (!UpdateVictim()) + return; + + // Make sure our attack is ready and we arn't currently casting + if (m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false)) + { + //If we are within range melee the target + if (m_creature->IsWithinMeleeRange(m_creature->getVictim())) + { + bool Healing = false; + SpellEntry const *info = NULL; + + //Select a healing spell if less than 30% hp + if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30) + info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); + + //No healing spell available, select a hostile spell + if (info) Healing = true; + else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, 0, 0, SELECT_EFFECT_DONTCARE); + + //20% chance to replace our white hit with a spell + if (info && rand() % 5 == 0 && !GlobalCooldown) + { + //Cast the spell + if (Healing)DoCastSpell(m_creature, info); + else DoCastSpell(m_creature->getVictim(), info); + + //Set our global cooldown + GlobalCooldown = GENERIC_CREATURE_COOLDOWN; + } + else m_creature->AttackerStateUpdate(m_creature->getVictim()); + + m_creature->resetAttackTimer(); + } + } + else + { + //Only run this code if we arn't already casting + if (!m_creature->IsNonMeleeSpellCasted(false)) + { + bool Healing = false; + SpellEntry const *info = NULL; + + //Select a healing spell if less than 30% hp ONLY 33% of the time + if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30 && rand() % 3 == 0) + info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); + + //No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE) + if (info) Healing = true; + else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, NOMINAL_MELEE_RANGE, 0, SELECT_EFFECT_DONTCARE); + + //Found a spell, check if we arn't on cooldown + if (info && !GlobalCooldown) + { + //If we are currently moving stop us and set the movement generator + if ((*m_creature).GetMotionMaster()->GetCurrentMovementGeneratorType()!=IDLE_MOTION_TYPE) + { + (*m_creature).GetMotionMaster()->Clear(false); + (*m_creature).GetMotionMaster()->MoveIdle(); + } + + //Cast spell + if (Healing) DoCastSpell(m_creature,info); + else DoCastSpell(m_creature->getVictim(),info); + + //Set our global cooldown + GlobalCooldown = GENERIC_CREATURE_COOLDOWN; + + } //If no spells available and we arn't moving run to target + else if ((*m_creature).GetMotionMaster()->GetCurrentMovementGeneratorType()!=TARGETED_MOTION_TYPE) + { + //Cancel our current spell and then mutate new movement generator + m_creature->InterruptNonMeleeSpells(false); + (*m_creature).GetMotionMaster()->Clear(false); + (*m_creature).GetMotionMaster()->MoveChase(m_creature->getVictim()); + } + } + } +} + +void guardAI::DoReplyToTextEmote(uint32 em) +{ + switch(em) + { + case TEXTEMOTE_KISS: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_BOW); break; + case TEXTEMOTE_WAVE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_WAVE); break; + case TEXTEMOTE_SALUTE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); break; + case TEXTEMOTE_SHY: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_FLEX); break; + case TEXTEMOTE_RUDE: + case TEXTEMOTE_CHICKEN: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_POINT); break; + } +} + +void guardAI_orgrimmar::ReceiveEmote(Player* pPlayer, uint32 text_emote) +{ + if (pPlayer->GetTeam()==HORDE) + DoReplyToTextEmote(text_emote); +} + +void guardAI_stormwind::ReceiveEmote(Player* pPlayer, uint32 text_emote) +{ + if (pPlayer->GetTeam() == ALLIANCE) + DoReplyToTextEmote(text_emote); +} diff --git a/src/bindings/scripts/base/guard_ai.h b/src/bindings/scripts/base/guard_ai.h new file mode 100644 index 00000000000..85baa30fb9d --- /dev/null +++ b/src/bindings/scripts/base/guard_ai.h @@ -0,0 +1,43 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software licensed under GPL version 2 + * Please see the included DOCS/LICENSE.TXT for more information */ + +#ifndef SC_GUARDAI_H +#define SC_GUARDAI_H + +#define GENERIC_CREATURE_COOLDOWN 5000 + +struct TRINITY_DLL_DECL guardAI : public ScriptedAI +{ + guardAI(Creature *c) : ScriptedAI(c) {} + + uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds) + uint32 BuffTimer; //This variable keeps track of buffs + + void Reset(); + + void EnterCombat(Unit *who); + + void JustDied(Unit *Killer); + + void UpdateAI(const uint32 diff); + + //common used for guards in main cities + void DoReplyToTextEmote(uint32 em); +}; + +struct TRINITY_DLL_DECL guardAI_orgrimmar : public guardAI +{ + guardAI_orgrimmar(Creature *c) : guardAI(c) {} + + void ReceiveEmote(Player *player, uint32 text_emote); +}; + +struct TRINITY_DLL_DECL guardAI_stormwind : public guardAI +{ + guardAI_stormwind(Creature *c) : guardAI(c) {} + + void ReceiveEmote(Player *player, uint32 text_emote); +}; +#endif + diff --git a/src/bindings/scripts/base/guards.cpp b/src/bindings/scripts/base/guards.cpp new file mode 100644 index 00000000000..fa5592f7c32 --- /dev/null +++ b/src/bindings/scripts/base/guards.cpp @@ -0,0 +1,4110 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Guards +SD%Complete: 100 +SDComment: All Guard gossip data, quite some npc_text-id's still missing, adding constantly as new id's are known. CombatAI should be organized better for future. +SDCategory: Guards +EndScriptData */ + +/* ContentData +guard_azuremyst +guard_bluffwatcher +guard_contested +guard_darnassus +guard_dunmorogh +guard_durotar +guard_elwynnforest +guard_eversong +guard_exodar +guard_ironforge +guard_mulgore +guard_orgrimmar +guard_shattrath +guard_shattrath_aldor +guard_shattrath_scryer +guard_silvermoon +guard_stormwind +guard_teldrassil +guard_tirisfal +guard_undercity +EndContentData */ + +#include "precompiled.h" +#include "guard_ai.h" + +//script spesific action +#define GOSSIP_ACTION_TAVERN 101 +#define GOSSIP_ACTION_GEMMERCHANT 102 +#define GOSSIP_ACTION_MANALOOM 103 + +//script spesific sender +#define GOSSIP_SENDER_SEC_GEMMERCHANT 101 +#define GOSSIP_SENDER_SEC_AUCTIONHOUSE 102 + +//script spesific gossip text +#define GOSSIP_TEXT_TAVERN "Worlds End Tavern" +#define GOSSIP_TEXT_BANKSCYERS "Scyers bank" +#define GOSSIP_TEXT_BANKALDOR "Aldor Bank" +#define GOSSIP_TEXT_INNSCYERS "Scyers Inn" +#define GOSSIP_TEXT_INNALDOR "Aldor Inn" +#define GOSSIP_TEXT_STABLESCYERS "Scyers Stable" +#define GOSSIP_TEXT_STABLEALDOR "Aldor Stable" +#define GOSSIP_TEXT_BATTLEMASTERALLIANCE "Alliance Battlemasters" +#define GOSSIP_TEXT_BATTLEMASTERHORDE "Horde Battlemasters" +#define GOSSIP_TEXT_BATTLEMASTERARENA "Arena Battlemasters" +#define GOSSIP_TEXT_MANALOOM "Mana Loom" +#define GOSSIP_TEXT_ALCHEMYLAB "Alchemy Lab" +#define GOSSIP_TEXT_GEMMERCHANT "Gem Merchant" +#define GOSSIP_TEXT_GEMSCYERS "Scyers Gem Merchant" +#define GOSSIP_TEXT_GEMALDOR "Aldor Gem Merchant" + +#define GOSSIP_TEXT_AH_SILVERMOON_1 "Western Auction House" +#define GOSSIP_TEXT_AH_SILVERMOON_2 "Royal Exchange Auction House" + +#define GOSSIP_TEXT_INN_SILVERMOON_1 "Silvermoon City Inn" +#define GOSSIP_TEXT_INN_SILVERMOON_2 "Wayfarer's Rest tavern" + +/******************************************************* + * guard_azuremyst start + *******************************************************/ + +bool GossipHello_guard_azuremyst(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(10066, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(-3918.95, -11544.7, 7, 6, 0, "Bank"); + pPlayer->SEND_GOSSIP_MENU(10067, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hippogryph Master + pPlayer->SEND_POI(-4057.15, -11788.6, 7, 6, 0, "Stephanos"); + pPlayer->SEND_GOSSIP_MENU(10071, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(-4092.43, -11626.6, 7, 6, 0, "Funaam"); + pPlayer->SEND_GOSSIP_MENU(10073, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-4129.43, -12469, 7, 6, 0, "Caregiver Chellan"); + pPlayer->SEND_GOSSIP_MENU(10074, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master + pPlayer->SEND_POI(-4146.42, -12492.7, 7, 6, 0, "Esbina"); + pPlayer->SEND_GOSSIP_MENU(10075, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(10076, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); + pPlayer->SEND_GOSSIP_MENU(10087, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-4274.81, -11495.3, 7, 6, 0, "Shalannius"); + pPlayer->SEND_GOSSIP_MENU(10077, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-4203.65, -12526.5, 7, 6, 0, "Acteon"); + pPlayer->SEND_GOSSIP_MENU(10078, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-4149.62, -12530.1, 7, 6, 0, "Semid"); + pPlayer->SEND_GOSSIP_MENU(10081, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(-4138.98, -12468.5, 7, 6, 0, "Tullas"); + pPlayer->SEND_GOSSIP_MENU(10083, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-4131.66, -12478.6, 7, 6, 0, "Guvan"); + pPlayer->SEND_GOSSIP_MENU(10084, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Shaman + pPlayer->SEND_POI(-4162.33, -12456.1, 7, 6, 0, "Tuluun"); + pPlayer->SEND_GOSSIP_MENU(10085, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-4165.05, -12536.4, 7, 6, 0, "Ruada"); + pPlayer->SEND_GOSSIP_MENU(10086, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-4191.15, -12470, 7, 6, 0, "Daedal"); + pPlayer->SEND_GOSSIP_MENU(10088, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-4726.29, -12387, 7, 6, 0, "Blacksmith Calypso"); + pPlayer->SEND_GOSSIP_MENU(10089, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-4710.87, -12400.6, 7, 6, 0, "'Cookie' McWeaksauce"); + pPlayer->SEND_GOSSIP_MENU(10090, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-3882.85, -11496.7, 7, 6, 0, "Nahogg"); + pPlayer->SEND_GOSSIP_MENU(10091, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-4157.57, -12470.2, 7, 6, 0, "Artificer Daelo"); + pPlayer->SEND_GOSSIP_MENU(10092, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-4199.11, -12469.9, 7, 6, 0, "Anchorite Fateema"); + pPlayer->SEND_GOSSIP_MENU(10093, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-4266.38, -12985.1, 7, 6, 0, "Diktynna"); + pPlayer->SEND_GOSSIP_MENU(10094, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_GOSSIP_MENU(10095, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting + pPlayer->SEND_POI(-3781.55, -11541.8, 7, 6, 0, "Farii"); + pPlayer->SEND_GOSSIP_MENU(10096, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking + pPlayer->SEND_POI(-3442.68, -12322.2, 7, 6, 0, "Moordo"); + pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Mining + pPlayer->SEND_POI(-4179.89, -12493.1, 7, 6, 0, "Dulvi"); + pPlayer->SEND_GOSSIP_MENU(10097, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Skinning + pPlayer->SEND_POI(-3431.17, -12316.5, 7, 6, 0, "Gurf"); + pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring + pPlayer->SEND_POI(-4711.54, -12386.7, 7, 6, 0, "Erin Kelly"); + pPlayer->SEND_GOSSIP_MENU(10099, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_azuremyst end + *******************************************************/ + +CreatureAI* GetAI_guard_azuremyst(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_bluffwatcher start + *******************************************************/ + +bool GossipHello_guard_bluffwatcher(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(-1257.8, 24.14, 7, 6, 0, "Thunder Bluff Bank"); + pPlayer->SEND_GOSSIP_MENU(1292, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Wind master + pPlayer->SEND_POI(-1196.43, 28.26, 7, 6, 0, "Wind Rider Roost"); + pPlayer->SEND_GOSSIP_MENU(1293, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(-1296.5, 127.57, 7, 6, 0, "Thunder Bluff Civic Information"); + pPlayer->SEND_GOSSIP_MENU(1291, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-1296, 39.7, 7, 6, 0, "Thunder Bluff Inn"); + pPlayer->SEND_GOSSIP_MENU(3153, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(-1263.59, 44.36, 7, 6, 0, "Thunder Bluff Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3154, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Auction House + pPlayer->SEND_POI(1381.77, -4371.16, 7, 6, 0, GOSSIP_TEXT_AUCTIONHOUSE); + pPlayer->SEND_GOSSIP_MENU(3155, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Weapon master + pPlayer->SEND_POI(-1282.31, 89.56, 7, 6, 0, "Ansekhwa"); + pPlayer->SEND_GOSSIP_MENU(4520, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Stable master + pPlayer->SEND_POI(-1270.19, 48.84, 7, 6, 0, "Bulrug"); + pPlayer->SEND_GOSSIP_MENU(5977, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-1387.82, -97.55, 7, 6, 0, "Taim Ragetotem"); + pPlayer->SEND_GOSSIP_MENU(7522, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-997, 214.12, 7, 6, 0, "Martin Lindsey"); + pPlayer->SEND_GOSSIP_MENU(7648, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(-1384.94, -75.91, 7, 6, 0, "Kergul Bloodaxe"); + pPlayer->SEND_GOSSIP_MENU(7523, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-1054.47, -285, 7, 6, 0, "Hall of Elders"); + pPlayer->SEND_GOSSIP_MENU(1294, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); + pPlayer->SEND_GOSSIP_MENU(1295, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); + pPlayer->SEND_GOSSIP_MENU(1296, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Priest + pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); + pPlayer->SEND_GOSSIP_MENU(1297, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Shaman + pPlayer->SEND_POI(-989.54, 278.25, 7, 6, 0, "Hall of Spirits"); + pPlayer->SEND_GOSSIP_MENU(1298, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warrior + pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); + pPlayer->SEND_GOSSIP_MENU(1299, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1085.56, 27.29, 7, 6, 0, "Bena's Alchemy"); + pPlayer->SEND_GOSSIP_MENU(1332, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1239.75, 104.88, 7, 6, 0, "Karn's Smithy"); + pPlayer->SEND_GOSSIP_MENU(1333, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-1214.5, -21.23, 7, 6, 0, "Aska's Kitchen"); + pPlayer->SEND_GOSSIP_MENU(1334, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-1112.65, 48.26, 7, 6, 0, "Dawnstrider Enchanters"); + pPlayer->SEND_GOSSIP_MENU(1335, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-996.58, 200.5, 7, 6, 0, "Spiritual Healing"); + pPlayer->SEND_GOSSIP_MENU(1336, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Fishing + pPlayer->SEND_POI(-1169.35, -68.87, 7, 6, 0, "Mountaintop Bait & Tackle"); + pPlayer->SEND_GOSSIP_MENU(1337, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism + pPlayer->SEND_POI(-1137.7, -1.51, 7, 6, 0, "Holistic Herbalism"); + pPlayer->SEND_GOSSIP_MENU(1338, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Inscription + pPlayer->SEND_POI(-1000.26, 209.52, 7, 6, 0, "Poshken Hardbinder"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); + pPlayer->SEND_GOSSIP_MENU(1339, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_POI(-1249.17, 155, 7, 6, 0, "Stonehoof Geology"); + pPlayer->SEND_GOSSIP_MENU(1340, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_POI(-1148.56, 51.18, 7, 6, 0, "Mooranta"); + pPlayer->SEND_GOSSIP_MENU(1343, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); + pPlayer->SEND_GOSSIP_MENU(1341, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_bluffwatcher end + *******************************************************/ + +CreatureAI* GetAI_guard_bluffwatcher(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_contested start + *******************************************************/ + +CreatureAI* GetAI_guard_contested(Creature* pCreature) +{ + return new guardAI (pCreature); +} +/******************************************************* + * guard_contested end + *******************************************************/ + +/******************************************************* + * guard_darnassus start + *******************************************************/ + +bool GossipHello_guard_darnassus(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(3016, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction house + pPlayer->SEND_POI(9861.23, 2334.55, 7, 6, 0, "Darnassus Auction House"); + pPlayer->SEND_GOSSIP_MENU(3833, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(9938.45, 2512.35, 7, 6, 0, "Darnassus Bank"); + pPlayer->SEND_GOSSIP_MENU(3017, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Wind master + pPlayer->SEND_POI(9945.65, 2618.94, 7, 6, 0, "Rut'theran Village"); + pPlayer->SEND_GOSSIP_MENU(3018, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Guild master + pPlayer->SEND_POI(10076.40, 2199.59, 7, 6, 0, "Darnassus Guild Master"); + pPlayer->SEND_GOSSIP_MENU(3019, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Inn + pPlayer->SEND_POI(10133.29, 2222.52, 7, 6, 0, "Darnassus Inn"); + pPlayer->SEND_GOSSIP_MENU(3020, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox + pPlayer->SEND_POI(9942.17, 2495.48, 7, 6, 0, "Darnassus Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3021, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Stable master + pPlayer->SEND_POI(10167.20, 2522.66, 7, 6, 0, "Alassin"); + pPlayer->SEND_GOSSIP_MENU(5980, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer + pPlayer->SEND_POI(9907.11, 2329.70, 7, 6, 0, "Ilyenia Moonfire"); + pPlayer->SEND_GOSSIP_MENU(4517, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(9923.61, 2327.43, 7, 6, 0, "Brogun Stoneshield"); + pPlayer->SEND_GOSSIP_MENU(7518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(9977.37, 2324.39, 7, 6, 0, "Keras Wolfheart"); + pPlayer->SEND_GOSSIP_MENU(7651, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(9979.84, 2315.79, 7, 6, 0, "Aethalas"); + pPlayer->SEND_GOSSIP_MENU(7482, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(10186, 2570.46, 7, 6, 0, "Darnassus Druid Trainer"); + pPlayer->SEND_GOSSIP_MENU(3024, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(10177.29, 2511.10, 7, 6, 0, "Darnassus Hunter Trainer"); + pPlayer->SEND_GOSSIP_MENU(3023, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(9659.12, 2524.88, 7, 6, 0, "Temple of the Moon"); + pPlayer->SEND_GOSSIP_MENU(3025, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Rogue + pPlayer->SEND_POI(10122, 2599.12, 7, 6, 0, "Darnassus Rogue Trainer"); + pPlayer->SEND_GOSSIP_MENU(3026, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(9951.91, 2280.38, 7, 6, 0, "Warrior's Terrace"); + pPlayer->SEND_GOSSIP_MENU(3033, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(10075.90, 2356.76, 7, 6, 0, "Darnassus Alchemy Trainer"); + pPlayer->SEND_GOSSIP_MENU(3035, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Cooking + pPlayer->SEND_POI(10088.59, 2419.21, 7, 6, 0, "Darnassus Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3036, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting + pPlayer->SEND_POI(10146.09, 2313.42, 7, 6, 0, "Darnassus Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(3337, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //First Aid + pPlayer->SEND_POI(10150.09, 2390.43, 7, 6, 0, "Darnassus First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(3037, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Fishing + pPlayer->SEND_POI(9836.20, 2432.17, 7, 6, 0, "Darnassus Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(3038, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism + pPlayer->SEND_POI(9757.17, 2430.16, 7, 6, 0, "Darnassus Herbalism Trainer"); + pPlayer->SEND_GOSSIP_MENU(3039, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Inscription + pPlayer->SEND_POI(10139.00, 2343.31, 7, 6, 0, "Feyden Darkin"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking + pPlayer->SEND_POI(10086.59, 2255.77, 7, 6, 0, "Darnassus Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3040, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Skinning + pPlayer->SEND_POI(10081.40, 2257.18, 7, 6, 0, "Darnassus Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(3042, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring + pPlayer->SEND_POI(10079.70, 2268.19, 7, 6, 0, "Darnassus Tailor"); + pPlayer->SEND_GOSSIP_MENU(3044, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_darnassus end + *******************************************************/ + +CreatureAI* GetAI_guard_darnassus(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_dunmorogh start + *******************************************************/ + +bool GossipHello_guard_dunmorogh(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4287, pCreature->GetGUID()); + + return true; +} + +void SendDefaultMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4288, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master + pPlayer->SEND_GOSSIP_MENU(4289, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_GOSSIP_MENU(4290, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-5582.66, -525.89, 7, 6, 0, "Thunderbrew Distillery"); + pPlayer->SEND_GOSSIP_MENU(4291, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master + pPlayer->SEND_POI(-5604, -509.58, 7, 6, 0, "Shelby Stoneflint"); + pPlayer->SEND_GOSSIP_MENU(5985, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(4300, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(-5618.29, -454.25, 7, 6, 0, "Grif Wildheart"); + pPlayer->SEND_GOSSIP_MENU(4293, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Magis Sparkmantle"); + pPlayer->SEND_GOSSIP_MENU(4294, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Paladin + pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Azar Stronghammer"); + pPlayer->SEND_GOSSIP_MENU(4295, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Priest + pPlayer->SEND_POI(-5591.74, -525.61, 7, 6, 0, "Maxan Anvol"); + pPlayer->SEND_GOSSIP_MENU(4296, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Rogue + pPlayer->SEND_POI(-5602.75, -542.4, 7, 6, 0, "Hogral Bakkan"); + pPlayer->SEND_GOSSIP_MENU(4297, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(-5641.97, -523.76, 7, 6, 0, "Gimrizz Shadowcog"); + pPlayer->SEND_GOSSIP_MENU(4298, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-5604.79, -529.38, 7, 6, 0, "Granis Swiftaxe"); + pPlayer->SEND_GOSSIP_MENU(4299, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_GOSSIP_MENU(4301, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-5584.72, -428.41, 7, 6, 0, "Tognus Flintfire"); + pPlayer->SEND_GOSSIP_MENU(4302, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-5596.85, -541.43, 7, 6, 0, "Gremlock Pilsnor"); + pPlayer->SEND_GOSSIP_MENU(4303, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4304, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Bronk Guzzlegear"); + pPlayer->SEND_GOSSIP_MENU(4305, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-5603.67, -523.57, 7, 6, 0, "Thamner Pol"); + pPlayer->SEND_GOSSIP_MENU(4306, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-5199.9, 58.58, 7, 6, 0, "Paxton Ganter"); + pPlayer->SEND_GOSSIP_MENU(4307, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_GOSSIP_MENU(4308, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_GOSSIP_MENU(4310, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Yarr Hamerstone"); + pPlayer->SEND_GOSSIP_MENU(4311, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_GOSSIP_MENU(4312, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4313, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_dunmorogh end + *******************************************************/ + +CreatureAI* GetAI_guard_dunmorogh(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_durotar start + *******************************************************/ + +bool GossipHello_guard_durotar(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(4037, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4032, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider + pPlayer->SEND_GOSSIP_MENU(4033, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(338.7, -4688.87, 7, 6, 0, "Razor Hill Inn"); + pPlayer->SEND_GOSSIP_MENU(4034, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable master + pPlayer->SEND_POI(330.31, -4710.66, 7, 6, 0, "Shoja'my"); + pPlayer->SEND_GOSSIP_MENU(5973, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4035, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(4036, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(276, -4706.72, 7, 6, 0, "Thotar"); + pPlayer->SEND_GOSSIP_MENU(4013, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(-839.33, -4935.6, 7, 6, 0, "Un'Thuwa"); + pPlayer->SEND_GOSSIP_MENU(4014, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(296.22, -4828.1, 7, 6, 0, "Tai'jin"); + pPlayer->SEND_GOSSIP_MENU(4015, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Rogue + pPlayer->SEND_POI(265.76, -4709, 7, 6, 0, "Kaplak"); + pPlayer->SEND_GOSSIP_MENU(4016, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Shaman + pPlayer->SEND_POI(307.79, -4836.97, 7, 6, 0, "Swart"); + pPlayer->SEND_GOSSIP_MENU(4017, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(355.88, -4836.45, 7, 6, 0, "Dhugru Gorelust"); + pPlayer->SEND_GOSSIP_MENU(4018, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(312.3, -4824.66, 7, 6, 0, "Tarshaw Jaggedscar"); + pPlayer->SEND_GOSSIP_MENU(4019, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-800.25, -4894.33, 7, 6, 0, "Miao'zan"); + pPlayer->SEND_GOSSIP_MENU(4020, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(373.24, -4716.45, 7, 6, 0, "Dwukk"); + pPlayer->SEND_GOSSIP_MENU(4021, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_GOSSIP_MENU(4022, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4023, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(368.95, -4723.95, 7, 6, 0, "Mukdrak"); + pPlayer->SEND_GOSSIP_MENU(4024, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(327.17, -4825.62, 7, 6, 0, "Rawrk"); + pPlayer->SEND_GOSSIP_MENU(4025, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-1065.48, -4777.43, 7, 6, 0, "Lau'Tiki"); + pPlayer->SEND_GOSSIP_MENU(4026, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-836.25, -4896.89, 7, 6, 0, "Mishiki"); + pPlayer->SEND_GOSSIP_MENU(4027, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_GOSSIP_MENU(4028, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_POI(366.94, -4705, 7, 6, 0, "Krunn"); + pPlayer->SEND_GOSSIP_MENU(4029, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_GOSSIP_MENU(4030, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4031, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_durotar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_durotar end + *******************************************************/ + +CreatureAI* GetAI_guard_durotar(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_elwynnforest start + *******************************************************/ + +bool GossipHello_guard_elwynnforest(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4260, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master + pPlayer->SEND_GOSSIP_MENU(4261, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_GOSSIP_MENU(4262, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-9459.34, 42.08, 7, 6, 0, "Lion's Pride Inn"); + pPlayer->SEND_GOSSIP_MENU(4263, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master + pPlayer->SEND_POI(-9466.62, 45.87, 7, 6, 0, "Erma"); + pPlayer->SEND_GOSSIP_MENU(5983, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_GOSSIP_MENU(4265, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_GOSSIP_MENU(4266, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-9471.12, 33.44, 7, 6, 0, "Zaldimar Wefhellt"); + pPlayer->SEND_GOSSIP_MENU(4268, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(-9469, 108.05, 7, 6, 0, "Brother Wilhelm"); + pPlayer->SEND_GOSSIP_MENU(4269, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-9461.07, 32.6, 7, 6, 0, "Priestess Josetta"); + pPlayer->SEND_GOSSIP_MENU(4267, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Rogue + pPlayer->SEND_POI(-9465.13, 13.29, 7, 6, 0, "Keryn Sylvius"); + pPlayer->SEND_GOSSIP_MENU(4270, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warlock + pPlayer->SEND_POI(-9473.21, -4.08, 7, 6, 0, "Maximillian Crowe"); + pPlayer->SEND_GOSSIP_MENU(4272, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Warrior + pPlayer->SEND_POI(-9461.82, 109.50, 7, 6, 0, "Lyria Du Lac"); + pPlayer->SEND_GOSSIP_MENU(4271, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-9057.04, 153.63, 7, 6, 0, "Alchemist Mallory"); + pPlayer->SEND_GOSSIP_MENU(4274, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-9456.58, 87.90, 7, 6, 0, "Smith Argus"); + pPlayer->SEND_GOSSIP_MENU(4275, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-9467.54, -3.16, 7, 6, 0, "Tomas"); + pPlayer->SEND_GOSSIP_MENU(4276, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4277, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_GOSSIP_MENU(4278, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-9456.82, 30.49, 7, 6, 0, "Michelle Belle"); + pPlayer->SEND_GOSSIP_MENU(4279, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-9386.54, -118.73, 7, 6, 0, "Lee Brown"); + pPlayer->SEND_GOSSIP_MENU(4280, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-9060.70, 149.23, 7, 6, 0, "Herbalist Pomeroy"); + pPlayer->SEND_GOSSIP_MENU(4281, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Adele Fielder"); + pPlayer->SEND_GOSSIP_MENU(4282, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_GOSSIP_MENU(4283, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(-9536.91, -1212.76, 7, 6, 0, "Helene Peltskinner"); + pPlayer->SEND_GOSSIP_MENU(4284, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Eldrin"); + pPlayer->SEND_GOSSIP_MENU(4285, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_elwynnforest end + *******************************************************/ + +CreatureAI* GetAI_guard_elwynnforest(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_eversong start + *******************************************************/ + +bool GossipHello_guard_eversong(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bat Handler + pPlayer->SEND_POI(9371.93, -7164.80, 7, 6, 0, "Skymistress Gloaming"); + pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Guild master + pPlayer->SEND_GOSSIP_MENU(10182, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(9483.74, -6844.58, 7, 6, 0, "Delaniel's inn"); + pPlayer->SEND_GOSSIP_MENU(10183, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master + pPlayer->SEND_POI(9489.62, -6829.93, 7, 6, 0, "Anathos"); + pPlayer->SEND_GOSSIP_MENU(10184, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_GOSSIP_MENU(10185, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(9527.44, -6865.25, 7, 6, 0, "Hannovia"); + pPlayer->SEND_GOSSIP_MENU(10186, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(9464.24, -6855.52, 7, 6, 0, "Garridel"); + pPlayer->SEND_GOSSIP_MENU(10187, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(9517.61, -6871.04, 7, 6, 0, "Noellene"); + pPlayer->SEND_GOSSIP_MENU(10189, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(9467.39, -6845.72, 7, 6, 0, "Ponaris"); + pPlayer->SEND_GOSSIP_MENU(10190, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Rogue + pPlayer->SEND_POI(9533.67, -6877.39, 7, 6, 0, "Tannaria"); + pPlayer->SEND_GOSSIP_MENU(10191, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warlock + pPlayer->SEND_POI(9468.99, -6865.60, 7, 6, 0, "Celoenus"); + pPlayer->SEND_GOSSIP_MENU(10192, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(8659.90, -6368.12, 7, 6, 0, "Arcanist Sheynathren"); + pPlayer->SEND_GOSSIP_MENU(10193, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(8984.21, -7419.21, 7, 6, 0, "Arathel Sunforge"); + pPlayer->SEND_GOSSIP_MENU(10194, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(9494.04, -6881.51, 7, 6, 0, "Quarelestra"); + pPlayer->SEND_GOSSIP_MENU(10195, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Engineering + pPlayer->SEND_GOSSIP_MENU(10197, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(9479.46, -6879.16, 7, 6, 0, "Kanaria"); + pPlayer->SEND_GOSSIP_MENU(10198, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Fishing + pPlayer->SEND_GOSSIP_MENU(10199, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism + pPlayer->SEND_POI(8678.92, -6329.09, 7, 6, 0, "Botanist Tyniarrel"); + pPlayer->SEND_GOSSIP_MENU(10200, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Inscription + pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Jewelcrafting + pPlayer->SEND_POI(9484.32, -6874.98, 7, 6, 0, "Aleinia"); + pPlayer->SEND_GOSSIP_MENU(10203, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Sathein"); + pPlayer->SEND_GOSSIP_MENU(10204, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_GOSSIP_MENU(10205, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Mathreyn"); + pPlayer->SEND_GOSSIP_MENU(10206, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(8680.36, -6327.51, 7, 6, 0, "Sempstress Ambershine"); + pPlayer->SEND_GOSSIP_MENU(10207, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_eversong(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_eversong end + *******************************************************/ + +CreatureAI* GetAI_guard_eversong(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_exodar start + *******************************************************/ + +bool GossipHello_guard_exodar(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction house + pPlayer->SEND_POI(-4023.6, -11739.3, 7, 6, 0, "Exodar Auction House"); + pPlayer->SEND_GOSSIP_MENU(9528, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-3923.89, -11544.5, 7, 6, 0, "Exodar Bank"); + pPlayer->SEND_GOSSIP_MENU(9529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(-4092.57, -11626.5, 7, 6, 0, "Exodar Guild Master"); + pPlayer->SEND_GOSSIP_MENU(9539, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Hippogryph master + pPlayer->SEND_POI(-4060.46, -11787.1, 7, 6, 0, "Exodar Hippogryph Master"); + pPlayer->SEND_GOSSIP_MENU(9530, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Inn + pPlayer->SEND_POI(-3741.87, -11695.1, 7, 6, 0, "Exodar Inn"); + pPlayer->SEND_GOSSIP_MENU(9545, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox + pPlayer->SEND_POI(-3972.5, -11696.0, 7, 6, 0, "Mailbox"); + pPlayer->SEND_GOSSIP_MENU(10254, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Stable master + pPlayer->SEND_POI(-3786.5, -11702.5, 7, 6, 0, "Stable Master Arthaid"); + pPlayer->SEND_GOSSIP_MENU(9558, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer + pPlayer->SEND_POI(-4215.68, -11628.9, 7, 6, 0, "Weapon Master Handiir"); + pPlayer->SEND_GOSSIP_MENU(9565, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(9533, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); + pPlayer->SEND_GOSSIP_MENU(9555, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Alterac Valley Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-3998.9, -11345.2, 7, 6, 0, "Arathi Basin Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //A + pPlayer->SEND_POI(-3759.27, -11695.63, 7, 6, 0, "Miglik Blotstrom"); + pPlayer->SEND_GOSSIP_MENU(10223, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //EOS + pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Eye Of The Storm Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //WSG + pPlayer->SEND_POI(-3977.5, -11381.2, 7, 6, 0, "Warsong Gulch Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-4276.0, -11495, 7, 6, 0, "Exodar Druid Trainer"); + pPlayer->SEND_GOSSIP_MENU(9534, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-4210.6, -11575.2, 7, 6, 0, "Exodar Hunter Trainer"); + pPlayer->SEND_GOSSIP_MENU(9544, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-4057.32, -11556.5, 7, 6, 0, "Exodar Mage Trainer"); + pPlayer->SEND_GOSSIP_MENU(9550, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(-4191.2, -11470.4, 7, 6, 0, "Exodar Paladin Trainer"); + pPlayer->SEND_GOSSIP_MENU(9553, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-3969.63, -11482.8, 7, 6, 0, "Exodar Priest Trainer"); + pPlayer->SEND_GOSSIP_MENU(9554, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Shaman + pPlayer->SEND_POI(-3805.5, -11380.7, 7, 6, 0, "Exodar Shaman Trainer"); + pPlayer->SEND_GOSSIP_MENU(9556, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-4189.43, -11653.7, 7, 6, 0, "Exodar Warrior Trainer"); + pPlayer->SEND_GOSSIP_MENU(9562, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Alchemy Trainer"); + pPlayer->SEND_GOSSIP_MENU(9527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-4229.5, -11706, 7, 6, 0, "Exodar Blacksmithing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9532, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-3798.3, -11651.7, 7, 6, 0, "Exodar Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-3889.3, -11495, 7, 6, 0, "Exodar Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9535, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-4257.68, -11640.3, 7, 6, 0, "Exodar Engineering Trainer"); + pPlayer->SEND_GOSSIP_MENU(9536, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-3769.5, -11479.6, 7, 6, 0, "Exodar First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(9537, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-3725.5, -11385.2, 7, 6, 0, "Exodar Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9538, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Herbalist Trainer"); + pPlayer->SEND_GOSSIP_MENU(9543, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting + pPlayer->SEND_POI(-3783, -11546, 7, 6, 0, "Exodar Jewelcrafting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9547, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking + pPlayer->SEND_POI(-4140.6, -11776.7, 7, 6, 0, "Exodar Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9549, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Mining + pPlayer->SEND_POI(-4228, -11697, 7, 6, 0, "Exodar Mining Trainer"); + pPlayer->SEND_GOSSIP_MENU(9552, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Skinning + pPlayer->SEND_POI(-4134.97, -11760.5, 7, 6, 0, "Exodar Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(9557, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring + pPlayer->SEND_POI(-4092.5, -11744.5, 7, 6, 0, "Exodar Tailor Trainer"); + pPlayer->SEND_GOSSIP_MENU(9559, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_exodar end + *******************************************************/ + +CreatureAI* GetAI_guard_exodar(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_ironforge start + *******************************************************/ + +bool GossipHello_guard_ironforge(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_IRONFORGE_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(2760, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction House + pPlayer->SEND_POI(-4957.39, -911.6, 7, 6, 0, "Ironforge Auction House"); + pPlayer->SEND_GOSSIP_MENU(3014, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-4891.91, -991.47, 7, 6, 0, "The Vault"); + pPlayer->SEND_GOSSIP_MENU(2761, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Tram + pPlayer->SEND_POI(-4835.27, -1294.69, 7, 6, 0, "Deeprun Tram"); + pPlayer->SEND_GOSSIP_MENU(3814, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Gryphon Master + pPlayer->SEND_POI(-4821.52, -1152.3, 7, 6, 0, "Ironforge Gryphon Master"); + pPlayer->SEND_GOSSIP_MENU(2762, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Guild Master + pPlayer->SEND_POI(-5021, -996.45, 7, 6, 0, "Ironforge Visitor's Center"); + pPlayer->SEND_GOSSIP_MENU(2764, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Inn + pPlayer->SEND_POI(-4850.47, -872.57, 7, 6, 0, "Stonefire Tavern"); + pPlayer->SEND_GOSSIP_MENU(2768, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox + pPlayer->SEND_POI(-4845.7, -880.55, 7, 6, 0, "Ironforge Mailbox"); + pPlayer->SEND_GOSSIP_MENU(2769, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master + pPlayer->SEND_POI(-5010.2, -1262, 7, 6, 0, "Ulbrek Firehand"); + pPlayer->SEND_GOSSIP_MENU(5986, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Weapons Trainer + pPlayer->SEND_POI(-5040, -1201.88, 7, 6, 0, "Bixi and Buliwyf"); + pPlayer->SEND_GOSSIP_MENU(4518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Class Trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Profession Trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(2793, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-5047.87, -1263.77, 7, 6, 0, "Glordrum Steelbeard"); + pPlayer->SEND_GOSSIP_MENU(7483, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-5038.37, -1266.39, 7, 6, 0, "Donal Osgood"); + pPlayer->SEND_GOSSIP_MENU(7649, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(-5037.24, -1274.82, 7, 6, 0, "Lylandris"); + pPlayer->SEND_GOSSIP_MENU(7528, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(-5023, -1253.68, 7, 6, 0, "Hall of Arms"); + pPlayer->SEND_GOSSIP_MENU(2770, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); + pPlayer->SEND_GOSSIP_MENU(2771, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Paladin + pPlayer->SEND_POI(-4627.02, -926.45, 7, 6, 0, "Hall of Mysteries"); + pPlayer->SEND_GOSSIP_MENU(2773, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Priest + pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); + pPlayer->SEND_GOSSIP_MENU(2772, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Rogue + pPlayer->SEND_POI(-4647.83, -1124, 7, 6, 0, "Ironforge Rogue Trainer"); + pPlayer->SEND_GOSSIP_MENU(2774, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(-4605, -1110.45, 7, 6, 0, "Ironforge Warlock Trainer"); + pPlayer->SEND_GOSSIP_MENU(2775, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-5023.08, -1253.68, 7, 6, 0, "Hall of Arms"); + pPlayer->SEND_GOSSIP_MENU(2776, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Shaman + pPlayer->SEND_POI(-4732, -1147, 7, 6, 0, "Ironforge Shaman Trainer"); + //incorrect id + pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-4858.5, -1241.83, 7, 6, 0, "Berryfizz's Potions and Mixed Drinks"); + pPlayer->SEND_GOSSIP_MENU(2794, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-4796.97, -1110.17, 7, 6, 0, "The Great Forge"); + pPlayer->SEND_GOSSIP_MENU(2795, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-4767.83, -1184.59, 7, 6, 0, "The Bronze Kettle"); + pPlayer->SEND_GOSSIP_MENU(2796, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-4803.72, -1196.53, 7, 6, 0, "Thistlefuzz Arcanery"); + pPlayer->SEND_GOSSIP_MENU(2797, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-4799.56, -1250.23, 7, 6, 0, "Springspindle's Gadgets"); + pPlayer->SEND_GOSSIP_MENU(2798, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-4881.6, -1153.13, 7, 6, 0, "Ironforge Physician"); + pPlayer->SEND_GOSSIP_MENU(2799, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-4597.91, -1091.93, 7, 6, 0, "Traveling Fisherman"); + pPlayer->SEND_GOSSIP_MENU(2800, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-4876.9, -1151.92, 7, 6, 0, "Ironforge Physician"); + pPlayer->SEND_GOSSIP_MENU(2801, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-4807.02, -1194.43, 7, 6, 0, "Elise Brightletter"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); + pPlayer->SEND_GOSSIP_MENU(2802, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Minning + pPlayer->SEND_POI(-4705.06, -1116.43, 7, 6, 0, "Deepmountain Mining Guild"); + pPlayer->SEND_GOSSIP_MENU(2804, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); + pPlayer->SEND_GOSSIP_MENU(2805, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(-4719.60, -1056.96, 7, 6, 0, "Stonebrow's Clothier"); + pPlayer->SEND_GOSSIP_MENU(2807, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_ironforge end + *******************************************************/ + +CreatureAI* GetAI_guard_ironforge(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_mulgore start + *******************************************************/ + +bool GossipHello_guard_mulgore(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4051, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider + pPlayer->SEND_GOSSIP_MENU(4052, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(-2361.38, -349.19, 7, 6, 0, "Bloodhoof Village Inn"); + pPlayer->SEND_GOSSIP_MENU(4053, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable master + pPlayer->SEND_POI(-2338.86, -357.56, 7, 6, 0, "Seikwa"); + pPlayer->SEND_GOSSIP_MENU(5976, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->SEND_GOSSIP_MENU(4069, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(4070, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-2312.15, -443.69, 7, 6, 0, "Gennia Runetotem"); + pPlayer->SEND_GOSSIP_MENU(4054, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-2178.14, -406.14, 7, 6, 0, "Yaw Sharpmane"); + pPlayer->SEND_GOSSIP_MENU(4055, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Shaman + pPlayer->SEND_POI(-2301.5, -439.87, 7, 6, 0, "Narm Skychaser"); + pPlayer->SEND_GOSSIP_MENU(4056, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Warrior + pPlayer->SEND_POI(-2345.43, -494.11, 7, 6, 0, "Krang Stonehoof"); + pPlayer->SEND_GOSSIP_MENU(4057, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_GOSSIP_MENU(4058, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_GOSSIP_MENU(4059, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2263.34, -287.91, 7, 6, 0, "Pyall Silentstride"); + pPlayer->SEND_GOSSIP_MENU(4060, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4061, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-2353.52, -355.82, 7, 6, 0, "Vira Younghoof"); + pPlayer->SEND_GOSSIP_MENU(4062, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Fishing + pPlayer->SEND_POI(-2349.21, -241.37, 7, 6, 0, "Uthan Stillwater"); + pPlayer->SEND_GOSSIP_MENU(4063, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism + pPlayer->SEND_GOSSIP_MENU(4064, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_POI(-2257.12, -288.63, 7, 6, 0, "Chaw Stronghide"); + pPlayer->SEND_GOSSIP_MENU(4065, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_GOSSIP_MENU(4066, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_POI(-2252.94, -291.32, 7, 6, 0, "Yonn Deepcut"); + pPlayer->SEND_GOSSIP_MENU(4067, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4068, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_mulgore end + *******************************************************/ + +CreatureAI* GetAI_guard_mulgore(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_orgrimmar start + *******************************************************/ + +bool GossipHello_guard_orgrimmar(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); + + return true; +} + +void SendDefaultMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(1631.51, -4375.33, 7, 6, 0, "Bank of Orgrimmar"); + pPlayer->SEND_GOSSIP_MENU(2554, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //wind rider + pPlayer->SEND_POI(1676.6, -4332.72, 7, 6, 0, "The Sky Tower"); + pPlayer->SEND_GOSSIP_MENU(2555, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //guild master + pPlayer->SEND_POI(1576.93, -4294.75, 7, 6, 0, "Horde Embassy"); + pPlayer->SEND_GOSSIP_MENU(2556, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(1644.51, -4447.27, 7, 6, 0, "Orgrimmar Inn"); + pPlayer->SEND_GOSSIP_MENU(2557, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //mailbox + pPlayer->SEND_POI(1622.53, -4388.79, 7, 6, 0, "Orgrimmar Mailbox"); + pPlayer->SEND_GOSSIP_MENU(2558, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //auction house + pPlayer->SEND_POI(1679.21, -4450.1, 7, 6, 0, "Orgrimmar Auction House"); + pPlayer->SEND_GOSSIP_MENU(3075, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //zeppelin + pPlayer->SEND_POI(1337.36, -4632.7, 7, 6, 0, "Orgrimmar Zeppelin Tower"); + pPlayer->SEND_GOSSIP_MENU(3173, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //weapon master + pPlayer->SEND_POI(2092.56, -4823.95, 7, 6, 0, "Sayoc & Hanashi"); + pPlayer->SEND_GOSSIP_MENU(4519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //stable master + pPlayer->SEND_POI(2133.12, -4663.93, 7, 6, 0, "Xon'cha"); + pPlayer->SEND_GOSSIP_MENU(5974, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //officers lounge + pPlayer->SEND_POI(1633.56, -4249.37, 7, 6, 0, "Hall of Legends"); + pPlayer->SEND_GOSSIP_MENU(7046, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(2599, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(2594, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(7484, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(7644, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(7520, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(2114.84, -4625.31, 7, 6, 0, "Orgrimmar Hunter's Hall"); + pPlayer->SEND_GOSSIP_MENU(2559, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(1451.26, -4223.33, 7, 6, 0, "Darkbriar Lodge"); + pPlayer->SEND_GOSSIP_MENU(2560, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(1442.21, -4183.24, 7, 6, 0, "Spirit Lodge"); + pPlayer->SEND_GOSSIP_MENU(2561, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Shaman + pPlayer->SEND_POI(1925.34, -4181.89, 7, 6, 0, "Thrall's Fortress"); + pPlayer->SEND_GOSSIP_MENU(2562, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Rogue + pPlayer->SEND_POI(1773.39, -4278.97, 7, 6, 0, "Shadowswift Brotherhood"); + pPlayer->SEND_GOSSIP_MENU(2563, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(1849.57, -4359.68, 7, 6, 0, "Darkfire Enclave"); + pPlayer->SEND_GOSSIP_MENU(2564, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(2565, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Paladin + pPlayer->SEND_POI(1906.65, -4134.26, 7, 6, 0, "Valley of Wisdom"); + pPlayer->SEND_GOSSIP_MENU(10843, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(1955.17, -4475.79, 7, 6, 0, "Yelmak's Alchemy and Potions"); + pPlayer->SEND_GOSSIP_MENU(2497, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(2054.34, -4831.85, 7, 6, 0, "The Burning Anvil"); + pPlayer->SEND_GOSSIP_MENU(2499, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(1780.96, -4481.31, 7, 6, 0, "Borstan's Firepit"); + pPlayer->SEND_GOSSIP_MENU(2500, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(1917.5, -4434.95, 7, 6, 0, "Godan's Runeworks"); + pPlayer->SEND_GOSSIP_MENU(2501, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(2038.45, -4744.75, 7, 6, 0, "Nogg's Machine Shop"); + pPlayer->SEND_GOSSIP_MENU(2653, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(1485.21, -4160.91, 7, 6, 0, "Survival of the Fittest"); + pPlayer->SEND_GOSSIP_MENU(2502, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(1994.15, -4655.7, 7, 6, 0, "Lumak's Fishing"); + pPlayer->SEND_GOSSIP_MENU(2503, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(1898.61, -4454.93, 7, 6, 0, "Jandi's Arboretum"); + pPlayer->SEND_GOSSIP_MENU(2504, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(1839.02, -4465.97, 7, 6, 0, "Jo'mah"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); + pPlayer->SEND_GOSSIP_MENU(2513, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_POI(2029.79, -4704, 7, 6, 0, "Red Canyon Mining"); + pPlayer->SEND_GOSSIP_MENU(2515, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); + pPlayer->SEND_GOSSIP_MENU(2516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(1802.66, -4560.66, 7, 6, 0, "Magar's Cloth Goods"); + pPlayer->SEND_GOSSIP_MENU(2518, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_orgrimmar end + *******************************************************/ + +CreatureAI* GetAI_guard_orgrimmar(Creature* pCreature) +{ + return new guardAI_orgrimmar (pCreature); +} + +/******************************************************* + * guard_shattrath start + *******************************************************/ + +bool GossipHello_guard_shattrath(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + + return true; +} + +void SendDefaultMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Tavern + pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); + pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10379, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10382, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Flight master + pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Flight Master"); + pPlayer->SEND_GOSSIP_MENU(10385, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->SEND_GOSSIP_MENU(10386, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEALDOR , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLESCYERS , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10387, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Profession master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom + pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); + pPlayer->SEND_GOSSIP_MENU(10503, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab + pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMALDOR , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMSCYERS , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10697, pCreature->GetGUID()); + break; + } +} + +void SendBankMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); + pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); + pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); + } +} + +void SendInnMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); + pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); + pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); + } +} + +void SendMailboxMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: + pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); + pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); + pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: + pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); + pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: + pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); + pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); + break; + } +} + +void SendStableMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable"); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-2170, 5404, 7, 6, 0, "Scyers Stable"); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + } +} + +void SendBattleMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: + pPlayer->SEND_POI(-1774, 5251, 7, 6, 0, "Alliance Battlemasters"); + pPlayer->SEND_GOSSIP_MENU(10389, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + pPlayer->SEND_POI(-1963, 5263, 7, 6, 0, "Horde Battlemasters"); + pPlayer->SEND_GOSSIP_MENU(10390, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: + pPlayer->SEND_POI(-1960, 5175, 7, 6, 0, "Arena Battlemasters"); + pPlayer->SEND_GOSSIP_MENU(12510, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); + pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); + pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); + pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); + pPlayer->SEND_GOSSIP_MENU(10395, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); + pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting + pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); + pPlayer->SEND_GOSSIP_MENU(10397, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking + pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); + pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Skinning + pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); + pPlayer->SEND_GOSSIP_MENU(10398, pCreature->GetGUID()); + break; + } +} + +void SendGemMerchantMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10698, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-2193, 5424.5, 7, 6, 0, "Scyers Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10699, pCreature->GetGUID()); + } +} + +bool GossipSelect_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BANK: SendBankMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_STABLEMASTER: SendStableMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_GEMMERCHANT: SendGemMerchantMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_MAILBOX: SendMailboxMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_shattrath end + *******************************************************/ + +CreatureAI* GetAI_guard_shattrath(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_shattrath_aldor + *******************************************************/ + +#define SPELL_BANISHED_SHATTRATH_A 36642 +#define SPELL_BANISHED_SHATTRATH_S 36671 +#define SPELL_BANISH_TELEPORT 36643 +#define SPELL_EXILE 39533 + +struct TRINITY_DLL_DECL guard_shattrath_aldorAI : public guardAI +{ + guard_shattrath_aldorAI(Creature *c) : guardAI(c) {} + + uint32 Exile_Timer; + uint32 Banish_Timer; + uint64 PlayerGUID; + bool CanTeleport; + + void Reset() + { + Banish_Timer = 5000; + Exile_Timer = 8500; + PlayerGUID = 0; + CanTeleport = false; + } + + void EnterCombat(Unit *who) {} + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + if (CanTeleport) + { + if (Exile_Timer < diff) + { + if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) + { + temp->CastSpell(temp,SPELL_EXILE,true); + temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); + } + PlayerGUID = 0; + Exile_Timer = 8500; + CanTeleport = false; + }else Exile_Timer -= diff; + } + else if (Banish_Timer < diff) + { + Unit* temp = m_creature->getVictim(); + if (temp && temp->GetTypeId() == TYPEID_PLAYER) + { + DoCast(temp,SPELL_BANISHED_SHATTRATH_A); + Banish_Timer = 9000; + PlayerGUID = temp->GetGUID(); + if (PlayerGUID) + CanTeleport = true; + } + }else Banish_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +bool GossipHello_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Tavern + pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); + pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); + pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); + pPlayer->SEND_GOSSIP_MENU(10525, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Flight master + pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); + pPlayer->SEND_GOSSIP_MENU(10402, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(0, 0, 7, 6, 0, "Aldor Mailbox"); + //unknown + pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable Master"); + pPlayer->SEND_GOSSIP_MENU(10527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Profession master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom + pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); + pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab + pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); + pPlayer->SEND_GOSSIP_MENU(10696, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant + pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10411, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); + pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); + pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); + pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); + pPlayer->SEND_GOSSIP_MENU(10528, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); + pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting + pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); + pPlayer->SEND_GOSSIP_MENU(10529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking + pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); + pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Skinning + pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); + pPlayer->SEND_GOSSIP_MENU(10419, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_shattrath_aldor end + *******************************************************/ + +CreatureAI* GetAI_guard_shattrath_aldor(Creature* pCreature) +{ + return new guard_shattrath_aldorAI (pCreature); +} + +/******************************************************* + * guard_shattrath_scryer + *******************************************************/ + +struct TRINITY_DLL_DECL guard_shattrath_scryerAI : public guardAI +{ + guard_shattrath_scryerAI(Creature *c) : guardAI(c) {} + + uint32 Exile_Timer; + uint32 Banish_Timer; + uint64 PlayerGUID; + bool CanTeleport; + + void Reset() + { + Banish_Timer = 5000; + Exile_Timer = 8500; + PlayerGUID = 0; + CanTeleport = false; + } + + void EnterCombat(Unit *who) {} + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + if (CanTeleport) + { + if (Exile_Timer < diff) + { + if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) + { + temp->CastSpell(temp,SPELL_EXILE,true); + temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); + } + PlayerGUID = 0; + Exile_Timer = 8500; + CanTeleport = false; + }else Exile_Timer -= diff; + } + else if (Banish_Timer < diff) + { + Unit* temp = m_creature->getVictim(); + if (temp && temp->GetTypeId() == TYPEID_PLAYER) + { + DoCast(temp,SPELL_BANISHED_SHATTRATH_S); + Banish_Timer = 9000; + PlayerGUID = temp->GetGUID(); + if (PlayerGUID) + CanTeleport = true; + } + }else Banish_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +bool GossipHello_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(10430, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Tavern + pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); + pPlayer->SEND_GOSSIP_MENU(10431, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-1996.6, 5363.7, 7, 6, 0, "Scryer Bank"); + pPlayer->SEND_GOSSIP_MENU(10432, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(-2176.6, 5405.8, 7, 6, 0, "Scryer Inn"); + pPlayer->SEND_GOSSIP_MENU(10433, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Flight master + pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); + pPlayer->SEND_GOSSIP_MENU(10435, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(-2174.3, 5411.4, 7, 6, 0, "Scryer Mailbox"); + pPlayer->SEND_GOSSIP_MENU(10436, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->SEND_POI(-2169.9, 5405.1, 7, 6, 0, "Scryer Stable Master"); + pPlayer->SEND_GOSSIP_MENU(10437, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(10438, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Profession master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(10504, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom + pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); + pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab + pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); + pPlayer->SEND_GOSSIP_MENU(10701, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant + pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Scryer Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10702, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); + pPlayer->SEND_GOSSIP_MENU(10516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); + pPlayer->SEND_GOSSIP_MENU(10517, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); + pPlayer->SEND_GOSSIP_MENU(10518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); + pPlayer->SEND_GOSSIP_MENU(10519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); + pPlayer->SEND_GOSSIP_MENU(10520, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting + pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); + pPlayer->SEND_GOSSIP_MENU(10521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking + pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); + pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Skinning + pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); + pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_shattrath_scryer end + *******************************************************/ + +CreatureAI* GetAI_guard_shattrath_scryer(Creature* pCreature) +{ + return new guard_shattrath_scryerAI (pCreature); +} + +/******************************************************* + * guard_silvermoon start + *******************************************************/ + +bool GossipHello_guard_silvermoon(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction house + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_1 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_2 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(9317, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(9808.4, -7488.16, 7, 6, 0, "Silvermoon Bank"); + pPlayer->SEND_GOSSIP_MENU(9322, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(9474.97, -7345.21, 7, 6, 0, "Tandrine"); + pPlayer->SEND_GOSSIP_MENU(9324, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_1 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_2 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(9602, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(9658.33, -7492.17, 7, 6, 0, "Silvermoon Mailbox"); + pPlayer->SEND_GOSSIP_MENU(9326, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->SEND_POI(9904.95, -7404.31, 7, 6, 0, "Shalenn"); + pPlayer->SEND_GOSSIP_MENU(9327, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Weapon trainer + pPlayer->SEND_POI(9841.17, -7505.13, 7, 6, 0, "Ileda"); + pPlayer->SEND_GOSSIP_MENU(9328, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Wind master + pPlayer->SEND_POI(9378.45, -7163.94, 7, 6, 0, "Silvermoon Wind Master"); + pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(9331, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); + pPlayer->SEND_GOSSIP_MENU(9338, pCreature->GetGUID()); + break; + } +} + +void SendAuctionhouseMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(9644.47, -7140.22, 7, 6, 0, "Western Auction House"); + pPlayer->SEND_GOSSIP_MENU(9318, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(9683.27, -7521.22, 7, 6, 0, "Royal Exchange Auction House"); + pPlayer->SEND_GOSSIP_MENU(9319, pCreature->GetGUID()); + } +} + +void SendInnMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(9677.7, -7368, 7, 6, 0, "Silvermoon City Inn"); + pPlayer->SEND_GOSSIP_MENU(9325, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(9561.1, -7517.5, 7, 6, 0, "Wayfarer's Rest tavern"); + pPlayer->SEND_GOSSIP_MENU(9603, pCreature->GetGUID()); + } +} + +void SendBattleMasterMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(9850.49, -7572.26, 7, 6, 0, "Gurak"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //A + pPlayer->SEND_POI(9850.6, -7559.25, 7, 6, 0, "Bipp Glizzitor"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //EOS + pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //WSG + pPlayer->SEND_POI(9845.45, -7562.58, 7, 6, 0, "Krukk"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(9700.55, -7262.57, 7, 6, 0, "Harene Plainwalker"); + pPlayer->SEND_GOSSIP_MENU(9330, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(9927.48, -7426.14, 7, 6, 0, "Zandine"); + pPlayer->SEND_GOSSIP_MENU(9332, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(9995.07, -7118.17, 7, 6, 0, "Quithas"); + pPlayer->SEND_GOSSIP_MENU(9333, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(9850.22, -7516.93, 7, 6, 0, "Champion Bachi"); + pPlayer->SEND_GOSSIP_MENU(9334, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(9926.79, -7066.66, 7, 6, 0, "Belestra"); + pPlayer->SEND_GOSSIP_MENU(9335, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Rogue + pPlayer->SEND_POI(9739.88, -7374.33, 7, 6, 0, "Zelanis"); + pPlayer->SEND_GOSSIP_MENU(9336, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warlock + pPlayer->SEND_POI(9787.57, -7284.63, 7, 6, 0, "Alamma"); + pPlayer->SEND_GOSSIP_MENU(9337, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(9998.09, -7214.36, 7, 6, 0, "Silvermoon Alchemy Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(9841.43, -7361.53, 7, 6, 0, "Silvermoon Blacksmithing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9340, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(9577.26, -7243.6, 7, 6, 0, "Silvermoon Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(9962.57, -7246.18, 7, 6, 0, "Silvermoon Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9341, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(9820.18, -7329.56, 7, 6, 0, "Silvermoon Engineering Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(9579.8, -7343.71, 7, 6, 0, "Silvermoon First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(9602.73, -7328.3, 7, 6, 0, "Silvermoon Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(10004.4, -7216.86, 7, 6, 0, "Silvermoon Herbalism Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting + pPlayer->SEND_POI(9553.54, -7506.43, 7, 6, 0, "Silvermoon Jewelcrafting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9346, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking + pPlayer->SEND_POI(9503.72, -7430.16, 7, 6, 0, "Silvermoon Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9347, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Mining + pPlayer->SEND_POI(9805.1, -7355.56, 7, 6, 0, "Silvermoon Mining Trainer"); + pPlayer->SEND_GOSSIP_MENU(9348, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Skinning + pPlayer->SEND_POI(9513.37, -7429.4, 7, 6, 0, "Silvermoon Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring + pPlayer->SEND_POI(9750.55, -7095.28, 7, 6, 0, "Silvermoon Tailor"); + pPlayer->SEND_GOSSIP_MENU(9350, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_AUCTIONHOUSE: SendAuctionhouseMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_silvermoon end + *******************************************************/ + +CreatureAI* GetAI_guard_silvermoon(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_stormwind start + *******************************************************/ + +bool GossipHello_guard_stormwind(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STORMWIND_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction House + pPlayer->SEND_POI(-8811.46, 667.46, 7, 6, 0, "Stormwind Auction House"); + pPlayer->SEND_GOSSIP_MENU(3834, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-8916.87, 622.87, 7, 6, 0, "Stormwind Bank"); + pPlayer->SEND_GOSSIP_MENU(764, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Deeprun tram + pPlayer->SEND_POI(-8378.88, 554.23, 7, 6, 0, "The Deeprun Tram"); + pPlayer->SEND_GOSSIP_MENU(3813, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-8869.0, 675.4, 7, 6, 0, "The Gilded Rose"); + pPlayer->SEND_GOSSIP_MENU(3860, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Gryphon Master + pPlayer->SEND_POI(-8837.0, 493.5, 7, 6, 0, "Stormwind Gryphon Master"); + pPlayer->SEND_GOSSIP_MENU(879, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Guild Master + pPlayer->SEND_POI(-8894.0, 611.2, 7, 6, 0, "Stormwind Vistor`s Center"); + pPlayer->SEND_GOSSIP_MENU(882, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox + pPlayer->SEND_POI(-8876.48, 649.18, 7, 6, 0, "Stormwind Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3861, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master + pPlayer->SEND_POI(-8433.0, 554.7, 7, 6, 0, "Jenova Stoneshield"); + pPlayer->SEND_GOSSIP_MENU(5984, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Weapon Trainer + pPlayer->SEND_POI(-8797.0, 612.8, 7, 6, 0, "Woo Ping"); + pPlayer->SEND_GOSSIP_MENU(4516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Officers Lounge + pPlayer->SEND_POI(-8759.92, 399.69, 7, 6, 0, "Champions` Hall"); + pPlayer->SEND_GOSSIP_MENU(7047, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Battlemasters + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7499, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Class trainers + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->SEND_GOSSIP_MENU(898, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Profession trainers + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(918, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Thelman Slatefist"); + pPlayer->SEND_GOSSIP_MENU(7500, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Lady Hoteshem"); + pPlayer->SEND_GOSSIP_MENU(7650, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Elfarran"); + pPlayer->SEND_GOSSIP_MENU(7501, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Mage + pPlayer->SEND_POI(-9012.0, 867.6, 7, 6, 0, "Wizard`s Sanctum"); + pPlayer->SEND_GOSSIP_MENU(899, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Rogue + pPlayer->SEND_POI(-8753.0, 367.8, 7, 6, 0, "Stormwind - Rogue House"); + pPlayer->SEND_GOSSIP_MENU(900, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Warrior + pPlayer->SEND_POI(-8690.11, 324.85, 7, 6, 0, "Command Center"); + pPlayer->SEND_GOSSIP_MENU(901, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Druid + pPlayer->SEND_POI(-8751.0, 1124.5, 7, 6, 0, "The Park"); + pPlayer->SEND_GOSSIP_MENU(902, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-8512.0, 862.4, 7, 6, 0, "Catedral Of Light"); + pPlayer->SEND_GOSSIP_MENU(903, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Paladin + pPlayer->SEND_POI(-8577.0, 881.7, 7, 6, 0, "Catedral Of Light"); + pPlayer->SEND_GOSSIP_MENU(904, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Hunter + pPlayer->SEND_POI(-8413.0, 541.5, 7, 6, 0, "Hunter Lodge"); + pPlayer->SEND_GOSSIP_MENU(905, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Warlock + pPlayer->SEND_POI(-8948.91, 998.35, 7, 6, 0, "The Slaughtered Lamb"); + pPlayer->SEND_GOSSIP_MENU(906, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Shaman + pPlayer->SEND_POI(-9033, 550, 7, 6, 0, "Valley Of Heroes"); + //incorrect id + pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-8988.0, 759.60, 7, 6, 0, "Alchemy Needs"); + pPlayer->SEND_GOSSIP_MENU(919, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-8424.0, 616.9, 7, 6, 0, "Therum Deepforge"); + pPlayer->SEND_GOSSIP_MENU(920, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-8611.0, 364.6, 7, 6, 0, "Pig and Whistle Tavern"); + pPlayer->SEND_GOSSIP_MENU(921, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-8858.0, 803.7, 7, 6, 0, "Lucan Cordell"); + pPlayer->SEND_GOSSIP_MENU(941, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-8347.0, 644.1, 7, 6, 0, "Lilliam Sparkspindle"); + pPlayer->SEND_GOSSIP_MENU(922, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-8513.0, 801.8, 7, 6, 0, "Shaina Fuller"); + pPlayer->SEND_GOSSIP_MENU(923, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-8803.0, 767.5, 7, 6, 0, "Arnold Leland"); + pPlayer->SEND_GOSSIP_MENU(940, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-8967.0, 779.5, 7, 6, 0, "Alchemy Needs"); + pPlayer->SEND_GOSSIP_MENU(924, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(-8726.0, 477.4, 7, 6, 0, "The Protective Hide"); + pPlayer->SEND_GOSSIP_MENU(925, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_POI(-8434.0, 692.8, 7, 6, 0, "Gelman Stonehand"); + pPlayer->SEND_GOSSIP_MENU(927, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(-8716.0, 469.4, 7, 6, 0, "The Protective Hide"); + pPlayer->SEND_GOSSIP_MENU(928, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(-8938.0, 800.7, 7, 6, 0, "Duncan`s Textiles"); + pPlayer->SEND_GOSSIP_MENU(929, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_stormwind end + *******************************************************/ + +CreatureAI* GetAI_guard_stormwind(Creature* pCreature) +{ + return new guardAI_stormwind (pCreature); +} + +/******************************************************* + * guard_teldrassil start + *******************************************************/ + +bool GossipHello_guard_teldrassil(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FERRY , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4316, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4317, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Rut`theran + pPlayer->SEND_GOSSIP_MENU(4318, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_GOSSIP_MENU(4319, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(9821.49, 960.13, 7, 6, 0, "Dolanaar Inn"); + pPlayer->SEND_GOSSIP_MENU(4320, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //stable master + pPlayer->SEND_POI(9808.37, 931.1, 7, 6, 0, "Seriadne"); + pPlayer->SEND_GOSSIP_MENU(5982, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(9741.58, 963.7, 7, 6, 0, "Kal"); + pPlayer->SEND_GOSSIP_MENU(4323, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(9815.12, 926.28, 7, 6, 0, "Dazalar"); + pPlayer->SEND_GOSSIP_MENU(4324, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(9906.16, 986.63, 7, 6, 0, "Laurna Morninglight"); + pPlayer->SEND_GOSSIP_MENU(4325, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Rogue + pPlayer->SEND_POI(9789, 942.86, 7, 6, 0, "Jannok Breezesong"); + pPlayer->SEND_GOSSIP_MENU(4326, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(9821.96, 950.61, 7, 6, 0, "Kyra Windblade"); + pPlayer->SEND_GOSSIP_MENU(4327, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(9767.59, 878.81, 7, 6, 0, "Cyndra Kindwhisper"); + pPlayer->SEND_GOSSIP_MENU(4329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Cooking + pPlayer->SEND_POI(9751.19, 906.13, 7, 6, 0, "Zarrin"); + pPlayer->SEND_GOSSIP_MENU(4330, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting + pPlayer->SEND_POI(10677.59, 1946.56, 7, 6, 0, "Alanna Raveneye"); + pPlayer->SEND_GOSSIP_MENU(4331, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //First Aid + pPlayer->SEND_POI(9903.12, 999, 7, 6, 0, "Byancie"); + pPlayer->SEND_GOSSIP_MENU(4332, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Fishing + pPlayer->SEND_GOSSIP_MENU(4333, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism + pPlayer->SEND_POI(9773.78, 875.88, 7, 6, 0, "Malorne Bladeleaf"); + pPlayer->SEND_GOSSIP_MENU(4334, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking + pPlayer->SEND_POI(10152.59, 1681.46, 7, 6, 0, "Nadyia Maneweaver"); + pPlayer->SEND_GOSSIP_MENU(4335, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Skinning + pPlayer->SEND_POI(10135.59, 1673.18, 7, 6, 0, "Radnaal Maneweaver"); + pPlayer->SEND_GOSSIP_MENU(4336, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4337, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_teldrassil end + *******************************************************/ + +CreatureAI* GetAI_guard_teldrassil(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_tirisfal start + *******************************************************/ + +bool GossipHello_guard_tirisfal(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(4097, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4074, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //bat handler + pPlayer->SEND_GOSSIP_MENU(4075, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Gallows` End Tavern"); + pPlayer->SEND_GOSSIP_MENU(4076, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master + pPlayer->SEND_POI(2267.66, 319.32, 7, 6, 0, "Morganus"); + pPlayer->SEND_GOSSIP_MENU(5978, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(4096, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Mage + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Cain Firesong"); + pPlayer->SEND_GOSSIP_MENU(4077, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Priest + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Dark Cleric Beryl"); + pPlayer->SEND_GOSSIP_MENU(4078, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Rogue + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Marion Call"); + pPlayer->SEND_GOSSIP_MENU(4079, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Warlock + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Rupert Boch"); + pPlayer->SEND_GOSSIP_MENU(4080, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(2256.48, 240.32, 7, 6, 0, "Austil de Mon"); + pPlayer->SEND_GOSSIP_MENU(4081, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(2263.25, 344.23, 7, 6, 0, "Carolai Anise"); + pPlayer->SEND_GOSSIP_MENU(4082, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_GOSSIP_MENU(4083, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_GOSSIP_MENU(4084, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(2250.35, 249.12, 7, 6, 0, "Vance Undergloom"); + pPlayer->SEND_GOSSIP_MENU(4085, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_GOSSIP_MENU(4086, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Nurse Neela"); + pPlayer->SEND_GOSSIP_MENU(4087, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(2292.37, -10.72, 7, 6, 0, "Clyde Kellen"); + pPlayer->SEND_GOSSIP_MENU(4088, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(2268.21, 331.69, 7, 6, 0, "Faruza"); + pPlayer->SEND_GOSSIP_MENU(4089, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Shelene Rhobart"); + pPlayer->SEND_GOSSIP_MENU(4090, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_GOSSIP_MENU(4091, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Rand Rhobart"); + pPlayer->SEND_GOSSIP_MENU(4092, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(2160.45, 659.93, 7, 6, 0, "Bowen Brisboise"); + pPlayer->SEND_GOSSIP_MENU(4093, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_tirisfal end + *******************************************************/ + +CreatureAI* GetAI_guard_tirisfal(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_undercity start + *******************************************************/ + +bool GossipHello_guard_undercity(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(1595.64, 232.45, 7, 6, 0, "Undercity Bank"); + pPlayer->SEND_GOSSIP_MENU(3514, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bat handler + pPlayer->SEND_POI(1565.9, 271.43, 7, 6, 0, "Undercity Bat Handler"); + pPlayer->SEND_GOSSIP_MENU(3515, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(1594.17, 205.57, 7, 6, 0, "Undercity Guild Master"); + pPlayer->SEND_GOSSIP_MENU(3516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(1639.43, 220.99, 7, 6, 0, "Undercity Inn"); + pPlayer->SEND_GOSSIP_MENU(3517, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(1632.68, 219.4, 7, 6, 0, "Undercity Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Auction House + pPlayer->SEND_POI(1647.9, 258.49, 7, 6, 0, "Undercity Auction House"); + pPlayer->SEND_GOSSIP_MENU(3519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Zeppelin + pPlayer->SEND_POI(2059, 274.86, 7, 6, 0, "Undercity Zeppelin"); + pPlayer->SEND_GOSSIP_MENU(3520, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Weapon Master + pPlayer->SEND_POI(1670.31, 324.66, 7, 6, 0, "Archibald"); + pPlayer->SEND_GOSSIP_MENU(4521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Stable master + pPlayer->SEND_POI(1634.18, 226.76, 7, 6, 0, "Anya Maulray"); + pPlayer->SEND_GOSSIP_MENU(5979, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(1329, 333.92, 7, 6, 0, "Grizzle Halfmane"); + pPlayer->SEND_GOSSIP_MENU(7525, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(1283.3, 287.16, 7, 6, 0, "Sir Malory Wheeler"); + pPlayer->SEND_GOSSIP_MENU(7646, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(1265, 351.18, 7, 6, 0, "Kurden Bloodclaw"); + pPlayer->SEND_GOSSIP_MENU(7526, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Mage + pPlayer->SEND_POI(1781, 53, 7, 6, 0, "Undercity Mage Trainers"); + pPlayer->SEND_GOSSIP_MENU(3513, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Priest + pPlayer->SEND_POI(1758.33, 401.5, 7, 6, 0, "Undercity Priest Trainers"); + pPlayer->SEND_GOSSIP_MENU(3521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Rogue + pPlayer->SEND_POI(1418.56, 65, 7, 6, 0, "Undercity Rogue Trainers"); + pPlayer->SEND_GOSSIP_MENU(3524, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Warlock + pPlayer->SEND_POI(1780.92, 53.16, 7, 6, 0, "Undercity Warlock Trainers"); + pPlayer->SEND_GOSSIP_MENU(3526, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(1775.59, 418.19, 7, 6, 0, "Undercity Warrior Trainers"); + pPlayer->SEND_GOSSIP_MENU(3527, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(1419.82, 417.19, 7, 6, 0, "The Apothecarium"); + pPlayer->SEND_GOSSIP_MENU(3528, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(1696, 285, 7, 6, 0, "Undercity Blacksmithing Trainer"); + pPlayer->SEND_GOSSIP_MENU(3529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(1596.34, 274.68, 7, 6, 0, "Undercity Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3530, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(1488.54, 280.19, 7, 6, 0, "Undercity Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(3531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(1408.58, 143.43, 7, 6, 0, "Undercity Engineering Trainer"); + pPlayer->SEND_GOSSIP_MENU(3532, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(1519.65, 167.19, 7, 6, 0, "Undercity First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(3533, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(1679.9, 89, 7, 6, 0, "Undercity Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(3534, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(1558, 349.36, 7, 6, 0, "Undercity Herbalism Trainer"); + pPlayer->SEND_GOSSIP_MENU(3535, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_POI(1498.76, 196.43, 7, 6, 0, "Undercity Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3536, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_POI(1642.88, 335.58, 7, 6, 0, "Undercity Mining Trainer"); + pPlayer->SEND_GOSSIP_MENU(3537, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_POI(1498.6, 196.46, 7, 6, 0, "Undercity Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(3538, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_POI(1689.55, 193, 7, 6, 0, "Undercity Tailoring Trainer"); + pPlayer->SEND_GOSSIP_MENU(3539, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_undercity end + *******************************************************/ + +CreatureAI* GetAI_guard_undercity(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * AddSC + *******************************************************/ + +void AddSC_guards() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="guard_azuremyst"; + newscript->pGossipHello = &GossipHello_guard_azuremyst; + newscript->pGossipSelect = &GossipSelect_guard_azuremyst; + newscript->GetAI = &GetAI_guard_azuremyst; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_bluffwatcher"; + newscript->pGossipHello = &GossipHello_guard_bluffwatcher; + newscript->pGossipSelect = &GossipSelect_guard_bluffwatcher; + newscript->GetAI = &GetAI_guard_bluffwatcher; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_contested"; + newscript->GetAI = &GetAI_guard_contested; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_darnassus"; + newscript->pGossipHello = &GossipHello_guard_darnassus; + newscript->pGossipSelect = &GossipSelect_guard_darnassus; + newscript->GetAI = &GetAI_guard_darnassus; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_dunmorogh"; + newscript->pGossipHello = &GossipHello_guard_dunmorogh; + newscript->pGossipSelect = &GossipSelect_guard_dunmorogh; + newscript->GetAI = &GetAI_guard_dunmorogh; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_durotar"; + newscript->pGossipHello = &GossipHello_guard_durotar; + newscript->pGossipSelect = &GossipSelect_guard_durotar; + newscript->GetAI = &GetAI_guard_durotar; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_elwynnforest"; + newscript->pGossipHello = &GossipHello_guard_elwynnforest; + newscript->pGossipSelect = &GossipSelect_guard_elwynnforest; + newscript->GetAI = &GetAI_guard_elwynnforest; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_eversong"; + newscript->pGossipHello = &GossipHello_guard_eversong; + newscript->pGossipSelect = &GossipSelect_guard_eversong; + newscript->GetAI = &GetAI_guard_eversong; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_exodar"; + newscript->pGossipHello = &GossipHello_guard_exodar; + newscript->pGossipSelect = &GossipSelect_guard_exodar; + newscript->GetAI = &GetAI_guard_exodar; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_ironforge"; + newscript->pGossipHello = &GossipHello_guard_ironforge; + newscript->pGossipSelect = &GossipSelect_guard_ironforge; + newscript->GetAI = &GetAI_guard_ironforge; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_mulgore"; + newscript->pGossipHello = &GossipHello_guard_mulgore; + newscript->pGossipSelect = &GossipSelect_guard_mulgore; + newscript->GetAI = &GetAI_guard_mulgore; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_orgrimmar"; + newscript->pGossipHello = &GossipHello_guard_orgrimmar; + newscript->pGossipSelect = &GossipSelect_guard_orgrimmar; + newscript->GetAI = &GetAI_guard_orgrimmar; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_shattrath"; + newscript->pGossipHello = &GossipHello_guard_shattrath; + newscript->pGossipSelect = &GossipSelect_guard_shattrath; + newscript->GetAI = &GetAI_guard_shattrath; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_shattrath_aldor"; + newscript->GetAI = &GetAI_guard_shattrath_aldor; + newscript->pGossipHello = &GossipHello_guard_shattrath_aldor; + newscript->pGossipSelect = &GossipSelect_guard_shattrath_aldor; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_shattrath_scryer"; + newscript->GetAI = &GetAI_guard_shattrath_scryer; + newscript->pGossipHello = &GossipHello_guard_shattrath_scryer; + newscript->pGossipSelect = &GossipSelect_guard_shattrath_scryer; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_silvermoon"; + newscript->pGossipHello = &GossipHello_guard_silvermoon; + newscript->pGossipSelect = &GossipSelect_guard_silvermoon; + newscript->GetAI = &GetAI_guard_silvermoon; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_stormwind"; + newscript->pGossipHello = &GossipHello_guard_stormwind; + newscript->pGossipSelect = &GossipSelect_guard_stormwind; + newscript->GetAI = &GetAI_guard_stormwind; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_teldrassil"; + newscript->pGossipHello = &GossipHello_guard_teldrassil; + newscript->pGossipSelect = &GossipSelect_guard_teldrassil; + newscript->GetAI = &GetAI_guard_teldrassil; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_tirisfal"; + newscript->pGossipHello = &GossipHello_guard_tirisfal; + newscript->pGossipSelect = &GossipSelect_guard_tirisfal; + newscript->GetAI = &GetAI_guard_tirisfal; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_undercity"; + newscript->pGossipHello = &GossipHello_guard_undercity; + newscript->pGossipSelect = &GossipSelect_guard_undercity; + newscript->GetAI = &GetAI_guard_undercity; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/base/simple_ai.cpp b/src/bindings/scripts/base/simple_ai.cpp new file mode 100644 index 00000000000..d4755cfac8b --- /dev/null +++ b/src/bindings/scripts/base/simple_ai.cpp @@ -0,0 +1,278 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software +* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +/* ScriptData +SDName: SimpleAI +SD%Complete: 100 +SDComment: Base Class for SimpleAI creatures +SDCategory: Creatures +EndScriptData */ + +#include "precompiled.h" +#include "simple_ai.h" + +SimpleAI::SimpleAI(Creature *c) : ScriptedAI(c) +{ + //Clear all data + Aggro_TextId[0] = 0; + Aggro_TextId[1] = 0; + Aggro_TextId[2] = 0; + Aggro_Sound[0] = 0; + Aggro_Sound[1] = 0; + Aggro_Sound[2] = 0; + + Death_TextId[0] = 0; + Death_TextId[1] = 0; + Death_TextId[2] = 0; + Death_Sound[0] = 0; + Death_Sound[1] = 0; + Death_Sound[2] = 0; + Death_Spell = 0; + Death_Target_Type = 0; + + Kill_TextId[0] = 0; + Kill_TextId[1] = 0; + Kill_TextId[2] = 0; + Kill_Sound[0] = 0; + Kill_Sound[1] = 0; + Kill_Sound[2] = 0; + Kill_Spell = 0; + Kill_Target_Type = 0; + + memset(Spell,0,sizeof(Spell)); + + EnterEvadeMode(); +} + +void SimpleAI::Reset() +{ +} + +void SimpleAI::EnterCombat(Unit *who) +{ + //Reset cast timers + if (Spell[0].First_Cast >= 0) + Spell_Timer[0] = Spell[0].First_Cast; + else Spell_Timer[0] = 1000; + if (Spell[1].First_Cast >= 0) + Spell_Timer[1] = Spell[1].First_Cast; + else Spell_Timer[1] = 1000; + if (Spell[2].First_Cast >= 0) + Spell_Timer[2] = Spell[2].First_Cast; + else Spell_Timer[2] = 1000; + if (Spell[3].First_Cast >= 0) + Spell_Timer[3] = Spell[3].First_Cast; + else Spell_Timer[3] = 1000; + if (Spell[4].First_Cast >= 0) + Spell_Timer[4] = Spell[4].First_Cast; + else Spell_Timer[4] = 1000; + if (Spell[5].First_Cast >= 0) + Spell_Timer[5] = Spell[5].First_Cast; + else Spell_Timer[5] = 1000; + if (Spell[6].First_Cast >= 0) + Spell_Timer[6] = Spell[6].First_Cast; + else Spell_Timer[6] = 1000; + if (Spell[7].First_Cast >= 0) + Spell_Timer[7] = Spell[7].First_Cast; + else Spell_Timer[7] = 1000; + if (Spell[8].First_Cast >= 0) + Spell_Timer[8] = Spell[8].First_Cast; + else Spell_Timer[8] = 1000; + if (Spell[9].First_Cast >= 0) + Spell_Timer[9] = Spell[9].First_Cast; + else Spell_Timer[9] = 1000; + + uint32 random_text = rand()%3; + + //Random text + if (Aggro_TextId[random_text]) + DoScriptText(Aggro_TextId[random_text], m_creature, who); + + //Random sound + if (Aggro_Sound[random_text]) + DoPlaySoundToSet(m_creature, Aggro_Sound[random_text]); +} + +void SimpleAI::KilledUnit(Unit *victim) +{ + uint32 random_text = rand()%3; + + //Random yell + if (Kill_TextId[random_text]) + DoScriptText(Kill_TextId[random_text], m_creature, victim); + + //Random sound + if (Kill_Sound[random_text]) + DoPlaySoundToSet(m_creature, Kill_Sound[random_text]); + + if (!Kill_Spell) + return; + + Unit* target = NULL; + + switch (Kill_Target_Type) + { + case CAST_SELF: + target = m_creature; + break; + case CAST_HOSTILE_TARGET: + target = m_creature->getVictim(); + break; + case CAST_HOSTILE_SECOND_AGGRO: + target = SelectUnit(SELECT_TARGET_TOPAGGRO,1); + break; + case CAST_HOSTILE_LAST_AGGRO: + target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0); + break; + case CAST_HOSTILE_RANDOM: + target = SelectUnit(SELECT_TARGET_RANDOM,0); + break; + case CAST_KILLEDUNIT_VICTIM: + target = victim; + break; + } + + //Target is ok, cast a spell on it + if (target) + DoCast(target, Kill_Spell); +} + +void SimpleAI::DamageTaken(Unit *killer, uint32 &damage) +{ + //Return if damage taken won't kill us + if (m_creature->GetHealth() > damage) + return; + + uint32 random_text = rand()%3; + + //Random yell + if (Death_TextId[random_text]) + DoScriptText(Death_TextId[random_text], m_creature, killer); + + //Random sound + if (Death_Sound[random_text]) + DoPlaySoundToSet(m_creature, Death_Sound[random_text]); + + if (!Death_Spell) + return; + + Unit* target = NULL; + + switch (Death_Target_Type) + { + case CAST_SELF: + target = m_creature; + break; + case CAST_HOSTILE_TARGET: + target = m_creature->getVictim(); + break; + case CAST_HOSTILE_SECOND_AGGRO: + target = SelectUnit(SELECT_TARGET_TOPAGGRO,1); + break; + case CAST_HOSTILE_LAST_AGGRO: + target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0); + break; + case CAST_HOSTILE_RANDOM: + target = SelectUnit(SELECT_TARGET_RANDOM,0); + break; + case CAST_JUSTDIED_KILLER: + target = killer; + break; + } + + //Target is ok, cast a spell on it + if (target) + DoCast(target, Death_Spell); +} + +void SimpleAI::UpdateAI(const uint32 diff) +{ + //Return since we have no target + if (!UpdateVictim()) + return; + + //Spells + for (uint32 i = 0; i < 10; ++i) + { + //Spell not valid + if (!Spell[i].Enabled || !Spell[i].Spell_Id) + continue; + + if (Spell_Timer[i] < diff) + { + //Check if this is a percentage based + if (Spell[i].First_Cast < 0 && Spell[i].First_Cast > -100 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() > -Spell[i].First_Cast) + continue; + + //Check Current spell + if (!(Spell[i].InterruptPreviousCast && m_creature->IsNonMeleeSpellCasted(false))) + { + Unit* target = NULL; + + switch (Spell[i].Cast_Target_Type) + { + case CAST_SELF: + target = m_creature; + break; + case CAST_HOSTILE_TARGET: + target = m_creature->getVictim(); + break; + case CAST_HOSTILE_SECOND_AGGRO: + target = SelectUnit(SELECT_TARGET_TOPAGGRO,1); + break; + case CAST_HOSTILE_LAST_AGGRO: + target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0); + break; + case CAST_HOSTILE_RANDOM: + target = SelectUnit(SELECT_TARGET_RANDOM,0); + break; + } + + //Target is ok, cast a spell on it and then do our random yell + if (target) + { + if (m_creature->IsNonMeleeSpellCasted(false)) + m_creature->InterruptNonMeleeSpells(false); + + DoCast(target, Spell[i].Spell_Id); + + //Yell and sound use the same number so that you can make + //the Creature yell with the correct sound effect attached + uint32 random_text = rand()%3; + + //Random yell + if (Spell[i].TextId[random_text]) + DoScriptText(Spell[i].TextId[random_text], m_creature, target); + + //Random sound + if (Spell[i].Text_Sound[random_text]) + DoPlaySoundToSet(m_creature, Spell[i].Text_Sound[random_text]); + } + + } + + //Spell will cast agian when the cooldown is up + if (Spell[i].CooldownRandomAddition) + Spell_Timer[i] = Spell[i].Cooldown + (rand() % Spell[i].CooldownRandomAddition); + else Spell_Timer[i] = Spell[i].Cooldown; + + }else Spell_Timer[i] -= diff; + + } + + DoMeleeAttackIfReady(); +} + diff --git a/src/bindings/scripts/base/simple_ai.h b/src/bindings/scripts/base/simple_ai.h new file mode 100644 index 00000000000..3a2e8a9341a --- /dev/null +++ b/src/bindings/scripts/base/simple_ai.h @@ -0,0 +1,71 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 +* This program is free software licensed under GPL version 2 +* Please see the included DOCS/LICENSE.TXT for more information */ + +#ifndef SC_SIMPLEAI_H +#define SC_SIMPLEAI_H + +enum CastTarget +{ + CAST_SELF = 0, //Self cast + CAST_HOSTILE_TARGET, //Our current target (ie: highest aggro) + CAST_HOSTILE_SECOND_AGGRO, //Second highest aggro (generaly used for cleaves and some special attacks) + CAST_HOSTILE_LAST_AGGRO, //Dead last on aggro (no idea what this could be used for) + CAST_HOSTILE_RANDOM, //Just any random target on our threat list + CAST_FRIENDLY_RANDOM, //NOT YET IMPLEMENTED + + //Special cases + CAST_KILLEDUNIT_VICTIM, //Only works within KilledUnit function + CAST_JUSTDIED_KILLER, //Only works within JustDied function +}; + +struct TRINITY_DLL_DECL SimpleAI : public ScriptedAI +{ + SimpleAI(Creature *c);// : ScriptedAI(c); + + void Reset(); + + void EnterCombat(Unit *who); + + void KilledUnit(Unit *victim); + + void DamageTaken(Unit *killer, uint32 &damage); + + void UpdateAI(const uint32 diff); + +public: + + int32 Aggro_TextId[3]; + uint32 Aggro_Sound[3]; + + int32 Death_TextId[3]; + uint32 Death_Sound[3]; + uint32 Death_Spell; + uint32 Death_Target_Type; + + int32 Kill_TextId[3]; + uint32 Kill_Sound[3]; + uint32 Kill_Spell; + uint32 Kill_Target_Type; + + struct SimpleAI_Spell + { + uint32 Spell_Id; //Spell ID to cast + int32 First_Cast; //Delay for first cast + uint32 Cooldown; //Cooldown between casts + uint32 CooldownRandomAddition; //Random addition to cooldown (in range from 0 - CooldownRandomAddition) + uint32 Cast_Target_Type; //Target type (note that certain spells may ignore this) + bool InterruptPreviousCast; //Interrupt a previous cast if this spell needs to be cast + bool Enabled; //Spell enabled or disabled (default: false) + + //3 texts to many? + int32 TextId[3]; + uint32 Text_Sound[3]; + }Spell[10]; + +protected: + uint32 Spell_Timer[10]; +}; + +#endif + diff --git a/src/bindings/scripts/include/sc_gossip.h b/src/bindings/scripts/include/sc_gossip.h index 183c8487a74..454aef99de0 100644 --- a/src/bindings/scripts/include/sc_gossip.h +++ b/src/bindings/scripts/include/sc_gossip.h @@ -5,8 +5,8 @@ * This program is free software licensed under GPL version 2 * Please see the included DOCS/LICENSE.TXT for more information */ -#ifndef SC_PLAYER_H -#define SC_PLAYER_H +#ifndef SC_GOSSIP_H +#define SC_GOSSIP_H #include "Player.h" #include "GossipDef.h" diff --git a/src/bindings/scripts/scripts/creature/simple_ai.cpp b/src/bindings/scripts/scripts/creature/simple_ai.cpp deleted file mode 100644 index d4755cfac8b..00000000000 --- a/src/bindings/scripts/scripts/creature/simple_ai.cpp +++ /dev/null @@ -1,278 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -/* ScriptData -SDName: SimpleAI -SD%Complete: 100 -SDComment: Base Class for SimpleAI creatures -SDCategory: Creatures -EndScriptData */ - -#include "precompiled.h" -#include "simple_ai.h" - -SimpleAI::SimpleAI(Creature *c) : ScriptedAI(c) -{ - //Clear all data - Aggro_TextId[0] = 0; - Aggro_TextId[1] = 0; - Aggro_TextId[2] = 0; - Aggro_Sound[0] = 0; - Aggro_Sound[1] = 0; - Aggro_Sound[2] = 0; - - Death_TextId[0] = 0; - Death_TextId[1] = 0; - Death_TextId[2] = 0; - Death_Sound[0] = 0; - Death_Sound[1] = 0; - Death_Sound[2] = 0; - Death_Spell = 0; - Death_Target_Type = 0; - - Kill_TextId[0] = 0; - Kill_TextId[1] = 0; - Kill_TextId[2] = 0; - Kill_Sound[0] = 0; - Kill_Sound[1] = 0; - Kill_Sound[2] = 0; - Kill_Spell = 0; - Kill_Target_Type = 0; - - memset(Spell,0,sizeof(Spell)); - - EnterEvadeMode(); -} - -void SimpleAI::Reset() -{ -} - -void SimpleAI::EnterCombat(Unit *who) -{ - //Reset cast timers - if (Spell[0].First_Cast >= 0) - Spell_Timer[0] = Spell[0].First_Cast; - else Spell_Timer[0] = 1000; - if (Spell[1].First_Cast >= 0) - Spell_Timer[1] = Spell[1].First_Cast; - else Spell_Timer[1] = 1000; - if (Spell[2].First_Cast >= 0) - Spell_Timer[2] = Spell[2].First_Cast; - else Spell_Timer[2] = 1000; - if (Spell[3].First_Cast >= 0) - Spell_Timer[3] = Spell[3].First_Cast; - else Spell_Timer[3] = 1000; - if (Spell[4].First_Cast >= 0) - Spell_Timer[4] = Spell[4].First_Cast; - else Spell_Timer[4] = 1000; - if (Spell[5].First_Cast >= 0) - Spell_Timer[5] = Spell[5].First_Cast; - else Spell_Timer[5] = 1000; - if (Spell[6].First_Cast >= 0) - Spell_Timer[6] = Spell[6].First_Cast; - else Spell_Timer[6] = 1000; - if (Spell[7].First_Cast >= 0) - Spell_Timer[7] = Spell[7].First_Cast; - else Spell_Timer[7] = 1000; - if (Spell[8].First_Cast >= 0) - Spell_Timer[8] = Spell[8].First_Cast; - else Spell_Timer[8] = 1000; - if (Spell[9].First_Cast >= 0) - Spell_Timer[9] = Spell[9].First_Cast; - else Spell_Timer[9] = 1000; - - uint32 random_text = rand()%3; - - //Random text - if (Aggro_TextId[random_text]) - DoScriptText(Aggro_TextId[random_text], m_creature, who); - - //Random sound - if (Aggro_Sound[random_text]) - DoPlaySoundToSet(m_creature, Aggro_Sound[random_text]); -} - -void SimpleAI::KilledUnit(Unit *victim) -{ - uint32 random_text = rand()%3; - - //Random yell - if (Kill_TextId[random_text]) - DoScriptText(Kill_TextId[random_text], m_creature, victim); - - //Random sound - if (Kill_Sound[random_text]) - DoPlaySoundToSet(m_creature, Kill_Sound[random_text]); - - if (!Kill_Spell) - return; - - Unit* target = NULL; - - switch (Kill_Target_Type) - { - case CAST_SELF: - target = m_creature; - break; - case CAST_HOSTILE_TARGET: - target = m_creature->getVictim(); - break; - case CAST_HOSTILE_SECOND_AGGRO: - target = SelectUnit(SELECT_TARGET_TOPAGGRO,1); - break; - case CAST_HOSTILE_LAST_AGGRO: - target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0); - break; - case CAST_HOSTILE_RANDOM: - target = SelectUnit(SELECT_TARGET_RANDOM,0); - break; - case CAST_KILLEDUNIT_VICTIM: - target = victim; - break; - } - - //Target is ok, cast a spell on it - if (target) - DoCast(target, Kill_Spell); -} - -void SimpleAI::DamageTaken(Unit *killer, uint32 &damage) -{ - //Return if damage taken won't kill us - if (m_creature->GetHealth() > damage) - return; - - uint32 random_text = rand()%3; - - //Random yell - if (Death_TextId[random_text]) - DoScriptText(Death_TextId[random_text], m_creature, killer); - - //Random sound - if (Death_Sound[random_text]) - DoPlaySoundToSet(m_creature, Death_Sound[random_text]); - - if (!Death_Spell) - return; - - Unit* target = NULL; - - switch (Death_Target_Type) - { - case CAST_SELF: - target = m_creature; - break; - case CAST_HOSTILE_TARGET: - target = m_creature->getVictim(); - break; - case CAST_HOSTILE_SECOND_AGGRO: - target = SelectUnit(SELECT_TARGET_TOPAGGRO,1); - break; - case CAST_HOSTILE_LAST_AGGRO: - target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0); - break; - case CAST_HOSTILE_RANDOM: - target = SelectUnit(SELECT_TARGET_RANDOM,0); - break; - case CAST_JUSTDIED_KILLER: - target = killer; - break; - } - - //Target is ok, cast a spell on it - if (target) - DoCast(target, Death_Spell); -} - -void SimpleAI::UpdateAI(const uint32 diff) -{ - //Return since we have no target - if (!UpdateVictim()) - return; - - //Spells - for (uint32 i = 0; i < 10; ++i) - { - //Spell not valid - if (!Spell[i].Enabled || !Spell[i].Spell_Id) - continue; - - if (Spell_Timer[i] < diff) - { - //Check if this is a percentage based - if (Spell[i].First_Cast < 0 && Spell[i].First_Cast > -100 && m_creature->GetHealth()*100 / m_creature->GetMaxHealth() > -Spell[i].First_Cast) - continue; - - //Check Current spell - if (!(Spell[i].InterruptPreviousCast && m_creature->IsNonMeleeSpellCasted(false))) - { - Unit* target = NULL; - - switch (Spell[i].Cast_Target_Type) - { - case CAST_SELF: - target = m_creature; - break; - case CAST_HOSTILE_TARGET: - target = m_creature->getVictim(); - break; - case CAST_HOSTILE_SECOND_AGGRO: - target = SelectUnit(SELECT_TARGET_TOPAGGRO,1); - break; - case CAST_HOSTILE_LAST_AGGRO: - target = SelectUnit(SELECT_TARGET_BOTTOMAGGRO,0); - break; - case CAST_HOSTILE_RANDOM: - target = SelectUnit(SELECT_TARGET_RANDOM,0); - break; - } - - //Target is ok, cast a spell on it and then do our random yell - if (target) - { - if (m_creature->IsNonMeleeSpellCasted(false)) - m_creature->InterruptNonMeleeSpells(false); - - DoCast(target, Spell[i].Spell_Id); - - //Yell and sound use the same number so that you can make - //the Creature yell with the correct sound effect attached - uint32 random_text = rand()%3; - - //Random yell - if (Spell[i].TextId[random_text]) - DoScriptText(Spell[i].TextId[random_text], m_creature, target); - - //Random sound - if (Spell[i].Text_Sound[random_text]) - DoPlaySoundToSet(m_creature, Spell[i].Text_Sound[random_text]); - } - - } - - //Spell will cast agian when the cooldown is up - if (Spell[i].CooldownRandomAddition) - Spell_Timer[i] = Spell[i].Cooldown + (rand() % Spell[i].CooldownRandomAddition); - else Spell_Timer[i] = Spell[i].Cooldown; - - }else Spell_Timer[i] -= diff; - - } - - DoMeleeAttackIfReady(); -} - diff --git a/src/bindings/scripts/scripts/creature/simple_ai.h b/src/bindings/scripts/scripts/creature/simple_ai.h deleted file mode 100644 index 3a2e8a9341a..00000000000 --- a/src/bindings/scripts/scripts/creature/simple_ai.h +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 -* This program is free software licensed under GPL version 2 -* Please see the included DOCS/LICENSE.TXT for more information */ - -#ifndef SC_SIMPLEAI_H -#define SC_SIMPLEAI_H - -enum CastTarget -{ - CAST_SELF = 0, //Self cast - CAST_HOSTILE_TARGET, //Our current target (ie: highest aggro) - CAST_HOSTILE_SECOND_AGGRO, //Second highest aggro (generaly used for cleaves and some special attacks) - CAST_HOSTILE_LAST_AGGRO, //Dead last on aggro (no idea what this could be used for) - CAST_HOSTILE_RANDOM, //Just any random target on our threat list - CAST_FRIENDLY_RANDOM, //NOT YET IMPLEMENTED - - //Special cases - CAST_KILLEDUNIT_VICTIM, //Only works within KilledUnit function - CAST_JUSTDIED_KILLER, //Only works within JustDied function -}; - -struct TRINITY_DLL_DECL SimpleAI : public ScriptedAI -{ - SimpleAI(Creature *c);// : ScriptedAI(c); - - void Reset(); - - void EnterCombat(Unit *who); - - void KilledUnit(Unit *victim); - - void DamageTaken(Unit *killer, uint32 &damage); - - void UpdateAI(const uint32 diff); - -public: - - int32 Aggro_TextId[3]; - uint32 Aggro_Sound[3]; - - int32 Death_TextId[3]; - uint32 Death_Sound[3]; - uint32 Death_Spell; - uint32 Death_Target_Type; - - int32 Kill_TextId[3]; - uint32 Kill_Sound[3]; - uint32 Kill_Spell; - uint32 Kill_Target_Type; - - struct SimpleAI_Spell - { - uint32 Spell_Id; //Spell ID to cast - int32 First_Cast; //Delay for first cast - uint32 Cooldown; //Cooldown between casts - uint32 CooldownRandomAddition; //Random addition to cooldown (in range from 0 - CooldownRandomAddition) - uint32 Cast_Target_Type; //Target type (note that certain spells may ignore this) - bool InterruptPreviousCast; //Interrupt a previous cast if this spell needs to be cast - bool Enabled; //Spell enabled or disabled (default: false) - - //3 texts to many? - int32 TextId[3]; - uint32 Text_Sound[3]; - }Spell[10]; - -protected: - uint32 Spell_Timer[10]; -}; - -#endif - diff --git a/src/bindings/scripts/scripts/custom/test.cpp b/src/bindings/scripts/scripts/custom/test.cpp index 221411e994b..20a3e2a20e3 100644 --- a/src/bindings/scripts/scripts/custom/test.cpp +++ b/src/bindings/scripts/scripts/custom/test.cpp @@ -22,7 +22,7 @@ SDCategory: Script Examples EndScriptData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" struct TRINITY_DLL_DECL npc_testAI : public npc_escortAI { diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp index 18656ca4d98..d95fce3a016 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp @@ -26,7 +26,7 @@ npc_professor_phizzlethorpe EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_professor_phizzlethorpe diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp index 543dd75b499..78326ffb82b 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp @@ -30,7 +30,7 @@ go_harbinger_second_trial EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_prospector_anvilward diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp index f2fbb26ea70..2416096e6af 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp @@ -29,7 +29,7 @@ npc_ranger_lilatha EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_blood_knight_dawnstar diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp index 3398daf64c6..69005114ff6 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp @@ -26,7 +26,7 @@ npc_rinji EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_rinji diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp index 2511a931e9c..bd8b2906c92 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/silverpine_forest.cpp @@ -27,7 +27,7 @@ npc_deathstalker_erland EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_astor_hadren diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp index 93b2bbf049c..dadef602e04 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp @@ -27,7 +27,7 @@ npc_defias_traitor EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_daphne_stilwell diff --git a/src/bindings/scripts/scripts/examples/example_escort.cpp b/src/bindings/scripts/scripts/examples/example_escort.cpp index fa1a8432837..21d29f848f2 100644 --- a/src/bindings/scripts/scripts/examples/example_escort.cpp +++ b/src/bindings/scripts/scripts/examples/example_escort.cpp @@ -22,7 +22,7 @@ SDCategory: Script Examples EndScriptData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" enum { diff --git a/src/bindings/scripts/scripts/guard/guard_ai.cpp b/src/bindings/scripts/scripts/guard/guard_ai.cpp deleted file mode 100644 index 7f1daa1e2df..00000000000 --- a/src/bindings/scripts/scripts/guard/guard_ai.cpp +++ /dev/null @@ -1,196 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Guard_AI -SD%Complete: 90 -SDComment: -SDCategory: Guards -EndScriptData */ - -#include "precompiled.h" -#include "guard_ai.h" - -// **** This script is for use within every single guard to save coding time **** - -#define GENERIC_CREATURE_COOLDOWN 5000 - -#define SAY_GUARD_SIL_AGGRO1 -1070001 -#define SAY_GUARD_SIL_AGGRO2 -1070002 -#define SAY_GUARD_SIL_AGGRO3 -1070003 - -void guardAI::Reset() -{ - GlobalCooldown = 0; - BuffTimer = 0; //Rebuff as soon as we can -} - -void guardAI::EnterCombat(Unit *who) -{ - if (m_creature->GetEntry() == 15184) - { - switch(rand()%3) - { - case 0: DoScriptText(SAY_GUARD_SIL_AGGRO1, m_creature, who); break; - case 1: DoScriptText(SAY_GUARD_SIL_AGGRO1, m_creature, who); break; - case 2: DoScriptText(SAY_GUARD_SIL_AGGRO1, m_creature, who); break; - } - } - - if (SpellEntry const *spell = m_creature->reachWithSpellAttack(who)) - DoCastSpell(who, spell); -} - -void guardAI::JustDied(Unit *Killer) -{ - //Send Zone Under Attack message to the LocalDefense and WorldDefense Channels - if (Player* pKiller = Killer->GetCharmerOrOwnerPlayerOrPlayerItself()) - m_creature->SendZoneUnderAttackMessage(pKiller); -} - -void guardAI::UpdateAI(const uint32 diff) -{ - //Always decrease our global cooldown first - if (GlobalCooldown > diff) - GlobalCooldown -= diff; - else GlobalCooldown = 0; - - //Buff timer (only buff when we are alive and not in combat - if (m_creature->isAlive() && !m_creature->isInCombat()) - if (BuffTimer < diff) - { - //Find a spell that targets friendly and applies an aura (these are generally buffs) - SpellEntry const *info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_AURA); - - if (info && !GlobalCooldown) - { - //Cast the buff spell - DoCastSpell(m_creature, info); - - //Set our global cooldown - GlobalCooldown = GENERIC_CREATURE_COOLDOWN; - - //Set our timer to 10 minutes before rebuff - BuffTimer = 600000; - } //Try agian in 30 seconds - else BuffTimer = 30000; - }else BuffTimer -= diff; - - //Return since we have no target - if (!UpdateVictim()) - return; - - // Make sure our attack is ready and we arn't currently casting - if (m_creature->isAttackReady() && !m_creature->IsNonMeleeSpellCasted(false)) - { - //If we are within range melee the target - if (m_creature->IsWithinMeleeRange(m_creature->getVictim())) - { - bool Healing = false; - SpellEntry const *info = NULL; - - //Select a healing spell if less than 30% hp - if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30) - info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); - - //No healing spell available, select a hostile spell - if (info) Healing = true; - else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, 0, 0, SELECT_EFFECT_DONTCARE); - - //20% chance to replace our white hit with a spell - if (info && rand() % 5 == 0 && !GlobalCooldown) - { - //Cast the spell - if (Healing)DoCastSpell(m_creature, info); - else DoCastSpell(m_creature->getVictim(), info); - - //Set our global cooldown - GlobalCooldown = GENERIC_CREATURE_COOLDOWN; - } - else m_creature->AttackerStateUpdate(m_creature->getVictim()); - - m_creature->resetAttackTimer(); - } - } - else - { - //Only run this code if we arn't already casting - if (!m_creature->IsNonMeleeSpellCasted(false)) - { - bool Healing = false; - SpellEntry const *info = NULL; - - //Select a healing spell if less than 30% hp ONLY 33% of the time - if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 30 && rand() % 3 == 0) - info = SelectSpell(m_creature, -1, -1, SELECT_TARGET_ANY_FRIEND, 0, 0, 0, 0, SELECT_EFFECT_HEALING); - - //No healing spell available, See if we can cast a ranged spell (Range must be greater than ATTACK_DISTANCE) - if (info) Healing = true; - else info = SelectSpell(m_creature->getVictim(), -1, -1, SELECT_TARGET_ANY_ENEMY, 0, 0, NOMINAL_MELEE_RANGE, 0, SELECT_EFFECT_DONTCARE); - - //Found a spell, check if we arn't on cooldown - if (info && !GlobalCooldown) - { - //If we are currently moving stop us and set the movement generator - if ((*m_creature).GetMotionMaster()->GetCurrentMovementGeneratorType()!=IDLE_MOTION_TYPE) - { - (*m_creature).GetMotionMaster()->Clear(false); - (*m_creature).GetMotionMaster()->MoveIdle(); - } - - //Cast spell - if (Healing) DoCastSpell(m_creature,info); - else DoCastSpell(m_creature->getVictim(),info); - - //Set our global cooldown - GlobalCooldown = GENERIC_CREATURE_COOLDOWN; - - } //If no spells available and we arn't moving run to target - else if ((*m_creature).GetMotionMaster()->GetCurrentMovementGeneratorType()!=TARGETED_MOTION_TYPE) - { - //Cancel our current spell and then mutate new movement generator - m_creature->InterruptNonMeleeSpells(false); - (*m_creature).GetMotionMaster()->Clear(false); - (*m_creature).GetMotionMaster()->MoveChase(m_creature->getVictim()); - } - } - } -} - -void guardAI::DoReplyToTextEmote(uint32 em) -{ - switch(em) - { - case TEXTEMOTE_KISS: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_BOW); break; - case TEXTEMOTE_WAVE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_WAVE); break; - case TEXTEMOTE_SALUTE: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE); break; - case TEXTEMOTE_SHY: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_FLEX); break; - case TEXTEMOTE_RUDE: - case TEXTEMOTE_CHICKEN: m_creature->HandleEmoteCommand(EMOTE_ONESHOT_POINT); break; - } -} - -void guardAI_orgrimmar::ReceiveEmote(Player* pPlayer, uint32 text_emote) -{ - if (pPlayer->GetTeam()==HORDE) - DoReplyToTextEmote(text_emote); -} - -void guardAI_stormwind::ReceiveEmote(Player* pPlayer, uint32 text_emote) -{ - if (pPlayer->GetTeam() == ALLIANCE) - DoReplyToTextEmote(text_emote); -} diff --git a/src/bindings/scripts/scripts/guard/guard_ai.h b/src/bindings/scripts/scripts/guard/guard_ai.h deleted file mode 100644 index 85baa30fb9d..00000000000 --- a/src/bindings/scripts/scripts/guard/guard_ai.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software licensed under GPL version 2 - * Please see the included DOCS/LICENSE.TXT for more information */ - -#ifndef SC_GUARDAI_H -#define SC_GUARDAI_H - -#define GENERIC_CREATURE_COOLDOWN 5000 - -struct TRINITY_DLL_DECL guardAI : public ScriptedAI -{ - guardAI(Creature *c) : ScriptedAI(c) {} - - uint32 GlobalCooldown; //This variable acts like the global cooldown that players have (1.5 seconds) - uint32 BuffTimer; //This variable keeps track of buffs - - void Reset(); - - void EnterCombat(Unit *who); - - void JustDied(Unit *Killer); - - void UpdateAI(const uint32 diff); - - //common used for guards in main cities - void DoReplyToTextEmote(uint32 em); -}; - -struct TRINITY_DLL_DECL guardAI_orgrimmar : public guardAI -{ - guardAI_orgrimmar(Creature *c) : guardAI(c) {} - - void ReceiveEmote(Player *player, uint32 text_emote); -}; - -struct TRINITY_DLL_DECL guardAI_stormwind : public guardAI -{ - guardAI_stormwind(Creature *c) : guardAI(c) {} - - void ReceiveEmote(Player *player, uint32 text_emote); -}; -#endif - diff --git a/src/bindings/scripts/scripts/guard/guards.cpp b/src/bindings/scripts/scripts/guard/guards.cpp deleted file mode 100644 index fa5592f7c32..00000000000 --- a/src/bindings/scripts/scripts/guard/guards.cpp +++ /dev/null @@ -1,4110 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Guards -SD%Complete: 100 -SDComment: All Guard gossip data, quite some npc_text-id's still missing, adding constantly as new id's are known. CombatAI should be organized better for future. -SDCategory: Guards -EndScriptData */ - -/* ContentData -guard_azuremyst -guard_bluffwatcher -guard_contested -guard_darnassus -guard_dunmorogh -guard_durotar -guard_elwynnforest -guard_eversong -guard_exodar -guard_ironforge -guard_mulgore -guard_orgrimmar -guard_shattrath -guard_shattrath_aldor -guard_shattrath_scryer -guard_silvermoon -guard_stormwind -guard_teldrassil -guard_tirisfal -guard_undercity -EndContentData */ - -#include "precompiled.h" -#include "guard_ai.h" - -//script spesific action -#define GOSSIP_ACTION_TAVERN 101 -#define GOSSIP_ACTION_GEMMERCHANT 102 -#define GOSSIP_ACTION_MANALOOM 103 - -//script spesific sender -#define GOSSIP_SENDER_SEC_GEMMERCHANT 101 -#define GOSSIP_SENDER_SEC_AUCTIONHOUSE 102 - -//script spesific gossip text -#define GOSSIP_TEXT_TAVERN "Worlds End Tavern" -#define GOSSIP_TEXT_BANKSCYERS "Scyers bank" -#define GOSSIP_TEXT_BANKALDOR "Aldor Bank" -#define GOSSIP_TEXT_INNSCYERS "Scyers Inn" -#define GOSSIP_TEXT_INNALDOR "Aldor Inn" -#define GOSSIP_TEXT_STABLESCYERS "Scyers Stable" -#define GOSSIP_TEXT_STABLEALDOR "Aldor Stable" -#define GOSSIP_TEXT_BATTLEMASTERALLIANCE "Alliance Battlemasters" -#define GOSSIP_TEXT_BATTLEMASTERHORDE "Horde Battlemasters" -#define GOSSIP_TEXT_BATTLEMASTERARENA "Arena Battlemasters" -#define GOSSIP_TEXT_MANALOOM "Mana Loom" -#define GOSSIP_TEXT_ALCHEMYLAB "Alchemy Lab" -#define GOSSIP_TEXT_GEMMERCHANT "Gem Merchant" -#define GOSSIP_TEXT_GEMSCYERS "Scyers Gem Merchant" -#define GOSSIP_TEXT_GEMALDOR "Aldor Gem Merchant" - -#define GOSSIP_TEXT_AH_SILVERMOON_1 "Western Auction House" -#define GOSSIP_TEXT_AH_SILVERMOON_2 "Royal Exchange Auction House" - -#define GOSSIP_TEXT_INN_SILVERMOON_1 "Silvermoon City Inn" -#define GOSSIP_TEXT_INN_SILVERMOON_2 "Wayfarer's Rest tavern" - -/******************************************************* - * guard_azuremyst start - *******************************************************/ - -bool GossipHello_guard_azuremyst(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(10066, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(-3918.95, -11544.7, 7, 6, 0, "Bank"); - pPlayer->SEND_GOSSIP_MENU(10067, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hippogryph Master - pPlayer->SEND_POI(-4057.15, -11788.6, 7, 6, 0, "Stephanos"); - pPlayer->SEND_GOSSIP_MENU(10071, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(-4092.43, -11626.6, 7, 6, 0, "Funaam"); - pPlayer->SEND_GOSSIP_MENU(10073, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-4129.43, -12469, 7, 6, 0, "Caregiver Chellan"); - pPlayer->SEND_GOSSIP_MENU(10074, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master - pPlayer->SEND_POI(-4146.42, -12492.7, 7, 6, 0, "Esbina"); - pPlayer->SEND_GOSSIP_MENU(10075, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(10076, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); - pPlayer->SEND_GOSSIP_MENU(10087, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-4274.81, -11495.3, 7, 6, 0, "Shalannius"); - pPlayer->SEND_GOSSIP_MENU(10077, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-4203.65, -12526.5, 7, 6, 0, "Acteon"); - pPlayer->SEND_GOSSIP_MENU(10078, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-4149.62, -12530.1, 7, 6, 0, "Semid"); - pPlayer->SEND_GOSSIP_MENU(10081, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(-4138.98, -12468.5, 7, 6, 0, "Tullas"); - pPlayer->SEND_GOSSIP_MENU(10083, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-4131.66, -12478.6, 7, 6, 0, "Guvan"); - pPlayer->SEND_GOSSIP_MENU(10084, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Shaman - pPlayer->SEND_POI(-4162.33, -12456.1, 7, 6, 0, "Tuluun"); - pPlayer->SEND_GOSSIP_MENU(10085, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-4165.05, -12536.4, 7, 6, 0, "Ruada"); - pPlayer->SEND_GOSSIP_MENU(10086, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-4191.15, -12470, 7, 6, 0, "Daedal"); - pPlayer->SEND_GOSSIP_MENU(10088, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-4726.29, -12387, 7, 6, 0, "Blacksmith Calypso"); - pPlayer->SEND_GOSSIP_MENU(10089, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-4710.87, -12400.6, 7, 6, 0, "'Cookie' McWeaksauce"); - pPlayer->SEND_GOSSIP_MENU(10090, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-3882.85, -11496.7, 7, 6, 0, "Nahogg"); - pPlayer->SEND_GOSSIP_MENU(10091, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-4157.57, -12470.2, 7, 6, 0, "Artificer Daelo"); - pPlayer->SEND_GOSSIP_MENU(10092, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-4199.11, -12469.9, 7, 6, 0, "Anchorite Fateema"); - pPlayer->SEND_GOSSIP_MENU(10093, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-4266.38, -12985.1, 7, 6, 0, "Diktynna"); - pPlayer->SEND_GOSSIP_MENU(10094, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_GOSSIP_MENU(10095, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting - pPlayer->SEND_POI(-3781.55, -11541.8, 7, 6, 0, "Farii"); - pPlayer->SEND_GOSSIP_MENU(10096, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking - pPlayer->SEND_POI(-3442.68, -12322.2, 7, 6, 0, "Moordo"); - pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Mining - pPlayer->SEND_POI(-4179.89, -12493.1, 7, 6, 0, "Dulvi"); - pPlayer->SEND_GOSSIP_MENU(10097, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Skinning - pPlayer->SEND_POI(-3431.17, -12316.5, 7, 6, 0, "Gurf"); - pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring - pPlayer->SEND_POI(-4711.54, -12386.7, 7, 6, 0, "Erin Kelly"); - pPlayer->SEND_GOSSIP_MENU(10099, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_azuremyst end - *******************************************************/ - -CreatureAI* GetAI_guard_azuremyst(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_bluffwatcher start - *******************************************************/ - -bool GossipHello_guard_bluffwatcher(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(-1257.8, 24.14, 7, 6, 0, "Thunder Bluff Bank"); - pPlayer->SEND_GOSSIP_MENU(1292, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Wind master - pPlayer->SEND_POI(-1196.43, 28.26, 7, 6, 0, "Wind Rider Roost"); - pPlayer->SEND_GOSSIP_MENU(1293, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(-1296.5, 127.57, 7, 6, 0, "Thunder Bluff Civic Information"); - pPlayer->SEND_GOSSIP_MENU(1291, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-1296, 39.7, 7, 6, 0, "Thunder Bluff Inn"); - pPlayer->SEND_GOSSIP_MENU(3153, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(-1263.59, 44.36, 7, 6, 0, "Thunder Bluff Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3154, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Auction House - pPlayer->SEND_POI(1381.77, -4371.16, 7, 6, 0, GOSSIP_TEXT_AUCTIONHOUSE); - pPlayer->SEND_GOSSIP_MENU(3155, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Weapon master - pPlayer->SEND_POI(-1282.31, 89.56, 7, 6, 0, "Ansekhwa"); - pPlayer->SEND_GOSSIP_MENU(4520, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Stable master - pPlayer->SEND_POI(-1270.19, 48.84, 7, 6, 0, "Bulrug"); - pPlayer->SEND_GOSSIP_MENU(5977, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-1387.82, -97.55, 7, 6, 0, "Taim Ragetotem"); - pPlayer->SEND_GOSSIP_MENU(7522, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-997, 214.12, 7, 6, 0, "Martin Lindsey"); - pPlayer->SEND_GOSSIP_MENU(7648, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(-1384.94, -75.91, 7, 6, 0, "Kergul Bloodaxe"); - pPlayer->SEND_GOSSIP_MENU(7523, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-1054.47, -285, 7, 6, 0, "Hall of Elders"); - pPlayer->SEND_GOSSIP_MENU(1294, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); - pPlayer->SEND_GOSSIP_MENU(1295, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); - pPlayer->SEND_GOSSIP_MENU(1296, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Priest - pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); - pPlayer->SEND_GOSSIP_MENU(1297, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Shaman - pPlayer->SEND_POI(-989.54, 278.25, 7, 6, 0, "Hall of Spirits"); - pPlayer->SEND_GOSSIP_MENU(1298, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warrior - pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); - pPlayer->SEND_GOSSIP_MENU(1299, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1085.56, 27.29, 7, 6, 0, "Bena's Alchemy"); - pPlayer->SEND_GOSSIP_MENU(1332, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1239.75, 104.88, 7, 6, 0, "Karn's Smithy"); - pPlayer->SEND_GOSSIP_MENU(1333, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-1214.5, -21.23, 7, 6, 0, "Aska's Kitchen"); - pPlayer->SEND_GOSSIP_MENU(1334, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-1112.65, 48.26, 7, 6, 0, "Dawnstrider Enchanters"); - pPlayer->SEND_GOSSIP_MENU(1335, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-996.58, 200.5, 7, 6, 0, "Spiritual Healing"); - pPlayer->SEND_GOSSIP_MENU(1336, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Fishing - pPlayer->SEND_POI(-1169.35, -68.87, 7, 6, 0, "Mountaintop Bait & Tackle"); - pPlayer->SEND_GOSSIP_MENU(1337, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism - pPlayer->SEND_POI(-1137.7, -1.51, 7, 6, 0, "Holistic Herbalism"); - pPlayer->SEND_GOSSIP_MENU(1338, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Inscription - pPlayer->SEND_POI(-1000.26, 209.52, 7, 6, 0, "Poshken Hardbinder"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); - pPlayer->SEND_GOSSIP_MENU(1339, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_POI(-1249.17, 155, 7, 6, 0, "Stonehoof Geology"); - pPlayer->SEND_GOSSIP_MENU(1340, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_POI(-1148.56, 51.18, 7, 6, 0, "Mooranta"); - pPlayer->SEND_GOSSIP_MENU(1343, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); - pPlayer->SEND_GOSSIP_MENU(1341, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_bluffwatcher end - *******************************************************/ - -CreatureAI* GetAI_guard_bluffwatcher(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_contested start - *******************************************************/ - -CreatureAI* GetAI_guard_contested(Creature* pCreature) -{ - return new guardAI (pCreature); -} -/******************************************************* - * guard_contested end - *******************************************************/ - -/******************************************************* - * guard_darnassus start - *******************************************************/ - -bool GossipHello_guard_darnassus(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(3016, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction house - pPlayer->SEND_POI(9861.23, 2334.55, 7, 6, 0, "Darnassus Auction House"); - pPlayer->SEND_GOSSIP_MENU(3833, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(9938.45, 2512.35, 7, 6, 0, "Darnassus Bank"); - pPlayer->SEND_GOSSIP_MENU(3017, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Wind master - pPlayer->SEND_POI(9945.65, 2618.94, 7, 6, 0, "Rut'theran Village"); - pPlayer->SEND_GOSSIP_MENU(3018, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Guild master - pPlayer->SEND_POI(10076.40, 2199.59, 7, 6, 0, "Darnassus Guild Master"); - pPlayer->SEND_GOSSIP_MENU(3019, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Inn - pPlayer->SEND_POI(10133.29, 2222.52, 7, 6, 0, "Darnassus Inn"); - pPlayer->SEND_GOSSIP_MENU(3020, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox - pPlayer->SEND_POI(9942.17, 2495.48, 7, 6, 0, "Darnassus Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3021, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Stable master - pPlayer->SEND_POI(10167.20, 2522.66, 7, 6, 0, "Alassin"); - pPlayer->SEND_GOSSIP_MENU(5980, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer - pPlayer->SEND_POI(9907.11, 2329.70, 7, 6, 0, "Ilyenia Moonfire"); - pPlayer->SEND_GOSSIP_MENU(4517, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(9923.61, 2327.43, 7, 6, 0, "Brogun Stoneshield"); - pPlayer->SEND_GOSSIP_MENU(7518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(9977.37, 2324.39, 7, 6, 0, "Keras Wolfheart"); - pPlayer->SEND_GOSSIP_MENU(7651, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(9979.84, 2315.79, 7, 6, 0, "Aethalas"); - pPlayer->SEND_GOSSIP_MENU(7482, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(10186, 2570.46, 7, 6, 0, "Darnassus Druid Trainer"); - pPlayer->SEND_GOSSIP_MENU(3024, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(10177.29, 2511.10, 7, 6, 0, "Darnassus Hunter Trainer"); - pPlayer->SEND_GOSSIP_MENU(3023, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(9659.12, 2524.88, 7, 6, 0, "Temple of the Moon"); - pPlayer->SEND_GOSSIP_MENU(3025, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Rogue - pPlayer->SEND_POI(10122, 2599.12, 7, 6, 0, "Darnassus Rogue Trainer"); - pPlayer->SEND_GOSSIP_MENU(3026, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(9951.91, 2280.38, 7, 6, 0, "Warrior's Terrace"); - pPlayer->SEND_GOSSIP_MENU(3033, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(10075.90, 2356.76, 7, 6, 0, "Darnassus Alchemy Trainer"); - pPlayer->SEND_GOSSIP_MENU(3035, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Cooking - pPlayer->SEND_POI(10088.59, 2419.21, 7, 6, 0, "Darnassus Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3036, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting - pPlayer->SEND_POI(10146.09, 2313.42, 7, 6, 0, "Darnassus Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(3337, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //First Aid - pPlayer->SEND_POI(10150.09, 2390.43, 7, 6, 0, "Darnassus First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(3037, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Fishing - pPlayer->SEND_POI(9836.20, 2432.17, 7, 6, 0, "Darnassus Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(3038, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism - pPlayer->SEND_POI(9757.17, 2430.16, 7, 6, 0, "Darnassus Herbalism Trainer"); - pPlayer->SEND_GOSSIP_MENU(3039, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Inscription - pPlayer->SEND_POI(10139.00, 2343.31, 7, 6, 0, "Feyden Darkin"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking - pPlayer->SEND_POI(10086.59, 2255.77, 7, 6, 0, "Darnassus Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3040, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Skinning - pPlayer->SEND_POI(10081.40, 2257.18, 7, 6, 0, "Darnassus Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(3042, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring - pPlayer->SEND_POI(10079.70, 2268.19, 7, 6, 0, "Darnassus Tailor"); - pPlayer->SEND_GOSSIP_MENU(3044, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_darnassus end - *******************************************************/ - -CreatureAI* GetAI_guard_darnassus(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_dunmorogh start - *******************************************************/ - -bool GossipHello_guard_dunmorogh(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4287, pCreature->GetGUID()); - - return true; -} - -void SendDefaultMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4288, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master - pPlayer->SEND_GOSSIP_MENU(4289, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_GOSSIP_MENU(4290, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-5582.66, -525.89, 7, 6, 0, "Thunderbrew Distillery"); - pPlayer->SEND_GOSSIP_MENU(4291, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master - pPlayer->SEND_POI(-5604, -509.58, 7, 6, 0, "Shelby Stoneflint"); - pPlayer->SEND_GOSSIP_MENU(5985, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(4300, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(-5618.29, -454.25, 7, 6, 0, "Grif Wildheart"); - pPlayer->SEND_GOSSIP_MENU(4293, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Magis Sparkmantle"); - pPlayer->SEND_GOSSIP_MENU(4294, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Paladin - pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Azar Stronghammer"); - pPlayer->SEND_GOSSIP_MENU(4295, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Priest - pPlayer->SEND_POI(-5591.74, -525.61, 7, 6, 0, "Maxan Anvol"); - pPlayer->SEND_GOSSIP_MENU(4296, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Rogue - pPlayer->SEND_POI(-5602.75, -542.4, 7, 6, 0, "Hogral Bakkan"); - pPlayer->SEND_GOSSIP_MENU(4297, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(-5641.97, -523.76, 7, 6, 0, "Gimrizz Shadowcog"); - pPlayer->SEND_GOSSIP_MENU(4298, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-5604.79, -529.38, 7, 6, 0, "Granis Swiftaxe"); - pPlayer->SEND_GOSSIP_MENU(4299, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_GOSSIP_MENU(4301, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-5584.72, -428.41, 7, 6, 0, "Tognus Flintfire"); - pPlayer->SEND_GOSSIP_MENU(4302, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-5596.85, -541.43, 7, 6, 0, "Gremlock Pilsnor"); - pPlayer->SEND_GOSSIP_MENU(4303, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4304, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Bronk Guzzlegear"); - pPlayer->SEND_GOSSIP_MENU(4305, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-5603.67, -523.57, 7, 6, 0, "Thamner Pol"); - pPlayer->SEND_GOSSIP_MENU(4306, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-5199.9, 58.58, 7, 6, 0, "Paxton Ganter"); - pPlayer->SEND_GOSSIP_MENU(4307, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_GOSSIP_MENU(4308, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_GOSSIP_MENU(4310, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Yarr Hamerstone"); - pPlayer->SEND_GOSSIP_MENU(4311, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_GOSSIP_MENU(4312, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4313, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_dunmorogh end - *******************************************************/ - -CreatureAI* GetAI_guard_dunmorogh(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_durotar start - *******************************************************/ - -bool GossipHello_guard_durotar(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(4037, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4032, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider - pPlayer->SEND_GOSSIP_MENU(4033, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(338.7, -4688.87, 7, 6, 0, "Razor Hill Inn"); - pPlayer->SEND_GOSSIP_MENU(4034, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable master - pPlayer->SEND_POI(330.31, -4710.66, 7, 6, 0, "Shoja'my"); - pPlayer->SEND_GOSSIP_MENU(5973, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4035, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(4036, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(276, -4706.72, 7, 6, 0, "Thotar"); - pPlayer->SEND_GOSSIP_MENU(4013, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(-839.33, -4935.6, 7, 6, 0, "Un'Thuwa"); - pPlayer->SEND_GOSSIP_MENU(4014, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(296.22, -4828.1, 7, 6, 0, "Tai'jin"); - pPlayer->SEND_GOSSIP_MENU(4015, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Rogue - pPlayer->SEND_POI(265.76, -4709, 7, 6, 0, "Kaplak"); - pPlayer->SEND_GOSSIP_MENU(4016, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Shaman - pPlayer->SEND_POI(307.79, -4836.97, 7, 6, 0, "Swart"); - pPlayer->SEND_GOSSIP_MENU(4017, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(355.88, -4836.45, 7, 6, 0, "Dhugru Gorelust"); - pPlayer->SEND_GOSSIP_MENU(4018, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(312.3, -4824.66, 7, 6, 0, "Tarshaw Jaggedscar"); - pPlayer->SEND_GOSSIP_MENU(4019, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-800.25, -4894.33, 7, 6, 0, "Miao'zan"); - pPlayer->SEND_GOSSIP_MENU(4020, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(373.24, -4716.45, 7, 6, 0, "Dwukk"); - pPlayer->SEND_GOSSIP_MENU(4021, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_GOSSIP_MENU(4022, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4023, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(368.95, -4723.95, 7, 6, 0, "Mukdrak"); - pPlayer->SEND_GOSSIP_MENU(4024, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(327.17, -4825.62, 7, 6, 0, "Rawrk"); - pPlayer->SEND_GOSSIP_MENU(4025, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-1065.48, -4777.43, 7, 6, 0, "Lau'Tiki"); - pPlayer->SEND_GOSSIP_MENU(4026, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-836.25, -4896.89, 7, 6, 0, "Mishiki"); - pPlayer->SEND_GOSSIP_MENU(4027, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_GOSSIP_MENU(4028, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_POI(366.94, -4705, 7, 6, 0, "Krunn"); - pPlayer->SEND_GOSSIP_MENU(4029, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_GOSSIP_MENU(4030, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4031, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_durotar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_durotar end - *******************************************************/ - -CreatureAI* GetAI_guard_durotar(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_elwynnforest start - *******************************************************/ - -bool GossipHello_guard_elwynnforest(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4260, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master - pPlayer->SEND_GOSSIP_MENU(4261, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_GOSSIP_MENU(4262, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-9459.34, 42.08, 7, 6, 0, "Lion's Pride Inn"); - pPlayer->SEND_GOSSIP_MENU(4263, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master - pPlayer->SEND_POI(-9466.62, 45.87, 7, 6, 0, "Erma"); - pPlayer->SEND_GOSSIP_MENU(5983, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_GOSSIP_MENU(4265, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_GOSSIP_MENU(4266, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-9471.12, 33.44, 7, 6, 0, "Zaldimar Wefhellt"); - pPlayer->SEND_GOSSIP_MENU(4268, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(-9469, 108.05, 7, 6, 0, "Brother Wilhelm"); - pPlayer->SEND_GOSSIP_MENU(4269, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-9461.07, 32.6, 7, 6, 0, "Priestess Josetta"); - pPlayer->SEND_GOSSIP_MENU(4267, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Rogue - pPlayer->SEND_POI(-9465.13, 13.29, 7, 6, 0, "Keryn Sylvius"); - pPlayer->SEND_GOSSIP_MENU(4270, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warlock - pPlayer->SEND_POI(-9473.21, -4.08, 7, 6, 0, "Maximillian Crowe"); - pPlayer->SEND_GOSSIP_MENU(4272, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Warrior - pPlayer->SEND_POI(-9461.82, 109.50, 7, 6, 0, "Lyria Du Lac"); - pPlayer->SEND_GOSSIP_MENU(4271, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-9057.04, 153.63, 7, 6, 0, "Alchemist Mallory"); - pPlayer->SEND_GOSSIP_MENU(4274, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-9456.58, 87.90, 7, 6, 0, "Smith Argus"); - pPlayer->SEND_GOSSIP_MENU(4275, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-9467.54, -3.16, 7, 6, 0, "Tomas"); - pPlayer->SEND_GOSSIP_MENU(4276, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4277, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_GOSSIP_MENU(4278, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-9456.82, 30.49, 7, 6, 0, "Michelle Belle"); - pPlayer->SEND_GOSSIP_MENU(4279, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-9386.54, -118.73, 7, 6, 0, "Lee Brown"); - pPlayer->SEND_GOSSIP_MENU(4280, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-9060.70, 149.23, 7, 6, 0, "Herbalist Pomeroy"); - pPlayer->SEND_GOSSIP_MENU(4281, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Adele Fielder"); - pPlayer->SEND_GOSSIP_MENU(4282, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_GOSSIP_MENU(4283, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(-9536.91, -1212.76, 7, 6, 0, "Helene Peltskinner"); - pPlayer->SEND_GOSSIP_MENU(4284, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Eldrin"); - pPlayer->SEND_GOSSIP_MENU(4285, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_elwynnforest end - *******************************************************/ - -CreatureAI* GetAI_guard_elwynnforest(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_eversong start - *******************************************************/ - -bool GossipHello_guard_eversong(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bat Handler - pPlayer->SEND_POI(9371.93, -7164.80, 7, 6, 0, "Skymistress Gloaming"); - pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Guild master - pPlayer->SEND_GOSSIP_MENU(10182, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(9483.74, -6844.58, 7, 6, 0, "Delaniel's inn"); - pPlayer->SEND_GOSSIP_MENU(10183, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master - pPlayer->SEND_POI(9489.62, -6829.93, 7, 6, 0, "Anathos"); - pPlayer->SEND_GOSSIP_MENU(10184, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_GOSSIP_MENU(10185, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(9527.44, -6865.25, 7, 6, 0, "Hannovia"); - pPlayer->SEND_GOSSIP_MENU(10186, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(9464.24, -6855.52, 7, 6, 0, "Garridel"); - pPlayer->SEND_GOSSIP_MENU(10187, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(9517.61, -6871.04, 7, 6, 0, "Noellene"); - pPlayer->SEND_GOSSIP_MENU(10189, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(9467.39, -6845.72, 7, 6, 0, "Ponaris"); - pPlayer->SEND_GOSSIP_MENU(10190, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Rogue - pPlayer->SEND_POI(9533.67, -6877.39, 7, 6, 0, "Tannaria"); - pPlayer->SEND_GOSSIP_MENU(10191, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warlock - pPlayer->SEND_POI(9468.99, -6865.60, 7, 6, 0, "Celoenus"); - pPlayer->SEND_GOSSIP_MENU(10192, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(8659.90, -6368.12, 7, 6, 0, "Arcanist Sheynathren"); - pPlayer->SEND_GOSSIP_MENU(10193, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(8984.21, -7419.21, 7, 6, 0, "Arathel Sunforge"); - pPlayer->SEND_GOSSIP_MENU(10194, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(9494.04, -6881.51, 7, 6, 0, "Quarelestra"); - pPlayer->SEND_GOSSIP_MENU(10195, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Engineering - pPlayer->SEND_GOSSIP_MENU(10197, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(9479.46, -6879.16, 7, 6, 0, "Kanaria"); - pPlayer->SEND_GOSSIP_MENU(10198, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Fishing - pPlayer->SEND_GOSSIP_MENU(10199, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism - pPlayer->SEND_POI(8678.92, -6329.09, 7, 6, 0, "Botanist Tyniarrel"); - pPlayer->SEND_GOSSIP_MENU(10200, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Inscription - pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Jewelcrafting - pPlayer->SEND_POI(9484.32, -6874.98, 7, 6, 0, "Aleinia"); - pPlayer->SEND_GOSSIP_MENU(10203, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Sathein"); - pPlayer->SEND_GOSSIP_MENU(10204, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_GOSSIP_MENU(10205, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Mathreyn"); - pPlayer->SEND_GOSSIP_MENU(10206, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(8680.36, -6327.51, 7, 6, 0, "Sempstress Ambershine"); - pPlayer->SEND_GOSSIP_MENU(10207, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_eversong(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_eversong end - *******************************************************/ - -CreatureAI* GetAI_guard_eversong(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_exodar start - *******************************************************/ - -bool GossipHello_guard_exodar(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction house - pPlayer->SEND_POI(-4023.6, -11739.3, 7, 6, 0, "Exodar Auction House"); - pPlayer->SEND_GOSSIP_MENU(9528, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-3923.89, -11544.5, 7, 6, 0, "Exodar Bank"); - pPlayer->SEND_GOSSIP_MENU(9529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(-4092.57, -11626.5, 7, 6, 0, "Exodar Guild Master"); - pPlayer->SEND_GOSSIP_MENU(9539, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Hippogryph master - pPlayer->SEND_POI(-4060.46, -11787.1, 7, 6, 0, "Exodar Hippogryph Master"); - pPlayer->SEND_GOSSIP_MENU(9530, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Inn - pPlayer->SEND_POI(-3741.87, -11695.1, 7, 6, 0, "Exodar Inn"); - pPlayer->SEND_GOSSIP_MENU(9545, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox - pPlayer->SEND_POI(-3972.5, -11696.0, 7, 6, 0, "Mailbox"); - pPlayer->SEND_GOSSIP_MENU(10254, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Stable master - pPlayer->SEND_POI(-3786.5, -11702.5, 7, 6, 0, "Stable Master Arthaid"); - pPlayer->SEND_GOSSIP_MENU(9558, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer - pPlayer->SEND_POI(-4215.68, -11628.9, 7, 6, 0, "Weapon Master Handiir"); - pPlayer->SEND_GOSSIP_MENU(9565, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(9533, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); - pPlayer->SEND_GOSSIP_MENU(9555, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Alterac Valley Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-3998.9, -11345.2, 7, 6, 0, "Arathi Basin Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //A - pPlayer->SEND_POI(-3759.27, -11695.63, 7, 6, 0, "Miglik Blotstrom"); - pPlayer->SEND_GOSSIP_MENU(10223, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //EOS - pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Eye Of The Storm Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //WSG - pPlayer->SEND_POI(-3977.5, -11381.2, 7, 6, 0, "Warsong Gulch Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-4276.0, -11495, 7, 6, 0, "Exodar Druid Trainer"); - pPlayer->SEND_GOSSIP_MENU(9534, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-4210.6, -11575.2, 7, 6, 0, "Exodar Hunter Trainer"); - pPlayer->SEND_GOSSIP_MENU(9544, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-4057.32, -11556.5, 7, 6, 0, "Exodar Mage Trainer"); - pPlayer->SEND_GOSSIP_MENU(9550, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(-4191.2, -11470.4, 7, 6, 0, "Exodar Paladin Trainer"); - pPlayer->SEND_GOSSIP_MENU(9553, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-3969.63, -11482.8, 7, 6, 0, "Exodar Priest Trainer"); - pPlayer->SEND_GOSSIP_MENU(9554, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Shaman - pPlayer->SEND_POI(-3805.5, -11380.7, 7, 6, 0, "Exodar Shaman Trainer"); - pPlayer->SEND_GOSSIP_MENU(9556, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-4189.43, -11653.7, 7, 6, 0, "Exodar Warrior Trainer"); - pPlayer->SEND_GOSSIP_MENU(9562, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Alchemy Trainer"); - pPlayer->SEND_GOSSIP_MENU(9527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-4229.5, -11706, 7, 6, 0, "Exodar Blacksmithing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9532, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-3798.3, -11651.7, 7, 6, 0, "Exodar Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-3889.3, -11495, 7, 6, 0, "Exodar Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9535, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-4257.68, -11640.3, 7, 6, 0, "Exodar Engineering Trainer"); - pPlayer->SEND_GOSSIP_MENU(9536, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-3769.5, -11479.6, 7, 6, 0, "Exodar First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(9537, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-3725.5, -11385.2, 7, 6, 0, "Exodar Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9538, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Herbalist Trainer"); - pPlayer->SEND_GOSSIP_MENU(9543, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting - pPlayer->SEND_POI(-3783, -11546, 7, 6, 0, "Exodar Jewelcrafting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9547, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking - pPlayer->SEND_POI(-4140.6, -11776.7, 7, 6, 0, "Exodar Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9549, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Mining - pPlayer->SEND_POI(-4228, -11697, 7, 6, 0, "Exodar Mining Trainer"); - pPlayer->SEND_GOSSIP_MENU(9552, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Skinning - pPlayer->SEND_POI(-4134.97, -11760.5, 7, 6, 0, "Exodar Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(9557, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring - pPlayer->SEND_POI(-4092.5, -11744.5, 7, 6, 0, "Exodar Tailor Trainer"); - pPlayer->SEND_GOSSIP_MENU(9559, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_exodar end - *******************************************************/ - -CreatureAI* GetAI_guard_exodar(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_ironforge start - *******************************************************/ - -bool GossipHello_guard_ironforge(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_IRONFORGE_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(2760, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction House - pPlayer->SEND_POI(-4957.39, -911.6, 7, 6, 0, "Ironforge Auction House"); - pPlayer->SEND_GOSSIP_MENU(3014, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-4891.91, -991.47, 7, 6, 0, "The Vault"); - pPlayer->SEND_GOSSIP_MENU(2761, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Tram - pPlayer->SEND_POI(-4835.27, -1294.69, 7, 6, 0, "Deeprun Tram"); - pPlayer->SEND_GOSSIP_MENU(3814, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Gryphon Master - pPlayer->SEND_POI(-4821.52, -1152.3, 7, 6, 0, "Ironforge Gryphon Master"); - pPlayer->SEND_GOSSIP_MENU(2762, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Guild Master - pPlayer->SEND_POI(-5021, -996.45, 7, 6, 0, "Ironforge Visitor's Center"); - pPlayer->SEND_GOSSIP_MENU(2764, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Inn - pPlayer->SEND_POI(-4850.47, -872.57, 7, 6, 0, "Stonefire Tavern"); - pPlayer->SEND_GOSSIP_MENU(2768, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox - pPlayer->SEND_POI(-4845.7, -880.55, 7, 6, 0, "Ironforge Mailbox"); - pPlayer->SEND_GOSSIP_MENU(2769, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master - pPlayer->SEND_POI(-5010.2, -1262, 7, 6, 0, "Ulbrek Firehand"); - pPlayer->SEND_GOSSIP_MENU(5986, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Weapons Trainer - pPlayer->SEND_POI(-5040, -1201.88, 7, 6, 0, "Bixi and Buliwyf"); - pPlayer->SEND_GOSSIP_MENU(4518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Class Trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Profession Trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(2793, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-5047.87, -1263.77, 7, 6, 0, "Glordrum Steelbeard"); - pPlayer->SEND_GOSSIP_MENU(7483, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-5038.37, -1266.39, 7, 6, 0, "Donal Osgood"); - pPlayer->SEND_GOSSIP_MENU(7649, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(-5037.24, -1274.82, 7, 6, 0, "Lylandris"); - pPlayer->SEND_GOSSIP_MENU(7528, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(-5023, -1253.68, 7, 6, 0, "Hall of Arms"); - pPlayer->SEND_GOSSIP_MENU(2770, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); - pPlayer->SEND_GOSSIP_MENU(2771, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Paladin - pPlayer->SEND_POI(-4627.02, -926.45, 7, 6, 0, "Hall of Mysteries"); - pPlayer->SEND_GOSSIP_MENU(2773, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Priest - pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); - pPlayer->SEND_GOSSIP_MENU(2772, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Rogue - pPlayer->SEND_POI(-4647.83, -1124, 7, 6, 0, "Ironforge Rogue Trainer"); - pPlayer->SEND_GOSSIP_MENU(2774, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(-4605, -1110.45, 7, 6, 0, "Ironforge Warlock Trainer"); - pPlayer->SEND_GOSSIP_MENU(2775, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-5023.08, -1253.68, 7, 6, 0, "Hall of Arms"); - pPlayer->SEND_GOSSIP_MENU(2776, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Shaman - pPlayer->SEND_POI(-4732, -1147, 7, 6, 0, "Ironforge Shaman Trainer"); - //incorrect id - pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-4858.5, -1241.83, 7, 6, 0, "Berryfizz's Potions and Mixed Drinks"); - pPlayer->SEND_GOSSIP_MENU(2794, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-4796.97, -1110.17, 7, 6, 0, "The Great Forge"); - pPlayer->SEND_GOSSIP_MENU(2795, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-4767.83, -1184.59, 7, 6, 0, "The Bronze Kettle"); - pPlayer->SEND_GOSSIP_MENU(2796, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-4803.72, -1196.53, 7, 6, 0, "Thistlefuzz Arcanery"); - pPlayer->SEND_GOSSIP_MENU(2797, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-4799.56, -1250.23, 7, 6, 0, "Springspindle's Gadgets"); - pPlayer->SEND_GOSSIP_MENU(2798, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-4881.6, -1153.13, 7, 6, 0, "Ironforge Physician"); - pPlayer->SEND_GOSSIP_MENU(2799, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-4597.91, -1091.93, 7, 6, 0, "Traveling Fisherman"); - pPlayer->SEND_GOSSIP_MENU(2800, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-4876.9, -1151.92, 7, 6, 0, "Ironforge Physician"); - pPlayer->SEND_GOSSIP_MENU(2801, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-4807.02, -1194.43, 7, 6, 0, "Elise Brightletter"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); - pPlayer->SEND_GOSSIP_MENU(2802, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Minning - pPlayer->SEND_POI(-4705.06, -1116.43, 7, 6, 0, "Deepmountain Mining Guild"); - pPlayer->SEND_GOSSIP_MENU(2804, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); - pPlayer->SEND_GOSSIP_MENU(2805, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(-4719.60, -1056.96, 7, 6, 0, "Stonebrow's Clothier"); - pPlayer->SEND_GOSSIP_MENU(2807, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_ironforge end - *******************************************************/ - -CreatureAI* GetAI_guard_ironforge(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_mulgore start - *******************************************************/ - -bool GossipHello_guard_mulgore(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4051, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider - pPlayer->SEND_GOSSIP_MENU(4052, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(-2361.38, -349.19, 7, 6, 0, "Bloodhoof Village Inn"); - pPlayer->SEND_GOSSIP_MENU(4053, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable master - pPlayer->SEND_POI(-2338.86, -357.56, 7, 6, 0, "Seikwa"); - pPlayer->SEND_GOSSIP_MENU(5976, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->SEND_GOSSIP_MENU(4069, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(4070, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-2312.15, -443.69, 7, 6, 0, "Gennia Runetotem"); - pPlayer->SEND_GOSSIP_MENU(4054, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-2178.14, -406.14, 7, 6, 0, "Yaw Sharpmane"); - pPlayer->SEND_GOSSIP_MENU(4055, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Shaman - pPlayer->SEND_POI(-2301.5, -439.87, 7, 6, 0, "Narm Skychaser"); - pPlayer->SEND_GOSSIP_MENU(4056, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Warrior - pPlayer->SEND_POI(-2345.43, -494.11, 7, 6, 0, "Krang Stonehoof"); - pPlayer->SEND_GOSSIP_MENU(4057, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_GOSSIP_MENU(4058, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_GOSSIP_MENU(4059, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2263.34, -287.91, 7, 6, 0, "Pyall Silentstride"); - pPlayer->SEND_GOSSIP_MENU(4060, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4061, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-2353.52, -355.82, 7, 6, 0, "Vira Younghoof"); - pPlayer->SEND_GOSSIP_MENU(4062, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Fishing - pPlayer->SEND_POI(-2349.21, -241.37, 7, 6, 0, "Uthan Stillwater"); - pPlayer->SEND_GOSSIP_MENU(4063, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism - pPlayer->SEND_GOSSIP_MENU(4064, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_POI(-2257.12, -288.63, 7, 6, 0, "Chaw Stronghide"); - pPlayer->SEND_GOSSIP_MENU(4065, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_GOSSIP_MENU(4066, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_POI(-2252.94, -291.32, 7, 6, 0, "Yonn Deepcut"); - pPlayer->SEND_GOSSIP_MENU(4067, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4068, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_mulgore end - *******************************************************/ - -CreatureAI* GetAI_guard_mulgore(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_orgrimmar start - *******************************************************/ - -bool GossipHello_guard_orgrimmar(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); - - return true; -} - -void SendDefaultMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(1631.51, -4375.33, 7, 6, 0, "Bank of Orgrimmar"); - pPlayer->SEND_GOSSIP_MENU(2554, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //wind rider - pPlayer->SEND_POI(1676.6, -4332.72, 7, 6, 0, "The Sky Tower"); - pPlayer->SEND_GOSSIP_MENU(2555, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //guild master - pPlayer->SEND_POI(1576.93, -4294.75, 7, 6, 0, "Horde Embassy"); - pPlayer->SEND_GOSSIP_MENU(2556, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(1644.51, -4447.27, 7, 6, 0, "Orgrimmar Inn"); - pPlayer->SEND_GOSSIP_MENU(2557, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //mailbox - pPlayer->SEND_POI(1622.53, -4388.79, 7, 6, 0, "Orgrimmar Mailbox"); - pPlayer->SEND_GOSSIP_MENU(2558, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //auction house - pPlayer->SEND_POI(1679.21, -4450.1, 7, 6, 0, "Orgrimmar Auction House"); - pPlayer->SEND_GOSSIP_MENU(3075, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //zeppelin - pPlayer->SEND_POI(1337.36, -4632.7, 7, 6, 0, "Orgrimmar Zeppelin Tower"); - pPlayer->SEND_GOSSIP_MENU(3173, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //weapon master - pPlayer->SEND_POI(2092.56, -4823.95, 7, 6, 0, "Sayoc & Hanashi"); - pPlayer->SEND_GOSSIP_MENU(4519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //stable master - pPlayer->SEND_POI(2133.12, -4663.93, 7, 6, 0, "Xon'cha"); - pPlayer->SEND_GOSSIP_MENU(5974, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //officers lounge - pPlayer->SEND_POI(1633.56, -4249.37, 7, 6, 0, "Hall of Legends"); - pPlayer->SEND_GOSSIP_MENU(7046, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(2599, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(2594, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(7484, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(7644, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(7520, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(2114.84, -4625.31, 7, 6, 0, "Orgrimmar Hunter's Hall"); - pPlayer->SEND_GOSSIP_MENU(2559, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(1451.26, -4223.33, 7, 6, 0, "Darkbriar Lodge"); - pPlayer->SEND_GOSSIP_MENU(2560, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(1442.21, -4183.24, 7, 6, 0, "Spirit Lodge"); - pPlayer->SEND_GOSSIP_MENU(2561, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Shaman - pPlayer->SEND_POI(1925.34, -4181.89, 7, 6, 0, "Thrall's Fortress"); - pPlayer->SEND_GOSSIP_MENU(2562, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Rogue - pPlayer->SEND_POI(1773.39, -4278.97, 7, 6, 0, "Shadowswift Brotherhood"); - pPlayer->SEND_GOSSIP_MENU(2563, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(1849.57, -4359.68, 7, 6, 0, "Darkfire Enclave"); - pPlayer->SEND_GOSSIP_MENU(2564, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(2565, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Paladin - pPlayer->SEND_POI(1906.65, -4134.26, 7, 6, 0, "Valley of Wisdom"); - pPlayer->SEND_GOSSIP_MENU(10843, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(1955.17, -4475.79, 7, 6, 0, "Yelmak's Alchemy and Potions"); - pPlayer->SEND_GOSSIP_MENU(2497, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(2054.34, -4831.85, 7, 6, 0, "The Burning Anvil"); - pPlayer->SEND_GOSSIP_MENU(2499, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(1780.96, -4481.31, 7, 6, 0, "Borstan's Firepit"); - pPlayer->SEND_GOSSIP_MENU(2500, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(1917.5, -4434.95, 7, 6, 0, "Godan's Runeworks"); - pPlayer->SEND_GOSSIP_MENU(2501, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(2038.45, -4744.75, 7, 6, 0, "Nogg's Machine Shop"); - pPlayer->SEND_GOSSIP_MENU(2653, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(1485.21, -4160.91, 7, 6, 0, "Survival of the Fittest"); - pPlayer->SEND_GOSSIP_MENU(2502, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(1994.15, -4655.7, 7, 6, 0, "Lumak's Fishing"); - pPlayer->SEND_GOSSIP_MENU(2503, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(1898.61, -4454.93, 7, 6, 0, "Jandi's Arboretum"); - pPlayer->SEND_GOSSIP_MENU(2504, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(1839.02, -4465.97, 7, 6, 0, "Jo'mah"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); - pPlayer->SEND_GOSSIP_MENU(2513, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_POI(2029.79, -4704, 7, 6, 0, "Red Canyon Mining"); - pPlayer->SEND_GOSSIP_MENU(2515, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); - pPlayer->SEND_GOSSIP_MENU(2516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(1802.66, -4560.66, 7, 6, 0, "Magar's Cloth Goods"); - pPlayer->SEND_GOSSIP_MENU(2518, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_orgrimmar end - *******************************************************/ - -CreatureAI* GetAI_guard_orgrimmar(Creature* pCreature) -{ - return new guardAI_orgrimmar (pCreature); -} - -/******************************************************* - * guard_shattrath start - *******************************************************/ - -bool GossipHello_guard_shattrath(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - - return true; -} - -void SendDefaultMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Tavern - pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); - pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10379, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10382, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Flight master - pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Flight Master"); - pPlayer->SEND_GOSSIP_MENU(10385, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->SEND_GOSSIP_MENU(10386, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEALDOR , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLESCYERS , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10387, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Profession master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom - pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); - pPlayer->SEND_GOSSIP_MENU(10503, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab - pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMALDOR , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMSCYERS , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10697, pCreature->GetGUID()); - break; - } -} - -void SendBankMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); - pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); - pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); - } -} - -void SendInnMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); - pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); - pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); - } -} - -void SendMailboxMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: - pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); - pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); - pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); - pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: - pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); - pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); - break; - } -} - -void SendStableMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable"); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-2170, 5404, 7, 6, 0, "Scyers Stable"); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - } -} - -void SendBattleMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: - pPlayer->SEND_POI(-1774, 5251, 7, 6, 0, "Alliance Battlemasters"); - pPlayer->SEND_GOSSIP_MENU(10389, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - pPlayer->SEND_POI(-1963, 5263, 7, 6, 0, "Horde Battlemasters"); - pPlayer->SEND_GOSSIP_MENU(10390, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - pPlayer->SEND_POI(-1960, 5175, 7, 6, 0, "Arena Battlemasters"); - pPlayer->SEND_GOSSIP_MENU(12510, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); - pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); - pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); - pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); - pPlayer->SEND_GOSSIP_MENU(10395, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); - pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting - pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); - pPlayer->SEND_GOSSIP_MENU(10397, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking - pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); - pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Skinning - pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); - pPlayer->SEND_GOSSIP_MENU(10398, pCreature->GetGUID()); - break; - } -} - -void SendGemMerchantMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10698, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-2193, 5424.5, 7, 6, 0, "Scyers Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10699, pCreature->GetGUID()); - } -} - -bool GossipSelect_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BANK: SendBankMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_STABLEMASTER: SendStableMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_GEMMERCHANT: SendGemMerchantMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_MAILBOX: SendMailboxMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_shattrath end - *******************************************************/ - -CreatureAI* GetAI_guard_shattrath(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_shattrath_aldor - *******************************************************/ - -#define SPELL_BANISHED_SHATTRATH_A 36642 -#define SPELL_BANISHED_SHATTRATH_S 36671 -#define SPELL_BANISH_TELEPORT 36643 -#define SPELL_EXILE 39533 - -struct TRINITY_DLL_DECL guard_shattrath_aldorAI : public guardAI -{ - guard_shattrath_aldorAI(Creature *c) : guardAI(c) {} - - uint32 Exile_Timer; - uint32 Banish_Timer; - uint64 PlayerGUID; - bool CanTeleport; - - void Reset() - { - Banish_Timer = 5000; - Exile_Timer = 8500; - PlayerGUID = 0; - CanTeleport = false; - } - - void EnterCombat(Unit *who) {} - - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - - if (CanTeleport) - { - if (Exile_Timer < diff) - { - if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) - { - temp->CastSpell(temp,SPELL_EXILE,true); - temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); - } - PlayerGUID = 0; - Exile_Timer = 8500; - CanTeleport = false; - }else Exile_Timer -= diff; - } - else if (Banish_Timer < diff) - { - Unit* temp = m_creature->getVictim(); - if (temp && temp->GetTypeId() == TYPEID_PLAYER) - { - DoCast(temp,SPELL_BANISHED_SHATTRATH_A); - Banish_Timer = 9000; - PlayerGUID = temp->GetGUID(); - if (PlayerGUID) - CanTeleport = true; - } - }else Banish_Timer -= diff; - - DoMeleeAttackIfReady(); - } -}; - -bool GossipHello_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Tavern - pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); - pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); - pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); - pPlayer->SEND_GOSSIP_MENU(10525, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Flight master - pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); - pPlayer->SEND_GOSSIP_MENU(10402, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(0, 0, 7, 6, 0, "Aldor Mailbox"); - //unknown - pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable Master"); - pPlayer->SEND_GOSSIP_MENU(10527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Profession master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom - pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); - pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab - pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); - pPlayer->SEND_GOSSIP_MENU(10696, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant - pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10411, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); - pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); - pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); - pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); - pPlayer->SEND_GOSSIP_MENU(10528, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); - pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting - pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); - pPlayer->SEND_GOSSIP_MENU(10529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking - pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); - pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Skinning - pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); - pPlayer->SEND_GOSSIP_MENU(10419, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_shattrath_aldor end - *******************************************************/ - -CreatureAI* GetAI_guard_shattrath_aldor(Creature* pCreature) -{ - return new guard_shattrath_aldorAI (pCreature); -} - -/******************************************************* - * guard_shattrath_scryer - *******************************************************/ - -struct TRINITY_DLL_DECL guard_shattrath_scryerAI : public guardAI -{ - guard_shattrath_scryerAI(Creature *c) : guardAI(c) {} - - uint32 Exile_Timer; - uint32 Banish_Timer; - uint64 PlayerGUID; - bool CanTeleport; - - void Reset() - { - Banish_Timer = 5000; - Exile_Timer = 8500; - PlayerGUID = 0; - CanTeleport = false; - } - - void EnterCombat(Unit *who) {} - - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - - if (CanTeleport) - { - if (Exile_Timer < diff) - { - if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) - { - temp->CastSpell(temp,SPELL_EXILE,true); - temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); - } - PlayerGUID = 0; - Exile_Timer = 8500; - CanTeleport = false; - }else Exile_Timer -= diff; - } - else if (Banish_Timer < diff) - { - Unit* temp = m_creature->getVictim(); - if (temp && temp->GetTypeId() == TYPEID_PLAYER) - { - DoCast(temp,SPELL_BANISHED_SHATTRATH_S); - Banish_Timer = 9000; - PlayerGUID = temp->GetGUID(); - if (PlayerGUID) - CanTeleport = true; - } - }else Banish_Timer -= diff; - - DoMeleeAttackIfReady(); - } -}; - -bool GossipHello_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(10430, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Tavern - pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); - pPlayer->SEND_GOSSIP_MENU(10431, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-1996.6, 5363.7, 7, 6, 0, "Scryer Bank"); - pPlayer->SEND_GOSSIP_MENU(10432, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(-2176.6, 5405.8, 7, 6, 0, "Scryer Inn"); - pPlayer->SEND_GOSSIP_MENU(10433, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Flight master - pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); - pPlayer->SEND_GOSSIP_MENU(10435, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(-2174.3, 5411.4, 7, 6, 0, "Scryer Mailbox"); - pPlayer->SEND_GOSSIP_MENU(10436, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->SEND_POI(-2169.9, 5405.1, 7, 6, 0, "Scryer Stable Master"); - pPlayer->SEND_GOSSIP_MENU(10437, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(10438, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Profession master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(10504, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom - pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); - pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab - pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); - pPlayer->SEND_GOSSIP_MENU(10701, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant - pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Scryer Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10702, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); - pPlayer->SEND_GOSSIP_MENU(10516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); - pPlayer->SEND_GOSSIP_MENU(10517, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); - pPlayer->SEND_GOSSIP_MENU(10518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); - pPlayer->SEND_GOSSIP_MENU(10519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); - pPlayer->SEND_GOSSIP_MENU(10520, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting - pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); - pPlayer->SEND_GOSSIP_MENU(10521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking - pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); - pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Skinning - pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); - pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_shattrath_scryer end - *******************************************************/ - -CreatureAI* GetAI_guard_shattrath_scryer(Creature* pCreature) -{ - return new guard_shattrath_scryerAI (pCreature); -} - -/******************************************************* - * guard_silvermoon start - *******************************************************/ - -bool GossipHello_guard_silvermoon(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction house - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_1 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_2 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(9317, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(9808.4, -7488.16, 7, 6, 0, "Silvermoon Bank"); - pPlayer->SEND_GOSSIP_MENU(9322, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(9474.97, -7345.21, 7, 6, 0, "Tandrine"); - pPlayer->SEND_GOSSIP_MENU(9324, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_1 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_2 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(9602, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(9658.33, -7492.17, 7, 6, 0, "Silvermoon Mailbox"); - pPlayer->SEND_GOSSIP_MENU(9326, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->SEND_POI(9904.95, -7404.31, 7, 6, 0, "Shalenn"); - pPlayer->SEND_GOSSIP_MENU(9327, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Weapon trainer - pPlayer->SEND_POI(9841.17, -7505.13, 7, 6, 0, "Ileda"); - pPlayer->SEND_GOSSIP_MENU(9328, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Wind master - pPlayer->SEND_POI(9378.45, -7163.94, 7, 6, 0, "Silvermoon Wind Master"); - pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(9331, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); - pPlayer->SEND_GOSSIP_MENU(9338, pCreature->GetGUID()); - break; - } -} - -void SendAuctionhouseMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(9644.47, -7140.22, 7, 6, 0, "Western Auction House"); - pPlayer->SEND_GOSSIP_MENU(9318, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(9683.27, -7521.22, 7, 6, 0, "Royal Exchange Auction House"); - pPlayer->SEND_GOSSIP_MENU(9319, pCreature->GetGUID()); - } -} - -void SendInnMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(9677.7, -7368, 7, 6, 0, "Silvermoon City Inn"); - pPlayer->SEND_GOSSIP_MENU(9325, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(9561.1, -7517.5, 7, 6, 0, "Wayfarer's Rest tavern"); - pPlayer->SEND_GOSSIP_MENU(9603, pCreature->GetGUID()); - } -} - -void SendBattleMasterMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(9850.49, -7572.26, 7, 6, 0, "Gurak"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //A - pPlayer->SEND_POI(9850.6, -7559.25, 7, 6, 0, "Bipp Glizzitor"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //EOS - pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //WSG - pPlayer->SEND_POI(9845.45, -7562.58, 7, 6, 0, "Krukk"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(9700.55, -7262.57, 7, 6, 0, "Harene Plainwalker"); - pPlayer->SEND_GOSSIP_MENU(9330, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(9927.48, -7426.14, 7, 6, 0, "Zandine"); - pPlayer->SEND_GOSSIP_MENU(9332, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(9995.07, -7118.17, 7, 6, 0, "Quithas"); - pPlayer->SEND_GOSSIP_MENU(9333, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(9850.22, -7516.93, 7, 6, 0, "Champion Bachi"); - pPlayer->SEND_GOSSIP_MENU(9334, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(9926.79, -7066.66, 7, 6, 0, "Belestra"); - pPlayer->SEND_GOSSIP_MENU(9335, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Rogue - pPlayer->SEND_POI(9739.88, -7374.33, 7, 6, 0, "Zelanis"); - pPlayer->SEND_GOSSIP_MENU(9336, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warlock - pPlayer->SEND_POI(9787.57, -7284.63, 7, 6, 0, "Alamma"); - pPlayer->SEND_GOSSIP_MENU(9337, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(9998.09, -7214.36, 7, 6, 0, "Silvermoon Alchemy Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(9841.43, -7361.53, 7, 6, 0, "Silvermoon Blacksmithing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9340, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(9577.26, -7243.6, 7, 6, 0, "Silvermoon Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(9962.57, -7246.18, 7, 6, 0, "Silvermoon Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9341, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(9820.18, -7329.56, 7, 6, 0, "Silvermoon Engineering Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(9579.8, -7343.71, 7, 6, 0, "Silvermoon First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(9602.73, -7328.3, 7, 6, 0, "Silvermoon Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(10004.4, -7216.86, 7, 6, 0, "Silvermoon Herbalism Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting - pPlayer->SEND_POI(9553.54, -7506.43, 7, 6, 0, "Silvermoon Jewelcrafting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9346, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking - pPlayer->SEND_POI(9503.72, -7430.16, 7, 6, 0, "Silvermoon Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9347, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Mining - pPlayer->SEND_POI(9805.1, -7355.56, 7, 6, 0, "Silvermoon Mining Trainer"); - pPlayer->SEND_GOSSIP_MENU(9348, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Skinning - pPlayer->SEND_POI(9513.37, -7429.4, 7, 6, 0, "Silvermoon Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring - pPlayer->SEND_POI(9750.55, -7095.28, 7, 6, 0, "Silvermoon Tailor"); - pPlayer->SEND_GOSSIP_MENU(9350, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_AUCTIONHOUSE: SendAuctionhouseMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_silvermoon end - *******************************************************/ - -CreatureAI* GetAI_guard_silvermoon(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_stormwind start - *******************************************************/ - -bool GossipHello_guard_stormwind(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STORMWIND_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction House - pPlayer->SEND_POI(-8811.46, 667.46, 7, 6, 0, "Stormwind Auction House"); - pPlayer->SEND_GOSSIP_MENU(3834, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-8916.87, 622.87, 7, 6, 0, "Stormwind Bank"); - pPlayer->SEND_GOSSIP_MENU(764, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Deeprun tram - pPlayer->SEND_POI(-8378.88, 554.23, 7, 6, 0, "The Deeprun Tram"); - pPlayer->SEND_GOSSIP_MENU(3813, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-8869.0, 675.4, 7, 6, 0, "The Gilded Rose"); - pPlayer->SEND_GOSSIP_MENU(3860, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Gryphon Master - pPlayer->SEND_POI(-8837.0, 493.5, 7, 6, 0, "Stormwind Gryphon Master"); - pPlayer->SEND_GOSSIP_MENU(879, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Guild Master - pPlayer->SEND_POI(-8894.0, 611.2, 7, 6, 0, "Stormwind Vistor`s Center"); - pPlayer->SEND_GOSSIP_MENU(882, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox - pPlayer->SEND_POI(-8876.48, 649.18, 7, 6, 0, "Stormwind Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3861, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master - pPlayer->SEND_POI(-8433.0, 554.7, 7, 6, 0, "Jenova Stoneshield"); - pPlayer->SEND_GOSSIP_MENU(5984, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Weapon Trainer - pPlayer->SEND_POI(-8797.0, 612.8, 7, 6, 0, "Woo Ping"); - pPlayer->SEND_GOSSIP_MENU(4516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Officers Lounge - pPlayer->SEND_POI(-8759.92, 399.69, 7, 6, 0, "Champions` Hall"); - pPlayer->SEND_GOSSIP_MENU(7047, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Battlemasters - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7499, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Class trainers - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->SEND_GOSSIP_MENU(898, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Profession trainers - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(918, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Thelman Slatefist"); - pPlayer->SEND_GOSSIP_MENU(7500, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Lady Hoteshem"); - pPlayer->SEND_GOSSIP_MENU(7650, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Elfarran"); - pPlayer->SEND_GOSSIP_MENU(7501, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Mage - pPlayer->SEND_POI(-9012.0, 867.6, 7, 6, 0, "Wizard`s Sanctum"); - pPlayer->SEND_GOSSIP_MENU(899, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Rogue - pPlayer->SEND_POI(-8753.0, 367.8, 7, 6, 0, "Stormwind - Rogue House"); - pPlayer->SEND_GOSSIP_MENU(900, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Warrior - pPlayer->SEND_POI(-8690.11, 324.85, 7, 6, 0, "Command Center"); - pPlayer->SEND_GOSSIP_MENU(901, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Druid - pPlayer->SEND_POI(-8751.0, 1124.5, 7, 6, 0, "The Park"); - pPlayer->SEND_GOSSIP_MENU(902, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-8512.0, 862.4, 7, 6, 0, "Catedral Of Light"); - pPlayer->SEND_GOSSIP_MENU(903, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Paladin - pPlayer->SEND_POI(-8577.0, 881.7, 7, 6, 0, "Catedral Of Light"); - pPlayer->SEND_GOSSIP_MENU(904, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Hunter - pPlayer->SEND_POI(-8413.0, 541.5, 7, 6, 0, "Hunter Lodge"); - pPlayer->SEND_GOSSIP_MENU(905, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Warlock - pPlayer->SEND_POI(-8948.91, 998.35, 7, 6, 0, "The Slaughtered Lamb"); - pPlayer->SEND_GOSSIP_MENU(906, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Shaman - pPlayer->SEND_POI(-9033, 550, 7, 6, 0, "Valley Of Heroes"); - //incorrect id - pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-8988.0, 759.60, 7, 6, 0, "Alchemy Needs"); - pPlayer->SEND_GOSSIP_MENU(919, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-8424.0, 616.9, 7, 6, 0, "Therum Deepforge"); - pPlayer->SEND_GOSSIP_MENU(920, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-8611.0, 364.6, 7, 6, 0, "Pig and Whistle Tavern"); - pPlayer->SEND_GOSSIP_MENU(921, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-8858.0, 803.7, 7, 6, 0, "Lucan Cordell"); - pPlayer->SEND_GOSSIP_MENU(941, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-8347.0, 644.1, 7, 6, 0, "Lilliam Sparkspindle"); - pPlayer->SEND_GOSSIP_MENU(922, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-8513.0, 801.8, 7, 6, 0, "Shaina Fuller"); - pPlayer->SEND_GOSSIP_MENU(923, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-8803.0, 767.5, 7, 6, 0, "Arnold Leland"); - pPlayer->SEND_GOSSIP_MENU(940, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-8967.0, 779.5, 7, 6, 0, "Alchemy Needs"); - pPlayer->SEND_GOSSIP_MENU(924, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(-8726.0, 477.4, 7, 6, 0, "The Protective Hide"); - pPlayer->SEND_GOSSIP_MENU(925, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_POI(-8434.0, 692.8, 7, 6, 0, "Gelman Stonehand"); - pPlayer->SEND_GOSSIP_MENU(927, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(-8716.0, 469.4, 7, 6, 0, "The Protective Hide"); - pPlayer->SEND_GOSSIP_MENU(928, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(-8938.0, 800.7, 7, 6, 0, "Duncan`s Textiles"); - pPlayer->SEND_GOSSIP_MENU(929, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_stormwind end - *******************************************************/ - -CreatureAI* GetAI_guard_stormwind(Creature* pCreature) -{ - return new guardAI_stormwind (pCreature); -} - -/******************************************************* - * guard_teldrassil start - *******************************************************/ - -bool GossipHello_guard_teldrassil(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FERRY , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4316, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4317, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Rut`theran - pPlayer->SEND_GOSSIP_MENU(4318, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_GOSSIP_MENU(4319, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(9821.49, 960.13, 7, 6, 0, "Dolanaar Inn"); - pPlayer->SEND_GOSSIP_MENU(4320, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //stable master - pPlayer->SEND_POI(9808.37, 931.1, 7, 6, 0, "Seriadne"); - pPlayer->SEND_GOSSIP_MENU(5982, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(9741.58, 963.7, 7, 6, 0, "Kal"); - pPlayer->SEND_GOSSIP_MENU(4323, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(9815.12, 926.28, 7, 6, 0, "Dazalar"); - pPlayer->SEND_GOSSIP_MENU(4324, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(9906.16, 986.63, 7, 6, 0, "Laurna Morninglight"); - pPlayer->SEND_GOSSIP_MENU(4325, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Rogue - pPlayer->SEND_POI(9789, 942.86, 7, 6, 0, "Jannok Breezesong"); - pPlayer->SEND_GOSSIP_MENU(4326, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(9821.96, 950.61, 7, 6, 0, "Kyra Windblade"); - pPlayer->SEND_GOSSIP_MENU(4327, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(9767.59, 878.81, 7, 6, 0, "Cyndra Kindwhisper"); - pPlayer->SEND_GOSSIP_MENU(4329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Cooking - pPlayer->SEND_POI(9751.19, 906.13, 7, 6, 0, "Zarrin"); - pPlayer->SEND_GOSSIP_MENU(4330, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting - pPlayer->SEND_POI(10677.59, 1946.56, 7, 6, 0, "Alanna Raveneye"); - pPlayer->SEND_GOSSIP_MENU(4331, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //First Aid - pPlayer->SEND_POI(9903.12, 999, 7, 6, 0, "Byancie"); - pPlayer->SEND_GOSSIP_MENU(4332, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Fishing - pPlayer->SEND_GOSSIP_MENU(4333, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism - pPlayer->SEND_POI(9773.78, 875.88, 7, 6, 0, "Malorne Bladeleaf"); - pPlayer->SEND_GOSSIP_MENU(4334, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking - pPlayer->SEND_POI(10152.59, 1681.46, 7, 6, 0, "Nadyia Maneweaver"); - pPlayer->SEND_GOSSIP_MENU(4335, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Skinning - pPlayer->SEND_POI(10135.59, 1673.18, 7, 6, 0, "Radnaal Maneweaver"); - pPlayer->SEND_GOSSIP_MENU(4336, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4337, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_teldrassil end - *******************************************************/ - -CreatureAI* GetAI_guard_teldrassil(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_tirisfal start - *******************************************************/ - -bool GossipHello_guard_tirisfal(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(4097, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4074, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //bat handler - pPlayer->SEND_GOSSIP_MENU(4075, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Gallows` End Tavern"); - pPlayer->SEND_GOSSIP_MENU(4076, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master - pPlayer->SEND_POI(2267.66, 319.32, 7, 6, 0, "Morganus"); - pPlayer->SEND_GOSSIP_MENU(5978, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(4096, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Mage - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Cain Firesong"); - pPlayer->SEND_GOSSIP_MENU(4077, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Priest - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Dark Cleric Beryl"); - pPlayer->SEND_GOSSIP_MENU(4078, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Rogue - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Marion Call"); - pPlayer->SEND_GOSSIP_MENU(4079, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Warlock - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Rupert Boch"); - pPlayer->SEND_GOSSIP_MENU(4080, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(2256.48, 240.32, 7, 6, 0, "Austil de Mon"); - pPlayer->SEND_GOSSIP_MENU(4081, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(2263.25, 344.23, 7, 6, 0, "Carolai Anise"); - pPlayer->SEND_GOSSIP_MENU(4082, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_GOSSIP_MENU(4083, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_GOSSIP_MENU(4084, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(2250.35, 249.12, 7, 6, 0, "Vance Undergloom"); - pPlayer->SEND_GOSSIP_MENU(4085, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_GOSSIP_MENU(4086, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Nurse Neela"); - pPlayer->SEND_GOSSIP_MENU(4087, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(2292.37, -10.72, 7, 6, 0, "Clyde Kellen"); - pPlayer->SEND_GOSSIP_MENU(4088, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(2268.21, 331.69, 7, 6, 0, "Faruza"); - pPlayer->SEND_GOSSIP_MENU(4089, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Shelene Rhobart"); - pPlayer->SEND_GOSSIP_MENU(4090, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_GOSSIP_MENU(4091, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Rand Rhobart"); - pPlayer->SEND_GOSSIP_MENU(4092, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(2160.45, 659.93, 7, 6, 0, "Bowen Brisboise"); - pPlayer->SEND_GOSSIP_MENU(4093, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_tirisfal end - *******************************************************/ - -CreatureAI* GetAI_guard_tirisfal(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_undercity start - *******************************************************/ - -bool GossipHello_guard_undercity(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(1595.64, 232.45, 7, 6, 0, "Undercity Bank"); - pPlayer->SEND_GOSSIP_MENU(3514, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bat handler - pPlayer->SEND_POI(1565.9, 271.43, 7, 6, 0, "Undercity Bat Handler"); - pPlayer->SEND_GOSSIP_MENU(3515, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(1594.17, 205.57, 7, 6, 0, "Undercity Guild Master"); - pPlayer->SEND_GOSSIP_MENU(3516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(1639.43, 220.99, 7, 6, 0, "Undercity Inn"); - pPlayer->SEND_GOSSIP_MENU(3517, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(1632.68, 219.4, 7, 6, 0, "Undercity Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Auction House - pPlayer->SEND_POI(1647.9, 258.49, 7, 6, 0, "Undercity Auction House"); - pPlayer->SEND_GOSSIP_MENU(3519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Zeppelin - pPlayer->SEND_POI(2059, 274.86, 7, 6, 0, "Undercity Zeppelin"); - pPlayer->SEND_GOSSIP_MENU(3520, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Weapon Master - pPlayer->SEND_POI(1670.31, 324.66, 7, 6, 0, "Archibald"); - pPlayer->SEND_GOSSIP_MENU(4521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Stable master - pPlayer->SEND_POI(1634.18, 226.76, 7, 6, 0, "Anya Maulray"); - pPlayer->SEND_GOSSIP_MENU(5979, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(1329, 333.92, 7, 6, 0, "Grizzle Halfmane"); - pPlayer->SEND_GOSSIP_MENU(7525, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(1283.3, 287.16, 7, 6, 0, "Sir Malory Wheeler"); - pPlayer->SEND_GOSSIP_MENU(7646, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(1265, 351.18, 7, 6, 0, "Kurden Bloodclaw"); - pPlayer->SEND_GOSSIP_MENU(7526, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Mage - pPlayer->SEND_POI(1781, 53, 7, 6, 0, "Undercity Mage Trainers"); - pPlayer->SEND_GOSSIP_MENU(3513, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Priest - pPlayer->SEND_POI(1758.33, 401.5, 7, 6, 0, "Undercity Priest Trainers"); - pPlayer->SEND_GOSSIP_MENU(3521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Rogue - pPlayer->SEND_POI(1418.56, 65, 7, 6, 0, "Undercity Rogue Trainers"); - pPlayer->SEND_GOSSIP_MENU(3524, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Warlock - pPlayer->SEND_POI(1780.92, 53.16, 7, 6, 0, "Undercity Warlock Trainers"); - pPlayer->SEND_GOSSIP_MENU(3526, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(1775.59, 418.19, 7, 6, 0, "Undercity Warrior Trainers"); - pPlayer->SEND_GOSSIP_MENU(3527, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(1419.82, 417.19, 7, 6, 0, "The Apothecarium"); - pPlayer->SEND_GOSSIP_MENU(3528, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(1696, 285, 7, 6, 0, "Undercity Blacksmithing Trainer"); - pPlayer->SEND_GOSSIP_MENU(3529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(1596.34, 274.68, 7, 6, 0, "Undercity Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3530, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(1488.54, 280.19, 7, 6, 0, "Undercity Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(3531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(1408.58, 143.43, 7, 6, 0, "Undercity Engineering Trainer"); - pPlayer->SEND_GOSSIP_MENU(3532, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(1519.65, 167.19, 7, 6, 0, "Undercity First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(3533, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(1679.9, 89, 7, 6, 0, "Undercity Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(3534, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(1558, 349.36, 7, 6, 0, "Undercity Herbalism Trainer"); - pPlayer->SEND_GOSSIP_MENU(3535, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_POI(1498.76, 196.43, 7, 6, 0, "Undercity Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3536, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_POI(1642.88, 335.58, 7, 6, 0, "Undercity Mining Trainer"); - pPlayer->SEND_GOSSIP_MENU(3537, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_POI(1498.6, 196.46, 7, 6, 0, "Undercity Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(3538, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_POI(1689.55, 193, 7, 6, 0, "Undercity Tailoring Trainer"); - pPlayer->SEND_GOSSIP_MENU(3539, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_undercity end - *******************************************************/ - -CreatureAI* GetAI_guard_undercity(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * AddSC - *******************************************************/ - -void AddSC_guards() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="guard_azuremyst"; - newscript->pGossipHello = &GossipHello_guard_azuremyst; - newscript->pGossipSelect = &GossipSelect_guard_azuremyst; - newscript->GetAI = &GetAI_guard_azuremyst; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_bluffwatcher"; - newscript->pGossipHello = &GossipHello_guard_bluffwatcher; - newscript->pGossipSelect = &GossipSelect_guard_bluffwatcher; - newscript->GetAI = &GetAI_guard_bluffwatcher; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_contested"; - newscript->GetAI = &GetAI_guard_contested; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_darnassus"; - newscript->pGossipHello = &GossipHello_guard_darnassus; - newscript->pGossipSelect = &GossipSelect_guard_darnassus; - newscript->GetAI = &GetAI_guard_darnassus; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_dunmorogh"; - newscript->pGossipHello = &GossipHello_guard_dunmorogh; - newscript->pGossipSelect = &GossipSelect_guard_dunmorogh; - newscript->GetAI = &GetAI_guard_dunmorogh; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_durotar"; - newscript->pGossipHello = &GossipHello_guard_durotar; - newscript->pGossipSelect = &GossipSelect_guard_durotar; - newscript->GetAI = &GetAI_guard_durotar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_elwynnforest"; - newscript->pGossipHello = &GossipHello_guard_elwynnforest; - newscript->pGossipSelect = &GossipSelect_guard_elwynnforest; - newscript->GetAI = &GetAI_guard_elwynnforest; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_eversong"; - newscript->pGossipHello = &GossipHello_guard_eversong; - newscript->pGossipSelect = &GossipSelect_guard_eversong; - newscript->GetAI = &GetAI_guard_eversong; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_exodar"; - newscript->pGossipHello = &GossipHello_guard_exodar; - newscript->pGossipSelect = &GossipSelect_guard_exodar; - newscript->GetAI = &GetAI_guard_exodar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_ironforge"; - newscript->pGossipHello = &GossipHello_guard_ironforge; - newscript->pGossipSelect = &GossipSelect_guard_ironforge; - newscript->GetAI = &GetAI_guard_ironforge; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_mulgore"; - newscript->pGossipHello = &GossipHello_guard_mulgore; - newscript->pGossipSelect = &GossipSelect_guard_mulgore; - newscript->GetAI = &GetAI_guard_mulgore; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_orgrimmar"; - newscript->pGossipHello = &GossipHello_guard_orgrimmar; - newscript->pGossipSelect = &GossipSelect_guard_orgrimmar; - newscript->GetAI = &GetAI_guard_orgrimmar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_shattrath"; - newscript->pGossipHello = &GossipHello_guard_shattrath; - newscript->pGossipSelect = &GossipSelect_guard_shattrath; - newscript->GetAI = &GetAI_guard_shattrath; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_shattrath_aldor"; - newscript->GetAI = &GetAI_guard_shattrath_aldor; - newscript->pGossipHello = &GossipHello_guard_shattrath_aldor; - newscript->pGossipSelect = &GossipSelect_guard_shattrath_aldor; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_shattrath_scryer"; - newscript->GetAI = &GetAI_guard_shattrath_scryer; - newscript->pGossipHello = &GossipHello_guard_shattrath_scryer; - newscript->pGossipSelect = &GossipSelect_guard_shattrath_scryer; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_silvermoon"; - newscript->pGossipHello = &GossipHello_guard_silvermoon; - newscript->pGossipSelect = &GossipSelect_guard_silvermoon; - newscript->GetAI = &GetAI_guard_silvermoon; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_stormwind"; - newscript->pGossipHello = &GossipHello_guard_stormwind; - newscript->pGossipSelect = &GossipSelect_guard_stormwind; - newscript->GetAI = &GetAI_guard_stormwind; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_teldrassil"; - newscript->pGossipHello = &GossipHello_guard_teldrassil; - newscript->pGossipSelect = &GossipSelect_guard_teldrassil; - newscript->GetAI = &GetAI_guard_teldrassil; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_tirisfal"; - newscript->pGossipHello = &GossipHello_guard_tirisfal; - newscript->pGossipSelect = &GossipSelect_guard_tirisfal; - newscript->GetAI = &GetAI_guard_tirisfal; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_undercity"; - newscript->pGossipHello = &GossipHello_guard_undercity; - newscript->pGossipSelect = &GossipSelect_guard_undercity; - newscript->GetAI = &GetAI_guard_undercity; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp b/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp index 5cd150bb5a2..271caf17215 100644 --- a/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp +++ b/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp @@ -27,7 +27,7 @@ npc_ruul_snowhoof EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*#### # npc_torek diff --git a/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp b/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp index 8d88a4fcb86..1d8d283a7bb 100644 --- a/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp +++ b/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp @@ -31,7 +31,7 @@ mob_nestlewood_owlkin EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" #include /*###### diff --git a/src/bindings/scripts/scripts/kalimdor/darkshore.cpp b/src/bindings/scripts/scripts/kalimdor/darkshore.cpp index 5c81489df3c..fa10893582f 100644 --- a/src/bindings/scripts/scripts/kalimdor/darkshore.cpp +++ b/src/bindings/scripts/scripts/kalimdor/darkshore.cpp @@ -27,7 +27,7 @@ npc_threshwackonator EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*#### # npc_prospector_remtravel diff --git a/src/bindings/scripts/scripts/kalimdor/feralas.cpp b/src/bindings/scripts/scripts/kalimdor/feralas.cpp index bcbf3689d2e..0816a171644 100644 --- a/src/bindings/scripts/scripts/kalimdor/feralas.cpp +++ b/src/bindings/scripts/scripts/kalimdor/feralas.cpp @@ -22,7 +22,7 @@ SDCategory: Feralas EndScriptData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_gregan_brewspewer diff --git a/src/bindings/scripts/scripts/kalimdor/moonglade.cpp b/src/bindings/scripts/scripts/kalimdor/moonglade.cpp index 38e754ff6bf..4206e370f4c 100644 --- a/src/bindings/scripts/scripts/kalimdor/moonglade.cpp +++ b/src/bindings/scripts/scripts/kalimdor/moonglade.cpp @@ -30,7 +30,7 @@ npc_clintar_dreamwalker EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_bunthen_plainswind diff --git a/src/bindings/scripts/scripts/kalimdor/mulgore.cpp b/src/bindings/scripts/scripts/kalimdor/mulgore.cpp index 9a4cc9a1fbd..544cce69d28 100644 --- a/src/bindings/scripts/scripts/kalimdor/mulgore.cpp +++ b/src/bindings/scripts/scripts/kalimdor/mulgore.cpp @@ -28,7 +28,7 @@ npc_plains_vision EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### # npc_skorn_whitecloud diff --git a/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp b/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp index 13269f1e46f..ddf852063c7 100644 --- a/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp +++ b/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp @@ -27,7 +27,7 @@ npc_kaya_flathoof EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_braug_dimspirit diff --git a/src/bindings/scripts/scripts/kalimdor/tanaris.cpp b/src/bindings/scripts/scripts/kalimdor/tanaris.cpp index fd8258cdf49..8298190bf9b 100644 --- a/src/bindings/scripts/scripts/kalimdor/tanaris.cpp +++ b/src/bindings/scripts/scripts/kalimdor/tanaris.cpp @@ -32,7 +32,7 @@ npc_tooga EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## mob_aquementas diff --git a/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp b/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp index 34a89d8daa2..ccb83e8c029 100644 --- a/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp +++ b/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp @@ -31,7 +31,7 @@ npc_wizzlecrank_shredder EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_beaten_corpse diff --git a/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp b/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp index 7dd273757ed..6736ec18b29 100644 --- a/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp +++ b/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp @@ -29,7 +29,7 @@ npc_plucky EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*##### # npc_kanati diff --git a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp index 7691ffbf004..bf146b11522 100644 --- a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp +++ b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp @@ -26,7 +26,7 @@ npc_injured_rainspeaker_oracle EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_injured_rainspeaker_oracle diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp deleted file mode 100644 index b04c349eb96..00000000000 --- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp +++ /dev/null @@ -1,388 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software licensed under GPL version 2 - * Please see the included DOCS/LICENSE.TXT for more information */ - -/* ScriptData -SDName: Npc_EscortAI -SD%Complete: 100 -SDComment: -SDCategory: Npc -EndScriptData */ - -#include "precompiled.h" -#include "npc_escortAI.h" - -enum -{ - POINT_LAST_POINT = 0xFFFFFF, - POINT_HOME = 0xFFFFFE -}; - -extern std::list PointMovementList; - -void npc_escortAI::AttackStart(Unit* pWho) -{ - if (!pWho) - return; - - if (m_creature->Attack(pWho, true)) - { - if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == POINT_MOTION_TYPE) - m_creature->GetMotionMaster()->MovementExpired(); - - if (IsCombatMovement()) - m_creature->GetMotionMaster()->MoveChase(pWho); - } -} - -void npc_escortAI::MoveInLineOfSight(Unit* pWho) -{ - if (IsBeingEscorted && !m_bIsActiveAttacker) - return; - - ScriptedAI::MoveInLineOfSight(pWho); -} - -void npc_escortAI::JustDied(Unit* pKiller) -{ - if (!IsBeingEscorted || !PlayerGUID || !m_pQuestForEscort) - return; - - if (Player* pPlayer = Unit::GetPlayer(PlayerGUID)) - { - if (Group* pGroup = pPlayer->GetGroup()) - { - for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) - { - if (Player* pMember = pRef->getSource()) - { - if (pPlayer->GetQuestStatus(m_pQuestForEscort->GetQuestId()) == QUEST_STATUS_INCOMPLETE) - pPlayer->FailQuest(m_pQuestForEscort->GetQuestId()); - } - } - } - else - { - if (pPlayer->GetQuestStatus(m_pQuestForEscort->GetQuestId()) == QUEST_STATUS_INCOMPLETE) - pPlayer->FailQuest(m_pQuestForEscort->GetQuestId()); - } - } -} - -void npc_escortAI::JustRespawned() -{ - IsBeingEscorted = false; - IsOnHold = false; - - if (!IsCombatMovement()) - SetCombatMovement(true); - - //add a small delay before going to first waypoint, normal in near all cases - m_uiWPWaitTimer = 2500; - - if (m_creature->getFaction() != m_creature->GetCreatureInfo()->faction_A) - me->RestoreFaction(); - - Reset(); -} - -void npc_escortAI::ReturnToLastPoint() -{ - float x, y, z, o; - m_creature->GetHomePosition(x, y, z, o); - m_creature->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z); -} - -void npc_escortAI::EnterEvadeMode() -{ - m_creature->RemoveAllAuras(); - m_creature->DeleteThreatList(); - m_creature->CombatStop(true); - m_creature->SetLootRecipient(NULL); - - if (IsBeingEscorted) - { - m_bIsReturning = true; - ReturnToLastPoint(); - debug_log("TSCR: EscortAI has left combat and is now returning to last point"); - } - else - m_creature->GetMotionMaster()->MoveTargetedHome(); - - Reset(); -} - -void npc_escortAI::UpdateAI(const uint32 uiDiff) -{ - //Waypoint Updating - if (IsBeingEscorted && !m_creature->getVictim() && m_uiWPWaitTimer && !m_bIsReturning) - { - if (m_uiWPWaitTimer <= uiDiff) - { - //End of the line - if (CurrentWP == WaypointList.end()) - { - if (DespawnAtEnd) - { - debug_log("TSCR: EscortAI reached end of waypoints"); - - if (m_bCanReturnToStart) - { - float fRetX, fRetY, fRetZ; - m_creature->GetRespawnCoord(fRetX, fRetY, fRetZ); - - m_creature->GetMotionMaster()->MovePoint(POINT_HOME, fRetX, fRetY, fRetZ); - - m_uiWPWaitTimer = 0; - - debug_log("TSCR: EscortAI are returning home to spawn location: %u, %f, %f, %f", POINT_HOME, fRetX, fRetY, fRetZ); - return; - } - - if (m_bCanInstantRespawn) - { - m_creature->setDeathState(JUST_DIED); - m_creature->Respawn(); - } - else - m_creature->ForcedDespawn(); - - return; - } - else - { - debug_log("TSCR: EscortAI reached end of waypoints with Despawn off"); - - return; - } - } - - if (!IsOnHold) - { - m_creature->GetMotionMaster()->MovePoint(CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z); - debug_log("TSCR: EscortAI Next WP is: %u, %f, %f, %f", CurrentWP->id, CurrentWP->x, CurrentWP->y, CurrentWP->z); - m_uiWPWaitTimer = 0; - } - } - else - m_uiWPWaitTimer -= uiDiff; - } - - //Check if player or any member of his group is within range - if (IsBeingEscorted && PlayerGUID && !m_creature->getVictim() && !m_bIsReturning) - { - if (m_uiPlayerCheckTimer < uiDiff) - { - bool bIsMaxRangeExceeded = true; - - if (Player* pPlayer = Unit::GetPlayer(PlayerGUID)) - { - if (Group* pGroup = pPlayer->GetGroup()) - { - for(GroupReference* pRef = pGroup->GetFirstMember(); pRef != NULL; pRef = pRef->next()) - { - Player* pMember = pRef->getSource(); - - if (pMember && m_creature->IsWithinDistInMap(pMember, GetMaxPlayerDistance())) - { - bIsMaxRangeExceeded = false; - break; - } - } - } - else - { - if (m_creature->IsWithinDistInMap(pPlayer, GetMaxPlayerDistance())) - bIsMaxRangeExceeded = false; - } - } - - if (DespawnAtFar && bIsMaxRangeExceeded) - { - debug_log("TSCR: EscortAI failed because player/group was to far away or not found"); - - if (m_bCanInstantRespawn) - { - m_creature->setDeathState(JUST_DIED); - m_creature->Respawn(); - } - else - m_creature->ForcedDespawn(); - - return; - } - - m_uiPlayerCheckTimer = 1000; - } - else - m_uiPlayerCheckTimer -= uiDiff; - } - - if (CanMelee && UpdateVictim()) - DoMeleeAttackIfReady(); -} - -void npc_escortAI::MovementInform(uint32 uiMoveType, uint32 uiPointId) -{ - if (uiMoveType != POINT_MOTION_TYPE || !IsBeingEscorted) - return; - - //Combat start position reached, continue waypoint movement - if (uiPointId == POINT_LAST_POINT) - { - debug_log("TSCR: EscortAI has returned to original position before combat"); - - if (m_bIsRunning && m_creature->HasUnitMovementFlag(MOVEMENTFLAG_WALK_MODE)) - m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - else if (!m_bIsRunning && !m_creature->HasUnitMovementFlag(MOVEMENTFLAG_WALK_MODE)) - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - - m_bIsReturning = false; - - if (!m_uiWPWaitTimer) - m_uiWPWaitTimer = 1; - } - else if (uiPointId == POINT_HOME) - { - debug_log("TSCR: EscortAI has returned to original home location and will continue from beginning of waypoint list."); - - CurrentWP = WaypointList.begin(); - m_uiWPWaitTimer = 1; - } - else - { - //Make sure that we are still on the right waypoint - if (CurrentWP->id != uiPointId) - { - debug_log("TSCR ERROR: EscortAI reached waypoint out of order %d, expected %d", uiPointId, CurrentWP->id); - return; - } - - debug_log("TSCR: EscortAI Waypoint %d reached", CurrentWP->id); - - //Call WP function - WaypointReached(CurrentWP->id); - - m_uiWPWaitTimer = CurrentWP->WaitTimeMs + 1; - - ++CurrentWP; - } -} - -/* -void npc_escortAI::OnPossess(bool apply) -{ - // We got possessed in the middle of being escorted, store the point - // where we left off to come back to when possess is removed - if (IsBeingEscorted) - { - if (apply) - m_creature->GetPosition(LastPos.x, LastPos.y, LastPos.z); - else - { - Returning = true; - m_creature->GetMotionMaster()->MovementExpired(); - m_creature->GetMotionMaster()->MovePoint(WP_LAST_POINT, LastPos.x, LastPos.y, LastPos.z); - } - } -} -*/ - -void npc_escortAI::AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs) -{ - Escort_Waypoint t(id, x, y, z, WaitTimeMs); - - WaypointList.push_back(t); -} - -void npc_escortAI::FillPointMovementListForCreature() -{ - UNORDERED_MAP >::iterator pPointsEntries = PointMovementMap.find(m_creature->GetEntry()); - - if (pPointsEntries != PointMovementMap.end()) - { - std::vector::iterator itr; - - for (itr = pPointsEntries->second.begin(); itr != pPointsEntries->second.end(); ++itr) - { - Escort_Waypoint pPoint(itr->m_uiPointId,itr->m_fX,itr->m_fY,itr->m_fZ,itr->m_uiWaitTime); - WaypointList.push_back(pPoint); - } - } -} - -void npc_escortAI::SetRun(bool bRun) -{ - if (bRun) - { - if (!m_bIsRunning) - m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - else - debug_log("TSCR: EscortAI attempt to set run mode, but is already running."); - } - else - { - if (m_bIsRunning) - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - else - debug_log("TSCR: EscortAI attempt to set walk mode, but is already walking."); - } - m_bIsRunning = bRun; -} - -//TODO: get rid of this many variables passed in function. -void npc_escortAI::Start(bool bIsActiveAttacker, bool bRun, uint64 uiPlayerGUID, const Quest* pQuest, bool bInstantRespawn, bool bCanLoopPath) -{ - if (m_creature->getVictim()) - { - debug_log("TSCR ERROR: EscortAI attempt to Start while in combat"); - return; - } - - if (IsBeingEscorted) - { - error_log("TSCR: EscortAI attempt to Start while already escorting"); - return; - } - - if (WaypointList.empty()) - { - error_db_log("TSCR: EscortAI Start with 0 waypoints (possible missing entry in script_waypoint)"); - return; - } - - //set variables - m_bIsActiveAttacker = bIsActiveAttacker; - m_bIsRunning = bRun; - - PlayerGUID = uiPlayerGUID; - m_pQuestForEscort = pQuest; - - m_bCanInstantRespawn = bInstantRespawn; - m_bCanReturnToStart = bCanLoopPath; - - if (m_bCanReturnToStart && m_bCanInstantRespawn) - debug_log("TSCR: EscortAI is set to return home after waypoint end and instant respawn at waypoint end. Creature will never despawn."); - - if (m_creature->GetMotionMaster()->GetCurrentMovementGeneratorType() == WAYPOINT_MOTION_TYPE) - { - m_creature->GetMotionMaster()->MovementExpired(); - m_creature->GetMotionMaster()->MoveIdle(); - debug_log("TSCR: EscortAI start with WAYPOINT_MOTION_TYPE, changed to MoveIdle."); - } - - //disable npcflags - m_creature->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE); - - debug_log("TSCR: EscortAI started with %d waypoints. ActiveAttacker = %d, Run = %d, PlayerGUID = %d", WaypointList.size(), m_bIsActiveAttacker, m_bIsRunning, PlayerGUID); - - CurrentWP = WaypointList.begin(); - - //Set initial speed - if (m_bIsRunning) - m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - else - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - - IsBeingEscorted = true; -} diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.h b/src/bindings/scripts/scripts/npc/npc_escortAI.h deleted file mode 100644 index 90a99152b68..00000000000 --- a/src/bindings/scripts/scripts/npc/npc_escortAI.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software licensed under GPL version 2 - * Please see the included DOCS/LICENSE.TXT for more information */ - -#ifndef SC_ESCORTAI_H -#define SC_ESCORTAI_H - -#define DEFAULT_MAX_PLAYER_DISTANCE 50 - -extern UNORDERED_MAP > PointMovementMap; - -struct Escort_Waypoint -{ - Escort_Waypoint(uint32 _id, float _x, float _y, float _z, uint32 _w) - { - id = _id; - x = _x; - y = _y; - z = _z; - WaitTimeMs = _w; - } - - uint32 id; - float x; - float y; - float z; - uint32 WaitTimeMs; -}; - -struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI -{ - public: - explicit npc_escortAI(Creature* pCreature) : ScriptedAI(pCreature), - IsBeingEscorted(false), IsOnHold(false), PlayerGUID(0), MaxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE), CanMelee(true), m_uiPlayerCheckTimer(1000), m_uiWPWaitTimer(2500), m_bIsReturning(false), m_bIsActiveAttacker(true), m_bIsRunning(false), DespawnAtEnd(true), DespawnAtFar(true), m_pQuestForEscort(NULL), m_bCanInstantRespawn(false), m_bCanReturnToStart(false) {} - ~npc_escortAI() {} - - // Pure Virtual Functions - virtual void WaypointReached(uint32) = 0; - - // CreatureAI functions - void AttackStart(Unit* who); - - void MoveInLineOfSight(Unit* who); - - void JustDied(Unit*); - - void JustRespawned(); - - void ReturnToLastPoint(); - - void EnterEvadeMode(); - - void UpdateAI(const uint32); - - void MovementInform(uint32, uint32); - - // EscortAI functions - void AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs = 0); - - void FillPointMovementListForCreature(); - - void Start(bool bIsActiveAttacker = true, bool bRun = false, uint64 uiPlayerGUID = 0, const Quest* pQuest = NULL, bool bInstantRespawn = false, bool bCanLoopPath = false); - - void SetRun(bool bRun = true); - - void SetMaxPlayerDistance(float newMax) { MaxPlayerDistance = newMax; } - float GetMaxPlayerDistance() { return MaxPlayerDistance; } - - bool IsEscorted() {return IsBeingEscorted;} - - void SetCanMelee(bool usemelee) { CanMelee = usemelee; } - void SetDespawnAtEnd(bool despawn) { DespawnAtEnd = despawn; } - void SetDespawnAtFar(bool despawn) { DespawnAtFar = despawn; } - bool GetAttack() { return m_bIsActiveAttacker; }//used in EnterEvadeMode override - bool GetIsBeingEscorted() { return IsBeingEscorted; }//used in EnterEvadeMode override - void SetReturning(bool returning) { m_bIsReturning = returning; }//used in EnterEvadeMode override - void SetCanAttack(bool attack) { m_bIsActiveAttacker = attack; } - uint64 GetEventStarterGUID() { return PlayerGUID; } - - // EscortAI variables - protected: - uint64 PlayerGUID; - bool IsBeingEscorted; - bool IsOnHold; - - private: - uint32 m_uiWPWaitTimer; - uint32 m_uiPlayerCheckTimer; - float MaxPlayerDistance; - - const Quest* m_pQuestForEscort; //generally passed in Start() when regular escort script. - - std::list WaypointList; - std::list::iterator CurrentWP; - - bool m_bIsActiveAttacker; //possible obsolete, and should be determined with db only (civilian) - bool m_bIsReturning; //in use when creature leave combat, and are returning to combat start position - bool m_bIsRunning; //all creatures are walking by default (has flag MOVEMENTFLAG_WALK) - bool m_bCanInstantRespawn; //if creature should respawn instantly after escort over (if not, database respawntime are used) - bool m_bCanReturnToStart; //if creature can walk same path (loop) without despawn. Not for regular escort quests. - bool CanMelee; - bool DespawnAtEnd; - bool DespawnAtFar; -}; -#endif - diff --git a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp index 3688372eff6..cd5a94319a7 100644 --- a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp +++ b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp @@ -28,7 +28,7 @@ npc_wounded_blood_elf EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_aeranas diff --git a/src/bindings/scripts/scripts/outland/netherstorm.cpp b/src/bindings/scripts/scripts/outland/netherstorm.cpp index 17f545ee5f4..e251951f4aa 100644 --- a/src/bindings/scripts/scripts/outland/netherstorm.cpp +++ b/src/bindings/scripts/scripts/outland/netherstorm.cpp @@ -29,7 +29,7 @@ npc_bessy EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_manaforge_control_console diff --git a/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp b/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp index 4772cb04c8d..779869cc781 100644 --- a/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp +++ b/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp @@ -40,7 +40,7 @@ npc_enraged_spirit EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*##### # mob_mature_netherwing_drake diff --git a/src/bindings/scripts/scripts/outland/shattrath_city.cpp b/src/bindings/scripts/scripts/outland/shattrath_city.cpp index 389671c5756..054615bc3b3 100644 --- a/src/bindings/scripts/scripts/outland/shattrath_city.cpp +++ b/src/bindings/scripts/scripts/outland/shattrath_city.cpp @@ -33,7 +33,7 @@ npc_khadgar EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npc_raliq_the_drunk diff --git a/src/bindings/scripts/scripts/outland/terokkar_forest.cpp b/src/bindings/scripts/scripts/outland/terokkar_forest.cpp index 6b5d828d83d..8ac9aef4a04 100644 --- a/src/bindings/scripts/scripts/outland/terokkar_forest.cpp +++ b/src/bindings/scripts/scripts/outland/terokkar_forest.cpp @@ -32,7 +32,7 @@ npc_slim EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## mob_unkor_the_ruthless diff --git a/src/bindings/scripts/scripts/outland/zangarmarsh.cpp b/src/bindings/scripts/scripts/outland/zangarmarsh.cpp index b5b7e9a7991..dfa472237b6 100644 --- a/src/bindings/scripts/scripts/outland/zangarmarsh.cpp +++ b/src/bindings/scripts/scripts/outland/zangarmarsh.cpp @@ -30,7 +30,7 @@ npc_kayra_longmane EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## npcs_ashyen_and_keleth diff --git a/src/bindings/scripts/scripts/world/npcs_special.cpp b/src/bindings/scripts/scripts/world/npcs_special.cpp index 64f89628528..b35b9292698 100644 --- a/src/bindings/scripts/scripts/world/npcs_special.cpp +++ b/src/bindings/scripts/scripts/world/npcs_special.cpp @@ -38,7 +38,7 @@ npc_snake_trap_serpents 80% AI for snakes that summoned by Snake Trap EndContentData */ #include "precompiled.h" -#include "../npc/npc_escortAI.h" +#include "escortAI.h" #include "ObjectMgr.h" /*######## diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp index 7266c0d5a2a..39842444e5c 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp @@ -22,7 +22,7 @@ SDCategory: Auchindoun, Shadow Labyrinth EndScriptData */ #include "precompiled.h" -#include "../../../npc/npc_escortAI.h" +#include "escortAI.h" #include "def_shadow_labyrinth.h" enum diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp index 17390068f65..04f48fcd2de 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp @@ -37,7 +37,7 @@ npc_rocknot EndContentData */ #include "precompiled.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" #include "def_blackrock_depths.h" /*###### diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h index 5663516460d..3b0ff32a429 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjalAI.h @@ -6,7 +6,7 @@ #define SC_HYJALAI_H #include "def_hyjal.h" -#include "../../../npc/npc_escortAI.h" +#include "escortAI.h" // Trash Mobs summoned in waves #define NECROMANCER 17899//done diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.h b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.h index 30b84c2e180..9eeff8a03f4 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.h +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/hyjal/hyjal_trash.h @@ -3,7 +3,7 @@ #define SC_HYJAL_TRASH_AI_H #include "def_hyjal.h" -#include "../../../npc/npc_escortAI.h" +#include "escortAI.h" #define MINRAIDDAMAGE 700000//minimal damage before trash can drop loot and reputation, resets if faction leader dies diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp index d8fe0694367..266f61354c0 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/boss_leutenant_drake.cpp @@ -23,7 +23,7 @@ EndScriptData */ #include "precompiled.h" #include "def_old_hillsbrad.h" -#include "../../../npc/npc_escortAI.h" +#include "escortAI.h" /*###### ## go_barrel_old_hillsbrad diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp index 71309b41825..7bbc0e026a2 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp @@ -28,7 +28,7 @@ npc_taretha EndContentData */ #include "precompiled.h" -#include "../../../npc/npc_escortAI.h" +#include "escortAI.h" #include "def_old_hillsbrad.h" #define QUEST_ENTRY_HILLSBRAD 10282 diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp index 5650a68b500..1e62083f1f9 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_fathomlord_karathress.cpp @@ -23,7 +23,7 @@ EndScriptData */ #include "precompiled.h" #include "def_serpent_shrine.h" -#include "../../../npc/npc_escortAI.h" +#include "escortAI.h" #define SAY_AGGRO -1548021 #define SAY_GAIN_BLESSING -1548022 diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp index f1bc6ce0cf1..c1a2280653c 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lady_vashj.cpp @@ -23,7 +23,7 @@ EndScriptData */ #include "precompiled.h" #include "def_serpent_shrine.h" -#include "../../../creature/simple_ai.h" +#include "simple_ai.h" #include "Spell.h" #define SAY_INTRO -1548042 diff --git a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp index 073af7212ec..38abc8f1507 100644 --- a/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp +++ b/src/bindings/scripts/scripts/zone/coilfang_resevoir/serpent_shrine/boss_lurker_below.cpp @@ -23,7 +23,7 @@ EndScriptData */ #include "precompiled.h" #include "def_serpent_shrine.h" -#include "../../../creature/simple_ai.h" +#include "simple_ai.h" #include "Spell.h" #define SPELL_SPOUT 37433 diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp index c4eed5c0d24..26659932ca5 100644 --- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp +++ b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp @@ -19,7 +19,7 @@ #include "precompiled.h" #include "Vehicle.h" #include "ObjectMgr.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" #define GCD_CAST 1 diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp index 2e3e943d3e6..d672851315e 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/boss_shade_of_aran.cpp @@ -22,7 +22,7 @@ SDCategory: Karazhan EndScriptData */ #include "precompiled.h" -#include "../../creature/simple_ai.h" +#include "simple_ai.h" #include "def_karazhan.h" #include "GameObject.h" diff --git a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp index 9f6983251c5..03a05b7218a 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp @@ -29,7 +29,7 @@ EndContentData */ #include "precompiled.h" #include "def_karazhan.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" /*###### # npc_barnesAI diff --git a/src/bindings/scripts/scripts/zone/molten_core/molten_core.cpp b/src/bindings/scripts/scripts/zone/molten_core/molten_core.cpp index 945631665ec..7af3bcce6b6 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/molten_core.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/molten_core.cpp @@ -26,7 +26,7 @@ mob_ancient_core_hound EndContentData */ #include "precompiled.h" -#include "../../creature/simple_ai.h" +#include "simple_ai.h" #define SPELL_CONE_OF_FIRE 19630 #define SPELL_BITE 19771 diff --git a/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp b/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp index 0c5f01ac52c..a6bd845b13e 100644 --- a/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp +++ b/src/bindings/scripts/scripts/zone/razorfen_kraul/razorfen_kraul.cpp @@ -26,7 +26,7 @@ npc_willix EndContentData */ #include "precompiled.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" #include "def_razorfen_kraul.h" #define SAY_READY -1047000 diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp index b56a60c0a1e..29661b719cf 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp @@ -22,7 +22,7 @@ SDCategory: Scarlet Monastery EndScriptData */ #include "precompiled.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" #define SAY_AGGRO -1189000 #define SAY_WHIRLWIND -1189001 diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp index 12c4bf2d3eb..8abb5bb90e1 100644 --- a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp @@ -26,7 +26,7 @@ npc_shadowfang_prisoner EndContentData */ #include "precompiled.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" #include "def_shadowfang_keep.h" /*###### diff --git a/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp b/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp index a94e253c255..426b7fa2217 100644 --- a/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp +++ b/src/bindings/scripts/scripts/zone/ungoro_crater/ungoro_crater.cpp @@ -26,7 +26,7 @@ npc_a-me EndContentData */ #include "precompiled.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" #define SAY_READY -1000200 #define SAY_AGGRO1 -1000201 diff --git a/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp b/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp index 864e0eb2a9b..2e130fca34b 100644 --- a/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp +++ b/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp @@ -25,7 +25,7 @@ EndScriptData */ EndContentData */ #include "precompiled.h" -#include "../../npc/npc_escortAI.h" +#include "escortAI.h" #include "def_wailing_caverns.h" /*###### -- cgit v1.2.3 From 5b42daa7bfaa78c95558b29b7acbfd571eb46eb9 Mon Sep 17 00:00:00 2001 From: Kudlaty Date: Sun, 16 Aug 2009 01:45:49 +0200 Subject: Merge [SD2] r1291 Move one misplaced script in yesterday commits. r1292 Make own folder for tool, not needed for general work of SD2. - skip r1293 Add script loader to simplify maintenance of scripts. The scripts must now be added to system/ScriptLoader.cpp instead of old way directly in ScriptMgr. --HG-- branch : trunk --- src/bindings/scripts/CMakeLists.txt | 4 +- src/bindings/scripts/ScriptMgr.cpp | 1283 +------- src/bindings/scripts/VC80/80ScriptDev2.vcproj | 20 +- src/bindings/scripts/VC90/90ScriptDev2.vcproj | 20 +- src/bindings/scripts/base/guards.cpp | 4110 ------------------------- src/bindings/scripts/scripts/world/guards.cpp | 4110 +++++++++++++++++++++++++ src/bindings/scripts/system/ScriptLoader.cpp | 1030 +++++++ src/bindings/scripts/system/ScriptLoader.h | 10 + 8 files changed, 5187 insertions(+), 5400 deletions(-) delete mode 100644 src/bindings/scripts/base/guards.cpp create mode 100644 src/bindings/scripts/scripts/world/guards.cpp create mode 100644 src/bindings/scripts/system/ScriptLoader.cpp create mode 100644 src/bindings/scripts/system/ScriptLoader.h (limited to 'src') diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index d8f5e9180b3..b34978b5ce9 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -8,7 +8,6 @@ SET(trinityscript_LIB_SRCS base/escortAI.h base/guard_ai.cpp base/guard_ai.h - base/guards.cpp base/simple_ai.cpp base/simple_ai.h include/precompiled.cpp @@ -502,12 +501,15 @@ SET(trinityscript_LIB_SRCS scripts/world/boss_taerar.cpp scripts/world/boss_ysondre.cpp scripts/world/go_scripts.cpp + scripts/world/guards.cpp scripts/world/item_scripts.cpp scripts/world/mob_generic_creature.cpp scripts/world/npc_innkeeper.cpp scripts/world/npc_professions.cpp scripts/world/npcs_special.cpp scripts/world/npc_taxi.cpp + system/ScriptLoader.cpp + system/ScriptLoader.h system.cpp ) diff --git a/src/bindings/scripts/ScriptMgr.cpp b/src/bindings/scripts/ScriptMgr.cpp index 50a502e98ed..84215e01a0c 100644 --- a/src/bindings/scripts/ScriptMgr.cpp +++ b/src/bindings/scripts/ScriptMgr.cpp @@ -8,6 +8,7 @@ #include "DBCStores.h" #include "ObjectMgr.h" #include "ProgressBar.h" +#include "../system/ScriptLoader.h" #define _FULLVERSION "TrinityScript" @@ -42,647 +43,6 @@ void FillSpellSummary(); void LoadOverridenSQLData(); void LoadOverridenDBCData(); -// -- Scripts to be added -- - -// -- Areatrigger -- -extern void AddSC_areatrigger_scripts(); - -// -- Boss -- -extern void AddSC_boss_emeriss(); -extern void AddSC_boss_taerar(); -extern void AddSC_boss_ysondre(); - -// -- Creature -- -extern void AddSC_generic_creature(); - -// -- Custom -- - -// -- Examples -- -extern void AddSC_example_creature(); -extern void AddSC_example_escort(); -extern void AddSC_example_gossip_codebox(); -extern void AddSC_example_misc(); - -// -- GO -- -extern void AddSC_go_scripts(); - -// -- Guard -- -extern void AddSC_guards(); - -// -- Honor -- - -// -- Item -- -extern void AddSC_item_scripts(); - -// -- NPC -- -extern void AddSC_npc_professions(); -extern void AddSC_npcs_special(); -extern void AddSC_npc_taxi(); - -// -- Servers -- - -//-------------------- -//------ ZONE -------- - -//Alterac Mountains -//extern void AddSC_alterac_mountains(); - -//Arathi Highlands -extern void AddSC_arathi_highlands(); - -//Ashenvale Forest -extern void AddSC_ashenvale(); - -//Aunchindoun -//--Auchenai Crypts -extern void AddSC_boss_exarch_maladaar(); -extern void AddSC_boss_shirrak_the_dead_watcher(); - -//--Mana Tombs -extern void AddSC_boss_nexusprince_shaffar(); -extern void AddSC_boss_pandemonius(); - -//--Sekketh Halls -extern void AddSC_boss_darkweaver_syth(); -extern void AddSC_boss_talon_king_ikiss(); -extern void AddSC_instance_sethekk_halls(); - -//--Shadow Labyrinth -extern void AddSC_boss_ambassador_hellmaw(); -extern void AddSC_boss_blackheart_the_inciter(); -extern void AddSC_boss_grandmaster_vorpil(); -extern void AddSC_boss_murmur(); -extern void AddSC_instance_shadow_labyrinth(); - -//Azjol-Nerub -//--Ahn'kahet -extern void AddSC_instance_ahnkahet(); -extern void AddSC_boss_elder_nadox(); - -//Azshara -extern void AddSC_boss_azuregos(); -extern void AddSC_azshara(); - -//Azuremyst Isle -extern void AddSC_azuremyst_isle(); - -//Badlands -//Barrens -extern void AddSC_the_barrens(); - -//Black Temple -extern void AddSC_black_temple(); -extern void AddSC_boss_illidan(); -extern void AddSC_boss_shade_of_akama(); -extern void AddSC_boss_supremus(); -extern void AddSC_boss_gurtogg_bloodboil(); -extern void AddSC_boss_mother_shahraz(); -extern void AddSC_boss_reliquary_of_souls(); -extern void AddSC_boss_teron_gorefiend(); -extern void AddSC_boss_najentus(); -extern void AddSC_boss_illidari_council(); -extern void AddSC_instance_black_temple(); - -//Blackfathom Depths -extern void AddSC_instance_blackfathom_deeps(); - -//Blackrock Depths -extern void AddSC_blackrock_depths(); -extern void AddSC_boss_ambassador_flamelash(); -extern void AddSC_boss_anubshiah(); -extern void AddSC_boss_draganthaurissan(); -extern void AddSC_boss_general_angerforge(); -extern void AddSC_boss_gorosh_the_dervish(); -extern void AddSC_boss_grizzle(); -extern void AddSC_boss_high_interrogator_gerstahn(); -extern void AddSC_boss_magmus(); -extern void AddSC_boss_moira_bronzebeard(); -extern void AddSC_boss_tomb_of_seven(); -extern void AddSC_instance_blackrock_depths(); - -//Blackrock Spire -extern void AddSC_boss_drakkisath(); -extern void AddSC_boss_halycon(); -extern void AddSC_boss_highlordomokk(); -extern void AddSC_boss_mothersmolderweb(); -extern void AddSC_boss_overlordwyrmthalak(); -extern void AddSC_boss_shadowvosh(); -extern void AddSC_boss_thebeast(); -extern void AddSC_boss_warmastervoone(); -extern void AddSC_boss_quatermasterzigris(); -extern void AddSC_boss_pyroguard_emberseer(); -extern void AddSC_boss_gyth(); -extern void AddSC_boss_rend_blackhand(); - -//Blackwing lair -extern void AddSC_boss_razorgore(); -extern void AddSC_boss_vael(); -extern void AddSC_boss_broodlord(); -extern void AddSC_boss_firemaw(); -extern void AddSC_boss_ebonroc(); -extern void AddSC_boss_flamegor(); -extern void AddSC_boss_chromaggus(); -extern void AddSC_boss_nefarian(); -extern void AddSC_boss_victor_nefarius(); - -//Blade's Edge Mountains -extern void AddSC_blades_edge_mountains(); - -//Blasted lands -extern void AddSC_boss_kruul(); -extern void AddSC_blasted_lands(); - -//Bloodmyst Isle -extern void AddSC_bloodmyst_isle(); - -//Borean Tundra -extern void AddSC_borean_tundra(); - -//Burning steppes -extern void AddSC_burning_steppes(); - -//Caverns of Time -//--Battle for Mt. Hyjal -extern void AddSC_hyjal(); -extern void AddSC_boss_archimonde(); -extern void AddSC_instance_mount_hyjal(); -extern void AddSC_hyjal_trash(); -extern void AddSC_boss_rage_winterchill(); -extern void AddSC_boss_anetheron(); -extern void AddSC_boss_kazrogal(); -extern void AddSC_boss_azgalor(); - -//--Old Hillsbrad -extern void AddSC_boss_captain_skarloc(); -extern void AddSC_boss_epoch_hunter(); -extern void AddSC_boss_lieutenant_drake(); -extern void AddSC_instance_old_hillsbrad(); -extern void AddSC_old_hillsbrad(); - -//--The Dark Portal -extern void AddSC_boss_aeonus(); -extern void AddSC_boss_chrono_lord_deja(); -extern void AddSC_boss_temporus(); -extern void AddSC_dark_portal(); -extern void AddSC_instance_dark_portal(); - -//Coilfang Resevoir -//--Serpent Shrine Cavern -extern void AddSC_boss_fathomlord_karathress(); -extern void AddSC_boss_hydross_the_unstable(); -extern void AddSC_boss_lady_vashj(); -extern void AddSC_boss_leotheras_the_blind(); -extern void AddSC_boss_morogrim_tidewalker(); -extern void AddSC_instance_serpentshrine_cavern(); -extern void AddSC_boss_the_lurker_below(); - -//--Slave Pens - -//--Steam Vault -extern void AddSC_boss_hydromancer_thespia(); -extern void AddSC_boss_mekgineer_steamrigger(); -extern void AddSC_boss_warlord_kalithresh(); -extern void AddSC_instance_steam_vault(); - -//--Underbog -extern void AddSC_boss_hungarfen(); -extern void AddSC_boss_the_black_stalker(); - -//Darkshore -extern void AddSC_darkshore(); - -//Darnassus -//Deadmines -extern void AddSC_instance_deadmines(); - -//Deadwind pass -//Desolace -extern void AddSC_desolace(); - -//Dire Maul - -extern void AddSC_dragonblight(); - -//Dun Morogh -extern void AddSC_dun_morogh(); - -//Durotar -//Duskwood -//Dustwallow marsh -extern void AddSC_dustwallow_marsh(); - -//Eversong Woods -extern void AddSC_eversong_woods(); - -//Exodar -//Eastern Plaguelands -extern void AddSC_eastern_plaguelands(); -extern void AddSC_the_scarlet_enclave(); - -//Elwynn Forest -extern void AddSC_elwynn_forest(); - -//Felwood -extern void AddSC_felwood(); - -//Feralas -extern void AddSC_feralas(); - -//Ghostlands -extern void AddSC_ghostlands(); - -//Gnomeregan - -//Grizzly Hills -extern void AddSC_grizzly_hills(); - -//Gruul's Lair -extern void AddSC_boss_gruul(); -extern void AddSC_boss_high_king_maulgar(); -extern void AddSC_instance_gruuls_lair(); - -//Hellfire Citadel -//--Blood Furnace -extern void AddSC_boss_broggok(); -extern void AddSC_boss_kelidan_the_breaker(); -extern void AddSC_boss_the_maker(); -extern void AddSC_instance_blood_furnace(); - -//--Magtheridon's Lair -extern void AddSC_boss_magtheridon(); -extern void AddSC_instance_magtheridons_lair(); - -//--Shattered Halls -extern void AddSC_boss_grand_warlock_nethekurse(); -extern void AddSC_boss_warbringer_omrogg(); -extern void AddSC_boss_warchief_kargath_bladefist(); -extern void AddSC_instance_shattered_halls(); - -//--Ramparts -extern void AddSC_boss_watchkeeper_gargolmar(); -extern void AddSC_boss_omor_the_unscarred(); -extern void AddSC_boss_vazruden_the_herald(); -extern void AddSC_instance_ramparts(); - -//Hellfire Peninsula -extern void AddSC_boss_doomlordkazzak(); -extern void AddSC_hellfire_peninsula(); - -//Hillsbrad Foothills -//Hinterlands -extern void AddSC_hinterlands(); - -//Icecrown -extern void AddSC_icecrown(); - -//Ironforge -extern void AddSC_ironforge(); - -//Isle of Quel'Danas -extern void AddSC_isle_of_queldanas(); - -//Karazhan -extern void AddSC_boss_attumen(); -extern void AddSC_boss_curator(); -extern void AddSC_boss_maiden_of_virtue(); -extern void AddSC_boss_shade_of_aran(); -extern void AddSC_boss_malchezaar(); -extern void AddSC_boss_terestian_illhoof(); -extern void AddSC_boss_moroes(); -extern void AddSC_bosses_opera(); -extern void AddSC_boss_netherspite(); -extern void AddSC_instance_karazhan(); -extern void AddSC_karazhan(); -extern void AddSC_boss_nightbane(); - -//Loch Modan -extern void AddSC_loch_modan(); - -//Lower Blackrock Spire - -// Magister's Terrace -extern void AddSC_boss_felblood_kaelthas(); -extern void AddSC_boss_selin_fireheart(); -extern void AddSC_boss_vexallus(); -extern void AddSC_boss_priestess_delrissa(); -extern void AddSC_instance_magisters_terrace(); -extern void AddSC_magisters_terrace(); - -//Maraudon -extern void AddSC_boss_celebras_the_cursed(); -extern void AddSC_boss_landslide(); -extern void AddSC_boss_noxxion(); -extern void AddSC_boss_ptheradras(); - -//Molten core -extern void AddSC_boss_lucifron(); -extern void AddSC_boss_magmadar(); -extern void AddSC_boss_gehennas(); -extern void AddSC_boss_garr(); -extern void AddSC_boss_baron_geddon(); -extern void AddSC_boss_shazzrah(); -extern void AddSC_boss_golemagg(); -extern void AddSC_boss_sulfuron(); -extern void AddSC_boss_majordomo(); -extern void AddSC_boss_ragnaros(); -extern void AddSC_instance_molten_core(); -extern void AddSC_molten_core(); - -//Moonglade -extern void AddSC_moonglade(); - -//Mulgore -extern void AddSC_mulgore(); - -//Nagrand -extern void AddSC_nagrand(); - -//Naxxramas -extern void AddSC_boss_anubrekhan(); -extern void AddSC_boss_maexxna(); -extern void AddSC_boss_patchwerk(); -extern void AddSC_boss_grobbulus(); -extern void AddSC_boss_razuvious(); -extern void AddSC_boss_kelthuzad(); -extern void AddSC_boss_loatheb(); -extern void AddSC_boss_noth(); -extern void AddSC_boss_gluth(); -extern void AddSC_boss_sapphiron(); -extern void AddSC_boss_four_horsemen(); -extern void AddSC_boss_faerlina(); -extern void AddSC_boss_heigan(); -extern void AddSC_boss_gothik(); -extern void AddSC_boss_thaddius(); -extern void AddSC_instance_naxxramas(); - -//Netherstorm -extern void AddSC_netherstorm(); - -//The Nexus -extern void AddSC_boss_magus_telestra(); -extern void AddSC_boss_anomalus(); -extern void AddSC_boss_ormorok(); -extern void AddSC_boss_keristrasza(); -extern void AddSC_instance_nexus(); - -//Obsidian Sanctum -extern void AddSC_instance_obsidian_sanctum(); - -//Onyxia's Lair -extern void AddSC_boss_onyxia(); - -//Orgrimmar -extern void AddSC_orgrimmar(); - -//Ragefire Chasm -//Razorfen Downs -extern void AddSC_boss_amnennar_the_coldbringer(); -extern void AddSC_razorfen_downs(); - -//Razorfen Kraul -extern void AddSC_razorfen_kraul(); - -//Redridge Mountains -//Ruins of Ahn'Qiraj -//Scarlet Monastery -extern void AddSC_boss_arcanist_doan(); -extern void AddSC_boss_azshir_the_sleepless(); -extern void AddSC_boss_bloodmage_thalnos(); -extern void AddSC_boss_headless_horseman(); -extern void AddSC_boss_herod(); -extern void AddSC_boss_high_inquisitor_fairbanks(); -extern void AddSC_boss_houndmaster_loksey(); -extern void AddSC_boss_interrogator_vishas(); -extern void AddSC_boss_scorn(); -extern void AddSC_instance_scarlet_monastery(); -extern void AddSC_boss_mograine_and_whitemane(); - -//Scholomance -extern void AddSC_boss_darkmaster_gandling(); -extern void AddSC_boss_death_knight_darkreaver(); -extern void AddSC_boss_theolenkrastinov(); -extern void AddSC_boss_illuciabarov(); -extern void AddSC_boss_instructormalicia(); -extern void AddSC_boss_jandicebarov(); -extern void AddSC_boss_kormok(); -extern void AddSC_boss_lordalexeibarov(); -extern void AddSC_boss_lorekeeperpolkelt(); -extern void AddSC_boss_rasfrost(); -extern void AddSC_boss_theravenian(); -extern void AddSC_boss_vectus(); -extern void AddSC_instance_scholomance(); - -//Searing gorge -extern void AddSC_searing_gorge(); - -//Shadowfang keep -extern void AddSC_shadowfang_keep(); -extern void AddSC_instance_shadowfang_keep(); - -//Shadowmoon Valley -extern void AddSC_boss_doomwalker(); -extern void AddSC_shadowmoon_valley(); - -//Shattrath -extern void AddSC_shattrath_city(); - -//Sholazar Basin -extern void AddSC_sholazar_basin(); - -//Silithus -extern void AddSC_silithus(); - -//Silvermoon -extern void AddSC_silvermoon_city(); - -//Silverpine forest -extern void AddSC_silverpine_forest(); - -//Stockade -//Stonetalon mountains -extern void AddSC_stonetalon_mountains(); - -//Stormwind City -extern void AddSC_stormwind_city(); - -//Stranglethorn Vale -extern void AddSC_stranglethorn_vale(); - -//Stratholme -extern void AddSC_boss_magistrate_barthilas(); -extern void AddSC_boss_maleki_the_pallid(); -extern void AddSC_boss_nerubenkan(); -extern void AddSC_boss_cannon_master_willey(); -extern void AddSC_boss_baroness_anastari(); -extern void AddSC_boss_ramstein_the_gorger(); -extern void AddSC_boss_timmy_the_cruel(); -extern void AddSC_boss_postmaster_malown(); -extern void AddSC_boss_baron_rivendare(); -extern void AddSC_boss_dathrohan_balnazzar(); -extern void AddSC_boss_order_of_silver_hand(); -extern void AddSC_instance_stratholme(); -extern void AddSC_stratholme(); - -//Sunken Temple -//Sunwell Plateau -extern void AddSC_instance_sunwell_plateau(); -extern void AddSC_boss_kalecgos(); -extern void AddSC_boss_brutallus(); -extern void AddSC_boss_felmyst(); -extern void AddSC_boss_eredar_twins(); -extern void AddSC_boss_muru(); -extern void AddSC_boss_kiljaeden(); -extern void AddSC_sunwell_plateau(); - -//Tanaris -extern void AddSC_tanaris(); - -//Teldrassil - extern void AddSC_teldrassil(); - -//Tempest Keep -//--Arcatraz -extern void AddSC_arcatraz(); -extern void AddSC_boss_harbinger_skyriss(); -extern void AddSC_instance_arcatraz(); - -//--Botanica -extern void AddSC_boss_high_botanist_freywinn(); -extern void AddSC_boss_laj(); -extern void AddSC_boss_warp_splinter(); - -//--The Eye -extern void AddSC_boss_alar(); -extern void AddSC_boss_kaelthas(); -extern void AddSC_boss_void_reaver(); -extern void AddSC_boss_high_astromancer_solarian(); -extern void AddSC_instance_the_eye(); -extern void AddSC_the_eye(); - -//--The Mechanar -extern void AddSC_boss_gatewatcher_iron_hand(); -extern void AddSC_boss_nethermancer_sepethrea(); -extern void AddSC_boss_pathaleon_the_calculator(); -extern void AddSC_instance_mechanar(); - -//Temple of ahn'qiraj -extern void AddSC_boss_cthun(); -extern void AddSC_boss_fankriss(); -extern void AddSC_boss_huhuran(); -extern void AddSC_bug_trio(); -extern void AddSC_boss_sartura(); -extern void AddSC_boss_skeram(); -extern void AddSC_boss_twinemperors(); -extern void AddSC_mob_anubisath_sentinel(); -extern void AddSC_instance_temple_of_ahnqiraj(); - -//Terokkar Forest -extern void AddSC_terokkar_forest(); - -//Thousand Needles -extern void AddSC_thousand_needles(); - -//Thunder Bluff -extern void AddSC_thunder_bluff(); - -//Tirisfal Glades -extern void AddSC_tirisfal_glades(); - -//Uldaman -extern void AddSC_boss_archaedas(); -extern void AddSC_boss_ironaya(); -extern void AddSC_uldaman(); -extern void AddSC_instance_uldaman(); - -//Undercity -extern void AddSC_undercity(); - -//Un'Goro Crater -extern void AddSC_ungoro_crater(); - -//Upper blackrock spire - -//Utgarde Keep -extern void AddSC_boss_keleseth(); -extern void AddSC_boss_skarvald_dalronn(); -extern void AddSC_boss_ingvar_the_plunderer(); -extern void AddSC_instance_utgarde_keep(); -extern void AddSC_utgarde_keep(); - -//Wailing caverns -extern void AddSC_wailing_caverns(); -extern void AddSC_instance_wailing_caverns(); - -//Western plaguelands -extern void AddSC_western_plaguelands(); - -//Westfall -extern void AddSC_westfall(); - -//Wetlands -//Winterspring -extern void AddSC_winterspring(); - -//Zangarmarsh -extern void AddSC_zangarmarsh(); - -//Zul'Farrak -extern void AddSC_zulfarrak(); - -//Zul'Gurub -extern void AddSC_boss_jeklik(); -extern void AddSC_boss_venoxis(); -extern void AddSC_boss_marli(); -extern void AddSC_boss_mandokir(); -extern void AddSC_boss_gahzranka(); -extern void AddSC_boss_thekal(); -extern void AddSC_boss_arlokk(); -extern void AddSC_boss_jindo(); -extern void AddSC_boss_hakkar(); -extern void AddSC_boss_grilek(); -extern void AddSC_boss_hazzarah(); -extern void AddSC_boss_renataki(); -extern void AddSC_boss_wushoolay(); -extern void AddSC_instance_zulgurub(); - -//Zul'Aman -extern void AddSC_boss_akilzon(); -extern void AddSC_boss_halazzi(); -extern void AddSC_boss_hex_lord_malacrass(); -extern void AddSC_boss_janalai(); -extern void AddSC_boss_nalorakk(); -extern void AddSC_boss_zuljin(); -extern void AddSC_instance_zulaman(); -extern void AddSC_zulaman(); - -//Zul'Drak -extern void AddSC_zuldrak(); - -//Northrend -//Dungeon - -//Vault of Archavon -extern void AddSC_boss_archavon(); -extern void AddSC_boss_emalon(); -extern void AddSC_instance_archavon(); - -//Ulduar -extern void AddSC_boss_auriaya(); -extern void AddSC_boss_flame_leviathan(); -extern void AddSC_boss_ignis(); -extern void AddSC_boss_razorscale(); -extern void AddSC_boss_xt002(); -//extern void AddSC_instance_ulduar(); - -//Halls of Lightning -extern void AddSC_boss_bjarngrim(); -extern void AddSC_boss_loken(); -extern void AddSC_instance_halls_of_lightning(); - -//Region -extern void AddSC_wintergrasp(); - -// ------------------- void LoadDatabase() { //Get db string from file @@ -979,646 +339,7 @@ void ScriptsInit(char const* cfg_file = "trinitycore.conf") FillSpellSummary(); - // -- Scripts to be added -- - - // -- Areatrigger -- - AddSC_areatrigger_scripts(); - - // -- Boss -- - AddSC_boss_emeriss(); - AddSC_boss_taerar(); - AddSC_boss_ysondre(); - - // -- Creature -- - AddSC_generic_creature(); - - // -- Custom -- - - // -- Examples -- - AddSC_example_creature(); - AddSC_example_escort(); - AddSC_example_gossip_codebox(); - AddSC_example_misc(); - - // -- GO -- - AddSC_go_scripts(); - - // -- Guard -- - AddSC_guards(); - - // -- Honor -- - - // -- Item -- - AddSC_item_scripts(); - - // -- NPC -- - AddSC_npc_professions(); - AddSC_npcs_special(); - AddSC_npc_taxi(); - - // -- Servers -- - - //-------------------- - //------ ZONE -------- - - //Alterac Mountains - //AddSC_alterac_mountains(); - - //Arathi Highlands - AddSC_arathi_highlands(); - - //Ashenvale Forest - AddSC_ashenvale(); - - //Aunchindoun - //--Auchenai Crypts - AddSC_boss_exarch_maladaar(); - AddSC_boss_shirrak_the_dead_watcher(); - - //--Mana Tombs - AddSC_boss_nexusprince_shaffar(); - AddSC_boss_pandemonius(); - - //--Sekketh Halls - AddSC_boss_darkweaver_syth(); - AddSC_boss_talon_king_ikiss(); - AddSC_instance_sethekk_halls(); - - //--Shadow Labyrinth - AddSC_boss_ambassador_hellmaw(); - AddSC_boss_blackheart_the_inciter(); - AddSC_boss_grandmaster_vorpil(); - AddSC_boss_murmur(); - AddSC_instance_shadow_labyrinth(); - - //Azjol-Nerub - //--Ahn'kahet - AddSC_instance_ahnkahet(); - AddSC_boss_elder_nadox(); - - //Azshara - AddSC_boss_azuregos(); - AddSC_azshara(); - - //Azuremyst Isle - AddSC_azuremyst_isle(); - - //Badlands - //Barrens - AddSC_the_barrens(); - - //Black Temple - AddSC_black_temple(); - AddSC_boss_illidan(); - AddSC_boss_shade_of_akama(); - AddSC_boss_supremus(); - AddSC_boss_gurtogg_bloodboil(); - AddSC_boss_mother_shahraz(); - AddSC_boss_reliquary_of_souls(); - AddSC_boss_teron_gorefiend(); - AddSC_boss_najentus(); - AddSC_boss_illidari_council(); - AddSC_instance_black_temple(); - - //Blackfathom Depths - AddSC_instance_blackfathom_deeps(); - - //Blackrock Depths - AddSC_blackrock_depths(); - AddSC_boss_ambassador_flamelash(); - AddSC_boss_anubshiah(); - AddSC_boss_draganthaurissan(); - AddSC_boss_general_angerforge(); - AddSC_boss_gorosh_the_dervish(); - AddSC_boss_grizzle(); - AddSC_boss_high_interrogator_gerstahn(); - AddSC_boss_magmus(); - AddSC_boss_moira_bronzebeard(); - AddSC_boss_tomb_of_seven(); - AddSC_instance_blackrock_depths(); - - //Blackrock Spire - AddSC_boss_drakkisath(); - AddSC_boss_halycon(); - AddSC_boss_highlordomokk(); - AddSC_boss_mothersmolderweb(); - AddSC_boss_overlordwyrmthalak(); - AddSC_boss_shadowvosh(); - AddSC_boss_thebeast(); - AddSC_boss_warmastervoone(); - AddSC_boss_quatermasterzigris(); - AddSC_boss_pyroguard_emberseer(); - AddSC_boss_gyth(); - AddSC_boss_rend_blackhand(); - - //Blackwing lair - AddSC_boss_razorgore(); - AddSC_boss_vael(); - AddSC_boss_broodlord(); - AddSC_boss_firemaw(); - AddSC_boss_ebonroc(); - AddSC_boss_flamegor(); - AddSC_boss_chromaggus(); - AddSC_boss_nefarian(); - AddSC_boss_victor_nefarius(); - - //Blade's Edge Mountains - AddSC_blades_edge_mountains(); - - //Blasted lands - AddSC_boss_kruul(); - AddSC_blasted_lands(); - - //Bloodmyst Isle - AddSC_bloodmyst_isle(); - - //Borean Tundra - AddSC_borean_tundra(); - - //Burning steppes - AddSC_burning_steppes(); - - //Caverns of Time - //--Battle for Mt. Hyjal - AddSC_hyjal(); - AddSC_boss_archimonde(); - AddSC_instance_mount_hyjal(); - AddSC_hyjal_trash(); - AddSC_boss_rage_winterchill(); - AddSC_boss_anetheron(); - AddSC_boss_kazrogal(); - AddSC_boss_azgalor(); - - //--Old Hillsbrad - AddSC_boss_captain_skarloc(); - AddSC_boss_epoch_hunter(); - AddSC_boss_lieutenant_drake(); - AddSC_instance_old_hillsbrad(); - AddSC_old_hillsbrad(); - - //--The Dark Portal - AddSC_boss_aeonus(); - AddSC_boss_chrono_lord_deja(); - AddSC_boss_temporus(); - AddSC_dark_portal(); - AddSC_instance_dark_portal(); - - //Coilfang Resevoir - //--Serpent Shrine Cavern - AddSC_boss_fathomlord_karathress(); - AddSC_boss_hydross_the_unstable(); - AddSC_boss_lady_vashj(); - AddSC_boss_leotheras_the_blind(); - AddSC_boss_morogrim_tidewalker(); - AddSC_instance_serpentshrine_cavern(); - AddSC_boss_the_lurker_below(); - - //--Slave Pens - //--Steam Vault - AddSC_boss_hydromancer_thespia(); - AddSC_boss_mekgineer_steamrigger(); - AddSC_boss_warlord_kalithresh(); - AddSC_instance_steam_vault(); - - //--Underbog - AddSC_boss_hungarfen(); - AddSC_boss_the_black_stalker(); - - //Darkshore - AddSC_darkshore(); - - //Darnassus - //Deadmines - AddSC_instance_deadmines(); - - //Deadwind pass - //Desolace - AddSC_desolace(); - - //Dire Maul - - AddSC_dragonblight(); - - //Dun Morogh - AddSC_dun_morogh(); - - //Durotar - //Duskwood - //Dustwallow marsh - AddSC_dustwallow_marsh(); - - //Eversong Woods - AddSC_eversong_woods(); - - //Exodar - //Eastern Plaguelands - AddSC_eastern_plaguelands(); - AddSC_the_scarlet_enclave(); - - //Elwynn Forest - AddSC_elwynn_forest(); - - //Felwood - AddSC_felwood(); - - //Feralas - AddSC_feralas(); - - //Ghostlands - AddSC_ghostlands(); - - //Gnomeregan - - //Grizzly Hills - AddSC_grizzly_hills(); - - //Gruul's Lair - AddSC_boss_gruul(); - AddSC_boss_high_king_maulgar(); - AddSC_instance_gruuls_lair(); - - //Hellfire Citadel - //--Blood Furnace - AddSC_boss_broggok(); - AddSC_boss_kelidan_the_breaker(); - AddSC_boss_the_maker(); - AddSC_instance_blood_furnace(); - - //--Magtheridon's Lair - AddSC_boss_magtheridon(); - AddSC_instance_magtheridons_lair(); - - //--Shattered Halls - AddSC_boss_grand_warlock_nethekurse(); - AddSC_boss_warbringer_omrogg(); - AddSC_boss_warchief_kargath_bladefist(); - AddSC_instance_shattered_halls(); - - //--Ramparts - AddSC_boss_watchkeeper_gargolmar(); - AddSC_boss_omor_the_unscarred(); - AddSC_boss_vazruden_the_herald(); - AddSC_instance_ramparts(); - - //Hellfire Peninsula - AddSC_boss_doomlordkazzak(); - AddSC_hellfire_peninsula(); - - //Hillsbrad Foothills - //Hinterlands - AddSC_hinterlands(); - - //Icecrown - AddSC_icecrown(); - - //Ironforge - AddSC_ironforge(); - - //Isle of Quel'Danas - AddSC_isle_of_queldanas(); - - //Karazhan - AddSC_boss_attumen(); - AddSC_boss_curator(); - AddSC_boss_maiden_of_virtue(); - AddSC_boss_shade_of_aran(); - AddSC_boss_malchezaar(); - AddSC_boss_terestian_illhoof(); - AddSC_boss_moroes(); - AddSC_bosses_opera(); - AddSC_boss_netherspite(); - AddSC_instance_karazhan(); - AddSC_karazhan(); - AddSC_boss_nightbane(); - - //Loch Modan - AddSC_loch_modan(); - - //Lower Blackrock Spire - - // Magister's Terrace - AddSC_boss_felblood_kaelthas(); - AddSC_boss_selin_fireheart(); - AddSC_boss_vexallus(); - AddSC_boss_priestess_delrissa(); - AddSC_instance_magisters_terrace(); - AddSC_magisters_terrace(); - - //Maraudon - AddSC_boss_celebras_the_cursed(); - AddSC_boss_landslide(); - AddSC_boss_noxxion(); - AddSC_boss_ptheradras(); - - //Molten core - AddSC_boss_lucifron(); - AddSC_boss_magmadar(); - AddSC_boss_gehennas(); - AddSC_boss_garr(); - AddSC_boss_baron_geddon(); - AddSC_boss_shazzrah(); - AddSC_boss_golemagg(); - AddSC_boss_sulfuron(); - AddSC_boss_majordomo(); - AddSC_boss_ragnaros(); - AddSC_instance_molten_core(); - AddSC_molten_core(); - - //Moonglade - AddSC_moonglade(); - - //Mulgore - AddSC_mulgore(); - - //Nagrand - AddSC_nagrand(); - - //Naxxramas - AddSC_boss_anubrekhan(); - AddSC_boss_faerlina(); - AddSC_boss_maexxna(); - AddSC_boss_patchwerk(); - AddSC_boss_grobbulus(); - AddSC_boss_razuvious(); - AddSC_boss_kelthuzad(); - AddSC_boss_loatheb(); - AddSC_boss_noth(); - AddSC_boss_gluth(); - AddSC_boss_sapphiron(); - AddSC_boss_four_horsemen(); - AddSC_boss_heigan(); - AddSC_boss_gothik(); - AddSC_boss_thaddius(); - AddSC_instance_naxxramas(); - - //Netherstorm - AddSC_netherstorm(); - - //The Nexus - AddSC_boss_magus_telestra(); - AddSC_boss_anomalus(); - AddSC_boss_ormorok(); - AddSC_boss_keristrasza(); - AddSC_instance_nexus(); - - //Obsidian Sanctum - AddSC_instance_obsidian_sanctum(); - - //Onyxia's Lair - AddSC_boss_onyxia(); - - //Orgrimmar - AddSC_orgrimmar(); - - //Ragefire Chasm - //Razorfen Downs - AddSC_boss_amnennar_the_coldbringer(); - AddSC_razorfen_downs(); - - //Razorfen Kraul - AddSC_razorfen_kraul(); - - //Redridge Mountains - //Ruins of Ahn'Qiraj - //Scarlet Monastery - AddSC_boss_arcanist_doan(); - AddSC_boss_azshir_the_sleepless(); - AddSC_boss_bloodmage_thalnos(); - AddSC_boss_headless_horseman(); - AddSC_boss_herod(); - AddSC_boss_high_inquisitor_fairbanks(); - AddSC_boss_houndmaster_loksey(); - AddSC_boss_interrogator_vishas(); - AddSC_boss_scorn(); - AddSC_instance_scarlet_monastery(); - AddSC_boss_mograine_and_whitemane(); - - //Scholomance - AddSC_boss_darkmaster_gandling(); - AddSC_boss_death_knight_darkreaver(); - AddSC_boss_theolenkrastinov(); - AddSC_boss_illuciabarov(); - AddSC_boss_instructormalicia(); - AddSC_boss_jandicebarov(); - AddSC_boss_kormok(); - AddSC_boss_lordalexeibarov(); - AddSC_boss_lorekeeperpolkelt(); - AddSC_boss_rasfrost(); - AddSC_boss_theravenian(); - AddSC_boss_vectus(); - AddSC_instance_scholomance(); - - //Searing gorge - AddSC_searing_gorge(); - - //Shadowfang keep - AddSC_shadowfang_keep(); - AddSC_instance_shadowfang_keep(); - - //Shadowmoon Valley - AddSC_boss_doomwalker(); - AddSC_shadowmoon_valley(); - - //Shattrath - AddSC_shattrath_city(); - - //Sholazar Basin - AddSC_sholazar_basin(); - - //Silithus - AddSC_silithus(); - - //Silvermoon - AddSC_silvermoon_city(); - - //Silverpine forest - AddSC_silverpine_forest(); - - //Stockade - //Stonetalon mountains - AddSC_stonetalon_mountains(); - - //Stormwind City - AddSC_stormwind_city(); - - //Stranglethorn Vale - AddSC_stranglethorn_vale(); - - //Stratholme - AddSC_boss_magistrate_barthilas(); - AddSC_boss_maleki_the_pallid(); - AddSC_boss_nerubenkan(); - AddSC_boss_cannon_master_willey(); - AddSC_boss_baroness_anastari(); - AddSC_boss_ramstein_the_gorger(); - AddSC_boss_timmy_the_cruel(); - AddSC_boss_postmaster_malown(); - AddSC_boss_baron_rivendare(); - AddSC_boss_dathrohan_balnazzar(); - AddSC_boss_order_of_silver_hand(); - AddSC_instance_stratholme(); - AddSC_stratholme(); - - //Sunken Temple - //Sunwell Plateau - AddSC_instance_sunwell_plateau(); - AddSC_boss_kalecgos(); - AddSC_boss_brutallus(); - AddSC_boss_felmyst(); - AddSC_boss_eredar_twins(); - AddSC_boss_muru(); - AddSC_boss_kiljaeden(); - AddSC_sunwell_plateau(); - - //Tanaris - AddSC_tanaris(); - - //Teldrassil - AddSC_teldrassil(); - - //Tempest Keep - //--Arcatraz - AddSC_arcatraz(); - AddSC_boss_harbinger_skyriss(); - AddSC_instance_arcatraz(); - - //--Botanica - AddSC_boss_high_botanist_freywinn(); - AddSC_boss_laj(); - AddSC_boss_warp_splinter(); - - //--The Eye - AddSC_boss_alar(); - AddSC_boss_kaelthas(); - AddSC_boss_void_reaver(); - AddSC_boss_high_astromancer_solarian(); - AddSC_instance_the_eye(); - AddSC_the_eye(); - - //--The Mechanar - AddSC_boss_gatewatcher_iron_hand(); - AddSC_boss_nethermancer_sepethrea(); - AddSC_boss_pathaleon_the_calculator(); - AddSC_instance_mechanar(); - - //Temple of ahn'qiraj - AddSC_boss_cthun(); - AddSC_boss_fankriss(); - AddSC_boss_huhuran(); - AddSC_bug_trio(); - AddSC_boss_sartura(); - AddSC_boss_skeram(); - AddSC_boss_twinemperors(); - AddSC_mob_anubisath_sentinel(); - AddSC_instance_temple_of_ahnqiraj(); - - //Terokkar Forest - AddSC_terokkar_forest(); - - //Thousand Needles - AddSC_thousand_needles(); - - //Thunder Bluff - AddSC_thunder_bluff(); - - //Tirisfal Glades - AddSC_tirisfal_glades(); - - //Uldaman - AddSC_boss_archaedas(); - AddSC_boss_ironaya(); - AddSC_uldaman(); - AddSC_instance_uldaman(); - - //Undercity - AddSC_undercity(); - - //Un'Goro Crater - AddSC_ungoro_crater(); - - //Upper blackrock spire - - //Utgarde Keep - AddSC_boss_keleseth(); - AddSC_boss_skarvald_dalronn(); - AddSC_boss_ingvar_the_plunderer(); - AddSC_instance_utgarde_keep(); - AddSC_utgarde_keep(); - - //Wailing caverns - AddSC_wailing_caverns(); - AddSC_instance_wailing_caverns(); - - //Western plaguelands - AddSC_western_plaguelands(); - - //Westfall - AddSC_westfall(); - - //Wetlands - //Winterspring - AddSC_winterspring(); - - //Zangarmarsh - AddSC_zangarmarsh(); - - //Zul'Farrak - AddSC_zulfarrak(); - - //Zul'Gurub - AddSC_boss_jeklik(); - AddSC_boss_venoxis(); - AddSC_boss_marli(); - AddSC_boss_mandokir(); - AddSC_boss_gahzranka(); - AddSC_boss_thekal(); - AddSC_boss_arlokk(); - AddSC_boss_jindo(); - AddSC_boss_hakkar(); - AddSC_boss_grilek(); - AddSC_boss_hazzarah(); - AddSC_boss_renataki(); - AddSC_boss_wushoolay(); - AddSC_instance_zulgurub(); - - //Zul'Aman - AddSC_boss_akilzon(); - AddSC_boss_halazzi(); - AddSC_boss_hex_lord_malacrass(); - AddSC_boss_janalai(); - AddSC_boss_nalorakk(); - AddSC_boss_zuljin(); - AddSC_instance_zulaman(); - AddSC_zulaman(); - - //Zul'Drak - AddSC_zuldrak(); - - //Northrend - //Dungeon - - //Vault of Archavon - AddSC_boss_archavon(); - AddSC_boss_emalon(); - AddSC_instance_archavon(); - - //Ulduar - AddSC_boss_auriaya(); - AddSC_boss_flame_leviathan(); - AddSC_boss_ignis(); - AddSC_boss_razorscale(); - AddSC_boss_xt002(); - //AddSC_instance_ulduar(); - - //Halls of Lightning - AddSC_boss_bjarngrim(); - AddSC_boss_loken(); - AddSC_instance_halls_of_lightning(); - - //Region - AddSC_wintergrasp(); - - // ------------------- + AddScripts(); outstring_log(">> Loaded %i C++ Scripts.", num_sc_scripts); diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index f2df15cf407..38ffd7dfa73 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -379,10 +379,6 @@ RelativePath="..\base\guard_ai.h" > - - @@ -2743,6 +2739,10 @@ RelativePath="..\scripts\world\go_scripts.cpp" > + + @@ -2832,6 +2832,18 @@ > + + + + + + diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index 5d46c04a913..80f34afd82f 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -376,10 +376,6 @@ RelativePath="..\base\guard_ai.h" > - - @@ -2740,6 +2736,10 @@ RelativePath="..\scripts\world\go_scripts.cpp" > + + @@ -2829,6 +2829,18 @@ > + + + + + + diff --git a/src/bindings/scripts/base/guards.cpp b/src/bindings/scripts/base/guards.cpp deleted file mode 100644 index fa5592f7c32..00000000000 --- a/src/bindings/scripts/base/guards.cpp +++ /dev/null @@ -1,4110 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Guards -SD%Complete: 100 -SDComment: All Guard gossip data, quite some npc_text-id's still missing, adding constantly as new id's are known. CombatAI should be organized better for future. -SDCategory: Guards -EndScriptData */ - -/* ContentData -guard_azuremyst -guard_bluffwatcher -guard_contested -guard_darnassus -guard_dunmorogh -guard_durotar -guard_elwynnforest -guard_eversong -guard_exodar -guard_ironforge -guard_mulgore -guard_orgrimmar -guard_shattrath -guard_shattrath_aldor -guard_shattrath_scryer -guard_silvermoon -guard_stormwind -guard_teldrassil -guard_tirisfal -guard_undercity -EndContentData */ - -#include "precompiled.h" -#include "guard_ai.h" - -//script spesific action -#define GOSSIP_ACTION_TAVERN 101 -#define GOSSIP_ACTION_GEMMERCHANT 102 -#define GOSSIP_ACTION_MANALOOM 103 - -//script spesific sender -#define GOSSIP_SENDER_SEC_GEMMERCHANT 101 -#define GOSSIP_SENDER_SEC_AUCTIONHOUSE 102 - -//script spesific gossip text -#define GOSSIP_TEXT_TAVERN "Worlds End Tavern" -#define GOSSIP_TEXT_BANKSCYERS "Scyers bank" -#define GOSSIP_TEXT_BANKALDOR "Aldor Bank" -#define GOSSIP_TEXT_INNSCYERS "Scyers Inn" -#define GOSSIP_TEXT_INNALDOR "Aldor Inn" -#define GOSSIP_TEXT_STABLESCYERS "Scyers Stable" -#define GOSSIP_TEXT_STABLEALDOR "Aldor Stable" -#define GOSSIP_TEXT_BATTLEMASTERALLIANCE "Alliance Battlemasters" -#define GOSSIP_TEXT_BATTLEMASTERHORDE "Horde Battlemasters" -#define GOSSIP_TEXT_BATTLEMASTERARENA "Arena Battlemasters" -#define GOSSIP_TEXT_MANALOOM "Mana Loom" -#define GOSSIP_TEXT_ALCHEMYLAB "Alchemy Lab" -#define GOSSIP_TEXT_GEMMERCHANT "Gem Merchant" -#define GOSSIP_TEXT_GEMSCYERS "Scyers Gem Merchant" -#define GOSSIP_TEXT_GEMALDOR "Aldor Gem Merchant" - -#define GOSSIP_TEXT_AH_SILVERMOON_1 "Western Auction House" -#define GOSSIP_TEXT_AH_SILVERMOON_2 "Royal Exchange Auction House" - -#define GOSSIP_TEXT_INN_SILVERMOON_1 "Silvermoon City Inn" -#define GOSSIP_TEXT_INN_SILVERMOON_2 "Wayfarer's Rest tavern" - -/******************************************************* - * guard_azuremyst start - *******************************************************/ - -bool GossipHello_guard_azuremyst(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(10066, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(-3918.95, -11544.7, 7, 6, 0, "Bank"); - pPlayer->SEND_GOSSIP_MENU(10067, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hippogryph Master - pPlayer->SEND_POI(-4057.15, -11788.6, 7, 6, 0, "Stephanos"); - pPlayer->SEND_GOSSIP_MENU(10071, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(-4092.43, -11626.6, 7, 6, 0, "Funaam"); - pPlayer->SEND_GOSSIP_MENU(10073, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-4129.43, -12469, 7, 6, 0, "Caregiver Chellan"); - pPlayer->SEND_GOSSIP_MENU(10074, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master - pPlayer->SEND_POI(-4146.42, -12492.7, 7, 6, 0, "Esbina"); - pPlayer->SEND_GOSSIP_MENU(10075, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(10076, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); - pPlayer->SEND_GOSSIP_MENU(10087, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-4274.81, -11495.3, 7, 6, 0, "Shalannius"); - pPlayer->SEND_GOSSIP_MENU(10077, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-4203.65, -12526.5, 7, 6, 0, "Acteon"); - pPlayer->SEND_GOSSIP_MENU(10078, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-4149.62, -12530.1, 7, 6, 0, "Semid"); - pPlayer->SEND_GOSSIP_MENU(10081, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(-4138.98, -12468.5, 7, 6, 0, "Tullas"); - pPlayer->SEND_GOSSIP_MENU(10083, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-4131.66, -12478.6, 7, 6, 0, "Guvan"); - pPlayer->SEND_GOSSIP_MENU(10084, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Shaman - pPlayer->SEND_POI(-4162.33, -12456.1, 7, 6, 0, "Tuluun"); - pPlayer->SEND_GOSSIP_MENU(10085, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-4165.05, -12536.4, 7, 6, 0, "Ruada"); - pPlayer->SEND_GOSSIP_MENU(10086, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-4191.15, -12470, 7, 6, 0, "Daedal"); - pPlayer->SEND_GOSSIP_MENU(10088, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-4726.29, -12387, 7, 6, 0, "Blacksmith Calypso"); - pPlayer->SEND_GOSSIP_MENU(10089, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-4710.87, -12400.6, 7, 6, 0, "'Cookie' McWeaksauce"); - pPlayer->SEND_GOSSIP_MENU(10090, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-3882.85, -11496.7, 7, 6, 0, "Nahogg"); - pPlayer->SEND_GOSSIP_MENU(10091, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-4157.57, -12470.2, 7, 6, 0, "Artificer Daelo"); - pPlayer->SEND_GOSSIP_MENU(10092, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-4199.11, -12469.9, 7, 6, 0, "Anchorite Fateema"); - pPlayer->SEND_GOSSIP_MENU(10093, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-4266.38, -12985.1, 7, 6, 0, "Diktynna"); - pPlayer->SEND_GOSSIP_MENU(10094, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_GOSSIP_MENU(10095, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting - pPlayer->SEND_POI(-3781.55, -11541.8, 7, 6, 0, "Farii"); - pPlayer->SEND_GOSSIP_MENU(10096, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking - pPlayer->SEND_POI(-3442.68, -12322.2, 7, 6, 0, "Moordo"); - pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Mining - pPlayer->SEND_POI(-4179.89, -12493.1, 7, 6, 0, "Dulvi"); - pPlayer->SEND_GOSSIP_MENU(10097, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Skinning - pPlayer->SEND_POI(-3431.17, -12316.5, 7, 6, 0, "Gurf"); - pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring - pPlayer->SEND_POI(-4711.54, -12386.7, 7, 6, 0, "Erin Kelly"); - pPlayer->SEND_GOSSIP_MENU(10099, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_azuremyst end - *******************************************************/ - -CreatureAI* GetAI_guard_azuremyst(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_bluffwatcher start - *******************************************************/ - -bool GossipHello_guard_bluffwatcher(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(-1257.8, 24.14, 7, 6, 0, "Thunder Bluff Bank"); - pPlayer->SEND_GOSSIP_MENU(1292, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Wind master - pPlayer->SEND_POI(-1196.43, 28.26, 7, 6, 0, "Wind Rider Roost"); - pPlayer->SEND_GOSSIP_MENU(1293, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(-1296.5, 127.57, 7, 6, 0, "Thunder Bluff Civic Information"); - pPlayer->SEND_GOSSIP_MENU(1291, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-1296, 39.7, 7, 6, 0, "Thunder Bluff Inn"); - pPlayer->SEND_GOSSIP_MENU(3153, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(-1263.59, 44.36, 7, 6, 0, "Thunder Bluff Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3154, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Auction House - pPlayer->SEND_POI(1381.77, -4371.16, 7, 6, 0, GOSSIP_TEXT_AUCTIONHOUSE); - pPlayer->SEND_GOSSIP_MENU(3155, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Weapon master - pPlayer->SEND_POI(-1282.31, 89.56, 7, 6, 0, "Ansekhwa"); - pPlayer->SEND_GOSSIP_MENU(4520, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Stable master - pPlayer->SEND_POI(-1270.19, 48.84, 7, 6, 0, "Bulrug"); - pPlayer->SEND_GOSSIP_MENU(5977, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-1387.82, -97.55, 7, 6, 0, "Taim Ragetotem"); - pPlayer->SEND_GOSSIP_MENU(7522, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-997, 214.12, 7, 6, 0, "Martin Lindsey"); - pPlayer->SEND_GOSSIP_MENU(7648, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(-1384.94, -75.91, 7, 6, 0, "Kergul Bloodaxe"); - pPlayer->SEND_GOSSIP_MENU(7523, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-1054.47, -285, 7, 6, 0, "Hall of Elders"); - pPlayer->SEND_GOSSIP_MENU(1294, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); - pPlayer->SEND_GOSSIP_MENU(1295, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); - pPlayer->SEND_GOSSIP_MENU(1296, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Priest - pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); - pPlayer->SEND_GOSSIP_MENU(1297, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Shaman - pPlayer->SEND_POI(-989.54, 278.25, 7, 6, 0, "Hall of Spirits"); - pPlayer->SEND_GOSSIP_MENU(1298, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warrior - pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); - pPlayer->SEND_GOSSIP_MENU(1299, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1085.56, 27.29, 7, 6, 0, "Bena's Alchemy"); - pPlayer->SEND_GOSSIP_MENU(1332, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1239.75, 104.88, 7, 6, 0, "Karn's Smithy"); - pPlayer->SEND_GOSSIP_MENU(1333, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-1214.5, -21.23, 7, 6, 0, "Aska's Kitchen"); - pPlayer->SEND_GOSSIP_MENU(1334, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-1112.65, 48.26, 7, 6, 0, "Dawnstrider Enchanters"); - pPlayer->SEND_GOSSIP_MENU(1335, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-996.58, 200.5, 7, 6, 0, "Spiritual Healing"); - pPlayer->SEND_GOSSIP_MENU(1336, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Fishing - pPlayer->SEND_POI(-1169.35, -68.87, 7, 6, 0, "Mountaintop Bait & Tackle"); - pPlayer->SEND_GOSSIP_MENU(1337, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism - pPlayer->SEND_POI(-1137.7, -1.51, 7, 6, 0, "Holistic Herbalism"); - pPlayer->SEND_GOSSIP_MENU(1338, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Inscription - pPlayer->SEND_POI(-1000.26, 209.52, 7, 6, 0, "Poshken Hardbinder"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); - pPlayer->SEND_GOSSIP_MENU(1339, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_POI(-1249.17, 155, 7, 6, 0, "Stonehoof Geology"); - pPlayer->SEND_GOSSIP_MENU(1340, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_POI(-1148.56, 51.18, 7, 6, 0, "Mooranta"); - pPlayer->SEND_GOSSIP_MENU(1343, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); - pPlayer->SEND_GOSSIP_MENU(1341, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_bluffwatcher end - *******************************************************/ - -CreatureAI* GetAI_guard_bluffwatcher(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_contested start - *******************************************************/ - -CreatureAI* GetAI_guard_contested(Creature* pCreature) -{ - return new guardAI (pCreature); -} -/******************************************************* - * guard_contested end - *******************************************************/ - -/******************************************************* - * guard_darnassus start - *******************************************************/ - -bool GossipHello_guard_darnassus(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(3016, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction house - pPlayer->SEND_POI(9861.23, 2334.55, 7, 6, 0, "Darnassus Auction House"); - pPlayer->SEND_GOSSIP_MENU(3833, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(9938.45, 2512.35, 7, 6, 0, "Darnassus Bank"); - pPlayer->SEND_GOSSIP_MENU(3017, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Wind master - pPlayer->SEND_POI(9945.65, 2618.94, 7, 6, 0, "Rut'theran Village"); - pPlayer->SEND_GOSSIP_MENU(3018, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Guild master - pPlayer->SEND_POI(10076.40, 2199.59, 7, 6, 0, "Darnassus Guild Master"); - pPlayer->SEND_GOSSIP_MENU(3019, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Inn - pPlayer->SEND_POI(10133.29, 2222.52, 7, 6, 0, "Darnassus Inn"); - pPlayer->SEND_GOSSIP_MENU(3020, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox - pPlayer->SEND_POI(9942.17, 2495.48, 7, 6, 0, "Darnassus Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3021, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Stable master - pPlayer->SEND_POI(10167.20, 2522.66, 7, 6, 0, "Alassin"); - pPlayer->SEND_GOSSIP_MENU(5980, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer - pPlayer->SEND_POI(9907.11, 2329.70, 7, 6, 0, "Ilyenia Moonfire"); - pPlayer->SEND_GOSSIP_MENU(4517, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(9923.61, 2327.43, 7, 6, 0, "Brogun Stoneshield"); - pPlayer->SEND_GOSSIP_MENU(7518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(9977.37, 2324.39, 7, 6, 0, "Keras Wolfheart"); - pPlayer->SEND_GOSSIP_MENU(7651, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(9979.84, 2315.79, 7, 6, 0, "Aethalas"); - pPlayer->SEND_GOSSIP_MENU(7482, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(10186, 2570.46, 7, 6, 0, "Darnassus Druid Trainer"); - pPlayer->SEND_GOSSIP_MENU(3024, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(10177.29, 2511.10, 7, 6, 0, "Darnassus Hunter Trainer"); - pPlayer->SEND_GOSSIP_MENU(3023, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(9659.12, 2524.88, 7, 6, 0, "Temple of the Moon"); - pPlayer->SEND_GOSSIP_MENU(3025, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Rogue - pPlayer->SEND_POI(10122, 2599.12, 7, 6, 0, "Darnassus Rogue Trainer"); - pPlayer->SEND_GOSSIP_MENU(3026, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(9951.91, 2280.38, 7, 6, 0, "Warrior's Terrace"); - pPlayer->SEND_GOSSIP_MENU(3033, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(10075.90, 2356.76, 7, 6, 0, "Darnassus Alchemy Trainer"); - pPlayer->SEND_GOSSIP_MENU(3035, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Cooking - pPlayer->SEND_POI(10088.59, 2419.21, 7, 6, 0, "Darnassus Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3036, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting - pPlayer->SEND_POI(10146.09, 2313.42, 7, 6, 0, "Darnassus Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(3337, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //First Aid - pPlayer->SEND_POI(10150.09, 2390.43, 7, 6, 0, "Darnassus First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(3037, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Fishing - pPlayer->SEND_POI(9836.20, 2432.17, 7, 6, 0, "Darnassus Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(3038, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism - pPlayer->SEND_POI(9757.17, 2430.16, 7, 6, 0, "Darnassus Herbalism Trainer"); - pPlayer->SEND_GOSSIP_MENU(3039, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Inscription - pPlayer->SEND_POI(10139.00, 2343.31, 7, 6, 0, "Feyden Darkin"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking - pPlayer->SEND_POI(10086.59, 2255.77, 7, 6, 0, "Darnassus Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3040, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Skinning - pPlayer->SEND_POI(10081.40, 2257.18, 7, 6, 0, "Darnassus Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(3042, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring - pPlayer->SEND_POI(10079.70, 2268.19, 7, 6, 0, "Darnassus Tailor"); - pPlayer->SEND_GOSSIP_MENU(3044, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_darnassus end - *******************************************************/ - -CreatureAI* GetAI_guard_darnassus(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_dunmorogh start - *******************************************************/ - -bool GossipHello_guard_dunmorogh(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4287, pCreature->GetGUID()); - - return true; -} - -void SendDefaultMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4288, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master - pPlayer->SEND_GOSSIP_MENU(4289, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_GOSSIP_MENU(4290, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-5582.66, -525.89, 7, 6, 0, "Thunderbrew Distillery"); - pPlayer->SEND_GOSSIP_MENU(4291, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master - pPlayer->SEND_POI(-5604, -509.58, 7, 6, 0, "Shelby Stoneflint"); - pPlayer->SEND_GOSSIP_MENU(5985, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(4300, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(-5618.29, -454.25, 7, 6, 0, "Grif Wildheart"); - pPlayer->SEND_GOSSIP_MENU(4293, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Magis Sparkmantle"); - pPlayer->SEND_GOSSIP_MENU(4294, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Paladin - pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Azar Stronghammer"); - pPlayer->SEND_GOSSIP_MENU(4295, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Priest - pPlayer->SEND_POI(-5591.74, -525.61, 7, 6, 0, "Maxan Anvol"); - pPlayer->SEND_GOSSIP_MENU(4296, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Rogue - pPlayer->SEND_POI(-5602.75, -542.4, 7, 6, 0, "Hogral Bakkan"); - pPlayer->SEND_GOSSIP_MENU(4297, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(-5641.97, -523.76, 7, 6, 0, "Gimrizz Shadowcog"); - pPlayer->SEND_GOSSIP_MENU(4298, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-5604.79, -529.38, 7, 6, 0, "Granis Swiftaxe"); - pPlayer->SEND_GOSSIP_MENU(4299, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_GOSSIP_MENU(4301, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-5584.72, -428.41, 7, 6, 0, "Tognus Flintfire"); - pPlayer->SEND_GOSSIP_MENU(4302, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-5596.85, -541.43, 7, 6, 0, "Gremlock Pilsnor"); - pPlayer->SEND_GOSSIP_MENU(4303, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4304, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Bronk Guzzlegear"); - pPlayer->SEND_GOSSIP_MENU(4305, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-5603.67, -523.57, 7, 6, 0, "Thamner Pol"); - pPlayer->SEND_GOSSIP_MENU(4306, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-5199.9, 58.58, 7, 6, 0, "Paxton Ganter"); - pPlayer->SEND_GOSSIP_MENU(4307, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_GOSSIP_MENU(4308, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_GOSSIP_MENU(4310, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Yarr Hamerstone"); - pPlayer->SEND_GOSSIP_MENU(4311, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_GOSSIP_MENU(4312, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4313, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_dunmorogh end - *******************************************************/ - -CreatureAI* GetAI_guard_dunmorogh(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_durotar start - *******************************************************/ - -bool GossipHello_guard_durotar(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(4037, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4032, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider - pPlayer->SEND_GOSSIP_MENU(4033, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(338.7, -4688.87, 7, 6, 0, "Razor Hill Inn"); - pPlayer->SEND_GOSSIP_MENU(4034, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable master - pPlayer->SEND_POI(330.31, -4710.66, 7, 6, 0, "Shoja'my"); - pPlayer->SEND_GOSSIP_MENU(5973, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4035, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(4036, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(276, -4706.72, 7, 6, 0, "Thotar"); - pPlayer->SEND_GOSSIP_MENU(4013, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(-839.33, -4935.6, 7, 6, 0, "Un'Thuwa"); - pPlayer->SEND_GOSSIP_MENU(4014, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(296.22, -4828.1, 7, 6, 0, "Tai'jin"); - pPlayer->SEND_GOSSIP_MENU(4015, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Rogue - pPlayer->SEND_POI(265.76, -4709, 7, 6, 0, "Kaplak"); - pPlayer->SEND_GOSSIP_MENU(4016, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Shaman - pPlayer->SEND_POI(307.79, -4836.97, 7, 6, 0, "Swart"); - pPlayer->SEND_GOSSIP_MENU(4017, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(355.88, -4836.45, 7, 6, 0, "Dhugru Gorelust"); - pPlayer->SEND_GOSSIP_MENU(4018, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(312.3, -4824.66, 7, 6, 0, "Tarshaw Jaggedscar"); - pPlayer->SEND_GOSSIP_MENU(4019, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-800.25, -4894.33, 7, 6, 0, "Miao'zan"); - pPlayer->SEND_GOSSIP_MENU(4020, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(373.24, -4716.45, 7, 6, 0, "Dwukk"); - pPlayer->SEND_GOSSIP_MENU(4021, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_GOSSIP_MENU(4022, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4023, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(368.95, -4723.95, 7, 6, 0, "Mukdrak"); - pPlayer->SEND_GOSSIP_MENU(4024, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(327.17, -4825.62, 7, 6, 0, "Rawrk"); - pPlayer->SEND_GOSSIP_MENU(4025, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-1065.48, -4777.43, 7, 6, 0, "Lau'Tiki"); - pPlayer->SEND_GOSSIP_MENU(4026, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-836.25, -4896.89, 7, 6, 0, "Mishiki"); - pPlayer->SEND_GOSSIP_MENU(4027, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_GOSSIP_MENU(4028, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_POI(366.94, -4705, 7, 6, 0, "Krunn"); - pPlayer->SEND_GOSSIP_MENU(4029, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_GOSSIP_MENU(4030, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4031, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_durotar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_durotar end - *******************************************************/ - -CreatureAI* GetAI_guard_durotar(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_elwynnforest start - *******************************************************/ - -bool GossipHello_guard_elwynnforest(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4260, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master - pPlayer->SEND_GOSSIP_MENU(4261, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_GOSSIP_MENU(4262, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-9459.34, 42.08, 7, 6, 0, "Lion's Pride Inn"); - pPlayer->SEND_GOSSIP_MENU(4263, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master - pPlayer->SEND_POI(-9466.62, 45.87, 7, 6, 0, "Erma"); - pPlayer->SEND_GOSSIP_MENU(5983, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_GOSSIP_MENU(4265, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_GOSSIP_MENU(4266, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-9471.12, 33.44, 7, 6, 0, "Zaldimar Wefhellt"); - pPlayer->SEND_GOSSIP_MENU(4268, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(-9469, 108.05, 7, 6, 0, "Brother Wilhelm"); - pPlayer->SEND_GOSSIP_MENU(4269, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-9461.07, 32.6, 7, 6, 0, "Priestess Josetta"); - pPlayer->SEND_GOSSIP_MENU(4267, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Rogue - pPlayer->SEND_POI(-9465.13, 13.29, 7, 6, 0, "Keryn Sylvius"); - pPlayer->SEND_GOSSIP_MENU(4270, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warlock - pPlayer->SEND_POI(-9473.21, -4.08, 7, 6, 0, "Maximillian Crowe"); - pPlayer->SEND_GOSSIP_MENU(4272, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Warrior - pPlayer->SEND_POI(-9461.82, 109.50, 7, 6, 0, "Lyria Du Lac"); - pPlayer->SEND_GOSSIP_MENU(4271, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-9057.04, 153.63, 7, 6, 0, "Alchemist Mallory"); - pPlayer->SEND_GOSSIP_MENU(4274, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-9456.58, 87.90, 7, 6, 0, "Smith Argus"); - pPlayer->SEND_GOSSIP_MENU(4275, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-9467.54, -3.16, 7, 6, 0, "Tomas"); - pPlayer->SEND_GOSSIP_MENU(4276, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4277, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_GOSSIP_MENU(4278, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-9456.82, 30.49, 7, 6, 0, "Michelle Belle"); - pPlayer->SEND_GOSSIP_MENU(4279, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-9386.54, -118.73, 7, 6, 0, "Lee Brown"); - pPlayer->SEND_GOSSIP_MENU(4280, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-9060.70, 149.23, 7, 6, 0, "Herbalist Pomeroy"); - pPlayer->SEND_GOSSIP_MENU(4281, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Adele Fielder"); - pPlayer->SEND_GOSSIP_MENU(4282, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_GOSSIP_MENU(4283, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(-9536.91, -1212.76, 7, 6, 0, "Helene Peltskinner"); - pPlayer->SEND_GOSSIP_MENU(4284, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Eldrin"); - pPlayer->SEND_GOSSIP_MENU(4285, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_elwynnforest end - *******************************************************/ - -CreatureAI* GetAI_guard_elwynnforest(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_eversong start - *******************************************************/ - -bool GossipHello_guard_eversong(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bat Handler - pPlayer->SEND_POI(9371.93, -7164.80, 7, 6, 0, "Skymistress Gloaming"); - pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Guild master - pPlayer->SEND_GOSSIP_MENU(10182, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(9483.74, -6844.58, 7, 6, 0, "Delaniel's inn"); - pPlayer->SEND_GOSSIP_MENU(10183, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master - pPlayer->SEND_POI(9489.62, -6829.93, 7, 6, 0, "Anathos"); - pPlayer->SEND_GOSSIP_MENU(10184, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_GOSSIP_MENU(10185, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(9527.44, -6865.25, 7, 6, 0, "Hannovia"); - pPlayer->SEND_GOSSIP_MENU(10186, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(9464.24, -6855.52, 7, 6, 0, "Garridel"); - pPlayer->SEND_GOSSIP_MENU(10187, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(9517.61, -6871.04, 7, 6, 0, "Noellene"); - pPlayer->SEND_GOSSIP_MENU(10189, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(9467.39, -6845.72, 7, 6, 0, "Ponaris"); - pPlayer->SEND_GOSSIP_MENU(10190, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Rogue - pPlayer->SEND_POI(9533.67, -6877.39, 7, 6, 0, "Tannaria"); - pPlayer->SEND_GOSSIP_MENU(10191, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warlock - pPlayer->SEND_POI(9468.99, -6865.60, 7, 6, 0, "Celoenus"); - pPlayer->SEND_GOSSIP_MENU(10192, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(8659.90, -6368.12, 7, 6, 0, "Arcanist Sheynathren"); - pPlayer->SEND_GOSSIP_MENU(10193, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(8984.21, -7419.21, 7, 6, 0, "Arathel Sunforge"); - pPlayer->SEND_GOSSIP_MENU(10194, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(9494.04, -6881.51, 7, 6, 0, "Quarelestra"); - pPlayer->SEND_GOSSIP_MENU(10195, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Engineering - pPlayer->SEND_GOSSIP_MENU(10197, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(9479.46, -6879.16, 7, 6, 0, "Kanaria"); - pPlayer->SEND_GOSSIP_MENU(10198, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Fishing - pPlayer->SEND_GOSSIP_MENU(10199, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism - pPlayer->SEND_POI(8678.92, -6329.09, 7, 6, 0, "Botanist Tyniarrel"); - pPlayer->SEND_GOSSIP_MENU(10200, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Inscription - pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Jewelcrafting - pPlayer->SEND_POI(9484.32, -6874.98, 7, 6, 0, "Aleinia"); - pPlayer->SEND_GOSSIP_MENU(10203, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Sathein"); - pPlayer->SEND_GOSSIP_MENU(10204, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_GOSSIP_MENU(10205, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Mathreyn"); - pPlayer->SEND_GOSSIP_MENU(10206, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(8680.36, -6327.51, 7, 6, 0, "Sempstress Ambershine"); - pPlayer->SEND_GOSSIP_MENU(10207, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_eversong(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_eversong end - *******************************************************/ - -CreatureAI* GetAI_guard_eversong(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_exodar start - *******************************************************/ - -bool GossipHello_guard_exodar(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction house - pPlayer->SEND_POI(-4023.6, -11739.3, 7, 6, 0, "Exodar Auction House"); - pPlayer->SEND_GOSSIP_MENU(9528, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-3923.89, -11544.5, 7, 6, 0, "Exodar Bank"); - pPlayer->SEND_GOSSIP_MENU(9529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(-4092.57, -11626.5, 7, 6, 0, "Exodar Guild Master"); - pPlayer->SEND_GOSSIP_MENU(9539, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Hippogryph master - pPlayer->SEND_POI(-4060.46, -11787.1, 7, 6, 0, "Exodar Hippogryph Master"); - pPlayer->SEND_GOSSIP_MENU(9530, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Inn - pPlayer->SEND_POI(-3741.87, -11695.1, 7, 6, 0, "Exodar Inn"); - pPlayer->SEND_GOSSIP_MENU(9545, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox - pPlayer->SEND_POI(-3972.5, -11696.0, 7, 6, 0, "Mailbox"); - pPlayer->SEND_GOSSIP_MENU(10254, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Stable master - pPlayer->SEND_POI(-3786.5, -11702.5, 7, 6, 0, "Stable Master Arthaid"); - pPlayer->SEND_GOSSIP_MENU(9558, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer - pPlayer->SEND_POI(-4215.68, -11628.9, 7, 6, 0, "Weapon Master Handiir"); - pPlayer->SEND_GOSSIP_MENU(9565, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(9533, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); - pPlayer->SEND_GOSSIP_MENU(9555, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Alterac Valley Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-3998.9, -11345.2, 7, 6, 0, "Arathi Basin Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //A - pPlayer->SEND_POI(-3759.27, -11695.63, 7, 6, 0, "Miglik Blotstrom"); - pPlayer->SEND_GOSSIP_MENU(10223, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //EOS - pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Eye Of The Storm Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //WSG - pPlayer->SEND_POI(-3977.5, -11381.2, 7, 6, 0, "Warsong Gulch Battlemaster"); - pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-4276.0, -11495, 7, 6, 0, "Exodar Druid Trainer"); - pPlayer->SEND_GOSSIP_MENU(9534, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-4210.6, -11575.2, 7, 6, 0, "Exodar Hunter Trainer"); - pPlayer->SEND_GOSSIP_MENU(9544, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(-4057.32, -11556.5, 7, 6, 0, "Exodar Mage Trainer"); - pPlayer->SEND_GOSSIP_MENU(9550, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(-4191.2, -11470.4, 7, 6, 0, "Exodar Paladin Trainer"); - pPlayer->SEND_GOSSIP_MENU(9553, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-3969.63, -11482.8, 7, 6, 0, "Exodar Priest Trainer"); - pPlayer->SEND_GOSSIP_MENU(9554, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Shaman - pPlayer->SEND_POI(-3805.5, -11380.7, 7, 6, 0, "Exodar Shaman Trainer"); - pPlayer->SEND_GOSSIP_MENU(9556, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-4189.43, -11653.7, 7, 6, 0, "Exodar Warrior Trainer"); - pPlayer->SEND_GOSSIP_MENU(9562, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Alchemy Trainer"); - pPlayer->SEND_GOSSIP_MENU(9527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-4229.5, -11706, 7, 6, 0, "Exodar Blacksmithing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9532, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-3798.3, -11651.7, 7, 6, 0, "Exodar Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-3889.3, -11495, 7, 6, 0, "Exodar Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9535, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-4257.68, -11640.3, 7, 6, 0, "Exodar Engineering Trainer"); - pPlayer->SEND_GOSSIP_MENU(9536, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-3769.5, -11479.6, 7, 6, 0, "Exodar First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(9537, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-3725.5, -11385.2, 7, 6, 0, "Exodar Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9538, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Herbalist Trainer"); - pPlayer->SEND_GOSSIP_MENU(9543, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting - pPlayer->SEND_POI(-3783, -11546, 7, 6, 0, "Exodar Jewelcrafting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9547, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking - pPlayer->SEND_POI(-4140.6, -11776.7, 7, 6, 0, "Exodar Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9549, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Mining - pPlayer->SEND_POI(-4228, -11697, 7, 6, 0, "Exodar Mining Trainer"); - pPlayer->SEND_GOSSIP_MENU(9552, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Skinning - pPlayer->SEND_POI(-4134.97, -11760.5, 7, 6, 0, "Exodar Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(9557, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring - pPlayer->SEND_POI(-4092.5, -11744.5, 7, 6, 0, "Exodar Tailor Trainer"); - pPlayer->SEND_GOSSIP_MENU(9559, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_exodar(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_exodar end - *******************************************************/ - -CreatureAI* GetAI_guard_exodar(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_ironforge start - *******************************************************/ - -bool GossipHello_guard_ironforge(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_IRONFORGE_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(2760, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction House - pPlayer->SEND_POI(-4957.39, -911.6, 7, 6, 0, "Ironforge Auction House"); - pPlayer->SEND_GOSSIP_MENU(3014, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-4891.91, -991.47, 7, 6, 0, "The Vault"); - pPlayer->SEND_GOSSIP_MENU(2761, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Tram - pPlayer->SEND_POI(-4835.27, -1294.69, 7, 6, 0, "Deeprun Tram"); - pPlayer->SEND_GOSSIP_MENU(3814, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Gryphon Master - pPlayer->SEND_POI(-4821.52, -1152.3, 7, 6, 0, "Ironforge Gryphon Master"); - pPlayer->SEND_GOSSIP_MENU(2762, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Guild Master - pPlayer->SEND_POI(-5021, -996.45, 7, 6, 0, "Ironforge Visitor's Center"); - pPlayer->SEND_GOSSIP_MENU(2764, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Inn - pPlayer->SEND_POI(-4850.47, -872.57, 7, 6, 0, "Stonefire Tavern"); - pPlayer->SEND_GOSSIP_MENU(2768, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox - pPlayer->SEND_POI(-4845.7, -880.55, 7, 6, 0, "Ironforge Mailbox"); - pPlayer->SEND_GOSSIP_MENU(2769, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master - pPlayer->SEND_POI(-5010.2, -1262, 7, 6, 0, "Ulbrek Firehand"); - pPlayer->SEND_GOSSIP_MENU(5986, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Weapons Trainer - pPlayer->SEND_POI(-5040, -1201.88, 7, 6, 0, "Bixi and Buliwyf"); - pPlayer->SEND_GOSSIP_MENU(4518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Class Trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Profession Trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(2793, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-5047.87, -1263.77, 7, 6, 0, "Glordrum Steelbeard"); - pPlayer->SEND_GOSSIP_MENU(7483, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-5038.37, -1266.39, 7, 6, 0, "Donal Osgood"); - pPlayer->SEND_GOSSIP_MENU(7649, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(-5037.24, -1274.82, 7, 6, 0, "Lylandris"); - pPlayer->SEND_GOSSIP_MENU(7528, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(-5023, -1253.68, 7, 6, 0, "Hall of Arms"); - pPlayer->SEND_GOSSIP_MENU(2770, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); - pPlayer->SEND_GOSSIP_MENU(2771, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Paladin - pPlayer->SEND_POI(-4627.02, -926.45, 7, 6, 0, "Hall of Mysteries"); - pPlayer->SEND_GOSSIP_MENU(2773, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Priest - pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); - pPlayer->SEND_GOSSIP_MENU(2772, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Rogue - pPlayer->SEND_POI(-4647.83, -1124, 7, 6, 0, "Ironforge Rogue Trainer"); - pPlayer->SEND_GOSSIP_MENU(2774, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(-4605, -1110.45, 7, 6, 0, "Ironforge Warlock Trainer"); - pPlayer->SEND_GOSSIP_MENU(2775, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(-5023.08, -1253.68, 7, 6, 0, "Hall of Arms"); - pPlayer->SEND_GOSSIP_MENU(2776, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Shaman - pPlayer->SEND_POI(-4732, -1147, 7, 6, 0, "Ironforge Shaman Trainer"); - //incorrect id - pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-4858.5, -1241.83, 7, 6, 0, "Berryfizz's Potions and Mixed Drinks"); - pPlayer->SEND_GOSSIP_MENU(2794, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-4796.97, -1110.17, 7, 6, 0, "The Great Forge"); - pPlayer->SEND_GOSSIP_MENU(2795, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-4767.83, -1184.59, 7, 6, 0, "The Bronze Kettle"); - pPlayer->SEND_GOSSIP_MENU(2796, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-4803.72, -1196.53, 7, 6, 0, "Thistlefuzz Arcanery"); - pPlayer->SEND_GOSSIP_MENU(2797, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-4799.56, -1250.23, 7, 6, 0, "Springspindle's Gadgets"); - pPlayer->SEND_GOSSIP_MENU(2798, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-4881.6, -1153.13, 7, 6, 0, "Ironforge Physician"); - pPlayer->SEND_GOSSIP_MENU(2799, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-4597.91, -1091.93, 7, 6, 0, "Traveling Fisherman"); - pPlayer->SEND_GOSSIP_MENU(2800, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-4876.9, -1151.92, 7, 6, 0, "Ironforge Physician"); - pPlayer->SEND_GOSSIP_MENU(2801, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-4807.02, -1194.43, 7, 6, 0, "Elise Brightletter"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); - pPlayer->SEND_GOSSIP_MENU(2802, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Minning - pPlayer->SEND_POI(-4705.06, -1116.43, 7, 6, 0, "Deepmountain Mining Guild"); - pPlayer->SEND_GOSSIP_MENU(2804, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); - pPlayer->SEND_GOSSIP_MENU(2805, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(-4719.60, -1056.96, 7, 6, 0, "Stonebrow's Clothier"); - pPlayer->SEND_GOSSIP_MENU(2807, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_ironforge end - *******************************************************/ - -CreatureAI* GetAI_guard_ironforge(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_mulgore start - *******************************************************/ - -bool GossipHello_guard_mulgore(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4051, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider - pPlayer->SEND_GOSSIP_MENU(4052, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(-2361.38, -349.19, 7, 6, 0, "Bloodhoof Village Inn"); - pPlayer->SEND_GOSSIP_MENU(4053, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable master - pPlayer->SEND_POI(-2338.86, -357.56, 7, 6, 0, "Seikwa"); - pPlayer->SEND_GOSSIP_MENU(5976, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->SEND_GOSSIP_MENU(4069, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(4070, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(-2312.15, -443.69, 7, 6, 0, "Gennia Runetotem"); - pPlayer->SEND_GOSSIP_MENU(4054, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(-2178.14, -406.14, 7, 6, 0, "Yaw Sharpmane"); - pPlayer->SEND_GOSSIP_MENU(4055, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Shaman - pPlayer->SEND_POI(-2301.5, -439.87, 7, 6, 0, "Narm Skychaser"); - pPlayer->SEND_GOSSIP_MENU(4056, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Warrior - pPlayer->SEND_POI(-2345.43, -494.11, 7, 6, 0, "Krang Stonehoof"); - pPlayer->SEND_GOSSIP_MENU(4057, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_GOSSIP_MENU(4058, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_GOSSIP_MENU(4059, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2263.34, -287.91, 7, 6, 0, "Pyall Silentstride"); - pPlayer->SEND_GOSSIP_MENU(4060, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_GOSSIP_MENU(4061, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-2353.52, -355.82, 7, 6, 0, "Vira Younghoof"); - pPlayer->SEND_GOSSIP_MENU(4062, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Fishing - pPlayer->SEND_POI(-2349.21, -241.37, 7, 6, 0, "Uthan Stillwater"); - pPlayer->SEND_GOSSIP_MENU(4063, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism - pPlayer->SEND_GOSSIP_MENU(4064, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_POI(-2257.12, -288.63, 7, 6, 0, "Chaw Stronghide"); - pPlayer->SEND_GOSSIP_MENU(4065, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_GOSSIP_MENU(4066, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_POI(-2252.94, -291.32, 7, 6, 0, "Yonn Deepcut"); - pPlayer->SEND_GOSSIP_MENU(4067, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4068, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_mulgore end - *******************************************************/ - -CreatureAI* GetAI_guard_mulgore(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_orgrimmar start - *******************************************************/ - -bool GossipHello_guard_orgrimmar(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); - - return true; -} - -void SendDefaultMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(1631.51, -4375.33, 7, 6, 0, "Bank of Orgrimmar"); - pPlayer->SEND_GOSSIP_MENU(2554, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //wind rider - pPlayer->SEND_POI(1676.6, -4332.72, 7, 6, 0, "The Sky Tower"); - pPlayer->SEND_GOSSIP_MENU(2555, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //guild master - pPlayer->SEND_POI(1576.93, -4294.75, 7, 6, 0, "Horde Embassy"); - pPlayer->SEND_GOSSIP_MENU(2556, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(1644.51, -4447.27, 7, 6, 0, "Orgrimmar Inn"); - pPlayer->SEND_GOSSIP_MENU(2557, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //mailbox - pPlayer->SEND_POI(1622.53, -4388.79, 7, 6, 0, "Orgrimmar Mailbox"); - pPlayer->SEND_GOSSIP_MENU(2558, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //auction house - pPlayer->SEND_POI(1679.21, -4450.1, 7, 6, 0, "Orgrimmar Auction House"); - pPlayer->SEND_GOSSIP_MENU(3075, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //zeppelin - pPlayer->SEND_POI(1337.36, -4632.7, 7, 6, 0, "Orgrimmar Zeppelin Tower"); - pPlayer->SEND_GOSSIP_MENU(3173, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //weapon master - pPlayer->SEND_POI(2092.56, -4823.95, 7, 6, 0, "Sayoc & Hanashi"); - pPlayer->SEND_GOSSIP_MENU(4519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //stable master - pPlayer->SEND_POI(2133.12, -4663.93, 7, 6, 0, "Xon'cha"); - pPlayer->SEND_GOSSIP_MENU(5974, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //officers lounge - pPlayer->SEND_POI(1633.56, -4249.37, 7, 6, 0, "Hall of Legends"); - pPlayer->SEND_GOSSIP_MENU(7046, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(2599, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(2594, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(7484, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(7644, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(7520, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Hunter - pPlayer->SEND_POI(2114.84, -4625.31, 7, 6, 0, "Orgrimmar Hunter's Hall"); - pPlayer->SEND_GOSSIP_MENU(2559, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Mage - pPlayer->SEND_POI(1451.26, -4223.33, 7, 6, 0, "Darkbriar Lodge"); - pPlayer->SEND_GOSSIP_MENU(2560, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(1442.21, -4183.24, 7, 6, 0, "Spirit Lodge"); - pPlayer->SEND_GOSSIP_MENU(2561, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Shaman - pPlayer->SEND_POI(1925.34, -4181.89, 7, 6, 0, "Thrall's Fortress"); - pPlayer->SEND_GOSSIP_MENU(2562, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Rogue - pPlayer->SEND_POI(1773.39, -4278.97, 7, 6, 0, "Shadowswift Brotherhood"); - pPlayer->SEND_GOSSIP_MENU(2563, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Warlock - pPlayer->SEND_POI(1849.57, -4359.68, 7, 6, 0, "Darkfire Enclave"); - pPlayer->SEND_GOSSIP_MENU(2564, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warrior - pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); - pPlayer->SEND_GOSSIP_MENU(2565, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Paladin - pPlayer->SEND_POI(1906.65, -4134.26, 7, 6, 0, "Valley of Wisdom"); - pPlayer->SEND_GOSSIP_MENU(10843, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(1955.17, -4475.79, 7, 6, 0, "Yelmak's Alchemy and Potions"); - pPlayer->SEND_GOSSIP_MENU(2497, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(2054.34, -4831.85, 7, 6, 0, "The Burning Anvil"); - pPlayer->SEND_GOSSIP_MENU(2499, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(1780.96, -4481.31, 7, 6, 0, "Borstan's Firepit"); - pPlayer->SEND_GOSSIP_MENU(2500, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(1917.5, -4434.95, 7, 6, 0, "Godan's Runeworks"); - pPlayer->SEND_GOSSIP_MENU(2501, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(2038.45, -4744.75, 7, 6, 0, "Nogg's Machine Shop"); - pPlayer->SEND_GOSSIP_MENU(2653, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(1485.21, -4160.91, 7, 6, 0, "Survival of the Fittest"); - pPlayer->SEND_GOSSIP_MENU(2502, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(1994.15, -4655.7, 7, 6, 0, "Lumak's Fishing"); - pPlayer->SEND_GOSSIP_MENU(2503, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(1898.61, -4454.93, 7, 6, 0, "Jandi's Arboretum"); - pPlayer->SEND_GOSSIP_MENU(2504, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(1839.02, -4465.97, 7, 6, 0, "Jo'mah"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); - pPlayer->SEND_GOSSIP_MENU(2513, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_POI(2029.79, -4704, 7, 6, 0, "Red Canyon Mining"); - pPlayer->SEND_GOSSIP_MENU(2515, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); - pPlayer->SEND_GOSSIP_MENU(2516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(1802.66, -4560.66, 7, 6, 0, "Magar's Cloth Goods"); - pPlayer->SEND_GOSSIP_MENU(2518, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_orgrimmar end - *******************************************************/ - -CreatureAI* GetAI_guard_orgrimmar(Creature* pCreature) -{ - return new guardAI_orgrimmar (pCreature); -} - -/******************************************************* - * guard_shattrath start - *******************************************************/ - -bool GossipHello_guard_shattrath(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - - return true; -} - -void SendDefaultMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Tavern - pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); - pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10379, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10382, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Flight master - pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Flight Master"); - pPlayer->SEND_GOSSIP_MENU(10385, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->SEND_GOSSIP_MENU(10386, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEALDOR , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLESCYERS , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10387, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Profession master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom - pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); - pPlayer->SEND_GOSSIP_MENU(10503, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab - pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMALDOR , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMSCYERS , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(10697, pCreature->GetGUID()); - break; - } -} - -void SendBankMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); - pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); - pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); - } -} - -void SendInnMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); - pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); - pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); - } -} - -void SendMailboxMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: - pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); - pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); - pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); - pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: - pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); - pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); - break; - } -} - -void SendStableMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable"); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-2170, 5404, 7, 6, 0, "Scyers Stable"); - pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); - } -} - -void SendBattleMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: - pPlayer->SEND_POI(-1774, 5251, 7, 6, 0, "Alliance Battlemasters"); - pPlayer->SEND_GOSSIP_MENU(10389, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: - pPlayer->SEND_POI(-1963, 5263, 7, 6, 0, "Horde Battlemasters"); - pPlayer->SEND_GOSSIP_MENU(10390, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: - pPlayer->SEND_POI(-1960, 5175, 7, 6, 0, "Arena Battlemasters"); - pPlayer->SEND_GOSSIP_MENU(12510, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); - pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); - pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); - pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); - pPlayer->SEND_GOSSIP_MENU(10395, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); - pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting - pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); - pPlayer->SEND_GOSSIP_MENU(10397, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking - pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); - pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Skinning - pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); - pPlayer->SEND_GOSSIP_MENU(10398, pCreature->GetGUID()); - break; - } -} - -void SendGemMerchantMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10698, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(-2193, 5424.5, 7, 6, 0, "Scyers Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10699, pCreature->GetGUID()); - } -} - -bool GossipSelect_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BANK: SendBankMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_STABLEMASTER: SendStableMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_GEMMERCHANT: SendGemMerchantMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_MAILBOX: SendMailboxMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_shattrath end - *******************************************************/ - -CreatureAI* GetAI_guard_shattrath(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_shattrath_aldor - *******************************************************/ - -#define SPELL_BANISHED_SHATTRATH_A 36642 -#define SPELL_BANISHED_SHATTRATH_S 36671 -#define SPELL_BANISH_TELEPORT 36643 -#define SPELL_EXILE 39533 - -struct TRINITY_DLL_DECL guard_shattrath_aldorAI : public guardAI -{ - guard_shattrath_aldorAI(Creature *c) : guardAI(c) {} - - uint32 Exile_Timer; - uint32 Banish_Timer; - uint64 PlayerGUID; - bool CanTeleport; - - void Reset() - { - Banish_Timer = 5000; - Exile_Timer = 8500; - PlayerGUID = 0; - CanTeleport = false; - } - - void EnterCombat(Unit *who) {} - - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - - if (CanTeleport) - { - if (Exile_Timer < diff) - { - if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) - { - temp->CastSpell(temp,SPELL_EXILE,true); - temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); - } - PlayerGUID = 0; - Exile_Timer = 8500; - CanTeleport = false; - }else Exile_Timer -= diff; - } - else if (Banish_Timer < diff) - { - Unit* temp = m_creature->getVictim(); - if (temp && temp->GetTypeId() == TYPEID_PLAYER) - { - DoCast(temp,SPELL_BANISHED_SHATTRATH_A); - Banish_Timer = 9000; - PlayerGUID = temp->GetGUID(); - if (PlayerGUID) - CanTeleport = true; - } - }else Banish_Timer -= diff; - - DoMeleeAttackIfReady(); - } -}; - -bool GossipHello_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Tavern - pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); - pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); - pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); - pPlayer->SEND_GOSSIP_MENU(10525, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Flight master - pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); - pPlayer->SEND_GOSSIP_MENU(10402, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(0, 0, 7, 6, 0, "Aldor Mailbox"); - //unknown - pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable Master"); - pPlayer->SEND_GOSSIP_MENU(10527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Profession master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom - pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); - pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab - pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); - pPlayer->SEND_GOSSIP_MENU(10696, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant - pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10411, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); - pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); - pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); - pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); - pPlayer->SEND_GOSSIP_MENU(10528, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); - pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting - pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); - pPlayer->SEND_GOSSIP_MENU(10529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking - pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); - pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Skinning - pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); - pPlayer->SEND_GOSSIP_MENU(10419, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_shattrath_aldor end - *******************************************************/ - -CreatureAI* GetAI_guard_shattrath_aldor(Creature* pCreature) -{ - return new guard_shattrath_aldorAI (pCreature); -} - -/******************************************************* - * guard_shattrath_scryer - *******************************************************/ - -struct TRINITY_DLL_DECL guard_shattrath_scryerAI : public guardAI -{ - guard_shattrath_scryerAI(Creature *c) : guardAI(c) {} - - uint32 Exile_Timer; - uint32 Banish_Timer; - uint64 PlayerGUID; - bool CanTeleport; - - void Reset() - { - Banish_Timer = 5000; - Exile_Timer = 8500; - PlayerGUID = 0; - CanTeleport = false; - } - - void EnterCombat(Unit *who) {} - - void UpdateAI(const uint32 diff) - { - if (!UpdateVictim()) - return; - - if (CanTeleport) - { - if (Exile_Timer < diff) - { - if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) - { - temp->CastSpell(temp,SPELL_EXILE,true); - temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); - } - PlayerGUID = 0; - Exile_Timer = 8500; - CanTeleport = false; - }else Exile_Timer -= diff; - } - else if (Banish_Timer < diff) - { - Unit* temp = m_creature->getVictim(); - if (temp && temp->GetTypeId() == TYPEID_PLAYER) - { - DoCast(temp,SPELL_BANISHED_SHATTRATH_S); - Banish_Timer = 9000; - PlayerGUID = temp->GetGUID(); - if (PlayerGUID) - CanTeleport = true; - } - }else Banish_Timer -= diff; - - DoMeleeAttackIfReady(); - } -}; - -bool GossipHello_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(10430, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Tavern - pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); - pPlayer->SEND_GOSSIP_MENU(10431, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-1996.6, 5363.7, 7, 6, 0, "Scryer Bank"); - pPlayer->SEND_GOSSIP_MENU(10432, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(-2176.6, 5405.8, 7, 6, 0, "Scryer Inn"); - pPlayer->SEND_GOSSIP_MENU(10433, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Flight master - pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); - pPlayer->SEND_GOSSIP_MENU(10435, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(-2174.3, 5411.4, 7, 6, 0, "Scryer Mailbox"); - pPlayer->SEND_GOSSIP_MENU(10436, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->SEND_POI(-2169.9, 5405.1, 7, 6, 0, "Scryer Stable Master"); - pPlayer->SEND_GOSSIP_MENU(10437, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(10438, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Profession master - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->SEND_GOSSIP_MENU(10504, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom - pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); - pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab - pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); - pPlayer->SEND_GOSSIP_MENU(10701, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant - pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Scryer Gem Merchant"); - pPlayer->SEND_GOSSIP_MENU(10702, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); - pPlayer->SEND_GOSSIP_MENU(10516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); - pPlayer->SEND_GOSSIP_MENU(10517, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); - pPlayer->SEND_GOSSIP_MENU(10518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); - pPlayer->SEND_GOSSIP_MENU(10519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //First Aid - pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); - pPlayer->SEND_GOSSIP_MENU(10520, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting - pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); - pPlayer->SEND_GOSSIP_MENU(10521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking - pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); - pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Skinning - pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); - pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_shattrath_scryer end - *******************************************************/ - -CreatureAI* GetAI_guard_shattrath_scryer(Creature* pCreature) -{ - return new guard_shattrath_scryerAI (pCreature); -} - -/******************************************************* - * guard_silvermoon start - *******************************************************/ - -bool GossipHello_guard_silvermoon(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction house - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_1 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_2 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(9317, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(9808.4, -7488.16, 7, 6, 0, "Silvermoon Bank"); - pPlayer->SEND_GOSSIP_MENU(9322, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(9474.97, -7345.21, 7, 6, 0, "Tandrine"); - pPlayer->SEND_GOSSIP_MENU(9324, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_1 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_2 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->SEND_GOSSIP_MENU(9602, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(9658.33, -7492.17, 7, 6, 0, "Silvermoon Mailbox"); - pPlayer->SEND_GOSSIP_MENU(9326, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Stable master - pPlayer->SEND_POI(9904.95, -7404.31, 7, 6, 0, "Shalenn"); - pPlayer->SEND_GOSSIP_MENU(9327, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Weapon trainer - pPlayer->SEND_POI(9841.17, -7505.13, 7, 6, 0, "Ileda"); - pPlayer->SEND_GOSSIP_MENU(9328, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Wind master - pPlayer->SEND_POI(9378.45, -7163.94, 7, 6, 0, "Silvermoon Wind Master"); - pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(9331, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); - pPlayer->SEND_GOSSIP_MENU(9338, pCreature->GetGUID()); - break; - } -} - -void SendAuctionhouseMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(9644.47, -7140.22, 7, 6, 0, "Western Auction House"); - pPlayer->SEND_GOSSIP_MENU(9318, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(9683.27, -7521.22, 7, 6, 0, "Royal Exchange Auction House"); - pPlayer->SEND_GOSSIP_MENU(9319, pCreature->GetGUID()); - } -} - -void SendInnMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) - { - pPlayer->SEND_POI(9677.7, -7368, 7, 6, 0, "Silvermoon City Inn"); - pPlayer->SEND_GOSSIP_MENU(9325, pCreature->GetGUID()); - } - if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) - { - pPlayer->SEND_POI(9561.1, -7517.5, 7, 6, 0, "Wayfarer's Rest tavern"); - pPlayer->SEND_GOSSIP_MENU(9603, pCreature->GetGUID()); - } -} - -void SendBattleMasterMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(9850.49, -7572.26, 7, 6, 0, "Gurak"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //A - pPlayer->SEND_POI(9850.6, -7559.25, 7, 6, 0, "Bipp Glizzitor"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //EOS - pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //WSG - pPlayer->SEND_POI(9845.45, -7562.58, 7, 6, 0, "Krukk"); - pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(9700.55, -7262.57, 7, 6, 0, "Harene Plainwalker"); - pPlayer->SEND_GOSSIP_MENU(9330, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(9927.48, -7426.14, 7, 6, 0, "Zandine"); - pPlayer->SEND_GOSSIP_MENU(9332, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Mage - pPlayer->SEND_POI(9995.07, -7118.17, 7, 6, 0, "Quithas"); - pPlayer->SEND_GOSSIP_MENU(9333, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Paladin - pPlayer->SEND_POI(9850.22, -7516.93, 7, 6, 0, "Champion Bachi"); - pPlayer->SEND_GOSSIP_MENU(9334, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(9926.79, -7066.66, 7, 6, 0, "Belestra"); - pPlayer->SEND_GOSSIP_MENU(9335, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Rogue - pPlayer->SEND_POI(9739.88, -7374.33, 7, 6, 0, "Zelanis"); - pPlayer->SEND_GOSSIP_MENU(9336, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Warlock - pPlayer->SEND_POI(9787.57, -7284.63, 7, 6, 0, "Alamma"); - pPlayer->SEND_GOSSIP_MENU(9337, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(9998.09, -7214.36, 7, 6, 0, "Silvermoon Alchemy Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(9841.43, -7361.53, 7, 6, 0, "Silvermoon Blacksmithing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9340, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(9577.26, -7243.6, 7, 6, 0, "Silvermoon Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(9962.57, -7246.18, 7, 6, 0, "Silvermoon Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9341, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(9820.18, -7329.56, 7, 6, 0, "Silvermoon Engineering Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(9579.8, -7343.71, 7, 6, 0, "Silvermoon First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(9602.73, -7328.3, 7, 6, 0, "Silvermoon Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(10004.4, -7216.86, 7, 6, 0, "Silvermoon Herbalism Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting - pPlayer->SEND_POI(9553.54, -7506.43, 7, 6, 0, "Silvermoon Jewelcrafting Trainer"); - pPlayer->SEND_GOSSIP_MENU(9346, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking - pPlayer->SEND_POI(9503.72, -7430.16, 7, 6, 0, "Silvermoon Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(9347, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Mining - pPlayer->SEND_POI(9805.1, -7355.56, 7, 6, 0, "Silvermoon Mining Trainer"); - pPlayer->SEND_GOSSIP_MENU(9348, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Skinning - pPlayer->SEND_POI(9513.37, -7429.4, 7, 6, 0, "Silvermoon Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring - pPlayer->SEND_POI(9750.55, -7095.28, 7, 6, 0, "Silvermoon Tailor"); - pPlayer->SEND_GOSSIP_MENU(9350, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_AUCTIONHOUSE: SendAuctionhouseMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_silvermoon end - *******************************************************/ - -CreatureAI* GetAI_guard_silvermoon(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_stormwind start - *******************************************************/ - -bool GossipHello_guard_stormwind(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STORMWIND_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Auction House - pPlayer->SEND_POI(-8811.46, 667.46, 7, 6, 0, "Stormwind Auction House"); - pPlayer->SEND_GOSSIP_MENU(3834, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bank - pPlayer->SEND_POI(-8916.87, 622.87, 7, 6, 0, "Stormwind Bank"); - pPlayer->SEND_GOSSIP_MENU(764, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Deeprun tram - pPlayer->SEND_POI(-8378.88, 554.23, 7, 6, 0, "The Deeprun Tram"); - pPlayer->SEND_GOSSIP_MENU(3813, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(-8869.0, 675.4, 7, 6, 0, "The Gilded Rose"); - pPlayer->SEND_GOSSIP_MENU(3860, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Gryphon Master - pPlayer->SEND_POI(-8837.0, 493.5, 7, 6, 0, "Stormwind Gryphon Master"); - pPlayer->SEND_GOSSIP_MENU(879, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Guild Master - pPlayer->SEND_POI(-8894.0, 611.2, 7, 6, 0, "Stormwind Vistor`s Center"); - pPlayer->SEND_GOSSIP_MENU(882, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox - pPlayer->SEND_POI(-8876.48, 649.18, 7, 6, 0, "Stormwind Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3861, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master - pPlayer->SEND_POI(-8433.0, 554.7, 7, 6, 0, "Jenova Stoneshield"); - pPlayer->SEND_GOSSIP_MENU(5984, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Weapon Trainer - pPlayer->SEND_POI(-8797.0, 612.8, 7, 6, 0, "Woo Ping"); - pPlayer->SEND_GOSSIP_MENU(4516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Officers Lounge - pPlayer->SEND_POI(-8759.92, 399.69, 7, 6, 0, "Champions` Hall"); - pPlayer->SEND_GOSSIP_MENU(7047, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Battlemasters - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7499, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Class trainers - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->SEND_GOSSIP_MENU(898, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Profession trainers - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(918, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Thelman Slatefist"); - pPlayer->SEND_GOSSIP_MENU(7500, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Lady Hoteshem"); - pPlayer->SEND_GOSSIP_MENU(7650, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Elfarran"); - pPlayer->SEND_GOSSIP_MENU(7501, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Mage - pPlayer->SEND_POI(-9012.0, 867.6, 7, 6, 0, "Wizard`s Sanctum"); - pPlayer->SEND_GOSSIP_MENU(899, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Rogue - pPlayer->SEND_POI(-8753.0, 367.8, 7, 6, 0, "Stormwind - Rogue House"); - pPlayer->SEND_GOSSIP_MENU(900, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Warrior - pPlayer->SEND_POI(-8690.11, 324.85, 7, 6, 0, "Command Center"); - pPlayer->SEND_GOSSIP_MENU(901, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Druid - pPlayer->SEND_POI(-8751.0, 1124.5, 7, 6, 0, "The Park"); - pPlayer->SEND_GOSSIP_MENU(902, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Priest - pPlayer->SEND_POI(-8512.0, 862.4, 7, 6, 0, "Catedral Of Light"); - pPlayer->SEND_GOSSIP_MENU(903, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Paladin - pPlayer->SEND_POI(-8577.0, 881.7, 7, 6, 0, "Catedral Of Light"); - pPlayer->SEND_GOSSIP_MENU(904, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Hunter - pPlayer->SEND_POI(-8413.0, 541.5, 7, 6, 0, "Hunter Lodge"); - pPlayer->SEND_GOSSIP_MENU(905, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Warlock - pPlayer->SEND_POI(-8948.91, 998.35, 7, 6, 0, "The Slaughtered Lamb"); - pPlayer->SEND_GOSSIP_MENU(906, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Shaman - pPlayer->SEND_POI(-9033, 550, 7, 6, 0, "Valley Of Heroes"); - //incorrect id - pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(-8988.0, 759.60, 7, 6, 0, "Alchemy Needs"); - pPlayer->SEND_GOSSIP_MENU(919, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(-8424.0, 616.9, 7, 6, 0, "Therum Deepforge"); - pPlayer->SEND_GOSSIP_MENU(920, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(-8611.0, 364.6, 7, 6, 0, "Pig and Whistle Tavern"); - pPlayer->SEND_GOSSIP_MENU(921, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(-8858.0, 803.7, 7, 6, 0, "Lucan Cordell"); - pPlayer->SEND_GOSSIP_MENU(941, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(-8347.0, 644.1, 7, 6, 0, "Lilliam Sparkspindle"); - pPlayer->SEND_GOSSIP_MENU(922, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(-8513.0, 801.8, 7, 6, 0, "Shaina Fuller"); - pPlayer->SEND_GOSSIP_MENU(923, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(-8803.0, 767.5, 7, 6, 0, "Arnold Leland"); - pPlayer->SEND_GOSSIP_MENU(940, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(-8967.0, 779.5, 7, 6, 0, "Alchemy Needs"); - pPlayer->SEND_GOSSIP_MENU(924, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); - pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(-8726.0, 477.4, 7, 6, 0, "The Protective Hide"); - pPlayer->SEND_GOSSIP_MENU(925, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_POI(-8434.0, 692.8, 7, 6, 0, "Gelman Stonehand"); - pPlayer->SEND_GOSSIP_MENU(927, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(-8716.0, 469.4, 7, 6, 0, "The Protective Hide"); - pPlayer->SEND_GOSSIP_MENU(928, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(-8938.0, 800.7, 7, 6, 0, "Duncan`s Textiles"); - pPlayer->SEND_GOSSIP_MENU(929, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_stormwind end - *******************************************************/ - -CreatureAI* GetAI_guard_stormwind(Creature* pCreature) -{ - return new guardAI_stormwind (pCreature); -} - -/******************************************************* - * guard_teldrassil start - *******************************************************/ - -bool GossipHello_guard_teldrassil(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FERRY , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->SEND_GOSSIP_MENU(4316, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4317, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Rut`theran - pPlayer->SEND_GOSSIP_MENU(4318, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_GOSSIP_MENU(4319, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(9821.49, 960.13, 7, 6, 0, "Dolanaar Inn"); - pPlayer->SEND_GOSSIP_MENU(4320, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //stable master - pPlayer->SEND_POI(9808.37, 931.1, 7, 6, 0, "Seriadne"); - pPlayer->SEND_GOSSIP_MENU(5982, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Druid - pPlayer->SEND_POI(9741.58, 963.7, 7, 6, 0, "Kal"); - pPlayer->SEND_GOSSIP_MENU(4323, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Hunter - pPlayer->SEND_POI(9815.12, 926.28, 7, 6, 0, "Dazalar"); - pPlayer->SEND_GOSSIP_MENU(4324, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Priest - pPlayer->SEND_POI(9906.16, 986.63, 7, 6, 0, "Laurna Morninglight"); - pPlayer->SEND_GOSSIP_MENU(4325, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Rogue - pPlayer->SEND_POI(9789, 942.86, 7, 6, 0, "Jannok Breezesong"); - pPlayer->SEND_GOSSIP_MENU(4326, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(9821.96, 950.61, 7, 6, 0, "Kyra Windblade"); - pPlayer->SEND_GOSSIP_MENU(4327, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(9767.59, 878.81, 7, 6, 0, "Cyndra Kindwhisper"); - pPlayer->SEND_GOSSIP_MENU(4329, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Cooking - pPlayer->SEND_POI(9751.19, 906.13, 7, 6, 0, "Zarrin"); - pPlayer->SEND_GOSSIP_MENU(4330, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting - pPlayer->SEND_POI(10677.59, 1946.56, 7, 6, 0, "Alanna Raveneye"); - pPlayer->SEND_GOSSIP_MENU(4331, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //First Aid - pPlayer->SEND_POI(9903.12, 999, 7, 6, 0, "Byancie"); - pPlayer->SEND_GOSSIP_MENU(4332, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Fishing - pPlayer->SEND_GOSSIP_MENU(4333, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism - pPlayer->SEND_POI(9773.78, 875.88, 7, 6, 0, "Malorne Bladeleaf"); - pPlayer->SEND_GOSSIP_MENU(4334, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking - pPlayer->SEND_POI(10152.59, 1681.46, 7, 6, 0, "Nadyia Maneweaver"); - pPlayer->SEND_GOSSIP_MENU(4335, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Skinning - pPlayer->SEND_POI(10135.59, 1673.18, 7, 6, 0, "Radnaal Maneweaver"); - pPlayer->SEND_GOSSIP_MENU(4336, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring - pPlayer->SEND_GOSSIP_MENU(4337, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_teldrassil end - *******************************************************/ - -CreatureAI* GetAI_guard_teldrassil(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_tirisfal start - *******************************************************/ - -bool GossipHello_guard_tirisfal(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->SEND_GOSSIP_MENU(4097, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_GOSSIP_MENU(4074, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //bat handler - pPlayer->SEND_GOSSIP_MENU(4075, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Inn - pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Gallows` End Tavern"); - pPlayer->SEND_GOSSIP_MENU(4076, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master - pPlayer->SEND_POI(2267.66, 319.32, 7, 6, 0, "Morganus"); - pPlayer->SEND_GOSSIP_MENU(5978, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); - pPlayer->SEND_GOSSIP_MENU(4096, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Mage - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Cain Firesong"); - pPlayer->SEND_GOSSIP_MENU(4077, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Priest - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Dark Cleric Beryl"); - pPlayer->SEND_GOSSIP_MENU(4078, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Rogue - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Marion Call"); - pPlayer->SEND_GOSSIP_MENU(4079, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Warlock - pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Rupert Boch"); - pPlayer->SEND_GOSSIP_MENU(4080, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(2256.48, 240.32, 7, 6, 0, "Austil de Mon"); - pPlayer->SEND_GOSSIP_MENU(4081, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(2263.25, 344.23, 7, 6, 0, "Carolai Anise"); - pPlayer->SEND_GOSSIP_MENU(4082, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_GOSSIP_MENU(4083, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_GOSSIP_MENU(4084, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(2250.35, 249.12, 7, 6, 0, "Vance Undergloom"); - pPlayer->SEND_GOSSIP_MENU(4085, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_GOSSIP_MENU(4086, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Nurse Neela"); - pPlayer->SEND_GOSSIP_MENU(4087, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(2292.37, -10.72, 7, 6, 0, "Clyde Kellen"); - pPlayer->SEND_GOSSIP_MENU(4088, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(2268.21, 331.69, 7, 6, 0, "Faruza"); - pPlayer->SEND_GOSSIP_MENU(4089, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Inscription - pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking - pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Shelene Rhobart"); - pPlayer->SEND_GOSSIP_MENU(4090, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Mining - pPlayer->SEND_GOSSIP_MENU(4091, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Skinning - pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Rand Rhobart"); - pPlayer->SEND_GOSSIP_MENU(4092, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring - pPlayer->SEND_POI(2160.45, 659.93, 7, 6, 0, "Bowen Brisboise"); - pPlayer->SEND_GOSSIP_MENU(4093, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_tirisfal end - *******************************************************/ - -CreatureAI* GetAI_guard_tirisfal(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * guard_undercity start - *******************************************************/ - -bool GossipHello_guard_undercity(Player* pPlayer, Creature* pCreature) -{ - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); - return true; -} - -void SendDefaultMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Bank - pPlayer->SEND_POI(1595.64, 232.45, 7, 6, 0, "Undercity Bank"); - pPlayer->SEND_GOSSIP_MENU(3514, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Bat handler - pPlayer->SEND_POI(1565.9, 271.43, 7, 6, 0, "Undercity Bat Handler"); - pPlayer->SEND_GOSSIP_MENU(3515, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Guild master - pPlayer->SEND_POI(1594.17, 205.57, 7, 6, 0, "Undercity Guild Master"); - pPlayer->SEND_GOSSIP_MENU(3516, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Inn - pPlayer->SEND_POI(1639.43, 220.99, 7, 6, 0, "Undercity Inn"); - pPlayer->SEND_GOSSIP_MENU(3517, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox - pPlayer->SEND_POI(1632.68, 219.4, 7, 6, 0, "Undercity Mailbox"); - pPlayer->SEND_GOSSIP_MENU(3518, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //Auction House - pPlayer->SEND_POI(1647.9, 258.49, 7, 6, 0, "Undercity Auction House"); - pPlayer->SEND_GOSSIP_MENU(3519, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Zeppelin - pPlayer->SEND_POI(2059, 274.86, 7, 6, 0, "Undercity Zeppelin"); - pPlayer->SEND_GOSSIP_MENU(3520, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Weapon Master - pPlayer->SEND_POI(1670.31, 324.66, 7, 6, 0, "Archibald"); - pPlayer->SEND_GOSSIP_MENU(4521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Stable master - pPlayer->SEND_POI(1634.18, 226.76, 7, 6, 0, "Anya Maulray"); - pPlayer->SEND_GOSSIP_MENU(5979, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Class trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Profession trainer - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); - pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); - break; - } -} - -void SendBattleMasterMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //AV - pPlayer->SEND_POI(1329, 333.92, 7, 6, 0, "Grizzle Halfmane"); - pPlayer->SEND_GOSSIP_MENU(7525, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //AB - pPlayer->SEND_POI(1283.3, 287.16, 7, 6, 0, "Sir Malory Wheeler"); - pPlayer->SEND_GOSSIP_MENU(7646, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //WSG - pPlayer->SEND_POI(1265, 351.18, 7, 6, 0, "Kurden Bloodclaw"); - pPlayer->SEND_GOSSIP_MENU(7526, pCreature->GetGUID()); - break; - } -} - -void SendClassTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Mage - pPlayer->SEND_POI(1781, 53, 7, 6, 0, "Undercity Mage Trainers"); - pPlayer->SEND_GOSSIP_MENU(3513, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Priest - pPlayer->SEND_POI(1758.33, 401.5, 7, 6, 0, "Undercity Priest Trainers"); - pPlayer->SEND_GOSSIP_MENU(3521, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Rogue - pPlayer->SEND_POI(1418.56, 65, 7, 6, 0, "Undercity Rogue Trainers"); - pPlayer->SEND_GOSSIP_MENU(3524, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Warlock - pPlayer->SEND_POI(1780.92, 53.16, 7, 6, 0, "Undercity Warlock Trainers"); - pPlayer->SEND_GOSSIP_MENU(3526, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Warrior - pPlayer->SEND_POI(1775.59, 418.19, 7, 6, 0, "Undercity Warrior Trainers"); - pPlayer->SEND_GOSSIP_MENU(3527, pCreature->GetGUID()); - break; - } -} - -void SendProfTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) -{ - switch (uiAction) - { - case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy - pPlayer->SEND_POI(1419.82, 417.19, 7, 6, 0, "The Apothecarium"); - pPlayer->SEND_GOSSIP_MENU(3528, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing - pPlayer->SEND_POI(1696, 285, 7, 6, 0, "Undercity Blacksmithing Trainer"); - pPlayer->SEND_GOSSIP_MENU(3529, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 3: //Cooking - pPlayer->SEND_POI(1596.34, 274.68, 7, 6, 0, "Undercity Cooking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3530, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting - pPlayer->SEND_POI(1488.54, 280.19, 7, 6, 0, "Undercity Enchanting Trainer"); - pPlayer->SEND_GOSSIP_MENU(3531, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 5: //Engineering - pPlayer->SEND_POI(1408.58, 143.43, 7, 6, 0, "Undercity Engineering Trainer"); - pPlayer->SEND_GOSSIP_MENU(3532, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 6: //First Aid - pPlayer->SEND_POI(1519.65, 167.19, 7, 6, 0, "Undercity First Aid Trainer"); - pPlayer->SEND_GOSSIP_MENU(3533, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 7: //Fishing - pPlayer->SEND_POI(1679.9, 89, 7, 6, 0, "Undercity Fishing Trainer"); - pPlayer->SEND_GOSSIP_MENU(3534, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism - pPlayer->SEND_POI(1558, 349.36, 7, 6, 0, "Undercity Herbalism Trainer"); - pPlayer->SEND_GOSSIP_MENU(3535, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking - pPlayer->SEND_POI(1498.76, 196.43, 7, 6, 0, "Undercity Leatherworking Trainer"); - pPlayer->SEND_GOSSIP_MENU(3536, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 10: //Mining - pPlayer->SEND_POI(1642.88, 335.58, 7, 6, 0, "Undercity Mining Trainer"); - pPlayer->SEND_GOSSIP_MENU(3537, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 11: //Skinning - pPlayer->SEND_POI(1498.6, 196.46, 7, 6, 0, "Undercity Skinning Trainer"); - pPlayer->SEND_GOSSIP_MENU(3538, pCreature->GetGUID()); - break; - case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring - pPlayer->SEND_POI(1689.55, 193, 7, 6, 0, "Undercity Tailoring Trainer"); - pPlayer->SEND_GOSSIP_MENU(3539, pCreature->GetGUID()); - break; - } -} - -bool GossipSelect_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - switch (uiSender) - { - case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_undercity(pPlayer, pCreature, uiAction); break; - } - return true; -} - -/******************************************************* - * guard_undercity end - *******************************************************/ - -CreatureAI* GetAI_guard_undercity(Creature* pCreature) -{ - return new guardAI (pCreature); -} - -/******************************************************* - * AddSC - *******************************************************/ - -void AddSC_guards() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="guard_azuremyst"; - newscript->pGossipHello = &GossipHello_guard_azuremyst; - newscript->pGossipSelect = &GossipSelect_guard_azuremyst; - newscript->GetAI = &GetAI_guard_azuremyst; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_bluffwatcher"; - newscript->pGossipHello = &GossipHello_guard_bluffwatcher; - newscript->pGossipSelect = &GossipSelect_guard_bluffwatcher; - newscript->GetAI = &GetAI_guard_bluffwatcher; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_contested"; - newscript->GetAI = &GetAI_guard_contested; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_darnassus"; - newscript->pGossipHello = &GossipHello_guard_darnassus; - newscript->pGossipSelect = &GossipSelect_guard_darnassus; - newscript->GetAI = &GetAI_guard_darnassus; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_dunmorogh"; - newscript->pGossipHello = &GossipHello_guard_dunmorogh; - newscript->pGossipSelect = &GossipSelect_guard_dunmorogh; - newscript->GetAI = &GetAI_guard_dunmorogh; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_durotar"; - newscript->pGossipHello = &GossipHello_guard_durotar; - newscript->pGossipSelect = &GossipSelect_guard_durotar; - newscript->GetAI = &GetAI_guard_durotar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_elwynnforest"; - newscript->pGossipHello = &GossipHello_guard_elwynnforest; - newscript->pGossipSelect = &GossipSelect_guard_elwynnforest; - newscript->GetAI = &GetAI_guard_elwynnforest; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_eversong"; - newscript->pGossipHello = &GossipHello_guard_eversong; - newscript->pGossipSelect = &GossipSelect_guard_eversong; - newscript->GetAI = &GetAI_guard_eversong; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_exodar"; - newscript->pGossipHello = &GossipHello_guard_exodar; - newscript->pGossipSelect = &GossipSelect_guard_exodar; - newscript->GetAI = &GetAI_guard_exodar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_ironforge"; - newscript->pGossipHello = &GossipHello_guard_ironforge; - newscript->pGossipSelect = &GossipSelect_guard_ironforge; - newscript->GetAI = &GetAI_guard_ironforge; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_mulgore"; - newscript->pGossipHello = &GossipHello_guard_mulgore; - newscript->pGossipSelect = &GossipSelect_guard_mulgore; - newscript->GetAI = &GetAI_guard_mulgore; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_orgrimmar"; - newscript->pGossipHello = &GossipHello_guard_orgrimmar; - newscript->pGossipSelect = &GossipSelect_guard_orgrimmar; - newscript->GetAI = &GetAI_guard_orgrimmar; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_shattrath"; - newscript->pGossipHello = &GossipHello_guard_shattrath; - newscript->pGossipSelect = &GossipSelect_guard_shattrath; - newscript->GetAI = &GetAI_guard_shattrath; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_shattrath_aldor"; - newscript->GetAI = &GetAI_guard_shattrath_aldor; - newscript->pGossipHello = &GossipHello_guard_shattrath_aldor; - newscript->pGossipSelect = &GossipSelect_guard_shattrath_aldor; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_shattrath_scryer"; - newscript->GetAI = &GetAI_guard_shattrath_scryer; - newscript->pGossipHello = &GossipHello_guard_shattrath_scryer; - newscript->pGossipSelect = &GossipSelect_guard_shattrath_scryer; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_silvermoon"; - newscript->pGossipHello = &GossipHello_guard_silvermoon; - newscript->pGossipSelect = &GossipSelect_guard_silvermoon; - newscript->GetAI = &GetAI_guard_silvermoon; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_stormwind"; - newscript->pGossipHello = &GossipHello_guard_stormwind; - newscript->pGossipSelect = &GossipSelect_guard_stormwind; - newscript->GetAI = &GetAI_guard_stormwind; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_teldrassil"; - newscript->pGossipHello = &GossipHello_guard_teldrassil; - newscript->pGossipSelect = &GossipSelect_guard_teldrassil; - newscript->GetAI = &GetAI_guard_teldrassil; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_tirisfal"; - newscript->pGossipHello = &GossipHello_guard_tirisfal; - newscript->pGossipSelect = &GossipSelect_guard_tirisfal; - newscript->GetAI = &GetAI_guard_tirisfal; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="guard_undercity"; - newscript->pGossipHello = &GossipHello_guard_undercity; - newscript->pGossipSelect = &GossipSelect_guard_undercity; - newscript->GetAI = &GetAI_guard_undercity; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/world/guards.cpp b/src/bindings/scripts/scripts/world/guards.cpp new file mode 100644 index 00000000000..fa5592f7c32 --- /dev/null +++ b/src/bindings/scripts/scripts/world/guards.cpp @@ -0,0 +1,4110 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Guards +SD%Complete: 100 +SDComment: All Guard gossip data, quite some npc_text-id's still missing, adding constantly as new id's are known. CombatAI should be organized better for future. +SDCategory: Guards +EndScriptData */ + +/* ContentData +guard_azuremyst +guard_bluffwatcher +guard_contested +guard_darnassus +guard_dunmorogh +guard_durotar +guard_elwynnforest +guard_eversong +guard_exodar +guard_ironforge +guard_mulgore +guard_orgrimmar +guard_shattrath +guard_shattrath_aldor +guard_shattrath_scryer +guard_silvermoon +guard_stormwind +guard_teldrassil +guard_tirisfal +guard_undercity +EndContentData */ + +#include "precompiled.h" +#include "guard_ai.h" + +//script spesific action +#define GOSSIP_ACTION_TAVERN 101 +#define GOSSIP_ACTION_GEMMERCHANT 102 +#define GOSSIP_ACTION_MANALOOM 103 + +//script spesific sender +#define GOSSIP_SENDER_SEC_GEMMERCHANT 101 +#define GOSSIP_SENDER_SEC_AUCTIONHOUSE 102 + +//script spesific gossip text +#define GOSSIP_TEXT_TAVERN "Worlds End Tavern" +#define GOSSIP_TEXT_BANKSCYERS "Scyers bank" +#define GOSSIP_TEXT_BANKALDOR "Aldor Bank" +#define GOSSIP_TEXT_INNSCYERS "Scyers Inn" +#define GOSSIP_TEXT_INNALDOR "Aldor Inn" +#define GOSSIP_TEXT_STABLESCYERS "Scyers Stable" +#define GOSSIP_TEXT_STABLEALDOR "Aldor Stable" +#define GOSSIP_TEXT_BATTLEMASTERALLIANCE "Alliance Battlemasters" +#define GOSSIP_TEXT_BATTLEMASTERHORDE "Horde Battlemasters" +#define GOSSIP_TEXT_BATTLEMASTERARENA "Arena Battlemasters" +#define GOSSIP_TEXT_MANALOOM "Mana Loom" +#define GOSSIP_TEXT_ALCHEMYLAB "Alchemy Lab" +#define GOSSIP_TEXT_GEMMERCHANT "Gem Merchant" +#define GOSSIP_TEXT_GEMSCYERS "Scyers Gem Merchant" +#define GOSSIP_TEXT_GEMALDOR "Aldor Gem Merchant" + +#define GOSSIP_TEXT_AH_SILVERMOON_1 "Western Auction House" +#define GOSSIP_TEXT_AH_SILVERMOON_2 "Royal Exchange Auction House" + +#define GOSSIP_TEXT_INN_SILVERMOON_1 "Silvermoon City Inn" +#define GOSSIP_TEXT_INN_SILVERMOON_2 "Wayfarer's Rest tavern" + +/******************************************************* + * guard_azuremyst start + *******************************************************/ + +bool GossipHello_guard_azuremyst(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(10066, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(-3918.95, -11544.7, 7, 6, 0, "Bank"); + pPlayer->SEND_GOSSIP_MENU(10067, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hippogryph Master + pPlayer->SEND_POI(-4057.15, -11788.6, 7, 6, 0, "Stephanos"); + pPlayer->SEND_GOSSIP_MENU(10071, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(-4092.43, -11626.6, 7, 6, 0, "Funaam"); + pPlayer->SEND_GOSSIP_MENU(10073, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-4129.43, -12469, 7, 6, 0, "Caregiver Chellan"); + pPlayer->SEND_GOSSIP_MENU(10074, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master + pPlayer->SEND_POI(-4146.42, -12492.7, 7, 6, 0, "Esbina"); + pPlayer->SEND_GOSSIP_MENU(10075, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(10076, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); + pPlayer->SEND_GOSSIP_MENU(10087, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-4274.81, -11495.3, 7, 6, 0, "Shalannius"); + pPlayer->SEND_GOSSIP_MENU(10077, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-4203.65, -12526.5, 7, 6, 0, "Acteon"); + pPlayer->SEND_GOSSIP_MENU(10078, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-4149.62, -12530.1, 7, 6, 0, "Semid"); + pPlayer->SEND_GOSSIP_MENU(10081, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(-4138.98, -12468.5, 7, 6, 0, "Tullas"); + pPlayer->SEND_GOSSIP_MENU(10083, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-4131.66, -12478.6, 7, 6, 0, "Guvan"); + pPlayer->SEND_GOSSIP_MENU(10084, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Shaman + pPlayer->SEND_POI(-4162.33, -12456.1, 7, 6, 0, "Tuluun"); + pPlayer->SEND_GOSSIP_MENU(10085, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-4165.05, -12536.4, 7, 6, 0, "Ruada"); + pPlayer->SEND_GOSSIP_MENU(10086, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-4191.15, -12470, 7, 6, 0, "Daedal"); + pPlayer->SEND_GOSSIP_MENU(10088, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-4726.29, -12387, 7, 6, 0, "Blacksmith Calypso"); + pPlayer->SEND_GOSSIP_MENU(10089, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-4710.87, -12400.6, 7, 6, 0, "'Cookie' McWeaksauce"); + pPlayer->SEND_GOSSIP_MENU(10090, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-3882.85, -11496.7, 7, 6, 0, "Nahogg"); + pPlayer->SEND_GOSSIP_MENU(10091, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-4157.57, -12470.2, 7, 6, 0, "Artificer Daelo"); + pPlayer->SEND_GOSSIP_MENU(10092, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-4199.11, -12469.9, 7, 6, 0, "Anchorite Fateema"); + pPlayer->SEND_GOSSIP_MENU(10093, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-4266.38, -12985.1, 7, 6, 0, "Diktynna"); + pPlayer->SEND_GOSSIP_MENU(10094, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_GOSSIP_MENU(10095, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting + pPlayer->SEND_POI(-3781.55, -11541.8, 7, 6, 0, "Farii"); + pPlayer->SEND_GOSSIP_MENU(10096, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking + pPlayer->SEND_POI(-3442.68, -12322.2, 7, 6, 0, "Moordo"); + pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Mining + pPlayer->SEND_POI(-4179.89, -12493.1, 7, 6, 0, "Dulvi"); + pPlayer->SEND_GOSSIP_MENU(10097, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Skinning + pPlayer->SEND_POI(-3431.17, -12316.5, 7, 6, 0, "Gurf"); + pPlayer->SEND_GOSSIP_MENU(10098, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring + pPlayer->SEND_POI(-4711.54, -12386.7, 7, 6, 0, "Erin Kelly"); + pPlayer->SEND_GOSSIP_MENU(10099, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_azuremyst(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_azuremyst(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_azuremyst end + *******************************************************/ + +CreatureAI* GetAI_guard_azuremyst(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_bluffwatcher start + *******************************************************/ + +bool GossipHello_guard_bluffwatcher(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(-1257.8, 24.14, 7, 6, 0, "Thunder Bluff Bank"); + pPlayer->SEND_GOSSIP_MENU(1292, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Wind master + pPlayer->SEND_POI(-1196.43, 28.26, 7, 6, 0, "Wind Rider Roost"); + pPlayer->SEND_GOSSIP_MENU(1293, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(-1296.5, 127.57, 7, 6, 0, "Thunder Bluff Civic Information"); + pPlayer->SEND_GOSSIP_MENU(1291, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-1296, 39.7, 7, 6, 0, "Thunder Bluff Inn"); + pPlayer->SEND_GOSSIP_MENU(3153, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(-1263.59, 44.36, 7, 6, 0, "Thunder Bluff Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3154, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Auction House + pPlayer->SEND_POI(1381.77, -4371.16, 7, 6, 0, GOSSIP_TEXT_AUCTIONHOUSE); + pPlayer->SEND_GOSSIP_MENU(3155, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Weapon master + pPlayer->SEND_POI(-1282.31, 89.56, 7, 6, 0, "Ansekhwa"); + pPlayer->SEND_GOSSIP_MENU(4520, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Stable master + pPlayer->SEND_POI(-1270.19, 48.84, 7, 6, 0, "Bulrug"); + pPlayer->SEND_GOSSIP_MENU(5977, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-1387.82, -97.55, 7, 6, 0, "Taim Ragetotem"); + pPlayer->SEND_GOSSIP_MENU(7522, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-997, 214.12, 7, 6, 0, "Martin Lindsey"); + pPlayer->SEND_GOSSIP_MENU(7648, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(-1384.94, -75.91, 7, 6, 0, "Kergul Bloodaxe"); + pPlayer->SEND_GOSSIP_MENU(7523, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-1054.47, -285, 7, 6, 0, "Hall of Elders"); + pPlayer->SEND_GOSSIP_MENU(1294, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); + pPlayer->SEND_GOSSIP_MENU(1295, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); + pPlayer->SEND_GOSSIP_MENU(1296, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Priest + pPlayer->SEND_POI(-1061.2, 195.5, 7, 6, 0, "Pools of Vision"); + pPlayer->SEND_GOSSIP_MENU(1297, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Shaman + pPlayer->SEND_POI(-989.54, 278.25, 7, 6, 0, "Hall of Spirits"); + pPlayer->SEND_GOSSIP_MENU(1298, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warrior + pPlayer->SEND_POI(-1416.32, -114.28, 7, 6, 0, "Hunter's Hall"); + pPlayer->SEND_GOSSIP_MENU(1299, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1085.56, 27.29, 7, 6, 0, "Bena's Alchemy"); + pPlayer->SEND_GOSSIP_MENU(1332, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1239.75, 104.88, 7, 6, 0, "Karn's Smithy"); + pPlayer->SEND_GOSSIP_MENU(1333, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-1214.5, -21.23, 7, 6, 0, "Aska's Kitchen"); + pPlayer->SEND_GOSSIP_MENU(1334, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-1112.65, 48.26, 7, 6, 0, "Dawnstrider Enchanters"); + pPlayer->SEND_GOSSIP_MENU(1335, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-996.58, 200.5, 7, 6, 0, "Spiritual Healing"); + pPlayer->SEND_GOSSIP_MENU(1336, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Fishing + pPlayer->SEND_POI(-1169.35, -68.87, 7, 6, 0, "Mountaintop Bait & Tackle"); + pPlayer->SEND_GOSSIP_MENU(1337, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism + pPlayer->SEND_POI(-1137.7, -1.51, 7, 6, 0, "Holistic Herbalism"); + pPlayer->SEND_GOSSIP_MENU(1338, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Inscription + pPlayer->SEND_POI(-1000.26, 209.52, 7, 6, 0, "Poshken Hardbinder"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); + pPlayer->SEND_GOSSIP_MENU(1339, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_POI(-1249.17, 155, 7, 6, 0, "Stonehoof Geology"); + pPlayer->SEND_GOSSIP_MENU(1340, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_POI(-1148.56, 51.18, 7, 6, 0, "Mooranta"); + pPlayer->SEND_GOSSIP_MENU(1343, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_POI(-1156.22, 66.86, 7, 6, 0, "Thunder Bluff Armorers"); + pPlayer->SEND_GOSSIP_MENU(1341, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_bluffwatcher(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_bluffwatcher(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_bluffwatcher end + *******************************************************/ + +CreatureAI* GetAI_guard_bluffwatcher(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_contested start + *******************************************************/ + +CreatureAI* GetAI_guard_contested(Creature* pCreature) +{ + return new guardAI (pCreature); +} +/******************************************************* + * guard_contested end + *******************************************************/ + +/******************************************************* + * guard_darnassus start + *******************************************************/ + +bool GossipHello_guard_darnassus(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(3016, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction house + pPlayer->SEND_POI(9861.23, 2334.55, 7, 6, 0, "Darnassus Auction House"); + pPlayer->SEND_GOSSIP_MENU(3833, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(9938.45, 2512.35, 7, 6, 0, "Darnassus Bank"); + pPlayer->SEND_GOSSIP_MENU(3017, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Wind master + pPlayer->SEND_POI(9945.65, 2618.94, 7, 6, 0, "Rut'theran Village"); + pPlayer->SEND_GOSSIP_MENU(3018, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Guild master + pPlayer->SEND_POI(10076.40, 2199.59, 7, 6, 0, "Darnassus Guild Master"); + pPlayer->SEND_GOSSIP_MENU(3019, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Inn + pPlayer->SEND_POI(10133.29, 2222.52, 7, 6, 0, "Darnassus Inn"); + pPlayer->SEND_GOSSIP_MENU(3020, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox + pPlayer->SEND_POI(9942.17, 2495.48, 7, 6, 0, "Darnassus Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3021, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Stable master + pPlayer->SEND_POI(10167.20, 2522.66, 7, 6, 0, "Alassin"); + pPlayer->SEND_GOSSIP_MENU(5980, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer + pPlayer->SEND_POI(9907.11, 2329.70, 7, 6, 0, "Ilyenia Moonfire"); + pPlayer->SEND_GOSSIP_MENU(4517, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(9923.61, 2327.43, 7, 6, 0, "Brogun Stoneshield"); + pPlayer->SEND_GOSSIP_MENU(7518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(9977.37, 2324.39, 7, 6, 0, "Keras Wolfheart"); + pPlayer->SEND_GOSSIP_MENU(7651, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(9979.84, 2315.79, 7, 6, 0, "Aethalas"); + pPlayer->SEND_GOSSIP_MENU(7482, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(10186, 2570.46, 7, 6, 0, "Darnassus Druid Trainer"); + pPlayer->SEND_GOSSIP_MENU(3024, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(10177.29, 2511.10, 7, 6, 0, "Darnassus Hunter Trainer"); + pPlayer->SEND_GOSSIP_MENU(3023, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(9659.12, 2524.88, 7, 6, 0, "Temple of the Moon"); + pPlayer->SEND_GOSSIP_MENU(3025, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Rogue + pPlayer->SEND_POI(10122, 2599.12, 7, 6, 0, "Darnassus Rogue Trainer"); + pPlayer->SEND_GOSSIP_MENU(3026, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(9951.91, 2280.38, 7, 6, 0, "Warrior's Terrace"); + pPlayer->SEND_GOSSIP_MENU(3033, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(10075.90, 2356.76, 7, 6, 0, "Darnassus Alchemy Trainer"); + pPlayer->SEND_GOSSIP_MENU(3035, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Cooking + pPlayer->SEND_POI(10088.59, 2419.21, 7, 6, 0, "Darnassus Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3036, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting + pPlayer->SEND_POI(10146.09, 2313.42, 7, 6, 0, "Darnassus Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(3337, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //First Aid + pPlayer->SEND_POI(10150.09, 2390.43, 7, 6, 0, "Darnassus First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(3037, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Fishing + pPlayer->SEND_POI(9836.20, 2432.17, 7, 6, 0, "Darnassus Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(3038, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism + pPlayer->SEND_POI(9757.17, 2430.16, 7, 6, 0, "Darnassus Herbalism Trainer"); + pPlayer->SEND_GOSSIP_MENU(3039, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Inscription + pPlayer->SEND_POI(10139.00, 2343.31, 7, 6, 0, "Feyden Darkin"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking + pPlayer->SEND_POI(10086.59, 2255.77, 7, 6, 0, "Darnassus Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3040, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Skinning + pPlayer->SEND_POI(10081.40, 2257.18, 7, 6, 0, "Darnassus Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(3042, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring + pPlayer->SEND_POI(10079.70, 2268.19, 7, 6, 0, "Darnassus Tailor"); + pPlayer->SEND_GOSSIP_MENU(3044, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_darnassus(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_darnassus(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_darnassus end + *******************************************************/ + +CreatureAI* GetAI_guard_darnassus(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_dunmorogh start + *******************************************************/ + +bool GossipHello_guard_dunmorogh(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4287, pCreature->GetGUID()); + + return true; +} + +void SendDefaultMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4288, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master + pPlayer->SEND_GOSSIP_MENU(4289, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_GOSSIP_MENU(4290, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-5582.66, -525.89, 7, 6, 0, "Thunderbrew Distillery"); + pPlayer->SEND_GOSSIP_MENU(4291, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master + pPlayer->SEND_POI(-5604, -509.58, 7, 6, 0, "Shelby Stoneflint"); + pPlayer->SEND_GOSSIP_MENU(5985, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(4300, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(-5618.29, -454.25, 7, 6, 0, "Grif Wildheart"); + pPlayer->SEND_GOSSIP_MENU(4293, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Magis Sparkmantle"); + pPlayer->SEND_GOSSIP_MENU(4294, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Paladin + pPlayer->SEND_POI(-5585.6, -539.99, 7, 6, 0, "Azar Stronghammer"); + pPlayer->SEND_GOSSIP_MENU(4295, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Priest + pPlayer->SEND_POI(-5591.74, -525.61, 7, 6, 0, "Maxan Anvol"); + pPlayer->SEND_GOSSIP_MENU(4296, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Rogue + pPlayer->SEND_POI(-5602.75, -542.4, 7, 6, 0, "Hogral Bakkan"); + pPlayer->SEND_GOSSIP_MENU(4297, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(-5641.97, -523.76, 7, 6, 0, "Gimrizz Shadowcog"); + pPlayer->SEND_GOSSIP_MENU(4298, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-5604.79, -529.38, 7, 6, 0, "Granis Swiftaxe"); + pPlayer->SEND_GOSSIP_MENU(4299, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_GOSSIP_MENU(4301, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-5584.72, -428.41, 7, 6, 0, "Tognus Flintfire"); + pPlayer->SEND_GOSSIP_MENU(4302, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-5596.85, -541.43, 7, 6, 0, "Gremlock Pilsnor"); + pPlayer->SEND_GOSSIP_MENU(4303, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4304, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Bronk Guzzlegear"); + pPlayer->SEND_GOSSIP_MENU(4305, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-5603.67, -523.57, 7, 6, 0, "Thamner Pol"); + pPlayer->SEND_GOSSIP_MENU(4306, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-5199.9, 58.58, 7, 6, 0, "Paxton Ganter"); + pPlayer->SEND_GOSSIP_MENU(4307, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_GOSSIP_MENU(4308, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_GOSSIP_MENU(4310, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_POI(-5531, -666.53, 7, 6, 0, "Yarr Hamerstone"); + pPlayer->SEND_GOSSIP_MENU(4311, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_GOSSIP_MENU(4312, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4313, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_dunmorogh(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_dunmorogh(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_dunmorogh end + *******************************************************/ + +CreatureAI* GetAI_guard_dunmorogh(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_durotar start + *******************************************************/ + +bool GossipHello_guard_durotar(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(4037, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4032, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider + pPlayer->SEND_GOSSIP_MENU(4033, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(338.7, -4688.87, 7, 6, 0, "Razor Hill Inn"); + pPlayer->SEND_GOSSIP_MENU(4034, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable master + pPlayer->SEND_POI(330.31, -4710.66, 7, 6, 0, "Shoja'my"); + pPlayer->SEND_GOSSIP_MENU(5973, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4035, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(4036, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(276, -4706.72, 7, 6, 0, "Thotar"); + pPlayer->SEND_GOSSIP_MENU(4013, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(-839.33, -4935.6, 7, 6, 0, "Un'Thuwa"); + pPlayer->SEND_GOSSIP_MENU(4014, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(296.22, -4828.1, 7, 6, 0, "Tai'jin"); + pPlayer->SEND_GOSSIP_MENU(4015, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Rogue + pPlayer->SEND_POI(265.76, -4709, 7, 6, 0, "Kaplak"); + pPlayer->SEND_GOSSIP_MENU(4016, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Shaman + pPlayer->SEND_POI(307.79, -4836.97, 7, 6, 0, "Swart"); + pPlayer->SEND_GOSSIP_MENU(4017, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(355.88, -4836.45, 7, 6, 0, "Dhugru Gorelust"); + pPlayer->SEND_GOSSIP_MENU(4018, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(312.3, -4824.66, 7, 6, 0, "Tarshaw Jaggedscar"); + pPlayer->SEND_GOSSIP_MENU(4019, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-800.25, -4894.33, 7, 6, 0, "Miao'zan"); + pPlayer->SEND_GOSSIP_MENU(4020, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(373.24, -4716.45, 7, 6, 0, "Dwukk"); + pPlayer->SEND_GOSSIP_MENU(4021, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_GOSSIP_MENU(4022, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4023, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(368.95, -4723.95, 7, 6, 0, "Mukdrak"); + pPlayer->SEND_GOSSIP_MENU(4024, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(327.17, -4825.62, 7, 6, 0, "Rawrk"); + pPlayer->SEND_GOSSIP_MENU(4025, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-1065.48, -4777.43, 7, 6, 0, "Lau'Tiki"); + pPlayer->SEND_GOSSIP_MENU(4026, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-836.25, -4896.89, 7, 6, 0, "Mishiki"); + pPlayer->SEND_GOSSIP_MENU(4027, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_GOSSIP_MENU(4028, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_POI(366.94, -4705, 7, 6, 0, "Krunn"); + pPlayer->SEND_GOSSIP_MENU(4029, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_GOSSIP_MENU(4030, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4031, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_durotar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_durotar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_durotar(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_durotar end + *******************************************************/ + +CreatureAI* GetAI_guard_durotar(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_elwynnforest start + *******************************************************/ + +bool GossipHello_guard_elwynnforest(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4260, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Gryphon master + pPlayer->SEND_GOSSIP_MENU(4261, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_GOSSIP_MENU(4262, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-9459.34, 42.08, 7, 6, 0, "Lion's Pride Inn"); + pPlayer->SEND_GOSSIP_MENU(4263, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Stable Master + pPlayer->SEND_POI(-9466.62, 45.87, 7, 6, 0, "Erma"); + pPlayer->SEND_GOSSIP_MENU(5983, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_GOSSIP_MENU(4265, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_GOSSIP_MENU(4266, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-9471.12, 33.44, 7, 6, 0, "Zaldimar Wefhellt"); + pPlayer->SEND_GOSSIP_MENU(4268, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(-9469, 108.05, 7, 6, 0, "Brother Wilhelm"); + pPlayer->SEND_GOSSIP_MENU(4269, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-9461.07, 32.6, 7, 6, 0, "Priestess Josetta"); + pPlayer->SEND_GOSSIP_MENU(4267, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Rogue + pPlayer->SEND_POI(-9465.13, 13.29, 7, 6, 0, "Keryn Sylvius"); + pPlayer->SEND_GOSSIP_MENU(4270, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warlock + pPlayer->SEND_POI(-9473.21, -4.08, 7, 6, 0, "Maximillian Crowe"); + pPlayer->SEND_GOSSIP_MENU(4272, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Warrior + pPlayer->SEND_POI(-9461.82, 109.50, 7, 6, 0, "Lyria Du Lac"); + pPlayer->SEND_GOSSIP_MENU(4271, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-9057.04, 153.63, 7, 6, 0, "Alchemist Mallory"); + pPlayer->SEND_GOSSIP_MENU(4274, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-9456.58, 87.90, 7, 6, 0, "Smith Argus"); + pPlayer->SEND_GOSSIP_MENU(4275, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-9467.54, -3.16, 7, 6, 0, "Tomas"); + pPlayer->SEND_GOSSIP_MENU(4276, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4277, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_GOSSIP_MENU(4278, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-9456.82, 30.49, 7, 6, 0, "Michelle Belle"); + pPlayer->SEND_GOSSIP_MENU(4279, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-9386.54, -118.73, 7, 6, 0, "Lee Brown"); + pPlayer->SEND_GOSSIP_MENU(4280, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-9060.70, 149.23, 7, 6, 0, "Herbalist Pomeroy"); + pPlayer->SEND_GOSSIP_MENU(4281, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Adele Fielder"); + pPlayer->SEND_GOSSIP_MENU(4282, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_GOSSIP_MENU(4283, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(-9536.91, -1212.76, 7, 6, 0, "Helene Peltskinner"); + pPlayer->SEND_GOSSIP_MENU(4284, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(-9376.12, -75.23, 7, 6, 0, "Eldrin"); + pPlayer->SEND_GOSSIP_MENU(4285, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_elwynnforest(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_elwynnforest(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_elwynnforest end + *******************************************************/ + +CreatureAI* GetAI_guard_elwynnforest(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_eversong start + *******************************************************/ + +bool GossipHello_guard_eversong(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bat Handler + pPlayer->SEND_POI(9371.93, -7164.80, 7, 6, 0, "Skymistress Gloaming"); + pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Guild master + pPlayer->SEND_GOSSIP_MENU(10182, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(9483.74, -6844.58, 7, 6, 0, "Delaniel's inn"); + pPlayer->SEND_GOSSIP_MENU(10183, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master + pPlayer->SEND_POI(9489.62, -6829.93, 7, 6, 0, "Anathos"); + pPlayer->SEND_GOSSIP_MENU(10184, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(10180, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_GOSSIP_MENU(10185, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(9527.44, -6865.25, 7, 6, 0, "Hannovia"); + pPlayer->SEND_GOSSIP_MENU(10186, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(9464.24, -6855.52, 7, 6, 0, "Garridel"); + pPlayer->SEND_GOSSIP_MENU(10187, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(9517.61, -6871.04, 7, 6, 0, "Noellene"); + pPlayer->SEND_GOSSIP_MENU(10189, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(9467.39, -6845.72, 7, 6, 0, "Ponaris"); + pPlayer->SEND_GOSSIP_MENU(10190, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Rogue + pPlayer->SEND_POI(9533.67, -6877.39, 7, 6, 0, "Tannaria"); + pPlayer->SEND_GOSSIP_MENU(10191, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warlock + pPlayer->SEND_POI(9468.99, -6865.60, 7, 6, 0, "Celoenus"); + pPlayer->SEND_GOSSIP_MENU(10192, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(8659.90, -6368.12, 7, 6, 0, "Arcanist Sheynathren"); + pPlayer->SEND_GOSSIP_MENU(10193, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(8984.21, -7419.21, 7, 6, 0, "Arathel Sunforge"); + pPlayer->SEND_GOSSIP_MENU(10194, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(9494.04, -6881.51, 7, 6, 0, "Quarelestra"); + pPlayer->SEND_GOSSIP_MENU(10195, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Engineering + pPlayer->SEND_GOSSIP_MENU(10197, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(9479.46, -6879.16, 7, 6, 0, "Kanaria"); + pPlayer->SEND_GOSSIP_MENU(10198, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Fishing + pPlayer->SEND_GOSSIP_MENU(10199, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism + pPlayer->SEND_POI(8678.92, -6329.09, 7, 6, 0, "Botanist Tyniarrel"); + pPlayer->SEND_GOSSIP_MENU(10200, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Inscription + pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Jewelcrafting + pPlayer->SEND_POI(9484.32, -6874.98, 7, 6, 0, "Aleinia"); + pPlayer->SEND_GOSSIP_MENU(10203, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Sathein"); + pPlayer->SEND_GOSSIP_MENU(10204, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_GOSSIP_MENU(10205, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(9362.04, -7130.33, 7, 6, 0, "Mathreyn"); + pPlayer->SEND_GOSSIP_MENU(10206, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(8680.36, -6327.51, 7, 6, 0, "Sempstress Ambershine"); + pPlayer->SEND_GOSSIP_MENU(10207, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_eversong(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_eversong(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_eversong(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_eversong end + *******************************************************/ + +CreatureAI* GetAI_guard_eversong(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_exodar start + *******************************************************/ + +bool GossipHello_guard_exodar(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HIPPOGRYPH , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction house + pPlayer->SEND_POI(-4023.6, -11739.3, 7, 6, 0, "Exodar Auction House"); + pPlayer->SEND_GOSSIP_MENU(9528, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-3923.89, -11544.5, 7, 6, 0, "Exodar Bank"); + pPlayer->SEND_GOSSIP_MENU(9529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(-4092.57, -11626.5, 7, 6, 0, "Exodar Guild Master"); + pPlayer->SEND_GOSSIP_MENU(9539, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Hippogryph master + pPlayer->SEND_POI(-4060.46, -11787.1, 7, 6, 0, "Exodar Hippogryph Master"); + pPlayer->SEND_GOSSIP_MENU(9530, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Inn + pPlayer->SEND_POI(-3741.87, -11695.1, 7, 6, 0, "Exodar Inn"); + pPlayer->SEND_GOSSIP_MENU(9545, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Mailbox + pPlayer->SEND_POI(-3972.5, -11696.0, 7, 6, 0, "Mailbox"); + pPlayer->SEND_GOSSIP_MENU(10254, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Stable master + pPlayer->SEND_POI(-3786.5, -11702.5, 7, 6, 0, "Stable Master Arthaid"); + pPlayer->SEND_GOSSIP_MENU(9558, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Weapon trainer + pPlayer->SEND_POI(-4215.68, -11628.9, 7, 6, 0, "Weapon Master Handiir"); + pPlayer->SEND_GOSSIP_MENU(9565, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(9533, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); + pPlayer->SEND_GOSSIP_MENU(9555, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Alterac Valley Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-3998.9, -11345.2, 7, 6, 0, "Arathi Basin Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //A + pPlayer->SEND_POI(-3759.27, -11695.63, 7, 6, 0, "Miglik Blotstrom"); + pPlayer->SEND_GOSSIP_MENU(10223, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //EOS + pPlayer->SEND_POI(-3978.1, -11357, 7, 6, 0, "Eye Of The Storm Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //WSG + pPlayer->SEND_POI(-3977.5, -11381.2, 7, 6, 0, "Warsong Gulch Battlemaster"); + pPlayer->SEND_GOSSIP_MENU(9531, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-4276.0, -11495, 7, 6, 0, "Exodar Druid Trainer"); + pPlayer->SEND_GOSSIP_MENU(9534, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-4210.6, -11575.2, 7, 6, 0, "Exodar Hunter Trainer"); + pPlayer->SEND_GOSSIP_MENU(9544, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(-4057.32, -11556.5, 7, 6, 0, "Exodar Mage Trainer"); + pPlayer->SEND_GOSSIP_MENU(9550, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(-4191.2, -11470.4, 7, 6, 0, "Exodar Paladin Trainer"); + pPlayer->SEND_GOSSIP_MENU(9553, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-3969.63, -11482.8, 7, 6, 0, "Exodar Priest Trainer"); + pPlayer->SEND_GOSSIP_MENU(9554, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Shaman + pPlayer->SEND_POI(-3805.5, -11380.7, 7, 6, 0, "Exodar Shaman Trainer"); + pPlayer->SEND_GOSSIP_MENU(9556, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-4189.43, -11653.7, 7, 6, 0, "Exodar Warrior Trainer"); + pPlayer->SEND_GOSSIP_MENU(9562, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Alchemy Trainer"); + pPlayer->SEND_GOSSIP_MENU(9527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-4229.5, -11706, 7, 6, 0, "Exodar Blacksmithing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9532, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-3798.3, -11651.7, 7, 6, 0, "Exodar Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9551, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-3889.3, -11495, 7, 6, 0, "Exodar Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9535, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-4257.68, -11640.3, 7, 6, 0, "Exodar Engineering Trainer"); + pPlayer->SEND_GOSSIP_MENU(9536, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-3769.5, -11479.6, 7, 6, 0, "Exodar First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(9537, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-3725.5, -11385.2, 7, 6, 0, "Exodar Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9538, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-4040.6, -11364.5, 7, 6, 0, "Exodar Herbalist Trainer"); + pPlayer->SEND_GOSSIP_MENU(9543, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-3881.63, -11488.59, 7, 6, 0, "Thoth"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting + pPlayer->SEND_POI(-3783, -11546, 7, 6, 0, "Exodar Jewelcrafting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9547, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking + pPlayer->SEND_POI(-4140.6, -11776.7, 7, 6, 0, "Exodar Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9549, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Mining + pPlayer->SEND_POI(-4228, -11697, 7, 6, 0, "Exodar Mining Trainer"); + pPlayer->SEND_GOSSIP_MENU(9552, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Skinning + pPlayer->SEND_POI(-4134.97, -11760.5, 7, 6, 0, "Exodar Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(9557, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring + pPlayer->SEND_POI(-4092.5, -11744.5, 7, 6, 0, "Exodar Tailor Trainer"); + pPlayer->SEND_GOSSIP_MENU(9559, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_exodar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_exodar(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_exodar end + *******************************************************/ + +CreatureAI* GetAI_guard_exodar(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_ironforge start + *******************************************************/ + +bool GossipHello_guard_ironforge(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_IRONFORGE_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(2760, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction House + pPlayer->SEND_POI(-4957.39, -911.6, 7, 6, 0, "Ironforge Auction House"); + pPlayer->SEND_GOSSIP_MENU(3014, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-4891.91, -991.47, 7, 6, 0, "The Vault"); + pPlayer->SEND_GOSSIP_MENU(2761, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Tram + pPlayer->SEND_POI(-4835.27, -1294.69, 7, 6, 0, "Deeprun Tram"); + pPlayer->SEND_GOSSIP_MENU(3814, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Gryphon Master + pPlayer->SEND_POI(-4821.52, -1152.3, 7, 6, 0, "Ironforge Gryphon Master"); + pPlayer->SEND_GOSSIP_MENU(2762, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Guild Master + pPlayer->SEND_POI(-5021, -996.45, 7, 6, 0, "Ironforge Visitor's Center"); + pPlayer->SEND_GOSSIP_MENU(2764, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Inn + pPlayer->SEND_POI(-4850.47, -872.57, 7, 6, 0, "Stonefire Tavern"); + pPlayer->SEND_GOSSIP_MENU(2768, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox + pPlayer->SEND_POI(-4845.7, -880.55, 7, 6, 0, "Ironforge Mailbox"); + pPlayer->SEND_GOSSIP_MENU(2769, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master + pPlayer->SEND_POI(-5010.2, -1262, 7, 6, 0, "Ulbrek Firehand"); + pPlayer->SEND_GOSSIP_MENU(5986, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Weapons Trainer + pPlayer->SEND_POI(-5040, -1201.88, 7, 6, 0, "Bixi and Buliwyf"); + pPlayer->SEND_GOSSIP_MENU(4518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Class Trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Profession Trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(2793, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-5047.87, -1263.77, 7, 6, 0, "Glordrum Steelbeard"); + pPlayer->SEND_GOSSIP_MENU(7483, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-5038.37, -1266.39, 7, 6, 0, "Donal Osgood"); + pPlayer->SEND_GOSSIP_MENU(7649, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(-5037.24, -1274.82, 7, 6, 0, "Lylandris"); + pPlayer->SEND_GOSSIP_MENU(7528, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(-5023, -1253.68, 7, 6, 0, "Hall of Arms"); + pPlayer->SEND_GOSSIP_MENU(2770, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); + pPlayer->SEND_GOSSIP_MENU(2771, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Paladin + pPlayer->SEND_POI(-4627.02, -926.45, 7, 6, 0, "Hall of Mysteries"); + pPlayer->SEND_GOSSIP_MENU(2773, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Priest + pPlayer->SEND_POI(-4627, -926.45, 7, 6, 0, "Hall of Mysteries"); + pPlayer->SEND_GOSSIP_MENU(2772, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Rogue + pPlayer->SEND_POI(-4647.83, -1124, 7, 6, 0, "Ironforge Rogue Trainer"); + pPlayer->SEND_GOSSIP_MENU(2774, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(-4605, -1110.45, 7, 6, 0, "Ironforge Warlock Trainer"); + pPlayer->SEND_GOSSIP_MENU(2775, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(-5023.08, -1253.68, 7, 6, 0, "Hall of Arms"); + pPlayer->SEND_GOSSIP_MENU(2776, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Shaman + pPlayer->SEND_POI(-4732, -1147, 7, 6, 0, "Ironforge Shaman Trainer"); + //incorrect id + pPlayer->SEND_GOSSIP_MENU(2766, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-4858.5, -1241.83, 7, 6, 0, "Berryfizz's Potions and Mixed Drinks"); + pPlayer->SEND_GOSSIP_MENU(2794, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-4796.97, -1110.17, 7, 6, 0, "The Great Forge"); + pPlayer->SEND_GOSSIP_MENU(2795, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-4767.83, -1184.59, 7, 6, 0, "The Bronze Kettle"); + pPlayer->SEND_GOSSIP_MENU(2796, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-4803.72, -1196.53, 7, 6, 0, "Thistlefuzz Arcanery"); + pPlayer->SEND_GOSSIP_MENU(2797, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-4799.56, -1250.23, 7, 6, 0, "Springspindle's Gadgets"); + pPlayer->SEND_GOSSIP_MENU(2798, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-4881.6, -1153.13, 7, 6, 0, "Ironforge Physician"); + pPlayer->SEND_GOSSIP_MENU(2799, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-4597.91, -1091.93, 7, 6, 0, "Traveling Fisherman"); + pPlayer->SEND_GOSSIP_MENU(2800, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-4876.9, -1151.92, 7, 6, 0, "Ironforge Physician"); + pPlayer->SEND_GOSSIP_MENU(2801, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-4807.02, -1194.43, 7, 6, 0, "Elise Brightletter"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); + pPlayer->SEND_GOSSIP_MENU(2802, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Minning + pPlayer->SEND_POI(-4705.06, -1116.43, 7, 6, 0, "Deepmountain Mining Guild"); + pPlayer->SEND_GOSSIP_MENU(2804, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(-4745, -1027.57, 7, 6, 0, "Finespindle's Leather Goods"); + pPlayer->SEND_GOSSIP_MENU(2805, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(-4719.60, -1056.96, 7, 6, 0, "Stonebrow's Clothier"); + pPlayer->SEND_GOSSIP_MENU(2807, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_ironforge(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_ironforge(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_ironforge end + *******************************************************/ + +CreatureAI* GetAI_guard_ironforge(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_mulgore start + *******************************************************/ + +bool GossipHello_guard_mulgore(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4051, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Wind rider + pPlayer->SEND_GOSSIP_MENU(4052, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(-2361.38, -349.19, 7, 6, 0, "Bloodhoof Village Inn"); + pPlayer->SEND_GOSSIP_MENU(4053, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable master + pPlayer->SEND_POI(-2338.86, -357.56, 7, 6, 0, "Seikwa"); + pPlayer->SEND_GOSSIP_MENU(5976, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->SEND_GOSSIP_MENU(4069, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(4070, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(-2312.15, -443.69, 7, 6, 0, "Gennia Runetotem"); + pPlayer->SEND_GOSSIP_MENU(4054, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(-2178.14, -406.14, 7, 6, 0, "Yaw Sharpmane"); + pPlayer->SEND_GOSSIP_MENU(4055, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Shaman + pPlayer->SEND_POI(-2301.5, -439.87, 7, 6, 0, "Narm Skychaser"); + pPlayer->SEND_GOSSIP_MENU(4056, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Warrior + pPlayer->SEND_POI(-2345.43, -494.11, 7, 6, 0, "Krang Stonehoof"); + pPlayer->SEND_GOSSIP_MENU(4057, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_GOSSIP_MENU(4058, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_GOSSIP_MENU(4059, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2263.34, -287.91, 7, 6, 0, "Pyall Silentstride"); + pPlayer->SEND_GOSSIP_MENU(4060, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_GOSSIP_MENU(4061, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-2353.52, -355.82, 7, 6, 0, "Vira Younghoof"); + pPlayer->SEND_GOSSIP_MENU(4062, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Fishing + pPlayer->SEND_POI(-2349.21, -241.37, 7, 6, 0, "Uthan Stillwater"); + pPlayer->SEND_GOSSIP_MENU(4063, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Herbalism + pPlayer->SEND_GOSSIP_MENU(4064, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_POI(-2257.12, -288.63, 7, 6, 0, "Chaw Stronghide"); + pPlayer->SEND_GOSSIP_MENU(4065, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_GOSSIP_MENU(4066, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_POI(-2252.94, -291.32, 7, 6, 0, "Yonn Deepcut"); + pPlayer->SEND_GOSSIP_MENU(4067, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4068, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_mulgore(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_mulgore(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_mulgore end + *******************************************************/ + +CreatureAI* GetAI_guard_mulgore(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_orgrimmar start + *******************************************************/ + +bool GossipHello_guard_orgrimmar(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); + + return true; +} + +void SendDefaultMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(1631.51, -4375.33, 7, 6, 0, "Bank of Orgrimmar"); + pPlayer->SEND_GOSSIP_MENU(2554, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //wind rider + pPlayer->SEND_POI(1676.6, -4332.72, 7, 6, 0, "The Sky Tower"); + pPlayer->SEND_GOSSIP_MENU(2555, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //guild master + pPlayer->SEND_POI(1576.93, -4294.75, 7, 6, 0, "Horde Embassy"); + pPlayer->SEND_GOSSIP_MENU(2556, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(1644.51, -4447.27, 7, 6, 0, "Orgrimmar Inn"); + pPlayer->SEND_GOSSIP_MENU(2557, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //mailbox + pPlayer->SEND_POI(1622.53, -4388.79, 7, 6, 0, "Orgrimmar Mailbox"); + pPlayer->SEND_GOSSIP_MENU(2558, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //auction house + pPlayer->SEND_POI(1679.21, -4450.1, 7, 6, 0, "Orgrimmar Auction House"); + pPlayer->SEND_GOSSIP_MENU(3075, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //zeppelin + pPlayer->SEND_POI(1337.36, -4632.7, 7, 6, 0, "Orgrimmar Zeppelin Tower"); + pPlayer->SEND_GOSSIP_MENU(3173, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //weapon master + pPlayer->SEND_POI(2092.56, -4823.95, 7, 6, 0, "Sayoc & Hanashi"); + pPlayer->SEND_GOSSIP_MENU(4519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //stable master + pPlayer->SEND_POI(2133.12, -4663.93, 7, 6, 0, "Xon'cha"); + pPlayer->SEND_GOSSIP_MENU(5974, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //officers lounge + pPlayer->SEND_POI(1633.56, -4249.37, 7, 6, 0, "Hall of Legends"); + pPlayer->SEND_GOSSIP_MENU(7046, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(2599, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(2594, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(7484, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(7644, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(7520, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Hunter + pPlayer->SEND_POI(2114.84, -4625.31, 7, 6, 0, "Orgrimmar Hunter's Hall"); + pPlayer->SEND_GOSSIP_MENU(2559, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Mage + pPlayer->SEND_POI(1451.26, -4223.33, 7, 6, 0, "Darkbriar Lodge"); + pPlayer->SEND_GOSSIP_MENU(2560, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(1442.21, -4183.24, 7, 6, 0, "Spirit Lodge"); + pPlayer->SEND_GOSSIP_MENU(2561, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Shaman + pPlayer->SEND_POI(1925.34, -4181.89, 7, 6, 0, "Thrall's Fortress"); + pPlayer->SEND_GOSSIP_MENU(2562, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Rogue + pPlayer->SEND_POI(1773.39, -4278.97, 7, 6, 0, "Shadowswift Brotherhood"); + pPlayer->SEND_GOSSIP_MENU(2563, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Warlock + pPlayer->SEND_POI(1849.57, -4359.68, 7, 6, 0, "Darkfire Enclave"); + pPlayer->SEND_GOSSIP_MENU(2564, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warrior + pPlayer->SEND_POI(1983.92, -4794.2, 7, 6, 0, "Hall of the Brave"); + pPlayer->SEND_GOSSIP_MENU(2565, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Paladin + pPlayer->SEND_POI(1906.65, -4134.26, 7, 6, 0, "Valley of Wisdom"); + pPlayer->SEND_GOSSIP_MENU(10843, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(1955.17, -4475.79, 7, 6, 0, "Yelmak's Alchemy and Potions"); + pPlayer->SEND_GOSSIP_MENU(2497, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(2054.34, -4831.85, 7, 6, 0, "The Burning Anvil"); + pPlayer->SEND_GOSSIP_MENU(2499, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(1780.96, -4481.31, 7, 6, 0, "Borstan's Firepit"); + pPlayer->SEND_GOSSIP_MENU(2500, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(1917.5, -4434.95, 7, 6, 0, "Godan's Runeworks"); + pPlayer->SEND_GOSSIP_MENU(2501, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(2038.45, -4744.75, 7, 6, 0, "Nogg's Machine Shop"); + pPlayer->SEND_GOSSIP_MENU(2653, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(1485.21, -4160.91, 7, 6, 0, "Survival of the Fittest"); + pPlayer->SEND_GOSSIP_MENU(2502, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(1994.15, -4655.7, 7, 6, 0, "Lumak's Fishing"); + pPlayer->SEND_GOSSIP_MENU(2503, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(1898.61, -4454.93, 7, 6, 0, "Jandi's Arboretum"); + pPlayer->SEND_GOSSIP_MENU(2504, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(1839.02, -4465.97, 7, 6, 0, "Jo'mah"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); + pPlayer->SEND_GOSSIP_MENU(2513, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_POI(2029.79, -4704, 7, 6, 0, "Red Canyon Mining"); + pPlayer->SEND_GOSSIP_MENU(2515, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(1852.82, -4562.31, 7, 6, 0, "Kodohide Leatherworkers"); + pPlayer->SEND_GOSSIP_MENU(2516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(1802.66, -4560.66, 7, 6, 0, "Magar's Cloth Goods"); + pPlayer->SEND_GOSSIP_MENU(2518, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_orgrimmar(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_orgrimmar(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_orgrimmar end + *******************************************************/ + +CreatureAI* GetAI_guard_orgrimmar(Creature* pCreature) +{ + return new guardAI_orgrimmar (pCreature); +} + +/******************************************************* + * guard_shattrath start + *******************************************************/ + +bool GossipHello_guard_shattrath(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + + return true; +} + +void SendDefaultMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Tavern + pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); + pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_BANK, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10379, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10382, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Flight master + pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Flight Master"); + pPlayer->SEND_GOSSIP_MENU(10385, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNALDOR , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANKSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INNSCYERS , GOSSIP_SENDER_SEC_MAILBOX, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->SEND_GOSSIP_MENU(10386, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEALDOR , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLESCYERS , GOSSIP_SENDER_SEC_STABLEMASTER, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10387, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Profession master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom + pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); + pPlayer->SEND_GOSSIP_MENU(10503, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab + pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMALDOR , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMSCYERS , GOSSIP_SENDER_SEC_GEMMERCHANT, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(10697, pCreature->GetGUID()); + break; + } +} + +void SendBankMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); + pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); + pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); + } +} + +void SendInnMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); + pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); + pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); + } +} + +void SendMailboxMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: + pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); + pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); + pPlayer->SEND_GOSSIP_MENU(10383, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: + pPlayer->SEND_POI(-1997.7, 5363, 7, 6, 0, "Scyers Bank"); + pPlayer->SEND_GOSSIP_MENU(10381, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: + pPlayer->SEND_POI(-2178, 5405, 7, 6, 0, "Scyers Inn"); + pPlayer->SEND_GOSSIP_MENU(10384, pCreature->GetGUID()); + break; + } +} + +void SendStableMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable"); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-2170, 5404, 7, 6, 0, "Scyers Stable"); + pPlayer->SEND_GOSSIP_MENU(10321, pCreature->GetGUID()); + } +} + +void SendBattleMasterMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: + pPlayer->SEND_POI(-1774, 5251, 7, 6, 0, "Alliance Battlemasters"); + pPlayer->SEND_GOSSIP_MENU(10389, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: + pPlayer->SEND_POI(-1963, 5263, 7, 6, 0, "Horde Battlemasters"); + pPlayer->SEND_GOSSIP_MENU(10390, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: + pPlayer->SEND_POI(-1960, 5175, 7, 6, 0, "Arena Battlemasters"); + pPlayer->SEND_GOSSIP_MENU(12510, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); + pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); + pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); + pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); + pPlayer->SEND_GOSSIP_MENU(10395, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); + pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting + pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); + pPlayer->SEND_GOSSIP_MENU(10397, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking + pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); + pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Skinning + pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); + pPlayer->SEND_GOSSIP_MENU(10398, pCreature->GetGUID()); + break; + } +} + +void SendGemMerchantMenu_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10698, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(-2193, 5424.5, 7, 6, 0, "Scyers Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10699, pCreature->GetGUID()); + } +} + +bool GossipSelect_guard_shattrath(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BANK: SendBankMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_STABLEMASTER: SendStableMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_GEMMERCHANT: SendGemMerchantMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_MAILBOX: SendMailboxMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_shattrath end + *******************************************************/ + +CreatureAI* GetAI_guard_shattrath(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_shattrath_aldor + *******************************************************/ + +#define SPELL_BANISHED_SHATTRATH_A 36642 +#define SPELL_BANISHED_SHATTRATH_S 36671 +#define SPELL_BANISH_TELEPORT 36643 +#define SPELL_EXILE 39533 + +struct TRINITY_DLL_DECL guard_shattrath_aldorAI : public guardAI +{ + guard_shattrath_aldorAI(Creature *c) : guardAI(c) {} + + uint32 Exile_Timer; + uint32 Banish_Timer; + uint64 PlayerGUID; + bool CanTeleport; + + void Reset() + { + Banish_Timer = 5000; + Exile_Timer = 8500; + PlayerGUID = 0; + CanTeleport = false; + } + + void EnterCombat(Unit *who) {} + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + if (CanTeleport) + { + if (Exile_Timer < diff) + { + if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) + { + temp->CastSpell(temp,SPELL_EXILE,true); + temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); + } + PlayerGUID = 0; + Exile_Timer = 8500; + CanTeleport = false; + }else Exile_Timer -= diff; + } + else if (Banish_Timer < diff) + { + Unit* temp = m_creature->getVictim(); + if (temp && temp->GetTypeId() == TYPEID_PLAYER) + { + DoCast(temp,SPELL_BANISHED_SHATTRATH_A); + Banish_Timer = 9000; + PlayerGUID = temp->GetGUID(); + if (PlayerGUID) + CanTeleport = true; + } + }else Banish_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +bool GossipHello_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Tavern + pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); + pPlayer->SEND_GOSSIP_MENU(10394, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-1730.5, 5496, 7, 6, 0, "Aldor Bank"); + pPlayer->SEND_GOSSIP_MENU(10380, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(-1895, 5767, 7, 6, 0, "Aldor Inn"); + pPlayer->SEND_GOSSIP_MENU(10525, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Flight master + pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); + pPlayer->SEND_GOSSIP_MENU(10402, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(0, 0, 7, 6, 0, "Aldor Mailbox"); + //unknown + pPlayer->SEND_GOSSIP_MENU(10524, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->SEND_POI(-1888.5, 5761, 7, 6, 0, "Aldor Stable Master"); + pPlayer->SEND_GOSSIP_MENU(10527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(10388, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Profession master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(10391, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom + pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); + pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab + pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); + pPlayer->SEND_GOSSIP_MENU(10696, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant + pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Aldor Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10411, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); + pPlayer->SEND_GOSSIP_MENU(10392, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); + pPlayer->SEND_GOSSIP_MENU(10400, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); + pPlayer->SEND_GOSSIP_MENU(10393, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); + pPlayer->SEND_GOSSIP_MENU(10528, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); + pPlayer->SEND_GOSSIP_MENU(10396, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting + pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); + pPlayer->SEND_GOSSIP_MENU(10529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking + pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); + pPlayer->SEND_GOSSIP_MENU(10399, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Skinning + pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); + pPlayer->SEND_GOSSIP_MENU(10419, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_shattrath_aldor(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_aldor(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_shattrath_aldor end + *******************************************************/ + +CreatureAI* GetAI_guard_shattrath_aldor(Creature* pCreature) +{ + return new guard_shattrath_aldorAI (pCreature); +} + +/******************************************************* + * guard_shattrath_scryer + *******************************************************/ + +struct TRINITY_DLL_DECL guard_shattrath_scryerAI : public guardAI +{ + guard_shattrath_scryerAI(Creature *c) : guardAI(c) {} + + uint32 Exile_Timer; + uint32 Banish_Timer; + uint64 PlayerGUID; + bool CanTeleport; + + void Reset() + { + Banish_Timer = 5000; + Exile_Timer = 8500; + PlayerGUID = 0; + CanTeleport = false; + } + + void EnterCombat(Unit *who) {} + + void UpdateAI(const uint32 diff) + { + if (!UpdateVictim()) + return; + + if (CanTeleport) + { + if (Exile_Timer < diff) + { + if (Unit* temp = Unit::GetUnit(*m_creature,PlayerGUID)) + { + temp->CastSpell(temp,SPELL_EXILE,true); + temp->CastSpell(temp,SPELL_BANISH_TELEPORT,true); + } + PlayerGUID = 0; + Exile_Timer = 8500; + CanTeleport = false; + }else Exile_Timer -= diff; + } + else if (Banish_Timer < diff) + { + Unit* temp = m_creature->getVictim(); + if (temp && temp->GetTypeId() == TYPEID_PLAYER) + { + DoCast(temp,SPELL_BANISHED_SHATTRATH_S); + Banish_Timer = 9000; + PlayerGUID = temp->GetGUID(); + if (PlayerGUID) + CanTeleport = true; + } + }else Banish_Timer -= diff; + + DoMeleeAttackIfReady(); + } +}; + +bool GossipHello_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAVERN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FLIGHTMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MANALOOM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMYLAB , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GEMMERCHANT , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(10430, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Tavern + pPlayer->SEND_POI(-1759.5, 5165, 7, 6, 0, "Worlds End Tavern"); + pPlayer->SEND_GOSSIP_MENU(10431, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-1996.6, 5363.7, 7, 6, 0, "Scryer Bank"); + pPlayer->SEND_GOSSIP_MENU(10432, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(-2176.6, 5405.8, 7, 6, 0, "Scryer Inn"); + pPlayer->SEND_GOSSIP_MENU(10433, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Flight master + pPlayer->SEND_POI(-1832, 5299, 7, 6, 0, "Shattrath Flight Master"); + pPlayer->SEND_GOSSIP_MENU(10435, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(-2174.3, 5411.4, 7, 6, 0, "Scryer Mailbox"); + pPlayer->SEND_GOSSIP_MENU(10436, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->SEND_POI(-2169.9, 5405.1, 7, 6, 0, "Scryer Stable Master"); + pPlayer->SEND_GOSSIP_MENU(10437, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERALLIANCE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERHORDE , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTERARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(10438, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Profession master + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->SEND_GOSSIP_MENU(10504, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Mana Loom + pPlayer->SEND_POI(-2070, 5265.5, 7, 6, 0, "Mana Loom"); + pPlayer->SEND_GOSSIP_MENU(10522, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Alchemy Lab + pPlayer->SEND_POI(-1648.5, 5540, 7, 6, 0, "Alchemy Lab"); + pPlayer->SEND_GOSSIP_MENU(10701, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Gem Merchant + pPlayer->SEND_POI(-1645, 5669.5, 7, 6, 0, "Scryer Gem Merchant"); + pPlayer->SEND_GOSSIP_MENU(10702, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-1648.5, 5534, 7, 6, 0, "Lorokeem"); + pPlayer->SEND_GOSSIP_MENU(10516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-1847, 5222, 7, 6, 0, "Kradu Grimblade and Zula Slagfury"); + pPlayer->SEND_GOSSIP_MENU(10517, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-2067.4, 5316.5, 7, 6, 0, "Jack Trapper"); + pPlayer->SEND_GOSSIP_MENU(10518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-2263.5, 5563.5, 7, 6, 0, "High Enchanter Bardolan"); + pPlayer->SEND_GOSSIP_MENU(10519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //First Aid + pPlayer->SEND_POI(-1591, 5265.5, 7, 6, 0, "Mildred Fletcher"); + pPlayer->SEND_GOSSIP_MENU(10520, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Jewelcrafting + pPlayer->SEND_POI(-1654, 5667.5, 7, 6, 0, "Hamanar"); + pPlayer->SEND_GOSSIP_MENU(10521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Leatherworking + pPlayer->SEND_POI(-2060.5, 5256.5, 7, 6, 0, "Darmari"); + pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Skinning + pPlayer->SEND_POI(-2048, 5300, 7, 6, 0, "Seymour"); + pPlayer->SEND_GOSSIP_MENU(10523, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_shattrath_scryer(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_shattrath_scryer(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_shattrath(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_shattrath_scryer end + *******************************************************/ + +CreatureAI* GetAI_guard_shattrath_scryer(Creature* pCreature) +{ + return new guard_shattrath_scryerAI (pCreature); +} + +/******************************************************* + * guard_silvermoon start + *******************************************************/ + +bool GossipHello_guard_silvermoon(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WINDRIDER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction house + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_1 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AH_SILVERMOON_2 , GOSSIP_SENDER_SEC_AUCTIONHOUSE, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(9317, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(9808.4, -7488.16, 7, 6, 0, "Silvermoon Bank"); + pPlayer->SEND_GOSSIP_MENU(9322, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(9474.97, -7345.21, 7, 6, 0, "Tandrine"); + pPlayer->SEND_GOSSIP_MENU(9324, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_1 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN_SILVERMOON_2 , GOSSIP_SENDER_SEC_INN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->SEND_GOSSIP_MENU(9602, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(9658.33, -7492.17, 7, 6, 0, "Silvermoon Mailbox"); + pPlayer->SEND_GOSSIP_MENU(9326, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Stable master + pPlayer->SEND_POI(9904.95, -7404.31, 7, 6, 0, "Shalenn"); + pPlayer->SEND_GOSSIP_MENU(9327, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Weapon trainer + pPlayer->SEND_POI(9841.17, -7505.13, 7, 6, 0, "Ileda"); + pPlayer->SEND_GOSSIP_MENU(9328, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Wind master + pPlayer->SEND_POI(9378.45, -7163.94, 7, 6, 0, "Silvermoon Wind Master"); + pPlayer->SEND_GOSSIP_MENU(10181, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARENA , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_EYEOFTHESTORM , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(9331, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_JEWELCRAFTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 14); + pPlayer->SEND_GOSSIP_MENU(9338, pCreature->GetGUID()); + break; + } +} + +void SendAuctionhouseMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(9644.47, -7140.22, 7, 6, 0, "Western Auction House"); + pPlayer->SEND_GOSSIP_MENU(9318, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(9683.27, -7521.22, 7, 6, 0, "Royal Exchange Auction House"); + pPlayer->SEND_GOSSIP_MENU(9319, pCreature->GetGUID()); + } +} + +void SendInnMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF + 1) + { + pPlayer->SEND_POI(9677.7, -7368, 7, 6, 0, "Silvermoon City Inn"); + pPlayer->SEND_GOSSIP_MENU(9325, pCreature->GetGUID()); + } + if (uiAction == GOSSIP_ACTION_INFO_DEF + 2) + { + pPlayer->SEND_POI(9561.1, -7517.5, 7, 6, 0, "Wayfarer's Rest tavern"); + pPlayer->SEND_GOSSIP_MENU(9603, pCreature->GetGUID()); + } +} + +void SendBattleMasterMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(9850.49, -7572.26, 7, 6, 0, "Gurak"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //A + pPlayer->SEND_POI(9850.6, -7559.25, 7, 6, 0, "Bipp Glizzitor"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //EOS + pPlayer->SEND_POI(9857.18, -7564.36, 7, 6, 0, "Karen Wentworth"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //WSG + pPlayer->SEND_POI(9845.45, -7562.58, 7, 6, 0, "Krukk"); + pPlayer->SEND_GOSSIP_MENU(9329, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(9700.55, -7262.57, 7, 6, 0, "Harene Plainwalker"); + pPlayer->SEND_GOSSIP_MENU(9330, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(9927.48, -7426.14, 7, 6, 0, "Zandine"); + pPlayer->SEND_GOSSIP_MENU(9332, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Mage + pPlayer->SEND_POI(9995.07, -7118.17, 7, 6, 0, "Quithas"); + pPlayer->SEND_GOSSIP_MENU(9333, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Paladin + pPlayer->SEND_POI(9850.22, -7516.93, 7, 6, 0, "Champion Bachi"); + pPlayer->SEND_GOSSIP_MENU(9334, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(9926.79, -7066.66, 7, 6, 0, "Belestra"); + pPlayer->SEND_GOSSIP_MENU(9335, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Rogue + pPlayer->SEND_POI(9739.88, -7374.33, 7, 6, 0, "Zelanis"); + pPlayer->SEND_GOSSIP_MENU(9336, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Warlock + pPlayer->SEND_POI(9787.57, -7284.63, 7, 6, 0, "Alamma"); + pPlayer->SEND_GOSSIP_MENU(9337, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(9998.09, -7214.36, 7, 6, 0, "Silvermoon Alchemy Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(9841.43, -7361.53, 7, 6, 0, "Silvermoon Blacksmithing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9340, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(9577.26, -7243.6, 7, 6, 0, "Silvermoon Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(9962.57, -7246.18, 7, 6, 0, "Silvermoon Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9341, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(9820.18, -7329.56, 7, 6, 0, "Silvermoon Engineering Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(9579.8, -7343.71, 7, 6, 0, "Silvermoon First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(9602.73, -7328.3, 7, 6, 0, "Silvermoon Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(10004.4, -7216.86, 7, 6, 0, "Silvermoon Herbalism Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(9959.29, -7248.38, 7, 6, 0, "Zantasia"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Jewelcrafting + pPlayer->SEND_POI(9553.54, -7506.43, 7, 6, 0, "Silvermoon Jewelcrafting Trainer"); + pPlayer->SEND_GOSSIP_MENU(9346, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Leatherworking + pPlayer->SEND_POI(9503.72, -7430.16, 7, 6, 0, "Silvermoon Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(9347, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Mining + pPlayer->SEND_POI(9805.1, -7355.56, 7, 6, 0, "Silvermoon Mining Trainer"); + pPlayer->SEND_GOSSIP_MENU(9348, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Skinning + pPlayer->SEND_POI(9513.37, -7429.4, 7, 6, 0, "Silvermoon Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(9316, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 14: //Tailoring + pPlayer->SEND_POI(9750.55, -7095.28, 7, 6, 0, "Silvermoon Tailor"); + pPlayer->SEND_GOSSIP_MENU(9350, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_silvermoon(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_AUCTIONHOUSE: SendAuctionhouseMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_INN: SendInnMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_silvermoon(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_silvermoon end + *******************************************************/ + +CreatureAI* GetAI_guard_silvermoon(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_stormwind start + *******************************************************/ + +bool GossipHello_guard_stormwind(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STORMWIND_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DEEPRUNTRAM , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GRYPHON , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_OFFICERS , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(933, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Auction House + pPlayer->SEND_POI(-8811.46, 667.46, 7, 6, 0, "Stormwind Auction House"); + pPlayer->SEND_GOSSIP_MENU(3834, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bank + pPlayer->SEND_POI(-8916.87, 622.87, 7, 6, 0, "Stormwind Bank"); + pPlayer->SEND_GOSSIP_MENU(764, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Deeprun tram + pPlayer->SEND_POI(-8378.88, 554.23, 7, 6, 0, "The Deeprun Tram"); + pPlayer->SEND_GOSSIP_MENU(3813, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(-8869.0, 675.4, 7, 6, 0, "The Gilded Rose"); + pPlayer->SEND_GOSSIP_MENU(3860, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Gryphon Master + pPlayer->SEND_POI(-8837.0, 493.5, 7, 6, 0, "Stormwind Gryphon Master"); + pPlayer->SEND_GOSSIP_MENU(879, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Guild Master + pPlayer->SEND_POI(-8894.0, 611.2, 7, 6, 0, "Stormwind Vistor`s Center"); + pPlayer->SEND_GOSSIP_MENU(882, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Mailbox + pPlayer->SEND_POI(-8876.48, 649.18, 7, 6, 0, "Stormwind Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3861, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Stable Master + pPlayer->SEND_POI(-8433.0, 554.7, 7, 6, 0, "Jenova Stoneshield"); + pPlayer->SEND_GOSSIP_MENU(5984, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Weapon Trainer + pPlayer->SEND_POI(-8797.0, 612.8, 7, 6, 0, "Woo Ping"); + pPlayer->SEND_GOSSIP_MENU(4516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Officers Lounge + pPlayer->SEND_POI(-8759.92, 399.69, 7, 6, 0, "Champions` Hall"); + pPlayer->SEND_GOSSIP_MENU(7047, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Battlemasters + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7499, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Class trainers + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PALADIN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SHAMAN , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->SEND_GOSSIP_MENU(898, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Profession trainers + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(918, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Thelman Slatefist"); + pPlayer->SEND_GOSSIP_MENU(7500, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Lady Hoteshem"); + pPlayer->SEND_GOSSIP_MENU(7650, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(-8443.88, 335.99, 7, 6, 0, "Elfarran"); + pPlayer->SEND_GOSSIP_MENU(7501, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Mage + pPlayer->SEND_POI(-9012.0, 867.6, 7, 6, 0, "Wizard`s Sanctum"); + pPlayer->SEND_GOSSIP_MENU(899, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Rogue + pPlayer->SEND_POI(-8753.0, 367.8, 7, 6, 0, "Stormwind - Rogue House"); + pPlayer->SEND_GOSSIP_MENU(900, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Warrior + pPlayer->SEND_POI(-8690.11, 324.85, 7, 6, 0, "Command Center"); + pPlayer->SEND_GOSSIP_MENU(901, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Druid + pPlayer->SEND_POI(-8751.0, 1124.5, 7, 6, 0, "The Park"); + pPlayer->SEND_GOSSIP_MENU(902, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Priest + pPlayer->SEND_POI(-8512.0, 862.4, 7, 6, 0, "Catedral Of Light"); + pPlayer->SEND_GOSSIP_MENU(903, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Paladin + pPlayer->SEND_POI(-8577.0, 881.7, 7, 6, 0, "Catedral Of Light"); + pPlayer->SEND_GOSSIP_MENU(904, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Hunter + pPlayer->SEND_POI(-8413.0, 541.5, 7, 6, 0, "Hunter Lodge"); + pPlayer->SEND_GOSSIP_MENU(905, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Warlock + pPlayer->SEND_POI(-8948.91, 998.35, 7, 6, 0, "The Slaughtered Lamb"); + pPlayer->SEND_GOSSIP_MENU(906, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Shaman + pPlayer->SEND_POI(-9033, 550, 7, 6, 0, "Valley Of Heroes"); + //incorrect id + pPlayer->SEND_GOSSIP_MENU(2593, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(-8988.0, 759.60, 7, 6, 0, "Alchemy Needs"); + pPlayer->SEND_GOSSIP_MENU(919, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(-8424.0, 616.9, 7, 6, 0, "Therum Deepforge"); + pPlayer->SEND_GOSSIP_MENU(920, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(-8611.0, 364.6, 7, 6, 0, "Pig and Whistle Tavern"); + pPlayer->SEND_GOSSIP_MENU(921, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(-8858.0, 803.7, 7, 6, 0, "Lucan Cordell"); + pPlayer->SEND_GOSSIP_MENU(941, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(-8347.0, 644.1, 7, 6, 0, "Lilliam Sparkspindle"); + pPlayer->SEND_GOSSIP_MENU(922, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(-8513.0, 801.8, 7, 6, 0, "Shaina Fuller"); + pPlayer->SEND_GOSSIP_MENU(923, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(-8803.0, 767.5, 7, 6, 0, "Arnold Leland"); + pPlayer->SEND_GOSSIP_MENU(940, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(-8967.0, 779.5, 7, 6, 0, "Alchemy Needs"); + pPlayer->SEND_GOSSIP_MENU(924, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_POI(-8862.50, 875.19, 7, 6, 0, "Catarina Stanford"); + pPlayer->SEND_GOSSIP_MENU(30000, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(-8726.0, 477.4, 7, 6, 0, "The Protective Hide"); + pPlayer->SEND_GOSSIP_MENU(925, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_POI(-8434.0, 692.8, 7, 6, 0, "Gelman Stonehand"); + pPlayer->SEND_GOSSIP_MENU(927, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(-8716.0, 469.4, 7, 6, 0, "The Protective Hide"); + pPlayer->SEND_GOSSIP_MENU(928, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(-8938.0, 800.7, 7, 6, 0, "Duncan`s Textiles"); + pPlayer->SEND_GOSSIP_MENU(929, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_stormwind(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_stormwind(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_stormwind end + *******************************************************/ + +CreatureAI* GetAI_guard_stormwind(Creature* pCreature) +{ + return new guardAI_stormwind (pCreature); +} + +/******************************************************* + * guard_teldrassil start + *******************************************************/ + +bool GossipHello_guard_teldrassil(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FERRY , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->SEND_GOSSIP_MENU(4316, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4317, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Rut`theran + pPlayer->SEND_GOSSIP_MENU(4318, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_GOSSIP_MENU(4319, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(9821.49, 960.13, 7, 6, 0, "Dolanaar Inn"); + pPlayer->SEND_GOSSIP_MENU(4320, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //stable master + pPlayer->SEND_POI(9808.37, 931.1, 7, 6, 0, "Seriadne"); + pPlayer->SEND_GOSSIP_MENU(5982, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_DRUID , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HUNTER , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(4264, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->SEND_GOSSIP_MENU(4273, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Druid + pPlayer->SEND_POI(9741.58, 963.7, 7, 6, 0, "Kal"); + pPlayer->SEND_GOSSIP_MENU(4323, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Hunter + pPlayer->SEND_POI(9815.12, 926.28, 7, 6, 0, "Dazalar"); + pPlayer->SEND_GOSSIP_MENU(4324, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Priest + pPlayer->SEND_POI(9906.16, 986.63, 7, 6, 0, "Laurna Morninglight"); + pPlayer->SEND_GOSSIP_MENU(4325, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Rogue + pPlayer->SEND_POI(9789, 942.86, 7, 6, 0, "Jannok Breezesong"); + pPlayer->SEND_GOSSIP_MENU(4326, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(9821.96, 950.61, 7, 6, 0, "Kyra Windblade"); + pPlayer->SEND_GOSSIP_MENU(4327, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(9767.59, 878.81, 7, 6, 0, "Cyndra Kindwhisper"); + pPlayer->SEND_GOSSIP_MENU(4329, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Cooking + pPlayer->SEND_POI(9751.19, 906.13, 7, 6, 0, "Zarrin"); + pPlayer->SEND_GOSSIP_MENU(4330, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Enchanting + pPlayer->SEND_POI(10677.59, 1946.56, 7, 6, 0, "Alanna Raveneye"); + pPlayer->SEND_GOSSIP_MENU(4331, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //First Aid + pPlayer->SEND_POI(9903.12, 999, 7, 6, 0, "Byancie"); + pPlayer->SEND_GOSSIP_MENU(4332, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Fishing + pPlayer->SEND_GOSSIP_MENU(4333, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Herbalism + pPlayer->SEND_POI(9773.78, 875.88, 7, 6, 0, "Malorne Bladeleaf"); + pPlayer->SEND_GOSSIP_MENU(4334, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Leatherworking + pPlayer->SEND_POI(10152.59, 1681.46, 7, 6, 0, "Nadyia Maneweaver"); + pPlayer->SEND_GOSSIP_MENU(4335, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Skinning + pPlayer->SEND_POI(10135.59, 1673.18, 7, 6, 0, "Radnaal Maneweaver"); + pPlayer->SEND_GOSSIP_MENU(4336, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Tailoring + pPlayer->SEND_GOSSIP_MENU(4337, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_teldrassil(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_teldrassil(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_teldrassil end + *******************************************************/ + +CreatureAI* GetAI_guard_teldrassil(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_tirisfal start + *******************************************************/ + +bool GossipHello_guard_tirisfal(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->SEND_GOSSIP_MENU(4097, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_GOSSIP_MENU(4074, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //bat handler + pPlayer->SEND_GOSSIP_MENU(4075, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Inn + pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Gallows` End Tavern"); + pPlayer->SEND_GOSSIP_MENU(4076, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Stable Master + pPlayer->SEND_POI(2267.66, 319.32, 7, 6, 0, "Morganus"); + pPlayer->SEND_GOSSIP_MENU(5978, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(4292, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INSCRIPTION , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 13); + pPlayer->SEND_GOSSIP_MENU(4096, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Mage + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Cain Firesong"); + pPlayer->SEND_GOSSIP_MENU(4077, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Priest + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Dark Cleric Beryl"); + pPlayer->SEND_GOSSIP_MENU(4078, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Rogue + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Marion Call"); + pPlayer->SEND_GOSSIP_MENU(4079, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Warlock + pPlayer->SEND_POI(2259.18, 240.93, 7, 6, 0, "Rupert Boch"); + pPlayer->SEND_GOSSIP_MENU(4080, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(2256.48, 240.32, 7, 6, 0, "Austil de Mon"); + pPlayer->SEND_GOSSIP_MENU(4081, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(2263.25, 344.23, 7, 6, 0, "Carolai Anise"); + pPlayer->SEND_GOSSIP_MENU(4082, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_GOSSIP_MENU(4083, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_GOSSIP_MENU(4084, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(2250.35, 249.12, 7, 6, 0, "Vance Undergloom"); + pPlayer->SEND_GOSSIP_MENU(4085, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_GOSSIP_MENU(4086, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(2246.68, 241.89, 7, 6, 0, "Nurse Neela"); + pPlayer->SEND_GOSSIP_MENU(4087, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(2292.37, -10.72, 7, 6, 0, "Clyde Kellen"); + pPlayer->SEND_GOSSIP_MENU(4088, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(2268.21, 331.69, 7, 6, 0, "Faruza"); + pPlayer->SEND_GOSSIP_MENU(4089, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Inscription + pPlayer->SEND_GOSSIP_MENU(30001, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Leatherworking + pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Shelene Rhobart"); + pPlayer->SEND_GOSSIP_MENU(4090, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Mining + pPlayer->SEND_GOSSIP_MENU(4091, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Skinning + pPlayer->SEND_POI(2027, 78.72, 7, 6, 0, "Rand Rhobart"); + pPlayer->SEND_GOSSIP_MENU(4092, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 13: //Tailoring + pPlayer->SEND_POI(2160.45, 659.93, 7, 6, 0, "Bowen Brisboise"); + pPlayer->SEND_GOSSIP_MENU(4093, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_tirisfal(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_tirisfal(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_tirisfal end + *******************************************************/ + +CreatureAI* GetAI_guard_tirisfal(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * guard_undercity start + *******************************************************/ + +bool GossipHello_guard_undercity(Player* pPlayer, Creature* pCreature) +{ + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BANK , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATHANDLER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_GUILDMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_INN , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAILBOX , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_AUCTIONHOUSE , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ZEPPLINMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WEAPONMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_STABLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BATTLEMASTER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_CLASSTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PROFTRAINER , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(3543, pCreature->GetGUID()); + return true; +} + +void SendDefaultMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Bank + pPlayer->SEND_POI(1595.64, 232.45, 7, 6, 0, "Undercity Bank"); + pPlayer->SEND_GOSSIP_MENU(3514, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Bat handler + pPlayer->SEND_POI(1565.9, 271.43, 7, 6, 0, "Undercity Bat Handler"); + pPlayer->SEND_GOSSIP_MENU(3515, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Guild master + pPlayer->SEND_POI(1594.17, 205.57, 7, 6, 0, "Undercity Guild Master"); + pPlayer->SEND_GOSSIP_MENU(3516, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Inn + pPlayer->SEND_POI(1639.43, 220.99, 7, 6, 0, "Undercity Inn"); + pPlayer->SEND_GOSSIP_MENU(3517, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Mailbox + pPlayer->SEND_POI(1632.68, 219.4, 7, 6, 0, "Undercity Mailbox"); + pPlayer->SEND_GOSSIP_MENU(3518, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //Auction House + pPlayer->SEND_POI(1647.9, 258.49, 7, 6, 0, "Undercity Auction House"); + pPlayer->SEND_GOSSIP_MENU(3519, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Zeppelin + pPlayer->SEND_POI(2059, 274.86, 7, 6, 0, "Undercity Zeppelin"); + pPlayer->SEND_GOSSIP_MENU(3520, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Weapon Master + pPlayer->SEND_POI(1670.31, 324.66, 7, 6, 0, "Archibald"); + pPlayer->SEND_GOSSIP_MENU(4521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Stable master + pPlayer->SEND_POI(1634.18, 226.76, 7, 6, 0, "Anya Maulray"); + pPlayer->SEND_GOSSIP_MENU(5979, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Battlemaster + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALTERACVALLEY , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ARATHIBASIN , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARSONGULCH , GOSSIP_SENDER_SEC_BATTLEINFO, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->SEND_GOSSIP_MENU(7527, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Class trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MAGE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_PRIEST , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ROGUE , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARLOCK , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_WARRIOR , GOSSIP_SENDER_SEC_CLASSTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->SEND_GOSSIP_MENU(3542, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Profession trainer + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ALCHEMY , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 1); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_BLACKSMITHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 2); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_COOKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 3); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENCHANTING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 4); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_ENGINEERING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 5); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FIRSTAID , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 6); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_FISHING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 7); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_HERBALISM , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 8); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_LEATHERWORKING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 9); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_MINING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 10); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_SKINNING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 11); + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_TEXT_TAILORING , GOSSIP_SENDER_SEC_PROFTRAIN, GOSSIP_ACTION_INFO_DEF + 12); + pPlayer->SEND_GOSSIP_MENU(3541, pCreature->GetGUID()); + break; + } +} + +void SendBattleMasterMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //AV + pPlayer->SEND_POI(1329, 333.92, 7, 6, 0, "Grizzle Halfmane"); + pPlayer->SEND_GOSSIP_MENU(7525, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //AB + pPlayer->SEND_POI(1283.3, 287.16, 7, 6, 0, "Sir Malory Wheeler"); + pPlayer->SEND_GOSSIP_MENU(7646, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //WSG + pPlayer->SEND_POI(1265, 351.18, 7, 6, 0, "Kurden Bloodclaw"); + pPlayer->SEND_GOSSIP_MENU(7526, pCreature->GetGUID()); + break; + } +} + +void SendClassTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Mage + pPlayer->SEND_POI(1781, 53, 7, 6, 0, "Undercity Mage Trainers"); + pPlayer->SEND_GOSSIP_MENU(3513, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Priest + pPlayer->SEND_POI(1758.33, 401.5, 7, 6, 0, "Undercity Priest Trainers"); + pPlayer->SEND_GOSSIP_MENU(3521, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Rogue + pPlayer->SEND_POI(1418.56, 65, 7, 6, 0, "Undercity Rogue Trainers"); + pPlayer->SEND_GOSSIP_MENU(3524, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Warlock + pPlayer->SEND_POI(1780.92, 53.16, 7, 6, 0, "Undercity Warlock Trainers"); + pPlayer->SEND_GOSSIP_MENU(3526, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Warrior + pPlayer->SEND_POI(1775.59, 418.19, 7, 6, 0, "Undercity Warrior Trainers"); + pPlayer->SEND_GOSSIP_MENU(3527, pCreature->GetGUID()); + break; + } +} + +void SendProfTrainerMenu_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiAction) +{ + switch (uiAction) + { + case GOSSIP_ACTION_INFO_DEF + 1: //Alchemy + pPlayer->SEND_POI(1419.82, 417.19, 7, 6, 0, "The Apothecarium"); + pPlayer->SEND_GOSSIP_MENU(3528, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 2: //Blacksmithing + pPlayer->SEND_POI(1696, 285, 7, 6, 0, "Undercity Blacksmithing Trainer"); + pPlayer->SEND_GOSSIP_MENU(3529, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 3: //Cooking + pPlayer->SEND_POI(1596.34, 274.68, 7, 6, 0, "Undercity Cooking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3530, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 4: //Enchanting + pPlayer->SEND_POI(1488.54, 280.19, 7, 6, 0, "Undercity Enchanting Trainer"); + pPlayer->SEND_GOSSIP_MENU(3531, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 5: //Engineering + pPlayer->SEND_POI(1408.58, 143.43, 7, 6, 0, "Undercity Engineering Trainer"); + pPlayer->SEND_GOSSIP_MENU(3532, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 6: //First Aid + pPlayer->SEND_POI(1519.65, 167.19, 7, 6, 0, "Undercity First Aid Trainer"); + pPlayer->SEND_GOSSIP_MENU(3533, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 7: //Fishing + pPlayer->SEND_POI(1679.9, 89, 7, 6, 0, "Undercity Fishing Trainer"); + pPlayer->SEND_GOSSIP_MENU(3534, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 8: //Herbalism + pPlayer->SEND_POI(1558, 349.36, 7, 6, 0, "Undercity Herbalism Trainer"); + pPlayer->SEND_GOSSIP_MENU(3535, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 9: //Leatherworking + pPlayer->SEND_POI(1498.76, 196.43, 7, 6, 0, "Undercity Leatherworking Trainer"); + pPlayer->SEND_GOSSIP_MENU(3536, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 10: //Mining + pPlayer->SEND_POI(1642.88, 335.58, 7, 6, 0, "Undercity Mining Trainer"); + pPlayer->SEND_GOSSIP_MENU(3537, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 11: //Skinning + pPlayer->SEND_POI(1498.6, 196.46, 7, 6, 0, "Undercity Skinning Trainer"); + pPlayer->SEND_GOSSIP_MENU(3538, pCreature->GetGUID()); + break; + case GOSSIP_ACTION_INFO_DEF + 12: //Tailoring + pPlayer->SEND_POI(1689.55, 193, 7, 6, 0, "Undercity Tailoring Trainer"); + pPlayer->SEND_GOSSIP_MENU(3539, pCreature->GetGUID()); + break; + } +} + +bool GossipSelect_guard_undercity(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + switch (uiSender) + { + case GOSSIP_SENDER_MAIN: SendDefaultMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_CLASSTRAIN: SendClassTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_PROFTRAIN: SendProfTrainerMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + case GOSSIP_SENDER_SEC_BATTLEINFO: SendBattleMasterMenu_guard_undercity(pPlayer, pCreature, uiAction); break; + } + return true; +} + +/******************************************************* + * guard_undercity end + *******************************************************/ + +CreatureAI* GetAI_guard_undercity(Creature* pCreature) +{ + return new guardAI (pCreature); +} + +/******************************************************* + * AddSC + *******************************************************/ + +void AddSC_guards() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="guard_azuremyst"; + newscript->pGossipHello = &GossipHello_guard_azuremyst; + newscript->pGossipSelect = &GossipSelect_guard_azuremyst; + newscript->GetAI = &GetAI_guard_azuremyst; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_bluffwatcher"; + newscript->pGossipHello = &GossipHello_guard_bluffwatcher; + newscript->pGossipSelect = &GossipSelect_guard_bluffwatcher; + newscript->GetAI = &GetAI_guard_bluffwatcher; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_contested"; + newscript->GetAI = &GetAI_guard_contested; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_darnassus"; + newscript->pGossipHello = &GossipHello_guard_darnassus; + newscript->pGossipSelect = &GossipSelect_guard_darnassus; + newscript->GetAI = &GetAI_guard_darnassus; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_dunmorogh"; + newscript->pGossipHello = &GossipHello_guard_dunmorogh; + newscript->pGossipSelect = &GossipSelect_guard_dunmorogh; + newscript->GetAI = &GetAI_guard_dunmorogh; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_durotar"; + newscript->pGossipHello = &GossipHello_guard_durotar; + newscript->pGossipSelect = &GossipSelect_guard_durotar; + newscript->GetAI = &GetAI_guard_durotar; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_elwynnforest"; + newscript->pGossipHello = &GossipHello_guard_elwynnforest; + newscript->pGossipSelect = &GossipSelect_guard_elwynnforest; + newscript->GetAI = &GetAI_guard_elwynnforest; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_eversong"; + newscript->pGossipHello = &GossipHello_guard_eversong; + newscript->pGossipSelect = &GossipSelect_guard_eversong; + newscript->GetAI = &GetAI_guard_eversong; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_exodar"; + newscript->pGossipHello = &GossipHello_guard_exodar; + newscript->pGossipSelect = &GossipSelect_guard_exodar; + newscript->GetAI = &GetAI_guard_exodar; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_ironforge"; + newscript->pGossipHello = &GossipHello_guard_ironforge; + newscript->pGossipSelect = &GossipSelect_guard_ironforge; + newscript->GetAI = &GetAI_guard_ironforge; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_mulgore"; + newscript->pGossipHello = &GossipHello_guard_mulgore; + newscript->pGossipSelect = &GossipSelect_guard_mulgore; + newscript->GetAI = &GetAI_guard_mulgore; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_orgrimmar"; + newscript->pGossipHello = &GossipHello_guard_orgrimmar; + newscript->pGossipSelect = &GossipSelect_guard_orgrimmar; + newscript->GetAI = &GetAI_guard_orgrimmar; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_shattrath"; + newscript->pGossipHello = &GossipHello_guard_shattrath; + newscript->pGossipSelect = &GossipSelect_guard_shattrath; + newscript->GetAI = &GetAI_guard_shattrath; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_shattrath_aldor"; + newscript->GetAI = &GetAI_guard_shattrath_aldor; + newscript->pGossipHello = &GossipHello_guard_shattrath_aldor; + newscript->pGossipSelect = &GossipSelect_guard_shattrath_aldor; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_shattrath_scryer"; + newscript->GetAI = &GetAI_guard_shattrath_scryer; + newscript->pGossipHello = &GossipHello_guard_shattrath_scryer; + newscript->pGossipSelect = &GossipSelect_guard_shattrath_scryer; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_silvermoon"; + newscript->pGossipHello = &GossipHello_guard_silvermoon; + newscript->pGossipSelect = &GossipSelect_guard_silvermoon; + newscript->GetAI = &GetAI_guard_silvermoon; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_stormwind"; + newscript->pGossipHello = &GossipHello_guard_stormwind; + newscript->pGossipSelect = &GossipSelect_guard_stormwind; + newscript->GetAI = &GetAI_guard_stormwind; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_teldrassil"; + newscript->pGossipHello = &GossipHello_guard_teldrassil; + newscript->pGossipSelect = &GossipSelect_guard_teldrassil; + newscript->GetAI = &GetAI_guard_teldrassil; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_tirisfal"; + newscript->pGossipHello = &GossipHello_guard_tirisfal; + newscript->pGossipSelect = &GossipSelect_guard_tirisfal; + newscript->GetAI = &GetAI_guard_tirisfal; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="guard_undercity"; + newscript->pGossipHello = &GossipHello_guard_undercity; + newscript->pGossipSelect = &GossipSelect_guard_undercity; + newscript->GetAI = &GetAI_guard_undercity; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp new file mode 100644 index 00000000000..1f20f85ebcf --- /dev/null +++ b/src/bindings/scripts/system/ScriptLoader.cpp @@ -0,0 +1,1030 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 +* This program is free software licensed under GPL version 2 +* Please see the included DOCS/LICENSE.TXT for more information */ + +#include "precompiled.h" + +//custom + +//examples +extern void AddSC_example_creature(); +extern void AddSC_example_escort(); +extern void AddSC_example_gossip_codebox(); +extern void AddSC_example_misc(); + +//world +extern void AddSC_areatrigger_scripts(); +extern void AddSC_boss_emeriss(); +extern void AddSC_boss_taerar(); +extern void AddSC_boss_ysondre(); +extern void AddSC_generic_creature(); +extern void AddSC_go_scripts(); +extern void AddSC_guards(); +extern void AddSC_item_scripts(); +extern void AddSC_npc_professions(); +extern void AddSC_npcs_special(); +extern void AddSC_npc_taxi(); + +//eastern kingdoms +//extern void AddSC_alterac_mountains(); +extern void AddSC_arathi_highlands(); +extern void AddSC_blasted_lands(); +extern void AddSC_boss_kruul(); +extern void AddSC_burning_steppes(); +extern void AddSC_dun_morogh(); +extern void AddSC_eastern_plaguelands(); +extern void AddSC_elwynn_forest(); +extern void AddSC_eversong_woods(); +extern void AddSC_ghostlands(); +extern void AddSC_hinterlands(); +extern void AddSC_ironforge(); +extern void AddSC_loch_modan(); +extern void AddSC_searing_gorge(); +extern void AddSC_silvermoon_city(); +extern void AddSC_silverpine_forest(); +extern void AddSC_stormwind_city(); +extern void AddSC_stranglethorn_vale(); +extern void AddSC_tirisfal_glades(); +extern void AddSC_undercity(); +extern void AddSC_western_plaguelands(); +extern void AddSC_westfall(); + +//kalimdor +extern void AddSC_ashenvale(); +extern void AddSC_azshara(); +extern void AddSC_azuremyst_isle(); +extern void AddSC_bloodmyst_isle(); +extern void AddSC_boss_azuregos(); +extern void AddSC_darkshore(); +extern void AddSC_desolace(); +extern void AddSC_dustwallow_marsh(); +extern void AddSC_felwood(); +extern void AddSC_feralas(); +extern void AddSC_moonglade(); +extern void AddSC_mulgore(); +extern void AddSC_orgrimmar(); +extern void AddSC_silithus(); +extern void AddSC_stonetalon_mountains(); +extern void AddSC_tanaris(); +extern void AddSC_teldrassil(); +extern void AddSC_the_barrens(); +extern void AddSC_thousand_needles(); +extern void AddSC_thunder_bluff(); +extern void AddSC_winterspring(); + +//northrend +extern void AddSC_borean_tundra(); +extern void AddSC_dragonblight(); +extern void AddSC_grizzly_hills(); +extern void AddSC_icecrown(); +extern void AddSC_sholazar_basin(); +extern void AddSC_zuldrak(); + +//outland +extern void AddSC_blades_edge_mountains(); +extern void AddSC_boss_doomlordkazzak(); +extern void AddSC_boss_doomwalker(); +extern void AddSC_hellfire_peninsula(); +extern void AddSC_isle_of_queldanas(); +extern void AddSC_nagrand(); +extern void AddSC_netherstorm(); +extern void AddSC_shadowmoon_valley(); +extern void AddSC_shattrath_city(); +extern void AddSC_terokkar_forest(); +extern void AddSC_zangarmarsh(); + +//-------------------- +//------ ZONE -------- + +//Aunchindoun +//--Auchenai Crypts +extern void AddSC_boss_exarch_maladaar(); +extern void AddSC_boss_shirrak_the_dead_watcher(); +//--Mana Tombs +extern void AddSC_boss_nexusprince_shaffar(); +extern void AddSC_boss_pandemonius(); + +//--Sekketh Halls +extern void AddSC_boss_darkweaver_syth(); +extern void AddSC_boss_talon_king_ikiss(); +extern void AddSC_instance_sethekk_halls(); + +//--Shadow Labyrinth +extern void AddSC_instance_shadow_labyrinth(); +extern void AddSC_boss_ambassador_hellmaw(); +extern void AddSC_boss_blackheart_the_inciter(); +extern void AddSC_boss_grandmaster_vorpil(); +extern void AddSC_boss_murmur(); + +//Azjol-Nerub +//--Ahn'kahet +extern void AddSC_instance_ahnkahet(); +extern void AddSC_boss_elder_nadox(); + +//Black Temple +extern void AddSC_black_temple(); +extern void AddSC_boss_illidan(); +extern void AddSC_boss_shade_of_akama(); +extern void AddSC_boss_supremus(); +extern void AddSC_boss_gurtogg_bloodboil(); +extern void AddSC_boss_mother_shahraz(); +extern void AddSC_boss_reliquary_of_souls(); +extern void AddSC_boss_teron_gorefiend(); +extern void AddSC_boss_najentus(); +extern void AddSC_boss_illidari_council(); +extern void AddSC_instance_black_temple(); + +//Blackfathom Depths +extern void AddSC_instance_blackfathom_deeps(); + +//Blackrock Depths +extern void AddSC_blackrock_depths(); +extern void AddSC_boss_ambassador_flamelash(); +extern void AddSC_boss_anubshiah(); +extern void AddSC_boss_draganthaurissan(); +extern void AddSC_boss_general_angerforge(); +extern void AddSC_boss_gorosh_the_dervish(); +extern void AddSC_boss_grizzle(); +extern void AddSC_boss_high_interrogator_gerstahn(); +extern void AddSC_boss_magmus(); +extern void AddSC_boss_moira_bronzebeard(); +extern void AddSC_boss_tomb_of_seven(); +extern void AddSC_instance_blackrock_depths(); + +//Blackrock Spire +extern void AddSC_boss_drakkisath(); +extern void AddSC_boss_halycon(); +extern void AddSC_boss_highlordomokk(); +extern void AddSC_boss_mothersmolderweb(); +extern void AddSC_boss_overlordwyrmthalak(); +extern void AddSC_boss_shadowvosh(); +extern void AddSC_boss_thebeast(); +extern void AddSC_boss_warmastervoone(); +extern void AddSC_boss_quatermasterzigris(); +extern void AddSC_boss_pyroguard_emberseer(); +extern void AddSC_boss_gyth(); +extern void AddSC_boss_rend_blackhand(); + +//Blackwing lair +extern void AddSC_boss_razorgore(); +extern void AddSC_boss_vael(); +extern void AddSC_boss_broodlord(); +extern void AddSC_boss_firemaw(); +extern void AddSC_boss_ebonroc(); +extern void AddSC_boss_flamegor(); +extern void AddSC_boss_chromaggus(); +extern void AddSC_boss_nefarian(); +extern void AddSC_boss_victor_nefarius(); + +//Caverns of Time +//--Battle for Mt. Hyjal +extern void AddSC_hyjal(); +extern void AddSC_boss_archimonde(); +extern void AddSC_instance_mount_hyjal(); +extern void AddSC_hyjal_trash(); +extern void AddSC_boss_rage_winterchill(); +extern void AddSC_boss_anetheron(); +extern void AddSC_boss_kazrogal(); +extern void AddSC_boss_azgalor(); + +//--Old Hillsbrad +extern void AddSC_boss_captain_skarloc(); +extern void AddSC_boss_epoch_hunter(); +extern void AddSC_boss_lieutenant_drake(); +extern void AddSC_instance_old_hillsbrad(); +extern void AddSC_old_hillsbrad(); + +//--The Dark Portal +extern void AddSC_boss_aeonus(); +extern void AddSC_boss_chrono_lord_deja(); +extern void AddSC_boss_temporus(); +extern void AddSC_dark_portal(); +extern void AddSC_instance_dark_portal(); + +//Coilfang Resevoir +//--Serpent Shrine Cavern +extern void AddSC_boss_fathomlord_karathress(); +extern void AddSC_boss_hydross_the_unstable(); +extern void AddSC_boss_lady_vashj(); +extern void AddSC_boss_leotheras_the_blind(); +extern void AddSC_boss_morogrim_tidewalker(); +extern void AddSC_instance_serpentshrine_cavern(); +extern void AddSC_boss_the_lurker_below(); + +//--Slave Pens + +//--Steam Vault +extern void AddSC_boss_hydromancer_thespia(); +extern void AddSC_boss_mekgineer_steamrigger(); +extern void AddSC_boss_warlord_kalithresh(); +extern void AddSC_instance_steam_vault(); + +//--Underbog +extern void AddSC_boss_hungarfen(); +extern void AddSC_boss_the_black_stalker(); + +//Deadmines +extern void AddSC_instance_deadmines(); + +//Scarlet Enclave +extern void AddSC_the_scarlet_enclave(); + +//Gruul's Lair +extern void AddSC_boss_gruul(); +extern void AddSC_boss_high_king_maulgar(); +extern void AddSC_instance_gruuls_lair(); + +//Hellfire Citadel +//--Blood Furnace +extern void AddSC_boss_broggok(); +extern void AddSC_boss_kelidan_the_breaker(); +extern void AddSC_boss_the_maker(); +extern void AddSC_instance_blood_furnace(); + +//--Magtheridon's Lair +extern void AddSC_boss_magtheridon(); +extern void AddSC_instance_magtheridons_lair(); + +//--Shattered Halls +extern void AddSC_boss_grand_warlock_nethekurse(); +extern void AddSC_boss_warbringer_omrogg(); +extern void AddSC_boss_warchief_kargath_bladefist(); +extern void AddSC_instance_shattered_halls(); + +//--Ramparts +extern void AddSC_boss_watchkeeper_gargolmar(); +extern void AddSC_boss_omor_the_unscarred(); +extern void AddSC_boss_vazruden_the_herald(); +extern void AddSC_instance_ramparts(); + +//Karazhan +extern void AddSC_boss_attumen(); +extern void AddSC_boss_curator(); +extern void AddSC_boss_maiden_of_virtue(); +extern void AddSC_boss_shade_of_aran(); +extern void AddSC_boss_malchezaar(); +extern void AddSC_boss_terestian_illhoof(); +extern void AddSC_boss_moroes(); +extern void AddSC_bosses_opera(); +extern void AddSC_boss_netherspite(); +extern void AddSC_instance_karazhan(); +extern void AddSC_karazhan(); +extern void AddSC_boss_nightbane(); + +//Lower Blackrock Spire + +// Magister's Terrace +extern void AddSC_boss_felblood_kaelthas(); +extern void AddSC_boss_selin_fireheart(); +extern void AddSC_boss_vexallus(); +extern void AddSC_boss_priestess_delrissa(); +extern void AddSC_instance_magisters_terrace(); +extern void AddSC_magisters_terrace(); + +//Maraudon +extern void AddSC_boss_celebras_the_cursed(); +extern void AddSC_boss_landslide(); +extern void AddSC_boss_noxxion(); +extern void AddSC_boss_ptheradras(); + +//Molten core +extern void AddSC_boss_lucifron(); +extern void AddSC_boss_magmadar(); +extern void AddSC_boss_gehennas(); +extern void AddSC_boss_garr(); +extern void AddSC_boss_baron_geddon(); +extern void AddSC_boss_shazzrah(); +extern void AddSC_boss_golemagg(); +extern void AddSC_boss_sulfuron(); +extern void AddSC_boss_majordomo(); +extern void AddSC_boss_ragnaros(); +extern void AddSC_instance_molten_core(); +extern void AddSC_molten_core(); + +//Naxxramas +extern void AddSC_boss_anubrekhan(); +extern void AddSC_boss_maexxna(); +extern void AddSC_boss_patchwerk(); +extern void AddSC_boss_grobbulus(); +extern void AddSC_boss_razuvious(); +extern void AddSC_boss_kelthuzad(); +extern void AddSC_boss_loatheb(); +extern void AddSC_boss_noth(); +extern void AddSC_boss_gluth(); +extern void AddSC_boss_sapphiron(); +extern void AddSC_boss_four_horsemen(); +extern void AddSC_boss_faerlina(); +extern void AddSC_boss_heigan(); +extern void AddSC_boss_gothik(); +extern void AddSC_boss_thaddius(); +extern void AddSC_instance_naxxramas(); + +//The Nexus +//Eye of Eternety + +//Nexus +extern void AddSC_boss_magus_telestra(); +extern void AddSC_boss_anomalus(); +extern void AddSC_boss_ormorok(); +extern void AddSC_boss_keristrasza(); +extern void AddSC_instance_nexus(); + +//Oculus + +//Obsidian Sanctum +extern void AddSC_boss_sartharion(); +extern void AddSC_instance_obsidian_sanctum(); + +//Onyxia's Lair +extern void AddSC_boss_onyxia(); + +//Ragefire Chasm +//Razorfen Downs +extern void AddSC_boss_amnennar_the_coldbringer(); +extern void AddSC_razorfen_downs(); + +//Razorfen Kraul +extern void AddSC_razorfen_kraul(); + +//Ruins of Ahn'Qiraj +//Scarlet Monastery +extern void AddSC_boss_arcanist_doan(); +extern void AddSC_boss_azshir_the_sleepless(); +extern void AddSC_boss_bloodmage_thalnos(); +extern void AddSC_boss_headless_horseman(); +extern void AddSC_boss_herod(); +extern void AddSC_boss_high_inquisitor_fairbanks(); +extern void AddSC_boss_houndmaster_loksey(); +extern void AddSC_boss_interrogator_vishas(); +extern void AddSC_boss_scorn(); +extern void AddSC_instance_scarlet_monastery(); +extern void AddSC_boss_mograine_and_whitemane(); + +//Scholomance +extern void AddSC_boss_darkmaster_gandling(); +extern void AddSC_boss_death_knight_darkreaver(); +extern void AddSC_boss_theolenkrastinov(); +extern void AddSC_boss_illuciabarov(); +extern void AddSC_boss_instructormalicia(); +extern void AddSC_boss_jandicebarov(); +extern void AddSC_boss_kormok(); +extern void AddSC_boss_lordalexeibarov(); +extern void AddSC_boss_lorekeeperpolkelt(); +extern void AddSC_boss_rasfrost(); +extern void AddSC_boss_theravenian(); +extern void AddSC_boss_vectus(); +extern void AddSC_instance_scholomance(); + +//Shadowfang keep +extern void AddSC_shadowfang_keep(); +extern void AddSC_instance_shadowfang_keep(); + +//Stratholme +extern void AddSC_boss_magistrate_barthilas(); +extern void AddSC_boss_maleki_the_pallid(); +extern void AddSC_boss_nerubenkan(); +extern void AddSC_boss_cannon_master_willey(); +extern void AddSC_boss_baroness_anastari(); +extern void AddSC_boss_ramstein_the_gorger(); +extern void AddSC_boss_timmy_the_cruel(); +extern void AddSC_boss_postmaster_malown(); +extern void AddSC_boss_baron_rivendare(); +extern void AddSC_boss_dathrohan_balnazzar(); +extern void AddSC_boss_order_of_silver_hand(); +extern void AddSC_instance_stratholme(); +extern void AddSC_stratholme(); + +//Sunken Temple +//Sunwell Plateau +extern void AddSC_instance_sunwell_plateau(); +extern void AddSC_boss_kalecgos(); +extern void AddSC_boss_brutallus(); +extern void AddSC_boss_felmyst(); +extern void AddSC_boss_eredar_twins(); +extern void AddSC_boss_muru(); +extern void AddSC_boss_kiljaeden(); +extern void AddSC_sunwell_plateau(); + +//Tanaris + +//Tempest Keep +//--Arcatraz +extern void AddSC_arcatraz(); +extern void AddSC_boss_harbinger_skyriss(); +extern void AddSC_instance_arcatraz(); + +//--Botanica +extern void AddSC_boss_high_botanist_freywinn(); +extern void AddSC_boss_laj(); +extern void AddSC_boss_warp_splinter(); + +//--The Eye +extern void AddSC_boss_alar(); +extern void AddSC_boss_kaelthas(); +extern void AddSC_boss_void_reaver(); +extern void AddSC_boss_high_astromancer_solarian(); +extern void AddSC_instance_the_eye(); +extern void AddSC_the_eye(); + +//--The Mechanar +extern void AddSC_boss_gatewatcher_iron_hand(); +extern void AddSC_boss_nethermancer_sepethrea(); +extern void AddSC_boss_pathaleon_the_calculator(); +extern void AddSC_instance_mechanar(); + +//Temple of ahn'qiraj +extern void AddSC_boss_cthun(); +extern void AddSC_boss_fankriss(); +extern void AddSC_boss_huhuran(); +extern void AddSC_bug_trio(); +extern void AddSC_boss_sartura(); +extern void AddSC_boss_skeram(); +extern void AddSC_boss_twinemperors(); +extern void AddSC_mob_anubisath_sentinel(); +extern void AddSC_instance_temple_of_ahnqiraj(); + +//Uldaman +extern void AddSC_boss_archaedas(); +extern void AddSC_boss_ironaya(); +extern void AddSC_uldaman(); +extern void AddSC_instance_uldaman(); + +//Ulduar +extern void AddSC_boss_auriaya(); +extern void AddSC_boss_flame_leviathan(); +extern void AddSC_boss_ignis(); +extern void AddSC_boss_razorscale(); +extern void AddSC_boss_xt002(); +//extern void AddSC_instance_ulduar(); + +//Un'Goro Crater +extern void AddSC_ungoro_crater(); + +//Upper blackrock spire + +//Utgarde Keep +extern void AddSC_boss_keleseth(); +extern void AddSC_boss_skarvald_dalronn(); +extern void AddSC_boss_ingvar_the_plunderer(); +extern void AddSC_instance_utgarde_keep(); +extern void AddSC_utgarde_keep(); + +//Wailing caverns +extern void AddSC_wailing_caverns(); +extern void AddSC_instance_wailing_caverns(); + +//Zul'Farrak +extern void AddSC_zulfarrak(); + +//Zul'Gurub +extern void AddSC_boss_jeklik(); +extern void AddSC_boss_venoxis(); +extern void AddSC_boss_marli(); +extern void AddSC_boss_mandokir(); +extern void AddSC_boss_gahzranka(); +extern void AddSC_boss_thekal(); +extern void AddSC_boss_arlokk(); +extern void AddSC_boss_jindo(); +extern void AddSC_boss_hakkar(); +extern void AddSC_boss_grilek(); +extern void AddSC_boss_hazzarah(); +extern void AddSC_boss_renataki(); +extern void AddSC_boss_wushoolay(); +extern void AddSC_instance_zulgurub(); + +//Zul'Aman +extern void AddSC_boss_akilzon(); +extern void AddSC_boss_halazzi(); +extern void AddSC_boss_hex_lord_malacrass(); +extern void AddSC_boss_janalai(); +extern void AddSC_boss_nalorakk(); +extern void AddSC_boss_zuljin(); +extern void AddSC_instance_zulaman(); +extern void AddSC_zulaman(); + +//Vault of Archavon +extern void AddSC_boss_archavon(); +extern void AddSC_boss_emalon(); +extern void AddSC_instance_archavon(); + +//Halls of Lightning +extern void AddSC_boss_bjarngrim(); +extern void AddSC_boss_loken(); +extern void AddSC_instance_halls_of_lightning(); + +//Region +extern void AddSC_wintergrasp(); + +void AddScripts() +{ + //custom + + //examples + AddSC_example_creature(); + AddSC_example_escort(); + AddSC_example_gossip_codebox(); + AddSC_example_misc(); + + //world + AddSC_areatrigger_scripts(); + AddSC_boss_emeriss(); + AddSC_boss_taerar(); + AddSC_boss_ysondre(); + AddSC_generic_creature(); + AddSC_go_scripts(); + AddSC_guards(); + AddSC_item_scripts(); + AddSC_npc_professions(); + AddSC_npcs_special(); + AddSC_npc_taxi(); + + //eastern kingdoms + //AddSC_alterac_mountains(); + AddSC_arathi_highlands(); + AddSC_blasted_lands(); + AddSC_boss_kruul(); + AddSC_burning_steppes(); + AddSC_dun_morogh(); + AddSC_eastern_plaguelands(); + AddSC_elwynn_forest(); + AddSC_eversong_woods(); + AddSC_ghostlands(); + AddSC_hinterlands(); + AddSC_ironforge(); + AddSC_loch_modan(); + AddSC_searing_gorge(); + AddSC_silvermoon_city(); + AddSC_silverpine_forest(); + AddSC_stormwind_city(); + AddSC_stranglethorn_vale(); + AddSC_tirisfal_glades(); + AddSC_undercity(); + AddSC_western_plaguelands(); + AddSC_westfall(); + + //kalimdor + AddSC_ashenvale(); + AddSC_azshara(); + AddSC_azuremyst_isle(); + AddSC_bloodmyst_isle(); + AddSC_boss_azuregos(); + AddSC_darkshore(); + AddSC_desolace(); + AddSC_dustwallow_marsh(); + AddSC_felwood(); + AddSC_feralas(); + AddSC_moonglade(); + AddSC_mulgore(); + AddSC_orgrimmar(); + AddSC_silithus(); + AddSC_stonetalon_mountains(); + AddSC_tanaris(); + AddSC_teldrassil(); + AddSC_the_barrens(); + AddSC_thousand_needles(); + AddSC_thunder_bluff(); + AddSC_winterspring(); + + //northrend + AddSC_borean_tundra(); + AddSC_dragonblight(); + AddSC_grizzly_hills(); + AddSC_icecrown(); + AddSC_sholazar_basin(); + AddSC_zuldrak(); + + //outland + AddSC_blades_edge_mountains(); + AddSC_boss_doomlordkazzak(); + AddSC_boss_doomwalker(); + AddSC_hellfire_peninsula(); + AddSC_isle_of_queldanas(); + AddSC_nagrand(); + AddSC_netherstorm(); + AddSC_shadowmoon_valley(); + AddSC_shattrath_city(); + AddSC_terokkar_forest(); + AddSC_zangarmarsh(); + + //-------------------- + //------ ZONE -------- + + //Aunchindoun + //--Auchenai Crypts + AddSC_boss_exarch_maladaar(); + AddSC_boss_shirrak_the_dead_watcher(); + //--Mana Tombs + AddSC_boss_nexusprince_shaffar(); + AddSC_boss_pandemonius(); + + //--Sekketh Halls + AddSC_boss_darkweaver_syth(); + AddSC_boss_talon_king_ikiss(); + AddSC_instance_sethekk_halls(); + + //--Shadow Labyrinth + AddSC_instance_shadow_labyrinth(); + AddSC_boss_ambassador_hellmaw(); + AddSC_boss_blackheart_the_inciter(); + AddSC_boss_grandmaster_vorpil(); + AddSC_boss_murmur(); + + //Azjol-Nerub + //--Ahn'kahet + AddSC_instance_ahnkahet(); + AddSC_boss_elder_nadox(); + + //Black Temple + AddSC_black_temple(); + AddSC_boss_illidan(); + AddSC_boss_shade_of_akama(); + AddSC_boss_supremus(); + AddSC_boss_gurtogg_bloodboil(); + AddSC_boss_mother_shahraz(); + AddSC_boss_reliquary_of_souls(); + AddSC_boss_teron_gorefiend(); + AddSC_boss_najentus(); + AddSC_boss_illidari_council(); + AddSC_instance_black_temple(); + + //Blackfathom Depths + AddSC_instance_blackfathom_deeps(); + + //Blackrock Depths + AddSC_blackrock_depths(); + AddSC_boss_ambassador_flamelash(); + AddSC_boss_anubshiah(); + AddSC_boss_draganthaurissan(); + AddSC_boss_general_angerforge(); + AddSC_boss_gorosh_the_dervish(); + AddSC_boss_grizzle(); + AddSC_boss_high_interrogator_gerstahn(); + AddSC_boss_magmus(); + AddSC_boss_moira_bronzebeard(); + AddSC_boss_tomb_of_seven(); + AddSC_instance_blackrock_depths(); + + //Blackrock Spire + AddSC_boss_drakkisath(); + AddSC_boss_halycon(); + AddSC_boss_highlordomokk(); + AddSC_boss_mothersmolderweb(); + AddSC_boss_overlordwyrmthalak(); + AddSC_boss_shadowvosh(); + AddSC_boss_thebeast(); + AddSC_boss_warmastervoone(); + AddSC_boss_quatermasterzigris(); + AddSC_boss_pyroguard_emberseer(); + AddSC_boss_gyth(); + AddSC_boss_rend_blackhand(); + + //Blackwing lair + AddSC_boss_razorgore(); + AddSC_boss_vael(); + AddSC_boss_broodlord(); + AddSC_boss_firemaw(); + AddSC_boss_ebonroc(); + AddSC_boss_flamegor(); + AddSC_boss_chromaggus(); + AddSC_boss_nefarian(); + AddSC_boss_victor_nefarius(); + + //Caverns of Time + //--Battle for Mt. Hyjal + AddSC_hyjal(); + AddSC_boss_archimonde(); + AddSC_instance_mount_hyjal(); + AddSC_hyjal_trash(); + AddSC_boss_rage_winterchill(); + AddSC_boss_anetheron(); + AddSC_boss_kazrogal(); + AddSC_boss_azgalor(); + + //--Old Hillsbrad + AddSC_boss_captain_skarloc(); + AddSC_boss_epoch_hunter(); + AddSC_boss_lieutenant_drake(); + AddSC_instance_old_hillsbrad(); + AddSC_old_hillsbrad(); + + //--The Dark Portal + AddSC_boss_aeonus(); + AddSC_boss_chrono_lord_deja(); + AddSC_boss_temporus(); + AddSC_dark_portal(); + AddSC_instance_dark_portal(); + + //Coilfang Resevoir + //--Serpent Shrine Cavern + AddSC_boss_fathomlord_karathress(); + AddSC_boss_hydross_the_unstable(); + AddSC_boss_lady_vashj(); + AddSC_boss_leotheras_the_blind(); + AddSC_boss_morogrim_tidewalker(); + AddSC_instance_serpentshrine_cavern(); + AddSC_boss_the_lurker_below(); + + //--Slave Pens + + //--Steam Vault + AddSC_boss_hydromancer_thespia(); + AddSC_boss_mekgineer_steamrigger(); + AddSC_boss_warlord_kalithresh(); + AddSC_instance_steam_vault(); + + //--Underbog + AddSC_boss_hungarfen(); + AddSC_boss_the_black_stalker(); + + //Deadmines + AddSC_instance_deadmines(); + + //Scarlet Enclave + AddSC_the_scarlet_enclave(); + + //Gruul's Lair + AddSC_boss_gruul(); + AddSC_boss_high_king_maulgar(); + AddSC_instance_gruuls_lair(); + + //Hellfire Citadel + //--Blood Furnace + AddSC_boss_broggok(); + AddSC_boss_kelidan_the_breaker(); + AddSC_boss_the_maker(); + AddSC_instance_blood_furnace(); + + //--Magtheridon's Lair + AddSC_boss_magtheridon(); + AddSC_instance_magtheridons_lair(); + + //--Shattered Halls + AddSC_boss_grand_warlock_nethekurse(); + AddSC_boss_warbringer_omrogg(); + AddSC_boss_warchief_kargath_bladefist(); + AddSC_instance_shattered_halls(); + + //--Ramparts + AddSC_boss_watchkeeper_gargolmar(); + AddSC_boss_omor_the_unscarred(); + AddSC_boss_vazruden_the_herald(); + AddSC_instance_ramparts(); + + //Karazhan + AddSC_boss_attumen(); + AddSC_boss_curator(); + AddSC_boss_maiden_of_virtue(); + AddSC_boss_shade_of_aran(); + AddSC_boss_malchezaar(); + AddSC_boss_terestian_illhoof(); + AddSC_boss_moroes(); + AddSC_bosses_opera(); + AddSC_boss_netherspite(); + AddSC_instance_karazhan(); + AddSC_karazhan(); + AddSC_boss_nightbane(); + + //Lower Blackrock Spire + + // Magister's Terrace + AddSC_boss_felblood_kaelthas(); + AddSC_boss_selin_fireheart(); + AddSC_boss_vexallus(); + AddSC_boss_priestess_delrissa(); + AddSC_instance_magisters_terrace(); + AddSC_magisters_terrace(); + + //Maraudon + AddSC_boss_celebras_the_cursed(); + AddSC_boss_landslide(); + AddSC_boss_noxxion(); + AddSC_boss_ptheradras(); + + //Molten core + AddSC_boss_lucifron(); + AddSC_boss_magmadar(); + AddSC_boss_gehennas(); + AddSC_boss_garr(); + AddSC_boss_baron_geddon(); + AddSC_boss_shazzrah(); + AddSC_boss_golemagg(); + AddSC_boss_sulfuron(); + AddSC_boss_majordomo(); + AddSC_boss_ragnaros(); + AddSC_instance_molten_core(); + AddSC_molten_core(); + + //Naxxramas + AddSC_boss_anubrekhan(); + AddSC_boss_maexxna(); + AddSC_boss_patchwerk(); + AddSC_boss_grobbulus(); + AddSC_boss_razuvious(); + AddSC_boss_kelthuzad(); + AddSC_boss_loatheb(); + AddSC_boss_noth(); + AddSC_boss_gluth(); + AddSC_boss_sapphiron(); + AddSC_boss_four_horsemen(); + AddSC_boss_faerlina(); + AddSC_boss_heigan(); + AddSC_boss_gothik(); + AddSC_boss_thaddius(); + AddSC_instance_naxxramas(); + + //The Nexus + //Eye of Eternety + + //Nexus + AddSC_boss_magus_telestra(); + AddSC_boss_anomalus(); + AddSC_boss_ormorok(); + AddSC_boss_keristrasza(); + AddSC_instance_nexus(); + + //Oculus + + //Obsidian Sanctum + AddSC_boss_sartharion(); + AddSC_instance_obsidian_sanctum(); + + //Onyxia's Lair + AddSC_boss_onyxia(); + + //Ragefire Chasm + //Razorfen Downs + AddSC_boss_amnennar_the_coldbringer(); + AddSC_razorfen_downs(); + + //Razorfen Kraul + AddSC_razorfen_kraul(); + + //Ruins of Ahn'Qiraj + //Scarlet Monastery + AddSC_boss_arcanist_doan(); + AddSC_boss_azshir_the_sleepless(); + AddSC_boss_bloodmage_thalnos(); + AddSC_boss_headless_horseman(); + AddSC_boss_herod(); + AddSC_boss_high_inquisitor_fairbanks(); + AddSC_boss_houndmaster_loksey(); + AddSC_boss_interrogator_vishas(); + AddSC_boss_scorn(); + AddSC_instance_scarlet_monastery(); + AddSC_boss_mograine_and_whitemane(); + + //Scholomance + AddSC_boss_darkmaster_gandling(); + AddSC_boss_death_knight_darkreaver(); + AddSC_boss_theolenkrastinov(); + AddSC_boss_illuciabarov(); + AddSC_boss_instructormalicia(); + AddSC_boss_jandicebarov(); + AddSC_boss_kormok(); + AddSC_boss_lordalexeibarov(); + AddSC_boss_lorekeeperpolkelt(); + AddSC_boss_rasfrost(); + AddSC_boss_theravenian(); + AddSC_boss_vectus(); + AddSC_instance_scholomance(); + + //Shadowfang keep + AddSC_shadowfang_keep(); + AddSC_instance_shadowfang_keep(); + + //Stratholme + AddSC_boss_magistrate_barthilas(); + AddSC_boss_maleki_the_pallid(); + AddSC_boss_nerubenkan(); + AddSC_boss_cannon_master_willey(); + AddSC_boss_baroness_anastari(); + AddSC_boss_ramstein_the_gorger(); + AddSC_boss_timmy_the_cruel(); + AddSC_boss_postmaster_malown(); + AddSC_boss_baron_rivendare(); + AddSC_boss_dathrohan_balnazzar(); + AddSC_boss_order_of_silver_hand(); + AddSC_instance_stratholme(); + AddSC_stratholme(); + + //Sunken Temple + //Sunwell Plateau + AddSC_instance_sunwell_plateau(); + AddSC_boss_kalecgos(); + AddSC_boss_brutallus(); + AddSC_boss_felmyst(); + AddSC_boss_eredar_twins(); + AddSC_boss_muru(); + AddSC_boss_kiljaeden(); + AddSC_sunwell_plateau(); + + //Tanaris + + //Tempest Keep + //--Arcatraz + AddSC_arcatraz(); + AddSC_boss_harbinger_skyriss(); + AddSC_instance_arcatraz(); + + //--Botanica + AddSC_boss_high_botanist_freywinn(); + AddSC_boss_laj(); + AddSC_boss_warp_splinter(); + + //--The Eye + AddSC_boss_alar(); + AddSC_boss_kaelthas(); + AddSC_boss_void_reaver(); + AddSC_boss_high_astromancer_solarian(); + AddSC_instance_the_eye(); + AddSC_the_eye(); + + //--The Mechanar + AddSC_boss_gatewatcher_iron_hand(); + AddSC_boss_nethermancer_sepethrea(); + AddSC_boss_pathaleon_the_calculator(); + AddSC_instance_mechanar(); + + //Temple of ahn'qiraj + AddSC_boss_cthun(); + AddSC_boss_fankriss(); + AddSC_boss_huhuran(); + AddSC_bug_trio(); + AddSC_boss_sartura(); + AddSC_boss_skeram(); + AddSC_boss_twinemperors(); + AddSC_mob_anubisath_sentinel(); + AddSC_instance_temple_of_ahnqiraj(); + + //Uldaman + AddSC_boss_archaedas(); + AddSC_boss_ironaya(); + AddSC_uldaman(); + AddSC_instance_uldaman(); + + //Ulduar + AddSC_boss_auriaya(); + AddSC_boss_flame_leviathan(); + AddSC_boss_ignis(); + AddSC_boss_razorscale(); + AddSC_boss_xt002(); + // AddSC_instance_ulduar(); + + //Un'Goro Crater + AddSC_ungoro_crater(); + + //Upper blackrock spire + + //Utgarde Keep + AddSC_boss_keleseth(); + AddSC_boss_skarvald_dalronn(); + AddSC_boss_ingvar_the_plunderer(); + AddSC_instance_utgarde_keep(); + AddSC_utgarde_keep(); + + //Wailing caverns + AddSC_wailing_caverns(); + AddSC_instance_wailing_caverns(); + + //Zul'Farrak + AddSC_zulfarrak(); + + //Zul'Gurub + AddSC_boss_jeklik(); + AddSC_boss_venoxis(); + AddSC_boss_marli(); + AddSC_boss_mandokir(); + AddSC_boss_gahzranka(); + AddSC_boss_thekal(); + AddSC_boss_arlokk(); + AddSC_boss_jindo(); + AddSC_boss_hakkar(); + AddSC_boss_grilek(); + AddSC_boss_hazzarah(); + AddSC_boss_renataki(); + AddSC_boss_wushoolay(); + AddSC_instance_zulgurub(); + + //Zul'Aman + AddSC_boss_akilzon(); + AddSC_boss_halazzi(); + AddSC_boss_hex_lord_malacrass(); + AddSC_boss_janalai(); + AddSC_boss_nalorakk(); + AddSC_boss_zuljin(); + AddSC_instance_zulaman(); + AddSC_zulaman(); + + //Vault of Archavon + AddSC_boss_archavon(); + AddSC_boss_emalon(); + AddSC_instance_archavon(); + + //Halls of Lightning + AddSC_boss_bjarngrim(); + AddSC_boss_loken(); + AddSC_instance_halls_of_lightning(); + + //Region + AddSC_wintergrasp(); +} diff --git a/src/bindings/scripts/system/ScriptLoader.h b/src/bindings/scripts/system/ScriptLoader.h new file mode 100644 index 00000000000..57fb7d821f1 --- /dev/null +++ b/src/bindings/scripts/system/ScriptLoader.h @@ -0,0 +1,10 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 +* This program is free software licensed under GPL version 2 +* Please see the included DOCS/LICENSE.TXT for more information */ + +#ifndef SC_SCRIPTLOADER_H +#define SC_SCRIPTLOADER_H + +void AddScripts(); + +#endif -- cgit v1.2.3 From 4b31577eb35633d4180885b4e7cb38b61422f7b1 Mon Sep 17 00:00:00 2001 From: Anubisss Date: Sun, 16 Aug 2009 01:54:50 +0200 Subject: *Implement Championing system. More info about this patch at http://www.wowwiki.com/Championing *Dont forget that this system can only works fine if has a DB support with level 80 instances' reputations(so need some data to creature_onkill_reputation). --HG-- branch : trunk --- src/game/Player.cpp | 34 ++++++++++++++++++++++++++++++---- src/game/Player.h | 5 +++++ src/game/SpellAuras.cpp | 23 +++++++++++++++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 96a48225d56..8f29ec0a0a7 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -479,6 +479,8 @@ Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputa m_isWorldObject = true; sWorld.IncreasePlayerCount(); + + m_ChampioningFaction = 0; } Player::~Player () @@ -6110,11 +6112,35 @@ void Player::RewardReputation(Unit *pVictim, float rate) if(!Rep) return; + uint32 ChampioningFaction = 0; + + if(GetChampioningFaction()) + { + // support for: Championing - http://www.wowwiki.com/Championing + + Map const *pMap = GetMap(); + if(pMap && pMap->IsDungeon()) + { + bool Heroic = pMap->IsHeroic(); + + InstanceTemplate const *pInstance = objmgr.GetInstanceTemplate(pMap->GetId()); + if(pInstance) + { + AccessRequirement const *pAccessRequirement = objmgr.GetAccessRequirement(pInstance->access_id); + if(pAccessRequirement) + { + if(!pMap->IsRaid() && ((!Heroic && pAccessRequirement->levelMin == 80) || (Heroic && pAccessRequirement->heroicLevelMin == 80))) + ChampioningFaction = GetChampioningFaction(); + } + } + } + } + if(Rep->repfaction1 && (!Rep->team_dependent || GetTeam()==ALLIANCE)) { - int32 donerep1 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue1, Rep->repfaction1, false); + int32 donerep1 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue1, ChampioningFaction ? ChampioningFaction : Rep->repfaction1, false); donerep1 = int32(donerep1*rate); - FactionEntry const *factionEntry1 = sFactionStore.LookupEntry(Rep->repfaction1); + FactionEntry const *factionEntry1 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rep->repfaction1); uint32 current_reputation_rank1 = GetReputationMgr().GetRank(factionEntry1); if (factionEntry1 && current_reputation_rank1 <= Rep->reputation_max_cap1) GetReputationMgr().ModifyReputation(factionEntry1, donerep1); @@ -6130,9 +6156,9 @@ void Player::RewardReputation(Unit *pVictim, float rate) if(Rep->repfaction2 && (!Rep->team_dependent || GetTeam()==HORDE)) { - int32 donerep2 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue2, Rep->repfaction2, false); + int32 donerep2 = CalculateReputationGain(pVictim->getLevel(), Rep->repvalue2, ChampioningFaction ? ChampioningFaction : Rep->repfaction2, false); donerep2 = int32(donerep2*rate); - FactionEntry const *factionEntry2 = sFactionStore.LookupEntry(Rep->repfaction2); + FactionEntry const *factionEntry2 = sFactionStore.LookupEntry(ChampioningFaction ? ChampioningFaction : Rep->repfaction2); uint32 current_reputation_rank2 = GetReputationMgr().GetRank(factionEntry2); if (factionEntry2 && current_reputation_rank2 <= Rep->reputation_max_cap2) GetReputationMgr().ModifyReputation(factionEntry2, donerep2); diff --git a/src/game/Player.h b/src/game/Player.h index 7d417ffda11..480e74079d5 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2204,6 +2204,9 @@ class MANGOS_DLL_SPEC Player : public Unit //bool isActiveObject() const { return true; } bool canSeeSpellClickOn(Creature const* creature) const; + + inline uint32 GetChampioningFaction() const { return m_ChampioningFaction; } + inline void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; } protected: uint32 m_contestedPvPTimer; @@ -2479,6 +2482,8 @@ class MANGOS_DLL_SPEC Player : public Unit ReputationMgr m_reputationMgr; SpellCooldowns m_spellCooldowns; + + uint32 m_ChampioningFaction; }; void AddItemsSetItem(Player*player,Item *item); diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp index d19d8120263..77946cf7bba 100644 --- a/src/game/SpellAuras.cpp +++ b/src/game/SpellAuras.cpp @@ -2872,6 +2872,29 @@ void AuraEffect::HandleAuraDummy(bool apply, bool Real, bool changeAmount) } return; } + case 57819: // Argent Champion + case 57820: // Ebon Champion + case 57821: // Champion of the Kirin Tor + case 57822: // Wyrmrest Champion + { + if(!caster || caster->GetTypeId() != TYPEID_PLAYER) + return; + + uint32 FactionID = 0; + + if(apply) + { + switch(m_spellProto->Id) + { + case 57819: FactionID = 1106; break; // Argent Crusade + case 57820: FactionID = 1098; break; // Knights of the Ebon Blade + case 57821: FactionID = 1090; break; // Kirin Tor + case 57822: FactionID = 1091; break; // The Wyrmrest Accord + } + } + ((Player*)caster)->SetChampioningFaction(FactionID); + return; + } // LK Intro VO (1) case 58204: if(m_target->GetTypeId() == TYPEID_PLAYER) -- cgit v1.2.3 From 93709273eca3e265612ecd0ca6c04a8de94aab3e Mon Sep 17 00:00:00 2001 From: Kudlaty Date: Sun, 16 Aug 2009 02:12:14 +0200 Subject: Merge [SD2] r1294 Let EscortAI fill waypoint list at Start(). Scripts using escortAI then no longer need to call FillPointMovementListForCreature(). r1295 Move one misplaced source file. --HG-- branch : trunk --- src/bindings/scripts/CMakeLists.txt | 2 +- src/bindings/scripts/VC80/80ScriptDev2.vcproj | 8 +- src/bindings/scripts/VC90/90ScriptDev2.vcproj | 8 +- src/bindings/scripts/base/escortAI.cpp | 5 + .../scripts/eastern_kingdoms/arathi_highlands.cpp | 6 +- .../scripts/eastern_kingdoms/eversong_woods.cpp | 6 +- .../scripts/eastern_kingdoms/ghostlands.cpp | 6 +- .../scripts/eastern_kingdoms/hinterlands.cpp | 6 +- .../scripts/eastern_kingdoms/isle_of_queldanas.cpp | 154 +++++++++++++++++++++ .../scripts/scripts/eastern_kingdoms/westfall.cpp | 12 +- .../scripts/scripts/examples/example_escort.cpp | 13 +- .../scripts/scripts/kalimdor/ashenvale.cpp | 12 +- .../scripts/scripts/kalimdor/azuremyst_isle.cpp | 6 +- .../scripts/scripts/kalimdor/darkshore.cpp | 6 +- src/bindings/scripts/scripts/kalimdor/feralas.cpp | 6 +- .../scripts/kalimdor/stonetalon_mountains.cpp | 6 +- src/bindings/scripts/scripts/kalimdor/tanaris.cpp | 6 +- .../scripts/scripts/kalimdor/the_barrens.cpp | 6 +- .../scripts/scripts/kalimdor/thousand_needles.cpp | 18 +-- .../scripts/scripts/northrend/sholazar_basin.cpp | 6 +- .../scripts/scripts/outland/hellfire_peninsula.cpp | 6 +- .../scripts/scripts/outland/isle_of_queldanas.cpp | 154 --------------------- .../scripts/scripts/outland/shadowmoon_valley.cpp | 6 +- .../scripts/scripts/outland/shattrath_city.cpp | 6 +- .../scripts/scripts/outland/terokkar_forest.cpp | 12 +- .../scripts/scripts/outland/zangarmarsh.cpp | 6 +- .../scripts/scripts/world/npcs_special.cpp | 6 +- .../shadow_labyrinth/boss_ambassador_hellmaw.cpp | 6 +- .../zone/blackrock_depths/blackrock_depths.cpp | 12 +- .../old_hillsbrad/old_hillsbrad.cpp | 12 +- .../eastern_plaguelands/the_scarlet_enclave.cpp | 6 +- .../scripts/scripts/zone/karazhan/karazhan.cpp | 6 +- .../scripts/zone/scarlet_monastery/boss_herod.cpp | 6 +- .../zone/shadowfang_keep/shadowfang_keep.cpp | 6 +- .../zone/wailing_caverns/wailing_caverns.cpp | 6 +- src/bindings/scripts/system/ScriptLoader.cpp | 4 +- 36 files changed, 206 insertions(+), 352 deletions(-) create mode 100644 src/bindings/scripts/scripts/eastern_kingdoms/isle_of_queldanas.cpp delete mode 100644 src/bindings/scripts/scripts/outland/isle_of_queldanas.cpp (limited to 'src') diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index b34978b5ce9..fd258cd6c81 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -28,6 +28,7 @@ SET(trinityscript_LIB_SRCS scripts/eastern_kingdoms/ghostlands.cpp scripts/eastern_kingdoms/hinterlands.cpp scripts/eastern_kingdoms/ironforge.cpp + scripts/eastern_kingdoms/isle_of_queldanas.cpp scripts/eastern_kingdoms/loch_modan.cpp scripts/eastern_kingdoms/searing_gorge.cpp scripts/eastern_kingdoms/silvermoon_city.cpp @@ -73,7 +74,6 @@ SET(trinityscript_LIB_SRCS scripts/outland/boss_doomlord_kazzak.cpp scripts/outland/boss_doomwalker.cpp scripts/outland/hellfire_peninsula.cpp - scripts/outland/isle_of_queldanas.cpp scripts/outland/nagrand.cpp scripts/outland/netherstorm.cpp scripts/outland/shadowmoon_valley.cpp diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index 38ffd7dfa73..95469729521 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -442,6 +442,10 @@ RelativePath="..\scripts\eastern_kingdoms\ironforge.cpp" > + + @@ -637,10 +641,6 @@ RelativePath="..\scripts\outland\hellfire_peninsula.cpp" > - - diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index 80f34afd82f..0db7d101594 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -439,6 +439,10 @@ RelativePath="..\scripts\eastern_kingdoms\ironforge.cpp" > + + @@ -634,10 +638,6 @@ RelativePath="..\scripts\outland\hellfire_peninsula.cpp" > - - diff --git a/src/bindings/scripts/base/escortAI.cpp b/src/bindings/scripts/base/escortAI.cpp index 4fcfb00b0f9..52b398cd59c 100644 --- a/src/bindings/scripts/base/escortAI.cpp +++ b/src/bindings/scripts/base/escortAI.cpp @@ -345,6 +345,11 @@ void npc_escortAI::Start(bool bIsActiveAttacker, bool bRun, uint64 uiPlayerGUID, return; } + if (!WaypointList.empty()) + WaypointList.clear(); + + FillPointMovementListForCreature(); + if (WaypointList.empty()) { error_db_log("TSCR: EscortAI Start with 0 waypoints (possible missing entry in script_waypoint)"); diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp index d95fce3a016..bc33d9841eb 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/arathi_highlands.cpp @@ -114,11 +114,7 @@ bool QuestAccept_npc_professor_phizzlethorpe(Player* pPlayer, Creature* pCreatur CreatureAI* GetAI_npc_professor_phizzlethorpeAI(Creature* pCreature) { - npc_professor_phizzlethorpeAI* professor_phizzlethorpeAI = new npc_professor_phizzlethorpeAI(pCreature); - - professor_phizzlethorpeAI->FillPointMovementListForCreature(); - - return professor_phizzlethorpeAI; + return new npc_professor_phizzlethorpeAI(pCreature); } void AddSC_arathi_highlands() diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp index 78326ffb82b..6c76adeaecb 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/eversong_woods.cpp @@ -85,11 +85,7 @@ struct TRINITY_DLL_DECL npc_prospector_anvilwardAI : public npc_escortAI CreatureAI* GetAI_npc_prospector_anvilward(Creature* pCreature) { - npc_prospector_anvilwardAI* thisAI = new npc_prospector_anvilwardAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return thisAI; + return new npc_prospector_anvilwardAI(pCreature); } bool GossipHello_npc_prospector_anvilward(Player* pPlayer, Creature* pCreature) diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp index 2416096e6af..c96923661de 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/ghostlands.cpp @@ -234,11 +234,7 @@ bool QuestAccept_npc_ranger_lilatha(Player* pPlayer, Creature* pCreature, Quest CreatureAI* GetAI_npc_ranger_lilathaAI(Creature* pCreature) { - npc_ranger_lilathaAI* ranger_lilathaAI = new npc_ranger_lilathaAI(pCreature); - - ranger_lilathaAI->FillPointMovementListForCreature(); - - return ranger_lilathaAI; + return new npc_ranger_lilathaAI(pCreature); } void AddSC_ghostlands() diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp index 69005114ff6..46f12159acf 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/hinterlands.cpp @@ -215,11 +215,7 @@ bool QuestAccept_npc_rinji(Player* pPlayer, Creature* pCreature, const Quest* pQ CreatureAI* GetAI_npc_rinji(Creature* pCreature) { - npc_rinjiAI* pTempAI = new npc_rinjiAI(pCreature); - - pTempAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pTempAI; + return new npc_rinjiAI(pCreature); } void AddSC_hinterlands() diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/isle_of_queldanas.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/isle_of_queldanas.cpp new file mode 100644 index 00000000000..469e2f712f1 --- /dev/null +++ b/src/bindings/scripts/scripts/eastern_kingdoms/isle_of_queldanas.cpp @@ -0,0 +1,154 @@ +/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +/* ScriptData +SDName: Isle_of_Queldanas +SD%Complete: 100 +SDComment: Quest support: 11524, 11525, 11532, 11533, 11542, 11543, 11541 +SDCategory: Isle Of Quel'Danas +EndScriptData */ + +/* ContentData +npc_converted_sentry +npc_greengill_slave +EndContentData */ + +#include "precompiled.h" + +/*###### +## npc_converted_sentry +######*/ + +#define SAY_CONVERTED_1 -1000284 +#define SAY_CONVERTED_2 -1000284 + +#define SPELL_CONVERT_CREDIT 45009 + +struct TRINITY_DLL_DECL npc_converted_sentryAI : public ScriptedAI +{ + npc_converted_sentryAI(Creature *c) : ScriptedAI(c) {} + + bool Credit; + uint32 Timer; + + void Reset() + { + Credit = false; + Timer = 2500; + } + + void MoveInLineOfSight(Unit *who) + { return; } + void EnterCombat(Unit* who) + { } + + void UpdateAI(const uint32 diff) + { + if (!Credit) + { + if (Timer <= diff) + { + uint32 i = urand(1,2); + if (i==1) + DoScriptText(SAY_CONVERTED_1, m_creature); + else + DoScriptText(SAY_CONVERTED_2, m_creature); + + DoCast(m_creature, SPELL_CONVERT_CREDIT); + if (m_creature->isPet()) + CAST_PET(m_creature)->SetDuration(7500); + Credit = true; + }else Timer -= diff; + } + } +}; +CreatureAI* GetAI_npc_converted_sentry(Creature* pCreature) +{ + return new npc_converted_sentryAI (pCreature); +} + +/*###### +## npc_greengill_slave +######*/ + +#define ENRAGE 45111 +#define ORB 45109 +#define QUESTG 11541 +#define DM 25060 + +struct TRINITY_DLL_DECL npc_greengill_slaveAI : public ScriptedAI +{ + npc_greengill_slaveAI(Creature* c) : ScriptedAI(c) {} + + uint64 PlayerGUID; + + void EnterCombat(Unit* who){} + + void Reset() + { + PlayerGUID = 0; + } + + void SpellHit(Unit* caster, const SpellEntry* spell) + { + if (!caster) + return; + + if (caster->GetTypeId() == TYPEID_PLAYER && spell->Id == ORB && !m_creature->HasAura(ENRAGE)) + { + PlayerGUID = caster->GetGUID(); + if (PlayerGUID) + { + Unit* plr = Unit::GetUnit((*m_creature), PlayerGUID); + if (plr && CAST_PLR(plr)->GetQuestStatus(QUESTG) == QUEST_STATUS_INCOMPLETE) + DoCast(plr, 45110, true); + } + DoCast(m_creature, ENRAGE); + Unit* Myrmidon = me->FindNearestCreature(DM, 70); + if (Myrmidon) + { + m_creature->AddThreat(Myrmidon, 100000.0f); + AttackStart(Myrmidon); + } + } + } + + void UpdateAI(const uint32 diff) + { + DoMeleeAttackIfReady(); + } +}; + +CreatureAI* GetAI_npc_greengill_slaveAI(Creature* pCreature) +{ + return new npc_greengill_slaveAI(pCreature); +} + +void AddSC_isle_of_queldanas() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="npc_converted_sentry"; + newscript->GetAI = &GetAI_npc_converted_sentry; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_greengill_slave"; + newscript->GetAI = &GetAI_npc_greengill_slaveAI; + newscript->RegisterSelf(); +} + diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp index dadef602e04..3ddaffe6e25 100644 --- a/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp +++ b/src/bindings/scripts/scripts/eastern_kingdoms/westfall.cpp @@ -176,11 +176,7 @@ bool QuestAccept_npc_daphne_stilwell(Player* pPlayer, Creature* pCreature, const CreatureAI* GetAI_npc_daphne_stilwell(Creature* pCreature) { - npc_daphne_stilwellAI* thisAI = new npc_daphne_stilwellAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return thisAI; + return new npc_daphne_stilwellAI(pCreature); } /*###### @@ -250,11 +246,7 @@ bool QuestAccept_npc_defias_traitor(Player* pPlayer, Creature* pCreature, Quest CreatureAI* GetAI_npc_defias_traitor(Creature* pCreature) { - npc_defias_traitorAI* thisAI = new npc_defias_traitorAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return thisAI; + return new npc_defias_traitorAI(pCreature); } void AddSC_westfall() diff --git a/src/bindings/scripts/scripts/examples/example_escort.cpp b/src/bindings/scripts/scripts/examples/example_escort.cpp index 21d29f848f2..23c97fb9b60 100644 --- a/src/bindings/scripts/scripts/examples/example_escort.cpp +++ b/src/bindings/scripts/scripts/examples/example_escort.cpp @@ -169,18 +169,7 @@ struct TRINITY_DLL_DECL example_escortAI : public npc_escortAI CreatureAI* GetAI_example_escort(Creature* pCreature) { - example_escortAI* pTestAI = new example_escortAI(pCreature); - - // this should be done over the db table scriptdev2.script_waypoint - // when using the db, you have to call this line instead of the ->AddWaypoint(): - // pTestAI->FillPointMovementListForCreature(); - pTestAI->AddWaypoint(0, 1231.0f, -4419.0f, 23.0f); - pTestAI->AddWaypoint(1, 1198.0f, -4440.0f, 23.0f); - pTestAI->AddWaypoint(2, 1208.0f, -4392.0f, 23.0f); - pTestAI->AddWaypoint(3, 1231.0f, -4419.0f, 23.0f, 5000); - pTestAI->AddWaypoint(4, 1208.0f, -4392.0f, 23.0f, 5000); - - return pTestAI; + return new example_escortAI(pCreature); } bool GossipHello_example_escort(Player* pPlayer, Creature* pCreature) diff --git a/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp b/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp index 271caf17215..86f3286c92f 100644 --- a/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp +++ b/src/bindings/scripts/scripts/kalimdor/ashenvale.cpp @@ -144,11 +144,7 @@ bool QuestAccept_npc_torek(Player* pPlayer, Creature* pCreature, Quest const* qu CreatureAI* GetAI_npc_torek(Creature* pCreature) { - npc_torekAI* thisAI = new npc_torekAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return thisAI; + return new npc_torekAI(pCreature); } /*#### @@ -230,11 +226,7 @@ bool QuestAccept_npc_ruul_snowhoof(Player* pPlayer, Creature* pCreature, Quest c CreatureAI* GetAI_npc_ruul_snowhoofAI(Creature* pCreature) { - npc_ruul_snowhoofAI* ruul_snowhoofAI = new npc_ruul_snowhoofAI(pCreature); - - ruul_snowhoofAI->FillPointMovementListForCreature(); - - return ruul_snowhoofAI; + return new npc_ruul_snowhoofAI(pCreature); } void AddSC_ashenvale() diff --git a/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp b/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp index 1d8d283a7bb..71341f4d0ee 100644 --- a/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp +++ b/src/bindings/scripts/scripts/kalimdor/azuremyst_isle.cpp @@ -383,11 +383,7 @@ bool QuestAccept_npc_magwin(Player* pPlayer, Creature* pCreature, Quest const* q CreatureAI* GetAI_npc_magwinAI(Creature* pCreature) { - npc_magwinAI* magwinAI = new npc_magwinAI(pCreature); - - magwinAI->FillPointMovementListForCreature(); - - return magwinAI; + return new npc_magwinAI(pCreature); } /*###### diff --git a/src/bindings/scripts/scripts/kalimdor/darkshore.cpp b/src/bindings/scripts/scripts/kalimdor/darkshore.cpp index fa10893582f..fef5cf36e43 100644 --- a/src/bindings/scripts/scripts/kalimdor/darkshore.cpp +++ b/src/bindings/scripts/scripts/kalimdor/darkshore.cpp @@ -145,11 +145,7 @@ struct TRINITY_DLL_DECL npc_prospector_remtravelAI : public npc_escortAI CreatureAI* GetAI_npc_prospector_remtravel(Creature* pCreature) { - npc_prospector_remtravelAI* tempAI = new npc_prospector_remtravelAI(pCreature); - - tempAI->FillPointMovementListForCreature(); - - return tempAI; + return new npc_prospector_remtravelAI(pCreature); } bool QuestAccept_npc_prospector_remtravel(Player* pPlayer, Creature* pCreature, const Quest* pQuest) diff --git a/src/bindings/scripts/scripts/kalimdor/feralas.cpp b/src/bindings/scripts/scripts/kalimdor/feralas.cpp index 0816a171644..826d9cf19f8 100644 --- a/src/bindings/scripts/scripts/kalimdor/feralas.cpp +++ b/src/bindings/scripts/scripts/kalimdor/feralas.cpp @@ -143,11 +143,7 @@ struct TRINITY_DLL_DECL npc_oox22feAI : public npc_escortAI CreatureAI* GetAI_npc_oox22fe(Creature* pCreature) { - npc_oox22feAI* oox22AI = new npc_oox22feAI(pCreature); - - oox22AI->FillPointMovementListForCreature(); - - return oox22AI; + return new npc_oox22feAI(pCreature); } bool QuestAccept_npc_oox22fe(Player* pPlayer, Creature* pCreature, const Quest* pQuest) diff --git a/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp b/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp index ddf852063c7..5c9dbe0b199 100644 --- a/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp +++ b/src/bindings/scripts/scripts/kalimdor/stonetalon_mountains.cpp @@ -146,11 +146,7 @@ bool QuestAccept_npc_kaya_flathoof(Player* pPlayer, Creature* pCreature, Quest c CreatureAI* GetAI_npc_kaya_flathoofAI(Creature* pCreature) { - npc_kaya_flathoofAI* kayaAI = new npc_kaya_flathoofAI(pCreature); - - kayaAI->FillPointMovementListForCreature(); - - return kayaAI; + return new npc_kaya_flathoofAI(pCreature); } /*###### diff --git a/src/bindings/scripts/scripts/kalimdor/tanaris.cpp b/src/bindings/scripts/scripts/kalimdor/tanaris.cpp index 8298190bf9b..be97636270e 100644 --- a/src/bindings/scripts/scripts/kalimdor/tanaris.cpp +++ b/src/bindings/scripts/scripts/kalimdor/tanaris.cpp @@ -214,11 +214,7 @@ struct TRINITY_DLL_DECL npc_custodian_of_timeAI : public npc_escortAI CreatureAI* GetAI_npc_custodian_of_time(Creature* pCreature) { - npc_custodian_of_timeAI* custodian_of_timeAI = new npc_custodian_of_timeAI(pCreature); - - custodian_of_timeAI->FillPointMovementListForCreature(); - - return custodian_of_timeAI; + return new npc_custodian_of_timeAI(pCreature); } /*###### diff --git a/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp b/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp index ccb83e8c029..aff67963445 100644 --- a/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp +++ b/src/bindings/scripts/scripts/kalimdor/the_barrens.cpp @@ -146,11 +146,7 @@ struct TRINITY_DLL_DECL npc_giltharesAI : public npc_escortAI CreatureAI* GetAI_npc_gilthares(Creature* pCreature) { - npc_giltharesAI* pTempAI = new npc_giltharesAI(pCreature); - - pTempAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pTempAI; + return new npc_giltharesAI(pCreature); } bool QuestAccept_npc_gilthares(Player* pPlayer, Creature* pCreature, const Quest* pQuest) diff --git a/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp b/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp index 6736ec18b29..6ec4a1403ab 100644 --- a/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp +++ b/src/bindings/scripts/scripts/kalimdor/thousand_needles.cpp @@ -82,11 +82,7 @@ struct TRINITY_DLL_DECL npc_kanatiAI : public npc_escortAI CreatureAI* GetAI_npc_kanati(Creature* pCreature) { - npc_kanatiAI* pTempAI = new npc_kanatiAI(pCreature); - - pTempAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pTempAI; + return new npc_kanatiAI(pCreature); } bool QuestAccept_npc_kanati(Player* pPlayer, Creature* pCreature, const Quest* pQuest) @@ -170,11 +166,7 @@ struct TRINITY_DLL_DECL npc_lakota_windsongAI : public npc_escortAI CreatureAI* GetAI_npc_lakota_windsong(Creature* pCreature) { - npc_lakota_windsongAI* pTempAI = new npc_lakota_windsongAI(pCreature); - - pTempAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pTempAI; + return new npc_lakota_windsongAI(pCreature); } bool QuestAccept_npc_lakota_windsong(Player* pPlayer, Creature* pCreature, const Quest* pQuest) @@ -247,11 +239,7 @@ struct TRINITY_DLL_DECL npc_paoka_swiftmountainAI : public npc_escortAI CreatureAI* GetAI_npc_paoka_swiftmountain(Creature* pCreature) { - npc_paoka_swiftmountainAI* pTempAI = new npc_paoka_swiftmountainAI(pCreature); - - pTempAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pTempAI; + return new npc_paoka_swiftmountainAI(pCreature); } bool QuestAccept_npc_paoka_swiftmountain(Player* pPlayer, Creature* pCreature, const Quest* pQuest) diff --git a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp index bf146b11522..da370ac4978 100644 --- a/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp +++ b/src/bindings/scripts/scripts/northrend/sholazar_basin.cpp @@ -160,11 +160,7 @@ bool QuestAccept_npc_injured_rainspeaker_oracle(Player* pPlayer, Creature* pCrea CreatureAI* GetAI_npc_injured_rainspeaker_oracle(Creature* pCreature) { - npc_injured_rainspeaker_oracleAI* thisAI = new npc_injured_rainspeaker_oracleAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return thisAI; + return new npc_injured_rainspeaker_oracleAI(pCreature); } void AddSC_sholazar_basin() diff --git a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp index cd5a94319a7..e33f430894e 100644 --- a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp +++ b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp @@ -197,11 +197,7 @@ struct TRINITY_DLL_DECL npc_wounded_blood_elfAI : public npc_escortAI CreatureAI* GetAI_npc_wounded_blood_elf(Creature* pCreature) { - npc_wounded_blood_elfAI* welfAI = new npc_wounded_blood_elfAI(pCreature); - - welfAI->FillPointMovementListForCreature(); - - return welfAI; + return new npc_wounded_blood_elfAI(pCreature); } bool QuestAccept_npc_wounded_blood_elf(Player* pPlayer, Creature* pCreature, Quest const* quest) diff --git a/src/bindings/scripts/scripts/outland/isle_of_queldanas.cpp b/src/bindings/scripts/scripts/outland/isle_of_queldanas.cpp deleted file mode 100644 index 469e2f712f1..00000000000 --- a/src/bindings/scripts/scripts/outland/isle_of_queldanas.cpp +++ /dev/null @@ -1,154 +0,0 @@ -/* Copyright (C) 2006 - 2009 ScriptDev2 .sourceforge.net/> - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* ScriptData -SDName: Isle_of_Queldanas -SD%Complete: 100 -SDComment: Quest support: 11524, 11525, 11532, 11533, 11542, 11543, 11541 -SDCategory: Isle Of Quel'Danas -EndScriptData */ - -/* ContentData -npc_converted_sentry -npc_greengill_slave -EndContentData */ - -#include "precompiled.h" - -/*###### -## npc_converted_sentry -######*/ - -#define SAY_CONVERTED_1 -1000284 -#define SAY_CONVERTED_2 -1000284 - -#define SPELL_CONVERT_CREDIT 45009 - -struct TRINITY_DLL_DECL npc_converted_sentryAI : public ScriptedAI -{ - npc_converted_sentryAI(Creature *c) : ScriptedAI(c) {} - - bool Credit; - uint32 Timer; - - void Reset() - { - Credit = false; - Timer = 2500; - } - - void MoveInLineOfSight(Unit *who) - { return; } - void EnterCombat(Unit* who) - { } - - void UpdateAI(const uint32 diff) - { - if (!Credit) - { - if (Timer <= diff) - { - uint32 i = urand(1,2); - if (i==1) - DoScriptText(SAY_CONVERTED_1, m_creature); - else - DoScriptText(SAY_CONVERTED_2, m_creature); - - DoCast(m_creature, SPELL_CONVERT_CREDIT); - if (m_creature->isPet()) - CAST_PET(m_creature)->SetDuration(7500); - Credit = true; - }else Timer -= diff; - } - } -}; -CreatureAI* GetAI_npc_converted_sentry(Creature* pCreature) -{ - return new npc_converted_sentryAI (pCreature); -} - -/*###### -## npc_greengill_slave -######*/ - -#define ENRAGE 45111 -#define ORB 45109 -#define QUESTG 11541 -#define DM 25060 - -struct TRINITY_DLL_DECL npc_greengill_slaveAI : public ScriptedAI -{ - npc_greengill_slaveAI(Creature* c) : ScriptedAI(c) {} - - uint64 PlayerGUID; - - void EnterCombat(Unit* who){} - - void Reset() - { - PlayerGUID = 0; - } - - void SpellHit(Unit* caster, const SpellEntry* spell) - { - if (!caster) - return; - - if (caster->GetTypeId() == TYPEID_PLAYER && spell->Id == ORB && !m_creature->HasAura(ENRAGE)) - { - PlayerGUID = caster->GetGUID(); - if (PlayerGUID) - { - Unit* plr = Unit::GetUnit((*m_creature), PlayerGUID); - if (plr && CAST_PLR(plr)->GetQuestStatus(QUESTG) == QUEST_STATUS_INCOMPLETE) - DoCast(plr, 45110, true); - } - DoCast(m_creature, ENRAGE); - Unit* Myrmidon = me->FindNearestCreature(DM, 70); - if (Myrmidon) - { - m_creature->AddThreat(Myrmidon, 100000.0f); - AttackStart(Myrmidon); - } - } - } - - void UpdateAI(const uint32 diff) - { - DoMeleeAttackIfReady(); - } -}; - -CreatureAI* GetAI_npc_greengill_slaveAI(Creature* pCreature) -{ - return new npc_greengill_slaveAI(pCreature); -} - -void AddSC_isle_of_queldanas() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="npc_converted_sentry"; - newscript->GetAI = &GetAI_npc_converted_sentry; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_greengill_slave"; - newscript->GetAI = &GetAI_npc_greengill_slaveAI; - newscript->RegisterSelf(); -} - diff --git a/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp b/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp index 779869cc781..41b1ec159b8 100644 --- a/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp +++ b/src/bindings/scripts/scripts/outland/shadowmoon_valley.cpp @@ -1017,11 +1017,7 @@ struct TRINITY_DLL_DECL npc_earthmender_wildaAI : public npc_escortAI CreatureAI* GetAI_npc_earthmender_wilda(Creature* pCreature) { - npc_earthmender_wildaAI* pTempAI = new npc_earthmender_wildaAI(pCreature); - - pTempAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pTempAI; + return new npc_earthmender_wildaAI(pCreature); } bool QuestAccept_npc_earthmender_wilda(Player* pPlayer, Creature* pCreature, const Quest* pQuest) diff --git a/src/bindings/scripts/scripts/outland/shattrath_city.cpp b/src/bindings/scripts/scripts/outland/shattrath_city.cpp index 054615bc3b3..e44aea2e0a0 100644 --- a/src/bindings/scripts/scripts/outland/shattrath_city.cpp +++ b/src/bindings/scripts/scripts/outland/shattrath_city.cpp @@ -356,11 +356,7 @@ public: }; CreatureAI* GetAI_npc_kservantAI(Creature* pCreature) { - npc_kservantAI* kservantAI = new npc_kservantAI(pCreature); - - kservantAI->FillPointMovementListForCreature(); - - return kservantAI; + return new npc_kservantAI(pCreature); } /*###### diff --git a/src/bindings/scripts/scripts/outland/terokkar_forest.cpp b/src/bindings/scripts/scripts/outland/terokkar_forest.cpp index 8ac9aef4a04..ebe8c0b944f 100644 --- a/src/bindings/scripts/scripts/outland/terokkar_forest.cpp +++ b/src/bindings/scripts/scripts/outland/terokkar_forest.cpp @@ -221,11 +221,7 @@ public: CreatureAI* GetAI_npc_skywingAI(Creature* pCreature) { - npc_skywingAI* skywingAI = new npc_skywingAI(pCreature); - - skywingAI->FillPointMovementListForCreature(); - - return skywingAI; + return new npc_skywingAI(pCreature); } /*###### @@ -675,11 +671,7 @@ bool QuestAccept_npc_akuno(Player* pPlayer, Creature* pCreature, Quest const* pQ CreatureAI* GetAI_npc_akuno(Creature* pCreature) { - npc_akunoAI* thisAI = new npc_akunoAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return(CreatureAI*)thisAI; + return new npc_akunoAI(pCreature); } void AddSC_terokkar_forest() diff --git a/src/bindings/scripts/scripts/outland/zangarmarsh.cpp b/src/bindings/scripts/scripts/outland/zangarmarsh.cpp index dfa472237b6..5267767c544 100644 --- a/src/bindings/scripts/scripts/outland/zangarmarsh.cpp +++ b/src/bindings/scripts/scripts/outland/zangarmarsh.cpp @@ -331,11 +331,7 @@ bool QuestAccept_npc_kayra_longmane(Player* pPlayer, Creature* pCreature, Quest CreatureAI* GetAI_npc_kayra_longmaneAI(Creature* pCreature) { - npc_kayra_longmaneAI* thisAI = new npc_kayra_longmaneAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return thisAI; + return new npc_kayra_longmaneAI(pCreature); } /*###### ## AddSC diff --git a/src/bindings/scripts/scripts/world/npcs_special.cpp b/src/bindings/scripts/scripts/world/npcs_special.cpp index b35b9292698..2a56a825b11 100644 --- a/src/bindings/scripts/scripts/world/npcs_special.cpp +++ b/src/bindings/scripts/scripts/world/npcs_special.cpp @@ -1005,11 +1005,7 @@ struct TRINITY_DLL_DECL npc_garments_of_questsAI : public npc_escortAI CreatureAI* GetAI_npc_garments_of_quests(Creature* pCreature) { - npc_garments_of_questsAI* tempAI = new npc_garments_of_questsAI(pCreature); - - tempAI->FillPointMovementListForCreature(); - - return tempAI; + return new npc_garments_of_questsAI(pCreature); } /*###### diff --git a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp index 39842444e5c..f9961e10174 100644 --- a/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp +++ b/src/bindings/scripts/scripts/zone/aunchindoun/shadow_labyrinth/boss_ambassador_hellmaw.cpp @@ -203,11 +203,7 @@ struct TRINITY_DLL_DECL boss_ambassador_hellmawAI : public npc_escortAI CreatureAI* GetAI_boss_ambassador_hellmaw(Creature* pCreature) { - boss_ambassador_hellmawAI* pHellAI = new boss_ambassador_hellmawAI(pCreature); - - pHellAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pHellAI; + return new boss_ambassador_hellmawAI(pCreature); } void AddSC_boss_ambassador_hellmaw() diff --git a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp index 04f48fcd2de..5eef2c90aa0 100644 --- a/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp +++ b/src/bindings/scripts/scripts/zone/blackrock_depths/blackrock_depths.cpp @@ -330,11 +330,7 @@ struct TRINITY_DLL_DECL npc_grimstoneAI : public npc_escortAI CreatureAI* GetAI_npc_grimstone(Creature* pCreature) { - npc_grimstoneAI* Grimstone_AI = new npc_grimstoneAI(pCreature); - - Grimstone_AI->FillPointMovementListForCreature(); - - return Grimstone_AI; + return new npc_grimstoneAI(pCreature); } /*###### @@ -1191,11 +1187,7 @@ struct TRINITY_DLL_DECL npc_rocknotAI : public npc_escortAI CreatureAI* GetAI_npc_rocknot(Creature* pCreature) { - npc_rocknotAI* Rocknot_AI = new npc_rocknotAI(pCreature); - - Rocknot_AI->FillPointMovementListForCreature(); - - return Rocknot_AI; + return new npc_rocknotAI(pCreature); } bool ChooseReward_npc_rocknot(Player* pPlayer, Creature* pCreature, const Quest *_Quest, uint32 item) diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp index 7bbc0e026a2..5559989ef65 100644 --- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp +++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp @@ -483,11 +483,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI CreatureAI* GetAI_npc_thrall_old_hillsbrad(Creature* pCreature) { - npc_thrall_old_hillsbradAI* thrall_walkAI = new npc_thrall_old_hillsbradAI(pCreature); - - thrall_walkAI->FillPointMovementListForCreature(); - - return thrall_walkAI; + return new npc_thrall_old_hillsbradAI(pCreature); } bool GossipHello_npc_thrall_old_hillsbrad(Player* pPlayer, Creature* pCreature) @@ -611,11 +607,7 @@ struct TRINITY_DLL_DECL npc_tarethaAI : public npc_escortAI }; CreatureAI* GetAI_npc_taretha(Creature* pCreature) { - npc_tarethaAI* taretha_walkAI = new npc_tarethaAI(pCreature); - - taretha_walkAI->FillPointMovementListForCreature(); - - return taretha_walkAI; + return new npc_tarethaAI(pCreature); } bool GossipHello_npc_taretha(Player* pPlayer, Creature* pCreature) diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp index 26659932ca5..247a0084e77 100644 --- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp +++ b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp @@ -647,11 +647,7 @@ struct TRINITY_DLL_DECL npc_koltira_deathweaverAI : public npc_escortAI CreatureAI* GetAI_npc_koltira_deathweaver(Creature* pCreature) { - npc_koltira_deathweaverAI* pTempAI = new npc_koltira_deathweaverAI(pCreature); - - pTempAI->FillPointMovementListForCreature(); - - return (CreatureAI*)pTempAI; + return new npc_koltira_deathweaverAI(pCreature); } bool QuestAccept_npc_koltira_deathweaver(Player* pPlayer, Creature* pCreature, const Quest* pQuest) diff --git a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp index 03a05b7218a..91dd4e44ad3 100644 --- a/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp +++ b/src/bindings/scripts/scripts/zone/karazhan/karazhan.cpp @@ -320,11 +320,7 @@ struct TRINITY_DLL_DECL npc_barnesAI : public npc_escortAI CreatureAI* GetAI_npc_barnesAI(Creature* pCreature) { - npc_barnesAI* Barnes_AI = new npc_barnesAI(pCreature); - - Barnes_AI->FillPointMovementListForCreature(); - - return (CreatureAI*)Barnes_AI; + return new npc_barnesAI(pCreature); } bool GossipHello_npc_barnes(Player* pPlayer, Creature* pCreature) diff --git a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp index 29661b719cf..5a1c8e6d364 100644 --- a/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp +++ b/src/bindings/scripts/scripts/zone/scarlet_monastery/boss_herod.cpp @@ -140,11 +140,7 @@ struct TRINITY_DLL_DECL mob_scarlet_traineeAI : public npc_escortAI CreatureAI* GetAI_mob_scarlet_trainee(Creature* pCreature) { - mob_scarlet_traineeAI* thisAI = new mob_scarlet_traineeAI(pCreature); - - thisAI->FillPointMovementListForCreature(); - - return thisAI; + return new mob_scarlet_traineeAI(pCreature); } void AddSC_boss_herod() diff --git a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp index 8abb5bb90e1..5f9d42ea65e 100644 --- a/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp +++ b/src/bindings/scripts/scripts/zone/shadowfang_keep/shadowfang_keep.cpp @@ -102,11 +102,7 @@ struct TRINITY_DLL_DECL npc_shadowfang_prisonerAI : public npc_escortAI CreatureAI* GetAI_npc_shadowfang_prisoner(Creature* pCreature) { - npc_shadowfang_prisonerAI* prisonerAI = new npc_shadowfang_prisonerAI(pCreature); - - prisonerAI->FillPointMovementListForCreature(); - - return prisonerAI; + return new npc_shadowfang_prisonerAI(pCreature); } bool GossipHello_npc_shadowfang_prisoner(Player* pPlayer, Creature* pCreature) diff --git a/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp b/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp index 2e130fca34b..622800127db 100644 --- a/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp +++ b/src/bindings/scripts/scripts/zone/wailing_caverns/wailing_caverns.cpp @@ -348,11 +348,7 @@ struct TRINITY_DLL_DECL npc_disciple_of_naralexAI : public npc_escortAI CreatureAI* GetAI_npc_disciple_of_naralex(Creature* pCreature) { - npc_disciple_of_naralexAI *disciple_of_naralexAI = new npc_disciple_of_naralexAI(pCreature); - - disciple_of_naralexAI->FillPointMovementListForCreature(); - - return disciple_of_naralexAI; + return new npc_disciple_of_naralexAI(pCreature); } bool GossipHello_npc_disciple_of_naralex(Player* pPlayer, Creature* pCreature) diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp index 1f20f85ebcf..1cca715eebe 100644 --- a/src/bindings/scripts/system/ScriptLoader.cpp +++ b/src/bindings/scripts/system/ScriptLoader.cpp @@ -38,6 +38,7 @@ extern void AddSC_eversong_woods(); extern void AddSC_ghostlands(); extern void AddSC_hinterlands(); extern void AddSC_ironforge(); +extern void AddSC_isle_of_queldanas(); extern void AddSC_loch_modan(); extern void AddSC_searing_gorge(); extern void AddSC_silvermoon_city(); @@ -85,7 +86,6 @@ extern void AddSC_blades_edge_mountains(); extern void AddSC_boss_doomlordkazzak(); extern void AddSC_boss_doomwalker(); extern void AddSC_hellfire_peninsula(); -extern void AddSC_isle_of_queldanas(); extern void AddSC_nagrand(); extern void AddSC_netherstorm(); extern void AddSC_shadowmoon_valley(); @@ -551,6 +551,7 @@ void AddScripts() AddSC_ghostlands(); AddSC_hinterlands(); AddSC_ironforge(); + AddSC_isle_of_queldanas(); AddSC_loch_modan(); AddSC_searing_gorge(); AddSC_silvermoon_city(); @@ -598,7 +599,6 @@ void AddScripts() AddSC_boss_doomlordkazzak(); AddSC_boss_doomwalker(); AddSC_hellfire_peninsula(); - AddSC_isle_of_queldanas(); AddSC_nagrand(); AddSC_netherstorm(); AddSC_shadowmoon_valley(); -- cgit v1.2.3 From 61ed8f90dfb7ebc0d3f57595acfa1429b2d4048d Mon Sep 17 00:00:00 2001 From: Kudlaty Date: Sun, 16 Aug 2009 02:46:55 +0200 Subject: Merge [SD2] r1296 Fix typo and check for IN_PROGRESS instead of NOT_STARTED and also return after force EnterEvadeMode in UpdateAI - skip r1297 Set sysconfdir path in different way for linux compile, to avoid possible DOTCONF++ error at start. Patch by Saeldur - skip r1298 Fix typo in MC instance script. r1299 Clean up one MC boss script and remove old workarounds. Patch by Reve r1300 Add gossip to npc_naladu. Patch by hoshie r1301 Some minor cleanup and move one folder+source file --HG-- branch : trunk --- sql/FULL/world_script_texts.sql | 2 +- sql/FULL/world_scripts_full.sql | 1 + sql/updates/5071_world_scripts.sql | 3 + src/bindings/scripts/CMakeLists.txt | 2 +- src/bindings/scripts/VC80/80ScriptDev2.vcproj | 24 +- src/bindings/scripts/VC90/90ScriptDev2.vcproj | 24 +- .../scarlet_enclave/the_scarlet_enclave.cpp | 1495 ++++++++++++++++++++ .../scripts/scripts/outland/hellfire_peninsula.cpp | 36 + .../eastern_plaguelands/the_scarlet_enclave.cpp | 1495 -------------------- .../scripts/zone/molten_core/boss_golemagg.cpp | 183 ++- .../zone/molten_core/instance_molten_core.cpp | 2 +- src/bindings/scripts/system/ScriptLoader.cpp | 8 +- 12 files changed, 1647 insertions(+), 1628 deletions(-) create mode 100644 sql/updates/5071_world_scripts.sql create mode 100644 src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp delete mode 100644 src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp (limited to 'src') diff --git a/sql/FULL/world_script_texts.sql b/sql/FULL/world_script_texts.sql index 0947c2db59b..e833bc9024d 100644 --- a/sql/FULL/world_script_texts.sql +++ b/sql/FULL/world_script_texts.sql @@ -568,7 +568,7 @@ INSERT INTO `script_texts` (`entry`, `content_default`, `content_loc1`, `content INSERT INTO `script_texts` (`entry`, `content_default`, `content_loc1`, `content_loc2`, `content_loc3`, `content_loc4`, `content_loc5`, `content_loc6`, `content_loc7`, `content_loc8`, `sound`, `type`, `language`, `emote`, `comment`) VALUES (-1409000,'%s performs one last service for Ragnaros.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2, 0, 0,'geddon EMOTE_SERVICE'), (-1409001,'%s goes into a killing frenzy!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2, 0, 0,'magmadar EMOTE_FRENZY'), -(-1409002,'%s refuses to die while its master is in trouble.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2, 0, 0,'core rager EMOTE_AEGIS'), +(-1409002,'%s refuses to die while its master is in trouble.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 2, 0, 0,'core rager EMOTE_LOWHP'), (-1409003,'Reckless mortals, none may challenge the sons of the living flame!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 8035, 1, 0, 0,'majordomo SAY_AGGRO'), (-1409004,'The runes of warding have been destroyed! Hunt down the infedels my bretheren.', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 8039, 1, 0, 0,'majordomo SAY_SPAWN'), (-1409005,'Ashes to Ashes!', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 8037, 1, 0, 0,'majordomo SAY_SLAY'), diff --git a/sql/FULL/world_scripts_full.sql b/sql/FULL/world_scripts_full.sql index 5cbc554d66a..24abf192482 100644 --- a/sql/FULL/world_scripts_full.sql +++ b/sql/FULL/world_scripts_full.sql @@ -546,6 +546,7 @@ UPDATE `creature_template` SET `ScriptName`='boss_doomlord_kazzak' WHERE `entry` UPDATE `creature_template` SET `ScriptName`='npc_wounded_blood_elf' WHERE `entry`=16993; UPDATE `creature_template` SET `ScriptName`='npc_aeranas' WHERE `entry`=17085; UPDATE `gameobject_template` SET `ScriptName`='go_haaleshi_altar' WHERE `entry`=181606; +UPDATE `creature_template` SET `ScriptName`='npc_naladu' WHERE `entry`=19361; /* HILLSBRAD FOOTHILLS */ diff --git a/sql/updates/5071_world_scripts.sql b/sql/updates/5071_world_scripts.sql new file mode 100644 index 00000000000..dc085cf884e --- /dev/null +++ b/sql/updates/5071_world_scripts.sql @@ -0,0 +1,3 @@ +UPDATE script_texts SET comment='core rager EMOTE_LOWHP' WHERE entry=-1409002; + +UPDATE creature_template SET ScriptName='npc_naladu' WHERE entry=19361; diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt index fd258cd6c81..9736d172850 100644 --- a/src/bindings/scripts/CMakeLists.txt +++ b/src/bindings/scripts/CMakeLists.txt @@ -16,6 +16,7 @@ SET(trinityscript_LIB_SRCS include/sc_creature.h include/sc_gossip.h include/sc_instance.h + scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp scripts/eastern_kingdoms/alterac_mountains.cpp scripts/eastern_kingdoms/arathi_highlands.cpp scripts/eastern_kingdoms/blasted_lands.cpp @@ -184,7 +185,6 @@ SET(trinityscript_LIB_SRCS scripts/zone/coilfang_resevoir/underbog/boss_the_black_stalker.cpp scripts/zone/deadmines/def_deadmines.h scripts/zone/deadmines/deadmines.cpp - scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp scripts/zone/gruuls_lair/boss_gruul.cpp scripts/zone/gruuls_lair/boss_high_king_maulgar.cpp scripts/zone/gruuls_lair/def_gruuls_lair.h diff --git a/src/bindings/scripts/VC80/80ScriptDev2.vcproj b/src/bindings/scripts/VC80/80ScriptDev2.vcproj index 95469729521..2ddcba982b5 100644 --- a/src/bindings/scripts/VC80/80ScriptDev2.vcproj +++ b/src/bindings/scripts/VC80/80ScriptDev2.vcproj @@ -394,6 +394,14 @@ + + + + @@ -1325,22 +1333,6 @@ > - - - - - - - - diff --git a/src/bindings/scripts/VC90/90ScriptDev2.vcproj b/src/bindings/scripts/VC90/90ScriptDev2.vcproj index 0db7d101594..85946ca217c 100644 --- a/src/bindings/scripts/VC90/90ScriptDev2.vcproj +++ b/src/bindings/scripts/VC90/90ScriptDev2.vcproj @@ -391,6 +391,14 @@ + + + + @@ -1322,22 +1330,6 @@ > - - - - - - - - diff --git a/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp new file mode 100644 index 00000000000..247a0084e77 --- /dev/null +++ b/src/bindings/scripts/scripts/eastern_kingdoms/scarlet_enclave/the_scarlet_enclave.cpp @@ -0,0 +1,1495 @@ +/* + * Copyright (C) 2009 Trinity + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "precompiled.h" +#include "Vehicle.h" +#include "ObjectMgr.h" +#include "escortAI.h" + +#define GCD_CAST 1 + +/*###### +## npc_a_special_surprise +######*/ + +enum SpecialSurprise +{ + SAY_EXEC_START_1 = -1609025, // speech for all + SAY_EXEC_START_2 = -1609026, + SAY_EXEC_START_3 = -1609027, + SAY_EXEC_PROG_1 = -1609028, + SAY_EXEC_PROG_2 = -1609029, + SAY_EXEC_PROG_3 = -1609030, + SAY_EXEC_PROG_4 = -1609031, + SAY_EXEC_PROG_5 = -1609032, + SAY_EXEC_PROG_6 = -1609033, + SAY_EXEC_PROG_7 = -1609034, + SAY_EXEC_NAME_1 = -1609035, + SAY_EXEC_NAME_2 = -1609036, + SAY_EXEC_RECOG_1 = -1609037, + SAY_EXEC_RECOG_2 = -1609038, + SAY_EXEC_RECOG_3 = -1609039, + SAY_EXEC_RECOG_4 = -1609040, + SAY_EXEC_RECOG_5 = -1609041, + SAY_EXEC_RECOG_6 = -1609042, + SAY_EXEC_NOREM_1 = -1609043, + SAY_EXEC_NOREM_2 = -1609044, + SAY_EXEC_NOREM_3 = -1609045, + SAY_EXEC_NOREM_4 = -1609046, + SAY_EXEC_NOREM_5 = -1609047, + SAY_EXEC_NOREM_6 = -1609048, + SAY_EXEC_NOREM_7 = -1609049, + SAY_EXEC_NOREM_8 = -1609050, + SAY_EXEC_NOREM_9 = -1609051, + SAY_EXEC_THINK_1 = -1609052, + SAY_EXEC_THINK_2 = -1609053, + SAY_EXEC_THINK_3 = -1609054, + SAY_EXEC_THINK_4 = -1609055, + SAY_EXEC_THINK_5 = -1609056, + SAY_EXEC_THINK_6 = -1609057, + SAY_EXEC_THINK_7 = -1609058, + SAY_EXEC_THINK_8 = -1609059, + SAY_EXEC_THINK_9 = -1609060, + SAY_EXEC_THINK_10 = -1609061, + SAY_EXEC_LISTEN_1 = -1609062, + SAY_EXEC_LISTEN_2 = -1609063, + SAY_EXEC_LISTEN_3 = -1609064, + SAY_EXEC_LISTEN_4 = -1609065, + SAY_PLAGUEFIST = -1609066, + SAY_EXEC_TIME_1 = -1609067, + SAY_EXEC_TIME_2 = -1609068, + SAY_EXEC_TIME_3 = -1609069, + SAY_EXEC_TIME_4 = -1609070, + SAY_EXEC_TIME_5 = -1609071, + SAY_EXEC_TIME_6 = -1609072, + SAY_EXEC_TIME_7 = -1609073, + SAY_EXEC_TIME_8 = -1609074, + SAY_EXEC_TIME_9 = -1609075, + SAY_EXEC_TIME_10 = -1609076, + SAY_EXEC_WAITING = -1609077, + EMOTE_DIES = -1609078, + + NPC_PLAGUEFIST = 29053 +}; + +struct TRINITY_DLL_DECL npc_a_special_surpriseAI : public ScriptedAI +{ + npc_a_special_surpriseAI(Creature *pCreature) : ScriptedAI(pCreature) {} + + uint32 ExecuteSpeech_Timer; + uint32 ExecuteSpeech_Counter; + uint64 PlayerGUID; + + void Reset() + { + ExecuteSpeech_Timer = 0; + ExecuteSpeech_Counter = 0; + PlayerGUID = 0; + + me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + } + + bool MeetQuestCondition(Unit* pPlayer) + { + switch(me->GetEntry()) + { + case 29061: // Ellen Stanbridge + if (CAST_PLR(pPlayer)->GetQuestStatus(12742) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29072: // Kug Ironjaw + if (CAST_PLR(pPlayer)->GetQuestStatus(12748) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29067: // Donovan Pulfrost + if (CAST_PLR(pPlayer)->GetQuestStatus(12744) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29065: // Yazmina Oakenthorn + if (CAST_PLR(pPlayer)->GetQuestStatus(12743) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29071: // Antoine Brack + if (CAST_PLR(pPlayer)->GetQuestStatus(12750) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29032: // Malar Bravehorn + if (CAST_PLR(pPlayer)->GetQuestStatus(12739) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29068: // Goby Blastenheimer + if (CAST_PLR(pPlayer)->GetQuestStatus(12745) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29073: // Iggy Darktusk + if (CAST_PLR(pPlayer)->GetQuestStatus(12749) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29074: // Lady Eonys + if (CAST_PLR(pPlayer)->GetQuestStatus(12747) == QUEST_STATUS_INCOMPLETE) + return true; + break; + case 29070: // Valok the Righteous + if (CAST_PLR(pPlayer)->GetQuestStatus(12746) == QUEST_STATUS_INCOMPLETE) + return true; + break; + } + + return false; + } + + void MoveInLineOfSight(Unit* pWho) + { + if (PlayerGUID || pWho->GetTypeId() != TYPEID_PLAYER || !pWho->IsWithinDist(me, INTERACTION_DISTANCE)) + return; + + if (MeetQuestCondition(pWho)) + PlayerGUID = pWho->GetGUID(); + } + + void UpdateAI(const uint32 diff) + { + if (PlayerGUID && !me->getVictim() && me->isAlive()) + { + if (ExecuteSpeech_Timer < diff) + { + Player* pPlayer = Unit::GetPlayer(PlayerGUID); + + if (!pPlayer) + { + Reset(); + return; + } + + //TODO: simplify text's selection + + switch(pPlayer->getRace()) + { + case RACE_HUMAN: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_5, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_5, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_7, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_6, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_ORC: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_6, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_7, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_8, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_8, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_DWARF: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_2, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_2, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_3, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_2, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_5, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_2, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_3, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_NIGHTELF: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_5, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_6, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_2, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_7, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_UNDEAD_PLAYER: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_3, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_4, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_3, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_1, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_3, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_4, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_TAUREN: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_1, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_5, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_8, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_9, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_9, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_GNOME: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_4, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_4, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_6, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_5, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_TROLL: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_3, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_7, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_2, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_6, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_9, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_10, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_4, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_10, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_BLOODELF: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_1, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; + //case 5: //unknown + case 6: DoScriptText(SAY_EXEC_THINK_3, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_1, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + case RACE_DRAENEI: + switch(ExecuteSpeech_Counter) + { + case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; + case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; + case 2: DoScriptText(SAY_EXEC_PROG_1, me, pPlayer); break; + case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; + case 4: DoScriptText(SAY_EXEC_RECOG_2, me, pPlayer); break; + case 5: DoScriptText(SAY_EXEC_NOREM_1, me, pPlayer); break; + case 6: DoScriptText(SAY_EXEC_THINK_4, me, pPlayer); break; + case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; + case 8: + if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) + DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); + break; + case 9: + DoScriptText(SAY_EXEC_TIME_2, me, pPlayer); + me->SetStandState(UNIT_STAND_STATE_KNEEL); + me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + break; + case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; + case 11: + DoScriptText(EMOTE_DIES, me); + me->setDeathState(JUST_DIED); + me->SetHealth(0); + return; + } + break; + } + + if (ExecuteSpeech_Counter >= 9) + ExecuteSpeech_Timer = 15000; + else + ExecuteSpeech_Timer = 7000; + + ++ExecuteSpeech_Counter; + } + else + ExecuteSpeech_Timer -= diff; + } + } +}; + +CreatureAI* GetAI_npc_a_special_surprise(Creature* pCreature) +{ + return new npc_a_special_surpriseAI(pCreature); +} + +/*###### +## npc_koltira_deathweaver +######*/ + +enum eKoltira +{ + SAY_BREAKOUT1 = -1609079, + SAY_BREAKOUT2 = -1609080, + SAY_BREAKOUT3 = -1609081, + SAY_BREAKOUT4 = -1609082, + SAY_BREAKOUT5 = -1609083, + SAY_BREAKOUT6 = -1609084, + SAY_BREAKOUT7 = -1609085, + SAY_BREAKOUT8 = -1609086, + SAY_BREAKOUT9 = -1609087, + SAY_BREAKOUT10 = -1609088, + + SPELL_KOLTIRA_TRANSFORM = 52899, + SPELL_ANTI_MAGIC_ZONE = 52894, + + QUEST_BREAKOUT = 12727, + + NPC_CRIMSON_ACOLYTE = 29007, + NPC_HIGH_INQUISITOR_VALROTH = 29001, + NPC_KOLTIRA_ALT = 28447, + + //not sure about this id + //NPC_DEATH_KNIGHT_MOUNT = 29201, + MODEL_DEATH_KNIGHT_MOUNT = 25278 +}; + +struct TRINITY_DLL_DECL npc_koltira_deathweaverAI : public npc_escortAI +{ + npc_koltira_deathweaverAI(Creature *pCreature) : npc_escortAI(pCreature) { } + + uint32 m_uiWave; + uint32 m_uiWave_Timer; + uint64 m_uiValrothGUID; + + void Reset() + { + if (!IsBeingEscorted) + { + m_uiWave = 0; + m_uiWave_Timer = 3000; + m_uiValrothGUID = 0; + } + } + + void WaypointReached(uint32 uiPointId) + { + switch(uiPointId) + { + case 0: + DoScriptText(SAY_BREAKOUT1, m_creature); + break; + case 1: + m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); + break; + case 2: + m_creature->SetStandState(UNIT_STAND_STATE_STAND); + //m_creature->UpdateEntry(NPC_KOLTIRA_ALT); //unclear if we must update or not + DoCast(m_creature, SPELL_KOLTIRA_TRANSFORM); + break; + case 3: + IsOnHold = true; + m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); + DoScriptText(SAY_BREAKOUT2, m_creature); + DoCast(m_creature, SPELL_ANTI_MAGIC_ZONE); // cast again that makes bubble up + break; + case 4: + SetRun(true); + break; + case 9: + m_creature->Mount(MODEL_DEATH_KNIGHT_MOUNT); + break; + case 10: + m_creature->Unmount(); + break; + } + } + + void JustSummoned(Creature* pSummoned) + { + if (Unit* pPlayer = Unit::GetUnit(*m_creature, PlayerGUID)) + { + pSummoned->AI()->AttackStart(pPlayer); + pSummoned->AddThreat(m_creature, 0.0f); + } + + if (pSummoned->GetEntry() == NPC_HIGH_INQUISITOR_VALROTH) + m_uiValrothGUID = pSummoned->GetGUID(); + } + + void SummonAcolyte(uint32 uiAmount) + { + for(uint32 i = 0; i < uiAmount; ++i) + m_creature->SummonCreature(NPC_CRIMSON_ACOLYTE, 1642.329, -6045.818, 127.583, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); + } + + void UpdateAI(const uint32 uiDiff) + { + npc_escortAI::UpdateAI(uiDiff); + + if (IsOnHold) + { + if (m_uiWave_Timer < uiDiff) + { + switch(m_uiWave) + { + case 0: + DoScriptText(SAY_BREAKOUT3, m_creature); + SummonAcolyte(3); + m_uiWave_Timer = 20000; + break; + case 1: + DoScriptText(SAY_BREAKOUT4, m_creature); + SummonAcolyte(3); + m_uiWave_Timer = 20000; + break; + case 2: + DoScriptText(SAY_BREAKOUT5, m_creature); + SummonAcolyte(4); + m_uiWave_Timer = 20000; + break; + case 3: + DoScriptText(SAY_BREAKOUT6, m_creature); + m_creature->SummonCreature(NPC_HIGH_INQUISITOR_VALROTH, 1642.329, -6045.818, 127.583, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000); + m_uiWave_Timer = 1000; + break; + case 4: + { + Unit* pTemp = Unit::GetUnit(*m_creature, m_uiValrothGUID); + + if (!pTemp || !pTemp->isAlive()) + { + DoScriptText(SAY_BREAKOUT8, m_creature); + m_uiWave_Timer = 5000; + } + else + { + m_uiWave_Timer = 2500; + return; //return, we don't want m_uiWave to increment now + } + break; + } + case 5: + DoScriptText(SAY_BREAKOUT9, m_creature); + m_creature->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE); + m_uiWave_Timer = 2500; + break; + case 6: + DoScriptText(SAY_BREAKOUT10, m_creature); + IsOnHold = false; + break; + } + + ++m_uiWave; + } + else + m_uiWave_Timer -= uiDiff; + } + } +}; + +CreatureAI* GetAI_npc_koltira_deathweaver(Creature* pCreature) +{ + return new npc_koltira_deathweaverAI(pCreature); +} + +bool QuestAccept_npc_koltira_deathweaver(Player* pPlayer, Creature* pCreature, const Quest* pQuest) +{ + if (pQuest->GetQuestId() == QUEST_BREAKOUT) + { + pCreature->SetStandState(UNIT_STAND_STATE_STAND); + + if (npc_escortAI* pEscortAI = CAST_AI(npc_koltira_deathweaverAI,pCreature->AI())) + pEscortAI->Start(false, false, pPlayer->GetGUID()); + } + return true; +} + +/*###### +##Quest 12848 +######*/ + +enum +{ + SPELL_SOUL_PRISON_CHAIN_SELF = 54612, + SPELL_SOUL_PRISON_CHAIN = 54613, + SPELL_DK_INITIATE_VISUAL = 51519, + + SPELL_ICY_TOUCH = 52372, + SPELL_PLAGUE_STRIKE = 52373, + SPELL_BLOOD_STRIKE = 52374, + SPELL_DEATH_COIL = 52375 +}; + +#define EVENT_ICY_TOUCH 1 +#define EVENT_PLAGUE_STRIKE 2 +#define EVENT_BLOOD_STRIKE 3 +#define EVENT_DEATH_COIL 4 + +int32 say_event_start[8] = +{ + -1609000,-1609001,-1609002,-1609003, + -1609004,-1609005,-1609006,-1609007 +}; + +int32 say_event_attack[9] = +{ + -1609008,-1609009,-1609010,-1609011,-1609012, + -1609013,-1609014,-1609015,-1609016 +}; + +uint32 acherus_soul_prison[12] = +{ + 191577, + 191580, + 191581, + 191582, + 191583, + 191584, + 191585, + 191586, + 191587, + 191588, + 191589, + 191590 +}; + +uint32 acherus_unworthy_initiate[5] = +{ + 29519, + 29520, + 29565, + 29566, + 29567 +}; + +enum UnworthyInitiatePhase +{ + PHASE_CHAINED, + PHASE_TO_EQUIP, + PHASE_EQUIPING, + PHASE_TO_ATTACK, + PHASE_ATTACKING, +}; + +struct TRINITY_DLL_DECL npc_unworthy_initiateAI : public ScriptedAI +{ + npc_unworthy_initiateAI(Creature *c) : ScriptedAI(c) + { + me->SetReactState(REACT_PASSIVE); + if (!me->GetEquipmentId()) + if (const CreatureInfo *info = GetCreatureInfo(28406)) + if (info->equipmentId) + const_cast(me->GetCreatureInfo())->equipmentId = info->equipmentId; + } + + bool event_startet; + uint64 event_starter; + UnworthyInitiatePhase phase; + uint32 wait_timer; + float targ_x,targ_y,targ_z; + uint64 anchorGUID; + + EventMap events; + + void Reset() + { + anchorGUID = 0; + phase = PHASE_CHAINED; + events.Reset(); + m_creature->setFaction(7); + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 8); + me->LoadEquipment(0, true); + event_startet = false; + } + + void EnterCombat(Unit *who) + { + events.ScheduleEvent(EVENT_ICY_TOUCH, 1000, GCD_CAST); + events.ScheduleEvent(EVENT_PLAGUE_STRIKE, 3000, GCD_CAST); + events.ScheduleEvent(EVENT_BLOOD_STRIKE, 2000, GCD_CAST); + events.ScheduleEvent(EVENT_DEATH_COIL, 5000, GCD_CAST); + } + + void MovementInform(uint32 type, uint32 id) + { + if (type != POINT_MOTION_TYPE) + return; + + if (id == 1) + { + wait_timer = 5000; + m_creature->CastSpell(m_creature,SPELL_DK_INITIATE_VISUAL,true); + + if (Unit* starter = Unit::GetUnit((*m_creature),event_starter)) + DoScriptText(say_event_attack[rand()%9],m_creature,starter); + + phase = PHASE_TO_ATTACK; + } + } + + void EventStart(Creature* anchor, Player* target) + { + wait_timer = 5000; + phase = PHASE_TO_EQUIP; + + m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); + m_creature->RemoveAurasDueToSpell(SPELL_SOUL_PRISON_CHAIN_SELF); + m_creature->RemoveAurasDueToSpell(SPELL_SOUL_PRISON_CHAIN); + + float z; + anchor->GetContactPoint(me, targ_x, targ_y, z, 1.0f); + + event_starter = target->GetGUID(); + DoScriptText(say_event_start[rand()%8], m_creature, target); + } + + void UpdateAI(const uint32 diff); +}; + +CreatureAI* GetAI_npc_unworthy_initiate(Creature* pCreature) +{ + return new npc_unworthy_initiateAI(pCreature); +} + +struct TRINITY_DLL_DECL npc_unworthy_initiate_anchorAI : public PassiveAI +{ + npc_unworthy_initiate_anchorAI(Creature *c) : PassiveAI(c), prisonerGUID(0) {} + + uint64 prisonerGUID; + + void SetGUID(const uint64 &guid, int32 id) + { + if (!prisonerGUID) + prisonerGUID = guid; + } + + uint64 GetGUID(int32 id) { return prisonerGUID; } +}; + +void npc_unworthy_initiateAI::UpdateAI(const uint32 diff) +{ + switch(phase) + { + case PHASE_CHAINED: + if (!anchorGUID) + { + float x, y, z; + float dist = 99.0f; + GameObject *prison = NULL; + + for(uint8 i = 0; i < 12; ++i) + { + if (GameObject* temp_prison = m_creature->FindNearestGameObject(acherus_soul_prison[i],30)) + { + if (dist == 99.0f || m_creature->IsWithinDist(temp_prison, dist, false)) + { + temp_prison->GetPosition(x, y, z); + dist = m_creature->GetDistance2d(temp_prison); + prison = temp_prison; + } + } + } + + if (!prison) + return; + + if (Creature* trigger = me->FindNearestCreature(29521, 30)) + { + prison->ResetDoorOrButton(); + trigger->AI()->SetGUID(m_creature->GetGUID()); + trigger->CastSpell(me, SPELL_SOUL_PRISON_CHAIN, true); + anchorGUID = trigger->GetGUID(); + } + } + return; + case PHASE_TO_EQUIP: + if (wait_timer) + { + if (wait_timer < diff) + { + m_creature->GetMotionMaster()->MovePoint(1,targ_x,targ_y,m_creature->GetPositionZ()); + phase = PHASE_EQUIPING; + wait_timer = 0; + }else wait_timer -= diff; + } + return; + case PHASE_TO_ATTACK: + if (wait_timer) + { + if (wait_timer < diff) + { + m_creature->setFaction(14); + m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); + phase = PHASE_ATTACKING; + + if (Unit* target = Unit::GetUnit((*m_creature),event_starter)) + m_creature->AI()->AttackStart(target); + wait_timer = 0; + }else wait_timer -= diff; + } + return; + case PHASE_ATTACKING: + if (!UpdateVictim()) + return; + + events.Update(diff); + + while(uint32 eventId = events.ExecuteEvent()) + { + switch(eventId) + { + case EVENT_ICY_TOUCH: + DoCast(m_creature->getVictim(), SPELL_ICY_TOUCH); + events.DelayEvents(1000, GCD_CAST); + events.ScheduleEvent(EVENT_ICY_TOUCH, 5000, GCD_CAST); + break; + case EVENT_PLAGUE_STRIKE: + DoCast(m_creature->getVictim(), SPELL_PLAGUE_STRIKE); + events.DelayEvents(1000, GCD_CAST); + events.ScheduleEvent(SPELL_PLAGUE_STRIKE, 5000, GCD_CAST); + break; + case EVENT_BLOOD_STRIKE: + DoCast(m_creature->getVictim(), SPELL_BLOOD_STRIKE); + events.DelayEvents(1000, GCD_CAST); + events.ScheduleEvent(EVENT_BLOOD_STRIKE, 5000, GCD_CAST); + break; + case EVENT_DEATH_COIL: + DoCast(m_creature->getVictim(), SPELL_DEATH_COIL); + events.DelayEvents(1000, GCD_CAST); + events.ScheduleEvent(EVENT_DEATH_COIL, 5000, GCD_CAST); + break; + } + } + + DoMeleeAttackIfReady(); + return; + } +} + +CreatureAI* GetAI_npc_unworthy_initiate_anchor(Creature* pCreature) +{ + return new npc_unworthy_initiate_anchorAI(pCreature); +} + +bool GOHello_go_acherus_soul_prison(Player* pPlayer, GameObject* pGo) +{ + if (Creature *anchor = pGo->FindNearestCreature(29521, 15)) + if (uint64 prisonerGUID = anchor->AI()->GetGUID()) + if (Creature* prisoner = Creature::GetCreature(*pPlayer, prisonerGUID)) + CAST_AI(npc_unworthy_initiateAI, (prisoner->AI()))->EventStart(anchor, pPlayer); + + return false; +} + +/*###### +## npc_death_knight_initiate +######*/ + +#define GOSSIP_ACCEPT_DUEL "I challenge you, death knight!" + +enum +{ + SAY_DUEL_A = -1609080, + SAY_DUEL_B = -1609081, + SAY_DUEL_C = -1609082, + SAY_DUEL_D = -1609083, + SAY_DUEL_E = -1609084, + SAY_DUEL_F = -1609085, + SAY_DUEL_G = -1609086, + SAY_DUEL_H = -1609087, + SAY_DUEL_I = -1609088, + + SPELL_DUEL = 52996, + SPELL_DUEL_TRIGGERED = 52990, + SPELL_DUEL_VICTORY = 52994, + SPELL_DUEL_FLAG = 52991, + + QUEST_DEATH_CHALLENGE = 12733, + FACTION_HOSTILE = 2068 +}; + +int32 m_auiRandomSay[] = +{ + SAY_DUEL_A, SAY_DUEL_B, SAY_DUEL_C, SAY_DUEL_D, SAY_DUEL_E, SAY_DUEL_F, SAY_DUEL_G, SAY_DUEL_H, SAY_DUEL_I +}; + +struct TRINITY_DLL_DECL npc_death_knight_initiateAI : public SpellAI +{ + npc_death_knight_initiateAI(Creature* pCreature) : SpellAI(pCreature) + { + m_bIsDuelInProgress = false; + } + + bool lose; + uint64 m_uiDuelerGUID; + uint32 m_uiDuelTimer; + bool m_bIsDuelInProgress; + + void Reset() + { + lose = false; + me->RestoreFaction(); + SpellAI::Reset(); + + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); + + m_uiDuelerGUID = 0; + m_uiDuelTimer = 5000; + m_bIsDuelInProgress = false; + } + + void SpellHit(Unit* pCaster, const SpellEntry* pSpell) + { + if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL_TRIGGERED) + { + m_uiDuelerGUID = pCaster->GetGUID(); + m_bIsDuelInProgress = true; + } + } + + void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) + { + if (m_bIsDuelInProgress && pDoneBy->IsControlledByPlayer()) + { + if (pDoneBy->GetGUID() != m_uiDuelerGUID && pDoneBy->GetOwnerGUID() != m_uiDuelerGUID) // other players cannot help + uiDamage = 0; + else if (uiDamage >= m_creature->GetHealth()) + { + uiDamage = 0; + + if (!lose) + { + pDoneBy->RemoveGameObject(SPELL_DUEL_FLAG, true); + pDoneBy->AttackStop(); + me->CastSpell(pDoneBy, SPELL_DUEL_VICTORY, true); + lose = true; + me->CastSpell(me, 7267, true); + me->RestoreFaction(); + } + } + } + } + + void UpdateAI(const uint32 uiDiff) + { + if (!UpdateVictim()) + { + if (m_bIsDuelInProgress) + { + if (m_uiDuelTimer < uiDiff) + { + m_creature->setFaction(FACTION_HOSTILE); + + if (Unit* pUnit = Unit::GetUnit(*m_creature, m_uiDuelerGUID)) + AttackStart(pUnit); + } + else + m_uiDuelTimer -= uiDiff; + } + return; + } + + if (m_bIsDuelInProgress) + { + if (lose) + { + if (!me->HasAura(7267)) + EnterEvadeMode(); + return; + } + else if (me->getVictim()->GetTypeId() == TYPEID_PLAYER + && me->getVictim()->GetHealth() * 10 < me->getVictim()->GetMaxHealth()) + { + me->getVictim()->CastSpell(me->getVictim(), 7267, true); // beg + me->getVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true); + EnterEvadeMode(); + return; + } + } + + // TODO: spells + + SpellAI::UpdateAI(uiDiff); + } +}; + +CreatureAI* GetAI_npc_death_knight_initiate(Creature* pCreature) +{ + return new npc_death_knight_initiateAI(pCreature); +} + +bool GossipHello_npc_death_knight_initiate(Player* pPlayer, Creature* pCreature) +{ + if (pPlayer->GetQuestStatus(QUEST_DEATH_CHALLENGE) == QUEST_STATUS_INCOMPLETE && pCreature->GetHealth() == pCreature->GetMaxHealth()) + { + if (pPlayer->GetHealth() * 10 < pPlayer->GetMaxHealth()) + return true; + + if (pPlayer->isInCombat() || pCreature->isInCombat()) + return true; + + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ACCEPT_DUEL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(),pCreature->GetGUID()); + } + return true; +} + +bool GossipSelect_npc_death_knight_initiate(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF) + { + pPlayer->CLOSE_GOSSIP_MENU(); + + if (pPlayer->isInCombat() || pCreature->isInCombat()) + return true; + + if (npc_death_knight_initiateAI* pInitiateAI = CAST_AI(npc_death_knight_initiateAI, pCreature->AI())) + { + if (pInitiateAI->m_bIsDuelInProgress) + return true; + } + + pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); + + int32 uiSayId = rand()% (sizeof(m_auiRandomSay)/sizeof(int32)); + DoScriptText(m_auiRandomSay[uiSayId], pCreature, pPlayer); + + pCreature->CastSpell(pPlayer, SPELL_DUEL, false); + pPlayer->CastSpell(pPlayer, SPELL_DUEL_FLAG, true); + } + return true; +} + +/*###### +## npc_dark_rider_of_acherus +######*/ + +#define DESPAWN_HORSE 52267 + +struct TRINITY_DLL_DECL npc_dark_rider_of_acherusAI : public ScriptedAI +{ + npc_dark_rider_of_acherusAI(Creature *c) : ScriptedAI(c) {} + + uint32 PhaseTimer; + uint32 Phase; + bool Intro; + Unit *Target; + + void Reset() + { + PhaseTimer = 4000; + Phase = 0; + Intro = false; + Target = NULL; + } + + void UpdateAI(const uint32 diff) + { + if (!Intro) + return; + + if (PhaseTimer < diff) + { + switch(Phase) + { + case 0: + m_creature->MonsterSay("The realm of shadows awaits...", LANG_UNIVERSAL, 0); + PhaseTimer = 5000; + Phase = 1; + break; + case 1: + DoCast(Target, DESPAWN_HORSE, true); + PhaseTimer = 3000; + Phase = 2; + break; + case 2: + m_creature->SetVisibility(VISIBILITY_OFF); + PhaseTimer = 2000; + Phase = 3; + break; + case 3: + m_creature->ForcedDespawn(); + break; + default: + break; + } + }else PhaseTimer -= diff; + + } + + void InitDespawnHorse(Unit *who) + { + if (!who) + return; + + Target = who; + m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + m_creature->SetSpeed(MOVE_RUN, 0.4f); + m_creature->GetMotionMaster()->MoveChase(Target); + m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Target->GetGUID()); + Intro = true; + } + +}; + +CreatureAI* GetAI_npc_dark_rider_of_acherus(Creature* pCreature) +{ + return new npc_dark_rider_of_acherusAI(pCreature); +} + +/*###### +## npc_salanar_the_horseman +######*/ + +enum +{ + REALM_OF_SHADOWS = 52693, + DELIVER_STOLEN_HORSE = 52264, + CALL_DARK_RIDER = 52266 +}; + +struct TRINITY_DLL_DECL npc_salanar_the_horsemanAI : public ScriptedAI +{ + npc_salanar_the_horsemanAI(Creature *c) : ScriptedAI(c) {} + + void SpellHit(Unit *caster, const SpellEntry *spell) + { + if (spell->Id == DELIVER_STOLEN_HORSE) + { + if (caster->GetTypeId() == TYPEID_UNIT && CAST_CRE(caster)->isVehicle()) + { + if (Unit *charmer = caster->GetCharmer()) + { + charmer->ExitVehicle(); + caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + caster->setFaction(35); + DoCast(caster, CALL_DARK_RIDER, true); + if (Creature* Dark_Rider = m_creature->FindNearestCreature(28654, 15)) + CAST_AI(npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster); + } + } + } + } + + void MoveInLineOfSight(Unit *who) + { + ScriptedAI::MoveInLineOfSight(who); + + if (who->GetTypeId() == TYPEID_UNIT && CAST_CRE(who)->isVehicle() && me->IsWithinDistInMap(who, 10.0f)) + { + if (Unit *charmer = who->GetCharmer()) + { + if (charmer->GetTypeId() == TYPEID_PLAYER) + { + switch(me->GetEntry()) + { + // for quest Into the Realm of Shadows(12687) + case 28788: + if (CAST_PLR(charmer)->GetQuestStatus(12687) == QUEST_STATUS_INCOMPLETE) + { + if (CAST_PLR(charmer)->HasAura(REALM_OF_SHADOWS)) + charmer->RemoveAurasDueToSpell(REALM_OF_SHADOWS); + CAST_PLR(charmer)->GroupEventHappens(12687, me); + } + break; + default: + return; + } + CAST_PLR(charmer)->ExitVehicle(); + CAST_CRE(who)->Respawn(true); + } + } + } + } +}; + +CreatureAI* GetAI_npc_salanar_the_horseman(Creature* pCreature) +{ + return new npc_salanar_the_horsemanAI(pCreature); +} + +/*###### +## npc_ros_dark_rider +######*/ + +struct TRINITY_DLL_DECL npc_ros_dark_riderAI : public ScriptedAI +{ + npc_ros_dark_riderAI(Creature *c) : ScriptedAI(c) {} + + void EnterCombat(Unit *who) + { + me->ExitVehicle(); + } + + void Reset() + { + Creature* deathcharger = me->FindNearestCreature(28782, 30); + if (!deathcharger) return; + deathcharger->RestoreFaction(); + deathcharger->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + deathcharger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + if (!me->m_Vehicle && deathcharger->isVehicle() && CAST_VEH(deathcharger)->HasEmptySeat(0)) + me->EnterVehicle(CAST_VEH(deathcharger)); + } + + void JustDied(Unit *killer) + { + Creature* deathcharger = me->FindNearestCreature(28782, 30); + if (!deathcharger) return; + if (killer->GetTypeId() == TYPEID_PLAYER && deathcharger->GetTypeId() == TYPEID_UNIT && deathcharger->isVehicle()) + { + deathcharger->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); + deathcharger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); + deathcharger->setFaction(2096); + } + } +}; + +CreatureAI* GetAI_npc_ros_dark_rider(Creature* pCreature) +{ + return new npc_ros_dark_riderAI(pCreature); +} + +// correct way: 52312 52314 52555 ... +struct TRINITY_DLL_DECL npc_dkc1_gothikAI : public ScriptedAI +{ + npc_dkc1_gothikAI(Creature *c) : ScriptedAI(c) {} + + void MoveInLineOfSight(Unit *who) + { + ScriptedAI::MoveInLineOfSight(who); + + if (who->GetEntry() == 28845 && me->IsWithinDistInMap(who, 10.0f)) + { + if (Unit *owner = who->GetOwner()) + { + if (owner->GetTypeId() == TYPEID_PLAYER) + { + if (CAST_PLR(owner)->GetQuestStatus(12698) == QUEST_STATUS_INCOMPLETE) + { + CAST_CRE(who)->CastSpell(owner, 52517, true); + CAST_CRE(who)->ForcedDespawn(); + } + } + } + } + } +}; + +CreatureAI* GetAI_npc_dkc1_gothik(Creature* pCreature) +{ + return new npc_dkc1_gothikAI(pCreature); +} + +// npc 28912 quest 17217 boss 29001 mob 29007 go 191092 + +/*#### +## npc_valkyr_battle_maiden +####*/ +#define SPELL_REVIVE 51918 +#define VALK_WHISPER "It is not yet your time, champion. Rise! Rise and fight once more!" + +struct TRINITY_DLL_DECL npc_valkyr_battle_maidenAI : public PassiveAI +{ + npc_valkyr_battle_maidenAI(Creature *c) : PassiveAI(c) {} + + uint32 FlyBackTimer; + float x, y, z; + uint32 phase; + + void Reset() + { + m_creature->SetVisibility(VISIBILITY_OFF); + m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); + m_creature->SetFlying(true); + FlyBackTimer = 500; + phase = 0; + + m_creature->GetPosition(x, y, z); + z += 4; x -= 3.5; y -= 5; + m_creature->GetMotionMaster()->Clear(false); + m_creature->GetMap()->CreatureRelocation(m_creature, x, y, z, 0.0f); + } + + void UpdateAI(const uint32 diff) + { + if(FlyBackTimer < diff) + { + Player *plr = NULL; + if(me->isSummon()) + if(Unit *summoner = CAST_SUM(me)->GetSummoner()) + if(summoner->GetTypeId() == TYPEID_PLAYER) + plr = CAST_PLR(summoner); + + if(!plr) + phase = 3; + + switch(phase) + { + case 0: + m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); + m_creature->HandleEmoteCommand(EMOTE_STATE_FLYGRABCLOSED); + FlyBackTimer = 500; + break; + case 1: + plr->GetClosePoint(x,y,z, m_creature->GetObjectSize()); + z += 2.5; x -= 2; y -= 1.5; + m_creature->GetMotionMaster()->MovePoint(0, x, y, z); + m_creature->SetUInt64Value(UNIT_FIELD_TARGET, plr->GetGUID()); + m_creature->SetVisibility(VISIBILITY_ON); + FlyBackTimer = 4500; + break; + case 2: + if (!plr->isRessurectRequested()) + { + m_creature->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOMSPELL01); + DoCast(plr, SPELL_REVIVE, true); + m_creature->MonsterWhisper(VALK_WHISPER, plr->GetGUID()); + } + FlyBackTimer = 5000; + break; + case 3: + me->DisappearAndDie(); + break; + default: + //Nothing To DO + break; + } + ++phase; + }else FlyBackTimer-=diff; + } +}; + +CreatureAI* GetAI_npc_valkyr_battle_maiden(Creature* pCreature) +{ + return new npc_valkyr_battle_maidenAI (pCreature); +} + +void AddSC_the_scarlet_enclave() +{ + Script *newscript; + + newscript = new Script; + newscript->Name="npc_valkyr_battle_maiden"; + newscript->GetAI = &GetAI_npc_valkyr_battle_maiden; + newscript->RegisterSelf(); + + // 12848 The Endless Hunger + newscript = new Script; + newscript->Name="npc_unworthy_initiate"; + newscript->GetAI = &GetAI_npc_unworthy_initiate; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_unworthy_initiate_anchor"; + newscript->GetAI = &GetAI_npc_unworthy_initiate_anchor; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="go_acherus_soul_prison"; + newscript->pGOHello = &GOHello_go_acherus_soul_prison; + newscript->RegisterSelf(); + + // Death's Challenge + newscript = new Script; + newscript->Name="npc_death_knight_initiate"; + newscript->GetAI = &GetAI_npc_death_knight_initiate; + newscript->pGossipHello = &GossipHello_npc_death_knight_initiate; + newscript->pGossipSelect = &GossipSelect_npc_death_knight_initiate; + newscript->RegisterSelf(); + + // 12680 Grand Theft Palomino + newscript = new Script; + newscript->Name="npc_salanar_the_horseman"; + newscript->GetAI = &GetAI_npc_salanar_the_horseman; + newscript->RegisterSelf(); + + newscript = new Script; + newscript->Name="npc_dark_rider_of_acherus"; + newscript->GetAI = &GetAI_npc_dark_rider_of_acherus; + newscript->RegisterSelf(); + + // 12687 Into the Realm of Shadows + newscript = new Script; + newscript->Name="npc_ros_dark_rider"; + newscript->GetAI = &GetAI_npc_ros_dark_rider; + newscript->RegisterSelf(); + + // 12698 The Gift That Keeps On Giving + newscript = new Script; + newscript->Name="npc_dkc1_gothik"; + newscript->GetAI = &GetAI_npc_dkc1_gothik; + newscript->RegisterSelf(); + + // 12727 Bloody Breakout + newscript = new Script; + newscript->Name = "npc_koltira_deathweaver"; + newscript->GetAI = &GetAI_npc_koltira_deathweaver; + newscript->pQuestAccept = &QuestAccept_npc_koltira_deathweaver; + newscript->RegisterSelf(); + + // A Special Suprise + newscript = new Script; + newscript->Name = "npc_a_special_surprise"; + newscript->GetAI = &GetAI_npc_a_special_surprise; + newscript->RegisterSelf(); +} diff --git a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp index e33f430894e..da5d0e15699 100644 --- a/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp +++ b/src/bindings/scripts/scripts/outland/hellfire_peninsula.cpp @@ -24,6 +24,7 @@ EndScriptData */ /* ContentData npc_aeranas go_haaleshi_altar +npc_naladu npc_wounded_blood_elf EndContentData */ @@ -126,6 +127,35 @@ bool GOHello_go_haaleshi_altar(Player* pPlayer, GameObject* pGo) return false; } +/*###### +## npc_naladu +######*/ + +#define GOSSIP_NALADU_ITEM1 "Why don't you escape?" + +enum +{ + GOSSIP_TEXTID_NALADU1 = 9788 +}; + +bool GossipHello_npc_naladu(Player* pPlayer, Creature* pCreature) +{ + if (pCreature->isQuestGiver()) + pPlayer->PrepareQuestMenu(pCreature->GetGUID()); + + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_NALADU_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(), pCreature->GetGUID()); + return true; +} + +bool GossipSelect_npc_naladu(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) +{ + if (uiAction == GOSSIP_ACTION_INFO_DEF+1) + pPlayer->SEND_GOSSIP_MENU(GOSSIP_TEXTID_NALADU1, pCreature->GetGUID()); + + return true; +} + /*###### ## npc_wounded_blood_elf ######*/ @@ -232,6 +262,12 @@ void AddSC_hellfire_peninsula() newscript->pGOHello = &GOHello_go_haaleshi_altar; newscript->RegisterSelf(); + newscript = new Script; + newscript->Name = "npc_naladu"; + newscript->pGossipHello = &GossipHello_npc_naladu; + newscript->pGossipSelect = &GossipSelect_npc_naladu; + newscript->RegisterSelf(); + newscript = new Script; newscript->Name="npc_wounded_blood_elf"; newscript->GetAI = &GetAI_npc_wounded_blood_elf; diff --git a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp b/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp deleted file mode 100644 index 247a0084e77..00000000000 --- a/src/bindings/scripts/scripts/zone/eastern_plaguelands/the_scarlet_enclave.cpp +++ /dev/null @@ -1,1495 +0,0 @@ -/* - * Copyright (C) 2009 Trinity - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "precompiled.h" -#include "Vehicle.h" -#include "ObjectMgr.h" -#include "escortAI.h" - -#define GCD_CAST 1 - -/*###### -## npc_a_special_surprise -######*/ - -enum SpecialSurprise -{ - SAY_EXEC_START_1 = -1609025, // speech for all - SAY_EXEC_START_2 = -1609026, - SAY_EXEC_START_3 = -1609027, - SAY_EXEC_PROG_1 = -1609028, - SAY_EXEC_PROG_2 = -1609029, - SAY_EXEC_PROG_3 = -1609030, - SAY_EXEC_PROG_4 = -1609031, - SAY_EXEC_PROG_5 = -1609032, - SAY_EXEC_PROG_6 = -1609033, - SAY_EXEC_PROG_7 = -1609034, - SAY_EXEC_NAME_1 = -1609035, - SAY_EXEC_NAME_2 = -1609036, - SAY_EXEC_RECOG_1 = -1609037, - SAY_EXEC_RECOG_2 = -1609038, - SAY_EXEC_RECOG_3 = -1609039, - SAY_EXEC_RECOG_4 = -1609040, - SAY_EXEC_RECOG_5 = -1609041, - SAY_EXEC_RECOG_6 = -1609042, - SAY_EXEC_NOREM_1 = -1609043, - SAY_EXEC_NOREM_2 = -1609044, - SAY_EXEC_NOREM_3 = -1609045, - SAY_EXEC_NOREM_4 = -1609046, - SAY_EXEC_NOREM_5 = -1609047, - SAY_EXEC_NOREM_6 = -1609048, - SAY_EXEC_NOREM_7 = -1609049, - SAY_EXEC_NOREM_8 = -1609050, - SAY_EXEC_NOREM_9 = -1609051, - SAY_EXEC_THINK_1 = -1609052, - SAY_EXEC_THINK_2 = -1609053, - SAY_EXEC_THINK_3 = -1609054, - SAY_EXEC_THINK_4 = -1609055, - SAY_EXEC_THINK_5 = -1609056, - SAY_EXEC_THINK_6 = -1609057, - SAY_EXEC_THINK_7 = -1609058, - SAY_EXEC_THINK_8 = -1609059, - SAY_EXEC_THINK_9 = -1609060, - SAY_EXEC_THINK_10 = -1609061, - SAY_EXEC_LISTEN_1 = -1609062, - SAY_EXEC_LISTEN_2 = -1609063, - SAY_EXEC_LISTEN_3 = -1609064, - SAY_EXEC_LISTEN_4 = -1609065, - SAY_PLAGUEFIST = -1609066, - SAY_EXEC_TIME_1 = -1609067, - SAY_EXEC_TIME_2 = -1609068, - SAY_EXEC_TIME_3 = -1609069, - SAY_EXEC_TIME_4 = -1609070, - SAY_EXEC_TIME_5 = -1609071, - SAY_EXEC_TIME_6 = -1609072, - SAY_EXEC_TIME_7 = -1609073, - SAY_EXEC_TIME_8 = -1609074, - SAY_EXEC_TIME_9 = -1609075, - SAY_EXEC_TIME_10 = -1609076, - SAY_EXEC_WAITING = -1609077, - EMOTE_DIES = -1609078, - - NPC_PLAGUEFIST = 29053 -}; - -struct TRINITY_DLL_DECL npc_a_special_surpriseAI : public ScriptedAI -{ - npc_a_special_surpriseAI(Creature *pCreature) : ScriptedAI(pCreature) {} - - uint32 ExecuteSpeech_Timer; - uint32 ExecuteSpeech_Counter; - uint64 PlayerGUID; - - void Reset() - { - ExecuteSpeech_Timer = 0; - ExecuteSpeech_Counter = 0; - PlayerGUID = 0; - - me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - } - - bool MeetQuestCondition(Unit* pPlayer) - { - switch(me->GetEntry()) - { - case 29061: // Ellen Stanbridge - if (CAST_PLR(pPlayer)->GetQuestStatus(12742) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29072: // Kug Ironjaw - if (CAST_PLR(pPlayer)->GetQuestStatus(12748) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29067: // Donovan Pulfrost - if (CAST_PLR(pPlayer)->GetQuestStatus(12744) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29065: // Yazmina Oakenthorn - if (CAST_PLR(pPlayer)->GetQuestStatus(12743) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29071: // Antoine Brack - if (CAST_PLR(pPlayer)->GetQuestStatus(12750) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29032: // Malar Bravehorn - if (CAST_PLR(pPlayer)->GetQuestStatus(12739) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29068: // Goby Blastenheimer - if (CAST_PLR(pPlayer)->GetQuestStatus(12745) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29073: // Iggy Darktusk - if (CAST_PLR(pPlayer)->GetQuestStatus(12749) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29074: // Lady Eonys - if (CAST_PLR(pPlayer)->GetQuestStatus(12747) == QUEST_STATUS_INCOMPLETE) - return true; - break; - case 29070: // Valok the Righteous - if (CAST_PLR(pPlayer)->GetQuestStatus(12746) == QUEST_STATUS_INCOMPLETE) - return true; - break; - } - - return false; - } - - void MoveInLineOfSight(Unit* pWho) - { - if (PlayerGUID || pWho->GetTypeId() != TYPEID_PLAYER || !pWho->IsWithinDist(me, INTERACTION_DISTANCE)) - return; - - if (MeetQuestCondition(pWho)) - PlayerGUID = pWho->GetGUID(); - } - - void UpdateAI(const uint32 diff) - { - if (PlayerGUID && !me->getVictim() && me->isAlive()) - { - if (ExecuteSpeech_Timer < diff) - { - Player* pPlayer = Unit::GetPlayer(PlayerGUID); - - if (!pPlayer) - { - Reset(); - return; - } - - //TODO: simplify text's selection - - switch(pPlayer->getRace()) - { - case RACE_HUMAN: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_5, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_5, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_7, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_6, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_ORC: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_6, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_7, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_8, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_8, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_DWARF: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_2, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_2, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_3, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_2, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_5, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_2, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_3, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_NIGHTELF: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_5, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_6, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_2, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_7, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_UNDEAD_PLAYER: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_3, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_4, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_3, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_1, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_3, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_4, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_TAUREN: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_1, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_5, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_8, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_9, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_9, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_GNOME: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_4, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_4, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_6, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_5, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_TROLL: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_3, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_7, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_2, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_6, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_9, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_10, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_4, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_10, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_BLOODELF: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_1, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_1, me, pPlayer); break; - //case 5: //unknown - case 6: DoScriptText(SAY_EXEC_THINK_3, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_1, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - case RACE_DRAENEI: - switch(ExecuteSpeech_Counter) - { - case 0: DoScriptText(SAY_EXEC_START_1, me, pPlayer); break; - case 1: me->SetStandState(UNIT_STAND_STATE_STAND); break; - case 2: DoScriptText(SAY_EXEC_PROG_1, me, pPlayer); break; - case 3: DoScriptText(SAY_EXEC_NAME_1, me, pPlayer); break; - case 4: DoScriptText(SAY_EXEC_RECOG_2, me, pPlayer); break; - case 5: DoScriptText(SAY_EXEC_NOREM_1, me, pPlayer); break; - case 6: DoScriptText(SAY_EXEC_THINK_4, me, pPlayer); break; - case 7: DoScriptText(SAY_EXEC_LISTEN_1, me, pPlayer); break; - case 8: - if (Creature* Plaguefist = GetClosestCreatureWithEntry(me, NPC_PLAGUEFIST, 85.0f)) - DoScriptText(SAY_PLAGUEFIST, Plaguefist, pPlayer); - break; - case 9: - DoScriptText(SAY_EXEC_TIME_2, me, pPlayer); - me->SetStandState(UNIT_STAND_STATE_KNEEL); - me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - break; - case 10: DoScriptText(SAY_EXEC_WAITING, me, pPlayer); break; - case 11: - DoScriptText(EMOTE_DIES, me); - me->setDeathState(JUST_DIED); - me->SetHealth(0); - return; - } - break; - } - - if (ExecuteSpeech_Counter >= 9) - ExecuteSpeech_Timer = 15000; - else - ExecuteSpeech_Timer = 7000; - - ++ExecuteSpeech_Counter; - } - else - ExecuteSpeech_Timer -= diff; - } - } -}; - -CreatureAI* GetAI_npc_a_special_surprise(Creature* pCreature) -{ - return new npc_a_special_surpriseAI(pCreature); -} - -/*###### -## npc_koltira_deathweaver -######*/ - -enum eKoltira -{ - SAY_BREAKOUT1 = -1609079, - SAY_BREAKOUT2 = -1609080, - SAY_BREAKOUT3 = -1609081, - SAY_BREAKOUT4 = -1609082, - SAY_BREAKOUT5 = -1609083, - SAY_BREAKOUT6 = -1609084, - SAY_BREAKOUT7 = -1609085, - SAY_BREAKOUT8 = -1609086, - SAY_BREAKOUT9 = -1609087, - SAY_BREAKOUT10 = -1609088, - - SPELL_KOLTIRA_TRANSFORM = 52899, - SPELL_ANTI_MAGIC_ZONE = 52894, - - QUEST_BREAKOUT = 12727, - - NPC_CRIMSON_ACOLYTE = 29007, - NPC_HIGH_INQUISITOR_VALROTH = 29001, - NPC_KOLTIRA_ALT = 28447, - - //not sure about this id - //NPC_DEATH_KNIGHT_MOUNT = 29201, - MODEL_DEATH_KNIGHT_MOUNT = 25278 -}; - -struct TRINITY_DLL_DECL npc_koltira_deathweaverAI : public npc_escortAI -{ - npc_koltira_deathweaverAI(Creature *pCreature) : npc_escortAI(pCreature) { } - - uint32 m_uiWave; - uint32 m_uiWave_Timer; - uint64 m_uiValrothGUID; - - void Reset() - { - if (!IsBeingEscorted) - { - m_uiWave = 0; - m_uiWave_Timer = 3000; - m_uiValrothGUID = 0; - } - } - - void WaypointReached(uint32 uiPointId) - { - switch(uiPointId) - { - case 0: - DoScriptText(SAY_BREAKOUT1, m_creature); - break; - case 1: - m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); - break; - case 2: - m_creature->SetStandState(UNIT_STAND_STATE_STAND); - //m_creature->UpdateEntry(NPC_KOLTIRA_ALT); //unclear if we must update or not - DoCast(m_creature, SPELL_KOLTIRA_TRANSFORM); - break; - case 3: - IsOnHold = true; - m_creature->SetStandState(UNIT_STAND_STATE_KNEEL); - DoScriptText(SAY_BREAKOUT2, m_creature); - DoCast(m_creature, SPELL_ANTI_MAGIC_ZONE); // cast again that makes bubble up - break; - case 4: - SetRun(true); - break; - case 9: - m_creature->Mount(MODEL_DEATH_KNIGHT_MOUNT); - break; - case 10: - m_creature->Unmount(); - break; - } - } - - void JustSummoned(Creature* pSummoned) - { - if (Unit* pPlayer = Unit::GetUnit(*m_creature, PlayerGUID)) - { - pSummoned->AI()->AttackStart(pPlayer); - pSummoned->AddThreat(m_creature, 0.0f); - } - - if (pSummoned->GetEntry() == NPC_HIGH_INQUISITOR_VALROTH) - m_uiValrothGUID = pSummoned->GetGUID(); - } - - void SummonAcolyte(uint32 uiAmount) - { - for(uint32 i = 0; i < uiAmount; ++i) - m_creature->SummonCreature(NPC_CRIMSON_ACOLYTE, 1642.329, -6045.818, 127.583, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000); - } - - void UpdateAI(const uint32 uiDiff) - { - npc_escortAI::UpdateAI(uiDiff); - - if (IsOnHold) - { - if (m_uiWave_Timer < uiDiff) - { - switch(m_uiWave) - { - case 0: - DoScriptText(SAY_BREAKOUT3, m_creature); - SummonAcolyte(3); - m_uiWave_Timer = 20000; - break; - case 1: - DoScriptText(SAY_BREAKOUT4, m_creature); - SummonAcolyte(3); - m_uiWave_Timer = 20000; - break; - case 2: - DoScriptText(SAY_BREAKOUT5, m_creature); - SummonAcolyte(4); - m_uiWave_Timer = 20000; - break; - case 3: - DoScriptText(SAY_BREAKOUT6, m_creature); - m_creature->SummonCreature(NPC_HIGH_INQUISITOR_VALROTH, 1642.329, -6045.818, 127.583, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 1000); - m_uiWave_Timer = 1000; - break; - case 4: - { - Unit* pTemp = Unit::GetUnit(*m_creature, m_uiValrothGUID); - - if (!pTemp || !pTemp->isAlive()) - { - DoScriptText(SAY_BREAKOUT8, m_creature); - m_uiWave_Timer = 5000; - } - else - { - m_uiWave_Timer = 2500; - return; //return, we don't want m_uiWave to increment now - } - break; - } - case 5: - DoScriptText(SAY_BREAKOUT9, m_creature); - m_creature->RemoveAurasDueToSpell(SPELL_ANTI_MAGIC_ZONE); - m_uiWave_Timer = 2500; - break; - case 6: - DoScriptText(SAY_BREAKOUT10, m_creature); - IsOnHold = false; - break; - } - - ++m_uiWave; - } - else - m_uiWave_Timer -= uiDiff; - } - } -}; - -CreatureAI* GetAI_npc_koltira_deathweaver(Creature* pCreature) -{ - return new npc_koltira_deathweaverAI(pCreature); -} - -bool QuestAccept_npc_koltira_deathweaver(Player* pPlayer, Creature* pCreature, const Quest* pQuest) -{ - if (pQuest->GetQuestId() == QUEST_BREAKOUT) - { - pCreature->SetStandState(UNIT_STAND_STATE_STAND); - - if (npc_escortAI* pEscortAI = CAST_AI(npc_koltira_deathweaverAI,pCreature->AI())) - pEscortAI->Start(false, false, pPlayer->GetGUID()); - } - return true; -} - -/*###### -##Quest 12848 -######*/ - -enum -{ - SPELL_SOUL_PRISON_CHAIN_SELF = 54612, - SPELL_SOUL_PRISON_CHAIN = 54613, - SPELL_DK_INITIATE_VISUAL = 51519, - - SPELL_ICY_TOUCH = 52372, - SPELL_PLAGUE_STRIKE = 52373, - SPELL_BLOOD_STRIKE = 52374, - SPELL_DEATH_COIL = 52375 -}; - -#define EVENT_ICY_TOUCH 1 -#define EVENT_PLAGUE_STRIKE 2 -#define EVENT_BLOOD_STRIKE 3 -#define EVENT_DEATH_COIL 4 - -int32 say_event_start[8] = -{ - -1609000,-1609001,-1609002,-1609003, - -1609004,-1609005,-1609006,-1609007 -}; - -int32 say_event_attack[9] = -{ - -1609008,-1609009,-1609010,-1609011,-1609012, - -1609013,-1609014,-1609015,-1609016 -}; - -uint32 acherus_soul_prison[12] = -{ - 191577, - 191580, - 191581, - 191582, - 191583, - 191584, - 191585, - 191586, - 191587, - 191588, - 191589, - 191590 -}; - -uint32 acherus_unworthy_initiate[5] = -{ - 29519, - 29520, - 29565, - 29566, - 29567 -}; - -enum UnworthyInitiatePhase -{ - PHASE_CHAINED, - PHASE_TO_EQUIP, - PHASE_EQUIPING, - PHASE_TO_ATTACK, - PHASE_ATTACKING, -}; - -struct TRINITY_DLL_DECL npc_unworthy_initiateAI : public ScriptedAI -{ - npc_unworthy_initiateAI(Creature *c) : ScriptedAI(c) - { - me->SetReactState(REACT_PASSIVE); - if (!me->GetEquipmentId()) - if (const CreatureInfo *info = GetCreatureInfo(28406)) - if (info->equipmentId) - const_cast(me->GetCreatureInfo())->equipmentId = info->equipmentId; - } - - bool event_startet; - uint64 event_starter; - UnworthyInitiatePhase phase; - uint32 wait_timer; - float targ_x,targ_y,targ_z; - uint64 anchorGUID; - - EventMap events; - - void Reset() - { - anchorGUID = 0; - phase = PHASE_CHAINED; - events.Reset(); - m_creature->setFaction(7); - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 8); - me->LoadEquipment(0, true); - event_startet = false; - } - - void EnterCombat(Unit *who) - { - events.ScheduleEvent(EVENT_ICY_TOUCH, 1000, GCD_CAST); - events.ScheduleEvent(EVENT_PLAGUE_STRIKE, 3000, GCD_CAST); - events.ScheduleEvent(EVENT_BLOOD_STRIKE, 2000, GCD_CAST); - events.ScheduleEvent(EVENT_DEATH_COIL, 5000, GCD_CAST); - } - - void MovementInform(uint32 type, uint32 id) - { - if (type != POINT_MOTION_TYPE) - return; - - if (id == 1) - { - wait_timer = 5000; - m_creature->CastSpell(m_creature,SPELL_DK_INITIATE_VISUAL,true); - - if (Unit* starter = Unit::GetUnit((*m_creature),event_starter)) - DoScriptText(say_event_attack[rand()%9],m_creature,starter); - - phase = PHASE_TO_ATTACK; - } - } - - void EventStart(Creature* anchor, Player* target) - { - wait_timer = 5000; - phase = PHASE_TO_EQUIP; - - m_creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); - m_creature->RemoveAurasDueToSpell(SPELL_SOUL_PRISON_CHAIN_SELF); - m_creature->RemoveAurasDueToSpell(SPELL_SOUL_PRISON_CHAIN); - - float z; - anchor->GetContactPoint(me, targ_x, targ_y, z, 1.0f); - - event_starter = target->GetGUID(); - DoScriptText(say_event_start[rand()%8], m_creature, target); - } - - void UpdateAI(const uint32 diff); -}; - -CreatureAI* GetAI_npc_unworthy_initiate(Creature* pCreature) -{ - return new npc_unworthy_initiateAI(pCreature); -} - -struct TRINITY_DLL_DECL npc_unworthy_initiate_anchorAI : public PassiveAI -{ - npc_unworthy_initiate_anchorAI(Creature *c) : PassiveAI(c), prisonerGUID(0) {} - - uint64 prisonerGUID; - - void SetGUID(const uint64 &guid, int32 id) - { - if (!prisonerGUID) - prisonerGUID = guid; - } - - uint64 GetGUID(int32 id) { return prisonerGUID; } -}; - -void npc_unworthy_initiateAI::UpdateAI(const uint32 diff) -{ - switch(phase) - { - case PHASE_CHAINED: - if (!anchorGUID) - { - float x, y, z; - float dist = 99.0f; - GameObject *prison = NULL; - - for(uint8 i = 0; i < 12; ++i) - { - if (GameObject* temp_prison = m_creature->FindNearestGameObject(acherus_soul_prison[i],30)) - { - if (dist == 99.0f || m_creature->IsWithinDist(temp_prison, dist, false)) - { - temp_prison->GetPosition(x, y, z); - dist = m_creature->GetDistance2d(temp_prison); - prison = temp_prison; - } - } - } - - if (!prison) - return; - - if (Creature* trigger = me->FindNearestCreature(29521, 30)) - { - prison->ResetDoorOrButton(); - trigger->AI()->SetGUID(m_creature->GetGUID()); - trigger->CastSpell(me, SPELL_SOUL_PRISON_CHAIN, true); - anchorGUID = trigger->GetGUID(); - } - } - return; - case PHASE_TO_EQUIP: - if (wait_timer) - { - if (wait_timer < diff) - { - m_creature->GetMotionMaster()->MovePoint(1,targ_x,targ_y,m_creature->GetPositionZ()); - phase = PHASE_EQUIPING; - wait_timer = 0; - }else wait_timer -= diff; - } - return; - case PHASE_TO_ATTACK: - if (wait_timer) - { - if (wait_timer < diff) - { - m_creature->setFaction(14); - m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2); - phase = PHASE_ATTACKING; - - if (Unit* target = Unit::GetUnit((*m_creature),event_starter)) - m_creature->AI()->AttackStart(target); - wait_timer = 0; - }else wait_timer -= diff; - } - return; - case PHASE_ATTACKING: - if (!UpdateVictim()) - return; - - events.Update(diff); - - while(uint32 eventId = events.ExecuteEvent()) - { - switch(eventId) - { - case EVENT_ICY_TOUCH: - DoCast(m_creature->getVictim(), SPELL_ICY_TOUCH); - events.DelayEvents(1000, GCD_CAST); - events.ScheduleEvent(EVENT_ICY_TOUCH, 5000, GCD_CAST); - break; - case EVENT_PLAGUE_STRIKE: - DoCast(m_creature->getVictim(), SPELL_PLAGUE_STRIKE); - events.DelayEvents(1000, GCD_CAST); - events.ScheduleEvent(SPELL_PLAGUE_STRIKE, 5000, GCD_CAST); - break; - case EVENT_BLOOD_STRIKE: - DoCast(m_creature->getVictim(), SPELL_BLOOD_STRIKE); - events.DelayEvents(1000, GCD_CAST); - events.ScheduleEvent(EVENT_BLOOD_STRIKE, 5000, GCD_CAST); - break; - case EVENT_DEATH_COIL: - DoCast(m_creature->getVictim(), SPELL_DEATH_COIL); - events.DelayEvents(1000, GCD_CAST); - events.ScheduleEvent(EVENT_DEATH_COIL, 5000, GCD_CAST); - break; - } - } - - DoMeleeAttackIfReady(); - return; - } -} - -CreatureAI* GetAI_npc_unworthy_initiate_anchor(Creature* pCreature) -{ - return new npc_unworthy_initiate_anchorAI(pCreature); -} - -bool GOHello_go_acherus_soul_prison(Player* pPlayer, GameObject* pGo) -{ - if (Creature *anchor = pGo->FindNearestCreature(29521, 15)) - if (uint64 prisonerGUID = anchor->AI()->GetGUID()) - if (Creature* prisoner = Creature::GetCreature(*pPlayer, prisonerGUID)) - CAST_AI(npc_unworthy_initiateAI, (prisoner->AI()))->EventStart(anchor, pPlayer); - - return false; -} - -/*###### -## npc_death_knight_initiate -######*/ - -#define GOSSIP_ACCEPT_DUEL "I challenge you, death knight!" - -enum -{ - SAY_DUEL_A = -1609080, - SAY_DUEL_B = -1609081, - SAY_DUEL_C = -1609082, - SAY_DUEL_D = -1609083, - SAY_DUEL_E = -1609084, - SAY_DUEL_F = -1609085, - SAY_DUEL_G = -1609086, - SAY_DUEL_H = -1609087, - SAY_DUEL_I = -1609088, - - SPELL_DUEL = 52996, - SPELL_DUEL_TRIGGERED = 52990, - SPELL_DUEL_VICTORY = 52994, - SPELL_DUEL_FLAG = 52991, - - QUEST_DEATH_CHALLENGE = 12733, - FACTION_HOSTILE = 2068 -}; - -int32 m_auiRandomSay[] = -{ - SAY_DUEL_A, SAY_DUEL_B, SAY_DUEL_C, SAY_DUEL_D, SAY_DUEL_E, SAY_DUEL_F, SAY_DUEL_G, SAY_DUEL_H, SAY_DUEL_I -}; - -struct TRINITY_DLL_DECL npc_death_knight_initiateAI : public SpellAI -{ - npc_death_knight_initiateAI(Creature* pCreature) : SpellAI(pCreature) - { - m_bIsDuelInProgress = false; - } - - bool lose; - uint64 m_uiDuelerGUID; - uint32 m_uiDuelTimer; - bool m_bIsDuelInProgress; - - void Reset() - { - lose = false; - me->RestoreFaction(); - SpellAI::Reset(); - - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); - - m_uiDuelerGUID = 0; - m_uiDuelTimer = 5000; - m_bIsDuelInProgress = false; - } - - void SpellHit(Unit* pCaster, const SpellEntry* pSpell) - { - if (!m_bIsDuelInProgress && pSpell->Id == SPELL_DUEL_TRIGGERED) - { - m_uiDuelerGUID = pCaster->GetGUID(); - m_bIsDuelInProgress = true; - } - } - - void DamageTaken(Unit* pDoneBy, uint32 &uiDamage) - { - if (m_bIsDuelInProgress && pDoneBy->IsControlledByPlayer()) - { - if (pDoneBy->GetGUID() != m_uiDuelerGUID && pDoneBy->GetOwnerGUID() != m_uiDuelerGUID) // other players cannot help - uiDamage = 0; - else if (uiDamage >= m_creature->GetHealth()) - { - uiDamage = 0; - - if (!lose) - { - pDoneBy->RemoveGameObject(SPELL_DUEL_FLAG, true); - pDoneBy->AttackStop(); - me->CastSpell(pDoneBy, SPELL_DUEL_VICTORY, true); - lose = true; - me->CastSpell(me, 7267, true); - me->RestoreFaction(); - } - } - } - } - - void UpdateAI(const uint32 uiDiff) - { - if (!UpdateVictim()) - { - if (m_bIsDuelInProgress) - { - if (m_uiDuelTimer < uiDiff) - { - m_creature->setFaction(FACTION_HOSTILE); - - if (Unit* pUnit = Unit::GetUnit(*m_creature, m_uiDuelerGUID)) - AttackStart(pUnit); - } - else - m_uiDuelTimer -= uiDiff; - } - return; - } - - if (m_bIsDuelInProgress) - { - if (lose) - { - if (!me->HasAura(7267)) - EnterEvadeMode(); - return; - } - else if (me->getVictim()->GetTypeId() == TYPEID_PLAYER - && me->getVictim()->GetHealth() * 10 < me->getVictim()->GetMaxHealth()) - { - me->getVictim()->CastSpell(me->getVictim(), 7267, true); // beg - me->getVictim()->RemoveGameObject(SPELL_DUEL_FLAG, true); - EnterEvadeMode(); - return; - } - } - - // TODO: spells - - SpellAI::UpdateAI(uiDiff); - } -}; - -CreatureAI* GetAI_npc_death_knight_initiate(Creature* pCreature) -{ - return new npc_death_knight_initiateAI(pCreature); -} - -bool GossipHello_npc_death_knight_initiate(Player* pPlayer, Creature* pCreature) -{ - if (pPlayer->GetQuestStatus(QUEST_DEATH_CHALLENGE) == QUEST_STATUS_INCOMPLETE && pCreature->GetHealth() == pCreature->GetMaxHealth()) - { - if (pPlayer->GetHealth() * 10 < pPlayer->GetMaxHealth()) - return true; - - if (pPlayer->isInCombat() || pCreature->isInCombat()) - return true; - - pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ACCEPT_DUEL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); - pPlayer->SEND_GOSSIP_MENU(pCreature->GetNpcTextId(),pCreature->GetGUID()); - } - return true; -} - -bool GossipSelect_npc_death_knight_initiate(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) -{ - if (uiAction == GOSSIP_ACTION_INFO_DEF) - { - pPlayer->CLOSE_GOSSIP_MENU(); - - if (pPlayer->isInCombat() || pCreature->isInCombat()) - return true; - - if (npc_death_knight_initiateAI* pInitiateAI = CAST_AI(npc_death_knight_initiateAI, pCreature->AI())) - { - if (pInitiateAI->m_bIsDuelInProgress) - return true; - } - - pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_UNK_15); - - int32 uiSayId = rand()% (sizeof(m_auiRandomSay)/sizeof(int32)); - DoScriptText(m_auiRandomSay[uiSayId], pCreature, pPlayer); - - pCreature->CastSpell(pPlayer, SPELL_DUEL, false); - pPlayer->CastSpell(pPlayer, SPELL_DUEL_FLAG, true); - } - return true; -} - -/*###### -## npc_dark_rider_of_acherus -######*/ - -#define DESPAWN_HORSE 52267 - -struct TRINITY_DLL_DECL npc_dark_rider_of_acherusAI : public ScriptedAI -{ - npc_dark_rider_of_acherusAI(Creature *c) : ScriptedAI(c) {} - - uint32 PhaseTimer; - uint32 Phase; - bool Intro; - Unit *Target; - - void Reset() - { - PhaseTimer = 4000; - Phase = 0; - Intro = false; - Target = NULL; - } - - void UpdateAI(const uint32 diff) - { - if (!Intro) - return; - - if (PhaseTimer < diff) - { - switch(Phase) - { - case 0: - m_creature->MonsterSay("The realm of shadows awaits...", LANG_UNIVERSAL, 0); - PhaseTimer = 5000; - Phase = 1; - break; - case 1: - DoCast(Target, DESPAWN_HORSE, true); - PhaseTimer = 3000; - Phase = 2; - break; - case 2: - m_creature->SetVisibility(VISIBILITY_OFF); - PhaseTimer = 2000; - Phase = 3; - break; - case 3: - m_creature->ForcedDespawn(); - break; - default: - break; - } - }else PhaseTimer -= diff; - - } - - void InitDespawnHorse(Unit *who) - { - if (!who) - return; - - Target = who; - m_creature->AddUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - m_creature->SetSpeed(MOVE_RUN, 0.4f); - m_creature->GetMotionMaster()->MoveChase(Target); - m_creature->SetUInt64Value(UNIT_FIELD_TARGET, Target->GetGUID()); - Intro = true; - } - -}; - -CreatureAI* GetAI_npc_dark_rider_of_acherus(Creature* pCreature) -{ - return new npc_dark_rider_of_acherusAI(pCreature); -} - -/*###### -## npc_salanar_the_horseman -######*/ - -enum -{ - REALM_OF_SHADOWS = 52693, - DELIVER_STOLEN_HORSE = 52264, - CALL_DARK_RIDER = 52266 -}; - -struct TRINITY_DLL_DECL npc_salanar_the_horsemanAI : public ScriptedAI -{ - npc_salanar_the_horsemanAI(Creature *c) : ScriptedAI(c) {} - - void SpellHit(Unit *caster, const SpellEntry *spell) - { - if (spell->Id == DELIVER_STOLEN_HORSE) - { - if (caster->GetTypeId() == TYPEID_UNIT && CAST_CRE(caster)->isVehicle()) - { - if (Unit *charmer = caster->GetCharmer()) - { - charmer->ExitVehicle(); - caster->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - caster->setFaction(35); - DoCast(caster, CALL_DARK_RIDER, true); - if (Creature* Dark_Rider = m_creature->FindNearestCreature(28654, 15)) - CAST_AI(npc_dark_rider_of_acherusAI, Dark_Rider->AI())->InitDespawnHorse(caster); - } - } - } - } - - void MoveInLineOfSight(Unit *who) - { - ScriptedAI::MoveInLineOfSight(who); - - if (who->GetTypeId() == TYPEID_UNIT && CAST_CRE(who)->isVehicle() && me->IsWithinDistInMap(who, 10.0f)) - { - if (Unit *charmer = who->GetCharmer()) - { - if (charmer->GetTypeId() == TYPEID_PLAYER) - { - switch(me->GetEntry()) - { - // for quest Into the Realm of Shadows(12687) - case 28788: - if (CAST_PLR(charmer)->GetQuestStatus(12687) == QUEST_STATUS_INCOMPLETE) - { - if (CAST_PLR(charmer)->HasAura(REALM_OF_SHADOWS)) - charmer->RemoveAurasDueToSpell(REALM_OF_SHADOWS); - CAST_PLR(charmer)->GroupEventHappens(12687, me); - } - break; - default: - return; - } - CAST_PLR(charmer)->ExitVehicle(); - CAST_CRE(who)->Respawn(true); - } - } - } - } -}; - -CreatureAI* GetAI_npc_salanar_the_horseman(Creature* pCreature) -{ - return new npc_salanar_the_horsemanAI(pCreature); -} - -/*###### -## npc_ros_dark_rider -######*/ - -struct TRINITY_DLL_DECL npc_ros_dark_riderAI : public ScriptedAI -{ - npc_ros_dark_riderAI(Creature *c) : ScriptedAI(c) {} - - void EnterCombat(Unit *who) - { - me->ExitVehicle(); - } - - void Reset() - { - Creature* deathcharger = me->FindNearestCreature(28782, 30); - if (!deathcharger) return; - deathcharger->RestoreFaction(); - deathcharger->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - deathcharger->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - if (!me->m_Vehicle && deathcharger->isVehicle() && CAST_VEH(deathcharger)->HasEmptySeat(0)) - me->EnterVehicle(CAST_VEH(deathcharger)); - } - - void JustDied(Unit *killer) - { - Creature* deathcharger = me->FindNearestCreature(28782, 30); - if (!deathcharger) return; - if (killer->GetTypeId() == TYPEID_PLAYER && deathcharger->GetTypeId() == TYPEID_UNIT && deathcharger->isVehicle()) - { - deathcharger->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK); - deathcharger->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); - deathcharger->setFaction(2096); - } - } -}; - -CreatureAI* GetAI_npc_ros_dark_rider(Creature* pCreature) -{ - return new npc_ros_dark_riderAI(pCreature); -} - -// correct way: 52312 52314 52555 ... -struct TRINITY_DLL_DECL npc_dkc1_gothikAI : public ScriptedAI -{ - npc_dkc1_gothikAI(Creature *c) : ScriptedAI(c) {} - - void MoveInLineOfSight(Unit *who) - { - ScriptedAI::MoveInLineOfSight(who); - - if (who->GetEntry() == 28845 && me->IsWithinDistInMap(who, 10.0f)) - { - if (Unit *owner = who->GetOwner()) - { - if (owner->GetTypeId() == TYPEID_PLAYER) - { - if (CAST_PLR(owner)->GetQuestStatus(12698) == QUEST_STATUS_INCOMPLETE) - { - CAST_CRE(who)->CastSpell(owner, 52517, true); - CAST_CRE(who)->ForcedDespawn(); - } - } - } - } - } -}; - -CreatureAI* GetAI_npc_dkc1_gothik(Creature* pCreature) -{ - return new npc_dkc1_gothikAI(pCreature); -} - -// npc 28912 quest 17217 boss 29001 mob 29007 go 191092 - -/*#### -## npc_valkyr_battle_maiden -####*/ -#define SPELL_REVIVE 51918 -#define VALK_WHISPER "It is not yet your time, champion. Rise! Rise and fight once more!" - -struct TRINITY_DLL_DECL npc_valkyr_battle_maidenAI : public PassiveAI -{ - npc_valkyr_battle_maidenAI(Creature *c) : PassiveAI(c) {} - - uint32 FlyBackTimer; - float x, y, z; - uint32 phase; - - void Reset() - { - m_creature->SetVisibility(VISIBILITY_OFF); - m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); - m_creature->SetFlying(true); - FlyBackTimer = 500; - phase = 0; - - m_creature->GetPosition(x, y, z); - z += 4; x -= 3.5; y -= 5; - m_creature->GetMotionMaster()->Clear(false); - m_creature->GetMap()->CreatureRelocation(m_creature, x, y, z, 0.0f); - } - - void UpdateAI(const uint32 diff) - { - if(FlyBackTimer < diff) - { - Player *plr = NULL; - if(me->isSummon()) - if(Unit *summoner = CAST_SUM(me)->GetSummoner()) - if(summoner->GetTypeId() == TYPEID_PLAYER) - plr = CAST_PLR(summoner); - - if(!plr) - phase = 3; - - switch(phase) - { - case 0: - m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE); - m_creature->HandleEmoteCommand(EMOTE_STATE_FLYGRABCLOSED); - FlyBackTimer = 500; - break; - case 1: - plr->GetClosePoint(x,y,z, m_creature->GetObjectSize()); - z += 2.5; x -= 2; y -= 1.5; - m_creature->GetMotionMaster()->MovePoint(0, x, y, z); - m_creature->SetUInt64Value(UNIT_FIELD_TARGET, plr->GetGUID()); - m_creature->SetVisibility(VISIBILITY_ON); - FlyBackTimer = 4500; - break; - case 2: - if (!plr->isRessurectRequested()) - { - m_creature->HandleEmoteCommand(EMOTE_ONESHOT_CUSTOMSPELL01); - DoCast(plr, SPELL_REVIVE, true); - m_creature->MonsterWhisper(VALK_WHISPER, plr->GetGUID()); - } - FlyBackTimer = 5000; - break; - case 3: - me->DisappearAndDie(); - break; - default: - //Nothing To DO - break; - } - ++phase; - }else FlyBackTimer-=diff; - } -}; - -CreatureAI* GetAI_npc_valkyr_battle_maiden(Creature* pCreature) -{ - return new npc_valkyr_battle_maidenAI (pCreature); -} - -void AddSC_the_scarlet_enclave() -{ - Script *newscript; - - newscript = new Script; - newscript->Name="npc_valkyr_battle_maiden"; - newscript->GetAI = &GetAI_npc_valkyr_battle_maiden; - newscript->RegisterSelf(); - - // 12848 The Endless Hunger - newscript = new Script; - newscript->Name="npc_unworthy_initiate"; - newscript->GetAI = &GetAI_npc_unworthy_initiate; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_unworthy_initiate_anchor"; - newscript->GetAI = &GetAI_npc_unworthy_initiate_anchor; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="go_acherus_soul_prison"; - newscript->pGOHello = &GOHello_go_acherus_soul_prison; - newscript->RegisterSelf(); - - // Death's Challenge - newscript = new Script; - newscript->Name="npc_death_knight_initiate"; - newscript->GetAI = &GetAI_npc_death_knight_initiate; - newscript->pGossipHello = &GossipHello_npc_death_knight_initiate; - newscript->pGossipSelect = &GossipSelect_npc_death_knight_initiate; - newscript->RegisterSelf(); - - // 12680 Grand Theft Palomino - newscript = new Script; - newscript->Name="npc_salanar_the_horseman"; - newscript->GetAI = &GetAI_npc_salanar_the_horseman; - newscript->RegisterSelf(); - - newscript = new Script; - newscript->Name="npc_dark_rider_of_acherus"; - newscript->GetAI = &GetAI_npc_dark_rider_of_acherus; - newscript->RegisterSelf(); - - // 12687 Into the Realm of Shadows - newscript = new Script; - newscript->Name="npc_ros_dark_rider"; - newscript->GetAI = &GetAI_npc_ros_dark_rider; - newscript->RegisterSelf(); - - // 12698 The Gift That Keeps On Giving - newscript = new Script; - newscript->Name="npc_dkc1_gothik"; - newscript->GetAI = &GetAI_npc_dkc1_gothik; - newscript->RegisterSelf(); - - // 12727 Bloody Breakout - newscript = new Script; - newscript->Name = "npc_koltira_deathweaver"; - newscript->GetAI = &GetAI_npc_koltira_deathweaver; - newscript->pQuestAccept = &QuestAccept_npc_koltira_deathweaver; - newscript->RegisterSelf(); - - // A Special Suprise - newscript = new Script; - newscript->Name = "npc_a_special_surprise"; - newscript->GetAI = &GetAI_npc_a_special_surprise; - newscript->RegisterSelf(); -} diff --git a/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp b/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp index c9dc16b67d6..800a838aabc 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/boss_golemagg.cpp @@ -17,98 +17,101 @@ /* ScriptData SDName: Boss_Golemagg SD%Complete: 90 -SDComment: +SDComment: Timers need to be confirmed, Golemagg's Trust need to be checked SDCategory: Molten Core EndScriptData */ #include "precompiled.h" #include "def_molten_core.h" -#define EMOTE_AEGIS -1409002 - -#define SPELL_MAGMASPLASH 13879 -#define SPELL_PYROBLAST 20228 -#define SPELL_EARTHQUAKE 19798 -#define SPELL_ENRAGE 19953 -#define SPELL_BUFF 20553 - -//-- CoreRager Spells -- -#define SPELL_MANGLE 19820 -#define SPELL_AEGIS 20620 //This is self casted whenever we are below 50% +enum +{ + SPELL_MAGMASPLASH = 13879, + SPELL_PYROBLAST = 20228, + SPELL_EARTHQUAKE = 19798, + SPELL_ENRAGE = 19953, + SPELL_GOLEMAGG_TRUST = 20553, + + // Core Rager + EMOTE_LOWHP = -1409002, + SPELL_MANGLE = 19820 +}; struct TRINITY_DLL_DECL boss_golemaggAI : public ScriptedAI { - boss_golemaggAI(Creature *c) : ScriptedAI(c) + boss_golemaggAI(Creature* pCreature) : ScriptedAI(pCreature) { - pInstance = c->GetInstanceData(); + m_pInstance = pCreature->GetInstanceData(); } - ScriptedInstance *pInstance; - uint32 Pyroblast_Timer; - uint32 EarthQuake_Timer; - uint32 Enrage_Timer; - uint32 Buff_Timer; + ScriptedInstance* m_pInstance; + + uint32 m_uiPyroblastTimer; + uint32 m_uiEarthquakeTimer; + uint32 m_uiBuffTimer; + bool m_bEnraged; void Reset() { - Pyroblast_Timer = 7000; //These times are probably wrong - EarthQuake_Timer = 3000; - Buff_Timer = 2500; - Enrage_Timer = 0; - - m_creature->CastSpell(m_creature,SPELL_MAGMASPLASH,true); - } + m_uiPyroblastTimer = 7*IN_MILISECONDS; // These timers are probably wrong + m_uiEarthquakeTimer = 3*IN_MILISECONDS; + m_uiBuffTimer = 2.5*IN_MILISECONDS; + m_bEnraged = false; - void EnterCombat(Unit *who) - { + m_creature->CastSpell(m_creature, SPELL_MAGMASPLASH, true); } - void JustDied(Unit* Killer) + void JustDied(Unit* pKiller) { - if (pInstance) - pInstance->SetData(DATA_GOLEMAGG_DEATH, 0); + if (m_pInstance) + m_pInstance->SetData(DATA_GOLEMAGG_DEATH, 0); } - void UpdateAI(const uint32 diff) + void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) return; - //Pyroblast_Timer - if (Pyroblast_Timer < diff) + //Pyroblast + if (m_uiPyroblastTimer < uiDiff) { - if (Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0)) - DoCast(target,SPELL_PYROBLAST); + if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM, 0)) + DoCast(pTarget, SPELL_PYROBLAST); - Pyroblast_Timer = 7000; - }else Pyroblast_Timer -= diff; + m_uiPyroblastTimer = 7*IN_MILISECONDS; + } + else + m_uiPyroblastTimer -= uiDiff; - //Enrage_Timer - if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 11) + // Enrage + if (!m_bEnraged && m_creature->GetHealth()*100 < m_creature->GetMaxHealth()*10) { - if (Enrage_Timer < diff) - { - DoCast(m_creature,SPELL_ENRAGE); - Enrage_Timer = 62000; - }else Enrage_Timer -= diff; + DoCast(m_creature, SPELL_ENRAGE); + m_bEnraged = true; } - //EarthQuake_Timer - if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 11) + // Earthquake + if (m_bEnraged) { - if (EarthQuake_Timer < diff) + if (m_uiEarthquakeTimer < uiDiff) { - DoCast(m_creature->getVictim(),SPELL_EARTHQUAKE); - EarthQuake_Timer = 3000; - }else EarthQuake_Timer -= diff; + DoCast(m_creature->getVictim(), SPELL_EARTHQUAKE); + m_uiEarthquakeTimer = 3*IN_MILISECONDS; + } + else + m_uiEarthquakeTimer -= uiDiff; } - //Casting Buff for Coreragers. Spell is not working right. Players get the buff... - // if (Buff_Timer < diff) - // { - // DoCast(m_creature, SPELL_BUFF); - // Buff_Timer = 2500; - // }else Buff_Timer -= diff; + /* + // Golemagg's Trust + if (m_uiBuffTimer < uiDiff) + { + DoCast(m_creature, SPELL_GOLEMAGG_TRUST); + m_uiBuffTimer = 2.5*IN_MILISECONDS; + } + else + m_uiBuffTimer -= uiDiff; + */ DoMeleeAttackIfReady(); } @@ -118,60 +121,56 @@ struct TRINITY_DLL_DECL mob_core_ragerAI : public ScriptedAI { mob_core_ragerAI(Creature *c) : ScriptedAI(c) { - pInstance = c->GetInstanceData(); + m_pInstance = c->GetInstanceData(); } - uint32 Mangle_Timer; - uint32 Check_Timer; - ScriptedInstance *pInstance; + ScriptedInstance* m_pInstance; + + uint32 m_uiMangleTimer; void Reset() { - Mangle_Timer = 7000; //These times are probably wrong - Check_Timer = 1000; + m_uiMangleTimer = 7*IN_MILISECONDS; // These times are probably wrong } - void EnterCombat(Unit *who) + void DamageTaken(Unit* pDoneBy, uint32& uiDamage) { + if (m_creature->GetHealth()*100 < m_creature->GetMaxHealth()*50) + { + if (m_pInstance) + { + if (Creature* pGolemagg = m_pInstance->instance->GetCreature(m_pInstance->GetData64(DATA_GOLEMAGG))) + { + if (pGolemagg->isAlive()) + { + DoScriptText(EMOTE_LOWHP, m_creature); + m_creature->SetHealth(m_creature->GetMaxHealth()); + } + else + uiDamage = m_creature->GetHealth(); + } + } + } } - void UpdateAI(const uint32 diff) + void UpdateAI(const uint32 uiDiff) { if (!UpdateVictim()) return; - //Mangle_Timer - if (Mangle_Timer < diff) - { - DoCast(m_creature->getVictim(),SPELL_MANGLE); - Mangle_Timer = 10000; - }else Mangle_Timer -= diff; - - //Cast AEGIS - if (m_creature->GetHealth()*100 / m_creature->GetMaxHealth() < 50) + // Mangle + if (m_uiMangleTimer < uiDiff) { - DoCast(m_creature,SPELL_AEGIS); - DoScriptText(EMOTE_AEGIS, m_creature); + DoCast(m_creature->getVictim(), SPELL_MANGLE); + m_uiMangleTimer = 10*IN_MILISECONDS; } - - //Check_Timer - if (Check_Timer < diff) - { - if (pInstance) - { - Unit *pGolemagg = Unit::GetUnit((*m_creature), pInstance->GetData64(DATA_GOLEMAGG)); - if (!pGolemagg || !pGolemagg->isAlive()) - { - m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, true); - } - } - - Check_Timer = 1000; - }else Check_Timer -= diff; + else + m_uiMangleTimer -= uiDiff; DoMeleeAttackIfReady(); } }; + CreatureAI* GetAI_boss_golemagg(Creature* pCreature) { return new boss_golemaggAI (pCreature); @@ -184,7 +183,7 @@ CreatureAI* GetAI_mob_core_rager(Creature* pCreature) void AddSC_boss_golemagg() { - Script *newscript; + Script* newscript; newscript = new Script; newscript->Name="boss_golemagg"; diff --git a/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp b/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp index 0cb6150b1aa..2ea052f0a90 100644 --- a/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp +++ b/src/bindings/scripts/scripts/zone/molten_core/instance_molten_core.cpp @@ -183,7 +183,7 @@ struct TRINITY_DLL_DECL instance_molten_core : public ScriptedInstance case DATA_SULFURON: return Sulfuron; case DATA_GOLEMAGG: - return Sulfuron; + return Golemagg; case DATA_FLAMEWAKERPRIEST: return FlamewakerPriest; diff --git a/src/bindings/scripts/system/ScriptLoader.cpp b/src/bindings/scripts/system/ScriptLoader.cpp index 1cca715eebe..8d2e4466a41 100644 --- a/src/bindings/scripts/system/ScriptLoader.cpp +++ b/src/bindings/scripts/system/ScriptLoader.cpp @@ -26,6 +26,7 @@ extern void AddSC_npcs_special(); extern void AddSC_npc_taxi(); //eastern kingdoms +extern void AddSC_the_scarlet_enclave(); //extern void AddSC_alterac_mountains(); extern void AddSC_arathi_highlands(); extern void AddSC_blasted_lands(); @@ -226,9 +227,6 @@ extern void AddSC_boss_the_black_stalker(); //Deadmines extern void AddSC_instance_deadmines(); -//Scarlet Enclave -extern void AddSC_the_scarlet_enclave(); - //Gruul's Lair extern void AddSC_boss_gruul(); extern void AddSC_boss_high_king_maulgar(); @@ -539,6 +537,7 @@ void AddScripts() AddSC_npc_taxi(); //eastern kingdoms + AddSC_the_scarlet_enclave(); //AddSC_alterac_mountains(); AddSC_arathi_highlands(); AddSC_blasted_lands(); @@ -739,9 +738,6 @@ void AddScripts() //Deadmines AddSC_instance_deadmines(); - //Scarlet Enclave - AddSC_the_scarlet_enclave(); - //Gruul's Lair AddSC_boss_gruul(); AddSC_boss_high_king_maulgar(); -- cgit v1.2.3 From 71c69e3460c3a5f62aaa739955342ce57072c529 Mon Sep 17 00:00:00 2001 From: maximius Date: Sat, 15 Aug 2009 18:21:04 -0700 Subject: *Remove offhand after switching specs if the player can no longer equip that item (ie: Titan's Grip) --HG-- branch : trunk --- src/game/Player.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 8f29ec0a0a7..ac99affadcc 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21860,6 +21860,7 @@ void Player::ActivateSpec(uint8 spec) _LoadActions(result); } UnsummonPetTemporaryIfAny(); + AutoUnequipOffhandIfNeed(); SendActionButtons(1); SetPower(getPowerType(), 0); } -- cgit v1.2.3