public void deserializeCharacterData(MessageIn msg)
{
// general character properties
setAccountLevel(msg.readInt8());
setGender((BeingGender)msg.readInt8());
setHairStyle(msg.readInt8());
setHairColor(msg.readInt8());
setLevel(msg.readInt16());
setCharacterPoints(msg.readInt16());
setCorrectionPoints(msg.readInt16());
// character attributes
uint attrSize=(uint)msg.readInt16();
for(uint i = 0;i < attrSize;++i)
{
uint id=(uint)msg.readInt16();
double @base=msg.readDouble(),
mod=msg.readDouble();
setAttribute(id, @base);
setModAttribute(id, mod);
}
// character skills
int skillSize=msg.readInt16();
for(int i = 0;i < skillSize;++i)
{
int skill=msg.readInt16();
int level=msg.readInt32();
setExperience(skill, level);
}
// status effects currently affecting the character
int statusSize=msg.readInt16();
for(int i = 0;i < statusSize;i++)
{
int status=msg.readInt16();
int time=msg.readInt16();
applyStatusEffect(status, time);
}
// location
setMapId(msg.readInt16());
Point temporaryPoint=new Point();
temporaryPoint.x=msg.readInt16();
temporaryPoint.y=msg.readInt16();
setPosition(temporaryPoint);
// kill count
int killSize=msg.readInt16();
for(int i = 0;i < killSize;i++)
{
int monsterId=msg.readInt16();
int kills=msg.readInt32();
setKillCount(monsterId, kills);
}
// character specials
int specialSize=msg.readInt16();
clearSpecials();
for(int i = 0;i < specialSize;i++)
{
giveSpecial(msg.readInt32());
}
Possessions poss=getPossessions();
Dictionary< uint, EquipmentItem > equipData=new Dictionary<uint, EquipmentItem>();
int equipSlotsSize=msg.readInt16();
uint eqSlot;
EquipmentItem equipItem=new EquipmentItem();
for(int j = 0;j < equipSlotsSize;++j)
{
eqSlot=(uint)msg.readInt16();
equipItem.itemId=(uint)msg.readInt16();
equipItem.itemInstance=(uint)msg.readInt16();
equipData.Add(eqSlot, equipItem);
}
poss.setEquipment(equipData);
// Loads inventory - must be last because size isn't transmitted
Dictionary<uint, InventoryItem > inventoryData=new Dictionary<uint, InventoryItem>();
while(msg.getUnreadLength()>0)
{
InventoryItem i=new InventoryItem();
int slotId=msg.readInt16();
i.itemId=(uint)msg.readInt16();
i.amount=(uint)msg.readInt16();
inventoryData.Add((uint)slotId, i);
}
poss.setInventory(inventoryData);
}