diff options
| author | myran2 <henrytgordon@gmail.com> | 2016-04-29 11:49:07 -0400 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-05-26 17:20:01 +0200 |
| commit | bc1a81747ae032bc2ae3681d99f5f6058d20caff (patch) | |
| tree | bbec4aca0ee5f8a486cc64a12e91145d04816a4c /src/server/game/Handlers/PetHandler.cpp | |
| parent | 6c71c8694f91f6254e8a913f0550e4ff78cb6875 (diff) | |
Core/Pets: Implemented pet specializations (#17058)
* Use prepared statements in Pet::SavePetToDB
* Add support for resetting all of a player's pet specializations
* Send one big spell unlearn/learn packet instead of lots of small ones
* Implemented Adaptation talent
Diffstat (limited to 'src/server/game/Handlers/PetHandler.cpp')
| -rw-r--r-- | src/server/game/Handlers/PetHandler.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/server/game/Handlers/PetHandler.cpp b/src/server/game/Handlers/PetHandler.cpp index a1e57ff087a..849a5097c61 100644 --- a/src/server/game/Handlers/PetHandler.cpp +++ b/src/server/game/Handlers/PetHandler.cpp @@ -722,3 +722,37 @@ void WorldSession::SendPetNameInvalid(uint32 error, const std::string& name, Dec SendPacket(petNameInvalid.Write()); } + +void WorldSession::HandlePetSetSpecializationOpcode(WorldPackets::Pet::LearnPetSpecializationGroup& learnPetSpecializationGroup) +{ + if (!_player->IsInWorld()) + return; + + Pet* pet = ObjectAccessor::GetPet(*_player, learnPetSpecializationGroup.PetGUID); + + if (!pet || !pet->IsPet() || ((Pet*)pet)->getPetType() != HUNTER_PET || + pet->GetOwnerGUID() != _player->GetGUID() || !pet->GetCharmInfo()) + return; + + if (learnPetSpecializationGroup.SpecGroupIndex >= MAX_SPECIALIZATIONS) + { + TC_LOG_DEBUG("network", "WORLD: HandlePetSetSpecializationOpcode - specialization index %u out of range", learnPetSpecializationGroup.SpecGroupIndex); + return; + } + + uint32 specIndex = _player->HasAuraType(SPELL_AURA_OVERRIDE_PET_SPECS) ? PET_SPEC_OVERRIDE_CLASS_INDEX : 0; + ChrSpecializationEntry const* petSpec = sChrSpecializationByIndexStore[specIndex][learnPetSpecializationGroup.SpecGroupIndex]; + if (!petSpec) + { + TC_LOG_DEBUG("network", "WORLD: HandlePetSetSpecializationOpcode - specialization index %u not found", learnPetSpecializationGroup.SpecGroupIndex); + return; + } + + if (_player->getLevel() < MIN_SPECIALIZATION_LEVEL) + { + TC_LOG_DEBUG("network", "WORLD: HandlePetSetSpecializationOpcode - player level too low for specializations"); + return; + } + + pet->SetSpecialization(petSpec->ID); +} |
