Core/Pets: Pet management refactoring

Port From (https://github.com/TrinityCore/TrinityCore/commit/ca92686b44cc8c53a8991bf02d6e8534797fc115)
This commit is contained in:
hondacrx
2022-03-10 09:39:55 -05:00
parent 9d5dd66215
commit 718302fa18
14 changed files with 549 additions and 378 deletions
+5
View File
@@ -2820,6 +2820,10 @@ namespace Game
stmt.AddValue(0, lowGuid);
SetQuery(PlayerLoginQueryLoad.CorpseLocation, stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHAR_PETS);
stmt.AddValue(0, lowGuid);
SetQuery(PlayerLoginQueryLoad.PetSlots, stmt);
stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHARACTER_GARRISON);
stmt.AddValue(0, lowGuid);
SetQuery(PlayerLoginQueryLoad.Garrison, stmt);
@@ -2938,6 +2942,7 @@ namespace Game
Currency,
CufProfiles,
CorpseLocation,
PetSlots,
Garrison,
GarrisonBlueprints,
GarrisonBuildings,
+43 -34
View File
@@ -343,59 +343,68 @@ namespace Game
public void SendStablePet(ObjectGuid guid)
{
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_PET_SLOTS_DETAIL);
stmt.AddValue(0, guid.GetCounter());
stmt.AddValue(1, (byte)PetSaveMode.FirstStableSlot);
stmt.AddValue(2, (byte)PetSaveMode.LastStableSlot);
_queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(SendStablePetCallback, guid));
}
void SendStablePetCallback(ObjectGuid guid, SQLResult result)
{
if (!GetPlayer())
return;
PetStableList packet = new();
packet.StableMaster = guid;
Pet pet = GetPlayer().GetPet();
PetStable petStable = GetPlayer().GetPetStable();
if (petStable == null)
{
SendPacket(packet);
return;
}
uint petSlot = 0;
// not let move dead pet in slot
if (pet && pet.IsAlive() && pet.GetPetType() == PetType.Hunter)
if (petStable.CurrentPet != null)
{
PetStableInfo stableEntry;// = new PetStableInfo();
PetStable.PetInfo pet = petStable.CurrentPet;
PetStableInfo stableEntry;
stableEntry.PetSlot = petSlot;
stableEntry.PetNumber = pet.GetCharmInfo().GetPetNumber();
stableEntry.CreatureID = pet.GetEntry();
stableEntry.DisplayID = pet.GetDisplayId();
stableEntry.ExperienceLevel = pet.GetLevel();
stableEntry.PetNumber = pet.PetNumber;
stableEntry.CreatureID = pet.CreatureId;
stableEntry.DisplayID = pet.DisplayId;
stableEntry.ExperienceLevel = pet.Level;
stableEntry.PetFlags = PetStableinfo.Active;
stableEntry.PetName = pet.GetName();
stableEntry.PetName = pet.Name;
++petSlot;
packet.Pets.Add(stableEntry);
}
if (!result.IsEmpty())
else
{
do
PetStable.PetInfo pet = petStable.GetUnslottedHunterPet();
if (pet != null)
{
PetStableInfo stableEntry;// = new PetStableInfo();
PetStableInfo stableEntry;
stableEntry.PetSlot = petSlot;
stableEntry.PetNumber = result.Read<uint>(1); // petnumber
stableEntry.CreatureID = result.Read<uint>(2); // creature entry
stableEntry.DisplayID = result.Read<uint>(5); // creature displayid
stableEntry.ExperienceLevel = result.Read<ushort>(3); // level
stableEntry.PetFlags = PetStableinfo.Inactive;
stableEntry.PetName = result.Read<string>(4); // Name
stableEntry.PetNumber = pet.PetNumber;
stableEntry.CreatureID = pet.CreatureId;
stableEntry.DisplayID = pet.DisplayId;
stableEntry.ExperienceLevel = pet.Level;
stableEntry.PetFlags = PetStableinfo.Active;
stableEntry.PetName = pet.Name;
++petSlot;
packet.Pets.Add(stableEntry);
}
}
foreach (var pet in petStable.StabledPets)
{
if (pet != null)
{
PetStableInfo stableEntry;
stableEntry.PetSlot = petSlot;
stableEntry.PetNumber = pet.PetNumber;
stableEntry.CreatureID = pet.CreatureId;
stableEntry.DisplayID = pet.DisplayId;
stableEntry.ExperienceLevel = pet.Level;
stableEntry.PetFlags = PetStableinfo.Inactive;
stableEntry.PetName = pet.Name;
++petSlot;
packet.Pets.Add(stableEntry);
}
while (result.NextRow());
}
SendPacket(packet);
+6 -1
View File
@@ -536,10 +536,12 @@ namespace Game
bool isdeclined = packet.RenameData.HasDeclinedNames;
string name = packet.RenameData.NewName;
PetStable petStable = _player.GetPetStable();
Pet pet = ObjectAccessor.GetPet(GetPlayer(), petguid);
// check it!
if (!pet || !pet.IsPet() || pet.ToPet().GetPetType() != PetType.Hunter || !pet.HasPetFlag(UnitPetFlags.CanBeRenamed) ||
pet.GetOwnerGUID() != GetPlayer().GetGUID() || pet.GetCharmInfo() == null)
pet.GetOwnerGUID() != _player.GetGUID() || pet.GetCharmInfo() == null ||
petStable == null || petStable.CurrentPet == null || petStable.CurrentPet.PetNumber != pet.GetCharmInfo().GetPetNumber())
return;
PetNameInvalidReason res = ObjectManager.CheckPetName(name);
@@ -559,6 +561,9 @@ namespace Game
pet.SetGroupUpdateFlag(GroupUpdatePetFlags.Name);
pet.RemovePetFlag(UnitPetFlags.CanBeRenamed);
petStable.CurrentPet.Name = name;
petStable.CurrentPet.WasRenamed = true;
PreparedStatement stmt;
SQLTransaction trans = new();
if (isdeclined)