public void ServerWrite(IWriteMessage msg) { msg.Write(ID); msg.Write(Name); msg.Write(OriginalName); msg.Write((byte)Gender); msg.Write((byte)Race); msg.Write((byte)HeadSpriteId); msg.Write((byte)HairIndex); msg.Write((byte)BeardIndex); msg.Write((byte)MoustacheIndex); msg.Write((byte)FaceAttachmentIndex); msg.WriteColorR8G8B8(SkinColor); msg.WriteColorR8G8B8(HairColor); msg.WriteColorR8G8B8(FacialHairColor); msg.Write(ragdollFileName); if (Job != null) { msg.Write(Job.Prefab.Identifier); msg.Write((byte)Job.Variant); msg.Write((byte)Job.Skills.Count); foreach (Skill skill in Job.Skills) { msg.Write(skill.Identifier); msg.Write(skill.Level); } } else { msg.Write(""); msg.Write((byte)0); } // TODO: animations msg.Write((byte)SavedStatValues.SelectMany(s => s.Value).Count()); foreach (var savedStatValuePair in SavedStatValues) { foreach (var savedStatValue in savedStatValuePair.Value) { msg.Write((byte)savedStatValuePair.Key); msg.Write(savedStatValue.StatIdentifier); msg.Write(savedStatValue.StatValue); msg.Write(savedStatValue.RemoveOnDeath); } } msg.Write((ushort)ExperiencePoints); msg.Write((ushort)AdditionalTalentPoints); }