Core/BattlePets: Misc fixes
Port From (https://github.com/TrinityCore/TrinityCore/commit/446997cdf2bf24163141d7dcaa80bb6ef891f933)
This commit is contained in:
@@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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); }
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user