Core/WorldObject: fixes crash when comparing two class/structs.

This commit is contained in:
hondacrx
2021-01-14 10:29:20 -05:00
parent 751874784e
commit 16c72839a7
2 changed files with 7 additions and 18 deletions
@@ -988,7 +988,7 @@ namespace Game.Entities
public uint SpellXSpellVisualID; public uint SpellXSpellVisualID;
public uint ScriptVisualID; public uint ScriptVisualID;
public void WriteCreate(WorldPacket data, Object owner, Player receiver) public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver)
{ {
data.WriteUInt32(SpellXSpellVisualID); data.WriteUInt32(SpellXSpellVisualID);
data.WriteUInt32(ScriptVisualID); data.WriteUInt32(ScriptVisualID);
@@ -2287,7 +2287,7 @@ namespace Game.Entities
ChrCustomizationChoiceID = chrCustomizationChoiceID; ChrCustomizationChoiceID = chrCustomizationChoiceID;
} }
public void WriteCreate(WorldPacket data, Object owner, Player receiver) public void WriteCreate(WorldPacket data, WorldObject owner, Player receiver)
{ {
data.WriteUInt32(ChrCustomizationOptionID); data.WriteUInt32(ChrCustomizationOptionID);
data.WriteUInt32(ChrCustomizationChoiceID); data.WriteUInt32(ChrCustomizationChoiceID);
+5 -16
View File
@@ -786,15 +786,10 @@ namespace Game.Entities
public void BuildFieldsUpdate(Player player, Dictionary<Player, UpdateData> data_map) public void BuildFieldsUpdate(Player player, Dictionary<Player, UpdateData> data_map)
{ {
var data = data_map.LookupByKey(player); if (!data_map.ContainsKey(player))
if (data == null)
{
data_map.Add(player, new UpdateData(player.GetMapId())); data_map.Add(player, new UpdateData(player.GetMapId()));
data = data_map.LookupByKey(player);
}
BuildValuesUpdateBlockForPlayer(data, player); BuildValuesUpdateBlockForPlayer(data_map[player], player);
} }
public abstract void BuildValuesCreate(WorldPacket data, Player target); public abstract void BuildValuesCreate(WorldPacket data, Player target);
@@ -802,8 +797,7 @@ namespace Game.Entities
public void SetUpdateFieldValue<T>(IUpdateField<T> updateField, T newValue) where T : new() public void SetUpdateFieldValue<T>(IUpdateField<T> updateField, T newValue) where T : new()
{ {
Type type = typeof(T); if (!newValue.Equals(updateField.GetValue()))
if (type.IsGenericType || (dynamic)newValue != updateField.GetValue())
{ {
updateField.SetValue(newValue); updateField.SetValue(newValue);
AddToObjectUpdateIfNeeded(); AddToObjectUpdateIfNeeded();
@@ -812,8 +806,7 @@ namespace Game.Entities
public void SetUpdateFieldValue<T>(ref T value, T newValue) where T : new() public void SetUpdateFieldValue<T>(ref T value, T newValue) where T : new()
{ {
Type type = typeof(T); if (!newValue.Equals(value))
if (type.IsGenericType || (dynamic)newValue != value)
{ {
value = newValue; value = newValue;
AddToObjectUpdateIfNeeded(); AddToObjectUpdateIfNeeded();
@@ -822,7 +815,7 @@ namespace Game.Entities
public void SetUpdateFieldValue<T>(DynamicUpdateField<T> updateField, int index, T newValue) where T : new() public void SetUpdateFieldValue<T>(DynamicUpdateField<T> updateField, int index, T newValue) where T : new()
{ {
if ((dynamic)newValue != updateField[index]) if (!newValue.Equals(updateField[index]))
{ {
updateField[index] = newValue; updateField[index] = newValue;
AddToObjectUpdateIfNeeded(); AddToObjectUpdateIfNeeded();
@@ -921,8 +914,6 @@ namespace Game.Entities
dynamic value = updateField.GetValue(); dynamic value = updateField.GetValue();
// don't want to include Util.h here
//ApplyPercentModFloatVar(value, percent, apply);
if (percent == -100.0f) if (percent == -100.0f)
percent = -99.99f; percent = -99.99f;
value *= (apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent)); value *= (apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent));
@@ -936,8 +927,6 @@ namespace Game.Entities
dynamic value = oldValue; dynamic value = oldValue;
// don't want to include Util.h here
//ApplyPercentModFloatVar(value, percent, apply);
if (percent == -100.0f) if (percent == -100.0f)
percent = -99.99f; percent = -99.99f;
value *= (apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent)); value *= (apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent));