aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
authorariel- <ariel-@users.noreply.github.com>2017-05-01 18:19:36 -0300
committerariel- <ariel-@users.noreply.github.com>2017-05-01 18:19:36 -0300
commitf913f3bb8977c127d200d5d4a608ab434b21bbcd (patch)
treebb2d18ad5c0c23667271ca98bd6754cc745256a8 /src/server/scripts/Northrend
parente4481c016a86fe7db0b83a434ea08eb7ba50174f (diff)
Core/Scripts: unified scripted gossip/quest api
- Changed self-accessor on GameObjectAI to "me", like UnitAI - Moved all related functions to AI, now Unit and GameObject have the same function names with identical behaviour - Remove "OnUpdate" from CreatureScript/GameObjectScript, was never used and we already have AI Update method - Quest methods no longer return a bool, the return value was used to call the AI version if the ScriptMgr one returned false - Implemented GameObjectAI::Destroyed hook (was never called), implemented Damaged method - Rename OnStateChanged to OnLootStateChanged to reflect when it's really called, and created a new hook OnStateChanged that only gets called on GOState change - Since the functions are now only getting called from AI, made GetAI methods full virtual. (CanSpawn method is anyways going to be used on creatures with AI)
Diffstat (limited to 'src/server/scripts/Northrend')
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h6
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp51
-rw-r--r--src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp2
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp69
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp16
-rw-r--r--src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp139
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp6
-rw-r--r--src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp60
-rw-r--r--src/server/scripts/Northrend/Gundrak/gundrak.h6
-rw-r--r--src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp20
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp6
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp9
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp3
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp21
-rw-r--r--src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp8
-rw-r--r--src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp30
-rw-r--r--src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp11
-rw-r--r--src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp47
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp29
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp61
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp32
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp65
-rw-r--r--src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp5
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp22
-rw-r--r--src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h6
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.cpp65
-rw-r--r--src/server/scripts/Northrend/VioletHold/violet_hold.h6
-rw-r--r--src/server/scripts/Northrend/zone_borean_tundra.cpp337
-rw-r--r--src/server/scripts/Northrend/zone_dragonblight.cpp55
-rw-r--r--src/server/scripts/Northrend/zone_grizzly_hills.cpp29
-rw-r--r--src/server/scripts/Northrend/zone_howling_fjord.cpp119
-rw-r--r--src/server/scripts/Northrend/zone_sholazar_basin.cpp227
-rw-r--r--src/server/scripts/Northrend/zone_storm_peaks.cpp83
-rw-r--r--src/server/scripts/Northrend/zone_wintergrasp.cpp264
-rw-r--r--src/server/scripts/Northrend/zone_zuldrak.cpp50
35 files changed, 1066 insertions, 899 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
index 970a64e1fd8..c1bf139c070 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/ahnkahet.h
@@ -80,10 +80,10 @@ enum AKGameObjectIds
GO_SPHERE_2 = 193094
};
-template<class AI>
-AI* GetAhnKahetAI(Creature* creature)
+template<class AI, class T>
+AI* GetAhnKahetAI(T* obj)
{
- return GetInstanceAI<AI>(creature, AhnKahetScriptName);
+ return GetInstanceAI<AI>(obj, AhnKahetScriptName);
}
#endif // AHNKAHET_H_
diff --git a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
index 32e296a508a..a261febcd6d 100644
--- a/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/Ahnkahet/boss_prince_taldaram.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "SpellScript.h"
#include "Player.h"
#include "ahnkahet.h"
@@ -380,33 +381,41 @@ class go_prince_taldaram_sphere : public GameObjectScript
public:
go_prince_taldaram_sphere() : GameObjectScript("go_prince_taldaram_sphere") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_prince_taldaram_sphereAI : public GameObjectAI
{
- InstanceScript* instance = go->GetInstanceScript();
- if (!instance)
- return false;
+ go_prince_taldaram_sphereAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- Creature* PrinceTaldaram = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_PRINCE_TALDARAM));
- if (PrinceTaldaram && PrinceTaldaram->IsAlive())
- {
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- go->SetGoState(GO_STATE_ACTIVE);
+ InstanceScript* instance;
- switch (go->GetEntry())
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
+ {
+ Creature* princeTaldaram = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PRINCE_TALDARAM));
+ if (princeTaldaram && princeTaldaram->IsAlive())
{
- case GO_SPHERE_1:
- instance->SetData(DATA_SPHERE_1, IN_PROGRESS);
- PrinceTaldaram->AI()->Talk(SAY_1);
- break;
- case GO_SPHERE_2:
- instance->SetData(DATA_SPHERE_2, IN_PROGRESS);
- PrinceTaldaram->AI()->Talk(SAY_1);
- break;
- }
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ me->SetGoState(GO_STATE_ACTIVE);
- ENSURE_AI(boss_prince_taldaram::boss_prince_taldaramAI, PrinceTaldaram->AI())->CheckSpheres();
+ switch (me->GetEntry())
+ {
+ case GO_SPHERE_1:
+ instance->SetData(DATA_SPHERE_1, IN_PROGRESS);
+ princeTaldaram->AI()->Talk(SAY_1);
+ break;
+ case GO_SPHERE_2:
+ instance->SetData(DATA_SPHERE_2, IN_PROGRESS);
+ princeTaldaram->AI()->Talk(SAY_1);
+ break;
+ }
+
+ ENSURE_AI(boss_prince_taldaram::boss_prince_taldaramAI, princeTaldaram->AI())->CheckSpheres();
+ }
+ return true;
}
- return true;
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetAhnKahetAI<go_prince_taldaram_sphereAI>(go);
}
};
diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
index c1045aaee74..0b179b1e252 100644
--- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
+++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp
@@ -1379,7 +1379,7 @@ class go_twilight_portal : public GameObjectScript
if (!_deleted)
{
_deleted = true;
- go->Delete();
+ me->Delete();
}
}
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
index 839488cff86..f31010c9676 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/trial_of_the_champion.cpp
@@ -446,48 +446,43 @@ public:
break;
}
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return GetInstanceAI<npc_announcer_toc5AI>(creature);
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
-
- if (instance &&
- ((instance->GetData(BOSS_GRAND_CHAMPIONS) == DONE &&
- instance->GetData(BOSS_BLACK_KNIGHT) == DONE &&
- instance->GetData(BOSS_ARGENT_CHALLENGE_E) == DONE) ||
- instance->GetData(BOSS_ARGENT_CHALLENGE_P) == DONE))
- return false;
-
- if (instance &&
- instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED &&
- instance->GetData(BOSS_ARGENT_CHALLENGE_E) == NOT_STARTED &&
- instance->GetData(BOSS_ARGENT_CHALLENGE_P) == NOT_STARTED &&
- instance->GetData(BOSS_BLACK_KNIGHT) == NOT_STARTED)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- else if (instance)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
-
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
-
- return true;
- }
+ bool GossipHello(Player* player) override
+ {
+ if (((instance->GetData(BOSS_GRAND_CHAMPIONS) == DONE &&
+ instance->GetData(BOSS_BLACK_KNIGHT) == DONE &&
+ instance->GetData(BOSS_ARGENT_CHALLENGE_E) == DONE) ||
+ instance->GetData(BOSS_ARGENT_CHALLENGE_P) == DONE))
+ return false;
+
+ if (instance->GetData(BOSS_GRAND_CHAMPIONS) == NOT_STARTED &&
+ instance->GetData(BOSS_ARGENT_CHALLENGE_E) == NOT_STARTED &&
+ instance->GetData(BOSS_ARGENT_CHALLENGE_P) == NOT_STARTED &&
+ instance->GetData(BOSS_BLACK_KNIGHT) == NOT_STARTED)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ else if (instance)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_START_EVENT2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return 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);
- ENSURE_AI(npc_announcer_toc5::npc_announcer_toc5AI, creature->AI())->StartEncounter();
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
+ {
+ CloseGossipMenuFor(player);
+ StartEncounter();
+ }
+ return true;
}
+ };
- return true;
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return GetInstanceAI<npc_announcer_toc5AI>(creature);
}
};
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
index 5c9be579132..a2046ca0b44 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp
@@ -514,20 +514,20 @@ class npc_essence_of_twin : public CreatureScript
return spellReturned;
}
+
+ bool GossipHello(Player* player) override
+ {
+ player->RemoveAurasDueToSpell(GetData(ESSENCE_REMOVE));
+ player->CastSpell(player, GetData(ESSENCE_APPLY), true);
+ CloseGossipMenuFor(player);
+ return true;
+ }
};
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_essence_of_twinAI(creature);
};
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- player->RemoveAurasDueToSpell(creature->GetAI()->GetData(ESSENCE_REMOVE));
- player->CastSpell(player, creature->GetAI()->GetData(ESSENCE_APPLY), true);
- CloseGossipMenuFor(player);
- return true;
- }
};
struct npc_unleashed_ballAI : public ScriptedAI
diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
index 711be2c5772..084ce0b614d 100644
--- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
+++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/trial_of_the_crusader.cpp
@@ -111,7 +111,9 @@ class npc_announcer_toc10 : public CreatureScript
struct npc_announcer_toc10AI : public ScriptedAI
{
- npc_announcer_toc10AI(Creature* creature) : ScriptedAI(creature) { }
+ npc_announcer_toc10AI(Creature* creature) : ScriptedAI(creature), instance(creature->GetInstanceScript()) { }
+
+ InstanceScript* instance;
void Reset() override
{
@@ -123,95 +125,88 @@ class npc_announcer_toc10 : public CreatureScript
}
void AttackStart(Unit* /*who*/) override { }
- };
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
- if (!instance)
- return true;
+ bool GossipHello(Player* player) override
+ {
+ char const* _message = "We are ready!";
- char const* _message = "We are ready!";
+ if (player->IsInCombat() || instance->IsEncounterInProgress())
+ return true;
- if (player->IsInCombat() || instance->IsEncounterInProgress())
- return true;
-
- uint8 i = 0;
- for (; i < NUM_MESSAGES; ++i)
- {
- if ((!_GossipMessage[i].state && instance->GetBossState(_GossipMessage[i].encounter) != DONE)
- || (_GossipMessage[i].state && instance->GetBossState(_GossipMessage[i].encounter) == DONE))
+ uint8 i = 0;
+ for (; i < NUM_MESSAGES; ++i)
{
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, _message, GOSSIP_SENDER_MAIN, _GossipMessage[i].id);
- break;
+ if ((!_GossipMessage[i].state && instance->GetBossState(_GossipMessage[i].encounter) != DONE)
+ || (_GossipMessage[i].state && instance->GetBossState(_GossipMessage[i].encounter) == DONE))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, _message, GOSSIP_SENDER_MAIN, _GossipMessage[i].id);
+ break;
+ }
}
- }
-
- if (i >= NUM_MESSAGES)
- return false;
- SendGossipMenuFor(player, _GossipMessage[i].msgnum, creature->GetGUID());
- return true;
- }
+ if (i >= NUM_MESSAGES)
+ return false;
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override
- {
- ClearGossipMenuFor(player);
- CloseGossipMenuFor(player);
- InstanceScript* instance = creature->GetInstanceScript();
- if (!instance)
+ SendGossipMenuFor(player, _GossipMessage[i].msgnum, me->GetGUID());
return true;
-
- if (instance->GetBossState(BOSS_BEASTS) != DONE)
- {
- instance->SetData(TYPE_EVENT, 110);
- instance->SetData(TYPE_NORTHREND_BEASTS, NOT_STARTED);
- instance->SetBossState(BOSS_BEASTS, NOT_STARTED);
}
- else if (instance->GetBossState(BOSS_JARAXXUS) != DONE)
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
- // if Jaraxxus is spawned, but the raid wiped
- if (Creature* jaraxxus = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_JARAXXUS)))
+ ClearGossipMenuFor(player);
+ CloseGossipMenuFor(player);
+
+ if (instance->GetBossState(BOSS_BEASTS) != DONE)
{
- jaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS);
- jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
- jaraxxus->SetReactState(REACT_DEFENSIVE);
- jaraxxus->SetInCombatWithZone();
+ instance->SetData(TYPE_EVENT, 110);
+ instance->SetData(TYPE_NORTHREND_BEASTS, NOT_STARTED);
+ instance->SetBossState(BOSS_BEASTS, NOT_STARTED);
}
- else
+ else if (instance->GetBossState(BOSS_JARAXXUS) != DONE)
{
- instance->SetData(TYPE_EVENT, 1010);
- instance->SetBossState(BOSS_JARAXXUS, NOT_STARTED);
+ // if Jaraxxus is spawned, but the raid wiped
+ if (Creature* jaraxxus = ObjectAccessor::GetCreature(*player, instance->GetGuidData(NPC_JARAXXUS)))
+ {
+ jaraxxus->RemoveAurasDueToSpell(SPELL_JARAXXUS_CHAINS);
+ jaraxxus->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC);
+ jaraxxus->SetReactState(REACT_DEFENSIVE);
+ jaraxxus->SetInCombatWithZone();
+ }
+ else
+ {
+ instance->SetData(TYPE_EVENT, 1010);
+ instance->SetBossState(BOSS_JARAXXUS, NOT_STARTED);
+ }
}
+ else if (instance->GetBossState(BOSS_CRUSADERS) != DONE)
+ {
+ if (player->GetTeam() == ALLIANCE)
+ instance->SetData(TYPE_EVENT, 3000);
+ else
+ instance->SetData(TYPE_EVENT, 3001);
+ instance->SetBossState(BOSS_CRUSADERS, NOT_STARTED);
+ }
+ else if (instance->GetBossState(BOSS_VALKIRIES) != DONE)
+ {
+ instance->SetData(TYPE_EVENT, 4000);
+ instance->SetBossState(BOSS_VALKIRIES, NOT_STARTED);
+ }
+ else if (instance->GetBossState(BOSS_LICH_KING) != DONE)
+ {
+ if (me->GetMap()->GetPlayers().getFirst()->GetSource()->GetTeam() == ALLIANCE)
+ instance->SetData(TYPE_EVENT, 4020);
+ else
+ instance->SetData(TYPE_EVENT, 4030);
+ instance->SetBossState(BOSS_LICH_KING, NOT_STARTED);
+ }
+ me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ return true;
}
- else if (instance->GetBossState(BOSS_CRUSADERS) != DONE)
- {
- if (player->GetTeam() == ALLIANCE)
- instance->SetData(TYPE_EVENT, 3000);
- else
- instance->SetData(TYPE_EVENT, 3001);
- instance->SetBossState(BOSS_CRUSADERS, NOT_STARTED);
- }
- else if (instance->GetBossState(BOSS_VALKIRIES) != DONE)
- {
- instance->SetData(TYPE_EVENT, 4000);
- instance->SetBossState(BOSS_VALKIRIES, NOT_STARTED);
- }
- else if (instance->GetBossState(BOSS_LICH_KING) != DONE)
- {
- if (creature->GetMap()->GetPlayers().getFirst()->GetSource()->GetTeam() == ALLIANCE)
- instance->SetData(TYPE_EVENT, 4020);
- else
- instance->SetData(TYPE_EVENT, 4030);
- instance->SetBossState(BOSS_LICH_KING, NOT_STARTED);
- }
- creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
- return new npc_announcer_toc10AI(creature);
+ return GetInstanceAI<npc_announcer_toc10AI>(creature);
}
};
diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
index 4e11e4afdb9..7a2c01ce17c 100644
--- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/forge_of_souls.cpp
@@ -99,7 +99,7 @@ public:
Initialize();
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == MENU_ID_SYLVANAS && gossipListId == GOSSIP_OPTION_ID)
{
@@ -109,6 +109,7 @@ public:
events.Reset();
events.ScheduleEvent(EVENT_INTRO_1, 1000);
}
+ return false;
}
void UpdateAI(uint32 diff) override
@@ -196,7 +197,7 @@ public:
Initialize();
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == MENU_ID_JAINA && gossipListId == GOSSIP_OPTION_ID)
{
@@ -206,6 +207,7 @@ public:
events.Reset();
events.ScheduleEvent(EVENT_INTRO_1, 1000);
}
+ return false;
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
index 9bda4b0ae0a..af4e20ccb06 100644
--- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
+++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp
@@ -343,28 +343,27 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
public:
npc_jaina_or_sylvanas_intro_hor() : CreatureScript("npc_jaina_or_sylvanas_intro_hor") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI
{
- // override default gossip
- if (InstanceScript* instance = creature->GetInstanceScript())
- if (instance->GetData(DATA_QUEL_DELAR_EVENT) == IN_PROGRESS || instance->GetData(DATA_QUEL_DELAR_EVENT) == SPECIAL)
+ npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature)
+ {
+ _instance = me->GetInstanceScript();
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ // override default gossip
+ if (_instance->GetData(DATA_QUEL_DELAR_EVENT) == IN_PROGRESS || _instance->GetData(DATA_QUEL_DELAR_EVENT) == SPECIAL)
{
ClearGossipMenuFor(player);
return true;
}
- // load default gossip
- return false;
- }
-
- struct npc_jaina_or_sylvanas_intro_horAI : public ScriptedAI
- {
- npc_jaina_or_sylvanas_intro_horAI(Creature* creature) : ScriptedAI(creature)
- {
- _instance = me->GetInstanceScript();
+ // load default gossip
+ return false;
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
ClearGossipMenuFor(player);
@@ -383,6 +382,7 @@ class npc_jaina_or_sylvanas_intro_hor : public CreatureScript
default:
break;
}
+ return false;
}
void Reset() override
@@ -790,21 +790,6 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
public:
npc_jaina_or_sylvanas_escape_hor() : CreatureScript("npc_jaina_or_sylvanas_escape_hor") { }
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- // override default gossip
- if (InstanceScript* instance = creature->GetInstanceScript())
- if (instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
- {
- player->PrepareGossipMenu(creature, creature->GetEntry() == NPC_JAINA_ESCAPE ? GOSSIP_MENU_JAINA_FINAL : GOSSIP_MENU_SYLVANAS_FINAL, true);
- player->SendPreparedGossip(creature);
- return true;
- }
-
- // load default gossip
- return false;
- }
-
struct npc_jaina_or_sylvanas_escape_horAI : public ScriptedAI
{
npc_jaina_or_sylvanas_escape_horAI(Creature* creature) : ScriptedAI(creature),
@@ -858,7 +843,21 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
}
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ bool GossipHello(Player* player) override
+ {
+ // override default gossip
+ if (_instance->GetBossState(DATA_THE_LICH_KING_ESCAPE) == DONE)
+ {
+ player->PrepareGossipMenu(me, me->GetEntry() == NPC_JAINA_ESCAPE ? GOSSIP_MENU_JAINA_FINAL : GOSSIP_MENU_SYLVANAS_FINAL, true);
+ player->SendPreparedGossip(me);
+ return true;
+ }
+
+ // load default gossip
+ return false;
+ }
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
ClearGossipMenuFor(player);
@@ -872,6 +871,7 @@ class npc_jaina_or_sylvanas_escape_hor : public CreatureScript
default:
break;
}
+ return false;
}
void DestroyIceWall()
diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h
index 68de4c716c9..44f160e36b7 100644
--- a/src/server/scripts/Northrend/Gundrak/gundrak.h
+++ b/src/server/scripts/Northrend/Gundrak/gundrak.h
@@ -91,10 +91,10 @@ enum GDInstanceMisc
TIMER_STATUE_ACTIVATION = 3500
};
-template<class AI>
-inline AI* GetGundrakAI(Creature* creature)
+template<class AI, class T>
+inline AI* GetGundrakAI(T* obj)
{
- return GetInstanceAI<AI>(creature, GundrakScriptName);
+ return GetInstanceAI<AI>(obj, GundrakScriptName);
}
#endif // GUNDRAK_H_
diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
index b35b4f7696d..aed28522faf 100644
--- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
+++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp
@@ -18,6 +18,7 @@
#include "InstanceScript.h"
#include "Player.h"
#include "ScriptMgr.h"
+#include "GameObjectAI.h"
#include "gundrak.h"
#include "EventMap.h"
@@ -350,18 +351,25 @@ class go_gundrak_altar : public GameObjectScript
public:
go_gundrak_altar() : GameObjectScript("go_gundrak_altar") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_gundrak_altarAI : public GameObjectAI
{
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- go->SetGoState(GO_STATE_ACTIVE);
+ go_gundrak_altarAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- if (InstanceScript* instance = go->GetInstanceScript())
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
- instance->SetData(DATA_STATUE_ACTIVATE, go->GetEntry());
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ me->SetGoState(GO_STATE_ACTIVE);
+
+ instance->SetData(DATA_STATUE_ACTIVATE, me->GetEntry());
return true;
}
+ };
- return false;
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetGundrakAI<go_gundrak_altarAI>(go);
}
};
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
index ebf246affc2..db69da91e75 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp
@@ -636,13 +636,14 @@ class npc_high_overlord_saurfang_icc : public CreatureScript
_events.Reset();
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
{
if (menuId == GOSSIP_MENU_HIGH_OVERLORD_SAURFANG)
{
player->PlayerTalkClass->SendCloseGossip();
DoAction(ACTION_START_EVENT);
}
+ return false;
}
void DoAction(int32 action) override
@@ -832,13 +833,14 @@ class npc_muradin_bronzebeard_icc : public CreatureScript
_events.Reset();
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
{
if (menuId == GOSSIP_MENU_MURADIN_BRONZEBEARD)
{
player->PlayerTalkClass->SendCloseGossip();
DoAction(ACTION_START_EVENT);
}
+ return false;
}
void DoAction(int32 action) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
index 647ea054263..974ae333746 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp
@@ -962,7 +962,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
}
}
- void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
@@ -972,6 +972,7 @@ class npc_high_overlord_saurfang_igb : public CreatureScript
_events.ScheduleEvent(EVENT_INTRO_SUMMON_SKYBREAKER, 24600, 0, PHASE_INTRO);
_events.ScheduleEvent(EVENT_INTRO_H_3, 29600, 0, PHASE_INTRO);
_events.ScheduleEvent(EVENT_INTRO_H_4, 39200, 0, PHASE_INTRO);
+ return false;
}
void DamageTaken(Unit* , uint32& damage) override
@@ -1230,7 +1231,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
}
}
- void sGossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* /*player*/, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->GetTransport()->EnableMovement(true);
@@ -1241,6 +1242,7 @@ class npc_muradin_bronzebeard_igb : public CreatureScript
_events.ScheduleEvent(EVENT_INTRO_A_3, 33000, 0, PHASE_INTRO);
_events.ScheduleEvent(EVENT_INTRO_A_4, 39000, 0, PHASE_INTRO);
_events.ScheduleEvent(EVENT_INTRO_A_5, 45000, 0, PHASE_INTRO);
+ return false;
}
void DamageTaken(Unit* , uint32& damage) override
@@ -1395,10 +1397,11 @@ class npc_zafod_boombox : public CreatureScript
me->SetReactState(REACT_PASSIVE);
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
player->AddItem(ITEM_GOBLIN_ROCKET_PACK, 1);
player->PlayerTalkClass->SendCloseGossip();
+ return false;
}
void UpdateAI(uint32 /*diff*/) override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
index 34b505ae106..030a64d8a97 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -1222,7 +1222,7 @@ class npc_tirion_fordring_tft : public CreatureScript
me->LoadEquipment(1); // remove glow on ashbringer
}
- void sGossipSelect(Player* /*player*/, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* /*player*/, uint32 menuId, uint32 gossipListId) override
{
if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
{
@@ -1231,6 +1231,7 @@ class npc_tirion_fordring_tft : public CreatureScript
me->SetWalk(true);
me->GetMotionMaster()->MovePoint(POINT_TIRION_INTRO, TirionIntro);
}
+ return false;
}
void JustReachedHome() override
diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
index 108eb862287..1648274d02e 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp
@@ -115,7 +115,6 @@ enum ICCSpells
// Alchemist Adrianna
SPELL_HARVEST_BLIGHT_SPECIMEN = 72155,
- SPELL_HARVEST_BLIGHT_SPECIMEN25 = 72162,
// Crok Scourgebane
SPELL_ICEBOUND_ARMOR = 70714,
@@ -717,12 +716,22 @@ class npc_alchemist_adrianna : public CreatureScript
public:
npc_alchemist_adrianna() : CreatureScript("npc_alchemist_adrianna") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_alchemist_adriannaAI : public ScriptedAI
{
- if (!creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN) && !creature->FindCurrentSpellBySpellId(SPELL_HARVEST_BLIGHT_SPECIMEN25))
- if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
- creature->CastSpell(creature, SPELL_HARVEST_BLIGHT_SPECIMEN, false);
- return false;
+ npc_alchemist_adriannaAI(Creature* creature) : ScriptedAI(creature) { }
+
+ bool GossipHello(Player* player) override
+ {
+ if (!me->FindCurrentSpellBySpellId(sSpellMgr->GetSpellIdForDifficulty(SPELL_HARVEST_BLIGHT_SPECIMEN, me)))
+ if (player->HasAura(SPELL_ORANGE_BLIGHT_RESIDUE) && player->HasAura(SPELL_GREEN_BLIGHT_RESIDUE))
+ DoCastSelf(SPELL_HARVEST_BLIGHT_SPECIMEN, false);
+ return false;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_alchemist_adriannaAI(creature);
}
};
diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
index 609ba3d1003..f0490e7d1d4 100644
--- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
+++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp
@@ -388,21 +388,21 @@ class go_sapphiron_birth : public GameObjectScript
{
go_sapphiron_birthAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- void OnStateChanged(uint32 state, Unit* who) override
+ void OnLootStateChanged(uint32 state, Unit* who) override
{
if (state == GO_ACTIVATED)
{
if (who)
{
- if (Creature* sapphiron = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_SAPPHIRON)))
+ if (Creature* sapphiron = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_SAPPHIRON)))
sapphiron->AI()->DoAction(ACTION_BIRTH);
instance->SetData(DATA_HAD_SAPPHIRON_BIRTH, 1u);
}
}
else if (state == GO_JUST_DEACTIVATED)
{ // prevent ourselves from going back to _READY and resetting the client anim
- go->SetRespawnTime(0);
- go->Delete();
+ me->SetRespawnTime(0);
+ me->Delete();
}
}
diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
index 1a9216efda0..891e4af0732 100644
--- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
+++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
#include "Player.h"
@@ -224,22 +225,31 @@ class containment_sphere : public GameObjectScript
public:
containment_sphere() : GameObjectScript("containment_sphere") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct containment_sphereAI : public GameObjectAI
{
- InstanceScript* instance = go->GetInstanceScript();
+ containment_sphereAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
- Creature* pKeristrasza = ObjectAccessor::GetCreature(*go, instance->GetGuidData(DATA_KERISTRASZA));
- if (pKeristrasza && pKeristrasza->IsAlive())
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
- // maybe these are hacks :(
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- go->SetGoState(GO_STATE_ACTIVE);
+ Creature* keristrasza = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_KERISTRASZA));
+ if (keristrasza && keristrasza->IsAlive())
+ {
+ // maybe these are hacks :(
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ me->SetGoState(GO_STATE_ACTIVE);
- ENSURE_AI(boss_keristrasza::boss_keristraszaAI, pKeristrasza->AI())->CheckContainmentSpheres(true);
+ ENSURE_AI(boss_keristrasza::boss_keristraszaAI, keristrasza->AI())->CheckContainmentSpheres(true);
+ }
+ return true;
}
- return true;
- }
+ };
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetInstanceAI<containment_sphereAI>(go);
+ }
};
class spell_intense_cold : public SpellScriptLoader
diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
index 66095046f66..4aa0cf0d76e 100644
--- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
+++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp
@@ -141,7 +141,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
player->DestroyItemCount(itemId, 1, true, false);
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
switch (menuId)
{
@@ -156,7 +156,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
StoreEssence(player, ITEM_EMERALD_ESSENCE);
break;
}
- return;
+ return false;
case GOSSIP_MENU_ETERNOS:
if (gossipListId >= 1 && gossipListId <= 3)
{
@@ -168,7 +168,7 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
StoreEssence(player, ITEM_AMBER_ESSENCE);
break;
}
- return;
+ return false;
case GOSSIP_MENU_BELGARISTRASZ:
if (gossipListId <= 2)
{
@@ -180,11 +180,12 @@ class npc_verdisa_beglaristrasz_eternos : public CreatureScript
StoreEssence(player, ITEM_RUBY_ESSENCE);
break;
}
- return;
+ return false;
default:
- return;
+ return false;
}
player->PlayerTalkClass->SendCloseGossip();
+ return false;
}
void MovementInform(uint32 /*type*/, uint32 id) override
diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
index fdb0b539804..9937f4d6fc7 100644
--- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
+++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/halls_of_stone.cpp
@@ -269,29 +269,6 @@ class npc_brann_hos : public CreatureScript
public:
npc_brann_hos() : CreatureScript("npc_brann_hos") { }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF+1 || action == GOSSIP_ACTION_INFO_DEF+2)
- {
- CloseGossipMenuFor(player);
- ENSURE_AI(npc_brann_hos::npc_brann_hosAI, creature->AI())->StartWP();
- }
-
- return true;
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
-
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_START, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, TEXT_ID_START, creature->GetGUID());
-
- return true;
- }
-
struct npc_brann_hosAI : public npc_escortAI
{
npc_brann_hosAI(Creature* creature) : npc_escortAI(creature)
@@ -705,6 +682,30 @@ public:
DoMeleeAttackIfReady();
}
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ if (action == GOSSIP_ACTION_INFO_DEF + 1 || action == GOSSIP_ACTION_INFO_DEF + 2)
+ {
+ CloseGossipMenuFor(player);
+ StartWP();
+ }
+
+ return true;
+ }
+
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_START, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, TEXT_ID_START, me->GetGUID());
+
+ return true;
+ }
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
index 07dd5d6bc24..3e92fb5c2ea 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp
@@ -976,17 +976,17 @@ class go_celestial_planetarium_access : public GameObjectScript
struct go_celestial_planetarium_accessAI : public GameObjectAI
{
- go_celestial_planetarium_accessAI(GameObject* go) : GameObjectAI(go)
- {
- }
+ go_celestial_planetarium_accessAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
bool GossipHello(Player* player, bool /*reportUse*/) override
{
- if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE))
+ if (me->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE))
return true;
bool hasKey = true;
- if (LockEntry const* lock = sLockStore.LookupEntry(go->GetGOInfo()->goober.lockId))
+ if (LockEntry const* lock = sLockStore.LookupEntry(me->GetGOInfo()->goober.lockId))
{
hasKey = false;
for (uint32 i = 0; i < MAX_LOCK_CASE; ++i)
@@ -1006,20 +1006,17 @@ class go_celestial_planetarium_access : public GameObjectScript
return false;
// Start Algalon event
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_IN_USE);
_events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5000);
- if (Creature* brann = go->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannIntroSpawnPos))
+ if (Creature* brann = me->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannIntroSpawnPos))
brann->AI()->DoAction(ACTION_START_INTRO);
- if (InstanceScript* instance = go->GetInstanceScript())
- {
- instance->SetData(DATA_ALGALON_SUMMON_STATE, 1);
- if (GameObject* sigil = ObjectAccessor::GetGameObject(*go, instance->GetGuidData(DATA_SIGILDOOR_01)))
- sigil->SetGoState(GO_STATE_ACTIVE);
+ instance->SetData(DATA_ALGALON_SUMMON_STATE, 1);
+ if (GameObject* sigil = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_SIGILDOOR_01)))
+ sigil->SetGoState(GO_STATE_ACTIVE);
- if (GameObject* sigil = ObjectAccessor::GetGameObject(*go, instance->GetGuidData(DATA_SIGILDOOR_02)))
- sigil->SetGoState(GO_STATE_ACTIVE);
- }
+ if (GameObject* sigil = ObjectAccessor::GetGameObject(*me, instance->GetGuidData(DATA_SIGILDOOR_02)))
+ sigil->SetGoState(GO_STATE_ACTIVE);
return false;
}
@@ -1036,7 +1033,7 @@ class go_celestial_planetarium_access : public GameObjectScript
switch (eventId)
{
case EVENT_DESPAWN_CONSOLE:
- go->Delete();
+ me->Delete();
break;
}
}
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
index 87129eefd9a..e78dc7f8ac5 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp
@@ -26,6 +26,7 @@
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
#include "Cell.h"
#include "CellImpl.h"
#include "GridNotifiers.h"
@@ -1185,7 +1186,7 @@ class npc_brann_bronzebeard_ulduar_intro : public CreatureScript
_instance = creature->GetInstanceScript();
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == GOSSIP_MENU_BRANN_BRONZEBEARD && gossipListId == GOSSIP_OPTION_BRANN_BRONZEBEARD)
{
@@ -1194,6 +1195,7 @@ class npc_brann_bronzebeard_ulduar_intro : public CreatureScript
if (Creature* loreKeeper = _instance->GetCreature(DATA_LORE_KEEPER_OF_NORGANNON))
loreKeeper->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
}
+ return false;
}
private:
@@ -1238,7 +1240,7 @@ class npc_lorekeeper : public CreatureScript
}
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == GOSSIP_MENU_LORE_KEEPER && gossipListId == GOSSIP_OPTION_LORE_KEEPER)
{
@@ -1262,6 +1264,7 @@ class npc_lorekeeper : public CreatureScript
}
}
}
+ return false;
}
private:
@@ -1279,30 +1282,38 @@ class go_ulduar_tower : public GameObjectScript
public:
go_ulduar_tower() : GameObjectScript("go_ulduar_tower") { }
- void OnDestroyed(GameObject* go, Player* /*player*/) override
+ struct go_ulduar_towerAI : public GameObjectAI
+ {
+ go_ulduar_towerAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
+
+ void Destroyed(Player* /*player*/, uint32 /*eventId*/) override
+ {
+ switch (me->GetEntry())
+ {
+ case GO_TOWER_OF_STORMS:
+ instance->ProcessEvent(me, EVENT_TOWER_OF_STORM_DESTROYED);
+ break;
+ case GO_TOWER_OF_FLAMES:
+ instance->ProcessEvent(me, EVENT_TOWER_OF_FLAMES_DESTROYED);
+ break;
+ case GO_TOWER_OF_FROST:
+ instance->ProcessEvent(me, EVENT_TOWER_OF_FROST_DESTROYED);
+ break;
+ case GO_TOWER_OF_LIFE:
+ instance->ProcessEvent(me, EVENT_TOWER_OF_LIFE_DESTROYED);
+ break;
+ }
+
+ if (Creature* trigger = me->FindNearestCreature(NPC_ULDUAR_GAUNTLET_GENERATOR, 15.0f, true))
+ trigger->DisappearAndDie();
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
{
- InstanceScript* instance = go->GetInstanceScript();
- if (!instance)
- return;
-
- switch (go->GetEntry())
- {
- case GO_TOWER_OF_STORMS:
- instance->ProcessEvent(go, EVENT_TOWER_OF_STORM_DESTROYED);
- break;
- case GO_TOWER_OF_FLAMES:
- instance->ProcessEvent(go, EVENT_TOWER_OF_FLAMES_DESTROYED);
- break;
- case GO_TOWER_OF_FROST:
- instance->ProcessEvent(go, EVENT_TOWER_OF_FROST_DESTROYED);
- break;
- case GO_TOWER_OF_LIFE:
- instance->ProcessEvent(go, EVENT_TOWER_OF_LIFE_DESTROYED);
- break;
- }
-
- if (Creature* trigger = go->FindNearestCreature(NPC_ULDUAR_GAUNTLET_GENERATOR, 15.0f, true))
- trigger->DisappearAndDie();
+ return GetUlduarAI<go_ulduar_towerAI>(go);
}
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
index 8152183231c..5742d607e41 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp
@@ -23,6 +23,7 @@
#include "ScriptedCreature.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
+#include "GameObjectAI.h"
#include "ulduar.h"
#include "Vehicle.h"
@@ -1645,20 +1646,29 @@ class go_mimiron_hardmode_button : public GameObjectScript
public:
go_mimiron_hardmode_button() : GameObjectScript("go_mimiron_hardmode_button") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_mimiron_hardmode_buttonAI : public GameObjectAI
{
- if (go->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE))
- return true;
+ go_mimiron_hardmode_buttonAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
+ {
+ if (me->HasFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE))
+ return true;
- InstanceScript* instance = go->GetInstanceScript();
- if (!instance)
- return false;
+ if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
+ computer->AI()->DoAction(DO_ACTIVATE_COMPUTER);
- if (Creature* computer = instance->GetCreature(DATA_COMPUTER))
- computer->AI()->DoAction(DO_ACTIVATE_COMPUTER);
- go->SetGoState(GO_STATE_ACTIVE);
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- return true;
+ me->SetGoState(GO_STATE_ACTIVE);
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ return true;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetUlduarAI<go_mimiron_hardmode_buttonAI>(go);
}
};
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
index e6aa2654d54..67f603fc9fe 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp
@@ -20,6 +20,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
+#include "GameObjectAI.h"
#include "SpellScript.h"
#include "ulduar.h"
#include "SpellInfo.h"
@@ -316,12 +317,23 @@ class go_razorscale_harpoon : public GameObjectScript
public:
go_razorscale_harpoon() : GameObjectScript("go_razorscale_harpoon") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_razorscale_harpoonAI : public GameObjectAI
{
- if (InstanceScript* instance = go->GetInstanceScript())
+ go_razorscale_harpoonAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
+ {
if (instance->GetCreature(BOSS_RAZORSCALE))
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- return false;
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ return false;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetUlduarAI<go_razorscale_harpoonAI>(go);
}
};
@@ -734,36 +746,37 @@ class npc_expedition_commander : public CreatureScript
else
AttackStartTimer -= Diff;
}
- };
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF:
- CloseGossipMenuFor(player);
- ENSURE_AI(npc_expedition_commanderAI, creature->AI())->Phase = 1;
- break;
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF:
+ CloseGossipMenuFor(player);
+ Phase = 1;
+ break;
+ }
+ return true;
}
- return true;
- }
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- InstanceScript* instance = creature->GetInstanceScript();
- if (instance && instance->GetBossState(BOSS_RAZORSCALE) == NOT_STARTED)
+ bool GossipHello(Player* player) override
{
- player->PrepareGossipMenu(creature);
+ if (instance->GetBossState(BOSS_RAZORSCALE) == NOT_STARTED)
+ {
+ player->PrepareGossipMenu(me);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- SendGossipMenuFor(player, 13853, creature->GetGUID());
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ SendGossipMenuFor(player, 13853, me->GetGUID());
+ }
+ else
+ SendGossipMenuFor(player, 13910, me->GetGUID());
+
+ return true;
}
- else
- SendGossipMenuFor(player, 13910, creature->GetGUID());
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
index 69404eacbad..be7b317c9d9 100644
--- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
+++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yogg_saron.cpp
@@ -1523,10 +1523,10 @@ class npc_observation_ring_keeper : public CreatureScript
DoCast(SPELL_KEEPER_ACTIVE);
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 /*gossipListId*/) override
{
if (menuId != 10333)
- return;
+ return false;
me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
me->DespawnOrUnsummon(2000);
@@ -1549,6 +1549,7 @@ class npc_observation_ring_keeper : public CreatureScript
me->SummonCreature(NPC_MIMIRON_YS, YSKeepersPos[3]);
break;
}
+ return false;
}
void UpdateAI(uint32 /*diff*/) override { }
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
index d39608cb53f..07699fed87d 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_palehoof.cpp
@@ -17,6 +17,7 @@
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "utgarde_pinnacle.h"
#include "SpellScript.h"
#include "SpellAuraEffects.h"
@@ -555,19 +556,30 @@ class go_palehoof_sphere : public GameObjectScript
public:
go_palehoof_sphere() : GameObjectScript("go_palehoof_sphere") { }
- bool OnGossipHello(Player* /*player*/, GameObject* go) override
+ struct go_palehoof_sphereAI : public GameObjectAI
{
- if (InstanceScript* instance = go->GetInstanceScript())
+ go_palehoof_sphereAI(GameObject* go) : GameObjectAI(go), instance(go->GetInstanceScript()) { }
+
+ InstanceScript* instance;
+
+ bool GossipHello(Player* /*player*/, bool /*reportUse*/) override
{
if (Creature* palehoof = instance->GetCreature(DATA_GORTOK_PALEHOOF))
+ {
if (palehoof->IsAlive() && instance->GetBossState(DATA_GORTOK_PALEHOOF) != DONE)
{
- go->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
- go->SetGoState(GO_STATE_ACTIVE);
+ me->SetFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
+ me->SetGoState(GO_STATE_ACTIVE);
palehoof->AI()->DoAction(ACTION_START_ENCOUNTER);
}
+ }
+ return true;
}
- return true;
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return GetUtgardePinnacleAI<go_palehoof_sphereAI>(go);
}
};
diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
index a2d5004c6e8..f4d217c74f3 100644
--- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
+++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/utgarde_pinnacle.h
@@ -95,10 +95,10 @@ enum UPGameObjectIds
GO_KING_YMIRON_DOOR = 192174
};
-template<class AI>
-AI* GetUtgardePinnacleAI(Creature* creature)
+template<class AI, class T>
+AI* GetUtgardePinnacleAI(T* obj)
{
- return GetInstanceAI<AI>(creature, UPScriptName);
+ return GetInstanceAI<AI>(obj, UPScriptName);
}
#endif // UTGARDE_PINNACLE_H_
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
index b2061ea6369..e6dd7bd218c 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp
@@ -18,6 +18,7 @@
#include "Player.h"
#include "ScriptMgr.h"
#include "ScriptedCreature.h"
+#include "GameObjectAI.h"
#include "ScriptedGossip.h"
#include "ScriptedEscortAI.h"
#include "SpellAuraEffects.h"
@@ -317,30 +318,6 @@ class npc_sinclari_vh : public CreatureScript
public:
npc_sinclari_vh() : CreatureScript("npc_sinclari_vh") { }
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- // override default gossip
- if (InstanceScript* instance = creature->GetInstanceScript())
- {
- switch (instance->GetData(DATA_MAIN_EVENT_STATE))
- {
- case IN_PROGRESS:
- player->PrepareGossipMenu(creature, GOSSIP_MENU_SEND_ME_IN, true);
- player->SendPreparedGossip(creature);
- return true;
- case DONE:
- return true; // NYI
- case NOT_STARTED:
- case FAIL:
- default:
- break;
- }
- }
-
- // load default gossip
- return false;
- }
-
struct npc_sinclariAI : public ScriptedAI
{
npc_sinclariAI(Creature* creature) : ScriptedAI(creature), _summons(creature)
@@ -369,7 +346,28 @@ class npc_sinclari_vh : public CreatureScript
}
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipHello(Player* player) override
+ {
+ // override default gossip
+ switch (_instance->GetData(DATA_MAIN_EVENT_STATE))
+ {
+ case IN_PROGRESS:
+ player->PrepareGossipMenu(me, GOSSIP_MENU_SEND_ME_IN, true);
+ player->SendPreparedGossip(me);
+ return true;
+ case DONE:
+ return true; // NYI
+ case NOT_STARTED:
+ case FAIL:
+ default:
+ break;
+ }
+
+ // load default gossip
+ return false;
+ }
+
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == GOSSIP_MENU_START_ENCOUNTER && gossipListId == 0)
{
@@ -383,6 +381,7 @@ class npc_sinclari_vh : public CreatureScript
me->CastSpell(player, SPELL_TELEPORT_PLAYER, true);
player->PlayerTalkClass->SendCloseGossip();
}
+ return false;
}
void DoAction(int32 actionId) override
@@ -1309,10 +1308,20 @@ class go_activation_crystal : public GameObjectScript
public:
go_activation_crystal() : GameObjectScript("go_activation_crystal") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) override
+ struct go_activation_crystalAI : public GameObjectAI
+ {
+ go_activation_crystalAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player, bool /*reportUse*/) override
+ {
+ player->CastSpell(player, SPELL_CRYSTAL_ACTIVATION, true);
+ return false;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
{
- player->CastSpell(player, SPELL_CRYSTAL_ACTIVATION, true);
- return false;
+ return GetVioletHoldAI<go_activation_crystalAI>(go);
}
};
diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.h b/src/server/scripts/Northrend/VioletHold/violet_hold.h
index 537c5d51b1e..4238634d8c1 100644
--- a/src/server/scripts/Northrend/VioletHold/violet_hold.h
+++ b/src/server/scripts/Northrend/VioletHold/violet_hold.h
@@ -151,10 +151,10 @@ enum VHInstanceMisc
POINT_INTRO = 1
};
-template<class AI>
-inline AI* GetVioletHoldAI(Creature* creature)
+template<class AI, class T>
+inline AI* GetVioletHoldAI(T* obj)
{
- return GetInstanceAI<AI>(creature, VioletHoldScriptName);
+ return GetInstanceAI<AI>(obj, VioletHoldScriptName);
}
#endif // VIOLET_HOLD_H_
diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp
index e00d2489de8..595e53ea9d5 100644
--- a/src/server/scripts/Northrend/zone_borean_tundra.cpp
+++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp
@@ -241,31 +241,40 @@ class npc_corastrasza : public CreatureScript
public:
npc_corastrasza() : CreatureScript("npc_corastrasza") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_corastraszaAI : public ScriptedAI
{
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ npc_corastraszaAI(Creature* creature) : ScriptedAI(creature) { }
- if (player->GetQuestStatus(QUEST_ACES_HIGH) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_ACES_HIGH_DAILY) == QUEST_STATUS_INCOMPLETE) //It's the same dragon for both quests.
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_C_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
+ if (player->GetQuestStatus(QUEST_ACES_HIGH) == QUEST_STATUS_INCOMPLETE || player->GetQuestStatus(QUEST_ACES_HIGH_DAILY) == QUEST_STATUS_INCOMPLETE) //It's the same dragon for both quests.
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_C_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- CloseGossipMenuFor(player);
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
- player->CastSpell(player, SPELL_SUMMON_WYRMREST_SKYTALON, true);
- player->CastSpell(player, SPELL_WYRMREST_SKYTALON_RIDE_PERIODIC, 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);
+ player->CastSpell(player, SPELL_SUMMON_WYRMREST_SKYTALON, true);
+ player->CastSpell(player, SPELL_WYRMREST_SKYTALON_RIDE_PERIODIC, true);
+ }
+ return true;
}
+ };
- return true;
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_corastraszaAI(creature);
}
};
@@ -287,27 +296,38 @@ class npc_iruk : public CreatureScript
public:
npc_iruk() : CreatureScript("npc_iruk") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_irukAI : public ScriptedAI
{
- if (player->GetQuestStatus(QUEST_SPIRITS_WATCH_OVER_US) == QUEST_STATUS_INCOMPLETE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_I, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ npc_irukAI(Creature* creature) : ScriptedAI(creature) { }
- player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXT_I, creature->GetGUID());
- return true;
- }
+ bool GossipHello(Player* player) override
+ {
+ if (player->GetQuestStatus(QUEST_SPIRITS_WATCH_OVER_US) == QUEST_STATUS_INCOMPLETE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_I, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
+ player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXT_I, me->GetGUID());
+ return true;
+ }
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF+1:
- player->CastSpell(player, SPELL_CREATURE_TOTEM_OF_ISSLIRUK, true);
- CloseGossipMenuFor(player);
- break;
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ player->CastSpell(player, SPELL_CREATURE_TOTEM_OF_ISSLIRUK, true);
+ CloseGossipMenuFor(player);
+ break;
+ }
+ return true;
}
- return true;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_irukAI(creature);
}
};
@@ -643,41 +663,37 @@ public:
if (!UpdateVictim())
return;
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_lurgglbrAI(creature);
- }
-
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_ESCAPE_WINTERFIN_CAVERNS)
+ void QuestAccept(Player* player, Quest const* quest) override
{
- if (GameObject* go = creature->FindNearestGameObject(GO_CAGE, 5.0f))
+ if (quest->GetQuestId() == QUEST_ESCAPE_WINTERFIN_CAVERNS)
{
- go->SetRespawnTime(0);
- go->SetGoType(GAMEOBJECT_TYPE_BUTTON);
- go->UseDoorOrButton(20);
- }
+ if (GameObject* go = me->FindNearestGameObject(GO_CAGE, 5.0f))
+ {
+ go->SetRespawnTime(0);
+ go->SetGoType(GAMEOBJECT_TYPE_BUTTON);
+ go->UseDoorOrButton(20);
+ }
- if (npc_escortAI* pEscortAI = CAST_AI(npc_lurgglbr::npc_lurgglbrAI, creature->AI()))
- pEscortAI->Start(true, false, player->GetGUID());
+ Start(true, false, player->GetGUID());
- switch (player->GetTeam())
- {
- case ALLIANCE:
- creature->SetFaction(FACTION_ESCORTEE_A);
- break;
- default:
- case HORDE:
- creature->SetFaction(FACTION_ESCORTEE_H);
- break;
+ switch (player->GetTeam())
+ {
+ case ALLIANCE:
+ me->SetFaction(FACTION_ESCORTEE_A);
+ break;
+ default:
+ case HORDE:
+ me->SetFaction(FACTION_ESCORTEE_H);
+ break;
+ }
}
-
- return true;
}
- return false;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_lurgglbrAI(creature);
}
};
@@ -1046,33 +1062,33 @@ public:
if (Creature* arthas = ObjectAccessor::GetCreature(*me, arthasGUID))
arthas->RemoveFromWorld();
}
- };
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
- if (player->GetQuestStatus(QUEST_LAST_RITES) == QUEST_STATUS_INCOMPLETE && creature->GetAreaId() == 4128)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_T, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
+ if (player->GetQuestStatus(QUEST_LAST_RITES) == QUEST_STATUS_INCOMPLETE && me->GetAreaId() == 4128)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_T, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- return true;
- }
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF+1:
- ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
- ENSURE_AI(npc_escortAI, (creature->AI()))->SetMaxPlayerDistance(200.0f);
- break;
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ Start(true, false, player->GetGUID());
+ SetMaxPlayerDistance(200.0f);
+ break;
+ }
+ return true;
}
- return true;
- }
+ };
CreatureAI* GetAI(Creature* creature) const override
{
@@ -1621,26 +1637,6 @@ class npc_mootoo_the_younger : public CreatureScript
public:
npc_mootoo_the_younger() : CreatureScript("npc_mootoo_the_younger") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_ESCAPING_THE_MIST)
- {
- switch (player->GetTeam())
- {
- case ALLIANCE:
- creature->SetFaction(FACTION_ESCORTEE_A);
- break;
- case HORDE:
- creature->SetFaction(FACTION_ESCORTEE_H);
- break;
- }
- creature->SetStandState(UNIT_STAND_STATE_STAND);
- creature->AI()->Talk(SAY_1, player);
- ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID());
- }
- return true;
- }
-
struct npc_mootoo_the_youngerAI : public npc_escortAI
{
npc_mootoo_the_youngerAI(Creature* creature) : npc_escortAI(creature) { }
@@ -1685,6 +1681,25 @@ public:
break;
}
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_ESCAPING_THE_MIST)
+ {
+ switch (player->GetTeam())
+ {
+ case ALLIANCE:
+ me->SetFaction(FACTION_ESCORTEE_A);
+ break;
+ case HORDE:
+ me->SetFaction(FACTION_ESCORTEE_H);
+ break;
+ }
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ Talk(SAY_1, player);
+ Start(true, false, player->GetGUID());
+ }
+ }
};
CreatureAI* GetAI(Creature* creature) const override
@@ -1711,17 +1726,6 @@ class npc_bonker_togglevolt : public CreatureScript
public:
npc_bonker_togglevolt() : CreatureScript("npc_bonker_togglevolt") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_GET_ME_OUTA_HERE)
- {
- creature->SetStandState(UNIT_STAND_STATE_STAND);
- creature->AI()->Talk(SAY_BONKER_2, player);
- ENSURE_AI(npc_escortAI, (creature->AI()))->Start(true, true, player->GetGUID());
- }
- return true;
- }
-
struct npc_bonker_togglevoltAI : public npc_escortAI
{
npc_bonker_togglevoltAI(Creature* creature) : npc_escortAI(creature)
@@ -1775,6 +1779,16 @@ public:
break;
}
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_GET_ME_OUTA_HERE)
+ {
+ me->SetStandState(UNIT_STAND_STATE_STAND);
+ Talk(SAY_BONKER_2, player);
+ Start(true, true, player->GetGUID());
+ }
+ }
};
CreatureAI* GetAI(Creature* creature) const override
@@ -2209,11 +2223,6 @@ public:
uiEventPhase = 1;
}
- void SetGUID(ObjectGuid uiGuid, int32 /*iId*/) override
- {
- uiPlayerGUID = uiGuid;
- }
-
void AttackPlayer()
{
me->SetFaction(14);
@@ -2280,65 +2289,65 @@ public:
DoMeleeAttackIfReady();
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_hidden_cultistAI(creature);
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- uint32 uiGossipText = 0;
- const char* charGossipItem;
- switch (creature->GetEntry())
+ bool GossipHello(Player* player) override
{
- case NPC_TOM_HEGGER:
- uiGossipText = GOSSIP_TEXT_TOM_HEGGER;
- charGossipItem = GOSSIP_ITEM_TOM_HEGGER;
- break;
- case NPC_SALTY_JOHN_THORPE:
- uiGossipText = GOSSIP_TEXT_SALTY_JOHN_THORPE;
- charGossipItem = GOSSIP_ITEM_SALTY_JOHN_THORPE;
- break;
- case NPC_GUARD_MITCHELLS:
- uiGossipText = GOSSIP_TEXT_GUARD_MITCHELSS;
- charGossipItem = GOSSIP_ITEM_GUARD_MITCHELLS;
- break;
- default:
- charGossipItem = "";
- return false;
- }
+ uint32 uiGossipText = 0;
+ const char* charGossipItem;
- if (player->HasAura(SPELL_RIGHTEOUS_VISION) && player->GetQuestStatus(QUEST_THE_HUNT_IS_ON) == QUEST_STATUS_INCOMPLETE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, charGossipItem, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ switch (me->GetEntry())
+ {
+ case NPC_TOM_HEGGER:
+ uiGossipText = GOSSIP_TEXT_TOM_HEGGER;
+ charGossipItem = GOSSIP_ITEM_TOM_HEGGER;
+ break;
+ case NPC_SALTY_JOHN_THORPE:
+ uiGossipText = GOSSIP_TEXT_SALTY_JOHN_THORPE;
+ charGossipItem = GOSSIP_ITEM_SALTY_JOHN_THORPE;
+ break;
+ case NPC_GUARD_MITCHELLS:
+ uiGossipText = GOSSIP_TEXT_GUARD_MITCHELSS;
+ charGossipItem = GOSSIP_ITEM_GUARD_MITCHELLS;
+ break;
+ default:
+ charGossipItem = "";
+ return false;
+ }
- if (creature->IsVendor())
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+ if (player->HasAura(SPELL_RIGHTEOUS_VISION) && player->GetQuestStatus(QUEST_THE_HUNT_IS_ON) == QUEST_STATUS_INCOMPLETE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, charGossipItem, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- SendGossipMenuFor(player, uiGossipText, creature->GetGUID());
+ if (me->IsVendor())
+ AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
- return true;
- }
+ SendGossipMenuFor(player, uiGossipText, me->GetGUID());
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
+ return true;
+ }
- if (action == GOSSIP_ACTION_INFO_DEF+1)
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- CloseGossipMenuFor(player);
- creature->AI()->SetGUID(player->GetGUID());
- creature->AI()->DoAction(1);
- }
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_TRADE)
- player->GetSession()->SendListInventory(creature->GetGUID());
+ if (action == GOSSIP_ACTION_INFO_DEF + 1)
+ {
+ CloseGossipMenuFor(player);
+ uiPlayerGUID = player->GetGUID();
+ DoAction(1);
+ }
- return true;
- }
+ if (action == GOSSIP_ACTION_TRADE)
+ player->GetSession()->SendListInventory(me->GetGUID());
+ return true;
+ }
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_hidden_cultistAI(creature);
+ }
};
enum WindsoulTotemAura
diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp
index de8633283cc..219e6514b1e 100644
--- a/src/server/scripts/Northrend/zone_dragonblight.cpp
+++ b/src/server/scripts/Northrend/zone_dragonblight.cpp
@@ -494,33 +494,6 @@ class npc_wyrmrest_defender : public CreatureScript
public:
npc_wyrmrest_defender() : CreatureScript("npc_wyrmrest_defender") { }
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (player->GetQuestStatus(QUEST_DEFENDING_WYRMREST_TEMPLE) == QUEST_STATUS_INCOMPLETE)
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, GOSSIP_TEXTID_DEF1, creature->GetGUID());
- }
- else
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
-
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- if (action == GOSSIP_ACTION_INFO_DEF+1)
- {
- SendGossipMenuFor(player, GOSSIP_TEXTID_DEF2, creature->GetGUID());
- // Makes player cast trigger spell for 49207 on self
- player->CastSpell(player, SPELL_CHARACTER_SCRIPT, true);
- // The gossip should not auto close
- }
-
- return true;
- }
-
struct npc_wyrmrest_defenderAI : public VehicleAI
{
npc_wyrmrest_defenderAI(Creature* creature) : VehicleAI(creature)
@@ -592,6 +565,34 @@ class npc_wyrmrest_defender : public CreatureScript
break;
}
}
+
+ bool GossipHello(Player* player) override
+ {
+ if (player->GetQuestStatus(QUEST_DEFENDING_WYRMREST_TEMPLE) == QUEST_STATUS_INCOMPLETE)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, GOSSIP_TEXTID_DEF1, me->GetGUID());
+ }
+ else
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+
+ return 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)
+ {
+ SendGossipMenuFor(player, GOSSIP_TEXTID_DEF2, me->GetGUID());
+ // Makes player cast trigger spell for 49207 on self
+ player->CastSpell(player, SPELL_CHARACTER_SCRIPT, true);
+ // The gossip should not auto close
+ }
+
+ return true;
+ }
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
index e71a92b3e0c..ec3dd5fb5af 100644
--- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp
+++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp
@@ -185,25 +185,23 @@ public:
_RavenousworgGUID.Clear();
}
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_PERILOUS_ADVENTURE)
+ {
+ Talk(SAY_QUEST_ACCEPT);
+ if (Creature* Mrfloppy = GetClosestCreatureWithEntry(me, NPC_MRFLOPPY, 180.0f))
+ Mrfloppy->GetMotionMaster()->MoveFollow(me, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
+
+ Start(true, false, player->GetGUID());
+ }
+ }
+
private:
ObjectGuid _RavenousworgGUID;
ObjectGuid _mrfloppyGUID;
};
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_PERILOUS_ADVENTURE)
- {
- creature->AI()->Talk(SAY_QUEST_ACCEPT);
- if (Creature* Mrfloppy = GetClosestCreatureWithEntry(creature, NPC_MRFLOPPY, 180.0f))
- Mrfloppy->GetMotionMaster()->MoveFollow(creature, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
-
- if (npc_escortAI* pEscortAI = CAST_AI(npc_emily::npc_emilyAI, (creature->AI())))
- pEscortAI->Start(true, false, player->GetGUID());
- }
- return true;
- }
-
CreatureAI* GetAI(Creature* creature) const override
{
return new npc_emilyAI(creature);
@@ -763,9 +761,10 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
DoCast(player, SPELL_SUMMON_ASHWOOD_BRAND);
+ return false;
}
private:
diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp
index 4061d69d021..7abe719ef71 100644
--- a/src/server/scripts/Northrend/zone_howling_fjord.cpp
+++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp
@@ -79,15 +79,6 @@ class npc_apothecary_hanes : public CreatureScript
public:
npc_apothecary_hanes() : CreatureScript("npc_apothecary_hanes") { }
- bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE)
- {
- ENSURE_AI(npc_Apothecary_HanesAI, (creature->AI()))->StartEscort(player);
- }
- return true;
- }
-
struct npc_Apothecary_HanesAI : public npc_escortAI
{
npc_Apothecary_HanesAI(Creature* creature) : npc_escortAI(creature)
@@ -252,6 +243,12 @@ public:
break;
}
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE)
+ StartEscort(player);
+ }
};
CreatureAI* GetAI(Creature* creature) const override
@@ -332,50 +329,63 @@ class npc_razael_and_lyana : public CreatureScript
public:
npc_razael_and_lyana() : CreatureScript("npc_razael_and_lyana") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_razael_and_lyanaAI : public ScriptedAI
{
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ npc_razael_and_lyanaAI(Creature* creature) : ScriptedAI(creature) { }
- if (player->GetQuestStatus(QUEST_REPORTS_FROM_THE_FIELD) == QUEST_STATUS_INCOMPLETE)
- switch (creature->GetEntry())
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ if (player->GetQuestStatus(QUEST_REPORTS_FROM_THE_FIELD) == QUEST_STATUS_INCOMPLETE)
{
- case NPC_RAZAEL:
- if (!player->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_RAZAEL))
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_RAZAEL_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- SendGossipMenuFor(player, GOSSIP_TEXTID_RAZAEL1, creature->GetGUID());
- return true;
- }
- break;
- case NPC_LYANA:
- if (!player->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_LYANA))
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LYANA_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- SendGossipMenuFor(player, GOSSIP_TEXTID_LYANA1, creature->GetGUID());
- return true;
- }
- break;
+ switch (me->GetEntry())
+ {
+ case NPC_RAZAEL:
+ if (!player->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_RAZAEL))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_RAZAEL_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, GOSSIP_TEXTID_RAZAEL1, me->GetGUID());
+ return true;
+ }
+ break;
+ case NPC_LYANA:
+ if (!player->GetReqKillOrCastCurrentCount(QUEST_REPORTS_FROM_THE_FIELD, NPC_LYANA))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_LYANA_REPORT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ SendGossipMenuFor(player, GOSSIP_TEXTID_LYANA1, me->GetGUID());
+ return true;
+ }
+ break;
+ }
}
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF + 1:
- SendGossipMenuFor(player, GOSSIP_TEXTID_RAZAEL2, creature->GetGUID());
- player->TalkedToCreature(NPC_RAZAEL, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF + 2:
- SendGossipMenuFor(player, GOSSIP_TEXTID_LYANA2, creature->GetGUID());
- player->TalkedToCreature(NPC_LYANA, creature->GetGUID());
- break;
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ SendGossipMenuFor(player, GOSSIP_TEXTID_RAZAEL2, me->GetGUID());
+ player->TalkedToCreature(NPC_RAZAEL, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ SendGossipMenuFor(player, GOSSIP_TEXTID_LYANA2, me->GetGUID());
+ player->TalkedToCreature(NPC_LYANA, me->GetGUID());
+ break;
+ }
+ return true;
}
- return true;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_razael_and_lyanaAI(creature);
}
};
@@ -405,17 +415,6 @@ class npc_daegarn : public CreatureScript
public:
npc_daegarn() : CreatureScript("npc_daegarn") { }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_DEFEAT_AT_RING)
- {
- if (npc_daegarnAI* pDaegarnAI = CAST_AI(npc_daegarn::npc_daegarnAI, creature->AI()))
- pDaegarnAI->StartEvent(player->GetGUID());
- }
-
- return true;
- }
-
/// @todo make prisoners help (unclear if summoned or using npc's from surrounding cages (summon inside small cages?))
struct npc_daegarnAI : public ScriptedAI
{
@@ -484,6 +483,12 @@ public:
SummonGladiator(uiEntry);
}
+
+ void QuestAccept(Player* player, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_DEFEAT_AT_RING)
+ StartEvent(player->GetGUID());
+ }
};
CreatureAI* GetAI(Creature* creature) const override
diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
index 7b9cd56c6a9..6bcdc9cbe3f 100644
--- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp
+++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp
@@ -62,40 +62,51 @@ class npc_vekjik : public CreatureScript
public:
npc_vekjik() : CreatureScript("npc_vekjik") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_vekjikAI : public ScriptedAI
{
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ npc_vekjikAI(Creature* creature) : ScriptedAI(creature) { }
- if (player->GetQuestStatus(QUEST_MAKING_PEACE) == QUEST_STATUS_INCOMPLETE)
+ bool GossipHello(Player* player) override
{
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
- SendGossipMenuFor(player, GOSSIP_TEXTID_VEKJIK1, creature->GetGUID());
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ if (player->GetQuestStatus(QUEST_MAKING_PEACE) == QUEST_STATUS_INCOMPLETE)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ SendGossipMenuFor(player, GOSSIP_TEXTID_VEKJIK1, me->GetGUID());
+ return true;
+ }
+
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
return true;
}
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
-
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF+1:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- SendGossipMenuFor(player, GOSSIP_TEXTID_VEKJIK2, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- CloseGossipMenuFor(player);
- creature->AI()->Talk(SAY_TEXTID_VEKJIK1, player);
- player->AreaExploredOrEventHappens(QUEST_MAKING_PEACE);
- creature->CastSpell(player, SPELL_FREANZYHEARTS_FURY, false);
- break;
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_VEKJIK_ITEM2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ SendGossipMenuFor(player, GOSSIP_TEXTID_VEKJIK2, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ CloseGossipMenuFor(player);
+ Talk(SAY_TEXTID_VEKJIK1, player);
+ player->AreaExploredOrEventHappens(QUEST_MAKING_PEACE);
+ DoCast(player, SPELL_FREANZYHEARTS_FURY, false);
+ break;
+ }
+
+ return true;
}
+ };
- return true;
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_vekjikAI(creature);
}
};
@@ -123,37 +134,48 @@ class npc_avatar_of_freya : public CreatureScript
public:
npc_avatar_of_freya() : CreatureScript("npc_avatar_of_freya") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_avatar_of_freyaAI : public ScriptedAI
{
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ npc_avatar_of_freyaAI(Creature* creature) : ScriptedAI(creature) { }
- if (player->GetQuestStatus(QUEST_FREYA_PACT) == QUEST_STATUS_INCOMPLETE)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR1, creature->GetGUID());
- return true;
- }
+ if (player->GetQuestStatus(QUEST_FREYA_PACT) == QUEST_STATUS_INCOMPLETE)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
+ player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR1, me->GetGUID());
+ return true;
+ }
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_INFO_DEF+1:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2);
- player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR2, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+2:
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+3);
- player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR3, creature->GetGUID());
- break;
- case GOSSIP_ACTION_INFO_DEF+3:
- player->CastSpell(player, SPELL_FREYA_CONVERSATION, true);
- CloseGossipMenuFor(player);
- break;
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR2, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_ITEM_AOF3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ player->PlayerTalkClass->SendGossipMenu(GOSSIP_TEXTID_AVATAR3, me->GetGUID());
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ player->CastSpell(player, SPELL_FREYA_CONVERSATION, true);
+ CloseGossipMenuFor(player);
+ break;
+ }
+ return true;
}
- return true;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_avatar_of_freyaAI(creature);
}
};
@@ -308,27 +330,23 @@ public:
m_uiChatTimer -= uiDiff;
}
}
- };
-
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_engineer_heliceAI(creature);
- }
- bool OnQuestAccept(Player* player, Creature* creature, const Quest* quest) override
- {
- if (quest->GetQuestId() == QUEST_DISASTER)
+ void QuestAccept(Player* player, Quest const* quest) override
{
- if (npc_engineer_heliceAI* pEscortAI = CAST_AI(npc_engineer_helice::npc_engineer_heliceAI, creature->AI()))
+ if (quest->GetQuestId() == QUEST_DISASTER)
{
- creature->GetMotionMaster()->MoveJumpTo(0, 0.4f, 0.4f);
- creature->SetFaction(113);
+ me->GetMotionMaster()->MoveJumpTo(0, 0.4f, 0.4f);
+ me->SetFaction(113);
- pEscortAI->Start(false, false, player->GetGUID());
- creature->AI()->Talk(SAY_WP_1);
+ Start(false, false, player->GetGUID());
+ Talk(SAY_WP_1);
}
}
- return true;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_engineer_heliceAI(creature);
}
};
@@ -564,55 +582,56 @@ public:
{
Talk(SAY_DWARF_OUCH);
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_adventurous_dwarfAI(creature);
- }
+ bool GossipHello(Player* player) override
+ {
+ if (player->GetQuestStatus(QUEST_12634) != QUEST_STATUS_INCOMPLETE)
+ return false;
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (player->GetQuestStatus(QUEST_12634) != QUEST_STATUS_INCOMPLETE)
- return false;
+ if (player->GetItemCount(ITEM_ORANGE) < 1)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_OPTION_ORANGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- if (player->GetItemCount(ITEM_ORANGE) < 1)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_OPTION_ORANGE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ if (player->GetItemCount(ITEM_BANANAS) < 2)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_OPTION_BANANAS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
- if (player->GetItemCount(ITEM_BANANAS) < 2)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_OPTION_BANANAS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ if (player->GetItemCount(ITEM_PAPAYA) < 1)
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_OPTION_PAPAYA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
- if (player->GetItemCount(ITEM_PAPAYA) < 1)
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_OPTION_PAPAYA, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
+ player->PlayerTalkClass->SendGossipMenu(GOSSIP_MENU_DWARF, me->GetGUID());
+ return true;
+ }
- player->PlayerTalkClass->SendGossipMenu(GOSSIP_MENU_DWARF, creature->GetGUID());
- return true;
- }
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
+ {
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ uint32 spellId = 0;
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- uint32 spellId = 0;
+ switch (action)
+ {
+ case GOSSIP_ACTION_INFO_DEF + 1:
+ spellId = SPELL_ADD_ORANGE;
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 2:
+ spellId = SPELL_ADD_BANANAS;
+ break;
+ case GOSSIP_ACTION_INFO_DEF + 3:
+ spellId = SPELL_ADD_PAPAYA;
+ break;
+ }
- switch (action)
- {
- case GOSSIP_ACTION_INFO_DEF + 1:
- spellId = SPELL_ADD_ORANGE;
- break;
- case GOSSIP_ACTION_INFO_DEF + 2:
- spellId = SPELL_ADD_BANANAS;
- break;
- case GOSSIP_ACTION_INFO_DEF + 3:
- spellId = SPELL_ADD_PAPAYA;
- break;
- }
+ if (spellId)
+ player->CastSpell(player, spellId, true);
- if (spellId)
- player->CastSpell(player, spellId, true);
+ Talk(SAY_DWARF_HELP);
+ me->DespawnOrUnsummon();
+ return true;
+ }
+ };
- creature->AI()->Talk(SAY_DWARF_HELP);
- creature->DespawnOrUnsummon();
- return true;
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_adventurous_dwarfAI(creature);
}
};
diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp
index e18670a1d9c..9e605ce6f1f 100644
--- a/src/server/scripts/Northrend/zone_storm_peaks.cpp
+++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp
@@ -77,7 +77,7 @@ public:
player->FailQuest(QUEST_BITTER_DEPARTURE);
}
- void UpdateAI(uint32 uiDiff) override
+ void UpdateAI(uint32 uiDiff) override
{
npc_escortAI::UpdateAI(uiDiff);
if (!UpdateVictim())
@@ -85,7 +85,7 @@ public:
DoMeleeAttackIfReady();
}
- void sGossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
+ bool GossipSelect(Player* player, uint32 menuId, uint32 gossipListId) override
{
if (menuId == GOSSIP_ID && gossipListId == GOSSIP_OPTION_ID)
{
@@ -93,6 +93,13 @@ public:
me->SetFaction(113);
Start(true, true, player->GetGUID());
}
+ return false;
+ }
+
+ void QuestAccept(Player* /*player*/, Quest const* quest) override
+ {
+ if (quest->GetQuestId() == QUEST_BITTER_DEPARTURE)
+ Talk(SAY_QUEST_ACCEPT);
}
};
@@ -100,14 +107,6 @@ public:
{
return new npc_injured_goblinAI(creature);
}
-
- bool OnQuestAccept(Player* /*player*/, Creature* creature, Quest const* quest) override
- {
- if (quest->GetQuestId() == QUEST_BITTER_DEPARTURE)
- creature->AI()->Talk(SAY_QUEST_ACCEPT);
-
- return false;
- }
};
/*######
@@ -125,38 +124,49 @@ class npc_roxi_ramrocket : public CreatureScript
public:
npc_roxi_ramrocket() : CreatureScript("npc_roxi_ramrocket") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_roxi_ramrocketAI : public ScriptedAI
{
- //Quest Menu
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ npc_roxi_ramrocketAI(Creature* creature) : ScriptedAI(creature) { }
- //Trainer Menu
- if ( creature->IsTrainer() )
- AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
+ bool GossipHello(Player* player) override
+ {
+ //Quest Menu
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- //Vendor Menu
- if ( creature->IsVendor() )
- if (player->HasSpell(SPELL_MECHANO_HOG) || player->HasSpell(SPELL_MEKGINEERS_CHOPPER))
- AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
+ //Trainer Menu
+ if (me->IsTrainer())
+ AddGossipItemFor(player, GOSSIP_ICON_TRAINER, GOSSIP_TEXT_TRAIN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRAIN);
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
+ //Vendor Menu
+ if (me->IsVendor())
+ if (player->HasSpell(SPELL_MECHANO_HOG) || player->HasSpell(SPELL_MEKGINEERS_CHOPPER))
+ AddGossipItemFor(player, GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE);
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- ClearGossipMenuFor(player);
- switch (action)
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
+
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- case GOSSIP_ACTION_TRAIN:
- player->GetSession()->SendTrainerList(creature->GetGUID());
- break;
- case GOSSIP_ACTION_TRADE:
- player->GetSession()->SendListInventory(creature->GetGUID());
- break;
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ ClearGossipMenuFor(player);
+ switch (action)
+ {
+ case GOSSIP_ACTION_TRAIN:
+ player->GetSession()->SendTrainerList(me->GetGUID());
+ break;
+ case GOSSIP_ACTION_TRADE:
+ player->GetSession()->SendListInventory(me->GetGUID());
+ break;
+ }
+ return true;
}
- return true;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_roxi_ramrocketAI(creature);
}
};
@@ -477,11 +487,12 @@ public:
objectCounter = 0;
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
CloseGossipMenuFor(player);
playerGUID = player->GetGUID();
events.ScheduleEvent(EVENT_SCRIPT_1, 100);
+ return false;
}
void UpdateAI(uint32 diff) override
diff --git a/src/server/scripts/Northrend/zone_wintergrasp.cpp b/src/server/scripts/Northrend/zone_wintergrasp.cpp
index 49e4f5d3dee..5f8148dcfa9 100644
--- a/src/server/scripts/Northrend/zone_wintergrasp.cpp
+++ b/src/server/scripts/Northrend/zone_wintergrasp.cpp
@@ -115,69 +115,80 @@ class npc_wg_demolisher_engineer : public CreatureScript
public:
npc_wg_demolisher_engineer() : CreatureScript("npc_wg_demolisher_engineer") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_wg_demolisher_engineerAI : public ScriptedAI
{
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ npc_wg_demolisher_engineerAI(Creature* creature) : ScriptedAI(creature) { }
- if (CanBuild(creature))
+ bool GossipHello(Player* player) override
{
- if (player->HasAura(SPELL_CORPORAL))
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- else if (player->HasAura(SPELL_LIEUTENANT))
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
+
+ if (CanBuild())
{
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ if (player->HasAura(SPELL_CORPORAL))
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ else if (player->HasAura(SPELL_LIEUTENANT))
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO2, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO3, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
+ }
}
- }
- else
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
-
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
+ else
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, GOSSIP_HELLO_DEMO4, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9);
- bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) override
- {
- CloseGossipMenuFor(player);
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
+ }
- if (CanBuild(creature))
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- switch (action - GOSSIP_ACTION_INFO_DEF)
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ CloseGossipMenuFor(player);
+
+ if (CanBuild())
{
- case 0:
- creature->CastSpell(player, SPELL_BUILD_CATAPULT_FORCE, true);
- break;
- case 1:
- creature->CastSpell(player, SPELL_BUILD_DEMOLISHER_FORCE, true);
- break;
- case 2:
- creature->CastSpell(player, player->GetTeamId() == TEAM_ALLIANCE ? SPELL_BUILD_SIEGE_VEHICLE_FORCE_ALLIANCE : SPELL_BUILD_SIEGE_VEHICLE_FORCE_HORDE, true);
- break;
+ switch (action - GOSSIP_ACTION_INFO_DEF)
+ {
+ case 0:
+ DoCast(player, SPELL_BUILD_CATAPULT_FORCE, true);
+ break;
+ case 1:
+ DoCast(player, SPELL_BUILD_DEMOLISHER_FORCE, true);
+ break;
+ case 2:
+ DoCast(player, player->GetTeamId() == TEAM_ALLIANCE ? SPELL_BUILD_SIEGE_VEHICLE_FORCE_ALLIANCE : SPELL_BUILD_SIEGE_VEHICLE_FORCE_HORDE, true);
+ break;
+ }
+ if (Creature* controlArms = me->FindNearestCreature(NPC_WINTERGRASP_CONTROL_ARMS, 30.0f, true))
+ DoCast(controlArms, SPELL_ACTIVATE_CONTROL_ARMS, true);
}
- if (Creature* controlArms = creature->FindNearestCreature(NPC_WINTERGRASP_CONTROL_ARMS, 30.0f, true))
- creature->CastSpell(controlArms, SPELL_ACTIVATE_CONTROL_ARMS, true);
+ return true;
}
- return true;
- }
- private:
- bool CanBuild(Creature* creature)
- {
- Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
- if (!wintergrasp)
- return false;
-
- switch (creature->GetEntry())
+ private:
+ bool CanBuild() const
{
- case NPC_GOBLIN_MECHANIC:
- return (wintergrasp->GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H) > wintergrasp->GetData(BATTLEFIELD_WG_DATA_VEHICLE_H));
- case NPC_GNOMISH_ENGINEER:
- return (wintergrasp->GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A) > wintergrasp->GetData(BATTLEFIELD_WG_DATA_VEHICLE_A));
- default:
+ Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
+ if (!wintergrasp)
return false;
+
+ switch (me->GetEntry())
+ {
+ case NPC_GOBLIN_MECHANIC:
+ return (wintergrasp->GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_H) > wintergrasp->GetData(BATTLEFIELD_WG_DATA_VEHICLE_H));
+ case NPC_GNOMISH_ENGINEER:
+ return (wintergrasp->GetData(BATTLEFIELD_WG_DATA_MAX_VEHICLE_A) > wintergrasp->GetData(BATTLEFIELD_WG_DATA_VEHICLE_A));
+ default:
+ return false;
+ }
}
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_wg_demolisher_engineerAI(creature);
}
};
@@ -186,48 +197,49 @@ class npc_wg_spirit_guide : public CreatureScript
public:
npc_wg_spirit_guide() : CreatureScript("npc_wg_spirit_guide") { }
- bool OnGossipHello(Player* player, Creature* creature) override
+ struct npc_wg_spirit_guideAI : public ScriptedAI
{
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ npc_wg_spirit_guideAI(Creature* creature) : ScriptedAI(creature) { }
- Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
- if (!wintergrasp)
- return true;
+ void UpdateAI(uint32 /*diff*/) override
+ {
+ if (!me->HasUnitState(UNIT_STATE_CASTING))
+ DoCast(me, SPELL_CHANNEL_SPIRIT_HEAL);
+ }
- GraveyardVect graveyard = wintergrasp->GetGraveyardVector();
- for (uint8 i = 0; i < graveyard.size(); i++)
- if (graveyard[i]->GetControlTeamId() == player->GetTeamId())
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, player->GetSession()->GetTrinityString(((BfGraveyardWG*)graveyard[i])->GetTextId()), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + i);
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- SendGossipMenuFor(player, player->GetGossipTextId(creature), creature->GetGUID());
- return true;
- }
+ Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
+ if (!wintergrasp)
+ return true;
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) override
- {
- CloseGossipMenuFor(player);
+ GraveyardVect graveyard = wintergrasp->GetGraveyardVector();
+ for (uint8 i = 0; i < graveyard.size(); i++)
+ if (graveyard[i]->GetControlTeamId() == player->GetTeamId())
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, player->GetSession()->GetTrinityString(((BfGraveyardWG*)graveyard[i])->GetTextId()), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + i);
- Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
- if (wintergrasp)
- {
- GraveyardVect gy = wintergrasp->GetGraveyardVector();
- for (uint8 i = 0; i < gy.size(); i++)
- if (action - GOSSIP_ACTION_INFO_DEF == i && gy[i]->GetControlTeamId() == player->GetTeamId())
- if (WorldSafeLocsEntry const* safeLoc = sWorldSafeLocsStore.LookupEntry(gy[i]->GetGraveyardId()))
- player->TeleportTo(safeLoc->map_id, safeLoc->x, safeLoc->y, safeLoc->z, 0);
+ SendGossipMenuFor(player, player->GetGossipTextId(me), me->GetGUID());
+ return true;
}
- return true;
- }
-
- struct npc_wg_spirit_guideAI : public ScriptedAI
- {
- npc_wg_spirit_guideAI(Creature* creature) : ScriptedAI(creature) { }
- void UpdateAI(uint32 /*diff*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 gossipListId) override
{
- if (!me->HasUnitState(UNIT_STATE_CASTING))
- DoCast(me, SPELL_CHANNEL_SPIRIT_HEAL);
+ uint32 const action = player->PlayerTalkClass->GetGossipOptionAction(gossipListId);
+ CloseGossipMenuFor(player);
+
+ Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
+ if (wintergrasp)
+ {
+ GraveyardVect gy = wintergrasp->GetGraveyardVector();
+ for (uint8 i = 0; i < gy.size(); i++)
+ if (action - GOSSIP_ACTION_INFO_DEF == i && gy[i]->GetControlTeamId() == player->GetTeamId())
+ if (WorldSafeLocsEntry const* safeLoc = sWorldSafeLocsStore.LookupEntry(gy[i]->GetGraveyardId()))
+ player->TeleportTo(safeLoc->map_id, safeLoc->x, safeLoc->y, safeLoc->z, 0);
+ }
+ return true;
}
};
@@ -274,59 +286,59 @@ class npc_wg_queue : public CreatureScript
DoMeleeAttackIfReady();
}
- };
- CreatureAI* GetAI(Creature* creature) const override
- {
- return new npc_wg_queueAI(creature);
- }
-
- bool OnGossipHello(Player* player, Creature* creature) override
- {
- if (creature->IsQuestGiver())
- player->PrepareQuestMenu(creature->GetGUID());
+ bool GossipHello(Player* player) override
+ {
+ if (me->IsQuestGiver())
+ player->PrepareQuestMenu(me->GetGUID());
- Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
- if (!wintergrasp)
- return true;
+ Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
+ if (!wintergrasp)
+ return true;
- if (wintergrasp->IsWarTime())
- {
- AddGossipItemFor(player, GOSSIP_ICON_CHAT, player->GetSession()->GetTrinityString(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_WAR : WG_NPCQUEUE_TEXT_A_WAR, creature->GetGUID());
- }
- else
- {
- uint32 timer = wintergrasp->GetTimer() / 1000;
- player->SendUpdateWorldState(4354, time(NULL) + timer);
- if (timer < 15 * MINUTE)
+ if (wintergrasp->IsWarTime())
{
AddGossipItemFor(player, GOSSIP_ICON_CHAT, player->GetSession()->GetTrinityString(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
- SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_QUEUE : WG_NPCQUEUE_TEXT_A_QUEUE, creature->GetGUID());
+ SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_WAR : WG_NPCQUEUE_TEXT_A_WAR, me->GetGUID());
}
else
- SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_NOWAR : WG_NPCQUEUE_TEXT_A_NOWAR, creature->GetGUID());
+ {
+ uint32 timer = wintergrasp->GetTimer() / 1000;
+ player->SendUpdateWorldState(4354, time(NULL) + timer);
+ if (timer < 15 * MINUTE)
+ {
+ AddGossipItemFor(player, GOSSIP_ICON_CHAT, player->GetSession()->GetTrinityString(WG_NPCQUEUE_TEXTOPTION_JOIN), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
+ SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_QUEUE : WG_NPCQUEUE_TEXT_A_QUEUE, me->GetGUID());
+ }
+ else
+ SendGossipMenuFor(player, wintergrasp->GetDefenderTeam() ? WG_NPCQUEUE_TEXT_H_NOWAR : WG_NPCQUEUE_TEXT_A_NOWAR, me->GetGUID());
+ }
+ return true;
}
- return true;
- }
- bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) override
- {
- CloseGossipMenuFor(player);
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ {
+ CloseGossipMenuFor(player);
- Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
- if (!wintergrasp)
- return true;
+ Battlefield* wintergrasp = sBattlefieldMgr->GetBattlefieldByBattleId(BATTLEFIELD_BATTLEID_WG);
+ if (!wintergrasp)
+ return true;
- if (wintergrasp->IsWarTime())
- wintergrasp->InvitePlayerToWar(player);
- else
- {
- uint32 timer = wintergrasp->GetTimer() / 1000;
- if (timer < 15 * MINUTE)
- wintergrasp->InvitePlayerToQueue(player);
+ if (wintergrasp->IsWarTime())
+ wintergrasp->InvitePlayerToWar(player);
+ else
+ {
+ uint32 timer = wintergrasp->GetTimer() / 1000;
+ if (timer < 15 * MINUTE)
+ wintergrasp->InvitePlayerToQueue(player);
+ }
+ return true;
}
- return true;
+ };
+
+ CreatureAI* GetAI(Creature* creature) const override
+ {
+ return new npc_wg_queueAI(creature);
}
};
@@ -341,8 +353,8 @@ class go_wg_vehicle_teleporter : public GameObjectScript
bool IsFriendly(Unit* passenger)
{
- return ((go->GetFaction() == WintergraspFaction[TEAM_HORDE] && passenger->GetFaction() == HORDE) ||
- (go->GetFaction() == WintergraspFaction[TEAM_ALLIANCE] && passenger->GetFaction() == ALLIANCE));
+ return ((me->GetFaction() == WintergraspFaction[TEAM_HORDE] && passenger->GetFaction() == HORDE) ||
+ (me->GetFaction() == WintergraspFaction[TEAM_ALLIANCE] && passenger->GetFaction() == ALLIANCE));
}
Creature* GetValidVehicle(Creature* cVeh)
@@ -351,7 +363,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript
if (Vehicle* vehicle = cVeh->GetVehicleKit())
if (Unit* passenger = vehicle->GetPassenger(0))
if (IsFriendly(passenger))
- if (Creature* teleportTrigger = passenger->SummonTrigger(go->GetPositionX()-60.0f, go->GetPositionY(), go->GetPositionZ()+1.0f, cVeh->GetOrientation(), 1000))
+ if (Creature* teleportTrigger = passenger->SummonTrigger(me->GetPositionX()-60.0f, me->GetPositionY(), me->GetPositionZ()+1.0f, cVeh->GetOrientation(), 1000))
return teleportTrigger;
return nullptr;
@@ -363,7 +375,7 @@ class go_wg_vehicle_teleporter : public GameObjectScript
if (_checkTimer >= 1000)
{
for (uint8 i = 0; i < MAX_WINTERGRASP_VEHICLES; i++)
- if (Creature* vehicleCreature = go->FindNearestCreature(vehiclesList[i], 3.0f, true))
+ if (Creature* vehicleCreature = me->FindNearestCreature(vehiclesList[i], 3.0f, true))
if (Creature* teleportTrigger = GetValidVehicle(vehicleCreature))
teleportTrigger->CastSpell(vehicleCreature, SPELL_VEHICLE_TELEPORT, true);
diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp
index 26da2249623..199788903a6 100644
--- a/src/server/scripts/Northrend/zone_zuldrak.cpp
+++ b/src/server/scripts/Northrend/zone_zuldrak.cpp
@@ -19,6 +19,7 @@
#include "ScriptedCreature.h"
#include "ScriptedGossip.h"
#include "ScriptedEscortAI.h"
+#include "GameObjectAI.h"
#include "Player.h"
#include "SpellInfo.h"
#include "SpellScript.h"
@@ -267,12 +268,13 @@ public:
return;
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
_events.ScheduleEvent(EVENT_RECRUIT_1, 100);
CloseGossipMenuFor(player);
me->CastSpell(player, SPELL_QUEST_CREDIT, true);
me->SetFacingToObject(player);
+ return false;
}
private:
@@ -303,20 +305,29 @@ class go_scourge_enclosure : public GameObjectScript
public:
go_scourge_enclosure() : GameObjectScript("go_scourge_enclosure") { }
- bool OnGossipHello(Player* player, GameObject* go) override
+ struct go_scourge_enclosureAI : public GameObjectAI
{
- go->UseDoorOrButton();
- if (player->GetQuestStatus(QUEST_OUR_ONLY_HOPE) == QUEST_STATUS_INCOMPLETE)
+ go_scourge_enclosureAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player, bool /*reportUse*/) override
{
- Creature* gymerDummy = go->FindNearestCreature(NPC_GYMER_DUMMY, 20.0f);
- if (gymerDummy)
+ me->UseDoorOrButton();
+ if (player->GetQuestStatus(QUEST_OUR_ONLY_HOPE) == QUEST_STATUS_INCOMPLETE)
{
- player->KilledMonsterCredit(gymerDummy->GetEntry(), gymerDummy->GetGUID());
- gymerDummy->CastSpell(gymerDummy, SPELL_GYMER_LOCK_EXPLOSION, true);
- gymerDummy->DespawnOrUnsummon(4 * IN_MILLISECONDS);
+ if (Creature* gymerDummy = me->FindNearestCreature(NPC_GYMER_DUMMY, 20.0f))
+ {
+ player->KilledMonsterCredit(gymerDummy->GetEntry(), gymerDummy->GetGUID());
+ gymerDummy->CastSpell(gymerDummy, SPELL_GYMER_LOCK_EXPLOSION, true);
+ gymerDummy->DespawnOrUnsummon(4 * IN_MILLISECONDS);
+ }
}
+ return true;
}
- return true;
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
+ {
+ return new go_scourge_enclosureAI(go);
}
};
@@ -552,13 +563,14 @@ public:
}
}
- void sGossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
+ bool GossipSelect(Player* player, uint32 /*menuId*/, uint32 /*gossipListId*/) override
{
CloseGossipMenuFor(player);
DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF);
_playerGUID = player->GetGUID();
_getingredienttry = 1;
_events.ScheduleEvent(EVENT_EASY_123, 100);
+ return false;
}
private:
@@ -578,10 +590,20 @@ class go_finklesteins_cauldron : public GameObjectScript
public:
go_finklesteins_cauldron() : GameObjectScript("go_finklesteins_cauldron") { }
- bool OnGossipHello(Player* player, GameObject* /*go*/) override
+ struct go_finklesteins_cauldronAI : public GameObjectAI
+ {
+ go_finklesteins_cauldronAI(GameObject* go) : GameObjectAI(go) { }
+
+ bool GossipHello(Player* player, bool /*reportUse*/) override
+ {
+ player->CastSpell(player, SPELL_POT_CHECK);
+ return true;
+ }
+ };
+
+ GameObjectAI* GetAI(GameObject* go) const override
{
- player->CastSpell(player, SPELL_POT_CHECK);
- return true;
+ return new go_finklesteins_cauldronAI(go);
}
};