Core/BattlePets: Misc fixes

Port From (https://github.com/TrinityCore/TrinityCore/commit/11cc5c0d3bd46b5e68bb549625ef9ca7294deb21)
This commit is contained in:
hondacrx
2021-10-16 18:12:25 -04:00
parent 2d976d7421
commit e9c6424cd8
11 changed files with 151 additions and 150 deletions
+36 -33
View File
@@ -151,6 +151,22 @@ namespace Game.BattlePets
return _defaultQualityPerSpecies[species];
}
public static uint SelectPetDisplay(BattlePetSpeciesRecord speciesEntry)
{
CreatureTemplate creatureTemplate = Global.ObjectMgr.GetCreatureTemplate(speciesEntry.CreatureID);
if (creatureTemplate != null)
{
if (!speciesEntry.GetFlags().HasFlag(BattlePetSpeciesFlags.RandomDisplay))
{
CreatureModel creatureModel = creatureTemplate.GetRandomValidModel();
if (creatureModel != null)
return creatureModel.CreatureDisplayID;
}
}
return 0;
}
public void LoadFromDB(SQLResult petsResult, SQLResult slotsResult)
{
if (!petsResult.IsEmpty())
@@ -172,19 +188,20 @@ namespace Game.BattlePets
pet.PacketInfo.Guid = ObjectGuid.Create(HighGuid.BattlePet, petsResult.Read<ulong>(0));
pet.PacketInfo.Species = species;
pet.PacketInfo.Breed = petsResult.Read<ushort>(2);
pet.PacketInfo.Level = petsResult.Read<ushort>(3);
pet.PacketInfo.Exp = petsResult.Read<ushort>(4);
pet.PacketInfo.Health = petsResult.Read<uint>(5);
pet.PacketInfo.Quality = petsResult.Read<byte>(6);
pet.PacketInfo.Flags = petsResult.Read<ushort>(7);
pet.PacketInfo.Name = petsResult.Read<string>(8);
pet.PacketInfo.DisplayID = petsResult.Read<uint>(3);
pet.PacketInfo.Level = petsResult.Read<ushort>(4);
pet.PacketInfo.Exp = petsResult.Read<ushort>(5);
pet.PacketInfo.Health = petsResult.Read<uint>(6);
pet.PacketInfo.Quality = petsResult.Read<byte>(7);
pet.PacketInfo.Flags = petsResult.Read<ushort>(8);
pet.PacketInfo.Name = petsResult.Read<string>(9);
pet.PacketInfo.CreatureID = speciesEntry.CreatureID;
if (!petsResult.IsNull(9))
if (!petsResult.IsNull(10))
{
pet.DeclinedName = new();
for (byte i = 0; i < SharedConst.MaxDeclinedNameCases; ++i)
pet.DeclinedName.name[i] = petsResult.Read<string>(9 + i);
pet.DeclinedName.name[i] = petsResult.Read<string>(10 + i);
}
pet.SaveInfo = BattlePetSaveInfo.Unchanged;
@@ -224,12 +241,13 @@ namespace Game.BattlePets
stmt.AddValue(1, _owner.GetBattlenetAccountId());
stmt.AddValue(2, pair.Value.PacketInfo.Species);
stmt.AddValue(3, pair.Value.PacketInfo.Breed);
stmt.AddValue(4, pair.Value.PacketInfo.Level);
stmt.AddValue(5, pair.Value.PacketInfo.Exp);
stmt.AddValue(6, pair.Value.PacketInfo.Health);
stmt.AddValue(7, pair.Value.PacketInfo.Quality);
stmt.AddValue(8, pair.Value.PacketInfo.Flags);
stmt.AddValue(9, pair.Value.PacketInfo.Name);
stmt.AddValue(4, pair.Value.PacketInfo.DisplayID);
stmt.AddValue(5, pair.Value.PacketInfo.Level);
stmt.AddValue(6, pair.Value.PacketInfo.Exp);
stmt.AddValue(7, pair.Value.PacketInfo.Health);
stmt.AddValue(8, pair.Value.PacketInfo.Quality);
stmt.AddValue(9, pair.Value.PacketInfo.Flags);
stmt.AddValue(10, pair.Value.PacketInfo.Name);
trans.Append(stmt);
if (pair.Value.DeclinedName != null)
@@ -309,21 +327,7 @@ namespace Game.BattlePets
return _pets.LookupByKey(guid.GetCounter());
}
public void AddPet(uint species, uint creatureId, ushort level = 1)
{
ushort breed = 3;// default B/B
BattlePetBreedQuality quality = 0;
if (_availableBreedsPerSpecies.ContainsKey(species))
breed = _availableBreedsPerSpecies[species].SelectRandom();
if (_defaultQualityPerSpecies.ContainsKey(species))
quality = _defaultQualityPerSpecies[species];
AddPet(species, creatureId, breed, quality, level);
}
public void AddPet(uint species, uint creatureId, ushort breed, BattlePetBreedQuality quality, ushort level = 1)
public void AddPet(uint species, uint display, ushort breed, BattlePetBreedQuality quality, ushort level = 1)
{
BattlePetSpeciesRecord battlePetSpecies = CliDB.BattlePetSpeciesStorage.LookupByKey(species);
if (battlePetSpecies == null) // should never happen
@@ -335,7 +339,8 @@ namespace Game.BattlePets
BattlePet pet = new();
pet.PacketInfo.Guid = ObjectGuid.Create(HighGuid.BattlePet, Global.ObjectMgr.GetGenerator(HighGuid.BattlePet).Generate());
pet.PacketInfo.Species = species;
pet.PacketInfo.CreatureID = creatureId;
pet.PacketInfo.CreatureID = battlePetSpecies.CreatureID;
pet.PacketInfo.DisplayID = display;
pet.PacketInfo.Level = level;
pet.PacketInfo.Exp = 0;
pet.PacketInfo.Flags = 0;
@@ -479,7 +484,7 @@ namespace Game.BattlePets
item.SetModifier(ItemModifier.BattlePetSpeciesId, pet.PacketInfo.Species);
item.SetModifier(ItemModifier.BattlePetBreedData, (uint)(pet.PacketInfo.Breed | (pet.PacketInfo.Quality << 24)));
item.SetModifier(ItemModifier.BattlePetLevel, pet.PacketInfo.Level);
item.SetModifier(ItemModifier.BattlePetDisplayId, pet.PacketInfo.CreatureID);
item.SetModifier(ItemModifier.BattlePetDisplayId, pet.PacketInfo.DisplayID);
_owner.GetPlayer().SendNewItem(item, 1, true, false);
@@ -526,8 +531,6 @@ namespace Game.BattlePets
_owner.GetPlayer().SetSummonedBattlePetGUID(guid);
_owner.GetPlayer().SetCurrentBattlePetBreedQuality(pet.PacketInfo.Quality);
_owner.GetPlayer().CastSpell(_owner.GetPlayer(), speciesEntry.SummonSpellID != 0 ? speciesEntry.SummonSpellID : SharedConst.DefaultSummonBattlePetSpell);
// TODO: set pet level, quality... update fields
}
public void DismissPet()