aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Kalimdor
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/scripts/Kalimdor')
-rw-r--r--src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp60
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp374
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp177
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp16
-rw-r--r--src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp304
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp20
-rw-r--r--src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h6
-rw-r--r--src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp2
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp27
-rw-r--r--src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp102
-rw-r--r--src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp223
-rw-r--r--src/server/scripts/Kalimdor/zone_ashenvale.cpp29
-rw-r--r--src/server/scripts/Kalimdor/zone_azshara.cpp21
-rw-r--r--src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp58
-rw-r--r--src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp2
-rw-r--r--src/server/scripts/Kalimdor/zone_darkshore.cpp73
-rw-r--r--src/server/scripts/Kalimdor/zone_desolace.cpp55
-rw-r--r--src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp67
-rw-r--r--src/server/scripts/Kalimdor/zone_feralas.cpp48
-rw-r--r--src/server/scripts/Kalimdor/zone_orgrimmar.cpp136
-rw-r--r--src/server/scripts/Kalimdor/zone_silithus.cpp526
-rw-r--r--src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp20
-rw-r--r--src/server/scripts/Kalimdor/zone_tanaris.cpp66
-rw-r--r--src/server/scripts/Kalimdor/zone_the_barrens.cpp61
-rw-r--r--src/server/scripts/Kalimdor/zone_thousand_needles.cpp119
-rw-r--r--src/server/scripts/Kalimdor/zone_thunder_bluff.cpp58
-rw-r--r--src/server/scripts/Kalimdor/zone_ungoro_crater.cpp68
-rw-r--r--src/server/scripts/Kalimdor/zone_winterspring.cpp110
28 files changed, 1455 insertions, 1373 deletions
diff --git a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
index 333780d2b7d..0313a58f8d5 100644
--- a/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
+++ b/src/server/scripts/Kalimdor/BlackfathomDeeps/blackfathom_deeps.cpp
@@ -20,6 +20,7 @@
#include "ScriptedGossip.h"
#include "blackfathom_deeps.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
#include "Player.h"
enum Spells
@@ -35,35 +36,51 @@ const Position HomePosition = {-815.817f, -145.299f, -25.870f, 0};
class go_blackfathom_altar : public GameObjectScript
{
-public:
- go_blackfathom_altar() : GameObjectScript("go_blackfathom_altar") { }
+ public:
+ go_blackfathom_altar() : GameObjectScript("go_blackfathom_altar") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) override
- {
- if (!player->HasAura(SPELL_BLESSING_OF_BLACKFATHOM))
- player->AddAura(SPELL_BLESSING_OF_BLACKFATHOM, player);
- return true;
- }
+ struct go_blackfathom_altarAI : public GameObjectAI
+ {
+ go_blackfathom_altarAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player, bool /*reportUse*/) override
+ {
+ if (!player->HasAura(SPELL_BLESSING_OF_BLACKFATHOM))
+ player->AddAura(SPELL_BLESSING_OF_BLACKFATHOM, player);
+ return true;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetInstanceAI<go_blackfathom_altarAI>(go);
+ }
};
class go_blackfathom_fire : public GameObjectScript
{
-public:
- go_blackfathom_fire() : GameObjectScript("go_blackfathom_fire") { }
+ public:
+ go_blackfathom_fire() : GameObjectScript("go_blackfathom_fire") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
- {
- InstanceScript* instance = go->GetInstanceScript();
+ struct go_blackfathom_fireAI : public GameObjectAI
+ {
+ go_blackfathom_fireAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
- if (instance)
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
+ {
+ me->SetGoState(GO_STATE_ACTIVE);
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ instance->SetData(DATA_FIRE, instance->GetData(DATA_FIRE) + 1);
+ return true;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
{
- go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- instance->SetData(DATA_FIRE, instance->GetData(DATA_FIRE) + 1);
- return true;
+ return GetInstanceAI<go_blackfathom_fireAI>(go);
}
- return false;
- }
};
class npc_blackfathom_deeps_event : public CreatureScript
@@ -226,9 +243,10 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
DoCast(player, SPELL_TELEPORT_DARNASSUS);
+ return false;
}
};
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
index 231d2ccb818..83cb6d7d91c 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp
@@ -50,208 +50,208 @@ EndContentData */
class npc_jaina_proudmoore : public CreatureScript
{
-public:
- npc_jaina_proudmoore() : CreatureScript("npc_jaina_proudmoore") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
- switch (action)
+ public:
+ npc_jaina_proudmoore() : CreatureScript("npc_jaina_proudmoore") { }
+
+ struct npc_jaina_proudmooreAI : public hyjalAI
+ {
+ npc_jaina_proudmooreAI(Creature* creature) : hyjalAI(creature)
+ {
+ Reset();
+ EnterEvadeMode();
+
+ Spells[0].SpellId = SPELL_BLIZZARD;
+ Spells[0].Cooldown = urand(15000, 35000);
+ Spells[0].TargetType = TARGETTYPE_RANDOM;
+
+ Spells[1].SpellId = SPELL_PYROBLAST;
+ Spells[1].Cooldown = urand(5500, 9500);
+ Spells[1].TargetType = TARGETTYPE_RANDOM;
+
+ Spells[2].SpellId = SPELL_SUMMON_ELEMENTALS;
+ Spells[2].Cooldown = urand(15000, 45000);
+ Spells[2].TargetType = TARGETTYPE_SELF;
+ }
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ StartEvent(player);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ FirstBossDead = true;
+ WaveCount = 9;
+ StartEvent(player);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ Retreat();
+ break;
+ case GOSSIP_ACTION_INFO_DEF:
+ Debug = !Debug;
+ TC_LOG_DEBUG("scripts", "HyjalAI - Debug mode has been toggled");
+ break;
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (EventBegun)
+ return false;
+
+ uint32 RageEncounter = GetInstanceData(DATA_RAGEWINTERCHILLEVENT);
+ uint32 AnetheronEncounter = GetInstanceData(DATA_ANETHERONEVENT);
+ if (RageEncounter == NOT_STARTED)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_BEGIN_ALLY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ else if (RageEncounter == DONE && AnetheronEncounter == NOT_STARTED)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ANETHERON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ else if (RageEncounter == DONE && AnetheronEncounter == DONE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+
+ if (player->IsGameMaster())
+ AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+
+ SendGossipMenuFor(player, 907, me->GetGUID());
+ return true;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- case GOSSIP_ACTION_INFO_DEF + 1:
- ai->StartEvent(player);
- break;
- case GOSSIP_ACTION_INFO_DEF + 2:
- ai->FirstBossDead = true;
- ai->WaveCount = 9;
- ai->StartEvent(player);
- break;
- case GOSSIP_ACTION_INFO_DEF + 3:
- ai->Retreat();
- break;
- case GOSSIP_ACTION_INFO_DEF:
- ai->Debug = !ai->Debug;
- TC_LOG_DEBUG("scripts", "HyjalAI - Debug mode has been toggled");
- break;
+ return GetInstanceAI<npc_jaina_proudmooreAI>(creature);
}
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
- if (ai->EventBegun)
- return false;
-
- uint32 RageEncounter = ai->GetInstanceData(DATA_RAGEWINTERCHILLEVENT);
- uint32 AnetheronEncounter = ai->GetInstanceData(DATA_ANETHERONEVENT);
- if (RageEncounter == NOT_STARTED)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_BEGIN_ALLY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- else if (RageEncounter == DONE && AnetheronEncounter == NOT_STARTED)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ANETHERON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- else if (RageEncounter == DONE && AnetheronEncounter == DONE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
-
- if (player->IsGameMaster())
- AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
-
- SendGossipMenuFor(player, 907, creature->GetGUID());
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- if (!creature->GetInstanceScript())
- return NULL;
-
- hyjalAI* ai = new hyjalAI(creature);
-
- ai->Reset();
- ai->EnterEvadeMode();
-
- ai->Spells[0].SpellId = SPELL_BLIZZARD;
- ai->Spells[0].Cooldown = urand(15000, 35000);
- ai->Spells[0].TargetType = TARGETTYPE_RANDOM;
-
- ai->Spells[1].SpellId = SPELL_PYROBLAST;
- ai->Spells[1].Cooldown = urand(5500, 9500);
- ai->Spells[1].TargetType = TARGETTYPE_RANDOM;
-
- ai->Spells[2].SpellId = SPELL_SUMMON_ELEMENTALS;
- ai->Spells[2].Cooldown = urand(15000, 45000);
- ai->Spells[2].TargetType = TARGETTYPE_SELF;
-
- return ai;
- }
-
};
class npc_thrall : public CreatureScript
{
-public:
- npc_thrall() : CreatureScript("npc_thrall") { }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
- ai->DeSpawnVeins();//despawn the alliance veins
- switch (action)
+ public:
+ npc_thrall() : CreatureScript("npc_thrall") { }
+
+ struct npc_thrallAI : public hyjalAI
{
- case GOSSIP_ACTION_INFO_DEF + 1:
- ai->StartEvent(player);
- break;
- case GOSSIP_ACTION_INFO_DEF + 2:
- ai->FirstBossDead = true;
- ai->WaveCount = 9;
- ai->StartEvent(player);
- break;
- case GOSSIP_ACTION_INFO_DEF + 3:
- ai->Retreat();
- break;
- case GOSSIP_ACTION_INFO_DEF:
- ai->Debug = !ai->Debug;
- TC_LOG_DEBUG("scripts", "HyjalAI - Debug mode has been toggled");
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
- if (ai->EventBegun)
- return false;
-
- uint32 AnetheronEvent = ai->GetInstanceData(DATA_ANETHERONEVENT);
- // Only let them start the Horde phases if Anetheron is dead.
- if (AnetheronEvent == DONE && ai->GetInstanceData(DATA_ALLIANCE_RETREAT))
+ npc_thrallAI(Creature* creature) : hyjalAI(creature)
+ {
+ Reset();
+ EnterEvadeMode();
+
+ Spells[0].SpellId = SPELL_CHAIN_LIGHTNING;
+ Spells[0].Cooldown = urand(3000, 8000);
+ Spells[0].TargetType = TARGETTYPE_VICTIM;
+
+ Spells[1].SpellId = SPELL_SUMMON_DIRE_WOLF;
+ Spells[1].Cooldown = urand(6000, 41000);
+ Spells[1].TargetType = TARGETTYPE_RANDOM;
+ }
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ DeSpawnVeins();//despawn the alliance veins
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ StartEvent(player);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ FirstBossDead = true;
+ WaveCount = 9;
+ StartEvent(player);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ Retreat();
+ break;
+ case GOSSIP_ACTION_INFO_DEF:
+ Debug = !Debug;
+ TC_LOG_DEBUG("scripts", "HyjalAI - Debug mode has been toggled");
+ break;
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (EventBegun)
+ return false;
+
+ uint32 AnetheronEvent = GetInstanceData(DATA_ANETHERONEVENT);
+ // Only let them start the Horde phases if Anetheron is dead.
+ if (AnetheronEvent == DONE && GetInstanceData(DATA_ALLIANCE_RETREAT))
+ {
+ uint32 KazrogalEvent = GetInstanceData(DATA_KAZROGALEVENT);
+ uint32 AzgalorEvent = GetInstanceData(DATA_AZGALOREVENT);
+ if (KazrogalEvent == NOT_STARTED)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_BEGIN_HORDE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ else if (KazrogalEvent == DONE && AzgalorEvent == NOT_STARTED)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AZGALOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ else if (AzgalorEvent == DONE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ }
+
+ if (player->IsGameMaster())
+ AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+
+ SendGossipMenuFor(player, 907, me->GetGUID());
+ return true;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
{
- uint32 KazrogalEvent = ai->GetInstanceData(DATA_KAZROGALEVENT);
- uint32 AzgalorEvent = ai->GetInstanceData(DATA_AZGALOREVENT);
- if (KazrogalEvent == NOT_STARTED)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_BEGIN_HORDE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- else if (KazrogalEvent == DONE && AzgalorEvent == NOT_STARTED)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AZGALOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- else if (AzgalorEvent == DONE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_RETREAT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ return GetInstanceAI<npc_thrallAI>(creature);
}
-
- if (player->IsGameMaster())
- AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_ITEM_GM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
-
- SendGossipMenuFor(player, 907, creature->GetGUID());
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- if (!creature->GetInstanceScript())
- return NULL;
-
- hyjalAI* ai = new hyjalAI(creature);
-
- ai->Reset();
- ai->EnterEvadeMode();
-
- ai->Spells[0].SpellId = SPELL_CHAIN_LIGHTNING;
- ai->Spells[0].Cooldown = urand(3000, 8000);
- ai->Spells[0].TargetType = TARGETTYPE_VICTIM;
-
- ai->Spells[1].SpellId = SPELL_SUMMON_DIRE_WOLF;
- ai->Spells[1].Cooldown = urand(6000, 41000);
- ai->Spells[1].TargetType = TARGETTYPE_RANDOM;
-
- return ai;
- }
-
};
class npc_tyrande_whisperwind : public CreatureScript
{
-public:
- npc_tyrande_whisperwind() : CreatureScript("npc_tyrande_whisperwind") { }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- if (!creature->GetInstanceScript())
- return NULL;
-
- hyjalAI* ai = new hyjalAI(creature);
- ai->Reset();
- ai->EnterEvadeMode();
- return ai;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF)
- {
- ItemPosCountVec dest;
- uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_TEAR_OF_GODDESS, 1);
- if (msg == EQUIP_ERR_OK)
- if (Item* item = player->StoreNewItem(dest, ITEM_TEAR_OF_GODDESS, true))
- player->SendNewItem(item, 1, true, false, true);
+ public:
+ npc_tyrande_whisperwind() : CreatureScript("npc_tyrande_whisperwind") { }
- SendGossipMenuFor(player, 907, creature->GetGUID());
+ struct npc_tyrande_whisperwindAI : public hyjalAI
+ {
+ npc_tyrande_whisperwindAI(Creature* creature) : hyjalAI(creature)
+ {
+ Reset();
+ EnterEvadeMode();
+ }
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF)
+ {
+ ItemPosCountVec dest;
+ uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_TEAR_OF_GODDESS, 1);
+ if (msg == EQUIP_ERR_OK)
+ if (Item* item = player->StoreNewItem(dest, ITEM_TEAR_OF_GODDESS, true))
+ player->SendNewItem(item, 1, true, false, true);
+
+ SendGossipMenuFor(player, 907, me->GetGUID());
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ uint32 AzgalorEvent = GetInstanceData(DATA_AZGALOREVENT);
+
+ // Only let them get item if Azgalor is dead.
+ if (AzgalorEvent == DONE && !player->HasItemCount(ITEM_TEAR_OF_GODDESS))
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_TYRANDE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ SendGossipMenuFor(player, 907, me->GetGUID());
+ return true;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_tyrande_whisperwindAI>(creature);
}
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- hyjalAI* ai = ENSURE_AI(hyjalAI, creature->AI());
- uint32 AzgalorEvent = ai->GetInstanceData(DATA_AZGALOREVENT);
-
- // Only let them get item if Azgalor is dead.
- if (AzgalorEvent == DONE && !player->HasItemCount(ITEM_TEAR_OF_GODDESS))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_TYRANDE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- SendGossipMenuFor(player, 907, creature->GetGUID());
- return true;
- }
-
};
void AddSC_hyjal()
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
index 41bb7971635..da1080c5d27 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp
@@ -254,98 +254,6 @@ class npc_arthas : public CreatureScript
public:
npc_arthas() : CreatureScript("npc_arthas") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- npc_arthasAI* ai = CAST_AI(npc_arthas::npc_arthasAI, creature->AI());
-
- if (!ai)
- return false;
-
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF:
- ai->Start(true, true, player->GetGUID(), 0, false, false);
- ai->SetDespawnAtEnd(false);
- ai->bStepping = false;
- ai->step = 1;
- break;
- case GOSSIP_ACTION_INFO_DEF+1:
- ai->bStepping = true;
- ai->step = 24;
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- ai->SetHoldState(false);
- ai->bStepping = false;
- ai->step = 61;
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- ai->SetHoldState(false);
- break;
- case GOSSIP_ACTION_INFO_DEF+4:
- ai->bStepping = true;
- ai->step = 84;
- break;
- case GOSSIP_ACTION_INFO_DEF+5:
- ai->bStepping = true;
- ai->step = 85;
- break;
- }
- CloseGossipMenuFor(player);
- ai->SetDespawnAtFar(false);
- creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- npc_arthasAI* ai = CAST_AI(npc_arthas::npc_arthasAI, creature->AI());
-
- if (ai && ai->bStepping == false)
- {
- switch (ai->gossipStep)
- {
- case 0: //This one is a workaround since the very beggining of the script is wrong.
- {
- QuestStatus status = player->GetQuestStatus(13149);
- if (status != QUEST_STATUS_COMPLETE && status != QUEST_STATUS_REWARDED)
- return false;
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- SendGossipMenuFor(player, 907, creature->GetGUID());
- break;
- }
- case 1:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_1, creature->GetGUID());
- break;
- case 2:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_2, creature->GetGUID());
- break;
- case 3:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
- SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_3, creature->GetGUID());
- break;
- case 4:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
- SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_4, creature->GetGUID());
- break;
- case 5:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
- SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_5, creature->GetGUID());
- break;
- default:
- return false;
- }
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_arthasAI>(creature);
- }
-
struct npc_arthasAI : public npc_escortAI
{
npc_arthasAI(Creature* creature) : npc_escortAI(creature)
@@ -1231,8 +1139,93 @@ public:
DoMeleeAttackIfReady();
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF:
+ Start(true, true, player->GetGUID(), 0, false, false);
+ SetDespawnAtEnd(false);
+ bStepping = false;
+ step = 1;
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ bStepping = true;
+ step = 24;
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ SetHoldState(false);
+ bStepping = false;
+ step = 61;
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ SetHoldState(false);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 4:
+ bStepping = true;
+ step = 84;
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 5:
+ bStepping = true;
+ step = 85;
+ break;
+ }
+ CloseGossipMenuFor(player);
+ SetDespawnAtFar(false);
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (!bStepping)
+ {
+ switch (gossipStep)
+ {
+ case 0: //This one is a workaround since the very beggining of the script is wrong.
+ {
+ QuestStatus status = player->GetQuestStatus(13149);
+ if (status != QUEST_STATUS_COMPLETE && status != QUEST_STATUS_REWARDED)
+ return false;
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ SendGossipMenuFor(player, 907, me->GetGUID());
+ break;
+ }
+ case 1:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_1, me->GetGUID());
+ break;
+ case 2:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_2, me->GetGUID());
+ break;
+ case 3:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_3, me->GetGUID());
+ break;
+ case 4:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
+ SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_4, me->GetGUID());
+ break;
+ case 5:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_ARTHAS_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
+ SendGossipMenuFor(player, GOSSIP_MENU_ARTHAS_5, me->GetGUID());
+ break;
+ default:
+ return false;
+ }
+ }
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_arthasAI>(creature);
+ }
};
class npc_crate_helper : public CreatureScript
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
index f3b302497da..380971d6aa5 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/boss_leutenant_drake.cpp
@@ -27,6 +27,7 @@ EndScriptData */
#include "ScriptedCreature.h"
#include "old_hillsbrad.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
/*######
## go_barrel_old_hillsbrad
@@ -37,19 +38,26 @@ class go_barrel_old_hillsbrad : public GameObjectScript
public:
go_barrel_old_hillsbrad() : GameObjectScript("go_barrel_old_hillsbrad") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_barrel_old_hillsbradAI : public GameObjectAI
{
- if (InstanceScript* instance = go->GetInstanceScript())
+ go_barrel_old_hillsbradAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
if (instance->GetData(TYPE_BARREL_DIVERSION) == DONE)
return false;
instance->SetData(TYPE_BARREL_DIVERSION, IN_PROGRESS);
+ return false;
}
+ };
- return false;
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetInstanceAI<go_barrel_old_hillsbradAI>(go);
}
-
};
/*######
diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
index 0095a727c87..2a4d13d1634 100644
--- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
+++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp
@@ -56,41 +56,51 @@ class npc_erozion : public CreatureScript
public:
npc_erozion() : CreatureScript("npc_erozion") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
+ struct npc_erozionAI : public ScriptedAI
{
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF+1)
+ npc_erozionAI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
+
+ InstanceScript* instance;
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- ItemPosCountVec dest;
- uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_ENTRY_BOMBS, 1);
- if (msg == EQUIP_ERR_OK)
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
{
- player->StoreNewItem(dest, ITEM_ENTRY_BOMBS, true);
+ ItemPosCountVec dest;
+ uint8 msg = player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, ITEM_ENTRY_BOMBS, 1);
+ if (msg == EQUIP_ERR_OK)
+ {
+ player->StoreNewItem(dest, ITEM_ENTRY_BOMBS, true);
+ }
+ SendGossipMenuFor(player, 9515, me->GetGUID());
}
- SendGossipMenuFor(player, 9515, creature->GetGUID());
+ if (action == GOSSIP_ACTION_INFO_DEF + 2)
+ CloseGossipMenuFor(player);
+ return true;
}
- if (action == GOSSIP_ACTION_INFO_DEF+2)
+
+ bool GossipHello(Player* player) override
{
- CloseGossipMenuFor(player);
- }
- return true;
- }
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ if (instance->GetData(TYPE_BARREL_DIVERSION) != DONE && !player->HasItemCount(ITEM_ENTRY_BOMBS))
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_EROZION1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance->GetData(TYPE_BARREL_DIVERSION) != DONE && !player->HasItemCount(ITEM_ENTRY_BOMBS))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_EROZION1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ if (player->GetQuestStatus(QUEST_ENTRY_RETURN) == QUEST_STATUS_COMPLETE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_EROZION2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- if (player->GetQuestStatus(QUEST_ENTRY_RETURN) == QUEST_STATUS_COMPLETE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_EROZION2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
+ SendGossipMenuFor(player, 9778, me->GetGUID());
- SendGossipMenuFor(player, 9778, creature->GetGUID());
+ return true;
+ }
+ };
- return true;
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_erozionAI>(creature);
}
};
@@ -185,93 +195,6 @@ class npc_thrall_old_hillsbrad : public CreatureScript
public:
npc_thrall_old_hillsbrad() : CreatureScript("npc_thrall_old_hillsbrad") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_thrall_old_hillsbradAI>(creature);
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- InstanceScript* instance = creature->GetInstanceScript();
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF+1:
- CloseGossipMenuFor(player);
- if (instance)
- {
- instance->SetData(TYPE_THRALL_EVENT, IN_PROGRESS);
- instance->SetData(TYPE_THRALL_PART1, IN_PROGRESS);
- }
-
- creature->AI()->Talk(SAY_TH_START_EVENT_PART1);
-
- if (npc_escortAI* pEscortAI = CAST_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI()))
- pEscortAI->Start(true, true, player->GetGUID());
-
- ENSURE_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far
- ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtEnd(false);
- ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
- break;
-
- case GOSSIP_ACTION_INFO_DEF+2:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_SKARLOC2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+20);
- SendGossipMenuFor(player, GOSSIP_ID_SKARLOC2, creature->GetGUID());
- break;
-
- case GOSSIP_ACTION_INFO_DEF+20:
- SendGossipMenuFor(player, GOSSIP_ID_SKARLOC3, creature->GetGUID());
- creature->SummonCreature(SKARLOC_MOUNT, 2038.81f, 270.26f, 63.20f, 5.41f, TEMPSUMMON_TIMED_DESPAWN, 12000);
- if (instance)
- instance->SetData(TYPE_THRALL_PART2, IN_PROGRESS);
-
- creature->AI()->Talk(SAY_TH_START_EVENT_PART2);
-
- ENSURE_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI())->StartWP();
- break;
-
- case GOSSIP_ACTION_INFO_DEF+3:
- CloseGossipMenuFor(player);
- if (instance)
- instance->SetData(TYPE_THRALL_PART3, IN_PROGRESS);
- ENSURE_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, creature->AI())->StartWP();
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- {
- player->PrepareQuestMenu(creature->GetGUID());
- player->SendPreparedQuest(creature->GetGUID());
- }
-
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance)
- {
- if (instance->GetData(TYPE_BARREL_DIVERSION) == DONE && !instance->GetData(TYPE_THRALL_EVENT))
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_WALKING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, GOSSIP_ID_START, creature->GetGUID());
- }
-
- if (instance->GetData(TYPE_THRALL_PART1) == DONE && !instance->GetData(TYPE_THRALL_PART2))
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_SKARLOC1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- SendGossipMenuFor(player, GOSSIP_ID_SKARLOC1, creature->GetGUID());
- }
-
- if (instance->GetData(TYPE_THRALL_PART2) == DONE && !instance->GetData(TYPE_THRALL_PART3))
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_TARREN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
- SendGossipMenuFor(player, GOSSIP_ID_TARREN, creature->GetGUID());
- }
- }
- return true;
- }
-
struct npc_thrall_old_hillsbradAI : public npc_escortAI
{
npc_thrall_old_hillsbradAI(Creature* creature) : npc_escortAI(creature)
@@ -542,8 +465,84 @@ public:
LowHp = true;
}
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ CloseGossipMenuFor(player);
+ instance->SetData(TYPE_THRALL_EVENT, IN_PROGRESS);
+ instance->SetData(TYPE_THRALL_PART1, IN_PROGRESS);
+
+ Talk(SAY_TH_START_EVENT_PART1);
+
+ Start(true, true, player->GetGUID());
+
+ SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far
+ SetDespawnAtEnd(false);
+ SetDespawnAtFar(false);
+ break;
+
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_SKARLOC2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 20);
+ SendGossipMenuFor(player, GOSSIP_ID_SKARLOC2, me->GetGUID());
+ break;
+
+ case GOSSIP_ACTION_INFO_DEF + 20:
+ SendGossipMenuFor(player, GOSSIP_ID_SKARLOC3, me->GetGUID());
+ me->SummonCreature(SKARLOC_MOUNT, 2038.81f, 270.26f, 63.20f, 5.41f, TEMPSUMMON_TIMED_DESPAWN, 12000);
+ instance->SetData(TYPE_THRALL_PART2, IN_PROGRESS);
+
+ Talk(SAY_TH_START_EVENT_PART2);
+
+ StartWP();
+ break;
+
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ CloseGossipMenuFor(player);
+ instance->SetData(TYPE_THRALL_PART3, IN_PROGRESS);
+ StartWP();
+ break;
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ {
+ player->PrepareQuestMenu(me->GetGUID());
+ player->SendPreparedQuest(me->GetGUID());
+ }
+
+ if (instance->GetData(TYPE_BARREL_DIVERSION) == DONE && !instance->GetData(TYPE_THRALL_EVENT))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_WALKING, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, GOSSIP_ID_START, me->GetGUID());
+ }
+
+ if (instance->GetData(TYPE_THRALL_PART1) == DONE && !instance->GetData(TYPE_THRALL_PART2))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_SKARLOC1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ SendGossipMenuFor(player, GOSSIP_ID_SKARLOC1, me->GetGUID());
+ }
+
+ if (instance->GetData(TYPE_THRALL_PART2) == DONE && !instance->GetData(TYPE_THRALL_PART3))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_TARREN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ SendGossipMenuFor(player, GOSSIP_ID_TARREN, me->GetGUID());
+ }
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_thrall_old_hillsbradAI>(creature);
+ }
};
/*######
@@ -563,48 +562,6 @@ class npc_taretha : public CreatureScript
public:
npc_taretha() : CreatureScript("npc_taretha") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_tarethaAI>(creature);
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- InstanceScript* instance = creature->GetInstanceScript();
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_EPOCH2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- SendGossipMenuFor(player, GOSSIP_ID_EPOCH2, creature->GetGUID());
- }
- if (action == GOSSIP_ACTION_INFO_DEF+2)
- {
- CloseGossipMenuFor(player);
-
- if (instance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS)
- {
- instance->SetData(TYPE_THRALL_PART4, IN_PROGRESS);
- if (instance->GetGuidData(DATA_EPOCH).IsEmpty())
- creature->SummonCreature(ENTRY_EPOCH, 2639.13f, 698.55f, 65.43f, 4.59f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
-
- if (Creature* thrall = (ObjectAccessor::GetCreature(*creature, instance->GetGuidData(DATA_THRALL))))
- ENSURE_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, thrall->AI())->StartWP();
- }
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance->GetData(TYPE_THRALL_PART3) == DONE && instance->GetData(TYPE_THRALL_PART4) == NOT_STARTED)
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_EPOCH1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, GOSSIP_ID_EPOCH1, creature->GetGUID());
- }
- return true;
- }
-
struct npc_tarethaAI : public npc_escortAI
{
npc_tarethaAI(Creature* creature) : npc_escortAI(creature)
@@ -634,8 +591,49 @@ public:
{
npc_escortAI::UpdateAI(diff);
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_EPOCH2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ SendGossipMenuFor(player, GOSSIP_ID_EPOCH2, me->GetGUID());
+ }
+ if (action == GOSSIP_ACTION_INFO_DEF + 2)
+ {
+ CloseGossipMenuFor(player);
+
+ if (instance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS)
+ {
+ instance->SetData(TYPE_THRALL_PART4, IN_PROGRESS);
+ if (instance->GetGuidData(DATA_EPOCH).IsEmpty())
+ me->SummonCreature(ENTRY_EPOCH, 2639.13f, 698.55f, 65.43f, 4.59f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
+
+ if (Creature* thrall = (ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_THRALL))))
+ ENSURE_AI(npc_thrall_old_hillsbrad::npc_thrall_old_hillsbradAI, thrall->AI())->StartWP();
+ }
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (instance->GetData(TYPE_THRALL_PART3) == DONE && instance->GetData(TYPE_THRALL_PART4) == NOT_STARTED)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_EPOCH1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, GOSSIP_ID_EPOCH1, me->GetGUID());
+ }
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_tarethaAI>(creature);
+ }
};
/*######
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
index bf1b0a45984..19a289485fc 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp
@@ -29,6 +29,7 @@ EndContentData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "ScriptedGossip.h"
#include "razorfen_downs.h"
#include "Player.h"
@@ -129,7 +130,7 @@ public:
me->DespawnOrUnsummon(5000);
}
- void sQuestAccept(Player* /*player*/, Quest const* quest) override
+ void QuestAccept(Player* /*player*/, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_EXTINGUISHING_THE_IDOL)
{
@@ -376,19 +377,24 @@ class go_gong : public GameObjectScript
public:
go_gong() : GameObjectScript("go_gong") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_gongAI : public GameObjectAI
{
- InstanceScript* instance = go->GetInstanceScript();
+ go_gongAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- if (instance)
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
- go->SendCustomAnim(0);
+ me->SendCustomAnim(0);
instance->SetData(DATA_WAVE, IN_PROGRESS);
return true;
}
- return false;
- }
+ };
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetRazorfenDownsAI<go_gongAI>(go);
+ }
};
void AddSC_razorfen_downs()
diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h
index 2501b399d11..fa78d8518c1 100644
--- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h
+++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.h
@@ -61,10 +61,10 @@ enum RFDGameObjectIds
GO_BELNISTRASZS_BRAZIER = 152097
};
-template<class AI>
-AI* GetRazorfenDownsAI(Creature* creature)
+template<class AI, class T>
+AI* GetRazorfenDownsAI(T* obj)
{
- return GetInstanceAI<AI>(creature, RFDScriptName);
+ return GetInstanceAI<AI>(obj, RFDScriptName);
}
#endif
diff --git a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
index 07f9afcd5cd..88a3b2b51fb 100644
--- a/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
+++ b/src/server/scripts/Kalimdor/RazorfenKraul/razorfen_kraul.cpp
@@ -51,7 +51,7 @@ public:
{
npc_willixAI(Creature* creature) : npc_escortAI(creature) { }
- void sQuestAccept(Player* player, Quest const* quest) override
+ void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_WILLIX_THE_IMPORTER)
{
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 14ccca00ca1..66a6c3b42e6 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "ruins_of_ahnqiraj.h"
#include "Player.h"
#include "SpellInfo.h"
@@ -278,18 +279,26 @@ class go_ossirian_crystal : public GameObjectScript
public:
go_ossirian_crystal() : GameObjectScript("go_ossirian_crystal") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) override
+ struct go_ossirian_crystalAI : public GameObjectAI
{
- InstanceScript* Instance = player->GetInstanceScript();
- if (!Instance)
- return false;
+ go_ossirian_crystalAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- Creature* Ossirian = player->FindNearestCreature(NPC_OSSIRIAN, 30.0f);
- if (!Ossirian || Instance->GetBossState(DATA_OSSIRIAN) != IN_PROGRESS)
- return false;
+ InstanceScript* instance;
- Ossirian->AI()->DoAction(ACTION_TRIGGER_WEAKNESS);
- return true;
+ bool GossipHello(Player* player, bool /*reportUse*/) override
+ {
+ Creature* ossirian = player->FindNearestCreature(NPC_OSSIRIAN, 30.0f);
+ if (!ossirian || instance->GetBossState(DATA_OSSIRIAN) != IN_PROGRESS)
+ return false;
+
+ ossirian->AI()->DoAction(ACTION_TRIGGER_WEAKNESS);
+ return true;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetInstanceAI<go_ossirian_crystalAI>(go);
}
};
diff --git a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
index bd77e4c9546..fcbdfd547a6 100644
--- a/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
+++ b/src/server/scripts/Kalimdor/WailingCaverns/wailing_caverns.cpp
@@ -79,60 +79,6 @@ class npc_disciple_of_naralex : public CreatureScript
public:
npc_disciple_of_naralex() : CreatureScript("npc_disciple_of_naralex") { }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_disciple_of_naralexAI>(creature);
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- InstanceScript* instance = creature->GetInstanceScript();
- if (action == GOSSIP_ACTION_INFO_DEF + 1)
- {
- CloseGossipMenuFor(player);
- if (instance)
- instance->SetData(TYPE_NARALEX_EVENT, IN_PROGRESS);
-
- creature->AI()->Talk(SAY_MAKE_PREPARATIONS);
-
- creature->SetFaction(250);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
-
- ENSURE_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
- ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtFar(false);
- ENSURE_AI(npc_escortAI, (creature->AI()))->SetDespawnAtEnd(false);
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
-
- if (instance)
- {
- creature->CastSpell(player, SPELL_MARK_OF_THE_WILD_RANK_2, true);
- if ((instance->GetData(TYPE_LORD_COBRAHN) == DONE) && (instance->GetData(TYPE_LORD_PYTHAS) == DONE) &&
- (instance->GetData(TYPE_LADY_ANACONDRA) == DONE) && (instance->GetData(TYPE_LORD_SERPENTIS) == DONE))
- {
- AddGossipItemFor(player, GOSSIP_OPTION_LET_EVENT_BEGIN, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- SendGossipMenuFor(player, NPC_TEXT_FANGLORDS_ARE_DEAD, creature->GetGUID());
-
- if (!instance->GetData(TYPE_NARALEX_YELLED))
- {
- creature->AI()->Talk(SAY_AT_LAST);
- instance->SetData(TYPE_NARALEX_YELLED, 1);
- }
- }
- else
- {
- SendGossipMenuFor(player, NPC_TEXT_NARALEX_SLEEPS_AGAIN, creature->GetGUID());
- }
- }
- return true;
- }
-
struct npc_disciple_of_naralexAI : public npc_escortAI
{
npc_disciple_of_naralexAI(Creature* creature) : npc_escortAI(creature)
@@ -369,8 +315,56 @@ public:
}
} else eventTimer -= diff;
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
+ {
+ CloseGossipMenuFor(player);
+ if (instance)
+ instance->SetData(TYPE_NARALEX_EVENT, IN_PROGRESS);
+
+ Talk(SAY_MAKE_PREPARATIONS);
+
+ me->SetFaction(250);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+
+ Start(false, false, player->GetGUID());
+ SetDespawnAtFar(false);
+ SetDespawnAtEnd(false);
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ DoCast(player, SPELL_MARK_OF_THE_WILD_RANK_2, true);
+ if ((instance->GetData(TYPE_LORD_COBRAHN) == DONE) && (instance->GetData(TYPE_LORD_PYTHAS) == DONE) &&
+ (instance->GetData(TYPE_LADY_ANACONDRA) == DONE) && (instance->GetData(TYPE_LORD_SERPENTIS) == DONE))
+ {
+ AddGossipItemFor(player, GOSSIP_OPTION_LET_EVENT_BEGIN, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, NPC_TEXT_FANGLORDS_ARE_DEAD, me->GetGUID());
+
+ if (!instance->GetData(TYPE_NARALEX_YELLED))
+ {
+ Talk(SAY_AT_LAST);
+ instance->SetData(TYPE_NARALEX_YELLED, 1);
+ }
+ }
+ else
+ {
+ SendGossipMenuFor(player, NPC_TEXT_NARALEX_SLEEPS_AGAIN, me->GetGUID());
+ }
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_disciple_of_naralexAI>(creature);
+ }
};
void AddSC_wailing_caverns()
diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
index 51bc5b7a945..9e014f7f6d9 100644
--- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
+++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp
@@ -31,6 +31,7 @@ EndContentData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
+#include "GameObjectAI.h"
#include "zulfarrak.h"
#include "Player.h"
@@ -64,42 +65,6 @@ class npc_sergeant_bly : public CreatureScript
public:
npc_sergeant_bly() : CreatureScript("npc_sergeant_bly") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- CloseGossipMenuFor(player);
- ENSURE_AI(npc_sergeant_bly::npc_sergeant_blyAI, creature->AI())->PlayerGUID = player->GetGUID();
- creature->AI()->DoAction(0);
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (InstanceScript* instance = creature->GetInstanceScript())
- {
- if (instance->GetData(EVENT_PYRAMID) == PYRAMID_KILLED_ALL_TROLLS)
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_BLY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, 1517, creature->GetGUID());
- }
- else
- if (instance->GetData(EVENT_PYRAMID) == PYRAMID_NOT_STARTED)
- SendGossipMenuFor(player, 1515, creature->GetGUID());
- else
- SendGossipMenuFor(player, 1516, creature->GetGUID());
- return true;
- }
- return false;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_sergeant_blyAI>(creature);
- }
-
struct npc_sergeant_blyAI : public ScriptedAI
{
npc_sergeant_blyAI(Creature* creature) : ScriptedAI(creature)
@@ -198,8 +163,40 @@ public:
if (crew->IsAlive())
crew->SetFaction(FACTION_HOSTILE);
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
+ {
+ CloseGossipMenuFor(player);
+ PlayerGUID = player->GetGUID();
+ DoAction(0);
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (instance->GetData(EVENT_PYRAMID) == PYRAMID_KILLED_ALL_TROLLS)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_BLY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, 1517, me->GetGUID());
+ }
+ else
+ if (instance->GetData(EVENT_PYRAMID) == PYRAMID_NOT_STARTED)
+ SendGossipMenuFor(player, 1515, me->GetGUID());
+ else
+ SendGossipMenuFor(player, 1516, me->GetGUID());
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_sergeant_blyAI>(creature);
+ }
};
/*######
@@ -211,32 +208,41 @@ class go_troll_cage : public GameObjectScript
public:
go_troll_cage() : GameObjectScript("go_troll_cage") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_troll_cageAI : public GameObjectAI
{
- if (InstanceScript* instance = go->GetInstanceScript())
+ go_troll_cageAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
instance->SetData(EVENT_PYRAMID, PYRAMID_CAGES_OPEN);
//set bly & co to aggressive & start moving to top of stairs
- initBlyCrewMember(instance, ENTRY_BLY, 1884.99f, 1263, 41.52f);
- initBlyCrewMember(instance, ENTRY_RAVEN, 1882.5f, 1263, 41.52f);
- initBlyCrewMember(instance, ENTRY_ORO, 1886.47f, 1270.68f, 41.68f);
- initBlyCrewMember(instance, ENTRY_WEEGLI, 1890, 1263, 41.52f);
- initBlyCrewMember(instance, ENTRY_MURTA, 1891.19f, 1272.03f, 41.60f);
+ initBlyCrewMember(ENTRY_BLY, 1884.99f, 1263, 41.52f);
+ initBlyCrewMember(ENTRY_RAVEN, 1882.5f, 1263, 41.52f);
+ initBlyCrewMember(ENTRY_ORO, 1886.47f, 1270.68f, 41.68f);
+ initBlyCrewMember(ENTRY_WEEGLI, 1890, 1263, 41.52f);
+ initBlyCrewMember(ENTRY_MURTA, 1891.19f, 1272.03f, 41.60f);
+ return false;
}
- return false;
- }
-private:
- void initBlyCrewMember(InstanceScript* instance, uint32 entry, float x, float y, float z)
- {
- if (Creature* crew = instance->instance->GetCreature(instance->GetGuidData(entry)))
+ private:
+ void initBlyCrewMember(uint32 entry, float x, float y, float z)
{
- crew->SetReactState(REACT_AGGRESSIVE);
- crew->SetWalk(true);
- crew->SetHomePosition(x, y, z, 0);
- crew->GetMotionMaster()->MovePoint(1, x, y, z);
- crew->SetFaction(FACTION_FREED);
+ if (Creature* crew = instance->instance->GetCreature(instance->GetGuidData(entry)))
+ {
+ crew->SetReactState(REACT_AGGRESSIVE);
+ crew->SetWalk(true);
+ crew->SetHomePosition(x, y, z, 0);
+ crew->GetMotionMaster()->MovePoint(1, x, y, z);
+ crew->SetFaction(FACTION_FREED);
+ }
}
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetInstanceAI<go_troll_cageAI>(go);
}
};
@@ -265,44 +271,6 @@ class npc_weegli_blastfuse : public CreatureScript
public:
npc_weegli_blastfuse() : CreatureScript("npc_weegli_blastfuse") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- CloseGossipMenuFor(player);
- //here we make him run to door, set the charge and run away off to nowhere
- creature->AI()->DoAction(0);
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (InstanceScript* instance = creature->GetInstanceScript())
- {
- switch (instance->GetData(EVENT_PYRAMID))
- {
- case PYRAMID_KILLED_ALL_TROLLS:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_WEEGLI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, 1514, creature->GetGUID()); //if event can proceed to end
- break;
- case PYRAMID_NOT_STARTED:
- SendGossipMenuFor(player, 1511, creature->GetGUID()); //if event not started
- break;
- default:
- SendGossipMenuFor(player, 1513, creature->GetGUID()); //if event are in progress
- }
- return true;
- }
- return false;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_weegli_blastfuseAI>(creature);
- }
-
struct npc_weegli_blastfuseAI : public ScriptedAI
{
npc_weegli_blastfuseAI(Creature* creature) : ScriptedAI(creature)
@@ -375,11 +343,6 @@ public:
};
}
- void DoAction(int32 /*param*/) override
- {
- DestroyDoor();
- }
-
void DestroyDoor()
{
if (me->IsAlive())
@@ -391,8 +354,42 @@ public:
destroyingDoor=true;
}
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
+ {
+ CloseGossipMenuFor(player);
+ //here we make him run to door, set the charge and run away off to nowhere
+ DestroyDoor();
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ switch (instance->GetData(EVENT_PYRAMID))
+ {
+ case PYRAMID_KILLED_ALL_TROLLS:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_WEEGLI, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, 1514, me->GetGUID()); //if event can proceed to end
+ break;
+ case PYRAMID_NOT_STARTED:
+ SendGossipMenuFor(player, 1511, me->GetGUID()); //if event not started
+ break;
+ default:
+ SendGossipMenuFor(player, 1513, me->GetGUID()); //if event are in progress
+ }
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_weegli_blastfuseAI>(creature);
+ }
};
/*######
@@ -412,20 +409,30 @@ class go_shallow_grave : public GameObjectScript
public:
go_shallow_grave() : GameObjectScript("go_shallow_grave") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_shallow_graveAI : public GameObjectAI
{
- // randomly summon a zombie or dead hero the first time a grave is used
- if (go->GetUseCount() == 0)
+ go_shallow_graveAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
- uint32 randomchance = urand(0, 100);
- if (randomchance < CHANCE_ZOMBIE)
- go->SummonCreature(NPC_ZOMBIE, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
- else
- if ((randomchance - CHANCE_ZOMBIE) < CHANCE_DEAD_HERO)
- go->SummonCreature(NPC_DEAD_HERO, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ // randomly summon a zombie or dead hero the first time a grave is used
+ if (me->GetUseCount() == 0)
+ {
+ uint32 randomchance = urand(0, 100);
+ if (randomchance < CHANCE_ZOMBIE)
+ me->SummonCreature(NPC_ZOMBIE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ else
+ if ((randomchance - CHANCE_ZOMBIE) < CHANCE_DEAD_HERO)
+ me->SummonCreature(NPC_DEAD_HERO, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000);
+ }
+ me->AddUse();
+ return false;
}
- go->AddUse();
- return false;
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_shallow_graveAI(go);
}
};
diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
index ecd1f2e4d60..2b8f0550dd0 100644
--- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp
+++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp
@@ -30,6 +30,7 @@ EndContentData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
#include "Player.h"
#include "SpellScript.h"
@@ -79,7 +80,7 @@ public:
summoned->AI()->AttackStart(me);
}
- void sQuestAccept(Player* player, Quest const* quest) override
+ void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_FREEDOM_TO_RUUL)
{
@@ -221,7 +222,7 @@ public:
summoned->AI()->AttackStart(me);
}
- void sQuestAccept(Player* player, Quest const* quest) override
+ void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_VORSHA)
{
@@ -328,20 +329,30 @@ class go_naga_brazier : public GameObjectScript
public:
go_naga_brazier() : GameObjectScript("go_naga_brazier") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_naga_brazierAI : public GameObjectAI
{
- if (Creature* creature = GetClosestCreatureWithEntry(go, NPC_MUGLASH, INTERACTION_DISTANCE*2))
+ go_naga_brazierAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
- if (npc_muglash::npc_muglashAI* pEscortAI = CAST_AI(npc_muglash::npc_muglashAI, creature->AI()))
+ if (Creature* creature = GetClosestCreatureWithEntry(me, NPC_MUGLASH, INTERACTION_DISTANCE * 2))
{
- creature->AI()->Talk(SAY_MUG_BRAZIER_WAIT);
+ if (npc_muglash::npc_muglashAI* pEscortAI = CAST_AI(npc_muglash::npc_muglashAI, creature->AI()))
+ {
+ creature->AI()->Talk(SAY_MUG_BRAZIER_WAIT);
- pEscortAI->_isBrazierExtinguished = true;
- return false;
+ pEscortAI->_isBrazierExtinguished = true;
+ return false;
+ }
}
+
+ return true;
}
+ };
- return true;
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_naga_brazierAI(go);
}
};
diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp
index 32f2d04efac..86ae2468a35 100644
--- a/src/server/scripts/Kalimdor/zone_azshara.cpp
+++ b/src/server/scripts/Kalimdor/zone_azshara.cpp
@@ -259,12 +259,13 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
CloseGossipMenuFor(player);
me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true);
MustDieTimer = 3000;
MustDie = true;
+ return false;
}
void MovementInform(uint32 type, uint32 id) override
@@ -366,6 +367,15 @@ public:
} else CheckTimer -= diff;
}
+ bool GossipHello(Player* player) override
+ {
+ if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE)
+ return true;
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_GET_MOONSTONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, 10811, me->GetGUID());
+ return true;
+ }
+
private:
ObjectGuid PlayerGUID;
uint32 SpellEscapeTimer;
@@ -380,15 +390,6 @@ public:
bool Reached;
};
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE)
- return true;
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_GET_MOONSTONE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- SendGossipMenuFor(player, 10811, creature->GetGUID());
- return true;
- }
-
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_rizzle_sprysprocketAI(creature);
diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
index 811db4a8ac1..0a3f57ace8e 100644
--- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp
@@ -37,6 +37,7 @@ EndContentData */
#include "ScriptedCreature.h"
#include "ScriptedEscortAI.h"
#include "ScriptedGossip.h"
+#include "GameObjectAI.h"
#include "Cell.h"
#include "CellImpl.h"
#include "GridNotifiersImpl.h"
@@ -230,11 +231,12 @@ public:
Talk(ATTACK_YELL, who);
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
CloseGossipMenuFor(player);
me->SetFaction(FACTION_HOSTILE);
me->Attack(player, true);
+ return false;
}
void UpdateAI(uint32 diff) override
@@ -361,7 +363,7 @@ public:
Talk(SAY_AGGRO, who);
}
- void sQuestAccept(Player* player, Quest const* quest) override
+ void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_A_CRY_FOR_HELP)
{
@@ -633,19 +635,29 @@ class go_ravager_cage : public GameObjectScript
public:
go_ravager_cage() : GameObjectScript("go_ravager_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) override
+ struct go_ravager_cageAI : public GameObjectAI
{
- go->UseDoorOrButton();
- if (player->GetQuestStatus(QUEST_STRENGTH_ONE) == QUEST_STATUS_INCOMPLETE)
+ go_ravager_cageAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player, bool /*reportUse*/) override
{
- if (Creature* ravager = go->FindNearestCreature(NPC_DEATH_RAVAGER, 5.0f, true))
+ me->UseDoorOrButton();
+ if (player->GetQuestStatus(QUEST_STRENGTH_ONE) == QUEST_STATUS_INCOMPLETE)
{
- ravager->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- ravager->SetReactState(REACT_AGGRESSIVE);
- ravager->AI()->AttackStart(player);
+ if (Creature* ravager = me->FindNearestCreature(NPC_DEATH_RAVAGER, 5.0f, true))
+ {
+ ravager->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ ravager->SetReactState(REACT_AGGRESSIVE);
+ ravager->AI()->AttackStart(player);
+ }
}
+ return true;
}
- return true;
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_ravager_cageAI(go);
}
};
@@ -803,19 +815,29 @@ class go_bristlelimb_cage : public GameObjectScript
public:
go_bristlelimb_cage() : GameObjectScript("go_bristlelimb_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) override
+ struct go_bristlelimb_cageAI : public GameObjectAI
{
- go->SetGoState(GO_STATE_READY);
- if (player->GetQuestStatus(QUEST_THE_PROPHECY_OF_AKIDA) == QUEST_STATUS_INCOMPLETE)
+ go_bristlelimb_cageAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player, bool /*reportUse*/) override
{
- if (Creature* capitive = go->FindNearestCreature(NPC_STILLPINE_CAPITIVE, 5.0f, true))
+ me->SetGoState(GO_STATE_READY);
+ if (player->GetQuestStatus(QUEST_THE_PROPHECY_OF_AKIDA) == QUEST_STATUS_INCOMPLETE)
{
- go->ResetDoorOrButton();
- ENSURE_AI(npc_stillpine_capitive::npc_stillpine_capitiveAI, capitive->AI())->StartMoving(player);
- return false;
+ if (Creature* capitive = me->FindNearestCreature(NPC_STILLPINE_CAPITIVE, 5.0f, true))
+ {
+ me->ResetDoorOrButton();
+ ENSURE_AI(npc_stillpine_capitive::npc_stillpine_capitiveAI, capitive->AI())->StartMoving(player);
+ return false;
+ }
}
+ return true;
}
- return true;
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_bristlelimb_cageAI(go);
}
};
diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
index 9ebf92874d6..ed9a3d11a59 100644
--- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
+++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp
@@ -361,7 +361,7 @@ public:
Initialize();
}
- void sQuestAccept(Player* player, Quest const* quest) override
+ void QuestAccept(Player* player, Quest const* quest) override
{
if (quest->GetQuestId() == QUEST_ENDING_THEIR_WORLD)
{
diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp
index c5506593799..95790c11a15 100644
--- a/src/server/scripts/Kalimdor/zone_darkshore.cpp
+++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp
@@ -155,22 +155,17 @@ public:
DoMeleeAttackIfReady();
}
- };
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_SLEEPER_AWAKENED)
+ void QuestAccept(Player* player, Quest const* quest) override
{
- if (npc_kerlonianAI* pKerlonianAI = CAST_AI(npc_kerlonian::npc_kerlonianAI, creature->AI()))
+ if (quest->GetQuestId() == QUEST_SLEEPER_AWAKENED)
{
- creature->SetStandState(UNIT_STAND_STATE_STAND);
- creature->AI()->Talk(SAY_KER_START, player);
- pKerlonianAI->StartFollow(player, FACTION_KER_ESCORTEE, quest);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ Talk(SAY_KER_START, player);
+ StartFollow(player, FACTION_KER_ESCORTEE, quest);
}
}
-
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
@@ -288,20 +283,16 @@ public:
}
}
}
- };
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2)
+ void QuestAccept(Player* player, Quest const* quest) override
{
- if (npc_escortAI* pEscortAI = CAST_AI(npc_prospector_remtravel::npc_prospector_remtravelAI, creature->AI()))
- pEscortAI->Start(false, false, player->GetGUID());
-
- creature->SetFaction(FACTION_ESCORTEE);
+ if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2)
+ {
+ Start(false, false, player->GetGUID());
+ me->SetFaction(FACTION_ESCORTEE);
+ }
}
-
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
@@ -359,33 +350,31 @@ public:
SetFollowComplete(true);
}
- };
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF+1)
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- CloseGossipMenuFor(player);
-
- if (npc_threshwackonatorAI* pThreshAI = CAST_AI(npc_threshwackonator::npc_threshwackonatorAI, creature->AI()))
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
{
- creature->AI()->Talk(EMOTE_START);
- pThreshAI->StartFollow(player);
+ CloseGossipMenuFor(player);
+
+ Talk(EMOTE_START);
+ StartFollow(player);
}
- }
- return true;
- }
+ return true;
+ }
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (player->GetQuestStatus(QUEST_GYROMAST_REV) == QUEST_STATUS_INCOMPLETE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_INSERT_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ bool GossipHello(Player* player) override
+ {
+ if (player->GetQuestStatus(QUEST_GYROMAST_REV) == QUEST_STATUS_INCOMPLETE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_INSERT_KEY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp
index c61239f5145..3f31487885a 100644
--- a/src/server/scripts/Kalimdor/zone_desolace.cpp
+++ b/src/server/scripts/Kalimdor/zone_desolace.cpp
@@ -34,6 +34,7 @@ EndContentData */
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
#include "Player.h"
#include "SpellInfo.h"
@@ -104,19 +105,19 @@ public:
me->DespawnOrUnsummon(60000);
}
}
- };
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && creature->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF))
+ bool GossipHello(Player* player) override
{
- player->TalkedToCreature(creature->GetEntry(), ObjectGuid::Empty);
- player->RemoveAurasDueToSpell(SPELL_KODO_KOMBO_PLAYER_BUFF);
- }
+ if (player->HasAura(SPELL_KODO_KOMBO_PLAYER_BUFF) && me->HasAura(SPELL_KODO_KOMBO_DESPAWN_BUFF))
+ {
+ player->TalkedToCreature(me->GetEntry(), ObjectGuid::Empty);
+ player->RemoveAurasDueToSpell(SPELL_KODO_KOMBO_PLAYER_BUFF);
+ }
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
@@ -141,12 +142,22 @@ class go_iruxos : public GameObjectScript
public:
go_iruxos() : GameObjectScript("go_iruxos") { }
- bool OnGossipHello(Player* player, GameObject* go) override
+ struct go_iruxosAI : public GameObjectAI
{
- if (player->GetQuestStatus(QUEST_HAND_IRUXOS) == QUEST_STATUS_INCOMPLETE && !go->FindNearestCreature(NPC_DEMON_SPIRIT, 25.0f, true))
- player->SummonCreature(NPC_DEMON_SPIRIT, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
+ go_iruxosAI(GameObject* go) : GameObjectAI(go) { }
- return true;
+ bool GossipHello(Player* player, bool /*reportUse*/) override
+ {
+ if (player->GetQuestStatus(QUEST_HAND_IRUXOS) == QUEST_STATUS_INCOMPLETE && !me->FindNearestCreature(NPC_DEMON_SPIRIT, 25.0f, true))
+ player->SummonCreature(NPC_DEMON_SPIRIT, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000);
+
+ return true;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_iruxosAI(go);
}
};
@@ -204,20 +215,16 @@ public:
DoMeleeAttackIfReady();
}
- };
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_RETURN_TO_VAHLARRIEL)
- {
- if (npc_escortAI* escortAI = CAST_AI(npc_dalinda::npc_dalindaAI, creature->AI()))
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_RETURN_TO_VAHLARRIEL)
{
- escortAI->Start(true, false, player->GetGUID());
- creature->SetFaction(113);
+ Start(true, false, player->GetGUID());
+ me->SetFaction(113);
}
}
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
diff --git a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
index 92d8ce43156..f6718dfe919 100644
--- a/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
+++ b/src/server/scripts/Kalimdor/zone_dustwallow_marsh.cpp
@@ -51,31 +51,41 @@ class npc_nat_pagle : public CreatureScript
public:
npc_nat_pagle() : CreatureScript("npc_nat_pagle") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
+ struct npc_nat_pagleAI : public ScriptedAI
{
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_TRADE)
- player->GetSession()->SendListInventory(creature->GetGUID());
+ npc_nat_pagleAI(Creature* creature) : ScriptedAI(creature) { }
- return true;
- }
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_TRADE)
+ player->GetSession()->SendListInventory(me->GetGUID());
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ return true;
+ }
- if (creature->IsVendor() && player->GetQuestRewardStatus(QUEST_NATS_MEASURING_TAPE))
+ bool GossipHello(Player* player) override
{
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
- SendGossipMenuFor(player, 7640, creature->GetGUID());
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ if (me->IsVendor() && player->GetQuestRewardStatus(QUEST_NATS_MEASURING_TAPE))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+ SendGossipMenuFor(player, 7640, me->GetGUID());
+ }
+ else
+ SendGossipMenuFor(player, 7638, me->GetGUID());
+
+ return true;
}
- else
- SendGossipMenuFor(player, 7638, creature->GetGUID());
+ };
- return true;
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_nat_pagleAI(creature);
}
-
};
/*######
@@ -104,19 +114,6 @@ class npc_private_hendel : public CreatureScript
public:
npc_private_hendel() : CreatureScript("npc_private_hendel") { }
- bool OnQuestAccept(Player* /*player*/, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT16)
- creature->SetFaction(FACTION_HOSTILE);
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_private_hendelAI(creature);
- }
-
struct npc_private_hendelAI : public ScriptedAI
{
npc_private_hendelAI(Creature* creature) : ScriptedAI(creature) { }
@@ -150,8 +147,18 @@ public:
EnterEvadeMode();
}
}
+
+ void QuestAccept(Player* /*player*/, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_MISSING_DIPLO_PT16)
+ me->SetFaction(FACTION_HOSTILE);
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_private_hendelAI(creature);
+ }
};
/*######
diff --git a/src/server/scripts/Kalimdor/zone_feralas.cpp b/src/server/scripts/Kalimdor/zone_feralas.cpp
index 676d285e37f..f8617314334 100644
--- a/src/server/scripts/Kalimdor/zone_feralas.cpp
+++ b/src/server/scripts/Kalimdor/zone_feralas.cpp
@@ -64,32 +64,6 @@ class npc_oox22fe : public CreatureScript
public:
npc_oox22fe() : CreatureScript("npc_oox22fe") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_RESCUE_OOX22FE)
- {
- creature->AI()->Talk(SAY_OOX_START);
- //change that the npc is not lying dead on the ground
- creature->SetStandState(UNIT_STAND_STATE_STAND);
-
- if (player->GetTeam() == ALLIANCE)
- creature->SetFaction(FACTION_ESCORTEE_A);
-
- if (player->GetTeam() == HORDE)
- creature->SetFaction(FACTION_ESCORTEE_H);
-
- if (npc_escortAI* pEscortAI = CAST_AI(npc_oox22fe::npc_oox22feAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
-
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_oox22feAI(creature);
- }
-
struct npc_oox22feAI : public npc_escortAI
{
npc_oox22feAI(Creature* creature) : npc_escortAI(creature) { }
@@ -146,8 +120,30 @@ public:
{
summoned->AI()->AttackStart(me);
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_RESCUE_OOX22FE)
+ {
+ Talk(SAY_OOX_START);
+ //change that the npc is not lying dead on the ground
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+
+ if (player->GetTeam() == ALLIANCE)
+ me->SetFaction(FACTION_ESCORTEE_A);
+
+ if (player->GetTeam() == HORDE)
+ me->SetFaction(FACTION_ESCORTEE_H);
+
+ Start(true, false, player->GetGUID());
+ }
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_oox22feAI(creature);
+ }
};
/*######
diff --git a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp
index 0ecbb19c1af..b36d1d8df12 100644
--- a/src/server/scripts/Kalimdor/zone_orgrimmar.cpp
+++ b/src/server/scripts/Kalimdor/zone_orgrimmar.cpp
@@ -51,21 +51,6 @@ class npc_shenthul : public CreatureScript
public:
npc_shenthul() : CreatureScript("npc_shenthul") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_SHATTERED_SALUTE)
- {
- ENSURE_AI(npc_shenthul::npc_shenthulAI, creature->AI())->CanTalk = true;
- ENSURE_AI(npc_shenthul::npc_shenthulAI, creature->AI())->PlayerGUID = player->GetGUID();
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_shenthulAI(creature);
- }
-
struct npc_shenthulAI : public ScriptedAI
{
npc_shenthulAI(Creature* creature) : ScriptedAI(creature)
@@ -137,8 +122,21 @@ public:
}
}
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_SHATTERED_SALUTE)
+ {
+ CanTalk = true;
+ PlayerGUID = player->GetGUID();
+ }
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_shenthulAI(creature);
+ }
};
/*######
@@ -177,60 +175,6 @@ class npc_thrall_warchief : public CreatureScript
public:
npc_thrall_warchief() : CreatureScript("npc_thrall_warchief") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF+1:
- AddGossipItemFor(player, OPTION_WHAT_DISCOVERIES, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- SendGossipMenuFor(player, GOSSIP_THE_SHATTERED_HAND, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- AddGossipItemFor(player, OPTION_USURPER, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
- SendGossipMenuFor(player, GOSSIP_IT_WOULD_APPEAR_AS, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- AddGossipItemFor(player, OPTION_WITH_ALL_DUE_RESPECT, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+4);
- SendGossipMenuFor(player, GOSSIP_THE_BROOD_MOTHER, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+4:
- AddGossipItemFor(player, OPTION_I_I_DID_NOT_THINK_OF, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5);
- SendGossipMenuFor(player, GOSSIP_SO_MUCH_TO_LEARN, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+5:
- AddGossipItemFor(player, OPTION_I_LIVE_ONLY_TO_SERVE, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6);
- SendGossipMenuFor(player, GOSSIP_I_DO_NOT_FAULT_YOU, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+6:
- AddGossipItemFor(player, OPTION_OF_COURSE_WARCHIEF, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+7);
- SendGossipMenuFor(player, GOSSIP_NOW_PAY_ATTENTION, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+7:
- CloseGossipMenuFor(player);
- player->AreaExploredOrEventHappens(QUEST_WHAT_THE_WIND_CARRIES);
- break;
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- if (player->GetQuestStatus(QUEST_WHAT_THE_WIND_CARRIES) == QUEST_STATUS_INCOMPLETE)
- AddGossipItemFor(player, OPTION_PLEASE_SHARE_YOUR, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
-
- SendGossipMenuFor(player, GOSSIP_MEMBERS_OF_THE_HORDE, creature->GetGUID());
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_thrall_warchiefAI(creature);
- }
-
struct npc_thrall_warchiefAI : public ScriptedAI
{
npc_thrall_warchiefAI(Creature* creature) : ScriptedAI(creature)
@@ -273,8 +217,62 @@ public:
DoMeleeAttackIfReady();
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ AddGossipItemFor(player, OPTION_WHAT_DISCOVERIES, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ SendGossipMenuFor(player, GOSSIP_THE_SHATTERED_HAND, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ AddGossipItemFor(player, OPTION_USURPER, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ SendGossipMenuFor(player, GOSSIP_IT_WOULD_APPEAR_AS, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ AddGossipItemFor(player, OPTION_WITH_ALL_DUE_RESPECT, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
+ SendGossipMenuFor(player, GOSSIP_THE_BROOD_MOTHER, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 4:
+ AddGossipItemFor(player, OPTION_I_I_DID_NOT_THINK_OF, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
+ SendGossipMenuFor(player, GOSSIP_SO_MUCH_TO_LEARN, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 5:
+ AddGossipItemFor(player, OPTION_I_LIVE_ONLY_TO_SERVE, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
+ SendGossipMenuFor(player, GOSSIP_I_DO_NOT_FAULT_YOU, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 6:
+ AddGossipItemFor(player, OPTION_OF_COURSE_WARCHIEF, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
+ SendGossipMenuFor(player, GOSSIP_NOW_PAY_ATTENTION, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 7:
+ CloseGossipMenuFor(player);
+ player->AreaExploredOrEventHappens(QUEST_WHAT_THE_WIND_CARRIES);
+ break;
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ if (player->GetQuestStatus(QUEST_WHAT_THE_WIND_CARRIES) == QUEST_STATUS_INCOMPLETE)
+ AddGossipItemFor(player, OPTION_PLEASE_SHARE_YOUR, GOSSIP_MENU_OPTION_ID_ALL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+
+ SendGossipMenuFor(player, GOSSIP_MEMBERS_OF_THE_HORDE, me->GetGUID());
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_thrall_warchiefAI(creature);
+ }
};
/* --------- Herald of War ------------- */
diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp
index d9b5cc82b1b..d0233e7d85e 100644
--- a/src/server/scripts/Kalimdor/zone_silithus.cpp
+++ b/src/server/scripts/Kalimdor/zone_silithus.cpp
@@ -38,6 +38,7 @@ EndContentData */
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
+#include "GameObjectAI.h"
#include "Group.h"
#include "Player.h"
@@ -960,60 +961,68 @@ class go_crystalline_tear : public GameObjectScript
public:
go_crystalline_tear() : GameObjectScript("go_crystalline_tear") { }
- bool OnQuestAccept(Player* player, GameObject* go, Quest const* quest) override
+ struct go_crystalline_tearAI : GameObjectAI
{
- if (quest->GetQuestId() == QUEST_A_PAWN_ON_THE_ETERNAL_BOARD)
+ go_crystalline_tearAI(GameObject* go) : GameObjectAI(go) { }
+
+ void QuestAccept(Player* player, Quest const* quest) override
{
- if (Creature* trigger = go->FindNearestCreature(ANACHRONOS_QUEST_TRIGGER_INVISIBLE, 100))
+ if (quest->GetQuestId() == QUEST_A_PAWN_ON_THE_ETERNAL_BOARD)
{
- Unit* Merithra = trigger->SummonCreature(NPC_MERITHRA_OF_THE_DREAM, -8034.535f, 1535.14f, 2.61f, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
- Unit* Caelestrasz = trigger->SummonCreature(NPC_CAELESTRASZ, -8032.767f, 1533.148f, 2.61f, 1.5f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
- Unit* Arygos = trigger->SummonCreature(NPC_ARYGOS, -8034.52f, 1537.843f, 2.61f, 5.7f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
- /* Unit* Fandral = */ trigger->SummonCreature(NPC_FANDRAL_STAGHELM, -8028.462f, 1535.843f, 2.61f, 3.141592f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
- Creature* Anachronos = trigger->SummonCreature(NPC_ANACHRONOS, -8028.75f, 1538.795f, 2.61f, 4, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
-
- if (Merithra)
+ if (Creature* trigger = me->FindNearestCreature(ANACHRONOS_QUEST_TRIGGER_INVISIBLE, 100))
{
- Merithra->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- Merithra->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- Merithra->SetUInt32Value(UNIT_FIELD_DISPLAYID, MERITHRA_NIGHT_ELF_FORM);
- Merithra->SetFaction(35);
- }
+ Unit* Merithra = trigger->SummonCreature(NPC_MERITHRA_OF_THE_DREAM, -8034.535f, 1535.14f, 2.61f, 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
+ Unit* Caelestrasz = trigger->SummonCreature(NPC_CAELESTRASZ, -8032.767f, 1533.148f, 2.61f, 1.5f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
+ Unit* Arygos = trigger->SummonCreature(NPC_ARYGOS, -8034.52f, 1537.843f, 2.61f, 5.7f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
+ /* Unit* Fandral = */ trigger->SummonCreature(NPC_FANDRAL_STAGHELM, -8028.462f, 1535.843f, 2.61f, 3.141592f, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
+ Creature* Anachronos = trigger->SummonCreature(NPC_ANACHRONOS, -8028.75f, 1538.795f, 2.61f, 4, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 220000);
- if (Caelestrasz)
- {
- Caelestrasz->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- Caelestrasz->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- Caelestrasz->SetUInt32Value(UNIT_FIELD_DISPLAYID, CAELESTRASZ_NIGHT_ELF_FORM);
- Caelestrasz->SetFaction(35);
- }
+ if (Merithra)
+ {
+ Merithra->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ Merithra->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ Merithra->SetUInt32Value(UNIT_FIELD_DISPLAYID, MERITHRA_NIGHT_ELF_FORM);
+ Merithra->SetFaction(35);
+ }
- if (Arygos)
- {
- Arygos->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
- Arygos->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- Arygos->SetUInt32Value(UNIT_FIELD_DISPLAYID, ARYGOS_GNOME_FORM);
- Arygos->SetFaction(35);
- }
+ if (Caelestrasz)
+ {
+ Caelestrasz->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ Caelestrasz->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ Caelestrasz->SetUInt32Value(UNIT_FIELD_DISPLAYID, CAELESTRASZ_NIGHT_ELF_FORM);
+ Caelestrasz->SetFaction(35);
+ }
- if (Anachronos)
- {
- if (npc_anachronos_the_ancient::npc_anachronos_the_ancientAI* anachronosAI = CAST_AI(npc_anachronos_the_ancient::npc_anachronos_the_ancientAI, Anachronos->AI()))
- anachronosAI->PlayerGUID = player->GetGUID();
+ if (Arygos)
+ {
+ Arygos->SetUInt32Value(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_NONE);
+ Arygos->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ Arygos->SetUInt32Value(UNIT_FIELD_DISPLAYID, ARYGOS_GNOME_FORM);
+ Arygos->SetFaction(35);
+ }
- if (npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI* triggerAI = CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, trigger->AI()))
+ if (Anachronos)
{
- triggerAI->Failed = false;
- triggerAI->PlayerGUID = player->GetGUID();
- triggerAI->EventStarted = true;
- triggerAI->Announced = true;
+ if (npc_anachronos_the_ancient::npc_anachronos_the_ancientAI* anachronosAI = CAST_AI(npc_anachronos_the_ancient::npc_anachronos_the_ancientAI, Anachronos->AI()))
+ anachronosAI->PlayerGUID = player->GetGUID();
+
+ if (npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI* triggerAI = CAST_AI(npc_anachronos_quest_trigger::npc_anachronos_quest_triggerAI, trigger->AI()))
+ {
+ triggerAI->Failed = false;
+ triggerAI->PlayerGUID = player->GetGUID();
+ triggerAI->EventStarted = true;
+ triggerAI->Announced = true;
+ }
}
}
}
}
- return true;
- }
+ };
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_crystalline_tearAI(go);
+ }
};
/*###
@@ -1128,241 +1137,252 @@ class go_wind_stone : public GameObjectScript
public:
go_wind_stone() : GameObjectScript("go_wind_stone") { }
- private:
- uint8 GetPlayerRank(Player* player) // For random summoning
+ struct go_wind_stoneAI : public GameObjectAI
{
- bool setAura = player->HasAura(AURA_TWILIGHT_SET);
- bool medallionAura = player->HasAura(AURA_MEDALLION);
- bool ringAura = player->HasAura(AURA_RING);
-
- if (setAura && medallionAura && ringAura)
- return 3;
- else if (setAura && medallionAura)
- return 2;
- else if (setAura)
- return 1;
- else
- return 0;
- }
-
- uint8 GetItems(Player* player, WS type)
- {
- uint8 result = 0x0;
+ go_wind_stoneAI(GameObject* go) : GameObjectAI(go) { }
- switch (type)
- {
- case TEMPLAR:
- {
- if (player->HasItemCount(ITEM_TEMPLAR_FIRE))
- result |= FIRE;
- if (player->HasItemCount(ITEM_TEMPLAR_WATER))
- result |= WATER;
- if (player->HasItemCount(ITEM_TEMPLAR_EARTH))
- result |= EARTH;
- if (player->HasItemCount(ITEM_TEMPLAR_AIR))
- result |= AIR;
- break;
- }
- case DUKE:
+ private:
+ uint8 GetPlayerRank(Player* player) // For random summoning
{
- if (player->HasItemCount(ITEM_DUKE_FIRE))
- result |= FIRE;
- if (player->HasItemCount(ITEM_DUKE_WATER))
- result |= WATER;
- if (player->HasItemCount(ITEM_DUKE_EARTH))
- result |= EARTH;
- if (player->HasItemCount(ITEM_DUKE_AIR))
- result |= AIR;
- break;
- }
- case ROYAL:
- {
- if (player->HasItemCount(ITEM_ROYAL_FIRE))
- result |= FIRE;
- if (player->HasItemCount(ITEM_ROYAL_WATER))
- result |= WATER;
- if (player->HasItemCount(ITEM_ROYAL_EARTH))
- result |= EARTH;
- if (player->HasItemCount(ITEM_ROYAL_AIR))
- result |= AIR;
- break;
+ bool setAura = player->HasAura(AURA_TWILIGHT_SET);
+ bool medallionAura = player->HasAura(AURA_MEDALLION);
+ bool ringAura = player->HasAura(AURA_RING);
+
+ if (setAura && medallionAura && ringAura)
+ return 3;
+ else if (setAura && medallionAura)
+ return 2;
+ else if (setAura)
+ return 1;
+ else
+ return 0;
}
- default:
- break;
- }
- return result;
- }
- void SummonNPC(GameObject* go, Player* player, uint32 npc, uint32 spell)
- {
- go->CastSpell(player, spell);
- TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - float(M_PI), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10 * 60 * 1000);
- summons->CastSpell(summons, SPELL_SPAWN_IN, false);
- switch (summons->GetEntry())
- {
- case NPC_TEMPLAR_FIRE:
- case NPC_TEMPLAR_WATER:
- case NPC_TEMPLAR_AIR:
- case NPC_TEMPLAR_EARTH:
- summons->AI()->Talk(SAY_TEMPLAR_AGGRO, player);
- break;
-
- case NPC_DUKE_FIRE:
- case NPC_DUKE_WATER:
- case NPC_DUKE_EARTH:
- case NPC_DUKE_AIR:
- summons->AI()->Talk(SAY_DUKE_AGGRO);
- break;
- case NPC_ROYAL_FIRE:
- case NPC_ROYAL_AIR:
- case NPC_ROYAL_EARTH:
- case NPC_ROYAL_WATER:
- summons->AI()->Talk(YELL_ROYAL_AGGRO);
- break;
- }
- summons->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- summons->SendMeleeAttackStart(player);
- summons->CombatStart(player);
- }
+ uint8 GetItems(Player* player, WS type)
+ {
+ uint8 result = 0x0;
- public:
- bool OnGossipHello(Player* player, GameObject* go) override
- {
- uint8 rank = GetPlayerRank(player);
+ switch (type)
+ {
+ case TEMPLAR:
+ {
+ if (player->HasItemCount(ITEM_TEMPLAR_FIRE))
+ result |= FIRE;
+ if (player->HasItemCount(ITEM_TEMPLAR_WATER))
+ result |= WATER;
+ if (player->HasItemCount(ITEM_TEMPLAR_EARTH))
+ result |= EARTH;
+ if (player->HasItemCount(ITEM_TEMPLAR_AIR))
+ result |= AIR;
+ break;
+ }
+ case DUKE:
+ {
+ if (player->HasItemCount(ITEM_DUKE_FIRE))
+ result |= FIRE;
+ if (player->HasItemCount(ITEM_DUKE_WATER))
+ result |= WATER;
+ if (player->HasItemCount(ITEM_DUKE_EARTH))
+ result |= EARTH;
+ if (player->HasItemCount(ITEM_DUKE_AIR))
+ result |= AIR;
+ break;
+ }
+ case ROYAL:
+ {
+ if (player->HasItemCount(ITEM_ROYAL_FIRE))
+ result |= FIRE;
+ if (player->HasItemCount(ITEM_ROYAL_WATER))
+ result |= WATER;
+ if (player->HasItemCount(ITEM_ROYAL_EARTH))
+ result |= EARTH;
+ if (player->HasItemCount(ITEM_ROYAL_AIR))
+ result |= AIR;
+ break;
+ }
+ default:
+ break;
+ }
+ return result;
+ }
- uint32 gossipId = go->GetGOInfo()->GetGossipMenuId();
- switch (gossipId)
- {
- case GOSSIP_ID_LESSER_WS:
+ void SummonNPC(GameObject* go, Player* player, uint32 npc, uint32 spell)
{
- if (rank >= 1) // 1 or 2 or 3
- AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_WS_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- else
+ go->CastSpell(player, spell);
+ TempSummon* summons = go->SummonCreature(npc, go->GetPositionX(), go->GetPositionY(), go->GetPositionZ(), player->GetOrientation() - float(M_PI), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 10 * 60 * 1000);
+ summons->CastSpell(summons, SPELL_SPAWN_IN, false);
+ switch (summons->GetEntry())
{
- go->CastSpell(player, SPELL_PUNISHMENT);
- break;
+ case NPC_TEMPLAR_FIRE:
+ case NPC_TEMPLAR_WATER:
+ case NPC_TEMPLAR_AIR:
+ case NPC_TEMPLAR_EARTH:
+ summons->AI()->Talk(SAY_TEMPLAR_AGGRO, player);
+ break;
+
+ case NPC_DUKE_FIRE:
+ case NPC_DUKE_WATER:
+ case NPC_DUKE_EARTH:
+ case NPC_DUKE_AIR:
+ summons->AI()->Talk(SAY_DUKE_AGGRO);
+ break;
+ case NPC_ROYAL_FIRE:
+ case NPC_ROYAL_AIR:
+ case NPC_ROYAL_EARTH:
+ case NPC_ROYAL_WATER:
+ summons->AI()->Talk(YELL_ROYAL_AGGRO);
+ break;
}
-
- uint8 item = GetItems(player, TEMPLAR);
- if (item & FIRE)
- AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_1_CRIMSON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- if (item & WATER)
- AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_2_AZURE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
- if (item & EARTH)
- AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_3_EARTHEN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
- if (item & AIR)
- AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_4_HOARY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
- break;
+ summons->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ summons->SendMeleeAttackStart(player);
+ summons->CombatStart(player);
}
- case GOSSIP_ID_WIND_STONE:
+
+ public:
+ bool GossipHello(Player* player, bool /*reportUse*/) override
{
- if (rank >= 2) // 2 or 3
- AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_WS_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
- else
+ uint8 rank = GetPlayerRank(player);
+
+ uint32 gossipId = me->GetGOInfo()->GetGossipMenuId();
+ switch (gossipId)
{
- go->CastSpell(player, SPELL_PUNISHMENT);
- break;
+ case GOSSIP_ID_LESSER_WS:
+ {
+ if (rank >= 1) // 1 or 2 or 3
+ AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_WS_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ else
+ {
+ me->CastSpell(player, SPELL_PUNISHMENT);
+ break;
+ }
+
+ uint8 item = GetItems(player, TEMPLAR);
+ if (item & FIRE)
+ AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_1_CRIMSON, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ if (item & WATER)
+ AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_2_AZURE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ if (item & EARTH)
+ AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_3_EARTHEN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4);
+ if (item & AIR)
+ AddGossipItemFor(player, GOSSIP_ID_LESSER_WS, OPTION_ID_4_HOARY, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5);
+ break;
+ }
+ case GOSSIP_ID_WIND_STONE:
+ {
+ if (rank >= 2) // 2 or 3
+ AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_WS_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6);
+ else
+ {
+ me->CastSpell(player, SPELL_PUNISHMENT);
+ break;
+ }
+
+ uint8 item = GetItems(player, DUKE);
+ if (item & FIRE)
+ AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_1_CYNDERS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
+ if (item & WATER)
+ AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_2_FATHOMS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8);
+ if (item & EARTH)
+ AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_3_SHARDS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
+ if (item & AIR)
+ AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_4_ZEPHYRS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
+ break;
+ }
+ case GOSSIP_ID_GREATER_WS:
+ {
+ if (rank == 3) // 3
+ AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_WS_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
+ else
+ {
+ me->CastSpell(player, SPELL_PUNISHMENT);
+ break;
+ }
+
+ uint8 item = GetItems(player, ROYAL);
+ if (item & FIRE)
+ AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_1_SKALDRENOX, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
+ if (item & WATER)
+ AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_2_SKWOL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13);
+ if (item & EARTH)
+ AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_3_KAZUM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14);
+ if (item & AIR)
+ AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_4_WHIRLAXIS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15);
+ break;
+ }
+ default:
+ break;
}
- uint8 item = GetItems(player, DUKE);
- if (item & FIRE)
- AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_1_CYNDERS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7);
- if (item & WATER)
- AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_2_FATHOMS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8);
- if (item & EARTH)
- AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_3_SHARDS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
- if (item & AIR)
- AddGossipItemFor(player, GOSSIP_ID_WIND_STONE, OPTION_ID_4_ZEPHYRS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10);
- break;
+ SendGossipMenuFor(player, player->GetGossipTextId(gossipId, me), me->GetGUID());
+ return true;
}
- case GOSSIP_ID_GREATER_WS:
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- if (rank == 3) // 3
- AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_WS_RANDOM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11);
- else
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ player->PlayerTalkClass->SendCloseGossip();
+
+ switch (action)
{
- go->CastSpell(player, SPELL_PUNISHMENT);
- break;
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ SummonNPC(me, player, RAND(NPC_TEMPLAR_WATER, NPC_TEMPLAR_FIRE, NPC_TEMPLAR_EARTH, NPC_TEMPLAR_AIR), SPELL_TEMPLAR_RANDOM);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ SummonNPC(me, player, NPC_TEMPLAR_FIRE, SPELL_TEMPLAR_FIRE);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ SummonNPC(me, player, NPC_TEMPLAR_WATER, SPELL_TEMPLAR_WATER);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 4:
+ SummonNPC(me, player, NPC_TEMPLAR_EARTH, SPELL_TEMPLAR_EARTH);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 5:
+ SummonNPC(me, player, NPC_TEMPLAR_AIR, SPELL_TEMPLAR_AIR);
+ break;
+
+ case GOSSIP_ACTION_INFO_DEF + 6:
+ SummonNPC(me, player, RAND(NPC_DUKE_FIRE, NPC_DUKE_WATER, NPC_DUKE_EARTH, NPC_DUKE_AIR), SPELL_DUKE_RANDOM);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 7:
+ SummonNPC(me, player, NPC_DUKE_FIRE, SPELL_DUKE_FIRE);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 8:
+ SummonNPC(me, player, NPC_DUKE_WATER, SPELL_DUKE_WATER);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 9:
+ SummonNPC(me, player, NPC_DUKE_EARTH, SPELL_DUKE_EARTH);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 10:
+ SummonNPC(me, player, NPC_DUKE_AIR, SPELL_DUKE_AIR);
+ break;
+
+ case GOSSIP_ACTION_INFO_DEF + 11:
+ SummonNPC(me, player, RAND(NPC_ROYAL_FIRE, NPC_ROYAL_AIR, NPC_ROYAL_EARTH, NPC_ROYAL_WATER), SPELL_ROYAL_RANDOM);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 12:
+ SummonNPC(me, player, NPC_ROYAL_FIRE, SPELL_ROYAL_FIRE);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 13:
+ SummonNPC(me, player, NPC_ROYAL_WATER, SPELL_ROYAL_WATER);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 14:
+ SummonNPC(me, player, NPC_ROYAL_EARTH, SPELL_ROYAL_EARTH);
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 15:
+ SummonNPC(me, player, NPC_ROYAL_AIR, SPELL_ROYAL_AIR);
+ break;
+
+ default:
+ break;
}
-
- uint8 item = GetItems(player, ROYAL);
- if (item & FIRE)
- AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_1_SKALDRENOX, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 12);
- if (item & WATER)
- AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_2_SKWOL, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 13);
- if (item & EARTH)
- AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_3_KAZUM, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 14);
- if (item & AIR)
- AddGossipItemFor(player, GOSSIP_ID_GREATER_WS, OPTION_ID_4_WHIRLAXIS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 15);
- break;
+ return true;
}
- default:
- break;
- }
-
- SendGossipMenuFor(player, player->GetGossipTextId(gossipId, go), go->GetGUID());
- return true;
- }
+ };
- bool OnGossipSelect(Player* player, GameObject* go, uint32 /*sender*/, uint32 action) override
+ GameObjectAI* GetAI(GameObject* go) const override
{
- ClearGossipMenuFor(player);
- player->PlayerTalkClass->SendCloseGossip();
-
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF + 1:
- SummonNPC(go, player, RAND(NPC_TEMPLAR_WATER, NPC_TEMPLAR_FIRE, NPC_TEMPLAR_EARTH, NPC_TEMPLAR_AIR), SPELL_TEMPLAR_RANDOM);
- break;
- case GOSSIP_ACTION_INFO_DEF + 2:
- SummonNPC(go, player, NPC_TEMPLAR_FIRE, SPELL_TEMPLAR_FIRE);
- break;
- case GOSSIP_ACTION_INFO_DEF + 3:
- SummonNPC(go, player, NPC_TEMPLAR_WATER, SPELL_TEMPLAR_WATER);
- break;
- case GOSSIP_ACTION_INFO_DEF + 4:
- SummonNPC(go, player, NPC_TEMPLAR_EARTH, SPELL_TEMPLAR_EARTH);
- break;
- case GOSSIP_ACTION_INFO_DEF + 5:
- SummonNPC(go, player, NPC_TEMPLAR_AIR, SPELL_TEMPLAR_AIR);
- break;
-
- case GOSSIP_ACTION_INFO_DEF + 6:
- SummonNPC(go, player, RAND(NPC_DUKE_FIRE, NPC_DUKE_WATER, NPC_DUKE_EARTH, NPC_DUKE_AIR), SPELL_DUKE_RANDOM);
- break;
- case GOSSIP_ACTION_INFO_DEF + 7:
- SummonNPC(go, player, NPC_DUKE_FIRE, SPELL_DUKE_FIRE);
- break;
- case GOSSIP_ACTION_INFO_DEF + 8:
- SummonNPC(go, player, NPC_DUKE_WATER, SPELL_DUKE_WATER);
- break;
- case GOSSIP_ACTION_INFO_DEF + 9:
- SummonNPC(go, player, NPC_DUKE_EARTH, SPELL_DUKE_EARTH);
- break;
- case GOSSIP_ACTION_INFO_DEF + 10:
- SummonNPC(go, player, NPC_DUKE_AIR, SPELL_DUKE_AIR);
- break;
-
- case GOSSIP_ACTION_INFO_DEF + 11:
- SummonNPC(go, player, RAND(NPC_ROYAL_FIRE, NPC_ROYAL_AIR, NPC_ROYAL_EARTH, NPC_ROYAL_WATER), SPELL_ROYAL_RANDOM);
- break;
- case GOSSIP_ACTION_INFO_DEF + 12:
- SummonNPC(go, player, NPC_ROYAL_FIRE, SPELL_ROYAL_FIRE);
- break;
- case GOSSIP_ACTION_INFO_DEF + 13:
- SummonNPC(go, player, NPC_ROYAL_WATER, SPELL_ROYAL_WATER);
- break;
- case GOSSIP_ACTION_INFO_DEF + 14:
- SummonNPC(go, player, NPC_ROYAL_EARTH, SPELL_ROYAL_EARTH);
- break;
- case GOSSIP_ACTION_INFO_DEF + 15:
- SummonNPC(go, player, NPC_ROYAL_AIR, SPELL_ROYAL_AIR);
- break;
-
- default:
- break;
- }
- return true;
+ return new go_wind_stoneAI(go);
}
};
diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
index 4363917b9a3..1fcefb7403f 100644
--- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
+++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp
@@ -78,21 +78,19 @@ public:
}
void Reset() override { }
- };
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_PROTECT_KAYA)
+ void QuestAccept(Player* player, Quest const* quest) override
{
- if (npc_escortAI* pEscortAI = CAST_AI(npc_kaya_flathoof::npc_kaya_flathoofAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
+ if (quest->GetQuestId() == QUEST_PROTECT_KAYA)
+ {
+ Start(true, false, player->GetGUID());
- creature->AI()->Talk(SAY_START);
- creature->SetFaction(113);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ Talk(SAY_START);
+ me->SetFaction(113);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ }
}
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp
index 92558f73269..b8922038170 100644
--- a/src/server/scripts/Kalimdor/zone_tanaris.cpp
+++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp
@@ -318,27 +318,6 @@ class npc_OOX17 : public CreatureScript
public:
npc_OOX17() : CreatureScript("npc_OOX17") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == Q_OOX17)
- {
- creature->SetFaction(113);
- creature->SetFullHealth();
- creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
- creature->AI()->Talk(SAY_OOX_START);
-
- if (npc_escortAI* pEscortAI = CAST_AI(npc_OOX17::npc_OOX17AI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_OOX17AI(creature);
- }
-
struct npc_OOX17AI : public npc_escortAI
{
npc_OOX17AI(Creature* creature) : npc_escortAI(creature) { }
@@ -382,7 +361,26 @@ public:
{
summoned->AI()->AttackStart(me);
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == Q_OOX17)
+ {
+ me->SetFaction(113);
+ me->SetFullHealth();
+ me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);
+ Talk(SAY_OOX_START);
+
+ Start(true, false, player->GetGUID());
+ }
+ }
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_OOX17AI(creature);
+ }
};
/*####
@@ -413,22 +411,6 @@ class npc_tooga : public CreatureScript
public:
npc_tooga() : CreatureScript("npc_tooga") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_TOOGA)
- {
- if (npc_toogaAI* pToogaAI = CAST_AI(npc_tooga::npc_toogaAI, creature->AI()))
- pToogaAI->StartFollow(player, FACTION_TOOG_ESCORTEE, quest);
- }
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_toogaAI(creature);
- }
-
struct npc_toogaAI : public FollowerAI
{
npc_toogaAI(Creature* creature) : FollowerAI(creature)
@@ -552,8 +534,18 @@ public:
DoMeleeAttackIfReady();
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_TOOGA)
+ StartFollow(player, FACTION_TOOG_ESCORTEE, quest);
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_toogaAI(creature);
+ }
};
void AddSC_tanaris()
diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
index 93927f0d074..cf425fc804e 100644
--- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp
+++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp
@@ -56,17 +56,16 @@ class npc_beaten_corpse : public CreatureScript
struct npc_beaten_corpseAI : public ScriptedAI
{
- npc_beaten_corpseAI(Creature* creature) : ScriptedAI(creature)
- {
- }
+ npc_beaten_corpseAI(Creature* creature) : ScriptedAI(creature) { }
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == GOSSIP_MENU_OPTION_INSPECT_BODY && gossipListId == GOSSIP_OPTION_ID_BEATEN_CORPSE)
{
CloseGossipMenuFor(player);
player->TalkedToCreature(me->GetEntry(), me->GetGUID());
}
+ return false;
}
};
@@ -101,26 +100,6 @@ class npc_gilthares : public CreatureScript
public:
npc_gilthares() : CreatureScript("npc_gilthares") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_FREE_FROM_HOLD)
- {
- creature->SetFaction(FACTION_ESCORTEE);
- creature->SetStandState(UNIT_STAND_STATE_STAND);
-
- creature->AI()->Talk(SAY_GIL_START, player);
-
- if (npc_giltharesAI* pEscortAI = CAST_AI(npc_gilthares::npc_giltharesAI, creature->AI()))
- pEscortAI->Start(false, false, player->GetGUID(), quest);
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_giltharesAI(creature);
- }
-
struct npc_giltharesAI : public npc_escortAI
{
npc_giltharesAI(Creature* creature) : npc_escortAI(creature) { }
@@ -170,8 +149,24 @@ public:
Talk(SAY_GIL_AGGRO, who);
}
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_FREE_FROM_HOLD)
+ {
+ me->SetFaction(FACTION_ESCORTEE);
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+
+ Talk(SAY_GIL_START, player);
+ Start(false, false, player->GetGUID(), quest);
+ }
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_giltharesAI(creature);
+ }
};
/*######
@@ -651,19 +646,17 @@ public:
DoMeleeAttackIfReady();
}
- };
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_ESCAPE)
+ void QuestAccept(Player* player, Quest const* quest) override
{
- creature->SetFaction(FACTION_RATCHET);
- creature->AI()->Talk(SAY_START);
- if (npc_escortAI* pEscortAI = CAST_AI(npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
+ if (quest->GetQuestId() == QUEST_ESCAPE)
+ {
+ me->SetFaction(FACTION_RATCHET);
+ Talk(SAY_START);
+ Start(true, false, player->GetGUID());
+ }
}
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
index 6170ddb2e53..f13a0fc31ce 100644
--- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
+++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp
@@ -35,6 +35,7 @@ EndContentData */
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
#include "Player.h"
/*#####
@@ -55,20 +56,6 @@ class npc_kanati : public CreatureScript
public:
npc_kanati() : CreatureScript("npc_kanati") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_PROTECT_KANATI)
- if (npc_kanatiAI* pEscortAI = CAST_AI(npc_kanati::npc_kanatiAI, creature->AI()))
- pEscortAI->Start(false, false, player->GetGUID(), quest, true);
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_kanatiAI(creature);
- }
-
struct npc_kanatiAI : public npc_escortAI
{
npc_kanatiAI(Creature* creature) : npc_escortAI(creature) { }
@@ -100,8 +87,18 @@ public:
{
summoned->AI()->AttackStart(me);
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_PROTECT_KANATI)
+ Start(false, false, player->GetGUID(), quest, true);
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_kanatiAI(creature);
+ }
};
/*######
@@ -140,24 +137,6 @@ class npc_lakota_windsong : public CreatureScript
public:
npc_lakota_windsong() : CreatureScript("npc_lakota_windsong") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_FREE_AT_LAST)
- {
- creature->AI()->Talk(SAY_LAKO_START, player);
- creature->SetFaction(FACTION_ESCORTEE_LAKO);
-
- if (npc_lakota_windsongAI* pEscortAI = CAST_AI(npc_lakota_windsong::npc_lakota_windsongAI, creature->AI()))
- pEscortAI->Start(false, false, player->GetGUID(), quest);
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_lakota_windsongAI(creature);
- }
-
struct npc_lakota_windsongAI : public npc_escortAI
{
npc_lakota_windsongAI(Creature* creature) : npc_escortAI(creature) { }
@@ -193,7 +172,23 @@ public:
for (int i = 0; i < 2; ++i)
me->SummonCreature(NPC_GRIM_BANDIT, BanditLoc[i+AmbushId], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000);
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_FREE_AT_LAST)
+ {
+ Talk(SAY_LAKO_START, player);
+ me->SetFaction(FACTION_ESCORTEE_LAKO);
+
+ Start(false, false, player->GetGUID(), quest);
+ }
+ }
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_lakota_windsongAI(creature);
+ }
};
/*######
@@ -223,24 +218,6 @@ class npc_paoka_swiftmountain : public CreatureScript
public:
npc_paoka_swiftmountain() : CreatureScript("npc_paoka_swiftmountain") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_HOMEWARD)
- {
- creature->AI()->Talk(SAY_START, player);
- creature->SetFaction(FACTION_ESCORTEE);
-
- if (npc_paoka_swiftmountainAI* pEscortAI = CAST_AI(npc_paoka_swiftmountain::npc_paoka_swiftmountainAI, creature->AI()))
- pEscortAI->Start(false, false, player->GetGUID(), quest);
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_paoka_swiftmountainAI(creature);
- }
-
struct npc_paoka_swiftmountainAI : public npc_escortAI
{
npc_paoka_swiftmountainAI(Creature* creature) : npc_escortAI(creature) { }
@@ -270,7 +247,23 @@ public:
for (int i = 0; i < 3; ++i)
me->SummonCreature(NPC_WYVERN, WyvernLoc[i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000);
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_HOMEWARD)
+ {
+ Talk(SAY_START, player);
+ me->SetFaction(FACTION_ESCORTEE);
+
+ Start(false, false, player->GetGUID(), quest);
+ }
+ }
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_paoka_swiftmountainAI(creature);
+ }
};
enum PantherCage
@@ -284,20 +277,30 @@ class go_panther_cage : public GameObjectScript
public:
go_panther_cage() : GameObjectScript("go_panther_cage") { }
- bool OnGossipHello(Player* player, GameObject* go) override
+ struct go_panther_cageAI : public GameObjectAI
{
- go->UseDoorOrButton();
- if (player->GetQuestStatus(QUEST_HYPERCAPACITOR_GIZMO) == QUEST_STATUS_INCOMPLETE)
+ go_panther_cageAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player, bool /*reportUse*/) override
{
- if (Creature* panther = go->FindNearestCreature(ENRAGED_PANTHER, 5, true))
+ me->UseDoorOrButton();
+ if (player->GetQuestStatus(QUEST_HYPERCAPACITOR_GIZMO) == QUEST_STATUS_INCOMPLETE)
{
- panther->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
- panther->SetReactState(REACT_AGGRESSIVE);
- panther->AI()->AttackStart(player);
+ if (Creature* panther = me->FindNearestCreature(ENRAGED_PANTHER, 5, true))
+ {
+ panther->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
+ panther->SetReactState(REACT_AGGRESSIVE);
+ panther->AI()->AttackStart(player);
+ }
}
+
+ return true;
}
+ };
- return true;
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_panther_cageAI(go);
}
};
diff --git a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp
index 027a182f386..0f894631345 100644
--- a/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp
+++ b/src/server/scripts/Kalimdor/zone_thunder_bluff.cpp
@@ -48,35 +48,6 @@ class npc_cairne_bloodhoof : public CreatureScript
public:
npc_cairne_bloodhoof() : CreatureScript("npc_cairne_bloodhoof") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_SENDER_INFO)
- {
- player->CastSpell(player, 23123, false);
- SendGossipMenuFor(player, 7014, creature->GetGUID());
- }
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- if (player->GetQuestStatus(925) == QUEST_STATUS_INCOMPLETE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HCB, GOSSIP_SENDER_MAIN, GOSSIP_SENDER_INFO);
-
- SendGossipMenuFor(player, 7013, creature->GetGUID());
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_cairne_bloodhoofAI(creature);
- }
-
struct npc_cairne_bloodhoofAI : public ScriptedAI
{
npc_cairne_bloodhoofAI(Creature* creature) : ScriptedAI(creature)
@@ -144,8 +115,37 @@ public:
DoMeleeAttackIfReady();
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_SENDER_INFO)
+ {
+ player->CastSpell(player, 23123, false);
+ SendGossipMenuFor(player, 7014, me->GetGUID());
+ }
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ if (player->GetQuestStatus(925) == QUEST_STATUS_INCOMPLETE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HCB, GOSSIP_SENDER_MAIN, GOSSIP_SENDER_INFO);
+
+ SendGossipMenuFor(player, 7013, me->GetGUID());
+
+ return true;
+ }
};
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_cairne_bloodhoofAI(creature);
+ }
};
void AddSC_thunder_bluff()
diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
index fa6ef602da4..07babc1f079 100644
--- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
+++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp
@@ -57,24 +57,6 @@ class npc_ame : public CreatureScript
public:
npc_ame() : CreatureScript("npc_ame") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_CHASING_AME)
- {
- ENSURE_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID());
- creature->AI()->Talk(SAY_READY, player);
- creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
- // Change faction so mobs attack
- creature->SetFaction(113);
- }
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_ameAI(creature);
- }
-
struct npc_ameAI : public npc_escortAI
{
npc_ameAI(Creature* creature) : npc_escortAI(creature)
@@ -146,7 +128,24 @@ public:
DemoralizingShoutTimer = 70000;
} else DemoralizingShoutTimer -= diff;
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_CHASING_AME)
+ {
+ Start(false, false, player->GetGUID());
+ Talk(SAY_READY, player);
+ me->SetUInt32Value(UNIT_FIELD_BYTES_1, 0);
+ // Change faction so mobs attack
+ me->SetFaction(113);
+ }
+ }
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_ameAI(creature);
+ }
};
/*####
@@ -181,25 +180,6 @@ class npc_ringo : public CreatureScript
public:
npc_ringo() : CreatureScript("npc_ringo") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_A_LITTLE_HELP)
- {
- if (npc_ringoAI* ringoAI = CAST_AI(npc_ringo::npc_ringoAI, creature->AI()))
- {
- creature->SetStandState(UNIT_STAND_STATE_STAND);
- ringoAI->StartFollow(player, FACTION_ESCORTEE, quest);
- }
- }
-
- return true;
- }
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_ringoAI(creature);
- }
-
struct npc_ringoAI : public FollowerAI
{
npc_ringoAI(Creature* creature) : FollowerAI(creature)
@@ -355,7 +335,21 @@ public:
DoMeleeAttackIfReady();
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_A_LITTLE_HELP)
+ {
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ StartFollow(player, FACTION_ESCORTEE, quest);
+ }
+ }
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_ringoAI(creature);
+ }
};
void AddSC_ungoro_crater()
diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp
index e16fb9bd0a7..a2c3e9a8715 100644
--- a/src/server/scripts/Kalimdor/zone_winterspring.cpp
+++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp
@@ -33,6 +33,7 @@ EndContentData */
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
#include "Player.h"
#include "WorldSession.h"
@@ -45,26 +46,36 @@ class npc_rivern_frostwind : public CreatureScript
public:
npc_rivern_frostwind() : CreatureScript("npc_rivern_frostwind") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
+ struct npc_rivern_frostwindAI : public ScriptedAI
{
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_TRADE)
- player->GetSession()->SendListInventory(creature->GetGUID());
+ npc_rivern_frostwindAI(Creature* creature) : ScriptedAI(creature) { }
- return true;
- }
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_TRADE)
+ player->GetSession()->SendListInventory(me->GetGUID());
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ return true;
+ }
- if (creature->IsVendor() && player->GetReputationRank(589) == REP_EXALTED)
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
+ if (me->IsVendor() && player->GetReputationRank(589) == REP_EXALTED)
+ AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
- return true;
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_rivern_frostwindAI(creature);
}
};
@@ -292,30 +303,10 @@ class npc_ranshalla : public CreatureScript
{
public:
npc_ranshalla() : CreatureScript("npc_ranshalla") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_GUARDIANS_ALTAR)
- {
- creature->AI()->Talk(SAY_QUEST_START);
- creature->SetFaction(FACTION_ESCORT_A_NEUTRAL_PASSIVE);
-
- if (npc_ranshallaAI* escortAI = dynamic_cast<npc_ranshallaAI*>(creature->AI()))
- escortAI->Start(false, false, player->GetGUID(), quest);
-
- return true;
- }
-
- return false;
- }
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_ranshallaAI(creature);
- }
struct npc_ranshallaAI : public npc_escortAI, private DialogueHelper
{
- npc_ranshallaAI(Creature* creature) : npc_escortAI(creature),
- DialogueHelper(introDialogue)
+ npc_ranshallaAI(Creature* creature) : npc_escortAI(creature), DialogueHelper(introDialogue)
{
Initialize();
}
@@ -588,9 +579,26 @@ public:
npc_escortAI::UpdateEscortAI(diff);
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_GUARDIANS_ALTAR)
+ {
+ Talk(SAY_QUEST_START);
+ me->SetFaction(FACTION_ESCORT_A_NEUTRAL_PASSIVE);
+
+ Start(false, false, player->GetGUID(), quest);
+ }
+ }
+
private:
EventMap events;
};
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_ranshallaAI(creature);
+ }
};
/*#####
@@ -601,22 +609,32 @@ class go_elune_fire : public GameObjectScript
{
public:
go_elune_fire() : GameObjectScript("go_elune_fire") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
- {
- // Check if we are using the torches or the altar
- bool isAltar = false;
- if (go->GetEntry() == GO_ELUNE_ALTAR)
- isAltar = true;
+ struct go_elune_fireAI : public GameObjectAI
+ {
+ go_elune_fireAI(GameObject* go) : GameObjectAI(go) { }
- if (Creature* ranshalla = GetClosestCreatureWithEntry(go, NPC_RANSHALLA, 10.0f))
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
- if (npc_ranshalla::npc_ranshallaAI* escortAI = dynamic_cast<npc_ranshalla::npc_ranshallaAI*>(ranshalla->AI()))
- escortAI->DoContinueEscort(isAltar);
+ // Check if we are using the torches or the altar
+ bool isAltar = false;
+
+ if (me->GetEntry() == GO_ELUNE_ALTAR)
+ isAltar = true;
+
+ if (Creature* ranshalla = GetClosestCreatureWithEntry(me, NPC_RANSHALLA, 10.0f))
+ {
+ if (npc_ranshalla::npc_ranshallaAI* escortAI = dynamic_cast<npc_ranshalla::npc_ranshallaAI*>(ranshalla->AI()))
+ escortAI->DoContinueEscort(isAltar);
+ }
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ return false;
}
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ };
- return false;
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_elune_fireAI(go);
}
};