public void Save(VMAvatar avatar) { SkinTone = (byte)avatar.SkinTone; DefaultSuits = avatar.DefaultSuits; //todo: clone? //if naked or using clothes rack, save in daywear. //TODO: store and check simantics outfit category, and restore using that instead. var dyn = avatar.DynamicSuits; var bID = avatar.BodyOutfit.ID; var saveDaywear = dyn.Daywear == bID || dyn.Sleepwear == bID || dyn.Swimwear == bID; saveDaywear = saveDaywear || (bID == 0x24E0000000D || bID == 0x10000000D); BodyOutfit = (saveDaywear)?avatar.DefaultSuits.Daywear.ID : bID; HeadOutfit = avatar.HeadOutfit.ID; Name = avatar.Name; Permissions = avatar.AvatarState.Permissions; AvatarFlags = ((VMTSOAvatarState)avatar.TSOState).Flags; Budget = avatar.TSOState.Budget.Value; for (int i = 0; i < MotiveData.Length; i++) { MotiveData[i] = avatar.GetMotiveData((VMMotive)i); } MotiveData[(int)(VMMotive.SleepState)] = 0; for (int i = 0; i < PersonDataMap.Length; i++) { PersonData[i] = avatar.GetPersonData((VMPersonDataVariable)PersonDataMap[i]); } SkillLock = avatar.SkillLocks; OnlineJobInfo = ((VMTSOAvatarState)avatar.TSOState).JobInfo; IgnoredAvatars = ((VMTSOAvatarState)avatar.TSOState).IgnoredAvatars; }
public override void Deserialize(BinaryReader reader) { base.Deserialize(reader); Permissions = (VMTSOAvatarPermissions)reader.ReadByte(); var ignored = reader.ReadInt32(); IgnoredAvatars.Clear(); for (int i = 0; i < ignored; i++) { IgnoredAvatars.Add(reader.ReadUInt32()); } JobInfo.Clear(); if (Version > 7) { var jobs = reader.ReadInt32(); for (int i = 0; i < jobs; i++) { var id = reader.ReadInt16(); var job = new VMTSOJobInfo(); job.Deserialize(reader); JobInfo[id] = job; } } if (Version > 9) { Flags = (VMTSOAvatarFlags)reader.ReadUInt32(); } if (Version > 27) { ChatColor = new Color(reader.ReadByte(), reader.ReadByte(), reader.ReadByte(), (byte)255); ChatTTSPitch = reader.ReadSByte(); ChatChannel = reader.ReadByte(); } }
public void Save(VMAvatar avatar) { SkinTone = (byte)avatar.SkinTone; DefaultSuits = avatar.DefaultSuits; //todo: clone? //if naked, save in daywear. BodyOutfit = (avatar.BodyOutfit.ID == 0x24E0000000D || avatar.BodyOutfit.ID == 0x10000000D)?avatar.DefaultSuits.Daywear.ID : avatar.BodyOutfit.ID; HeadOutfit = avatar.HeadOutfit.ID; Name = avatar.Name; Permissions = ((VMTSOAvatarState)avatar.TSOState).Permissions; AvatarFlags = ((VMTSOAvatarState)avatar.TSOState).Flags; Budget = avatar.TSOState.Budget.Value; for (int i = 0; i < MotiveData.Length; i++) { MotiveData[i] = avatar.GetMotiveData((VMMotive)i); } MotiveData[(int)(VMMotive.SleepState)] = 0; for (int i = 0; i < PersonDataMap.Length; i++) { PersonData[i] = avatar.GetPersonData((VMPersonDataVariable)PersonDataMap[i]); } SkillLock = avatar.SkillLocks; OnlineJobInfo = ((VMTSOAvatarState)avatar.TSOState).JobInfo; IgnoredAvatars = ((VMTSOAvatarState)avatar.TSOState).IgnoredAvatars; }
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()); } } }