Core/Pets: Adjust pet slot saving logic after constant changes
Port From (https://github.com/TrinityCore/TrinityCore/commit/fd9eb28322fd75e94fcf5093aaf54bee145edfe8)
This commit is contained in:
@@ -34,11 +34,11 @@ namespace Framework.Constants
|
||||
|
||||
public enum PetSaveMode
|
||||
{
|
||||
AsDeleted = -1, // not saved in fact
|
||||
NotInSlot = -1, // for avoid conflict with stable size grow will use negative value
|
||||
AsDeleted = -2, // not saved in fact
|
||||
AsCurrent = 0, // in current slot (with player)
|
||||
FirstStableSlot = 1,
|
||||
LastStableSlot = 4, // last in DB stable slot index (including), all higher have same meaning as PET_SAVE_NOT_IN_SLOT
|
||||
NotInSlot = 100 // for avoid conflict with stable size grow will use 100
|
||||
LastStableSlot = SharedConst.MaxPetStables, // last in DB stable slot index (including), all higher have same meaning as PET_SAVE_NOT_IN_SLOT
|
||||
}
|
||||
|
||||
public enum PetSpellState
|
||||
|
||||
@@ -721,7 +721,7 @@ namespace Framework.Database
|
||||
PrepareStatement(CharStatements.UPD_CHAR_PET_NAME, "UPDATE character_pet SET name = ?, renamed = 1 WHERE owner = ? AND id = ?");
|
||||
PrepareStatement(CharStatements.UPD_CHAR_PET_SLOT_BY_ID, "UPDATE character_pet SET slot = ? WHERE owner = ? AND id = ?");
|
||||
PrepareStatement(CharStatements.DEL_CHAR_PET_BY_ID, "DELETE FROM character_pet WHERE id = ?");
|
||||
PrepareStatement(CharStatements.DEL_CHAR_PET_BY_SLOT, "DELETE FROM character_pet WHERE owner = ? AND (slot = ? OR slot > ?)");
|
||||
PrepareStatement(CharStatements.DEL_CHAR_PET_BY_SLOT, "DELETE FROM character_pet WHERE owner = ? AND slot IN (?, ?)");
|
||||
PrepareStatement(CharStatements.DEL_ALL_PET_SPELLS_BY_OWNER, "DELETE FROM pet_spell WHERE guid in (SELECT id FROM character_pet WHERE owner=?)");
|
||||
PrepareStatement(CharStatements.UPD_PET_SPECS_BY_OWNER, "UPDATE character_pet SET specialization = 0 WHERE owner=?");
|
||||
PrepareStatement(CharStatements.INS_PET, "INSERT INTO character_pet (id, entry, owner, modelid, level, exp, Reactstate, slot, name, renamed, curhealth, curmana, abdata, savetime, CreatedBySpell, PetType, specialization) " +
|
||||
|
||||
@@ -457,12 +457,12 @@ namespace Game.Entities
|
||||
trans.Append(stmt);
|
||||
|
||||
// prevent existence another hunter pet in PET_SAVE_AS_CURRENT and PET_SAVE_NOT_IN_SLOT
|
||||
if (GetPetType() == PetType.Hunter && (mode == PetSaveMode.AsCurrent || mode > PetSaveMode.LastStableSlot))
|
||||
if (GetPetType() == PetType.Hunter && (mode == PetSaveMode.AsCurrent || mode == PetSaveMode.LastStableSlot))
|
||||
{
|
||||
stmt = DB.Characters.GetPreparedStatement(CharStatements.DEL_CHAR_PET_BY_SLOT);
|
||||
stmt.AddValue(0, ownerLowGUID);
|
||||
stmt.AddValue(1, (byte)PetSaveMode.AsCurrent);
|
||||
stmt.AddValue(2, (byte)PetSaveMode.LastStableSlot);
|
||||
stmt.AddValue(1, (short)mode);
|
||||
stmt.AddValue(2, (short)PetSaveMode.NotInSlot);
|
||||
trans.Append(stmt);
|
||||
}
|
||||
|
||||
|
||||
@@ -1558,7 +1558,7 @@ namespace Game.Entities
|
||||
petInfo.Level = result.Read<byte>(3);
|
||||
petInfo.Experience = result.Read<uint>(4);
|
||||
petInfo.ReactState = (ReactStates)result.Read<byte>(5);
|
||||
PetSaveMode slot = (PetSaveMode)result.Read<byte>(6);
|
||||
PetSaveMode slot = (PetSaveMode)result.Read<short>(6);
|
||||
petInfo.Name = result.Read<string>(7);
|
||||
petInfo.WasRenamed = result.Read<bool>(8);
|
||||
petInfo.Health = result.Read<uint>(9);
|
||||
|
||||
@@ -4833,7 +4833,7 @@ namespace Game.Entities
|
||||
{
|
||||
// Handle removing pet while it is in "temporarily unsummoned" state, for example on mount
|
||||
PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_CHAR_PET_SLOT_BY_ID);
|
||||
stmt.AddValue(0, (byte)PetSaveMode.NotInSlot);
|
||||
stmt.AddValue(0, (short)PetSaveMode.NotInSlot);
|
||||
stmt.AddValue(1, GetGUID().GetCounter());
|
||||
stmt.AddValue(2, m_petStable.CurrentPet.PetNumber);
|
||||
DB.Characters.Execute(stmt);
|
||||
|
||||
Reference in New Issue
Block a user