Exemplo n.º 1
0
 protected virtual T?Process(PacketBase basePacket, PacketAuraUpdate packet) => default;
Exemplo n.º 2
0
        public static void HandleAuraUpdate(Packet packet)
        {
            PacketAuraUpdate packetAuraUpdate = packet.Holder.AuraUpdate = new();

            packet.ReadBit("UpdateAll");
            int countBits = ClientVersion.AddedInVersion(ClientVersionBuild.V1_13_3_32790) ? 8 : 7;
            var count     = packet.ReadBits("AurasCount", countBits);

            var auras = new List <Aura>();

            for (var i = 0; i < count; ++i)
            {
                var auraEntry = new PacketAuraUpdateEntry();
                packetAuraUpdate.Updates.Add(auraEntry);
                var aura = new Aura();

                auraEntry.Slot = packet.ReadByte("Slot", i);

                packet.ResetBitReader();
                var hasAura = packet.ReadBit("HasAura", i);
                auraEntry.Remove = !hasAura;
                if (hasAura)
                {
                    packet.ReadPackedGuid128("CastID", i);
                    aura.SpellId = auraEntry.Spell = (uint)packet.ReadInt32 <SpellId>("SpellID", i);
                    packet.ReadInt32("SpellXSpellVisualID", i);
                    var flags = packet.ReadByteE <AuraFlagMoP>("Flags", i);
                    aura.AuraFlags  = flags;
                    auraEntry.Flags = flags.ToUniversal();
                    packet.ReadUInt32("ActiveFlags", i);
                    aura.Level   = packet.ReadUInt16("CastLevel", i);
                    aura.Charges = packet.ReadByte("Applications", i);
                    packet.ReadInt32("ContentTuningID", i);

                    packet.ResetBitReader();

                    var hasCastUnit  = packet.ReadBit("HasCastUnit", i);
                    var hasDuration  = packet.ReadBit("HasDuration", i);
                    var hasRemaining = packet.ReadBit("HasRemaining", i);

                    var hasTimeMod = packet.ReadBit("HasTimeMod", i);

                    var pointsCount = packet.ReadBits("PointsCount", 6, i);
                    var effectCount = packet.ReadBits("EstimatedPoints", 6, i);

                    var hasContentTuning = packet.ReadBit("HasContentTuning", i);

                    if (hasContentTuning)
                    {
                        V8_0_1_27101.Parsers.SpellHandler.ReadContentTuningParams(packet, i, "ContentTuning");
                    }

                    if (hasCastUnit)
                    {
                        auraEntry.CasterUnit = packet.ReadPackedGuid128("CastUnit", i);
                    }

                    aura.Duration    = hasDuration ? packet.ReadInt32("Duration", i) : 0;
                    aura.MaxDuration = hasRemaining ? packet.ReadInt32("Remaining", i) : 0;

                    if (hasDuration)
                    {
                        auraEntry.Duration = aura.Duration;
                    }

                    if (hasRemaining)
                    {
                        auraEntry.Remaining = aura.MaxDuration;
                    }

                    if (hasTimeMod)
                    {
                        packet.ReadSingle("TimeMod");
                    }

                    for (var j = 0; j < pointsCount; ++j)
                    {
                        packet.ReadSingle("Points", i, j);
                    }

                    for (var j = 0; j < effectCount; ++j)
                    {
                        packet.ReadSingle("EstimatedPoints", i, j);
                    }

                    auras.Add(aura);
                    packet.AddSniffData(StoreNameType.Spell, (int)aura.SpellId, "AURA_UPDATE");
                }
            }

            var guid = packet.ReadPackedGuid128("UnitGUID");

            packetAuraUpdate.Unit = guid;

            if (Storage.Objects.ContainsKey(guid))
            {
                var unit = Storage.Objects[guid].Item1 as Unit;
                if (unit != null)
                {
                    // If this is the first packet that sends auras
                    // (hopefully at spawn time) add it to the "Auras" field,
                    // if not create another row of auras in AddedAuras
                    // (similar to ChangedUpdateFields)

                    if (unit.Auras == null)
                    {
                        unit.Auras = auras;
                    }
                    else
                    {
                        unit.AddedAuras.Add(auras);
                    }
                }
            }
        }
Exemplo n.º 3
0
 protected override UniversalGuid?Process(PacketBase packetBaseData, PacketAuraUpdate packet)
 {
     return(packet.Unit);
 }
Exemplo n.º 4
0
 protected override bool Process(PacketBase basePacket, PacketAuraUpdate packet)
 {
     return(packet.Unit.Equals(playerGuid));
 }
Exemplo n.º 5
0
 protected override bool Process(PacketBase basePacket, PacketAuraUpdate packet)
 {
     return(packet.Unit.Type == UniversalHighGuid.Player);
 }