diff options
author | Shauren <shauren.trinity@gmail.com> | 2023-03-12 00:13:49 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2023-03-12 00:13:49 +0100 |
commit | 09568736134372ec1a79b936a248eec30f071c8d (patch) | |
tree | 73a2ab5900c25285f34c8ed6353c640f06b570bd | |
parent | 5c9283244b9b2121037af5db94f626aeebdbddc3 (diff) |
Core/Creatures: Allow overriding default gossip menu id
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); |