Example #1
0
        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;
        }
Example #2
0
        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();
            }
        }
Example #3
0
        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);
     TargetUID  = reader.ReadUInt32();
     ReplaceUID = reader.ReadUInt32();
     Level      = (VMTSOAvatarPermissions)reader.ReadByte();
     Mode       = (VMChangePermissionsMode)reader.ReadByte();
 }
Example #5
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 #6
0
 public void Deserialize(BinaryReader reader)
 {
     ID          = reader.ReadByte();
     Name        = reader.ReadString();
     Description = reader.ReadString();
     ViewPermMin = (VMTSOAvatarPermissions)reader.ReadByte();
     SendPermMin = (VMTSOAvatarPermissions)reader.ReadByte();
     Flags       = (VMTSOChatChannelFlags)reader.ReadByte();
     TextColor   = new Color(reader.ReadUInt32());
 }
Example #7
0
 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());
     }
 }
Example #8
0
 public override void Deserialize(BinaryReader reader)
 {
     base.Deserialize(reader);
     Version     = reader.ReadUInt16();
     RequesterID = reader.ReadUInt32();
     HeadID      = reader.ReadUInt64();
     BodyID      = reader.ReadUInt64();
     SkinTone    = reader.ReadByte();
     Gender      = reader.ReadBoolean();
     Name        = reader.ReadString();
     Permissions = (VMTSOAvatarPermissions)reader.ReadByte();
 }
Example #9
0
        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());
            }
        }
Example #10
0
 public override void Deserialize(BinaryReader reader)
 {
     base.Deserialize(reader);
     Version = reader.ReadUInt16();
     RequesterID = reader.ReadUInt32();
     HeadID = reader.ReadUInt64();
     BodyID = reader.ReadUInt64();
     SkinTone = reader.ReadByte();
     Gender = reader.ReadBoolean();
     Name = reader.ReadString();
     Permissions = (VMTSOAvatarPermissions)reader.ReadByte();
 }
Example #11
0
        public void UpdateAvatarState(VMTSOAvatarPermissions perm)
        {
            LastPermissions = perm;

            //personbuttontemplate_defaultthumbnail = 0x79500000001,

            ulong bgID      = 0;
            ulong overlayID = 0;

            switch (perm)
            {
            case VMTSOAvatarPermissions.Visitor: bgID = 0x25400000001; break;     //personbuttontemplate_visitorlarge

            case VMTSOAvatarPermissions.Roommate:
            case VMTSOAvatarPermissions.BuildBuyRoommate: bgID = 0x25200000001; overlayID = 0xB7F00000001; break;     //personbuttontemplate_roommatelarge, personbuttonoverlay_roommatelarge

            case VMTSOAvatarPermissions.Admin:
            case VMTSOAvatarPermissions.Owner: bgID = 0x25200000001; overlayID = 0x7A000000001; break;     //..., personbuttonoverlay_houseleaderlarge
            }

            if (Avatar.PersistID < 65536)
            {
                bgID = 0xCEF00000001; //peoplebuttontemplate_npclarge
            }

            if (Small)
            {
                bgID      += 0x00100000000;
                overlayID += 0x00100000000;
            }

            /*if (Avatar.PersistID == vm.MyUID)
             * {
             *  bgID = 0x25000000001; //personbuttontemplate_playerlarge
             * }*/

            Texture = GetTexture(bgID);
            Icon    = Avatar.GetIcon(GameFacade.GraphicsDevice, 0);
            if (Icon == null)
            {
                Icon = GetTexture(0x79500000001);               //personbuttontemplate_defaultthumbnail
            }
            Overlay = (overlayID == 0)?null:GetTexture(overlayID);

            Tooltip = GetAvatarString(Avatar);
        }
Example #12
0
        public override bool Verify(VM vm, VMAvatar caller)
        {
            Name = Name.Replace("\r\n", "");
            if (Verified == true)
            {
                return(true);
            }
            if (Ticket == null)
            {
                Ticket = "local" + ":" + Name;
            }

            var tempName = Name; //obviously not a concern for final server. but for now... prevents people logging in with 2x same persist
            int i        = 1;

            while (vm.Entities.Any(x => (x is VMAvatar) && ((VMAvatar)x).Name == tempName))
            {
                tempName = Name + " (" + (i++) + ")";
            }
            Name = tempName;

            if (FromNet && RequesterID == uint.MaxValue - 1)
            {
                return(false);                                             //only server can set themselves as server...
            }
            RequesterID = ActorUID;
            vm.GlobalLink.ObtainAvatarFromTicket(vm, Ticket, (uint persistID, VMTSOAvatarPermissions permissions) =>
            {
                //first, verify if their sim has left the lot yet. if not, they cannot join until they have left.
                //(only really happens with an immediate rejoin)
                if (vm.Entities.FirstOrDefault(x => x.PersistID == persistID) != null && Client != null)
                {
                    Client.Disconnect();     //would like to send a message but need a rework of VMServerDriver to make it happen
                    return;
                }

                //TODO: a lot more persist state
                this.ActorUID    = persistID;
                this.Permissions = permissions;
                this.Verified    = true;
                vm.ForwardCommand(this);
            });
            return(false);
        }
Example #13
0
        public void NotifyRoommateChange(uint avatar_id, ChangeType change)
        {
            VMTSOAvatarPermissions newLevel = VMTSOAvatarPermissions.Visitor;

            switch (change)
            {
            case ChangeType.ADD_ROOMMATE:
                newLevel = VMTSOAvatarPermissions.Roommate; break;

            case ChangeType.REMOVE_ROOMMATE:
                newLevel = VMTSOAvatarPermissions.Visitor; break;
            }

            VMDriver.SendCommand(new VMChangePermissionsCmd
            {
                TargetUID = avatar_id,
                Level     = newLevel,
                Verified  = true,
            });
        }
Example #14
0
        public void UpdateAvatarState(VMTSOAvatarPermissions perm)
        {
            LastPermissions = perm;

            //personbuttontemplate_defaultthumbnail = 0x79500000001,

            ulong bgID = 0;
            ulong overlayID = 0;

            switch (perm)
            {
                case VMTSOAvatarPermissions.Visitor: bgID = 0x25400000001; break; //personbuttontemplate_visitorlarge
                case VMTSOAvatarPermissions.Roommate:
                case VMTSOAvatarPermissions.BuildBuyRoommate: bgID = 0x25200000001; overlayID = 0xB7F00000001; break; //personbuttontemplate_roommatelarge, personbuttonoverlay_roommatelarge
                case VMTSOAvatarPermissions.Admin:
                case VMTSOAvatarPermissions.Owner: bgID = 0x25200000001; overlayID = 0x7A000000001; break; //..., personbuttonoverlay_houseleaderlarge
            }

            if (Avatar.PersistID < 65536)
            {
                bgID = 0xCEF00000001; //peoplebuttontemplate_npclarge
            }

            if (Small)
            {
                bgID += 0x00100000000;
                overlayID += 0x00100000000;
            }

            Texture = GetTexture(bgID);
            Icon = Avatar.GetIcon(GameFacade.GraphicsDevice, 0);
            if (Icon == null) Icon = GetTexture(0x79500000001); //personbuttontemplate_defaultthumbnail
            Overlay = (overlayID == 0)?null:GetTexture(overlayID);
            Target = GetTexture(0x25700000001);

            Tooltip = GetAvatarString(Avatar);
        }
        private bool ChangeUserLevel(VM vm, uint pid, VMTSOAvatarPermissions level)
        {
            var obj          = vm.GetAvatarByPersist(pid);
            var roomieChange = false;
            var playerOwned  = (!vm.TSOState.CommunityLot);

            if (obj == null)
            {
                vm.TSOState.BuildRoommates.Remove(pid);
                if (vm.TSOState.Roommates.Contains(pid))
                {
                    roomieChange = true;
                }
                vm.TSOState.Roommates.Remove(pid);
                if (level >= VMTSOAvatarPermissions.Roommate && level < VMTSOAvatarPermissions.Admin)
                {
                    roomieChange = !roomieChange;
                    vm.TSOState.Roommates.Add(pid);
                    vm.TSOState.Names.Precache(vm, pid);
                    if (level > VMTSOAvatarPermissions.Roommate)
                    {
                        vm.TSOState.BuildRoommates.Add(pid);
                    }
                    if (level == VMTSOAvatarPermissions.Owner)
                    {
                        vm.TSOState.OwnerID = pid;
                    }
                }
            }
            else
            {
                var oldState = obj.AvatarState.Permissions;

                if (oldState >= VMTSOAvatarPermissions.Roommate)
                {
                    vm.TSOState.Roommates.Remove(obj.PersistID);
                    roomieChange = !roomieChange;
                    if (playerOwned)
                    {
                        ((VMTSOAvatarState)obj.TSOState).Flags |= VMTSOAvatarFlags.CanBeRoommate;
                    }
                }
                if (oldState >= VMTSOAvatarPermissions.BuildBuyRoommate)
                {
                    vm.TSOState.BuildRoommates.Remove(obj.PersistID);
                }
                obj.AvatarState.Permissions = level;
                if (level >= VMTSOAvatarPermissions.Roommate)
                {
                    if (playerOwned)
                    {
                        ((VMTSOAvatarState)obj.TSOState).Flags &= ~VMTSOAvatarFlags.CanBeRoommate;
                    }
                    roomieChange = !roomieChange; //flips roomie change back
                    vm.TSOState.Roommates.Add(obj.PersistID);
                }
                if (level >= VMTSOAvatarPermissions.BuildBuyRoommate)
                {
                    vm.TSOState.BuildRoommates.Add(obj.PersistID);
                }
                if (level == VMTSOAvatarPermissions.Owner)
                {
                    vm.TSOState.OwnerID = pid;
                }
                else if (vm.TSOState.OwnerID == pid)
                {
                    vm.TSOState.OwnerID = 0;
                }
            }
            return(roomieChange && playerOwned);
        }
Example #16
0
        public void Populate()
        {
            var childCopy = new List <UIElement>(Children);

            foreach (var child in childCopy)
            {
                Remove(child);
            }
            var channels = new List <VMTSOChatChannel>();
            var perm     = ((Dialog.Owner.ActiveEntity as VMAvatar)?.AvatarState?.Permissions ?? VMTSOAvatarPermissions.Visitor);

            var ui     = Content.Content.Get().CustomUI;
            var btnTex = ui.Get("chat_cat.png").Get(GameFacade.GraphicsDevice);

            channels.Add(VMTSOChatChannel.MainChannel);
            channels.AddRange(Dialog.Owner.vm.TSOState.ChatChannels);
            if (perm == VMTSOAvatarPermissions.Admin)
            {
                channels.Add(VMTSOChatChannel.AdminChannel);
            }

            HasButtons = channels.Count(x => perm >= x.ViewPermMin) > 1 || (perm >= VMTSOAvatarPermissions.Owner);
            if (!HasButtons)
            {
                LastChannels = new List <VMTSOChatChannel>(Dialog.Owner.vm.TSOState.ChatChannels);
                LastPerm     = perm;
                Invalidate();
                return;
            }
            var btnCaption = TextStyle.DefaultLabel.Clone();

            btnCaption.Size   = 8;
            btnCaption.Shadow = true;

            var active = Dialog.Owner.ChatPanel.ActiveChannel;
            var xPos   = 0;

            foreach (var channel in channels)
            {
                if (perm < channel.ViewPermMin)
                {
                    continue;
                }
                var btn = new UIButton(btnTex);
                if (!EditMode)
                {
                    btn.Selected = (channel.ID == active);
                    if ((Dialog.ShowChannels & (1 << channel.ID)) == 0)
                    {
                        btn.ForceState = 3;
                    }
                }
                if (EditMode && channel.ID == 0)
                {
                    btn.Tooltip  = GameFacade.Strings.GetString("f113", "18");
                    btn.Disabled = true;
                }
                else
                {
                    btn.Tooltip = (EditMode) ? GameFacade.Strings.GetString("f113", "19") : channel.Description;
                }

                btn.Caption            = channel.Name;
                btn.CaptionStyle       = btnCaption.Clone();
                btn.CaptionStyle.Color = channel.TextColor;
                btn.OnButtonClick     += (btn2) => ChannelSelect(channel);

                btn.X = xPos;
                xPos += (int)btn.Width + 1;
                Add(btn);
            }

            if (EditMode)
            {
                var btn2 = new UIButton(btnTex);
                btn2.Caption        = GameFacade.Strings.GetString("f113", "14");
                btn2.Tooltip        = GameFacade.Strings.GetString("f113", "16");
                btn2.CaptionStyle   = btnCaption;
                btn2.OnButtonClick += NewButton;

                btn2.X = xPos;

                if (channels.Count(x => x.ID < 7) < 5)
                {
                    xPos += (int)btn2.Width + 1;
                    Add(btn2);
                }

                btn2                = new UIButton(btnTex);
                btn2.Caption        = GameFacade.Strings.GetString("f113", "15");
                btn2.Tooltip        = GameFacade.Strings.GetString("f113", "17");
                btn2.CaptionStyle   = btnCaption;
                btn2.OnButtonClick += CancelEditButton;

                btn2.X = xPos;
                xPos  += (int)btn2.Width + 1;
                Add(btn2);
            }
            else if (perm >= VMTSOAvatarPermissions.Owner)
            {
                var btn2 = new UIButton(btnTex);
                btn2.Caption        = GameFacade.Strings.GetString("f113", "13");
                btn2.Tooltip        = GameFacade.Strings.GetString("f113", "20");
                btn2.CaptionStyle   = btnCaption;
                btn2.OnButtonClick += EditButton;

                btn2.X = xPos;
                xPos  += (int)btn2.Width + 1;
                Add(btn2);
            }

            LastPerm     = perm;
            LastChannels = new List <VMTSOChatChannel>(Dialog.Owner.vm.TSOState.ChatChannels);
            Invalidate();
        }
Example #17
0
 public override void Deserialize(BinaryReader reader)
 {
     base.Deserialize(reader);
     Permissions = (VMTSOAvatarPermissions)reader.ReadByte();
 }
Example #18
0
        public override bool Verify(VM vm, VMAvatar caller)
        {
            Name = Name.Replace("\r\n", "");
            if (Verified == true) return true;
            if (Ticket == null) Ticket = "local" + ":" + Name;

            var tempName = Name; //obviously not a concern for final server. but for now... prevents people logging in with 2x same persist
            int i = 1;
            while (vm.Entities.Any(x => (x is VMAvatar) && ((VMAvatar)x).Name == tempName))
            {
                tempName = Name + " (" + (i++) + ")";
            }
            Name = tempName;

            if (FromNet && RequesterID == uint.MaxValue - 1) return false; //only server can set themselves as server...
            RequesterID = ActorUID;
            vm.GlobalLink.ObtainAvatarFromTicket(vm, Ticket, (uint persistID, VMTSOAvatarPermissions permissions) =>
                {
                    //first, verify if their sim has left the lot yet. if not, they cannot join until they have left.
                    //(only really happens with an immediate rejoin)
                    if (vm.Entities.FirstOrDefault(x => x.PersistID == persistID) != null && Client != null)
                    {
                        Client.Disconnect(); //would like to send a message but need a rework of VMServerDriver to make it happen
                        return;
                    }

                    //TODO: a lot more persist state
                    this.ActorUID = persistID;
                    this.Permissions = permissions;
                    this.Verified = true;
                    vm.ForwardCommand(this);
                });
            return false;
        }
 public override void Deserialize(BinaryReader reader)
 {
     base.Deserialize(reader);
     TargetUID = reader.ReadUInt32();
     Level = (VMTSOAvatarPermissions)reader.ReadByte();
 }