using System; using System.Collections; using Server; using Server.HuePickers; using Server.Gumps; using Knives.Utils; namespace Knives.Chat3 { public enum DisplayType { Channel, All, Ignores, GIgnores, GListens, Bans } public class ChannelGump : GumpPlus { public static void SendTo(Mobile m) { General.ClearGump(m, typeof(ChannelGump)); new ChannelGump(m); } #region Class Definitions private Mobile c_Profile; private DisplayType c_Type; private int c_Height, c_Width, c_Page; private bool c_Minimized, c_Search, c_Options; private string c_TxtSearch, c_CharSearch; public DisplayType Type { get { return c_Type; } set { c_Type = value; } } public Data GetData { get { return Data.GetData(Owner); } } #endregion #region Constructors public ChannelGump(Mobile m) : base( m, 50, 50 ) { c_TxtSearch = ""; c_CharSearch = ""; NewGump(); } #endregion #region Methods protected override void BuildGump() { Owner.CloseGump(typeof(ChannelGump)); if (GetData.CurrentChannel != null && !GetData.CurrentChannel.CanChat(Owner, false)) GetData.CurrentChannel = null; c_Height = 100 + (GetData.ChannelPP * 20); c_Width = 160; if (GetData.QuickBar) c_Width += 80; if (c_Minimized) { AddImage(0, 0, 0x2907); AddImage(15, 0, 0x2908); AddImage(20, 0, 0x2909); AddItem(9, 11, 0x1ECF); } else AddBackground(0, 0, c_Width, c_Height, 0x1400); AddButton(0, 0, 0x13A8, 0x13A8, "Minimize", new TimerCallback(Minimize)); if (c_Minimized) AddLabel(1, -3, 0x47E, "^"); else AddLabel(2, -9, 0x47E, "_"); if (c_Minimized) DisplayMin(); else DisplayList(); } private void DisplayMin() { } private ArrayList BuildList() { ArrayList list = new ArrayList(); if (c_Type == DisplayType.Channel && GetData.CurrentChannel == null) return list; if (c_Type == DisplayType.Channel) list = GetData.CurrentChannel.BuildList(Owner); else if (c_Type == DisplayType.All) { list = new ArrayList(); foreach (Mobile m in Data.Datas.Keys) { if (!Data.ShowStaff && m.AccessLevel > AccessLevel.Player) continue; list.Add(m); } } else if (c_Type == DisplayType.Ignores) { list = new ArrayList(GetData.Ignores); list.AddRange(GetData.IrcIgnores); } else if (c_Type == DisplayType.GIgnores) list = new ArrayList(GetData.GIgnores); else if (c_Type == DisplayType.GListens) list = new ArrayList(GetData.GListens); else if (c_Type == DisplayType.Bans) foreach (Data data in Data.Datas.Values) if (data.Banned) list.Add(data.Mobile); list.Sort(new InternalSort()); if (GetData.CurrentChannel != null && GetData.CurrentChannel.Style == ChatStyle.Regional) foreach (object o in new ArrayList(list)) { if (!(o is Mobile)) continue; if (((Mobile)o).NetState != null && ((Mobile)o).Region != Owner.Region) list.Remove(o); } string str = ""; if (c_TxtSearch != "") foreach (object o in new ArrayList(list)) { if (o is Mobile) str = ((Mobile)o).Name; else str = o.ToString(); if (str.ToLower().IndexOf(c_TxtSearch.ToLower()) == -1) list.Remove(o); } if (c_CharSearch != "") foreach (object o in new ArrayList(list)) { if (o is Mobile) str = ((Mobile)o).Name; else str = o.ToString(); if (str.ToLower().IndexOf(c_CharSearch.ToLower()) != 0) list.Remove(o); } return list; } private void DisplayList() { if (c_Options) OptionsTab(); if (c_Search) SearchTab(); int y = 10; AddImage(c_Width/2-75, y - 1, 0x9C5); if (c_Type == DisplayType.Channel) AddButton(c_Width/2-75+5, y + 4, 0x2716, 0x2716, "Channels", new TimerCallback(Channels)); AddButton(7, c_Height - 30, 0x768, 0x768, "Options", new TimerCallback(Options)); AddButton(23, c_Height - 30, 0x768, 0x768, "Search", new TimerCallback(Search)); AddButton(39, c_Height - 30, 0x768, 0x768, "Friends", new TimerCallback(Friends)); AddButton(55, c_Height - 30, 0x768, 0x768, "Mail", new TimerCallback(Mail)); AddLabel(12, c_Height - 30, c_Options ? 0x34 : 0x47E, "O"); AddLabel(28, c_Height - 30, c_Search ? 0x34 : 0x47E, "S"); AddLabel(45, c_Height - 30, 0x47E, "F"); AddLabel(59, c_Height - 30, 0x47E, "M"); if (Owner.AccessLevel >= AccessLevel.Administrator) { AddButton(71, c_Height - 30, 0x768, 0x768, "Setup", new TimerCallback(Setup)); AddLabel(76, c_Height - 30, 0x26, "A"); } if (c_Type == DisplayType.All) AddHtml(c_Width - 53, c_Height - 29, 80, 21, HTML.White + General.Local(46), false, false); else AddHtml(c_Width - 53, c_Height - 29, 80, 21, HTML.White + General.Local(50 + (c_Type > DisplayType.All ? (int)c_Type - 1 : (int)c_Type)), false, false); AddButton(c_Width - 70, c_Height - 26, 0x2716, 0x2716, "Display Type", new TimerCallback(DispType)); if (c_Type == DisplayType.Channel && (GetData.CurrentChannel == null || !GetData.CurrentChannel.CanChat(Owner, false))) { AddHtml(10, c_Height / 2 - 20, c_Width - 20, 41, HTML.White + "
" + General.Local(31), false, false); return; } if (GetData.Status == OnlineStatus.Hidden && Owner.AccessLevel == AccessLevel.Player) { AddHtml(10, c_Height / 2 - 20, c_Width - 20, 41, HTML.White + "
" + General.Local(23), false, false); return; } if (c_Profile != null) Chat3.Profile.Insert(c_Profile, this, c_Width + 20, 0); ArrayList list = BuildList(); int perpage = GetData.ChannelPP; if (c_Type == DisplayType.Channel) { if( GetData.CurrentChannel != null) AddHtml(30, y, c_Width-60, 21, HTML.White + "
" + GetData.CurrentChannel.NameFor(Owner), false, false, false); } else { if (c_Type == DisplayType.All) AddHtml(30, y, c_Width-60, 21, HTML.White + "
" + General.Local(46), false, false, false); else AddHtml(30, y, c_Width-60, 21, HTML.White + "
" + General.Local(50 + (c_Type > DisplayType.All ? (int)c_Type - 1 : (int)c_Type)), false, false, false); } y += 20; if (perpage * c_Page > list.Count || c_Page < 0) c_Page = 0; if (perpage * (c_Page + 1) < list.Count) AddButton(c_Width / 2 - 10, c_Height - 45, 0x25E8, 0x25E9, "Page Up", new TimerCallback(PageUp)); if (c_Page != 0) AddButton(c_Width / 2 - 10, 30, 0x25E4, 0x25E5, "Page Down", new TimerCallback(PageDown)); AddButton(10, 32, 0x983, 0x983, "PerPage Down", new TimerCallback(PerPageDown)); AddButton(20, 32, 0x985, 0x985, "PerPage Up", new TimerCallback(PerPageUp)); string str = ""; int bar = c_Width - 18; try { for (int i = perpage * c_Page; i < list.Count && i < perpage * (c_Page + 1); ++i) { if (list[i] is Mobile) { AddHtml(35, y += 20, 150, 21, GetColor((Mobile)list[i]) + ((Mobile)list[i]).Name + (Data.GetData((Mobile)list[i]).Status != OnlineStatus.Online && Data.GetData((Mobile)list[i]).Status != OnlineStatus.Hidden ? " (" + General.Local(19 + (int)Data.GetData((Mobile)list[i]).Status) + ")" : ""), false, false, false); if (Owner == list[i]) continue; bar = c_Width - 18; if (GetData.QuickBar) { if (Owner.AccessLevel > ((Mobile)list[i]).AccessLevel) { if (GetData.GlobalAccess) { if (GetData.Global) { AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Ignore", new TimerStateCallback(GIgnore), list[i]); AddLabel(bar + 4, y, GetData.GIgnores.Contains(list[i]) ? 0x44 : 0x26, "I"); } else { AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Listen", new TimerStateCallback(GListen), list[i]); AddLabel(bar + 4, y, GetData.GListens.Contains(list[i]) ? 0x44 : 0x26, "L"); } } if (((Mobile)list[i]).NetState != null) { AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Goto", new TimerStateCallback(Goto), list[i]); AddLabel(bar + 3, y - 2, 0x47E, "g"); AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Client", new TimerStateCallback(Client), list[i]); AddLabel(bar + 3, y - 2, 0x47E, "c"); } AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Ban", new TimerStateCallback(Ban), list[i]); AddLabel(bar + 4, y, Data.GetData((Mobile)list[i]).Banned ? 0x44 : 0x26, "b"); } if (Chat3.Message.CanMessage(Owner, (Mobile)list[i])) { AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Message", new TimerStateCallback(Message), list[i]); AddLabel(bar + 3, y - 2, 0x47E, "m"); } AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Ignore", new TimerStateCallback(Ignore), list[i]); AddLabel(bar + 5, y - 1, GetData.Ignores.Contains(list[i]) ? 0x44 : 0x26, "i"); AddButton(bar -= 12, y + 3, 0x13A8, 0x13A8, "Mini Friend", new TimerStateCallback(Friend), list[i]); AddLabel(bar + 3, y, GetData.Friends.Contains(list[i]) ? 0x44 : 0x26, "f"); } AddButton(20, y + 3, list[i] == c_Profile ? 0x939 : 0x2716, list[i] == c_Profile ? 0x939 : 0x2716, "Profile", new TimerStateCallback(Profile), (Mobile)list[i]); } else if (list[i] is string) { str = list[i].ToString(); if (str.IndexOf("@") == 0) str = str.Substring(1, str.Length - 1); AddHtml(35, y += 20, 90, 21, HTML.White + list[i].ToString(), false, false); AddButton(c_Width - 40, y, GetData.IrcIgnores.Contains(str) ? 0x5687 : 0x5686, GetData.IrcIgnores.Contains(str) ? 0x5687 : 0x5686, "Ignore IRC", new TimerStateCallback(IgnoreIrc), list[i]); } } } catch { AddHtml(35, y += 20, 90, 21, HTML.White + "!!!", false, false); } } private string GetColor(Mobile m) { if (Owner == m) return HTML.Yellow; if (Data.GetData(m).Banned) return HTML.Red; if (GetData.Ignores.Contains(m)) return HTML.AshRed; if (GetData.Global && GetData.GIgnores.Contains(m)) return HTML.AshRed; if (!GetData.Global && GetData.GListens.Contains(m)) return HTML.Blue; if (m.NetState == null || Data.GetData(m).Status == OnlineStatus.Hidden) return HTML.DarkGray; if (Data.GetData(m).Status == OnlineStatus.Away || Data.GetData(m).Status == OnlineStatus.Busy) return HTML.Gray; if (m.AccessLevel > AccessLevel.Player) return HTML.LightPurple; if (m.Guild != null && (m.Guild == Owner.Guild)) return HTML.Green; return HTML.White; } private void SearchTab() { AddBackground(c_Width + 20, 10, 130, 40, 0x1400); AddImageTiled(c_Width + 30, 20, 90, 21, 0xBBC); AddTextField(c_Width + 30, 20, 90, 21, 0x480, 1, c_TxtSearch); AddButton(c_Width + 127, 24, 0x2716, 0x2716, "Text Search", new TimerCallback(TxtSearch)); char[] chars = new char[] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; int x = c_Width + 17; int y = 51; foreach (char c in chars) { AddButton(x += 20, y, 0x2344, 0x2344, "Char Search", new TimerStateCallback(CharSearch), c.ToString()); AddHtml(x + 6, y, 20, 20, (c_CharSearch == c.ToString() ? HTML.Green : HTML.White) + c, false, false, false); if (x >= c_Width + 115) { x = c_Width + 17; y += 20; } } } private void OptionsTab() { int x = c_Width + 20; int y = 10; AddHtml(x, 10, 300, 21, HTML.White + "
" + General.Local(39), false, false); AddHtml(x + 30, y += 20, 170, 21, HTML.White + General.Local(41), false, false); AddImageTiled(x + 180, y, 70, 21, 0xBBA); AddTextField(x + 180, y, 70, 21, 0x480, 0, GetData.ChannelsSpeech); AddButton(x + 260, y + 3, 0x2716, 0x2716, "Submit Speech", new TimerCallback(SubmitSpeech)); AddHtml(x + 60, y+=25, 220, 21, HTML.White + General.Local(195), false, false, false); AddButton(x + 30, y, GetData.QuickBar ? 0x2343 : 0x2342, GetData.QuickBar ? 0x2343 : 0x2342, "Quickbar", new TimerCallback(QuickBar)); AddHtml(x + 180, y, 120, 21, HTML.White + General.Local(47), false, false); AddImage(x + 150, y, 0x2342, GetData.SystemC); AddButton(x + 154, y + 4, 0x2716, 0x2716, "System Color", new TimerCallback(SystemColor)); y += 25; if (Owner.AccessLevel != AccessLevel.Player) { AddHtml(x + 60, y, 120, 21, HTML.Red + General.Local(48), false, false, false); AddImage(x + 30, y, 0x2342, GetData.StaffC); AddButton(x + 34, y + 4, 0x2716, 0x2716, "Staff Color", new TimerCallback(StaffColor)); } if (GetData.GlobalAccess) { AddHtml(x + 180, y, 220, 21, HTML.Red + General.Local(43), false, false, false); AddButton(x + 150, y, GetData.Global ? 0x2343 : 0x2342, GetData.Global ? 0x2343 : 0x2342, "Global", new TimerCallback(Global)); if (GetData.Global) { AddHtml(x + 80, y += 25, 120, 21, HTML.Red + General.Local(44), false, false, false); AddButton(x + 30, y, GetData.GlobalC ? 0x2343 : 0x2342, GetData.GlobalC ? 0x2343 : 0x2342, "Global Chat", new TimerCallback(GlobalChat)); AddImage(x + 50, y, 0x2342, GetData.GlobalCC); AddButton(x + 54, y + 4, 0x2716, 0x2716, "Global Chat Color", new TimerCallback(GlobalChatColor)); AddHtml(x + 200, y, 120, 21, HTML.Red + General.Local(45), false, false, false); AddButton(x + 150, y, GetData.GlobalW ? 0x2343 : 0x2342, GetData.GlobalW ? 0x2343 : 0x2342, "Global World", new TimerCallback(GlobalWorld)); AddImage(x + 170, y, 0x2342, GetData.GlobalWC); AddButton(x + 174, y + 4, 0x2716, 0x2716, "Global World Color", new TimerCallback(GlobalWorldColor)); y += 25; if (Channel.GetByName("Guild") != null) { AddHtml(x + 80, y, 120, 21, HTML.Red + General.Local(192), false, false, false); AddButton(x + 30, y, GetData.GlobalG ? 0x2343 : 0x2342, GetData.GlobalG ? 0x2343 : 0x2342, "Global Guild", new TimerCallback(GlobalGuild)); AddImage(x + 50, y, 0x2342, GetData.GlobalGC); AddButton(x + 54, y + 4, 0x2716, 0x2716, "Global Guild Color", new TimerCallback(GlobalGuildColor)); } if (Channel.GetByName("Faction") != null) { AddHtml(x + 200, y, 120, 21, HTML.Red + General.Local(193), false, false, false); AddButton(x + 150, y, GetData.GlobalF ? 0x2343 : 0x2342, GetData.GlobalF ? 0x2343 : 0x2342, "Global Faction", new TimerCallback(GlobalFaction)); AddImage(x + 170, y, 0x2342, GetData.GlobalFC); AddButton(x + 174, y + 4, 0x2716, 0x2716, "Global Faction Color", new TimerCallback(GlobalFactionColor)); } } } Entries.Insert(0, new GumpBackground(x, 0, 300, y + 40, 0x1400)); if( GetData.CurrentChannel != null ) GetData.CurrentChannel.GumpOptions(this, x, y + 40); } protected override void OnClose() { if (c_Profile != null) { c_Profile = null; NewGump(); return; } if (c_Options || c_Search) { c_Options = false; c_Search = false; NewGump(); return; } } #endregion #region Responses private void Minimize() { c_Minimized = !c_Minimized; if (c_Minimized) Override = false; else Override = true; NewGump(); } private void PageUp() { c_Page++; NewGump(); } private void PageDown() { c_Page--; NewGump(); } private void PerPageUp() { GetData.ChannelPP++; NewGump(); } private void PerPageDown() { GetData.ChannelPP--; NewGump(); } private void Search() { c_Search = !c_Search; c_Options = false; c_Profile = null; NewGump(); } private void Options() { c_Options = !c_Options; c_Search = false; c_Profile = null; NewGump(); } private void Channels() { new ChannelSelectGump(this); } private void Friends() { NewGump(); FriendsGump.SendTo(Owner); } private void Mail() { NewGump(); MailGump.SendTo(Owner); } private void Setup() { NewGump(); SetupGump.SendTo(Owner); } private void Profile(object o) { if (!(o is Mobile)) return; if (c_Profile == o) c_Profile = null; else c_Profile = (Mobile)o; c_Search = false; c_Options = false; NewGump(); } private void TxtSearch() { c_TxtSearch = GetTextField(1); c_CharSearch = ""; NewGump(); } private void CharSearch(object o) { if (!(o is string)) return; if (c_CharSearch == o.ToString()) c_CharSearch = ""; else c_CharSearch = o.ToString(); c_TxtSearch = ""; NewGump(); } private void SubmitSpeech() { GetData.ChannelsSpeech = GetTextField(0); if (GetData.ChannelsSpeech != "") Owner.SendMessage(GetData.SystemC, General.Local(70) + " \"" + GetData.ChannelsSpeech + "\""); else Owner.SendMessage(GetData.SystemC, General.Local(71)); NewGump(); } private void QuickBar() { GetData.QuickBar = !GetData.QuickBar; NewGump(); } private void Global() { GetData.Global = !GetData.Global; NewGump(); } private void GlobalChat() { GetData.GlobalC = !GetData.GlobalC; NewGump(); } private void GlobalWorld() { GetData.GlobalW = !GetData.GlobalW; NewGump(); } private void GlobalGuild() { GetData.GlobalG = !GetData.GlobalG; NewGump(); } private void GlobalFaction() { GetData.GlobalF = !GetData.GlobalF; NewGump(); } private void GlobalChatColor() { Owner.SendHuePicker(new InternalPicker(this, 0)); } private void GlobalWorldColor() { Owner.SendHuePicker(new InternalPicker(this, 1)); } private void GlobalGuildColor() { Owner.SendHuePicker(new InternalPicker(this, 4)); } private void GlobalFactionColor() { Owner.SendHuePicker(new InternalPicker(this, 5)); } private void SystemColor() { Owner.SendHuePicker(new InternalPicker(this, 2)); } private void StaffColor() { Owner.SendHuePicker(new InternalPicker(this, 3)); } private void DispType() { new DisplayTypeGump(this); } private void IgnoreIrc(object o) { if (!(o is string)) return; string str = o.ToString(); if (str.IndexOf("@") == 0) str = str.Substring(1, str.Length - 1); if (!GetData.IrcIgnores.Contains(str)) GetData.AddIrcIgnore(str); else GetData.RemoveIrcIgnore(str); NewGump(); } private void Friend(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; if (Data.GetData(m).ByRequest && !GetData.Friends.Contains(m)) { if (!TrackSpam.LogSpam(Owner, "Request " + m.Name, TimeSpan.FromHours(24))) { TimeSpan ts = TrackSpam.NextAllowedIn(Owner, "Request " + m.Name, TimeSpan.FromHours(Data.RequestSpam)); string txt = (ts.Days != 0 ? ts.Days + " " + General.Local(170) + " " : "") + (ts.Hours != 0 ? ts.Hours + " " + General.Local(171) + " " : "") + (ts.Minutes != 0 ? ts.Minutes + " " + General.Local(172) + " " : ""); Owner.SendMessage(GetData.SystemC, General.Local(96) + " " + txt); NewGump(); return; } Data.GetData(m).AddMessage(new Message(Owner, General.Local(84), General.Local(85), MsgType.Invite)); Owner.SendMessage(GetData.SystemC, General.Local(86) + " " + m.Name); if (m.HasGump(typeof(FriendsGump))) General.RefreshGump(m, typeof(FriendsGump)); else FriendsGump.SendTo(m, true); General.RefreshGump(m, typeof(MailGump)); NewGump(); return; } if (GetData.Friends.Contains(m)) GetData.RemoveFriend(m); else GetData.AddFriend(m); NewGump(); } private void Ignore(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; if (GetData.Ignores.Contains(m)) GetData.RemoveIgnore(m); else GetData.AddIgnore(m); NewGump(); } private void Message(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; NewGump(); if (Chat3.Message.CanMessage(Owner, m)) SendMessageGump.SendTo(Owner, m); } private void Ban(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; if (Data.GetData(m).Banned) { Data.GetData(m).RemoveBan(); Owner.SendMessage(GetData.SystemC, General.Local(78) + " " + m.Name); NewGump(); } else new BanGump(m, this); } private void GIgnore(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; if (GetData.GIgnores.Contains(m)) GetData.RemoveGIgnore(m); else GetData.AddGIgnore(m); NewGump(); } private void GListen(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; if (GetData.GListens.Contains(m)) GetData.RemoveGListen(m); else GetData.AddGListen(m); NewGump(); } private void Client(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; NewGump(); if (m.NetState == null) Owner.SendMessage(GetData.SystemC, m.Name + " " + General.Local(83)); else Owner.SendGump(new ClientGump(Owner, m.NetState)); } private void Goto(object o) { if (!(o is Mobile)) return; Mobile m = (Mobile)o; if (m.NetState == null) Owner.SendMessage(GetData.SystemC, m.Name + " " + General.Local(83)); else { Owner.Location = m.Location; Owner.Map = m.Map; } NewGump(); } #endregion #region Internal Classes private class InternalSort : IComparer { public InternalSort() { } public int Compare(object x, object y) { if (x == null && y == null) return 0; if (x == null || (!(x is Mobile) && !(x is string))) return -1; if (y == null || (!(y is Mobile) && !(x is string))) return 1; if (x is Mobile && !(y is Mobile)) return -1; if (y is Mobile && !(x is Mobile)) return 1; if (x is Mobile && y is Mobile) { Mobile a = (Mobile)x; Mobile b = (Mobile)y; if (a.AccessLevel > b.AccessLevel) return -1; if (a.AccessLevel < b.AccessLevel) return 1; if (a.NetState != null && b.NetState == null) return -1; if (a.NetState == null && b.NetState != null) return 1; return Insensitive.Compare(a.Name, b.Name); } else { string a = x.ToString(); string b = y.ToString(); return Insensitive.Compare(a, b); } } } private class BanGump : GumpPlus { private GumpPlus c_Gump; private Mobile c_Target; public BanGump(Mobile m, GumpPlus g) : base(g.Owner, 100, 100) { c_Gump = g; c_Target = m; NewGump(); } protected override void BuildGump() { int y = 10; AddHtml(0, y, 150, 21, HTML.White + "
" + General.Local(160), false, false); AddHtml(40, y += 20, 100, 21, HTML.White + General.Local(161), false, false); AddButton(25, y + 3, 0x2716, 0x2716, "30 minutes", new TimerStateCallback(BanTime), TimeSpan.FromMinutes(30)); AddHtml(40, y += 20, 100, 21, HTML.White + General.Local(162), false, false); AddButton(25, y + 3, 0x2716, 0x2716, "1 hour", new TimerStateCallback(BanTime), TimeSpan.FromHours(1)); AddHtml(40, y += 20, 100, 21, HTML.White + General.Local(163), false, false); AddButton(25, y + 3, 0x2716, 0x2716, "12 hours", new TimerStateCallback(BanTime), TimeSpan.FromHours(12)); AddHtml(40, y += 20, 100, 21, HTML.White + General.Local(164), false, false); AddButton(25, y + 3, 0x2716, 0x2716, "1 day", new TimerStateCallback(BanTime), TimeSpan.FromDays(1)); AddHtml(40, y += 20, 100, 21, HTML.White + General.Local(165), false, false); AddButton(25, y + 3, 0x2716, 0x2716, "1 week", new TimerStateCallback(BanTime), TimeSpan.FromDays(7)); AddHtml(40, y += 20, 100, 21, HTML.White + General.Local(166), false, false); AddButton(25, y + 3, 0x2716, 0x2716, "1 month", new TimerStateCallback(BanTime), TimeSpan.FromDays(30)); AddHtml(40, y += 20, 100, 21, HTML.White + General.Local(167), false, false); AddButton(25, y + 3, 0x2716, 0x2716, "1 year", new TimerStateCallback(BanTime), TimeSpan.FromDays(365)); Entries.Insert(0, new GumpBackground(0, 0, 150, y + 40, 0x1400)); } private void BanTime(object o) { if (!(o is TimeSpan)) return; Data.GetData(c_Target).Ban((TimeSpan)o); Owner.SendMessage(Data.GetData(Owner).SystemC, General.Local(77) + " " + c_Target.Name); c_Gump.NewGump(); } protected override void OnClose() { c_Gump.NewGump(); } } private class ChannelSelectGump : GumpPlus { private GumpPlus c_Gump; public ChannelSelectGump(GumpPlus g) : base(g.Owner, 100, 100) { c_Gump = g; NewGump(); } protected override void BuildGump() { int y = 10; AddHtml(0, y, 150, 21, HTML.White + "
" + General.Local(38), false, false); foreach (Channel c in Channel.Channels) { if (c.CanChat(Owner, false)) { AddHtml(60, y += 20, 100, 21, HTML.White + c.NameFor(Owner), false, false); AddButton(20, y, Data.GetData(Owner).Channels.Contains(c.Name) ? 0x2343 : 0x2342, Data.GetData(Owner).Channels.Contains(c.Name) ? 0x2343 : 0x2342, "Join Channel", new TimerStateCallback(JoinChannel), c); if (Data.GetData(Owner).Channels.Contains(c.Name)) AddButton(45, y + 3, 0x2716, 0x2716, "View Channel", new TimerStateCallback(ViewChannel), c); } } Entries.Insert(0, new GumpBackground(0, 0, 165, y + 40, 0x1400)); } private void JoinChannel(object o) { if (!(o is Channel)) return; Channel c = (Channel)o; if (Data.GetData(Owner).Channels.Contains(c.Name)) { Owner.SendMessage(Data.GetData(Owner).SystemC, General.Local(189) + " " + c.NameFor(Owner)); Data.GetData(Owner).Channels.Remove(c.Name); } else { Owner.SendMessage(Data.GetData(Owner).SystemC, General.Local(190) + " " + c.NameFor(Owner)); Data.GetData(Owner).Channels.Add(c.Name); } if (Data.GetData(Owner).CurrentChannel == c) Data.GetData(Owner).CurrentChannel = null; NewGump(); } private void ViewChannel(object o) { if (!(o is Channel)) return; Data.GetData(Owner).CurrentChannel = (Channel)o; c_Gump.NewGump(); } protected override void OnClose() { c_Gump.NewGump(); } } private class DisplayTypeGump : GumpPlus { private ChannelGump c_Gump; public DisplayTypeGump(ChannelGump g) : base(g.Owner, 100, 100) { c_Gump = g; NewGump(); } protected override void BuildGump() { int y = 10; AddHtml(0, y, 150, 21, HTML.White + "
" + General.Local(55), false, false); AddHtml(60, y += 20, 100, 21, HTML.White + General.Local(50), false, false); AddButton(45, y + 3, 0x2716, 0x2716, "Channel", new TimerStateCallback(Display), DisplayType.Channel); AddHtml(60, y += 20, 100, 21, HTML.White + General.Local(46), false, false); AddButton(45, y + 3, 0x2716, 0x2716, "View All", new TimerStateCallback(Display), DisplayType.All); AddHtml(60, y += 20, 100, 21, HTML.White + General.Local(51), false, false); AddButton(45, y + 3, 0x2716, 0x2716, "Ignores", new TimerStateCallback(Display), DisplayType.Ignores); if (Data.GetData(Owner).GlobalAccess) { AddHtml(60, y += 20, 100, 21, HTML.White + General.Local(52), false, false); AddButton(45, y + 3, 0x2716, 0x2716, "GIgnores", new TimerStateCallback(Display), DisplayType.GIgnores); AddHtml(60, y += 20, 100, 21, HTML.White + General.Local(53), false, false); AddButton(45, y + 3, 0x2716, 0x2716, "GListens", new TimerStateCallback(Display), DisplayType.GListens); } if (Owner.AccessLevel >= AccessLevel.GameMaster) { AddHtml(60, y += 20, 100, 21, HTML.White + General.Local(54), false, false); AddButton(45, y + 3, 0x2716, 0x2716, "Bans", new TimerStateCallback(Display), DisplayType.Bans); } Entries.Insert(0, new GumpBackground(0, 0, 150, y + 40, 0x1400)); } private void Display(object o) { if (!(o is DisplayType)) return; c_Gump.Type = (DisplayType)o; c_Gump.NewGump(); } protected override void OnClose() { c_Gump.NewGump(); } } private class InternalPicker : HuePicker { private GumpPlus c_Gump; private int c_Num; public InternalPicker(GumpPlus g, int num) : base(0x1018) { c_Gump = g; c_Num = num; } public override void OnResponse(int hue) { switch (c_Num) { case 0: Data.GetData(c_Gump.Owner).GlobalCC = hue; break; case 1: Data.GetData(c_Gump.Owner).GlobalWC = hue; break; case 2: Data.GetData(c_Gump.Owner).SystemC = hue; break; case 3: Data.GetData(c_Gump.Owner).StaffC = hue; break; case 4: Data.GetData(c_Gump.Owner).GlobalGC = hue; break; case 5: Data.GetData(c_Gump.Owner).GlobalFC = hue; break; } c_Gump.NewGump(); } } #endregion } }