205 lines
No EOL
4 KiB
C#
205 lines
No EOL
4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Server;
|
|
using Server.Gumps;
|
|
|
|
namespace Server.Commands.Generic
|
|
{
|
|
public enum ObjectTypes
|
|
{
|
|
Both,
|
|
Items,
|
|
Mobiles,
|
|
All
|
|
}
|
|
|
|
public abstract class BaseCommand
|
|
{
|
|
private string[] m_Commands;
|
|
private AccessLevel m_AccessLevel;
|
|
private CommandSupport m_Implementors;
|
|
private ObjectTypes m_ObjectTypes;
|
|
private bool m_ListOptimized;
|
|
private string m_Usage;
|
|
private string m_Description;
|
|
|
|
public bool ListOptimized
|
|
{
|
|
get{ return m_ListOptimized; }
|
|
set{ m_ListOptimized = value; }
|
|
}
|
|
|
|
public string[] Commands
|
|
{
|
|
get{ return m_Commands; }
|
|
set{ m_Commands = value; }
|
|
}
|
|
|
|
public string Usage
|
|
{
|
|
get{ return m_Usage; }
|
|
set{ m_Usage = value; }
|
|
}
|
|
|
|
public string Description
|
|
{
|
|
get{ return m_Description; }
|
|
set{ m_Description = value; }
|
|
}
|
|
|
|
public AccessLevel AccessLevel
|
|
{
|
|
get{ return m_AccessLevel; }
|
|
set{ m_AccessLevel = value; }
|
|
}
|
|
|
|
public ObjectTypes ObjectTypes
|
|
{
|
|
get{ return m_ObjectTypes; }
|
|
set{ m_ObjectTypes = value; }
|
|
}
|
|
|
|
public CommandSupport Supports
|
|
{
|
|
get{ return m_Implementors; }
|
|
set{ m_Implementors = value; }
|
|
}
|
|
|
|
public BaseCommand()
|
|
{
|
|
m_Responses = new ArrayList();
|
|
m_Failures = new ArrayList();
|
|
}
|
|
|
|
public static bool IsAccessible( Mobile from, object obj )
|
|
{
|
|
if ( from.AccessLevel >= AccessLevel.Administrator || obj == null )
|
|
return true;
|
|
|
|
Mobile mob;
|
|
|
|
if ( obj is Mobile )
|
|
mob = (Mobile)obj;
|
|
else if ( obj is Item )
|
|
mob = ((Item)obj).RootParent as Mobile;
|
|
else
|
|
mob = null;
|
|
|
|
if ( mob == null || mob == from || from.AccessLevel > mob.AccessLevel )
|
|
return true;
|
|
|
|
return false;
|
|
}
|
|
|
|
public virtual void ExecuteList( CommandEventArgs e, ArrayList list )
|
|
{
|
|
for ( int i = 0; i < list.Count; ++i )
|
|
Execute( e, list[i] );
|
|
}
|
|
|
|
public virtual void Execute( CommandEventArgs e, object obj )
|
|
{
|
|
}
|
|
|
|
public virtual bool ValidateArgs( BaseCommandImplementor impl, CommandEventArgs e )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
private ArrayList m_Responses, m_Failures;
|
|
|
|
private class MessageEntry
|
|
{
|
|
public string m_Message;
|
|
public int m_Count;
|
|
|
|
public MessageEntry( string message )
|
|
{
|
|
m_Message = message;
|
|
m_Count = 1;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
if ( m_Count > 1 )
|
|
return String.Format( "{0} ({1})", m_Message, m_Count );
|
|
|
|
return m_Message;
|
|
}
|
|
}
|
|
|
|
public void AddResponse( string message )
|
|
{
|
|
for ( int i = 0; i < m_Responses.Count; ++i )
|
|
{
|
|
MessageEntry entry = (MessageEntry)m_Responses[i];
|
|
|
|
if ( entry.m_Message == message )
|
|
{
|
|
++entry.m_Count;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( m_Responses.Count == 10 )
|
|
return;
|
|
|
|
m_Responses.Add( new MessageEntry( message ) );
|
|
}
|
|
|
|
public void AddResponse( Gump gump )
|
|
{
|
|
m_Responses.Add( gump );
|
|
}
|
|
|
|
public void LogFailure( string message )
|
|
{
|
|
for ( int i = 0; i < m_Failures.Count; ++i )
|
|
{
|
|
MessageEntry entry = (MessageEntry)m_Failures[i];
|
|
|
|
if ( entry.m_Message == message )
|
|
{
|
|
++entry.m_Count;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( m_Failures.Count == 10 )
|
|
return;
|
|
|
|
m_Failures.Add( new MessageEntry( message ) );
|
|
}
|
|
|
|
public void Flush( Mobile from, bool flushToLog )
|
|
{
|
|
if ( m_Responses.Count > 0 )
|
|
{
|
|
for ( int i = 0; i < m_Responses.Count; ++i )
|
|
{
|
|
object obj = m_Responses[i];
|
|
|
|
if ( obj is MessageEntry )
|
|
{
|
|
from.SendMessage( ((MessageEntry)obj).ToString() );
|
|
|
|
if ( flushToLog )
|
|
CommandLogging.WriteLine( from, ((MessageEntry)obj).ToString() );
|
|
}
|
|
else if ( obj is Gump )
|
|
{
|
|
from.SendGump( (Gump) obj );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( int i = 0; i < m_Failures.Count; ++i )
|
|
from.SendMessage( ((MessageEntry)m_Failures[i]).ToString() );
|
|
}
|
|
|
|
m_Responses.Clear();
|
|
m_Failures.Clear();
|
|
}
|
|
}
|
|
} |