using System; using System.Collections.Generic; using Server; using Server.Mobiles; using Server.Accounting; using Server.Network; using Server.Prompts; using Server.Targeting; using Server.Commands; namespace Server.Gumps { public class CommentsGump : Gump { public static void Initialize() { CommandSystem.Register( "Comments", AccessLevel.Counselor, new CommandEventHandler( Comments_OnCommand ) ); } [Usage( "Comments" )] [Description( "View/Modify/Add account comments." )] private static void Comments_OnCommand( CommandEventArgs args ) { args.Mobile.SendMessage( "Select the player to view account comments." ); args.Mobile.BeginTarget( -1, false, TargetFlags.None, new TargetCallback( OnTarget ) ); } private static void OnTarget( Mobile from, object target ) { Mobile m = target as Mobile; if ( m == null || !m.Player ) { from.SendMessage( "You must target a player." ); return; } if ( m.Account == null ) from.SendMessage( "That player doesn't have an account loaded... weird." ); else from.SendGump( new CommentsGump( (Account)m.Account ) ); } private Account m_Acct; public CommentsGump( Account acct ) : base( 30, 30 ) { m_Acct = acct; AddPage( 0 ); AddImageTiled( 0, 0, 410, 448, 0xA40 ); AddAlphaRegion( 1, 1, 408, 446 ); string title = String.Format( "Comments for '{0}'", acct.Username ); int x = 205 - ((title.Length / 2) * 7); if ( x < 120 ) x = 120; AddLabel( x, 12, 2100, title ); AddPage( 1 ); AddButton( 12, 12, 0xFA8, 0xFAA, 0x7F, GumpButtonType.Reply, 0 ); AddLabel( 48, 12, 2100, "Add Comment" ); List list = acct.Comments; if ( list.Count > 0 ) { for ( int i = 0; i < list.Count; ++i ) { AccountComment comment = list[i]; if ( i >= 5 && (i % 5) == 0 ) { AddButton( 368, 12, 0xFA5, 0xFA7, 0, GumpButtonType.Page, (i / 5) + 1 ); AddLabel( 298, 12, 2100, "Next Page" ); AddPage( (i / 5) + 1 ); AddButton( 12, 12, 0xFAE, 0xFB0, 0, GumpButtonType.Page, (i / 5) ); AddLabel( 48, 12, 2100, "Prev Page" ); } string html = String.Format( "[Added By: {0} on {1}]
{2}", comment.AddedBy, comment.LastModified.ToString( "H:mm M/d/yy" ), comment.Content ); AddHtml( 12, 44 + ((i % 5) * 80), 386, 70, html, true, true ); } } else { AddLabel( 12, 44, 2100, "There are no comments for this account." ); } } public override void OnResponse( NetState state, RelayInfo info ) { if ( info.ButtonID == 0x7F ) { state.Mobile.SendMessage( "Enter the text for the account comment (or press [Esc] to cancel):" ); state.Mobile.Prompt = new CommentPrompt( m_Acct ); } } public class CommentPrompt : Prompt { private Account m_Acct; public CommentPrompt( Account acct ) { m_Acct = acct; } public override void OnCancel(Mobile from) { from.CloseGump( typeof( CommentsGump ) ); from.SendGump( new CommentsGump( m_Acct ) ); base.OnCancel (from); } public override void OnResponse(Mobile from, string text) { base.OnResponse (from, text); from.SendMessage( "Comment added." ); //m_Acct.AddComment( from.Name, text ); m_Acct.Comments.Add( new AccountComment( from.Name, text ) ); from.CloseGump( typeof( CommentsGump ) ); from.SendGump( new CommentsGump( m_Acct ) ); } } } }