aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Northrend
diff options
context:
space:
mode:
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);
}
};