Example #1
0
        public override void Tick()
        {
            lock (this) {
                if (Data != null && !SentMessage)
                {
                    //init mode. check client permissions...
                    var client = Server.Clients.FirstOrDefault();
                    if (client == null)
                    {
                        return;                 //uh, what?
                    }
                    VMEODSignPermissionFlags avaFlags = 0;

                    if (Mode != VMEODSignsMode.OwnerWrite && Mode != VMEODSignsMode.OwnerPermissions)
                    {
                        if (client.Avatar.AvatarState.Permissions >= VMTSOAvatarPermissions.Roommate)
                        {
                            avaFlags |= VMEODSignPermissionFlags.RoomieRead;
                        }
                        else
                        {
                            avaFlags |= VMEODSignPermissionFlags.VisitorRead;
                        }

                        var inverseRead = (~(VMEODSignPermissionFlags)Data.Flags) & VMEODSignPermissionFlags.ReadFlags & avaFlags;
                        if (inverseRead > 0)
                        {
                            DisableRead = true; Mode = VMEODSignsMode.Read;
                        }

                        avaFlags = (VMEODSignPermissionFlags)((short)avaFlags << 3);
                        var inverseWrite = (~(VMEODSignPermissionFlags)Data.Flags) & VMEODSignPermissionFlags.WriteFlags & avaFlags;
                        Mode = (inverseWrite > 0) ? VMEODSignsMode.Read : VMEODSignsMode.Write;
                    }

                    if (DisableRead)
                    {
                        Data.Text = "";
                    }

                    client.Send("signs_init", (short)Mode + "\n" + MaxLength);
                    client.Send("signs_show", Data.Save());
                    SentMessage = true;
                }
            }
        }
Example #2
0
        public override void OnClose()
        {
            string replaceText = "";

            switch (Mode)
            {
            case VMEODSignsMode.OwnerPermissions:
            case VMEODSignsMode.OwnerWrite:
                replaceText = OwnerWriteTextBox.CurrentText;
                break;

            case VMEODSignsMode.Read:
                replaceText = "";
                break;

            case VMEODSignsMode.Write:
                replaceText = WriteTextBox.CurrentText;
                break;
            }
            Data.Text = replaceText;
            Send("set_message", Data.Save());
            Send("close", "");
            base.OnClose();
        }
Example #3
0
        public void B_SetMessage(string evt, byte[] data, VMEODClient client)
        {
            lock (this)
            {
                VMEODSignsData newData;
                try
                {
                    newData = new VMEODSignsData(data);
                }
                catch (Exception) { return; }

                if (Mode == VMEODSignsMode.Read)
                {
                    return;                              //cannot change anything
                }
                else if (Mode == VMEODSignsMode.Write)
                {
                    newData.Flags = Data.Flags;                                    //cannot change permissions
                }
                if (newData.Text.Length > 0)
                {
                    newData.Text = newData.Text.Substring(0, Math.Min(MaxLength, newData.Text.Length));
                }
                Data = newData;

                Server.vm.GlobalLink.SavePluginPersist(Server.vm, Server.Object.PersistID, Server.PluginID, newData.Save());

                foreach (var cli in Server.Clients)
                {
                    cli.SendOBJEvent(new VMEODEvent((short)VMEODSignsEvent.TurnOnWritingSign, (short)((Data.Text.Length > 0) ? 1 : 0)));
                }
            }
        }