Anasayfa
UO Sunucular
Forumlar
Profilim
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();
}
}
}

UO-Dev SPONSOR

UO-Dev SPONSOR

Henüz yorum yapılmamış. Yorum yazabilmek için giriş yapmanız gerekir.

Üyelerin oylama ortalaması (10 dışında) :

Henüz Oylanmamış

Oylar: 0