Beispiel #1
0
 public SetHealth(AttackableUnit u)
     : base(PacketCmd.PKT_S2C_SetHealth, u.NetId)
 {
     buffer.Write((short)0x0000); // unk,maybe flags for physical/magical/true dmg
     buffer.Write((float)u.GetStats().HealthPoints.Total);
     buffer.Write((float)u.GetStats().CurrentHealth);
 }
Beispiel #2
0
        public UpdateStats(AttackableUnit u, bool partial = true)
            : base(PacketCmd.PKT_S2C_CharStats)
        {
            var stats = new Dictionary <MasterMask, Dictionary <FieldMask, float> >();

            if (partial)
            {
                stats = u.GetStats().GetUpdatedStats();
            }
            else
            {
                stats = u.GetStats().GetAllStats();
            }
            var orderedStats = stats.OrderBy(x => x.Key);

            buffer.Write(Environment.TickCount); // syncID
            buffer.Write((byte)1);               // updating 1 unit

            byte masterMask = 0;

            foreach (var p in orderedStats)
            {
                masterMask |= (byte)p.Key;
            }

            buffer.Write((byte)masterMask);
            buffer.Write((uint)u.NetId);

            foreach (var group in orderedStats)
            {
                var  orderedGroup = group.Value.OrderBy(x => x.Key);
                uint fieldMask    = 0;
                byte size         = 0;
                foreach (var stat in orderedGroup)
                {
                    fieldMask |= (uint)stat.Key;
                    size      += u.GetStats().getSize(group.Key, stat.Key);
                }
                buffer.Write((uint)fieldMask);
                buffer.Write((byte)size);
                foreach (var stat in orderedGroup)
                {
                    size = u.GetStats().getSize(group.Key, stat.Key);
                    switch (size)
                    {
                    case 1:
                        buffer.Write((byte)Convert.ToByte(stat.Value));
                        break;

                    case 2:
                        buffer.Write((short)Convert.ToInt16(stat.Value));
                        break;

                    case 4:
                        var bytes = BitConverter.GetBytes(stat.Value);
                        if (bytes[0] >= 0xFE)
                        {
                            bytes[0] = 0xFD;
                        }
                        buffer.Write((float)BitConverter.ToSingle(bytes, 0));
                        break;
                    }
                }
            }
        }