Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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];
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
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();
        }
Ejemplo n.º 4
0
 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);
 }
Ejemplo n.º 5
0
 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]));
     }
 }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
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);
                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();
        }
Ejemplo n.º 8
0
        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);
                }
            }
        }