public void Deserialize(BinaryReader reader) { Version = reader.ReadInt32(); Name = reader.ReadString(); PersistID = reader.ReadUInt32(); DefaultSuits = new VMAvatarDefaultSuits(reader); Permissions = (VMTSOAvatarPermissions)reader.ReadByte(); if (Version > 1) { AvatarFlags = (VMTSOAvatarFlags)reader.ReadUInt32(); } Budget = reader.ReadUInt32(); BodyOutfit = reader.ReadUInt64(); HeadOutfit = reader.ReadUInt64(); SkinTone = reader.ReadByte(); if (Version > 2) { IsWorker = reader.ReadBoolean(); } for (int i = 0; i < MotiveData.Length; i++) { MotiveData[i] = reader.ReadInt16(); } for (int i = 0; i < PersonData.Length; i++) { PersonData[i] = reader.ReadInt16(); } var count = reader.ReadInt32(); Relationships = new VMEntityPersistRelationshipMarshal[count]; for (int i = 0; i < Relationships.Length; i++) { Relationships[i] = new VMEntityPersistRelationshipMarshal(); Relationships[i].Deserialize(reader); } var jobs = reader.ReadInt32(); for (int i = 0; i < jobs; i++) { var id = reader.ReadInt16(); var job = new VMTSOJobInfo(); job.Deserialize(reader); OnlineJobInfo[id] = job; } if (Version > 3) { var ignored = reader.ReadInt32(); for (int i = 0; i < ignored; i++) { IgnoredAvatars.Add(reader.ReadUInt32()); } } }
private VMNetAvatarPersistState StateFromDB(DbAvatar avatar, List <DbRelationship> rels, List <DbJobLevel> jobs, List <DbRoommate> myRoomieLots, List <uint> ignored) { var state = new VMNetAvatarPersistState(); state.Name = avatar.name; state.PersistID = avatar.avatar_id; state.DefaultSuits = new SimAntics.VMAvatarDefaultSuits(avatar.gender == DbAvatarGender.female); state.DefaultSuits.Daywear.ID = avatar.body; state.DefaultSuits.Swimwear.ID = avatar.body_swimwear; state.DefaultSuits.Sleepwear.ID = avatar.body_sleepwear; state.BodyOutfit = (avatar.body_current == 0)?avatar.body:avatar.body_current; state.HeadOutfit = avatar.head; state.Gender = (short)avatar.gender; state.Budget = (uint)avatar.budget; state.SkinTone = avatar.skin_tone; var now = Epoch.Now; var age = (uint)((now - avatar.date) / ((long)60 * 60 * 24)); state.SkillLock = (short)(20 + age / 7); state.SkillLockBody = (short)(avatar.lock_body * 100); state.SkillLockCharisma = (short)(avatar.lock_charisma * 100); state.SkillLockCooking = (short)(avatar.lock_cooking * 100); state.SkillLockCreativity = (short)(avatar.lock_creativity * 100); state.SkillLockLogic = (short)(avatar.lock_logic * 100); state.SkillLockMechanical = (short)(avatar.lock_mechanical * 100); state.BodySkill = (short)avatar.skill_body; state.CharismaSkill = (short)avatar.skill_charisma; state.CookingSkill = (short)avatar.skill_cooking; state.CreativitySkill = (short)avatar.skill_creativity; state.LogicSkill = (short)avatar.skill_logic; state.MechanicalSkill = (short)avatar.skill_mechanical; state.IsGhost = (short)avatar.is_ghost; state.DeathTicker = (short)avatar.ticker_death; state.GardenerRehireTicker = (short)avatar.ticker_gardener; state.MaidRehireTicker = (short)avatar.ticker_maid; state.RepairmanRehireTicker = (short)avatar.ticker_repairman; state.OnlineJobID = (short)avatar.current_job; state.IgnoredAvatars = new HashSet <uint>(ignored); foreach (var job in jobs) { state.OnlineJobInfo[(short)job.job_type] = new VMTSOJobInfo() { Experience = (short)job.job_experience, Level = (short)job.job_level, SickDays = (short)job.job_sickdays, StatusFlags = (short)job.job_statusflags }; } if (myRoomieLots.Count == 0) { state.AvatarFlags |= VMTSOAvatarFlags.CanBeRoommate; //we're not roommate anywhere, so we can be here. } var roomieStatus = myRoomieLots.FindAll(x => x.lot_id == Context.DbId).FirstOrDefault(); if (roomieStatus != null && roomieStatus.is_pending == 0) { switch (roomieStatus.permissions_level) { case 0: state.Permissions = VMTSOAvatarPermissions.Roommate; break; case 1: state.Permissions = VMTSOAvatarPermissions.BuildBuyRoommate; break; case 2: state.Permissions = VMTSOAvatarPermissions.Owner; break; } } else { state.Permissions = VMTSOAvatarPermissions.Visitor; } if (avatar.moderation_level > 0) { state.Permissions = VMTSOAvatarPermissions.Admin; } var motives = new short[16]; for (int i = 0; i < 16; i++) { var twoi = i + i; motives[i] = (short)((avatar.motive_data[twoi] << 8) | avatar.motive_data[twoi + 1]); } state.MotiveData = motives; var relDict = new Dictionary <uint, List <int> >(); foreach (var rel in rels) { if (!relDict.ContainsKey(rel.to_id)) { relDict[rel.to_id] = new List <int>(); } var list = relDict[rel.to_id]; while (list.Count <= rel.index) { list.Add(0); } list[(int)rel.index] = rel.value; } state.Relationships = new VMEntityPersistRelationshipMarshal[relDict.Count]; for (int i = 0; i < relDict.Count; i++) { var dictItem = relDict.ElementAt(i); var marshal = new VMEntityPersistRelationshipMarshal(); marshal.Target = dictItem.Key; marshal.Values = dictItem.Value.ConvertAll(x => (short)x).ToArray(); state.Relationships[i] = marshal; } return(state); }