mirror of
https://github.com/runuo/runuo
synced 2026-08-11 22:26:04 -04:00
- Added the [Message command to send players a page reply style message. - Added a more robust version of the [DesignInsert command, supporting the [Area modifier and conditionals, and only allowing insertion of Static items unless otherwise specified (using [DesignInsert true). Items can also be inserted into multiple house plots at the same time. - Added the ObjectTypes check to the [Serial command implementor, fixing potential server crashes on invalid casts. - Grammar fixes for page gump replies. - Removed the runebook use delay for Core.SA. - Ridgeback, SavageRidgeback and ScaledSwampDragon now override bonding requirements. - Added a PlayerMobile type check to BaseVendor.OnDragDrop to prevent invalid casts. - Players can now return filled bulk orders without having any points in the bulk order crafting skill. - Added ArcaneFocus constructor overloads to make it addable in game.
101 lines
No EOL
2.4 KiB
C#
101 lines
No EOL
2.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using Server;
|
|
using Server.Targeting;
|
|
|
|
namespace Server.Commands.Generic
|
|
{
|
|
public class SerialCommandImplementor : BaseCommandImplementor
|
|
{
|
|
public SerialCommandImplementor()
|
|
{
|
|
Accessors = new string[]{ "Serial" };
|
|
SupportRequirement = CommandSupport.Single;
|
|
AccessLevel = AccessLevel.Counselor;
|
|
Usage = "Serial <serial> <command>";
|
|
Description = "Invokes the command on a single object by serial.";
|
|
}
|
|
|
|
public override void Execute( CommandEventArgs e )
|
|
{
|
|
if ( e.Length >= 2 )
|
|
{
|
|
Serial serial = e.GetInt32( 0 );
|
|
|
|
object obj = null;
|
|
|
|
if ( serial.IsItem )
|
|
obj = World.FindItem( serial );
|
|
else if ( serial.IsMobile )
|
|
obj = World.FindMobile( serial );
|
|
|
|
if ( obj == null )
|
|
{
|
|
e.Mobile.SendMessage( "That is not a valid serial." );
|
|
}
|
|
else
|
|
{
|
|
BaseCommand command = null;
|
|
Commands.TryGetValue( e.GetString( 1 ), out command );
|
|
|
|
if ( command == null )
|
|
{
|
|
e.Mobile.SendMessage( "That is either an invalid command name or one that does not support this modifier." );
|
|
}
|
|
else if ( e.Mobile.AccessLevel < command.AccessLevel )
|
|
{
|
|
e.Mobile.SendMessage( "You do not have access to that command." );
|
|
}
|
|
else
|
|
{
|
|
switch ( command.ObjectTypes )
|
|
{
|
|
case ObjectTypes.Both:
|
|
{
|
|
if ( !(obj is Item) && !(obj is Mobile) )
|
|
{
|
|
e.Mobile.SendMessage( "This command does not work on that." );
|
|
return;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case ObjectTypes.Items:
|
|
{
|
|
if ( !(obj is Item) )
|
|
{
|
|
e.Mobile.SendMessage( "This command only works on items." );
|
|
return;
|
|
}
|
|
|
|
break;
|
|
}
|
|
case ObjectTypes.Mobiles:
|
|
{
|
|
if ( !(obj is Mobile) )
|
|
{
|
|
e.Mobile.SendMessage( "This command only works on mobiles." );
|
|
return;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
string[] oldArgs = e.Arguments;
|
|
string[] args = new string[oldArgs.Length - 2];
|
|
|
|
for ( int i = 0; i < args.Length; ++i )
|
|
args[i] = oldArgs[i + 2];
|
|
|
|
RunCommand( e.Mobile, obj, command, args );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
e.Mobile.SendMessage( "You must supply an object serial and a command name." );
|
|
}
|
|
}
|
|
}
|
|
} |