Core/Corpses: Fixed client crashes with player corpses
Port From (https://github.com/TrinityCore/TrinityCore/commit/93f2affbf2f70c619cdc41b073dd19827df20448)
This commit is contained in:
@@ -111,8 +111,9 @@ namespace Game.Entities
|
||||
stmt.AddValue(index++, GetMapId()); // mapId
|
||||
stmt.AddValue(index++, (uint)m_corpseData.DisplayID); // displayId
|
||||
stmt.AddValue(index++, items.ToString()); // itemCache
|
||||
stmt.AddValue(index++, m_corpseData.RaceID); // race
|
||||
stmt.AddValue(index++, m_corpseData.Sex); // gender
|
||||
stmt.AddValue(index++, (byte)m_corpseData.RaceID); // race
|
||||
stmt.AddValue(index++, (byte)m_corpseData.Class); // class
|
||||
stmt.AddValue(index++, (byte)m_corpseData.Sex); // gender
|
||||
stmt.AddValue(index++, (uint)m_corpseData.Flags); // flags
|
||||
stmt.AddValue(index++, (uint)m_corpseData.DynamicFlags); // dynFlags
|
||||
stmt.AddValue(index++, (uint)m_time); // time
|
||||
@@ -164,10 +165,10 @@ namespace Game.Entities
|
||||
|
||||
public bool LoadCorpseFromDB(ulong guid, SQLFields field)
|
||||
{
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
||||
// SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, race, gender, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ?
|
||||
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
||||
// SELECT posX, posY, posZ, orientation, mapId, displayId, itemCache, race, class, gender, flags, dynFlags, time, corpseType, instanceId, guid FROM corpse WHERE mapId = ? AND instanceId = ?
|
||||
|
||||
float posX = field.Read<float>(0);
|
||||
float posX = field.Read<float>(0);
|
||||
float posY = field.Read<float>(1);
|
||||
float posZ = field.Read<float>(2);
|
||||
float o = field.Read<float>(3);
|
||||
@@ -181,16 +182,17 @@ namespace Game.Entities
|
||||
for (uint index = 0; index < EquipmentSlot.End; ++index)
|
||||
SetItem(index, uint.Parse(items[(int)index]));
|
||||
|
||||
SetRace((Race)field.Read<byte>(7));
|
||||
SetSex((Gender)field.Read<byte>(8));
|
||||
SetFlags((CorpseFlags)field.Read<byte>(9));
|
||||
SetCorpseDynamicFlags((CorpseDynFlags)field.Read<byte>(10));
|
||||
SetOwnerGUID(ObjectGuid.Create(HighGuid.Player, field.Read<ulong>(14)));
|
||||
SetRace(field.Read<byte>(7));
|
||||
SetClass(field.Read<byte>(8));
|
||||
SetSex(field.Read<byte>(9));
|
||||
SetFlags((CorpseFlags)field.Read<byte>(10));
|
||||
SetCorpseDynamicFlags((CorpseDynFlags)field.Read<byte>(11));
|
||||
SetOwnerGUID(ObjectGuid.Create(HighGuid.Player, field.Read<ulong>(15)));
|
||||
SetFactionTemplate(CliDB.ChrRacesStorage.LookupByKey(m_corpseData.RaceID).FactionID);
|
||||
|
||||
m_time = field.Read<uint>(11);
|
||||
m_time = field.Read<uint>(12);
|
||||
|
||||
uint instanceId = field.Read<uint>(13);
|
||||
uint instanceId = field.Read<uint>(14);
|
||||
|
||||
// place
|
||||
SetLocationInstanceId(instanceId);
|
||||
@@ -290,8 +292,9 @@ namespace Game.Entities
|
||||
public void SetPartyGUID(ObjectGuid partyGuid) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.PartyGUID), partyGuid); }
|
||||
public void SetGuildGUID(ObjectGuid guildGuid) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.GuildGUID), guildGuid); }
|
||||
public void SetDisplayId(uint displayId) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.DisplayID), displayId); }
|
||||
public void SetRace(Race race) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.RaceID), (byte)race); }
|
||||
public void SetSex(Gender sex) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Sex), (byte)sex); }
|
||||
public void SetRace(byte race) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.RaceID), race); }
|
||||
public void SetClass(byte classId) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Class), classId); }
|
||||
public void SetSex(byte sex) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Sex), sex); }
|
||||
public void SetFlags(CorpseFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Flags), (uint)flags); }
|
||||
public void SetFactionTemplate(int factionTemplate) { SetUpdateFieldValue(m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.FactionTemplate), factionTemplate); }
|
||||
public void SetItem(uint slot, uint item) { SetUpdateFieldValue(ref m_values.ModifyValue(m_corpseData).ModifyValue(m_corpseData.Items, (int)slot), item); }
|
||||
|
||||
@@ -5189,9 +5189,9 @@ namespace Game.Entities
|
||||
public UpdateField<ObjectGuid> PartyGUID = new UpdateField<ObjectGuid>(0, 4);
|
||||
public UpdateField<ObjectGuid> GuildGUID = new UpdateField<ObjectGuid>(0, 5);
|
||||
public UpdateField<uint> DisplayID = new UpdateField<uint>(0, 6);
|
||||
public UpdateField<byte> Unused = new UpdateField<byte>(0, 7);
|
||||
public UpdateField<byte> RaceID = new UpdateField<byte>(0, 8);
|
||||
public UpdateField<byte> Sex = new UpdateField<byte>(0, 9);
|
||||
public UpdateField<byte> RaceID = new UpdateField<byte>(0, 7);
|
||||
public UpdateField<byte> Sex = new UpdateField<byte>(0, 8);
|
||||
public UpdateField<byte> Class = new UpdateField<byte>(0, 9);
|
||||
public UpdateField<uint> Flags = new UpdateField<uint>(0, 10);
|
||||
public UpdateField<int> FactionTemplate = new UpdateField<int>(0, 11);
|
||||
public UpdateField<uint> StateSpellVisualKitID = new UpdateField<uint>(0, 12);
|
||||
@@ -5210,9 +5210,9 @@ namespace Game.Entities
|
||||
{
|
||||
data.WriteUInt32(Items[i]);
|
||||
}
|
||||
data.WriteUInt8(Unused);
|
||||
data.WriteUInt8(RaceID);
|
||||
data.WriteUInt8(Sex);
|
||||
data.WriteUInt8(Class);
|
||||
data.WriteInt32(Customizations.Size());
|
||||
data.WriteUInt32(Flags);
|
||||
data.WriteInt32(FactionTemplate);
|
||||
@@ -5280,15 +5280,15 @@ namespace Game.Entities
|
||||
}
|
||||
if (changesMask[7])
|
||||
{
|
||||
data.WriteUInt8(Unused);
|
||||
data.WriteUInt8(RaceID);
|
||||
}
|
||||
if (changesMask[8])
|
||||
{
|
||||
data.WriteUInt8(RaceID);
|
||||
data.WriteUInt8(Sex);
|
||||
}
|
||||
if (changesMask[9])
|
||||
{
|
||||
data.WriteUInt8(Sex);
|
||||
data.WriteUInt8(Class);
|
||||
}
|
||||
if (changesMask[10])
|
||||
{
|
||||
@@ -5323,9 +5323,9 @@ namespace Game.Entities
|
||||
ClearChangesMask(PartyGUID);
|
||||
ClearChangesMask(GuildGUID);
|
||||
ClearChangesMask(DisplayID);
|
||||
ClearChangesMask(Unused);
|
||||
ClearChangesMask(RaceID);
|
||||
ClearChangesMask(Sex);
|
||||
ClearChangesMask(Class);
|
||||
ClearChangesMask(Flags);
|
||||
ClearChangesMask(FactionTemplate);
|
||||
ClearChangesMask(StateSpellVisualKitID);
|
||||
|
||||
@@ -4406,8 +4406,9 @@ namespace Game.Entities
|
||||
if (HasPvpFlag(UnitPVPStateFlags.FFAPvp))
|
||||
flags |= CorpseFlags.FFAPvP;
|
||||
|
||||
corpse.SetRace(GetRace());
|
||||
corpse.SetSex(GetNativeSex());
|
||||
corpse.SetRace((byte)GetRace());
|
||||
corpse.SetSex((byte)GetNativeSex());
|
||||
corpse.SetClass((byte)GetClass());
|
||||
corpse.SetCustomizations(m_playerData.Customizations);
|
||||
corpse.SetFlags(flags);
|
||||
corpse.SetDisplayId(GetNativeDisplayId());
|
||||
|
||||
Reference in New Issue
Block a user