Example #1
0
        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());
                }
            }
        }
Example #2
0
        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);
        }