aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2023-03-12 00:13:49 +0100
committerShauren <shauren.trinity@gmail.com>2023-03-12 00:13:49 +0100
commit09568736134372ec1a79b936a248eec30f071c8d (patch)
tree73a2ab5900c25285f34c8ed6353c640f06b570bd
parent5c9283244b9b2121037af5db94f626aeebdbddc3 (diff)
Core/Creatures: Allow overriding default gossip menu id
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp13
-rw-r--r--src/server/game/Entities/Creature/Creature.h4
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Handlers/NPCHandler.cpp2
-rw-r--r--src/server/game/Handlers/QuestHandler.cpp2
-rw-r--r--src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp2
-rw-r--r--src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp2
-rw-r--r--src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp2
8 files changed, 23 insertions, 6 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 2dc66300cef..3314996c539 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -3523,6 +3523,19 @@ void Creature::ExitVehicle(Position const* /*exitPosition*/)
SetHomePosition(GetPosition());
}
+uint32 Creature::GetGossipMenuId() const
+{
+ if (_gossipMenuId)
+ return *_gossipMenuId;
+
+ return GetCreatureTemplate()->GossipMenuId;
+}
+
+void Creature::SetGossipMenuId(Optional<uint32> gossipMenuId)
+{
+ _gossipMenuId = gossipMenuId;
+}
+
uint32 Creature::GetTrainerId() const
{
if (_trainerId)
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index f88b61b5ba6..ed1657c9b21 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -401,6 +401,9 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool HasFlag(CreatureStaticFlags7 flag) const { return _staticFlags.HasFlag(flag); }
bool HasFlag(CreatureStaticFlags8 flag) const { return _staticFlags.HasFlag(flag); }
+ uint32 GetGossipMenuId() const;
+ void SetGossipMenuId(Optional<uint32> gossipMenuId);
+
uint32 GetTrainerId() const;
void SetTrainerId(Optional<uint32> trainerId);
@@ -491,6 +494,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool _isMissingCanSwimFlagOutOfCombat;
+ Optional<uint32> _gossipMenuId;
Optional<uint32> _trainerId;
};
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 4de8a0dd2c5..d760b938264 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -14249,7 +14249,7 @@ uint32 Player::GetDefaultGossipMenuForSource(WorldObject* source)
switch (source->GetTypeId())
{
case TYPEID_UNIT:
- return source->ToCreature()->GetCreatureTemplate()->GossipMenuId;
+ return source->ToCreature()->GetGossipMenuId();
case TYPEID_GAMEOBJECT:
return source->ToGameObject()->GetGOInfo()->GetGossipMenuId();
default:
diff --git a/src/server/game/Handlers/NPCHandler.cpp b/src/server/game/Handlers/NPCHandler.cpp
index 50fc643e7b6..a2274a3b6e0 100644
--- a/src/server/game/Handlers/NPCHandler.cpp
+++ b/src/server/game/Handlers/NPCHandler.cpp
@@ -183,7 +183,7 @@ void WorldSession::HandleGossipHelloOpcode(WorldPackets::NPC::Hello& packet)
if (!unit->AI()->OnGossipHello(_player))
{
// _player->TalkedToCreature(unit->GetEntry(), unit->GetGUID());
- _player->PrepareGossipMenu(unit, unit->GetCreatureTemplate()->GossipMenuId, true);
+ _player->PrepareGossipMenu(unit, unit->GetGossipMenuId(), true);
_player->SendPreparedGossip(unit);
}
}
diff --git a/src/server/game/Handlers/QuestHandler.cpp b/src/server/game/Handlers/QuestHandler.cpp
index 220eaba8985..18eb7daa947 100644
--- a/src/server/game/Handlers/QuestHandler.cpp
+++ b/src/server/game/Handlers/QuestHandler.cpp
@@ -98,7 +98,7 @@ void WorldSession::HandleQuestgiverHelloOpcode(WorldPackets::Quest::QuestGiverHe
if (creature->AI()->OnGossipHello(_player))
return;
- _player->PrepareGossipMenu(creature, creature->GetCreatureTemplate()->GossipMenuId, true);
+ _player->PrepareGossipMenu(creature, creature->GetGossipMenuId(), true);
_player->SendPreparedGossip(creature);
}
diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
index 0c3e4a25620..c520cdd56d7 100644
--- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
+++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp
@@ -104,7 +104,7 @@ class npc_voljin_zulaman : public CreatureScript
if (_instance->GetData(DATA_ZULAMAN_STATE) != NOT_STARTED)
return true;
- if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
+ if (me->GetGossipMenuId() == menuId && !gossipListId)
{
_events.Reset();
me->SetMountDisplayId(0);
diff --git a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
index 0700ce2ffbd..9258359eb16 100644
--- a/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
+++ b/src/server/scripts/Kalimdor/HallsOfOrigination/boss_anraphet.cpp
@@ -336,7 +336,7 @@ class npc_brann_bronzebeard_anraphet : public CreatureScript
if (_instance->GetBossState(DATA_VAULT_OF_LIGHTS) == DONE)
return true;
- if (me->GetCreatureTemplate()->GossipMenuId == sender && !action)
+ if (me->GetGossipMenuId() == sender && !action)
{
_instance->SetBossState(DATA_VAULT_OF_LIGHTS, IN_PROGRESS);
_currentPoint = 0;
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 c0e2bd0262b..eadbf4252cb 100644
--- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
+++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp
@@ -1193,7 +1193,7 @@ struct npc_tirion_fordring_tft : public ScriptedAI
bool OnGossipSelect(Player* /*player*/, uint32 menuId, uint32 gossipListId) override
{
- if (me->GetCreatureTemplate()->GossipMenuId == menuId && !gossipListId)
+ if (me->GetGossipMenuId() == menuId && !gossipListId)
{
_events.SetPhase(PHASE_INTRO);
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);