From ea6de0b565944520570f0723dae35d350b7b96ac Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 2 Jan 2018 14:04:09 +0100 Subject: Core/BattlePets: Misc fixes * Fixed caged pet item chat message * BattlePetMgr optimizations: removed copying data all over the place * Fixed gaining two pets when learned from item for the first time * Fixed dismiss button --- src/server/game/Spells/SpellEffects.cpp | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) (limited to 'src/server/game/Spells/SpellEffects.cpp') diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index eeb4936ec04..b373d48fa19 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2161,22 +2161,6 @@ void Spell::EffectLearnSpell(SpellEffIndex effIndex) uint32 spellToLearn = (m_spellInfo->Id == 483 || m_spellInfo->Id == 55884) ? damage : effectInfo->TriggerSpell; player->LearnSpell(spellToLearn, false); - if (m_spellInfo->Id == 55884) - { - if (BattlePetMgr* battlePetMgr = player->GetSession()->GetBattlePetMgr()) - { - for (auto entry : sBattlePetSpeciesStore) - { - if (entry->SummonSpellID == spellToLearn) - { - battlePetMgr->AddPet(entry->ID, entry->CreatureID, BattlePetMgr::RollPetBreed(entry->ID), BattlePetMgr::GetDefaultPetQuality(entry->ID)); - player->UpdateCriteria(CRITERIA_TYPE_OWN_BATTLE_PET_COUNT); - break; - } - } - } - } - TC_LOG_DEBUG("spells", "Spell: %s has learned spell %u from %s", player->GetGUID().ToString().c_str(), spellToLearn, m_caster->GetGUID().ToString().c_str()); } @@ -5705,14 +5689,9 @@ void Spell::EffectUncageBattlePet(SpellEffIndex /*effIndex*/) if (!battlePetMgr) return; - uint16 maxLearnedLevel = 0; - - for (auto pet : battlePetMgr->GetLearnedPets()) - maxLearnedLevel = std::max(pet.PacketInfo.Level, maxLearnedLevel); - // TODO: This means if you put your highest lvl pet into cage, you won't be able to uncage it again which is probably wrong. // We will need to store maxLearnedLevel somewhere to avoid this behaviour. - if (maxLearnedLevel < level) + if (battlePetMgr->GetMaxPetLevel() < level) { battlePetMgr->SendError(BATTLEPETRESULT_TOO_HIGH_LEVEL_TO_UNCAGE, creatureId); // or speciesEntry.CreatureID SendCastResult(SPELL_FAILED_CANT_ADD_BATTLE_PET); @@ -5726,10 +5705,11 @@ void Spell::EffectUncageBattlePet(SpellEffIndex /*effIndex*/) return; } + battlePetMgr->AddPet(speciesId, creatureId, breed, quality, level); + if (!plr->HasSpell(speciesEntry->SummonSpellID)) plr->LearnSpell(speciesEntry->SummonSpellID, false); - battlePetMgr->AddPet(speciesId, creatureId, breed, quality, level); plr->DestroyItem(m_CastItem->GetBagSlot(), m_CastItem->GetSlot(), true); m_CastItem = nullptr; } -- cgit v1.2.3