Core/BattlePets: Misc fixes

Port From (https://github.com/TrinityCore/TrinityCore/commit/446997cdf2bf24163141d7dcaa80bb6ef891f933)
This commit is contained in:
hondacrx
2022-01-01 17:37:27 -05:00
parent 23ee2b5a48
commit c900592e1c
4 changed files with 57 additions and 15 deletions
+20 -12
View File
@@ -459,12 +459,10 @@ namespace Game.BattlePets
pet.SaveInfo = BattlePetSaveInfo.Changed; pet.SaveInfo = BattlePetSaveInfo.Changed;
// Update the timestamp if the battle pet is summoned // Update the timestamp if the battle pet is summoned
Player player = _owner.GetPlayer(); Creature summonedBattlePet = _owner.GetPlayer().GetSummonedBattlePet();
Creature summonedBattlePet = ObjectAccessor.GetCreatureOrPetOrVehicle(player, player.GetCritterGUID());
if (summonedBattlePet != null) if (summonedBattlePet != null)
if (player.GetSummonedBattlePetGUID() == summonedBattlePet.GetBattlePetCompanionGUID()) if (summonedBattlePet.GetBattlePetCompanionGUID() == guid)
if (summonedBattlePet.GetBattlePetCompanionGUID() == guid) summonedBattlePet.SetBattlePetCompanionNameTimestamp((uint)pet.NameTimestamp);
summonedBattlePet.SetBattlePetCompanionNameTimestamp((uint)pet.NameTimestamp);
} }
bool IsPetInSlot(ObjectGuid guid) bool IsPetInSlot(ObjectGuid guid)
@@ -579,6 +577,18 @@ namespace Game.BattlePets
BattlePetDeleted deletePet = new(); BattlePetDeleted deletePet = new();
deletePet.PetGuid = guid; deletePet.PetGuid = guid;
_owner.SendPacket(deletePet); _owner.SendPacket(deletePet);
// Battle pet despawns if it's summoned
Player player = _owner.GetPlayer();
Creature summonedBattlePet = player.GetSummonedBattlePet();
if (summonedBattlePet != null)
{
if (summonedBattlePet.GetBattlePetCompanionGUID() == guid)
{
summonedBattlePet.DespawnOrUnsummon();
player.SetBattlePetData(null);
}
}
} }
public void HealBattlePetsPct(byte pct) public void HealBattlePetsPct(byte pct)
@@ -615,20 +625,18 @@ namespace Game.BattlePets
// TODO: set proper CreatureID for spell SPELL_SUMMON_BATTLE_PET (default EffectMiscValueA is 40721 - Murkimus the Gladiator) // TODO: set proper CreatureID for spell SPELL_SUMMON_BATTLE_PET (default EffectMiscValueA is 40721 - Murkimus the Gladiator)
Player player = _owner.GetPlayer(); Player player = _owner.GetPlayer();
player.SetSummonedBattlePetGUID(guid); player.SetBattlePetData(pet);
player.SetCurrentBattlePetBreedQuality(pet.PacketInfo.Quality);
player.CastSpell(_owner.GetPlayer(), speciesEntry.SummonSpellID != 0 ? speciesEntry.SummonSpellID : SharedConst.SpellSummonBattlePet); player.CastSpell(_owner.GetPlayer(), speciesEntry.SummonSpellID != 0 ? speciesEntry.SummonSpellID : SharedConst.SpellSummonBattlePet);
} }
public void DismissPet() public void DismissPet()
{ {
Player player = _owner.GetPlayer(); Player player = _owner.GetPlayer();
Creature pet = ObjectAccessor.GetCreatureOrPetOrVehicle(player, player.GetCritterGUID()); Creature summonedBattlePet = player.GetSummonedBattlePet();
if (pet && player.GetSummonedBattlePetGUID() == pet.GetBattlePetCompanionGUID()) if (summonedBattlePet)
{ {
pet.DespawnOrUnsummon(); summonedBattlePet.DespawnOrUnsummon();
player.SetSummonedBattlePetGUID(ObjectGuid.Empty); player.SetBattlePetData(null);
player.SetCurrentBattlePetBreedQuality((byte)BattlePetBreedQuality.Poor);
} }
} }
+28
View File
@@ -942,6 +942,34 @@ namespace Game.Entities
SendPacket(new PetSpells()); SendPacket(new PetSpells());
} }
public Creature GetSummonedBattlePet()
{
Creature summonedBattlePet = ObjectAccessor.GetCreatureOrPetOrVehicle(this, GetCritterGUID());
if (summonedBattlePet != null)
if (!GetSummonedBattlePetGUID().IsEmpty() && GetSummonedBattlePetGUID() == summonedBattlePet.GetBattlePetCompanionGUID())
return summonedBattlePet;
return null;
}
public void SetBattlePetData(BattlePets.BattlePetMgr.BattlePet pet = null)
{
if (pet != null)
{
SetSummonedBattlePetGUID(pet.PacketInfo.Guid);
SetCurrentBattlePetBreedQuality(pet.PacketInfo.Quality);
SetBattlePetCompanionExperience(pet.PacketInfo.Exp);
SetWildBattlePetLevel(pet.PacketInfo.Level);
}
else
{
SetSummonedBattlePetGUID(ObjectGuid.Empty);
SetCurrentBattlePetBreedQuality((byte)BattlePetBreedQuality.Poor);
SetBattlePetCompanionExperience(0);
SetWildBattlePetLevel(0);
}
}
public void StopCastingCharm() public void StopCastingCharm()
{ {
Unit charm = GetCharmed(); Unit charm = GetCharmed();
+2 -1
View File
@@ -1869,7 +1869,8 @@ namespace Game.Entities
public uint GetBattlePetCompanionNameTimestamp() { return m_unitData.BattlePetCompanionNameTimestamp; } public uint GetBattlePetCompanionNameTimestamp() { return m_unitData.BattlePetCompanionNameTimestamp; }
public void SetBattlePetCompanionNameTimestamp(uint timestamp) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.BattlePetCompanionNameTimestamp), timestamp); } public void SetBattlePetCompanionNameTimestamp(uint timestamp) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.BattlePetCompanionNameTimestamp), timestamp); }
public uint GetBattlePetCompanionExperience() { return m_unitData.BattlePetCompanionExperience; }
public void SetBattlePetCompanionExperience(uint experience) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.BattlePetCompanionExperience), experience); }
public uint GetWildBattlePetLevel() { return m_unitData.WildBattlePetLevel; } public uint GetWildBattlePetLevel() { return m_unitData.WildBattlePetLevel; }
public void SetWildBattlePetLevel(uint wildBattlePetLevel) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.WildBattlePetLevel), wildBattlePetLevel); } public void SetWildBattlePetLevel(uint wildBattlePetLevel) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.WildBattlePetLevel), wildBattlePetLevel); }
+7 -2
View File
@@ -34,15 +34,20 @@ namespace Game
Unit pet = ObjectAccessor.GetCreatureOrPetOrVehicle(GetPlayer(), packet.CritterGUID); Unit pet = ObjectAccessor.GetCreatureOrPetOrVehicle(GetPlayer(), packet.CritterGUID);
if (!pet) if (!pet)
{ {
Log.outDebug(LogFilter.Network, "Vanitypet {0} does not exist - player '{1}' ({2} / account: {3}) attempted to dismiss it (possibly lagged out)", Log.outDebug(LogFilter.Network, "Critter {0} does not exist - player '{1}' ({2} / account: {3}) attempted to dismiss it (possibly lagged out)",
packet.CritterGUID.ToString(), GetPlayer().GetName(), GetPlayer().GetGUID().ToString(), GetAccountId()); packet.CritterGUID.ToString(), GetPlayer().GetName(), GetPlayer().GetGUID().ToString(), GetAccountId());
return; return;
} }
if (GetPlayer().GetCritterGUID() == pet.GetGUID()) if (GetPlayer().GetCritterGUID() == pet.GetGUID())
{ {
if (pet.IsTypeId(TypeId.Unit) && pet.ToCreature().IsSummon()) if (pet.IsCreature() && pet.IsSummon())
{
if (!_player.GetSummonedBattlePetGUID().IsEmpty() && _player.GetSummonedBattlePetGUID() == pet.GetBattlePetCompanionGUID())
_player.SetBattlePetData(null);
pet.ToTempSummon().UnSummon(); pet.ToTempSummon().UnSummon();
}
} }
} }