public void LoadValuesFromUpdateFields() { Size = UpdateFields.GetValue <ObjectField, float?>(ObjectField.OBJECT_FIELD_SCALE_X); Bytes0 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_0); MaxHealth = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_MAXHEALTH); Level = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_LEVEL); Faction = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_FACTIONTEMPLATE); Equipment = UpdateFields.GetArray <UnitField, uint>(UnitField.UNIT_VIRTUAL_ITEM_SLOT_ID1, 3); UnitFlags = UpdateFields.GetEnum <UnitField, UnitFlags?>(UnitField.UNIT_FIELD_FLAGS); UnitFlags2 = UpdateFields.GetEnum <UnitField, UnitFlags2?>(UnitField.UNIT_FIELD_FLAGS_2); MeleeTime = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASEATTACKTIME); RangedTime = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_RANGEDATTACKTIME); Model = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_DISPLAYID); Mount = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_MOUNTDISPLAYID); Bytes1 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_1); DynamicFlags = UpdateFields.GetEnum <UnitField, UnitDynamicFlags?>(UnitField.UNIT_DYNAMIC_FLAGS); NpcFlags = UpdateFields.GetEnum <UnitField, NPCFlags?>(UnitField.UNIT_NPC_FLAGS); EmoteState = UpdateFields.GetEnum <UnitField, EmoteType?>(UnitField.UNIT_NPC_EMOTESTATE); Resistances = UpdateFields.GetArray <UnitField, uint>(UnitField.UNIT_FIELD_RESISTANCES_ARMOR, 7); ManaMod = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASE_MANA); HealthMod = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASE_HEALTH); Bytes2 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_2); BoundingRadius = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_BOUNDINGRADIUS); CombatReach = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_COMBATREACH); HoverHeight = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_HOVERHEIGHT); ComputeBytes0(); }
public override void LoadValuesFromUpdateFields() { spellId = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_SPELLID); DecalPropertiesId = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_DECAL_PROPERTIES_ID); TimeToTarget = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_TIME_TO_TARGET); TimeToTargetScale = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_TIME_TO_TARGET_SCALE); if (Settings.UseDBC) { for (uint idx = 0; idx < 32; idx++) { var tuple = Tuple.Create(spellId, idx); if (DBC.DBC.SpellEffectStores.ContainsKey(tuple)) { var effect = DBC.DBC.SpellEffectStores[tuple]; if (effect.Effect == (uint)SpellEffects.SPELL_EFFECT_CREATE_AREATRIGGER || effect.EffectAura == (uint)AuraTypeLegion.SPELL_AURA_AREA_TRIGGER) { // If we already had a SPELL_EFFECT_CREATE_AREATRIGGER, spell has multiple areatrigger, // so we can't deduce SpellMiscId, erase previous value & break if (SpellMiscId != null) { SpellMiscId = null; break; } SpellMiscId = (uint)effect.EffectMiscValue[0]; } } } } }
public override void LoadValuesFromUpdateFields() { Bytes0 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_0); Bytes1 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_1); Bytes2 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_2); Size = UpdateFields.GetValue <ObjectField, float?>(ObjectField.OBJECT_FIELD_SCALE_X); MaxHealth = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_MAXHEALTH); Level = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_LEVEL); Faction = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_FACTIONTEMPLATE); if (ClientVersion.AddedInVersion(ClientType.Legion)) { ScalingMinLevel = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_SCALING_LEVEL_MIN); ScalingMaxLevel = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_SCALING_LEVEL_MAX); if (ScalingMinLevel != null && ScalingMaxLevel != null) { CreatureTemplateScaling creatureTemplateScaling = new CreatureTemplateScaling(); creatureTemplateScaling.Entry = UpdateFields.GetValue <ObjectField, uint>(ObjectField.OBJECT_FIELD_ENTRY); creatureTemplateScaling.LevelScalingDelta = UpdateFields.GetValue <UnitField, uint>(UnitField.UNIT_FIELD_SCALING_LEVEL_DELTA); Storage.CreatureTemplateScalings.Add(creatureTemplateScaling); } EquipmentRaw = UpdateFields.GetArray <UnitField, uint>(UnitField.UNIT_VIRTUAL_ITEM_SLOT_ID, 6); } else { EquipmentRaw = UpdateFields.GetArray <UnitField, uint>(UnitField.UNIT_VIRTUAL_ITEM_SLOT_ID, 3); } UnitFlags = UpdateFields.GetEnum <UnitField, UnitFlags?>(UnitField.UNIT_FIELD_FLAGS); UnitFlags2 = UpdateFields.GetEnum <UnitField, UnitFlags2?>(UnitField.UNIT_FIELD_FLAGS_2); MeleeTime = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASEATTACKTIME); RangedTime = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_RANGEDATTACKTIME); Model = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_DISPLAYID); Mount = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_MOUNTDISPLAYID); if (ClientVersion.AddedInVersion(ClientType.WarlordsOfDraenor)) { DynamicFlagsWod = UpdateFields.GetEnum <ObjectField, UnitDynamicFlagsWOD?>(ObjectField.OBJECT_DYNAMIC_FLAGS); } else { DynamicFlags = UpdateFields.GetEnum <UnitField, UnitDynamicFlags?>(UnitField.UNIT_DYNAMIC_FLAGS); } NpcFlags = UpdateFields.GetEnum <UnitField, NPCFlags?>(UnitField.UNIT_NPC_FLAGS); EmoteState = UpdateFields.GetEnum <UnitField, EmoteType?>(UnitField.UNIT_NPC_EMOTESTATE); Resistances = UpdateFields.GetArray <UnitField, short>(UnitField.UNIT_FIELD_RESISTANCES, 7); ManaMod = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASE_MANA); HealthMod = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASE_HEALTH); BoundingRadius = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_BOUNDINGRADIUS); CombatReach = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_COMBATREACH); HoverHeight = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_HOVERHEIGHT); if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_4_0_17359)) { PowerType = UpdateFields.GetEnum <UnitField, PowerType?>(UnitField.UNIT_FIELD_DISPLAY_POWER); InteractSpellID = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_INTERACT_SPELLID); } ComputeBytes0(); ComputeEquipment(); }
public override void LoadValuesFromUpdateFields() { spellId = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_SPELLID); DecalPropertiesId = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_DECAL_PROPERTIES_ID); TimeToTarget = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_TIME_TO_TARGET); TimeToTargetScale = UpdateFields.GetValue <AreaTriggerField, uint>(AreaTriggerField.AREATRIGGER_TIME_TO_TARGET_SCALE); }
public Quaternion GetStaticRotation() { if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_0_9767)) { return(Movement.Rotation); } else if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_2_9056)) // packed quaternion { long packedQuat = UpdateFields.GetValue <GameObjectField, long>(GameObjectField.GAMEOBJECT_ROTATION); return(new Quaternion(packedQuat)); } else { float [] rotation = UpdateFields.GetArray <GameObjectField, float>(GameObjectField.GAMEOBJECT_ROTATION, 4); return(new Quaternion(rotation[0], rotation[1], rotation[2], rotation[3])); } }
public override void LoadValuesFromUpdateFields() { Size = UpdateFields.GetValue <ObjectField, float?>(ObjectField.OBJECT_FIELD_SCALE_X); Faction = UpdateFields.GetValue <GameObjectField, uint?>(GameObjectField.GAMEOBJECT_FACTION); Flags = UpdateFields.GetEnum <GameObjectField, GameObjectFlag?>(GameObjectField.GAMEOBJECT_FLAGS); }
public override void LoadValuesFromUpdateFields() { Bytes0 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_0); Bytes1 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_1); Bytes2 = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BYTES_2); Size = UpdateFields.GetValue <ObjectField, float?>(ObjectField.OBJECT_FIELD_SCALE_X); MaxHealth = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_MAXHEALTH); Level = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_LEVEL); Faction = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_FACTIONTEMPLATE); if (ClientVersion.AddedInVersion(ClientType.Legion)) { ScalingMinLevel = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_SCALING_LEVEL_MIN); ScalingMaxLevel = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_SCALING_LEVEL_MAX); ScalingDelta = UpdateFields.GetValue <UnitField, int>(UnitField.UNIT_FIELD_SCALING_LEVEL_DELTA);; EquipmentRaw = UpdateFields.GetArray <UnitField, uint>(UnitField.UNIT_VIRTUAL_ITEM_SLOT_ID, 6); } else { EquipmentRaw = UpdateFields.GetArray <UnitField, uint>(UnitField.UNIT_VIRTUAL_ITEM_SLOT_ID, 3); } UnitFlags = UpdateFields.GetEnum <UnitField, UnitFlags?>(UnitField.UNIT_FIELD_FLAGS); UnitFlags2 = UpdateFields.GetEnum <UnitField, UnitFlags2?>(UnitField.UNIT_FIELD_FLAGS_2); if (ClientVersion.AddedInVersion(ClientType.Legion)) { UnitFlags3 = UpdateFields.GetEnum <UnitField, UnitFlags3?>(UnitField.UNIT_FIELD_FLAGS_3); } MeleeTime = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASEATTACKTIME); RangedTime = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_RANGEDATTACKTIME); Model = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_DISPLAYID); Mount = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_MOUNTDISPLAYID); if (ClientVersion.AddedInVersion(ClientType.WarlordsOfDraenor)) { DynamicFlagsWod = UpdateFields.GetEnum <ObjectField, UnitDynamicFlagsWOD?>(ObjectField.OBJECT_DYNAMIC_FLAGS); } else { DynamicFlags = UpdateFields.GetEnum <UnitField, UnitDynamicFlags?>(UnitField.UNIT_DYNAMIC_FLAGS); } if (ClientVersion.AddedInVersion(ClientType.Legion)) { // @TODO TEMPORARY HACK // For read NpcFlags as ulong uint[] tempNpcFlags = UpdateFields.GetArray <UnitField, uint>(UnitField.UNIT_NPC_FLAGS, 2); NpcFlags = (NPCFlags)Utilities.MAKE_PAIR64(tempNpcFlags[0], tempNpcFlags[1]); } else { NpcFlags = UpdateFields.GetEnum <UnitField, NPCFlags?>(UnitField.UNIT_NPC_FLAGS); } EmoteState = UpdateFields.GetEnum <UnitField, EmoteType?>(UnitField.UNIT_NPC_EMOTESTATE); Resistances = UpdateFields.GetArray <UnitField, short>(UnitField.UNIT_FIELD_RESISTANCES, 7); ManaMod = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASE_MANA); HealthMod = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_BASE_HEALTH); BoundingRadius = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_BOUNDINGRADIUS); CombatReach = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_COMBATREACH); HoverHeight = UpdateFields.GetValue <UnitField, float?>(UnitField.UNIT_FIELD_HOVERHEIGHT); if (ClientVersion.AddedInVersion(ClientVersionBuild.V5_4_0_17359)) { PowerType = UpdateFields.GetEnum <UnitField, PowerType?>(UnitField.UNIT_FIELD_DISPLAY_POWER); InteractSpellID = UpdateFields.GetValue <UnitField, uint?>(UnitField.UNIT_FIELD_INTERACT_SPELLID); } ComputeBytes0(); ComputeEquipment(); }
public override void LoadValuesFromUpdateFields() { Id = UpdateFields.GetValue <ObjectField, uint>(ObjectField.OBJECT_FIELD_ENTRY); LastLineEndTime = UpdateFields.GetValue <ConversationField, uint>(ConversationField.CONVERSATION_LAST_LINE_END_TIME); var actorTemplates = new List <ConversationActorTemplate>(); var actors = new List <UpdateField>(); if (DynamicUpdateFields.TryGetValue(WowPacketParser.Enums.Version.UpdateFields.GetUpdateField(ConversationDynamicField.CONVERSATION_DYNAMIC_FIELD_ACTORS), out actors)) { var ActorSize = 6; for (var i = 0; i + ActorSize <= actors.Count; i += ActorSize) { var actor = new ConversationActorTemplate(); actor.Type = actors[i + 4].UInt32Value; if (actor.Type == (uint)ActorType.WorldObjectActor) { ulong lowPart = Utilities.MAKE_PAIR64(actors[i + 0].UInt32Value, actors[i + 1].UInt32Value); ulong highPart = Utilities.MAKE_PAIR64(actors[i + 2].UInt32Value, actors[i + 3].UInt32Value); actor.Guid = new WowGuid128(lowPart, highPart); } if (actor.Type == (uint)ActorType.CreatureActor) { actor.Id = actors[i + 0].UInt32Value; actor.CreatureId = actors[i + 1].UInt32Value; actor.CreatureModelId = actors[i + 2].UInt32Value; Storage.ConversationActorTemplates.Add(actor); } actorTemplates.Add(actor); } } var lines = new List <UpdateField>(); if (DynamicUpdateFields.TryGetValue(WowPacketParser.Enums.Version.UpdateFields.GetUpdateField(ConversationDynamicField.CONVERSATION_DYNAMIC_FIELD_LINES), out lines)) { var LineSize = 4; for (var i = 0; i + LineSize <= lines.Count; i += LineSize) { var line = new ConversationLineTemplate(); line.Id = lines[i + 0].UInt32Value; line.StartTime = lines[i + 1].UInt32Value; line.UiCameraID = lines[i + 2].UInt32Value; var part = lines[i + 3].UInt32Value; var actorIdx = (byte)(part & 0xFF); line.ActorIdx = actorIdx; line.Flags = (byte)((part >> 8) & 0xFF); if (i == 0) { FirstLineID = line.Id; } var actor = new ConversationActor(); actor.ConversationId = Id; var actorTemplate = actorTemplates[actorIdx]; actor.ConversationActorId = actorTemplate.Id; actor.Guid = actorTemplate.Guid; actor.Idx = actorIdx; Storage.ConversationLineTemplates.Add(line); Storage.ConversationActors.Add(actor); } } }