diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-01-16 21:58:21 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-01-16 21:58:21 +0100 |
commit | 63ea6a50e851f9df82381e254a7c56e1c575cfe2 (patch) | |
tree | fc264cbf0bb79c7ddcbaf729abc028a9a298a992 | |
parent | c751d57c6026fb7b19df6c28af4999c36f9e99cb (diff) |
Core/Creatures: Only allow class and pet trainers to reset talents and teach dual spec
Closes #22953
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 12 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Handlers/SkillHandler.cpp | 2 |
4 files changed, 12 insertions, 10 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 06a74ea1c79..66a2af3e655 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -611,13 +611,13 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/, UpdateMovementFlags(); LoadCreaturesAddon(); - + LoadTemplateImmunities(); GetThreatManager().EvaluateSuppressed(); - + //We must update last scriptId or it looks like we reloaded a script, breaking some things such as gossip temporarily LastUsedScriptID = GetScriptId(); - + return true; } @@ -1183,13 +1183,15 @@ bool Creature::isCanInteractWithBattleMaster(Player* player, bool msg) const return true; } -bool Creature::CanResetTalents(Player* player) const +bool Creature::CanResetTalents(Player* player, bool pet) const { Trainer::Trainer const* trainer = sObjectMgr->GetTrainer(GetEntry()); if (!trainer) return false; - return player->getLevel() >= 10 && trainer->IsTrainerValidForPlayer(player); + return player->getLevel() >= 10 && + (trainer->GetTrainerType() == (pet ? Trainer::Type::Pet : Trainer::Type::Class)) && + trainer->IsTrainerValidForPlayer(player); } Player* Creature::GetLootRecipient() const diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index da1f71dea55..9b393471532 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -118,7 +118,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma /// @todo Rename these properly bool isCanInteractWithBattleMaster(Player* player, bool msg) const; - bool CanResetTalents(Player* player) const; + bool CanResetTalents(Player* player, bool pet) const; bool CanCreatureAttack(Unit const* victim, bool force = true) const; void LoadTemplateImmunities(); bool IsImmunedToSpell(SpellInfo const* spellInfo, WorldObject const* caster) const override; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6b6ccd358da..9535961b376 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -14144,15 +14144,15 @@ void Player::PrepareGossipMenu(WorldObject* source, uint32 menuId /*= 0*/, bool } case GOSSIP_OPTION_LEARNDUALSPEC: case GOSSIP_OPTION_DUALSPEC_INFO: - if (!(GetSpecsCount() == 1 && creature->CanResetTalents(this) && !(getLevel() < sWorld->getIntConfig(CONFIG_MIN_DUALSPEC_LEVEL)))) + if (!(GetSpecsCount() == 1 && creature->CanResetTalents(this, false) && !(getLevel() < sWorld->getIntConfig(CONFIG_MIN_DUALSPEC_LEVEL)))) canTalk = false; break; case GOSSIP_OPTION_UNLEARNTALENTS: - if (!creature->CanResetTalents(this)) + if (!creature->CanResetTalents(this, false)) canTalk = false; break; case GOSSIP_OPTION_UNLEARNPETTALENTS: - if (!GetPet() || GetPet()->getPetType() != HUNTER_PET || GetPet()->m_spells.size() <= 1 || !creature->CanResetTalents(this)) + if (!GetPet() || GetPet()->getPetType() != HUNTER_PET || GetPet()->m_spells.size() <= 1 || !creature->CanResetTalents(this, true)) canTalk = false; break; case GOSSIP_OPTION_TAXIVENDOR: diff --git a/src/server/game/Handlers/SkillHandler.cpp b/src/server/game/Handlers/SkillHandler.cpp index 31807eea7fc..9f950e28539 100644 --- a/src/server/game/Handlers/SkillHandler.cpp +++ b/src/server/game/Handlers/SkillHandler.cpp @@ -71,7 +71,7 @@ void WorldSession::HandleTalentWipeConfirmOpcode(WorldPacket& recvData) return; } - if (!unit->CanResetTalents(_player)) + if (!unit->CanResetTalents(_player, false)) return; // remove fake death |