public void UpdateValue <T>(UnitFields pos, T value, int increment = 0) { m_touched[OBJECT_TYPES.TYPE_UNIT] = true; m_unitfields.Set((int)pos + increment, true); if (value is long || value is ulong) { m_unitfields.Set((int)pos + 1 + increment, true); m_unitvalues[(int)pos + increment] = Convert.ToInt32(Convert.ToInt64(value) & uint.MaxValue); m_unitvalues[(int)pos + 1 + increment] = Convert.ToInt32((Convert.ToInt64(value) >> 32) & uint.MaxValue); } else { m_unitvalues[(int)pos + increment] = value; } }
private static void HandleValuesUpdate(uint blockId, UpdateType updateType, ObjectType objectType, Packet packet) { var maskSizeBlocks = packet.ReadByte("{0}. MaskSize", blockId); var maskSizeBytes = maskSizeBlocks * 4; var maskSizeBits = maskSizeBytes * 8; var bits = new BitArray(maskSizeBits); var fields = new Hashtable(); byte dynamicUpdateCount; for (int i = 0, b = 0; i < maskSizeBlocks; i++) { uint mask = packet.ReadUInt32("{0}. Mask[{1}]", blockId, i); packet.SetLastDataField("{0:X8}", mask); var bytes = BitConverter.GetBytes(mask); var blockBits = new BitArray(bytes); for (int x = 0; x < 32; x++) { bits[b++] = blockBits[x]; } } for (int i = 0; i < maskSizeBits; i++) { if (!bits.Get(i)) { continue; } ObjectFields objectField = (ObjectFields)i; UnitFields unitField = (UnitFields)i; PlayerFields playerField = (PlayerFields)i; if (Enum.IsDefined(typeof(ObjectFields), i)) { Debug.Print(objectField.GetFullName()); } else if (Enum.IsDefined(typeof(UnitFields), i)) { Debug.Print(unitField.GetFullName()); } else if (Enum.IsDefined(typeof(PlayerFields), i)) { Debug.Print(playerField.GetFullName()); } else { Debug.Print("Unknown: {0}", i); } if (i < (int)ObjectFields.End) { switch (objectField) { case ObjectFields.Scale: fields[i] = packet.ReadSingle(objectField.GetFullName()); break; default: fields[i] = packet.ReadUInt32(objectField.GetFullName()); break; } } else { // NOTE: This assumes a unit or player of some kind. // It does not allow for game objects or such (yet). switch (objectType) { case ObjectType.Player: case ObjectType.Unit: switch (i) { case (int)UnitFields.BoundingRadius: case (int)UnitFields.CombatReach: case (int)UnitFields.MinDamage: case (int)UnitFields.MaxDamage: case (int)UnitFields.MinOffHandDamage: case (int)UnitFields.MaxOffHandDamage: case (int)UnitFields.ModCastingSpeed: case (int)UnitFields.ModHaste: case (int)UnitFields.ModRangedHaste: case (int)UnitFields.AttackPowerMultiplier: case (int)UnitFields.RangedAttackPowerMultiplier: case (int)UnitFields.MinRangedDamage: case (int)UnitFields.MaxRangedDamage: case (int)UnitFields.PowerCostMultiplier: case (int)PlayerFields.BlockPercentage: case (int)PlayerFields.DodgePercentage: case (int)PlayerFields.ParryPercentage: case (int)PlayerFields.CritPercentage: case (int)PlayerFields.RangedCritPercentage: case (int)PlayerFields.OffhandCritPercentage: case (int)PlayerFields.Mastery: case (int)PlayerFields.ModHealingPercent: case (int)PlayerFields.ModHealingDonePercent: case (int)PlayerFields.WeaponDmgMultipliers: case (int)PlayerFields.ModSpellPowerPercent: case (int)PlayerFields.ModResiliencePercent: case (int)PlayerFields.OverrideSpellPowerByAPPercent: case (int)PlayerFields.OverrideAPBySpellPowerPercent: case (int)PlayerFields.RuneRegen: case (int)PlayerFields.RuneRegen1: case (int)PlayerFields.RuneRegen2: case (int)PlayerFields.RuneRegen3: case (int)PlayerFields.UiHitModifier: case (int)PlayerFields.UiSpellHitModifier: case (int)PlayerFields.HomeRealmTimeOffset: case (int)PlayerFields.ModPetHaste: fields[i] = packet.ReadSingle(i < (int)UnitFields.End ? unitField.GetFullName() : playerField.GetFullName()); break; default: fields[i] = packet.ReadUInt32(i < (int)UnitFields.End ? unitField.GetFullName() : playerField.GetFullName()); break; } break; default: break; } } } dynamicUpdateCount = packet.ReadByte("Dynamic update count"); }
public ExtendedUpdateFieldId(UnitFields val) { RawId = (int)val; ObjectType = ObjectTypeId.Unit; }
public int GetInt32(UnitFields field) { return m_updateValues[(int)field].Int32; }
public ExtendedUpdateFieldId(UnitFields val) { RawId = (int)val; ObjectType = ObjectTypeId.Unit; }
public int GetInt32(UnitFields field) { return(this.m_updateValues[(int)field].Int32); }
public void SetField(UnitFields field, float value) { SetField((ushort)field, value); }
public float GetFieldFloat(UnitFields field) { return(GetFieldFloat((ushort)field)); }
public int GetFieldSigned(UnitFields field) { return(GetFieldSigned((ushort)field)); }
public uint GetFieldUnsigned(UnitFields field) { return(GetFieldUnsigned((ushort)field)); }
/// <summary> /// /// </summary> /// <param name="val"></param> public UpdateFieldId(UnitFields value) { m_RawId = (int)value; }
/// <summary> /// /// </summary> /// <param name="val"></param> public UpdateFieldId( UnitFields value ) { m_RawId = (int)value; }
public uint GetUInt32(UnitFields field) { return(m_updateValues[(int)field].UInt32); }