示例#1
0
        public static void WriteCastInfo(this ByteWriter writerOrg, CastInfo data)
        {
            var writer = new ByteWriter();

            writer.WriteUInt32(data.SpellHash);
            writer.WriteUInt32(data.SpellNetID);
            writer.WriteByte(data.SpellLevel);
            writer.WriteFloat(data.AttackSpeedModifier);
            writer.WriteUInt32(data.CasterNetID);
            writer.WriteUInt32(data.MissileNetID);
            writer.WriteVector3(data.TargetPosition);
            writer.WriteVector3(data.TargetPositionEnd);

            int targetsCount = data.TargetsInfo.Count;

            if (targetsCount >= 32)
            {
                throw new IOException("Too many targets!");
            }
            writer.WriteByte((byte)targetsCount);
            for (var i = 0; i < targetsCount; i++)
            {
                writer.WriteCastTargetInfo(data.TargetsInfo[i]);
            }

            writer.WriteFloat(data.DesignerCastTime);
            writer.WriteFloat(data.ExtraCastTime);
            writer.WriteFloat(data.DesignerTotalTime);
            writer.WriteFloat(data.Cooldown);
            writer.WriteFloat(data.StartCastTime);

            byte bitfield = 0;

            if (data.IsAutoAttack)
            {
                bitfield |= 0x01;
            }
            if (data.IsSecondAutoAttack)
            {
                bitfield |= 0x02;
            }
            if (data.IsForceCastingOrChannel)
            {
                bitfield |= 0x04;
            }
            if (data.IsOverrideCastPosition)
            {
                bitfield |= 0x08;
            }
            writer.WriteByte(bitfield);

            writer.WriteByte(data.SpellSlot);
            writer.WriteFloat(data.ManaCost);
            writer.WriteVector3(data.CasterPosition);


            var writerData = writer.GetBytes();
            int size       = writerData.Length + 2;

            writer.WriteUInt16((ushort)size);
            writer.WriteBytes(writerData);
        }