aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMeji <alvaromegias_46@hotmail.com>2021-10-17 00:11:48 +0200
committerGitHub <noreply@github.com>2021-10-17 00:11:48 +0200
commit7c15ec00c7c1a4d5bd3ce37de6776b8a407b65b7 (patch)
tree860493b02fa7eca369cd6a9360d9a44b7c57e7c4 /src
parentba4fa060d765a35507f1a73287504c3f2e440fdb (diff)
Core/BattlePets: Fixes when adding pets (#27076)
* Add pet when learning it for the first time (summon spell not known). * Removed code that adds battle pet if its summon spell is known (Learn cageable pet -> Cage pet -> Log out -> Log in -> Pet is added). * When uncaging check that the species has a summon spell before trying to learn it.
Diffstat (limited to 'src')
-rw-r--r--src/server/game/BattlePets/BattlePetMgr.cpp1
-rw-r--r--src/server/game/Entities/Player/Player.cpp11
-rw-r--r--src/server/game/Handlers/ItemHandler.cpp7
-rw-r--r--src/server/game/Spells/SpellEffects.cpp8
4 files changed, 9 insertions, 18 deletions
diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp
index 5af547f1797..41103dda896 100644
--- a/src/server/game/BattlePets/BattlePetMgr.cpp
+++ b/src/server/game/BattlePets/BattlePetMgr.cpp
@@ -402,6 +402,7 @@ void BattlePetMgr::AddPet(uint32 species, uint32 display, uint16 breed, BattlePe
updates.push_back(std::ref(pet));
SendUpdates(std::move(updates), true);
+ _owner->GetPlayer()->UpdateCriteria(CriteriaType::UniquePetsOwned);
_owner->GetPlayer()->UpdateCriteria(CriteriaType::LearnedNewPet, species);
}
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 9d1c63086fb..c49cc3a4ddb 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3115,17 +3115,6 @@ bool Player::AddSpell(uint32 spellId, bool active, bool learning, bool dependent
if (sDB2Manager.GetMount(spellId))
GetSession()->GetCollectionMgr()->AddMount(spellId, MOUNT_STATUS_NONE, false, IsInWorld() ? false : true);
- // need to add Battle pets automatically into pet journal
- for (BattlePetSpeciesEntry const* entry : sBattlePetSpeciesStore)
- {
- if (entry->SummonSpellID == int32(spellId) && GetSession()->GetBattlePetMgr()->GetPetCount(entry->ID) == 0)
- {
- GetSession()->GetBattlePetMgr()->AddPet(entry->ID, BattlePetMgr::SelectPetDisplay(entry), BattlePetMgr::RollPetBreed(entry->ID), BattlePetMgr::GetDefaultPetQuality(entry->ID));
- UpdateCriteria(CriteriaType::UniquePetsOwned);
- break;
- }
- }
-
// return true (for send learn packet) only if spell active (in case ranked spells) and not replace old spell
return active && !disabled && !superceded_old;
}
diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp
index d72c0ce9d0d..920f09cd8d4 100644
--- a/src/server/game/Handlers/ItemHandler.cpp
+++ b/src/server/game/Handlers/ItemHandler.cpp
@@ -1206,11 +1206,8 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC
if (itemEffect->TriggerType != ITEM_SPELLTRIGGER_LEARN_SPELL_ID)
continue;
- if (BattlePetSpeciesEntry const* entry = sSpellMgr->GetBattlePetSpecies(uint32(itemEffect->SpellID)))
- {
- GetBattlePetMgr()->AddPet(entry->ID, BattlePetMgr::SelectPetDisplay(entry), BattlePetMgr::RollPetBreed(entry->ID), BattlePetMgr::GetDefaultPetQuality(entry->ID));
- _player->UpdateCriteria(CriteriaType::UniquePetsOwned);
- }
+ if (BattlePetSpeciesEntry const* speciesEntry = sSpellMgr->GetBattlePetSpecies(uint32(itemEffect->SpellID)))
+ GetBattlePetMgr()->AddPet(speciesEntry->ID, BattlePetMgr::SelectPetDisplay(speciesEntry), BattlePetMgr::RollPetBreed(speciesEntry->ID), BattlePetMgr::GetDefaultPetQuality(speciesEntry->ID));
}
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 6cb02a20306..a7008eefae2 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -2146,6 +2146,9 @@ void Spell::EffectLearnSpell()
continue;
player->LearnSpell(itemEffect->SpellID, false);
+
+ if (BattlePetSpeciesEntry const* speciesEntry = sSpellMgr->GetBattlePetSpecies(uint32(itemEffect->SpellID)))
+ player->GetSession()->GetBattlePetMgr()->AddPet(speciesEntry->ID, BattlePetMgr::SelectPetDisplay(speciesEntry), BattlePetMgr::RollPetBreed(speciesEntry->ID), BattlePetMgr::GetDefaultPetQuality(speciesEntry->ID));
}
}
@@ -5713,8 +5716,9 @@ void Spell::EffectUncageBattlePet()
battlePetMgr->AddPet(speciesId, displayId, breed, BattlePetBreedQuality(quality), level);
- if (!plr->HasSpell(speciesEntry->SummonSpellID))
- plr->LearnSpell(speciesEntry->SummonSpellID, false);
+ if (speciesEntry->SummonSpellID)
+ if (!plr->HasSpell(speciesEntry->SummonSpellID))
+ plr->LearnSpell(speciesEntry->SummonSpellID, false);
plr->SendPlaySpellVisual(plr, SPELL_VISUAL_UNCAGE_PET, 0, 0, 0.f, false);