Core/Pets: Pet management refactoring
Port From (https://github.com/TrinityCore/TrinityCore/commit/ca92686b44cc8c53a8991bf02d6e8534797fc115)
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user