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; } } }
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(); }
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))); } } }