/Scripts/Gumps/AdminGump.cs
C# | 2767 lines | 2170 code | 582 blank | 15 comment | 557 complexity | 8e6f7815a9bd9f1b2ac5cde79a4101a7 MD5 | raw file
Large files files are truncated, but you can click here to view the full file
- using System;
- using System.Net;
- using System.Text;
- using System.Collections;
- using System.Diagnostics;
- using Server;
- using Server.Items;
- using Server.Prompts;
- using Server.Network;
- using Server.Accounting;
- using Server.Mobiles;
- using Server.Scripts.Commands;
- namespace Server.Gumps
- {
- public enum AdminGumpPage
- {
- Information,
- Administer,
- Clients,
- Accounts,
- Accounts_Shared,
- Firewall,
- Administer_WorldBuilding,
- Administer_Server,
- Administer_Access,
- Administer_Access_Lockdown,
- Administer_Commands,
- ClientInfo,
- AccountDetails,
- AccountDetails_Information,
- AccountDetails_Characters,
- AccountDetails_Access,
- AccountDetails_Access_ClientIPs,
- AccountDetails_Access_Restrictions,
- AccountDetails_Comments,
- AccountDetails_Tags,
- AccountDetails_ChangePassword,
- AccountDetails_ChangeAccess,
- FirewallInfo
- }
- public class AdminGump : Gump
- {
- private Mobile m_From;
- private AdminGumpPage m_PageType;
- private ArrayList m_List;
- private int m_ListPage;
- private object m_State;
- private const int LabelColor = 0x7FFF;
- private const int SelectedColor = 0x421F;
- private const int DisabledColor = 0x4210;
- private const int LabelColor32 = 0xFFFFFF;
- private const int SelectedColor32 = 0x8080FF;
- private const int DisabledColor32 = 0x808080;
- private const int LabelHue = 0x480;
- private const int GreenHue = 0x40;
- private const int RedHue = 0x20;
- public void AddPageButton( int x, int y, int buttonID, string text, AdminGumpPage page, params AdminGumpPage[] subPages )
- {
- bool isSelection = ( m_PageType == page );
- for ( int i = 0; !isSelection && i < subPages.Length; ++i )
- isSelection = ( m_PageType == subPages[i] );
- AddSelectedButton( x, y, buttonID, text, isSelection );
- }
- public void AddSelectedButton( int x, int y, int buttonID, string text, bool isSelection )
- {
- AddButton( x, y - 1, isSelection ? 4006 : 4005, 4007, buttonID, GumpButtonType.Reply, 0 );
- AddHtml( x + 35, y, 200, 20, Color( text, isSelection ? SelectedColor32 : LabelColor32 ), false, false );
- }
- public void AddButtonLabeled( int x, int y, int buttonID, string text )
- {
- AddButton( x, y - 1, 4005, 4007, buttonID, GumpButtonType.Reply, 0 );
- AddHtml( x + 35, y, 240, 20, Color( text, LabelColor32 ), false, false );
- }
- public string Center( string text )
- {
- return String.Format( "<CENTER>{0}</CENTER>", text );
- }
- public string Color( string text, int color )
- {
- return String.Format( "<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", color, text );
- }
- public void AddBlackAlpha( int x, int y, int width, int height )
- {
- AddImageTiled( x, y, width, height, 2624 );
- AddAlphaRegion( x, y, width, height );
- }
- public int GetButtonID( int type, int index )
- {
- return 1 + (index * 10) + type;
- }
- public static string FormatTimeSpan( TimeSpan ts )
- {
- return String.Format( "{0:D2}:{1:D2}:{2:D2}:{3:D2}", ts.Days, ts.Hours % 24, ts.Minutes % 60, ts.Seconds % 60 );
- }
- public static string FormatByteAmount( long totalBytes )
- {
- if ( totalBytes > 1000000000 )
- return String.Format( "{0:F1} GB", (double)totalBytes / 1073741824 );
- if ( totalBytes > 1000000 )
- return String.Format( "{0:F1} MB", (double)totalBytes / 1048576 );
- if ( totalBytes > 1000 )
- return String.Format( "{0:F1} KB", (double)totalBytes / 1024 );
- return String.Format( "{0} Bytes", totalBytes );
- }
- public static void Initialize()
- {
- Commands.Register( "Admin", AccessLevel.Administrator, new CommandEventHandler( Admin_OnCommand ) );
- }
- [Usage( "Admin" )]
- [Description( "Opens an interface providing server information and administration features including client, account, and firewall management." )]
- public static void Admin_OnCommand( CommandEventArgs e )
- {
- e.Mobile.SendGump( new AdminGump( e.Mobile, AdminGumpPage.Clients, 0, null, null, null ) );
- }
- public static void ShowAdminGump(Mobile mobile)
- {
- mobile.SendGump(new AdminGump(mobile, AdminGumpPage.Clients, 0, null, null, null));
- }
- public static int GetHueFor( Mobile m )
- {
- if ( m == null )
- return LabelHue;
- switch ( m.AccessLevel )
- {
- case AccessLevel.Administrator: return 0x516;
- case AccessLevel.Seer: return 0x144;
- case AccessLevel.GameMaster: return 0x21;
- case AccessLevel.Counselor: return 0x2;
- case AccessLevel.Player: default:
- {
- if ( m.Kills >= 5 )
- return 0x21;
- else if ( m.Criminal )
- return 0x3B1;
- return 0x58;
- }
- }
- }
- private static string[] m_AccessLevelStrings = new string[]
- {
- "Player",
- "Counselor",
- "Game Master",
- "Seer",
- "Administrator"
- };
- public static string FormatAccessLevel( AccessLevel level )
- {
- int v = (int)level;
- if ( v >= 0 && v < m_AccessLevelStrings.Length )
- return m_AccessLevelStrings[v];
- return "Unknown";
- }
- public AdminGump( Mobile from, AdminGumpPage pageType, int listPage, ArrayList list, string notice, object state ) : base( 50, 40 )
- {
- from.CloseGump( typeof( AdminGump ) );
- m_From = from;
- m_PageType = pageType;
- m_ListPage = listPage;
- m_State = state;
- m_List = list;
- AddPage( 0 );
- AddBackground( 0, 0, 420, 440, 5054 );
- AddBlackAlpha( 10, 10, 170, 100 );
- AddBlackAlpha( 190, 10, 220, 100 );
- AddBlackAlpha( 10, 120, 400, 260 );
- AddBlackAlpha( 10, 390, 400, 40 );
- AddPageButton( 10, 10, GetButtonID( 0, 0 ), "INFORMATION", AdminGumpPage.Information );
- AddPageButton( 10, 30, GetButtonID( 0, 1 ), "ADMINISTER", AdminGumpPage.Administer, AdminGumpPage.Administer_Access, AdminGumpPage.Administer_Commands, AdminGumpPage.Administer_Server, AdminGumpPage.Administer_WorldBuilding, AdminGumpPage.Administer_Access_Lockdown );
- AddPageButton( 10, 50, GetButtonID( 0, 2 ), "CLIENT LIST", AdminGumpPage.Clients, AdminGumpPage.ClientInfo );
- AddPageButton( 10, 70, GetButtonID( 0, 3 ), "ACCOUNT LIST", AdminGumpPage.Accounts, AdminGumpPage.Accounts_Shared, AdminGumpPage.AccountDetails, AdminGumpPage.AccountDetails_Information, AdminGumpPage.AccountDetails_Characters, AdminGumpPage.AccountDetails_Access, AdminGumpPage.AccountDetails_Access_ClientIPs, AdminGumpPage.AccountDetails_Access_Restrictions, AdminGumpPage.AccountDetails_Comments, AdminGumpPage.AccountDetails_Tags, AdminGumpPage.AccountDetails_ChangeAccess, AdminGumpPage.AccountDetails_ChangePassword );
- AddPageButton( 10, 90, GetButtonID( 0, 4 ), "FIREWALL", AdminGumpPage.Firewall, AdminGumpPage.FirewallInfo );
- if ( notice != null )
- AddHtml( 12, 392, 396, 36, Color( notice, LabelColor32 ), false, false );
- switch ( pageType )
- {
- case AdminGumpPage.Information:
- {
- int banned = 0;
- int active = 0;
- foreach ( Account acct in Accounts.Table.Values )
- {
- if ( acct.Banned )
- ++banned;
- else
- ++active;
- }
- AddLabel( 20, 130, LabelHue, "Active Accounts:" );
- AddLabel( 150, 130, LabelHue, active.ToString() );
- AddLabel( 20, 150, LabelHue, "Banned Accounts:" );
- AddLabel( 150, 150, LabelHue, banned.ToString() );
- AddLabel( 20, 170, LabelHue, "Firewalled:" );
- AddLabel( 150, 170, LabelHue, Firewall.List.Count.ToString() );
- AddLabel( 20, 190, LabelHue, "Clients:" );
- AddLabel( 150, 190, LabelHue, NetState.Instances.Count.ToString() );
- AddLabel( 20, 210, LabelHue, "Mobiles:" );
- AddLabel( 150, 210, LabelHue, World.Mobiles.Count.ToString() );
- AddLabel( 20, 230, LabelHue, "Mobile Scripts:" );
- AddLabel( 150, 230, LabelHue, Core.ScriptMobiles.ToString() );
- AddLabel( 20, 250, LabelHue, "Items:" );
- AddLabel( 150, 250, LabelHue, World.Items.Count.ToString() );
- AddLabel( 20, 270, LabelHue, "Item Scripts:" );
- AddLabel( 150, 270, LabelHue, Core.ScriptItems.ToString() );
- AddLabel( 20, 290, LabelHue, "Uptime:" );
- AddLabel( 150, 290, LabelHue, FormatTimeSpan( DateTime.Now - Clock.ServerStart ) );
- AddLabel( 20, 310, LabelHue, "Memory:" );
- AddLabel( 150, 310, LabelHue, FormatByteAmount( GC.GetTotalMemory( false ) ) );
- AddLabel( 20, 330, LabelHue, "Framework:" );
- AddLabel( 150, 330, LabelHue, Environment.Version.ToString() );
- AddLabel( 20, 350, LabelHue, "Operating System: " );
- AddLabel( 150, 350, LabelHue, Environment.OSVersion.ToString() );
- /*string str;
- try{ str = FormatTimeSpan( Core.Process.TotalProcessorTime ); }
- catch{ str = "(unable to retrieve)"; }
- AddLabel( 20, 330, LabelHue, "Process Time:" );
- AddLabel( 250, 330, LabelHue, str );*/
- /*try{ str = Core.Process.PriorityClass.ToString(); }
- catch{ str = "(unable to retrieve)"; }
- AddLabel( 20, 350, LabelHue, "Process Priority:" );
- AddLabel( 250, 350, LabelHue, str );*/
- break;
- }
- case AdminGumpPage.Administer_WorldBuilding:
- {
- AddHtml( 10, 125, 400, 20, Color( Center( "Generating" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 150, GetButtonID( 3, 100 ), "Documentation" );
- AddButtonLabeled( 220, 150, GetButtonID( 3, 107 ), "Rebuild Categorization" );
- AddButtonLabeled( 20, 175, GetButtonID( 3, 101 ), "Teleporters" );
- AddButtonLabeled( 220, 175, GetButtonID( 3, 102 ), "Moongates" );
- AddButtonLabeled( 20, 200, GetButtonID( 3, 103 ), "Vendors" );
- AddButtonLabeled( 220, 200, GetButtonID( 3, 106 ), "Decoration" );
- AddButtonLabeled( 20, 225, GetButtonID( 3, 104 ), "Doors" );
- AddButtonLabeled( 220, 225, GetButtonID( 3, 105 ), "Signs" );
- AddHtml( 20, 275, 400, 30, Color( Center( "Statics" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 300, GetButtonID( 3, 110 ), "Freeze (Target)" );
- AddButtonLabeled( 20, 325, GetButtonID( 3, 111 ), "Freeze (World)" );
- AddButtonLabeled( 20, 350, GetButtonID( 3, 112 ), "Freeze (Map)" );
- AddButtonLabeled( 220, 300, GetButtonID( 3, 120 ), "Unfreeze (Target)" );
- AddButtonLabeled( 220, 325, GetButtonID( 3, 121 ), "Unfreeze (World)" );
- AddButtonLabeled( 220, 350, GetButtonID( 3, 122 ), "Unfreeze (Map)" );
- goto case AdminGumpPage.Administer;
- }
- case AdminGumpPage.Administer_Server:
- {
- AddHtml( 10, 125, 400, 20, Color( Center( "Server" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 150, GetButtonID( 3, 200 ), "Save" );
- if ( !Core.Service )
- {
- AddButtonLabeled( 20, 180, GetButtonID( 3, 201 ), "Shutdown (With Save)" );
- AddButtonLabeled( 20, 200, GetButtonID( 3, 202 ), "Shutdown (Without Save)" );
- AddButtonLabeled( 20, 230, GetButtonID( 3, 203 ), "Shutdown & Restart (With Save)" );
- AddButtonLabeled( 20, 250, GetButtonID( 3, 204 ), "Shutdown & Restart (Without Save)" );
- }
- else
- {
- AddLabel( 20, 215, LabelHue, "Shutdown/Restart not available." );
- }
- AddHtml( 10, 295, 400, 20, Color( Center( "Broadcast" ), LabelColor32 ), false, false );
- AddTextField( 20, 320, 380, 20, 0 );
- AddButtonLabeled( 20, 350, GetButtonID( 3, 210 ), "To Everyone" );
- AddButtonLabeled( 220, 350, GetButtonID( 3, 211 ), "To Staff" );
- goto case AdminGumpPage.Administer;
- }
- case AdminGumpPage.Administer_Access_Lockdown:
- {
- AddHtml( 10, 125, 400, 20, Color( Center( "Server Lockdown" ), LabelColor32 ), false, false );
- AddHtml( 20, 150, 380, 80, Color( "When enabled, only clients with an access level equal to or greater than the specified lockdown level may access the server. After setting a lockdown level, use the <em>Purge Invalid Clients</em> button to disconnect those clients without access.", LabelColor32 ), false, false );
- AccessLevel level = Misc.AccountHandler.LockdownLevel;
- bool isLockedDown = ( level > AccessLevel.Player );
- AddSelectedButton( 20, 230, GetButtonID( 3, 500 ), "Not Locked Down", !isLockedDown );
- AddSelectedButton( 20, 260, GetButtonID( 3, 504 ), "Administrators", ( isLockedDown && level <= AccessLevel.Administrator ) );
- AddSelectedButton( 20, 280, GetButtonID( 3, 503 ), "Seers", ( isLockedDown && level <= AccessLevel.Seer ) );
- AddSelectedButton( 20, 300, GetButtonID( 3, 502 ), "Game Masters", ( isLockedDown && level <= AccessLevel.GameMaster ) );
- AddSelectedButton( 20, 320, GetButtonID( 3, 501 ), "Counselors", ( isLockedDown && level <= AccessLevel.Counselor ) );
- AddButtonLabeled( 20, 350, GetButtonID( 3, 510 ), "Purge Invalid Clients" );
- goto case AdminGumpPage.Administer;
- }
- case AdminGumpPage.Administer_Access:
- {
- AddHtml( 10, 125, 400, 20, Color( Center( "Access" ), LabelColor32 ), false, false );
- AddHtml( 10, 155, 400, 20, Color( Center( "Connectivity" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 180, GetButtonID( 3, 300 ), "Kick" );
- AddButtonLabeled( 220, 180, GetButtonID( 3, 301 ), "Ban" );
- AddButtonLabeled( 20, 210, GetButtonID( 3, 302 ), "Firewall" );
- AddButtonLabeled( 220, 210, GetButtonID( 3, 303 ), "Lockdown" );
- AddHtml( 10, 245, 400, 20, Color( Center( "Staff" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 270, GetButtonID( 3, 310 ), "Make Player" );
- AddButtonLabeled( 20, 290, GetButtonID( 3, 311 ), "Make Counselor" );
- AddButtonLabeled( 20, 310, GetButtonID( 3, 312 ), "Make Game Master" );
- AddButtonLabeled( 20, 330, GetButtonID( 3, 313 ), "Make Seer" );
- AddButtonLabeled( 20, 350, GetButtonID( 3, 314 ), "Make Administrator" );
- goto case AdminGumpPage.Administer;
- }
- case AdminGumpPage.Administer_Commands:
- {
- AddHtml( 10, 125, 400, 20, Color( Center( "Commands" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 150, GetButtonID( 3, 400 ), "Add" );
- AddButtonLabeled( 220, 150, GetButtonID( 3, 401 ), "Remove" );
- AddButtonLabeled( 20, 170, GetButtonID( 3, 402 ), "Dupe" );
- AddButtonLabeled( 220, 170, GetButtonID( 3, 403 ), "Dupe in bag" );
- AddButtonLabeled( 20, 200, GetButtonID( 3, 404 ), "Properties" );
- AddButtonLabeled( 220, 200, GetButtonID( 3, 405 ), "Skills" );
- AddButtonLabeled( 20, 230, GetButtonID( 3, 406 ), "Mortal" );
- AddButtonLabeled( 220, 230, GetButtonID( 3, 407 ), "Immortal" );
- AddButtonLabeled( 20, 250, GetButtonID( 3, 408 ), "Squelch" );
- AddButtonLabeled( 220, 250, GetButtonID( 3, 409 ), "Unsquelch" );
- AddButtonLabeled( 20, 270, GetButtonID( 3, 410 ), "Freeze" );
- AddButtonLabeled( 220, 270, GetButtonID( 3, 411 ), "Unfreeze" );
- AddButtonLabeled( 20, 290, GetButtonID( 3, 412 ), "Hide" );
- AddButtonLabeled( 220, 290, GetButtonID( 3, 413 ), "Unhide" );
- AddButtonLabeled( 20, 310, GetButtonID( 3, 414 ), "Kill" );
- AddButtonLabeled( 220, 310, GetButtonID( 3, 415 ), "Resurrect" );
- AddButtonLabeled( 20, 330, GetButtonID( 3, 416 ), "Move" );
- AddButtonLabeled( 220, 330, GetButtonID( 3, 417 ), "Wipe" );
- AddButtonLabeled( 20, 350, GetButtonID( 3, 418 ), "Teleport" );
- AddButtonLabeled( 220, 350, GetButtonID( 3, 419 ), "Teleport (Multiple)" );
- goto case AdminGumpPage.Administer;
- }
- case AdminGumpPage.Administer:
- {
- AddPageButton( 200, 20, GetButtonID( 3, 0 ), "World Building", AdminGumpPage.Administer_WorldBuilding );
- AddPageButton( 200, 40, GetButtonID( 3, 1 ), "Server", AdminGumpPage.Administer_Server );
- AddPageButton( 200, 60, GetButtonID( 3, 2 ), "Access", AdminGumpPage.Administer_Access, AdminGumpPage.Administer_Access_Lockdown );
- AddPageButton( 200, 80, GetButtonID( 3, 3 ), "Commands", AdminGumpPage.Administer_Commands );
- break;
- }
- case AdminGumpPage.Clients:
- {
- if ( m_List == null )
- {
- m_List = new ArrayList( NetState.Instances );
- m_List.Sort( NetStateComparer.Instance );
- }
- AddClientHeader();
- AddLabelCropped( 12, 120, 81, 20, LabelHue, "Name" );
- AddLabelCropped( 95, 120, 81, 20, LabelHue, "Account" );
- AddLabelCropped( 178, 120, 81, 20, LabelHue, "Access Level" );
- AddLabelCropped( 273, 120,109, 20, LabelHue, "IP Address" );
- if ( listPage > 0 )
- AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 375, 122, 0x25EA );
- if ( (listPage + 1) * 12 < m_List.Count )
- AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 392, 122, 0x25E6 );
- if ( m_List.Count == 0 )
- AddLabel( 12, 140, LabelHue, "There are no clients to display." );
- for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index )
- {
- NetState ns = m_List[index] as NetState;
- if ( ns == null )
- continue;
- Mobile m = ns.Mobile;
- Account a = ns.Account as Account;
- RacePlayerMobile pm = (RacePlayerMobile)m;
- int offset = 140 + (i * 20);
- if ( m == null )
- {
- AddLabelCropped( 12, offset, 81, 20, LabelHue, "(logging in)" );
- }
- else
- {
- AddLabelCropped( 12, offset, 81, 20, GetHueFor( m ), pm.PlayerName );
- }
- AddLabelCropped( 95, offset, 81, 20, LabelHue, a == null ? "(no account)" : a.Username );
- AddLabelCropped( 178, offset, 81, 20, LabelHue, m == null ? (a != null ? FormatAccessLevel( a.AccessLevel ) : "") : FormatAccessLevel( m.AccessLevel ) );
- AddLabelCropped( 273, offset,109, 20, LabelHue, ns.ToString() );
- if ( a != null || m != null )
- AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 4, index + 2 ), GumpButtonType.Reply, 0 );
- }
- break;
- }
- case AdminGumpPage.ClientInfo:
- {
- Mobile m = state as Mobile;
- RacePlayerMobile pm = (RacePlayerMobile)m;
- if ( m == null )
- break;
- AddClientHeader();
- AddHtml( 10, 125, 400, 20, Color( Center( "Information" ), LabelColor32 ), false, false );
- int y = 146;
- AddLabel( 20, y, LabelHue, "Name:" );
- AddLabel( 200, y, GetHueFor( m ), pm.PlayerName );
- y += 20;
- Account a = m.Account as Account;
- AddLabel( 20, y, LabelHue, "Account:" );
- AddLabel( 200, y, (a != null && a.Banned) ? RedHue : LabelHue, a == null ? "(no account)" : a.Username );
- AddButton( 380, y, 0xFA5, 0xFA7, GetButtonID( 7, 14 ), GumpButtonType.Reply, 0 );
- y += 20;
- NetState ns = m.NetState;
- if ( ns == null )
- {
- AddLabel( 20, y, LabelHue, "Address:" );
- AddLabel( 200, y, RedHue, "Offline" );
- y += 20;
- AddLabel( 20, y, LabelHue, "Location:" );
- AddLabel( 200, y, LabelHue, String.Format( "{0} [{1}]", m.Location, m.Map ) );
- y += 44;
- }
- else
- {
- AddLabel( 20, y, LabelHue, "Address:" );
- AddLabel( 200, y, GreenHue, ns.ToString() );
- y += 20;
- ClientVersion v = ns.Version;
- AddLabel( 20, y, LabelHue, "Version:" );
- AddLabel( 200, y, LabelHue, v == null ? "(null)" : v.ToString() );
- y += 20;
- AddLabel( 20, y, LabelHue, "Location:" );
- AddLabel( 200, y, LabelHue, String.Format( "{0} [{1}]", m.Location, m.Map ) );
- y += 24;
- }
- AddButtonLabeled( 20, y, GetButtonID( 7, 0 ), "Go to" );
- AddButtonLabeled( 200, y, GetButtonID( 7, 1 ), "Get" );
- y += 20;
- AddButtonLabeled( 20, y, GetButtonID( 7, 2 ), "Kick" );
- AddButtonLabeled( 200, y, GetButtonID( 7, 3 ), "Ban" );
- y += 20;
- AddButtonLabeled( 20, y, GetButtonID( 7, 4 ), "Properties" );
- AddButtonLabeled( 200, y, GetButtonID( 7, 5 ), "Skills" );
- y += 20;
- AddButtonLabeled( 20, y, GetButtonID( 7, 6 ), "Mortal" );
- AddButtonLabeled( 200, y, GetButtonID( 7, 7 ), "Immortal" );
- y += 20;
- AddButtonLabeled( 20, y, GetButtonID( 7, 8 ), "Squelch" );
- AddButtonLabeled( 200, y, GetButtonID( 7, 9 ), "Unsquelch" );
- y += 20;
- /*AddButtonLabeled( 20, y, GetButtonID( 7, 10 ), "Hide" );
- AddButtonLabeled( 200, y, GetButtonID( 7, 11 ), "Unhide" );
- y += 20;*/
- AddButtonLabeled( 20, y, GetButtonID( 7, 12 ), "Kill" );
- AddButtonLabeled( 200, y, GetButtonID( 7, 13 ), "Resurrect" );
- y += 20;
- break;
- }
- case AdminGumpPage.Accounts_Shared:
- {
- if ( m_List == null )
- m_List = GetAllSharedAccounts();
- AddLabelCropped( 12, 120, 60, 20, LabelHue, "Count" );
- AddLabelCropped( 72, 120, 120, 20, LabelHue, "Address" );
- AddLabelCropped( 192, 120, 180, 20, LabelHue, "Accounts" );
- if ( listPage > 0 )
- AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 375, 122, 0x25EA );
- if ( (listPage + 1) * 12 < m_List.Count )
- AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 392, 122, 0x25E6 );
- if ( m_List.Count == 0 )
- AddLabel( 12, 140, LabelHue, "There are no accounts to display." );
- StringBuilder sb = new StringBuilder();
- for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index )
- {
- DictionaryEntry de = (DictionaryEntry)m_List[index];
- IPAddress ipAddr = (IPAddress)de.Key;
- ArrayList accts = (ArrayList)de.Value;
- int offset = 140 + (i * 20);
- AddLabelCropped( 12, offset, 60, 20, LabelHue, accts.Count.ToString() );
- AddLabelCropped( 72, offset, 120, 20, LabelHue, ipAddr.ToString() );
- if ( sb.Length > 0 )
- sb.Length = 0;
- for ( int j = 0; j < accts.Count; ++j )
- {
- if ( j > 0 )
- sb.Append( ", " );
- if ( j < 4 )
- {
- Account acct = (Account)accts[j];
- sb.Append( acct.Username );
- }
- else
- {
- sb.Append( "..." );
- break;
- }
- }
- AddLabelCropped( 192, offset, 180, 20, LabelHue, sb.ToString() );
- AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, index + 55 ), GumpButtonType.Reply, 0 );
- }
- break;
- }
- case AdminGumpPage.Accounts:
- {
- if ( m_List == null )
- {
- m_List = new ArrayList( Accounts.Table.Values );
- m_List.Sort( AccountComparer.Instance );
- }
- ArrayList rads = ( state as ArrayList );
- AddAccountHeader();
- if ( rads == null )
- AddLabelCropped( 12, 120, 120, 20, LabelHue, "Name" );
- else
- AddLabelCropped( 32, 120, 100, 20, LabelHue, "Name" );
- AddLabelCropped( 132, 120, 120, 20, LabelHue, "Access Level" );
- AddLabelCropped( 252, 120, 120, 20, LabelHue, "Status" );
- if ( listPage > 0 )
- AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 375, 122, 0x25EA );
- if ( (listPage + 1) * 12 < m_List.Count )
- AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 392, 122, 0x25E6 );
- if ( m_List.Count == 0 )
- AddLabel( 12, 140, LabelHue, "There are no accounts to display." );
- if ( rads != null && notice == null )
- {
- AddButtonLabeled( 10, 390, GetButtonID( 5, 27 ), "Ban marked" );
- AddButtonLabeled( 10, 410, GetButtonID( 5, 28 ), "Delete marked" );
- AddButtonLabeled( 210, 400, GetButtonID( 5, 29 ), "Mark all" );
- }
- for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index )
- {
- Account a = m_List[index] as Account;
- if ( a == null )
- continue;
- int offset = 140 + (i * 20);
- AccessLevel accessLevel;
- bool online;
- GetAccountInfo( a, out accessLevel, out online );
- if ( rads == null )
- {
- AddLabelCropped( 12, offset, 120, 20, LabelHue, a.Username );
- }
- else
- {
- AddCheck( 10, offset, 0xD2, 0xD3, rads.Contains( a ), index );
- AddLabelCropped( 32, offset, 100, 20, LabelHue, a.Username );
- }
- AddLabelCropped( 132, offset, 120, 20, LabelHue, FormatAccessLevel( accessLevel ) );
- if ( online )
- AddLabelCropped( 252, offset, 120, 20, GreenHue, "Online" );
- else if ( a.Banned )
- AddLabelCropped( 252, offset, 120, 20, RedHue, "Banned" );
- else
- AddLabelCropped( 252, offset, 120, 20, RedHue, "Offline" );
- AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, index + 55 ), GumpButtonType.Reply, 0 );
- }
- break;
- }
- case AdminGumpPage.AccountDetails:
- {
- AddPageButton( 190, 10, GetButtonID( 5, 0 ), "Information", AdminGumpPage.AccountDetails_Information, AdminGumpPage.AccountDetails_ChangeAccess, AdminGumpPage.AccountDetails_ChangePassword );
- AddPageButton( 190, 30, GetButtonID( 5, 1 ), "Characters", AdminGumpPage.AccountDetails_Characters );
- AddPageButton( 190, 50, GetButtonID( 5, 13 ), "Access", AdminGumpPage.AccountDetails_Access, AdminGumpPage.AccountDetails_Access_ClientIPs, AdminGumpPage.AccountDetails_Access_Restrictions );
- AddPageButton( 190, 70, GetButtonID( 5, 2 ), "Comments", AdminGumpPage.AccountDetails_Comments );
- AddPageButton( 190, 90, GetButtonID( 5, 3 ), "Tags", AdminGumpPage.AccountDetails_Tags );
- break;
- }
- case AdminGumpPage.AccountDetails_ChangePassword:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- AddHtml( 10, 125, 400, 20, Color( Center( "Change Password" ), LabelColor32 ), false, false );
- AddLabel( 20, 150, LabelHue, "Username:" );
- AddLabel( 200, 150, LabelHue, a.Username );
- AddLabel( 20, 180, LabelHue, "Password:" );
- AddTextField( 200, 180, 160, 20, 0 );
- AddLabel( 20, 210, LabelHue, "Confirm:" );
- AddTextField( 200, 210, 160, 20, 1 );
- AddButtonLabeled( 20, 240, GetButtonID( 5, 12 ), "Submit Change" );
- goto case AdminGumpPage.AccountDetails;
- }
- case AdminGumpPage.AccountDetails_ChangeAccess:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- AddHtml( 10, 125, 400, 20, Color( Center( "Change Access Level" ), LabelColor32 ), false, false );
- AddLabel( 20, 150, LabelHue, "Username:" );
- AddLabel( 200, 150, LabelHue, a.Username );
- AddLabel( 20, 170, LabelHue, "Current Level:" );
- AddLabel( 200, 170, LabelHue, FormatAccessLevel( a.AccessLevel ) );
- AddButtonLabeled( 20, 200, GetButtonID( 5, 20 ), "Player" );
- AddButtonLabeled( 20, 220, GetButtonID( 5, 21 ), "Counselor" );
- AddButtonLabeled( 20, 240, GetButtonID( 5, 22 ), "Game Master" );
- AddButtonLabeled( 20, 260, GetButtonID( 5, 23 ), "Seer" );
- AddButtonLabeled( 20, 280, GetButtonID( 5, 24 ), "Administrator" );
- goto case AdminGumpPage.AccountDetails;
- }
- case AdminGumpPage.AccountDetails_Information:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- int charCount = 0;
- for ( int i = 0; i < 5; ++i )
- {
- if ( a[i] != null )
- ++charCount;
- }
- AddHtml( 10, 125, 400, 20, Color( Center( "Information" ), LabelColor32 ), false, false );
- AddLabel( 20, 150, LabelHue, "Username:" );
- AddLabel( 200, 150, LabelHue, a.Username );
- AddLabel( 20, 170, LabelHue, "Access Level:" );
- AddLabel( 200, 170, LabelHue, FormatAccessLevel( a.AccessLevel ) );
- AddLabel( 20, 190, LabelHue, "Status:" );
- AddLabel( 200, 190, a.Banned ? RedHue : GreenHue, a.Banned ? "Banned" : "Active" );
- DateTime banTime;
- TimeSpan banDuration;
- if ( a.Banned && a.GetBanTags( out banTime, out banDuration ) )
- {
- if ( banDuration == TimeSpan.MaxValue )
- {
- AddLabel( 250, 190, LabelHue, "(Infinite)" );
- }
- else if ( banDuration == TimeSpan.Zero )
- {
- AddLabel( 250, 190, LabelHue, "(Zero)" );
- }
- else
- {
- TimeSpan remaining = (DateTime.Now - banTime);
- if ( remaining < TimeSpan.Zero )
- remaining = TimeSpan.Zero;
- else if ( remaining > banDuration )
- remaining = banDuration;
- double remMinutes = remaining.TotalMinutes;
- double totMinutes = banDuration.TotalMinutes;
- double perc = remMinutes / totMinutes;
- AddLabel( 250, 190, LabelHue, String.Format( "{0} [{1:F0}%]", FormatTimeSpan( banDuration ), perc*100 ) );
- }
- }
- else if ( a.Banned )
- {
- AddLabel( 250, 190, LabelHue, "(Unspecified)" );
- }
- AddLabel( 20, 210, LabelHue, "Created:" );
- AddLabel( 200, 210, LabelHue, a.Created.ToString() );
- AddLabel( 20, 230, LabelHue, "Last Login:" );
- AddLabel( 200, 230, LabelHue, a.LastLogin.ToString() );
- AddLabel( 20, 250, LabelHue, "Character Count:" );
- AddLabel( 200, 250, LabelHue, charCount.ToString() );
- AddLabel( 20, 270, LabelHue, "Comment Count:" );
- AddLabel( 200, 270, LabelHue, a.Comments.Count.ToString() );
- AddLabel( 20, 290, LabelHue, "Tag Count:" );
- AddLabel( 200, 290, LabelHue, a.Tags.Count.ToString() );
- AddButtonLabeled( 20, 320, GetButtonID( 5, 8 ), "Change Password" );
- AddButtonLabeled( 200, 320, GetButtonID( 5, 9 ), "Change Access Level" );
- if ( !a.Banned )
- AddButtonLabeled( 20, 350, GetButtonID( 5, 10 ), "Ban Account" );
- else
- AddButtonLabeled( 20, 350, GetButtonID( 5, 11 ), "Unban Account" );
- AddButtonLabeled( 200, 350, GetButtonID( 5, 25 ), "Delete Account" );
- goto case AdminGumpPage.AccountDetails;
- }
- case AdminGumpPage.AccountDetails_Access:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- AddHtml( 10, 125, 400, 20, Color( Center( "Access" ), LabelColor32 ), false, false );
- AddPageButton( 20, 150, GetButtonID( 5, 14 ), "View client addresses", AdminGumpPage.AccountDetails_Access_ClientIPs );
- AddPageButton( 20, 170, GetButtonID( 5, 15 ), "Manage restrictions", AdminGumpPage.AccountDetails_Access_Restrictions );
- goto case AdminGumpPage.AccountDetails;
- }
- case AdminGumpPage.AccountDetails_Access_ClientIPs:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- if ( m_List == null )
- m_List = new ArrayList( a.LoginIPs );
- AddHtml( 10, 195, 400, 20, Color( Center( "Client Addresses" ), LabelColor32 ), false, false );
- AddButtonLabeled( 200, 225, GetButtonID( 5, 16 ), "View all shared accounts" );
- AddButtonLabeled( 200, 245, GetButtonID( 5, 17 ), "Ban all shared accounts" );
- AddButtonLabeled( 200, 265, GetButtonID( 5, 18 ), "Firewall all addresses" );
- AddHtml( 195, 295, 210, 80, Color( "List of IP addresses which have accessed this account.", LabelColor32 ), false, false );
- AddImageTiled( 15, 219, 176, 156, 0xBBC );
- AddBlackAlpha( 16, 220, 174, 154 );
- AddHtml( 18, 221, 114, 20, Color( "IP Address", LabelColor32 ), false, false );
- if ( listPage > 0 )
- AddButton( 154, 223, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 154, 223, 0x25EA );
- if ( (listPage + 1) * 6 < m_List.Count )
- AddButton( 171, 223, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 171, 223, 0x25E6 );
- if ( m_List.Count == 0 )
- AddHtml( 18, 243, 170, 60, Color( "This account has not yet been accessed.", LabelColor32 ), false, false );
- for ( int i = 0, index = (listPage * 6); i < 6 && index >= 0 && index < m_List.Count; ++i, ++index )
- {
- AddHtml( 18, 243 + (i * 22), 114, 20, Color( m_List[index].ToString(), LabelColor32 ), false, false );
- AddButton( 130, 242 + (i * 22), 0xFA2, 0xFA4, GetButtonID( 8, index ), GumpButtonType.Reply, 0 );
- AddButton( 160, 242 + (i * 22), 0xFA8, 0xFAA, GetButtonID( 9, index ), GumpButtonType.Reply, 0 );
- }
- goto case AdminGumpPage.AccountDetails_Access;
- }
- case AdminGumpPage.AccountDetails_Access_Restrictions:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- if ( m_List == null )
- m_List = new ArrayList( a.IPRestrictions );
- AddHtml( 10, 195, 400, 20, Color( Center( "Address Restrictions" ), LabelColor32 ), false, false );
- AddTextField( 200, 225, 120, 20, 0 );
- AddButtonLabeled( 330, 225, GetButtonID( 5, 19 ), "Add" );
- AddHtml( 195, 255, 210, 120, Color( "Any clients connecting from an address not in this list will be rejected. Or, if the list is empty, any client may connect.", LabelColor32 ), false, false );
- AddImageTiled( 15, 219, 176, 156, 0xBBC );
- AddBlackAlpha( 16, 220, 174, 154 );
- AddHtml( 18, 221, 114, 20, Color( "IP Address", LabelColor32 ), false, false );
- if ( listPage > 0 )
- AddButton( 154, 223, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 154, 223, 0x25EA );
- if ( (listPage + 1) * 6 < m_List.Count )
- AddButton( 171, 223, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 171, 223, 0x25E6 );
- if ( m_List.Count == 0 )
- AddHtml( 18, 243, 170, 60, Color( "There are no addresses in this list.", LabelColor32 ), false, false );
- for ( int i = 0, index = (listPage * 6); i < 6 && index >= 0 && index < m_List.Count; ++i, ++index )
- {
- AddHtml( 18, 243 + (i * 22), 114, 20, Color( m_List[index].ToString(), LabelColor32 ), false, false );
- AddButton( 160, 242 + (i * 22), 0xFB1, 0xFB3, GetButtonID( 8, index ), GumpButtonType.Reply, 0 );
- }
- goto case AdminGumpPage.AccountDetails_Access;
- }
- case AdminGumpPage.AccountDetails_Characters:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- AddHtml( 10, 125, 400, 20, Color( Center( "Characters" ), LabelColor32 ), false, false );
- AddLabelCropped( 12, 150, 120, 20, LabelHue, "Name" );
- AddLabelCropped( 132, 150, 120, 20, LabelHue, "Access Level" );
- AddLabelCropped( 252, 150, 120, 20, LabelHue, "Status" );
- int index = 0;
- for ( int i = 0; i < 5; ++i )
- {
- Mobile m = a[i];
- RacePlayerMobile pm = (RacePlayerMobile)m;
-
- if ( m == null )
- continue;
- int offset = 170 + (index * 20);
- AddLabelCropped( 12, offset, 120, 20, GetHueFor( m ), pm.PlayerName );
- AddLabelCropped( 132, offset, 120, 20, LabelHue, FormatAccessLevel( m.AccessLevel ) );
- if ( m.NetState != null )
- AddLabelCropped( 252, offset, 120, 20, GreenHue, "Online" );
- else
- AddLabelCropped( 252, offset, 120, 20, RedHue, "Offline" );
- AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, i + 50 ), GumpButtonType.Reply, 0 );
- ++index;
- }
- if ( index == 0 )
- AddLabel( 12, 170, LabelHue, "The character list is empty." );
- goto case AdminGumpPage.AccountDetails;
- }
- case AdminGumpPage.AccountDetails_Comments:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- AddHtml( 10, 125, 400, 20, Color( Center( "Comments" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 150, GetButtonID( 5, 4 ), "Add Comment" );
- StringBuilder sb = new StringBuilder();
- if ( a.Comments.Count == 0 )
- sb.Append( "There are no comments for this account." );
- for ( int i = 0; i < a.Comments.Count; ++i )
- {
- if ( i > 0 )
- sb.Append( "<BR><BR>" );
- AccountComment c = (AccountComment)a.Comments[i];
- sb.AppendFormat( "[{0}]<BR>{1}", c.AddedBy, c.Content );
- }
- AddHtml( 20, 180, 380, 190, sb.ToString(), true, true );
- goto case AdminGumpPage.AccountDetails;
- }
- case AdminGumpPage.AccountDetails_Tags:
- {
- Account a = state as Account;
- if ( a == null )
- break;
- AddHtml( 10, 125, 400, 20, Color( Center( "Tags" ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 150, GetButtonID( 5, 5 ), "Add Tag" );
- StringBuilder sb = new StringBuilder();
- if ( a.Tags.Count == 0 )
- sb.Append( "There are no tags for this account." );
- for ( int i = 0; i < a.Tags.Count; ++i )
- {
- if ( i > 0 )
- sb.Append( "<BR>" );
- AccountTag tag = (AccountTag)a.Tags[i];
- sb.AppendFormat( "{0} = {1}", tag.Name, tag.Value );
- }
- AddHtml( 20, 180, 380, 190, sb.ToString(), true, true );
- goto case AdminGumpPage.AccountDetails;
- }
- case AdminGumpPage.Firewall:
- {
- AddFirewallHeader();
- if ( m_List == null )
- m_List = new ArrayList( Firewall.List );
- AddLabelCropped( 12, 120, 358, 20, LabelHue, "IP Address" );
- if ( listPage > 0 )
- AddButton( 375, 122, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 375, 122, 0x25EA );
- if ( (listPage + 1) * 12 < m_List.Count )
- AddButton( 392, 122, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 392, 122, 0x25E6 );
- if ( m_List.Count == 0 )
- AddLabel( 12, 140, LabelHue, "The firewall list is empty." );
- for ( int i = 0, index = (listPage * 12); i < 12 && index >= 0 && index < m_List.Count; ++i, ++index )
- {
- object obj = m_List[index];
- if ( !(obj is IPAddress) && !(obj is String) )
- break;
- int offset = 140 + (i * 20);
- AddLabelCropped( 12, offset, 358, 20, LabelHue, obj.ToString() );
- AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 6, index + 4 ), GumpButtonType.Reply, 0 );
- }
- break;
- }
- case AdminGumpPage.FirewallInfo:
- {
- AddFirewallHeader();
- if ( !(state is IPAddress) && !(state is String) )
- break;
- AddHtml( 10, 125, 400, 20, Color( Center( state.ToString() ), LabelColor32 ), false, false );
- AddButtonLabeled( 20, 150, GetButtonID( 6, 3 ), "Remove" );
- AddHtml( 10, 175, 400, 20, Color( Center( "Potentially Effected Accounts" ), LabelColor32 ), false, false );
- if ( m_List == null )
- {
- m_List = new ArrayList();
- string pattern = state as String;
- IPAddress addr = ( state is IPAddress ? (IPAddress)state : IPAddress.Any );
- foreach ( Account acct in Accounts.Table.Values )
- {
- IPAddress[] loginList = acct.LoginIPs;
- bool contains = false;
- for ( int i = 0; !contains && i < loginList.Length; ++i )
- contains = ( pattern == null ? loginList[i].Equals( addr ) : Utility.IPMatch( pattern, loginList[i] ) );
- if ( contains )
- m_List.Add( acct );
- }
- m_List.Sort( AccountComparer.Instance );
- }
- if ( listPage > 0 )
- AddButton( 375, 177, 0x15E3, 0x15E7, GetButtonID( 1, 0 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 375, 177, 0x25EA );
- if ( (listPage + 1) * 12 < m_List.Count )
- AddButton( 392, 177, 0x15E1, 0x15E5, GetButtonID( 1, 1 ), GumpButtonType.Reply, 0 );
- else
- AddImage( 392, 177, 0x25E6 );
- if ( m_List.Count == 0 )
- AddLabelCropped( 12, 200, 398, 20, LabelHue, "No accounts found." );
- for ( int i = 0, index = (listPage * 9); i < 9 && index >= 0 && index < m_List.Count; ++i, ++index )
- {
- Account a = m_List[index] as Account;
- if ( a == null )
- continue;
- int offset = 200 + (i * 20);
- AccessLevel accessLevel;
- bool online;
- GetAccountInfo( a, out accessLevel, out online );
- AddLabelCropped( 12, offset, 120, 20, LabelHue, a.Username );
- AddLabelCropped( 132, offset, 120, 20, LabelHue, FormatAccessLevel( accessLevel ) );
- if ( online )
- AddLabelCropped( 252, offset, 120, 20, GreenHue, "Online" );
- else
- AddLabelCropped( 252, offset, 120, 20, RedHue, "Offline" );
- AddButton( 380, offset - 1, 0xFA5, 0xFA7, GetButtonID( 5, index + 55 ), GumpButtonType.Reply, 0 );
- }
- break;
- }
- }
- }
- public void AddTextField( int x, int y, int width, int height, int index )
- {
- AddBackground( x - 2, y - 2, width + 4, height + 4, 0x2486 );
- AddTextEntry( x + 2, y + 2, width - 4, height - 4, 0, index, "" );
- }
- public void AddClientHeader()
- {
- AddTextField( 200, 20, 200, 20, 0 );
- AddButtonLabeled( 200, 50, GetButtonID( 4, 0 ), "Search For Name" );
- AddButtonLabeled( 200, 80, GetButtonID( 4, 1 ), "Search For IP Address" );
- }
- public void AddAccountHeader()
- {
- AddPage( 1 );
- AddLabel( 200, 20, LabelHue, "Name:" );
- AddTextField( 250, 20, 150, 20, 0 );
- AddLabel( 200, 50, LabelHue, "Pass:" );
- AddTextField( 250, 50, 150, 20, 1 );
- AddButtonLabeled( 200, 80, GetButtonID( 5, 6 ), "Add" );
- AddButtonLabeled( 290, 80, GetButtonID( 5, 7 ), "Search" );
- AddButton( 384, 84, 0x15E1, 0x15E5, 0, GumpButtonType.Page, 2 );
- AddPage( 2 );
- AddButtonLabeled( 200, 20, GetButtonID( 5, 31 ), "View All: Inactive" );
- AddButtonLabeled( 200, 40, GetButtonID( 5, 32 ), "View All: Banned" );
- AddButtonLabeled( 200, 60, GetButtonID( 5, 26 ), "View All: Shared" );
- AddButtonLabeled( 200, 80, GetButtonID( 5, 30 ), "View All: Empty" );
- AddButton( 384, 84, 0x15E1, 0x15E5, 0, GumpButtonType.Page, 1 );
- AddPage( 0 );
- }
- public void AddFirewallHeader()
- {
- AddTextField( 200, 20, 200, 20, 0 );
- AddButtonLabeled( 320, 50, GetButtonID( 6, 0 ), "Search" );
- AddButtonLabeled( 200, 50, GetButtonID( 6, 1 ), "Add (Input)" );
- AddButtonLabeled( 200, 80, GetButtonID( 6, 2 ), "Add (Target)" );
- }
- private static ArrayList GetAllSharedAccounts()
- {
- Hashtable table = new Hashtable();
- ArrayList list;
- foreach ( Account acct in Accounts.Table.Values )
- {
- IPAddress[] theirAddresses = acct.LoginIPs;
- for ( int i = 0; i < theirAddresses.Length; ++i )
- {
- list = (ArrayList)table[theirAddresses[i]];
- if ( list == null )
- table[theirAddresses[i]] = list = new ArrayList();
- list.Add( acct );
- }
- }
- list = new ArrayList( table );
- for ( int i = 0; i < list.Count; ++i )
- {
- DictionaryEntry de = (DictionaryEntry)list[i];
- ArrayList accts = (ArrayList)de.Value;
- if ( accts.Count == 1 )
- list.RemoveAt( i-- );
- else
- accts.Sort( AccountComparer.Instance );
- }
- list.Sort( SharedAccountComparer.Instance );
- return list;
- }
- private class SharedAccountComparer : IComparer
- {
- public static readonly IComparer Instance = new SharedAccountComparer();
- public SharedAccountComparer()
- {
- }
- public int Compare( object x, object y )
- {
- DictionaryEntry a = (DictionaryEntry)x;
- DictionaryEntry b = (DictionaryEntry)y;
- ArrayList aList = (ArrayList)a.Value;
- ArrayList bList = (ArrayList)b.Value;
- return bList.Count - aList.Count;
- }
- }
- private static ArrayList GetSharedAccounts( IPAddress ipAddress )
- {
- ArrayList list = new ArrayList();
- foreach ( Account acct in Accounts.Table.Values )
- {
- IPAddress[] theirAddresses = acct.LoginIPs;
- bool contains = false;
- for ( int i = 0; !contains && i < theirAddresses.Length; ++i )
- contains = ipAddress.Equals( theirAddresses[i] );
- if ( contains )
- list.Add( acct );
- }
- list.Sort( AccountComparer.Instance );
- return list;
- }
- private static ArrayList GetSharedAccounts( IPAddress[] ipAddresses )
- {
- ArrayList list = new ArrayList();
- foreach ( Account acct in Accounts.Table.Values )
- {
- IPAddress[] theirAddresses = acct.LoginIPs;
- bool contains = false;
- for ( int i = 0; !contains && i < theirAddresses.Length; ++i )
- {
- IPAddress check = theirAddresses[i];
- for ( int j = 0; !contains && j < ipAddresses.Length; ++j )
- contains = check.Equals( ipAddresses[j] );
- }
- if ( contains )
- list.Add( acct );
- }
- list.Sort( AccountComparer.Instance );
- return list;
- }
- public static void BanShared_Callback( Mobile from, bool okay, object state )
- {
- if ( from.AccessLevel < AccessLevel.Administrator )
- return;
- string notice;
- ArrayList list = null;
- if ( okay )
- {
- Account a = (Account)state;
- list = GetSharedAccounts( a.LoginIPs );
- for ( int i = 0; i < list.Count; ++i )
- {
- ((Account)list[i]).SetUnspecifiedBan( from );
- ((Account)list[i]).Banned = true;
- }
- notice = "All addresses in the list have been banned.";
- }
- else
- {
- notice = "You have chosen not to ban all shared accounts.";
- }
- from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, notice, state ) );
- if ( okay )
- from.SendGump( new BanDurationGump( list ) );
- }
- public static void AccountDelete_Callback( Mobile from, bool okay, object state )
- {
- if ( from.AccessLevel < AccessLevel.Administrator )
- return;
- if ( okay )
- {
- Account a = (Account)state;
- a.Delete();
- from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, 0, null, String.Format( "{0} : The account has been deleted.", a.Username ), null ) );
- }
- else
- {
- from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Information, 0, null, "You have chosen not to delete the account.", state ) );
- }
- }
- public static void ResendGump_Callback( Mobile from, object state )
- {
- if ( from.AccessLevel < AccessLevel.Administrator )
- return;
- object[] states = (object[])state;
- ArrayList list = (ArrayList)states[0];
- ArrayList rads = (ArrayList)states[1];
- int page = (int)states[2];
- from.SendGump( new AdminGump( from, AdminGumpPage.Accounts, page, list, null, rads ) );
- }
- public static void Marked_Callback( Mobile from, bool okay, object state )
- {
- if ( from.AccessLevel < AccessLevel.Administrator )
- return;
- object[] states = (object[])state;
- bool ban = (bool)states[0];
- ArrayList list = (ArrayList)states[1];
- ArrayList rads = (ArrayList)states[2];
- int page = (int)states[3];
- if ( okay )
- {
- for ( int i = 0; i < rads.Count; ++i )
- {
- Account acct = (Account)rads[i];
- if ( ban )
- {
- acct.SetUnspecifiedBan( from );
- acct.Banned = true;
- }
- else
- {
- acct.Delete();
- rads.RemoveAt( i-- );
- list.Remove( acct );
- }
- }
- from.SendGump( new NoticeGump( 1060637, 30720, String.Format( "You have {0} the account{1}.", ban ? "banned" : "deleted", rads.Count == 1 ? "" : "s" ), 0xFFC000, 420, 280, new NoticeGumpCallback( ResendGump_Callback ), new object[]{ list, rads, ban ? page : 0 } ) );
- if ( ban )
- from.SendGump( new BanDurationGump( list ) );
- }
- else
- {
- from.SendGump( new NoticeGump( 1060637, 30720, String.Format( "You have chosen not to {0} the account{1}.", ban ? "ban" : "delete", rads.Count == 1 ? "" : "s" ), 0xFFC000, 420, 280, new NoticeGumpCallback( ResendGump_Callback ), new object[]{ list, rads, page } ) );
- }
- }
- public static void FirewallShared_Callback( Mobile from, bool okay, object state )
- {
- if ( from.AccessLevel < AccessLevel.Administrator )
- return;
- string notice;
- if ( okay )
- {
- Account a = (Account)state;
- for ( int i = 0; i < a.LoginIPs.Length; ++i )
- Firewall.Add( a.LoginIPs[i] );
- notice = "All addresses in the list have been firewalled.";
- }
- else
- {
- notice = "You have chosen not to firewall all addresses.";
- }
- from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, notice, state ) );
- }
- public static void Firewall_Callback( Mobile from, bool okay, object state )
- {
- if ( from.AccessLevel < AccessLevel.Administrator )
- return;
- object[] states = (object[])state;
- Account a = (Account)states[0];
- object toFirewall = states[1];
- string notice;
- if ( okay )
- {
- Firewall.Add( toFirewall );
- notice = String.Format( "{0} : Added to firewall.", toFirewall );
- }
- else
- {
- notice = "You have chosen not to firewall the address.";
- }
- from.SendGump( new AdminGump( from, AdminGumpPage.AccountDetails_Access_ClientIPs, 0, null, notice, a ) );
- }
- public override void OnResponse( Server.Network.NetState sender, RelayInfo info )
- {
- int val = info.ButtonID - 1;
- if ( val < 0 )
- return;
- Mobile from = m_From;
- if ( from.AccessLevel < AccessLevel.Administrator )
- return;
- if ( m_PageType == AdminGumpPage.Accounts )
- {
- ArrayList list = m_List;
- ArrayList rads = m_State as ArrayList;
- if ( list != null && rads != null )
- {
- for ( int i = 0, v = m_ListPage*12; i < 12 && v < list.Count; ++i, ++v )
- {
- object obj = list[v];
- if ( info.IsSwitched( v ) )
- {
- if ( !rads.Contains( obj ) )
- rads.Add( obj );
- }
- else if ( rads.Contains( obj ) )
- {
- rads.Remove( obj );
- }
- }
- }
- }
- int type = val % 10;
- int index = val / 10;
- switch ( type )
- {
- case 0:
- {
- AdminGumpPage page;
- switch ( index )
- {
- case 0: page = AdminGumpPage.Information; break;
- case 1: page = AdminGumpPage.Administer; break;
- case 2: page = AdminGumpPage.Clients; break;
- case 3: page = AdminGumpPage.Accounts; break;
- case 4: page = AdminGumpPage.Firewall; break;
- default: return;
- }
- from.SendGump( new AdminGump( from, page, 0, null, null, null ) );
- break;
- }
- case 1:
- {
- switch ( index )
- {
- case 0:
- {
- if ( m_List != null && m_ListPage > 0 )
- from.SendGump( new AdminGump( from, m_PageType, m_ListPage - 1, m_List, null, m_State ) );
- break;
- }
- case 1:
- {
- if ( m_List != null /*&& (m_ListPage + 1) * 12 < m_List.Count*/ )
- from.SendGump( new AdminGump( from, m_PageType, m_ListPage + 1, m_List, null, m_State ) );
- break;
- }
- }
- break;
- }
- case 3:
- {
- string notice = null;
- AdminGumpPage page = AdminGumpPage.Administer;
- if ( index >= 500 )
- page = AdminGumpPage.Administer_Access_Lockdown;
- else if ( index >= 400 )
- page = AdminGumpPage.Administer_Commands;
- else if ( index >= 300 )
- page = AdminGumpPage.Administer_Access;
- else if ( index >= 200 )
- page = AdminGumpPage.Administer_Server;
- else if ( index >= 100 )
- page = AdminGumpPage.Administer_WorldBuilding;
- switch ( index )
- {
- case 0: page = AdminGumpPage.Administer_WorldBu…
Large files files are truncated, but you can click here to view the full file