public override void SetData(byte[] buf, int offset)
        {
            Type  = buf[offset] & 0xff;
            Index = buf[offset + 1] & 0xff;
            ResMagicChain magicChain = Context.LibData.GetMagicChain(buf[offset + 0x2f] & 0xff);

            if (magicChain != null)
            {
                magicChain.LearnFromChain(buf[offset + 2] & 0xff);
                MagicChain = magicChain;
            }

            AddBuff((CombatBuff)(buf[offset + 3] & 0xff));
            AttackBuff     = (CombatBuff)(buf[offset + 4] & 0xff);
            BuffLastRound  = buf[offset + 0x17] & 0xff;
            Name           = buf.GetString(offset + 6);
            Level          = buf[offset + 0x12] & 0xff;
            MaxHP          = buf.Get2BytesUInt(offset + 0x18);
            HP             = buf.Get2BytesUInt(offset + 0x1a);
            MaxMP          = buf.Get2BytesUInt(offset + 0x1c);
            MP             = buf.Get2BytesUInt(offset + 0x1e);
            Attack         = buf.Get2BytesUInt(offset + 0x20);
            Defend         = buf.Get2BytesUInt(offset + 0x22);
            Speed          = buf[offset + 0x13] & 0xff;
            Lingli         = buf[offset + 0x14] & 0xff;
            Luck           = buf[offset + 0x16] & 0xff;
            MonsterIQ      = buf[offset + 0x15] & 0xff;
            Money          = buf.Get2BytesUInt(offset + 0x24);
            EXP            = buf.Get2BytesUInt(offset + 0x26);
            _carryGoods[0] = (int)buf[offset + 0x28] & 0xff;
            _carryGoods[1] = (int)buf[offset + 0x29] & 0xff;
            _carryGoods[2] = (int)buf[offset + 0x2a] & 0xff;
            _dropGoods[0]  = (int)buf[offset + 0x2b] & 0xff;
            _dropGoods[1]  = (int)buf[offset + 0x2c] & 0xff;
            _dropGoods[2]  = (int)buf[offset + 0x2d] & 0xff;
            FightingSprite = new FightingSprite(Context, true, (int)buf[offset + 0x2e] & 0xff);
        }