diff options
| author | Kudlaty <none@none> | 2009-08-16 00:53:16 +0200 |
|---|---|---|
| committer | Kudlaty <none@none> | 2009-08-16 00:53:16 +0200 |
| commit | 6337c3adfb6b7ee6326f2bfa9f0b0992ce412ae1 (patch) | |
| tree | e68ca48297b000792b8c3b39a5865d0578bb8ab1 /src/bindings/scripts/base | |
| parent | e00175d23bc6905d7ca75ec09c6eca6e58409717 (diff) | |
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
Diffstat (limited to 'src/bindings/scripts/base')
| -rw-r--r-- | src/bindings/scripts/base/escortAI.cpp | 388 | ||||
| -rw-r--r-- | src/bindings/scripts/base/escortAI.h | 106 | ||||
| -rw-r--r-- | src/bindings/scripts/base/guard_ai.cpp | 196 | ||||
| -rw-r--r-- | src/bindings/scripts/base/guard_ai.h | 43 | ||||
| -rw-r--r-- | src/bindings/scripts/base/guards.cpp | 4110 | ||||
| -rw-r--r-- | src/bindings/scripts/base/simple_ai.cpp | 278 | ||||
| -rw-r--r-- | src/bindings/scripts/base/simple_ai.h | 71 |
7 files changed, 5192 insertions, 0 deletions
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 <https://scriptdev2.svn.sourceforge.net/> + * 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<PointMovement> 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<uint32, std::vector<PointMovement> >::iterator pPointsEntries = PointMovementMap.find(m_creature->GetEntry()); + + if (pPointsEntries != PointMovementMap.end()) + { + std::vector<PointMovement>::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 <https://scriptdev2.svn.sourceforge.net/> + * 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<uint32, std::vector<PointMovement> > 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<Escort_Waypoint> WaypointList; + std::list<Escort_Waypoint>::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 <https://scriptdev2.svn.sourceforge.net/>.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 <https://scriptdev2.svn.sourceforge.net/> + * 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 <https://scriptdev2.svn.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: 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 <https://scriptdev2.svn.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: 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 <https://scriptdev2.svn.sourceforge.net/> +* 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 + |
