2012-04-22 05:37:16 +00:00
using System ;
using System.Collections ;
using Server ;
using Server.Network ;
namespace Server.Commands.Generic
{
public class IPAddressCommandImplementor : BaseCommandImplementor
{
public IPAddressCommandImplementor ( )
{
Accessors = new string [ ] { "IPAddress" } ;
SupportRequirement = CommandSupport . IPAddress ;
SupportsConditionals = true ;
AccessLevel = AccessLevel . Administrator ;
Usage = "IPAddress <command> [condition]" ;
Description = "Invokes the command on one mobile from each IP address that is logged in. Optional condition arguments can further restrict the set of objects." ;
}
public override void Compile ( Mobile from , BaseCommand command , ref string [ ] args , ref object obj )
{
try
{
Extensions ext = Extensions . Parse ( from , ref args ) ;
bool items , mobiles ;
2012-05-20 02:35:53 +00:00
if ( ! CheckObjectTypes ( from , command , ext , out items , out mobiles ) )
2012-04-22 05:37:16 +00:00
return ;
if ( ! mobiles ) // sanity check
{
2012-05-20 02:35:53 +00:00
command . LogFailure ( "This command does not support items." ) ;
2012-04-22 05:37:16 +00:00
return ;
}
ArrayList list = new ArrayList ( ) ;
ArrayList addresses = new ArrayList ( ) ;
System . Collections . Generic . List < NetState > states = NetState . Instances ;
for ( int i = 0 ; i < states . Count ; + + i )
{
NetState ns = ( NetState ) states [ i ] ;
Mobile mob = ns . Mobile ;
if ( mob ! = null & & ! addresses . Contains ( ns . Address ) & & ext . IsValid ( mob ) )
{
list . Add ( mob ) ;
addresses . Add ( ns . Address ) ;
}
}
ext . Filter ( list ) ;
obj = list ;
}
catch ( Exception ex )
{
from . SendMessage ( ex . Message ) ;
}
}
}
}