Core/UpdateFields: Fixed so update fields not being sent to client. Also removed not needed reflection use for UpdateFields

This commit is contained in:
hondacrx
2020-12-16 00:21:48 -05:00
parent 25f2effd85
commit 73a9202e12
7 changed files with 75 additions and 64 deletions
+16 -12
View File
@@ -505,7 +505,7 @@ namespace Game.Entities
{ {
for (int i = 0; i < (int)EnchantmentSlot.Max; ++i) for (int i = 0; i < (int)EnchantmentSlot.Max; ++i)
{ {
ItemEnchantment enchantmentField = m_itemData.ModifyValue(m_itemData.Enchantment, i); ItemEnchantment enchantmentField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Enchantment, i);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.ID), uint.Parse(enchantmentTokens[i * 3 + 0])); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.ID), uint.Parse(enchantmentTokens[i * 3 + 0]));
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), uint.Parse(enchantmentTokens[i * 3 + 1])); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), uint.Parse(enchantmentTokens[i * 3 + 1]));
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Charges), short.Parse(enchantmentTokens[i * 3 + 2])); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Charges), short.Parse(enchantmentTokens[i * 3 + 2]));
@@ -945,7 +945,7 @@ namespace Game.Entities
ApplyArtifactPowerEnchantmentBonuses(slot, GetEnchantmentId(slot), false, owner); ApplyArtifactPowerEnchantmentBonuses(slot, GetEnchantmentId(slot), false, owner);
ApplyArtifactPowerEnchantmentBonuses(slot, id, true, owner); ApplyArtifactPowerEnchantmentBonuses(slot, id, true, owner);
ItemEnchantment enchantmentField = m_itemData.ModifyValue(m_itemData.Enchantment, (int)slot); ItemEnchantment enchantmentField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Enchantment, (int)slot);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.ID), id); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.ID), id);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), duration); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), duration);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Charges), (short)charges); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Charges), (short)charges);
@@ -957,7 +957,8 @@ namespace Game.Entities
if (GetEnchantmentDuration(slot) == duration) if (GetEnchantmentDuration(slot) == duration)
return; return;
SetUpdateFieldValue(m_itemData.ModifyValue(m_itemData.Enchantment, (int)slot).ModifyValue((ItemEnchantment itemEnchantment) => itemEnchantment.Duration), duration); ItemEnchantment enchantmentField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Enchantment, (int)slot);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), duration);
SetState(ItemUpdateState.Changed, owner); SetState(ItemUpdateState.Changed, owner);
// Cannot use GetOwner() here, has to be passed as an argument to avoid freeze due to hashtable locking // Cannot use GetOwner() here, has to be passed as an argument to avoid freeze due to hashtable locking
} }
@@ -967,7 +968,8 @@ namespace Game.Entities
if (GetEnchantmentCharges(slot) == charges) if (GetEnchantmentCharges(slot) == charges)
return; return;
SetUpdateFieldValue(m_itemData.ModifyValue(m_itemData.Enchantment, (int)slot).ModifyValue((ItemEnchantment itemEnchantment) => itemEnchantment.Charges), (short)charges); ItemEnchantment enchantmentField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Enchantment, (int)slot);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Charges), (short)charges);
SetState(ItemUpdateState.Changed, GetOwner()); SetState(ItemUpdateState.Changed, GetOwner());
} }
@@ -976,7 +978,7 @@ namespace Game.Entities
if (GetEnchantmentId(slot) == 0) if (GetEnchantmentId(slot) == 0)
return; return;
ItemEnchantment enchantmentField = m_itemData.ModifyValue(m_itemData.Enchantment, (int)slot); ItemEnchantment enchantmentField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Enchantment, (int)slot);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.ID), 0u); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.ID), 0u);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), 0u); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), 0u);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Charges), (short)0); SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Charges), (short)0);
@@ -1055,7 +1057,7 @@ namespace Game.Entities
} }
} }
SocketedGem gemField = m_itemData.ModifyValue(m_itemData.Gems, slot); SocketedGem gemField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Gems, slot);
SetUpdateFieldValue(gemField.ModifyValue(gemField.ItemId), gem.ItemId); SetUpdateFieldValue(gemField.ModifyValue(gemField.ItemId), gem.ItemId);
SetUpdateFieldValue(gemField.ModifyValue(gemField.Context), gem.Context); SetUpdateFieldValue(gemField.ModifyValue(gemField.Context), gem.Context);
for (int i = 0; i < 16; ++i) for (int i = 0; i < 16; ++i)
@@ -2063,7 +2065,7 @@ namespace Game.Entities
var foundIndex = m_artifactPowerIdToIndex.LookupByKey(artifactPowerId); var foundIndex = m_artifactPowerIdToIndex.LookupByKey(artifactPowerId);
if (foundIndex != 0) if (foundIndex != 0)
{ {
ArtifactPower artifactPower = m_itemData.ModifyValue(m_itemData.ArtifactPowers, foundIndex); ArtifactPower artifactPower = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ArtifactPowers, foundIndex);
SetUpdateFieldValue(ref artifactPower.PurchasedRank, purchasedRank); SetUpdateFieldValue(ref artifactPower.PurchasedRank, purchasedRank);
SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, currentRankWithBonus); SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, currentRankWithBonus);
} }
@@ -2118,7 +2120,7 @@ namespace Game.Entities
else else
newRank -= (byte)enchant.EffectPointsMin[i]; newRank -= (byte)enchant.EffectPointsMin[i];
artifactPower = m_itemData.ModifyValue(m_itemData.ArtifactPowers, artifactPowerIndex); artifactPower = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ArtifactPowers, artifactPowerIndex);
SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, newRank); SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, newRank);
if (IsEquipped()) if (IsEquipped())
@@ -2142,7 +2144,7 @@ namespace Game.Entities
else else
newRank -= (byte)enchant.EffectPointsMin[i]; newRank -= (byte)enchant.EffectPointsMin[i];
ArtifactPower artifactPower = m_itemData.ModifyValue(m_itemData.ArtifactPowers, artifactPowerIndex); ArtifactPower artifactPower = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ArtifactPowers, artifactPowerIndex);
SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, newRank); SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, newRank);
if (IsEquipped()) if (IsEquipped())
@@ -2174,7 +2176,7 @@ namespace Game.Entities
else else
newRank -= (byte)enchant.EffectPointsMin[i]; newRank -= (byte)enchant.EffectPointsMin[i];
artifactPower = m_itemData.ModifyValue(m_itemData.ArtifactPowers, artifactPowerIndex); artifactPower = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.ArtifactPowers, artifactPowerIndex);
SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, newRank); SetUpdateFieldValue(ref artifactPower.CurrentRankWithBonus, newRank);
if (IsEquipped()) if (IsEquipped())
@@ -2243,11 +2245,13 @@ namespace Game.Entities
public void SetPetitionId(uint petitionId) public void SetPetitionId(uint petitionId)
{ {
SetUpdateFieldValue(m_itemData.ModifyValue(m_itemData.Enchantment, 0).ModifyValue((ItemEnchantment itemEnchantment) => itemEnchantment.ID), petitionId); ItemEnchantment enchantmentField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Enchantment, 0);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.ID), petitionId);
} }
public void SetPetitionNumSignatures(uint signatures) public void SetPetitionNumSignatures(uint signatures)
{ {
SetUpdateFieldValue(m_itemData.ModifyValue(m_itemData.Enchantment, 0).ModifyValue((ItemEnchantment itemEnchantment) => itemEnchantment.Duration), signatures); ItemEnchantment enchantmentField = m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Enchantment, 0);
SetUpdateFieldValue(enchantmentField.ModifyValue(enchantmentField.Duration), signatures);
} }
public void SetFixedLevel(uint level) public void SetFixedLevel(uint level)
@@ -20,8 +20,6 @@ using Game.Networking;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace Game.Entities namespace Game.Entities
{ {
@@ -355,13 +353,13 @@ namespace Game.Entities
public void ClearChangesMask<U>(UpdateField<U> updateField) where U : new() public void ClearChangesMask<U>(UpdateField<U> updateField) where U : new()
{ {
if (typeof(U).GetInterfaces().Any(x => typeof(IHasChangesMask) == x)) if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
((IHasChangesMask)updateField._value).ClearChangesMask(); ((IHasChangesMask)updateField._value).ClearChangesMask();
} }
public void ClearChangesMask<U>(UpdateFieldArray<U> updateField) where U : new() public void ClearChangesMask<U>(UpdateFieldArray<U> updateField) where U : new()
{ {
if (typeof(U).GetInterfaces().Any(x => typeof(IHasChangesMask) == x)) if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
{ {
for (int i = 0; i < updateField.GetSize(); ++i) for (int i = 0; i < updateField.GetSize(); ++i)
((IHasChangesMask)updateField[i]).ClearChangesMask(); ((IHasChangesMask)updateField[i]).ClearChangesMask();
@@ -370,7 +368,7 @@ namespace Game.Entities
public void ClearChangesMask<U>(DynamicUpdateField<U> updateField) where U : new() public void ClearChangesMask<U>(DynamicUpdateField<U> updateField) where U : new()
{ {
if (typeof(U).GetInterfaces().Any(x => typeof(IHasChangesMask) == x)) if (typeof(IHasChangesMask).IsAssignableFrom(typeof(U)))
{ {
for (int i = 0; i < updateField.Size(); ++i) for (int i = 0; i < updateField.Size(); ++i)
((IHasChangesMask)updateField[i]).ClearChangesMask(); ((IHasChangesMask)updateField[i]).ClearChangesMask();
@@ -379,30 +377,6 @@ namespace Game.Entities
} }
} }
public UpdateField<UU> ModifyValue<U, UU>(Expression<Func<U, UpdateField<UU>>> expression) where UU : new()
{
var fieldInfo = ((MemberExpression)expression.Body).Member as FieldInfo;
if (fieldInfo == null)
throw new ArgumentException("The lambda expression 'property' should point to a valid Property");
var updateField = (UpdateField<UU>)fieldInfo.GetValue(this);
_changesMask.Set(updateField.BlockBit);
_changesMask.Set(updateField.Bit);
return updateField;
}
public ref UU ModifyValue<U, UU>(Expression<Func<U, UpdateFieldArray<UU>>> expression, int index) where UU : new()
{
var fieldInfo = ((MemberExpression)expression.Body).Member as FieldInfo;
if (fieldInfo == null)
throw new ArgumentException("The lambda expression should point to a valid Field");
var updateFieldArray = (UpdateFieldArray<UU>)fieldInfo.GetValue(this);
_changesMask.Set(updateFieldArray.Bit);
_changesMask.Set(updateFieldArray.FirstElementBit + index);
return ref updateFieldArray._values[index];
}
public UpdateField<U> ModifyValue<U>(UpdateField<U> updateField) where U : new() public UpdateField<U> ModifyValue<U>(UpdateField<U> updateField) where U : new()
{ {
MarkChanged(updateField); MarkChanged(updateField);
@@ -2599,7 +2599,7 @@ namespace Game.Entities
public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
{ {
UpdateMask allowedMaskForTarget = new UpdateMask(192, new[] { 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01FFFFFFu }); UpdateMask allowedMaskForTarget = new UpdateMask(185, new[] { 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01FFFFFFu });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
} }
@@ -2607,13 +2607,13 @@ namespace Game.Entities
public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags)
{ {
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember))
allowedMaskForTarget |= new UpdateMask(192, new[] { 0x00000012u, 0xFFFFFFFCu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u }); allowedMaskForTarget |= new UpdateMask(185, new[] { 0x00000012u, 0xFFFFFFFCu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u });
} }
void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags)
{ {
if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) if (!fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember))
changesMask &= new UpdateMask(192, new uint[] { 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu }); changesMask &= new UpdateMask(185, new uint[] { 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu });
} }
public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver) public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Player owner, Player receiver)
+6 -4
View File
@@ -2037,24 +2037,26 @@ namespace Game.Entities
if (counter >= SharedConst.MaxQuestCounts) if (counter >= SharedConst.MaxQuestCounts)
return; return;
SetUpdateFieldValue(ref m_playerData.ModifyValue(m_playerData.QuestLog, slot).ModifyValue((QuestLog questLogField) => questLogField.ObjectiveProgress, counter), count); QuestLog questLog = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot);
SetUpdateFieldValue(ref questLog.ModifyValue(questLog.ObjectiveProgress, counter), count);
} }
public void SetQuestSlotState(ushort slot, QuestSlotStateMask state) public void SetQuestSlotState(ushort slot, QuestSlotStateMask state)
{ {
QuestLog questLogField = m_playerData.ModifyValue(m_playerData.QuestLog, slot); QuestLog questLogField = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot);
SetUpdateFieldFlagValue(questLogField.ModifyValue(questLogField.StateFlags), (uint)state); SetUpdateFieldFlagValue(questLogField.ModifyValue(questLogField.StateFlags), (uint)state);
} }
public void RemoveQuestSlotState(ushort slot, QuestSlotStateMask state) public void RemoveQuestSlotState(ushort slot, QuestSlotStateMask state)
{ {
QuestLog questLogField = m_playerData.ModifyValue(m_playerData.QuestLog, slot); QuestLog questLogField = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot);
RemoveUpdateFieldFlagValue(questLogField.ModifyValue(questLogField.StateFlags), (uint)state); RemoveUpdateFieldFlagValue(questLogField.ModifyValue(questLogField.StateFlags), (uint)state);
} }
public void SetQuestSlotTimer(ushort slot, uint timer) public void SetQuestSlotTimer(ushort slot, uint timer)
{ {
SetUpdateFieldValue(m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot).ModifyValue((QuestLog questLog) => questLog.EndTime), timer); QuestLog questLog = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.QuestLog, slot);
SetUpdateFieldValue(questLog.ModifyValue(questLog.EndTime), timer);
} }
void SetQuestCompletedBit(uint questBit, bool completed) void SetQuestCompletedBit(uint questBit, bool completed)
+37 -8
View File
@@ -820,7 +820,8 @@ namespace Game.Entities
// visualize enchantment at player and equipped items // visualize enchantment at player and equipped items
if (slot == EnchantmentSlot.Perm) if (slot == EnchantmentSlot.Perm)
{ {
SetUpdateFieldValue(m_playerData.ModifyValue(m_playerData.VisibleItems, item.GetSlot()).ModifyValue((VisibleItem visibleItemField) => visibleItemField.ItemVisual), item.GetVisibleItemVisual(this)); VisibleItem visibleItem = m_values.ModifyValue(m_playerData).ModifyValue(m_playerData.VisibleItems, item.GetSlot());
SetUpdateFieldValue(visibleItem.ModifyValue(visibleItem.ItemVisual), item.GetVisibleItemVisual(this));
} }
if (apply_dur) if (apply_dur)
@@ -3474,13 +3475,41 @@ namespace Game.Entities
public void SetPetSpellPower(uint spellPower) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetSpellPower), spellPower); } public void SetPetSpellPower(uint spellPower) { SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.PetSpellPower), spellPower); }
public void SetSkillLineId(uint pos, ushort skillLineId) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill)._value.ModifyValue((SkillInfo skillInfo) => skillInfo.SkillLineID, (int)pos), skillLineId); } public void SetSkillLineId(uint pos, ushort skillLineId)
public void SetSkillStep(uint pos, ushort step) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill)._value.ModifyValue((SkillInfo skillInfo) => skillInfo.SkillStep, (int)pos), step); } {
public void SetSkillRank(uint pos, ushort rank) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill)._value.ModifyValue((SkillInfo skillInfo) => skillInfo.SkillRank, (int)pos), rank); } SkillInfo skillInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill);
public void SetSkillStartingRank(uint pos, ushort starting) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill)._value.ModifyValue((SkillInfo skillInfo) => skillInfo.SkillStartingRank, (int)pos), starting); } SetUpdateFieldValue(ref skillInfo.ModifyValue(skillInfo.SkillLineID, (int)pos), skillLineId);
public void SetSkillMaxRank(uint pos, ushort max) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill)._value.ModifyValue((SkillInfo skillInfo) => skillInfo.SkillMaxRank, (int)pos), max); } }
public void SetSkillTempBonus(uint pos, ushort bonus) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill)._value.ModifyValue((SkillInfo skillInfo) => skillInfo.SkillTempBonus, (int)pos), bonus); } public void SetSkillStep(uint pos, ushort step)
public void SetSkillPermBonus(uint pos, ushort bonus) { SetUpdateFieldValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill)._value.ModifyValue((SkillInfo skillInfo) => skillInfo.SkillPermBonus, (int)pos), bonus); } {
SkillInfo skillInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill);
SetUpdateFieldValue(ref skillInfo.ModifyValue(skillInfo.SkillStep, (int)pos), step);
}
public void SetSkillRank(uint pos, ushort rank)
{
SkillInfo skillInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill);
SetUpdateFieldValue(ref skillInfo.ModifyValue(skillInfo.SkillRank, (int)pos), rank);
}
public void SetSkillStartingRank(uint pos, ushort starting)
{
SkillInfo skillInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill);
SetUpdateFieldValue(ref skillInfo.ModifyValue(skillInfo.SkillStartingRank, (int)pos), starting);
}
public void SetSkillMaxRank(uint pos, ushort max)
{
SkillInfo skillInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill);
SetUpdateFieldValue(ref skillInfo.ModifyValue(skillInfo.SkillMaxRank, (int)pos), max);
}
public void SetSkillTempBonus(uint pos, ushort bonus)
{
SkillInfo skillInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill);
SetUpdateFieldValue(ref skillInfo.ModifyValue(skillInfo.SkillTempBonus, (int)pos), bonus);
}
public void SetSkillPermBonus(uint pos, ushort bonus)
{
SkillInfo skillInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.Skill);
SetUpdateFieldValue(ref skillInfo.ModifyValue(skillInfo.SkillPermBonus, (int)pos), bonus);
}
} }
public class PlayerSpell public class PlayerSpell
+6 -4
View File
@@ -3548,8 +3548,8 @@ namespace Game.Entities
if (creature == null || (!creature.IsTrigger() && !creature.HasAuraType(AuraType.Transform) && !creature.HasUnitFlag(UnitFlags.NotSelectable))) if (creature == null || (!creature.IsTrigger() && !creature.HasAuraType(AuraType.Transform) && !creature.HasUnitFlag(UnitFlags.NotSelectable)))
continue; continue;
creature.m_unitData.ModifyValue(m_unitData.DisplayID); creature.m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.DisplayID);
creature.m_unitData.ModifyValue(m_unitData.Flags); creature.m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.Flags);
creature.ForceUpdateFieldChange(); creature.ForceUpdateFieldChange();
creature.BuildValuesUpdateBlockForPlayer(udata, this); creature.BuildValuesUpdateBlockForPlayer(udata, this);
} }
@@ -7271,11 +7271,13 @@ namespace Game.Entities
public void SetRestState(RestTypes type, PlayerRestState state) public void SetRestState(RestTypes type, PlayerRestState state)
{ {
SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RestInfo, (int)type).ModifyValue((RestInfo restInfo) => restInfo.StateID), (byte)state); RestInfo restInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RestInfo, (int)type);
SetUpdateFieldValue(restInfo.ModifyValue(restInfo.StateID), (byte)state);
} }
public void SetRestThreshold(RestTypes type, uint threshold) public void SetRestThreshold(RestTypes type, uint threshold)
{ {
SetUpdateFieldValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RestInfo, (int)type).ModifyValue((RestInfo restInfo) => restInfo.Threshold), threshold); RestInfo restInfo = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.RestInfo, (int)type);
SetUpdateFieldValue(restInfo.ModifyValue(restInfo.Threshold), threshold);
} }
public bool HasPlayerFlag(PlayerFlags flags) { return (m_playerData.PlayerFlags & (uint)flags) != 0; } public bool HasPlayerFlag(PlayerFlags flags) { return (m_playerData.PlayerFlags & (uint)flags) != 0; }
+4 -4
View File
@@ -1777,9 +1777,9 @@ namespace Game.Entities
return; return;
var virtualItemField = m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.VirtualItems, (int)slot); var virtualItemField = m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.VirtualItems, (int)slot);
SetUpdateFieldValue(virtualItemField.ModifyValue((VisibleItem visibleItem) => visibleItem.ItemID), itemId); SetUpdateFieldValue(virtualItemField.ModifyValue(virtualItemField.ItemID), itemId);
SetUpdateFieldValue(virtualItemField.ModifyValue((VisibleItem visibleItem) => visibleItem.ItemAppearanceModID), appearanceModId); SetUpdateFieldValue(virtualItemField.ModifyValue(virtualItemField.ItemAppearanceModID), appearanceModId);
SetUpdateFieldValue(virtualItemField.ModifyValue((VisibleItem visibleItem) => visibleItem.ItemVisual), itemVisual); SetUpdateFieldValue(virtualItemField.ModifyValue(virtualItemField.ItemVisual), itemVisual);
} }
//Unit //Unit
@@ -2363,7 +2363,7 @@ namespace Game.Entities
public uint GetChannelScriptVisualId() { return m_unitData.ChannelData.GetValue().SpellVisual.ScriptVisualID; } public uint GetChannelScriptVisualId() { return m_unitData.ChannelData.GetValue().SpellVisual.ScriptVisualID; }
public void SetChannelVisual(SpellCastVisualField channelVisual) public void SetChannelVisual(SpellCastVisualField channelVisual)
{ {
UnitChannel unitChannel = m_unitData.ModifyValue(m_unitData.ChannelData); UnitChannel unitChannel = m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ChannelData);
SetUpdateFieldValue(ref unitChannel.SpellVisual, channelVisual); SetUpdateFieldValue(ref unitChannel.SpellVisual, channelVisual);
} }
public void AddChannelObject(ObjectGuid guid) { AddDynamicUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ChannelObjects), guid); } public void AddChannelObject(ObjectGuid guid) { AddDynamicUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.ChannelObjects), guid); }