diff options
| author | Meji <alvaromegias_46@hotmail.com> | 2021-10-16 12:15:03 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-16 12:15:03 +0200 |
| commit | 11cc5c0d3bd46b5e68bb549625ef9ca7294deb21 (patch) | |
| tree | b36f19d80b39158bf4a0cadf38a9398beb08194a /src/server/game/Spells/SpellEffects.cpp | |
| parent | d07102a3dabcdde28f1bb2d504a338f705eb3141 (diff) | |
Core/BattlePets: Misc fixes (#27057)
* Rename WorldPackets::BattlePet::BattlePet::CollarID to WorldPackets::BattlePet::BattlePet::DisplayID
* Use the DisplayID field to store the model of the battle pet. If the species has BattlePetSpeciesFlags::RandomDisplay, nothing is stored. Otherwise a random model is chosen from those available
* Stored DisplayID in ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID when caging the battle pet (previously the CreatureID was being stored)
* Modified SendPlaySpellVisual function to allow sending Target and TargetPosition at the same time
* Added SpellVisual when uncaging
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 03f5dd2aa55..06ecc709000 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5670,47 +5670,42 @@ void Spell::EffectUncageBattlePet() if (!m_CastItem || !m_caster || m_caster->GetTypeId() != TYPEID_PLAYER) return; - Player* plr = m_caster->ToPlayer(); - - // are we allowed to learn battle pets without it? - /*if (plr->HasPlayerFlag(PLAYER_FLAGS_PET_BATTLES_UNLOCKED)) - return; // send some error*/ - uint32 speciesId = m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_SPECIES_ID); uint16 breed = m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA) & 0xFFFFFF; uint8 quality = (m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_BREED_DATA) >> 24) & 0xFF; uint16 level = m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_LEVEL); - uint32 creatureId = m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID); + uint32 displayId = m_CastItem->GetModifier(ITEM_MODIFIER_BATTLE_PET_DISPLAY_ID); BattlePetSpeciesEntry const* speciesEntry = sBattlePetSpeciesStore.LookupEntry(speciesId); if (!speciesEntry) return; + Player* plr = m_caster->ToPlayer(); BattlePetMgr* battlePetMgr = plr->GetSession()->GetBattlePetMgr(); if (!battlePetMgr) return; - // 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 (battlePetMgr->GetMaxPetLevel() < level) { - battlePetMgr->SendError(BATTLEPETRESULT_TOO_HIGH_LEVEL_TO_UNCAGE, creatureId); // or speciesEntry.CreatureID + battlePetMgr->SendError(BATTLEPETRESULT_TOO_HIGH_LEVEL_TO_UNCAGE, speciesEntry->CreatureID); SendCastResult(SPELL_FAILED_CANT_ADD_BATTLE_PET); return; } if (battlePetMgr->HasMaxPetCount(speciesEntry)) { - battlePetMgr->SendError(BATTLEPETRESULT_CANT_HAVE_MORE_PETS_OF_THAT_TYPE, creatureId); // or speciesEntry.CreatureID + battlePetMgr->SendError(BATTLEPETRESULT_CANT_HAVE_MORE_PETS_OF_THAT_TYPE, speciesEntry->CreatureID); SendCastResult(SPELL_FAILED_CANT_ADD_BATTLE_PET); return; } - battlePetMgr->AddPet(speciesId, creatureId, breed, BattlePetBreedQuality(quality), level); + battlePetMgr->AddPet(speciesId, displayId, breed, BattlePetBreedQuality(quality), level); if (!plr->HasSpell(speciesEntry->SummonSpellID)) plr->LearnSpell(speciesEntry->SummonSpellID, false); + plr->SendPlaySpellVisual(plr, SPELL_VISUAL_UNCAGE_PET, 0, 0, 0.f, false); + plr->DestroyItem(m_CastItem->GetBagSlot(), m_CastItem->GetSlot(), true); m_CastItem = nullptr; } |
