using System;
using System.IO;
using System.Net.Mail;
using Server.Targeting;
namespace Server.Commands.Generic
{
public class GenScriptCommand : BaseCommand
{
public static void Initialize()
{
Server.Commands.CommandSystem.Register( "genscript",
AccessLevel.GameMaster,
new CommandEventHandler( GenScript_OnCommand ) );
}
[Usage( "genscript" )]
[Description( "Generates a script for a targeted item." )]
public static void GenScript_OnCommand( CommandEventArgs e )
{
if ( e.Length != 1 )
{
e.Mobile.SendMessage( "Format: genscript <ClassName>" );
return;
}
e.Mobile.Target = new GenScriptTarget( e.GetString( 0 ) );
e.Mobile.SendMessage( "What item do you want to script?" );
}
#region Nested type: GenScriptTarget
private class GenScriptTarget : Target
{
private readonly string ClassName;
private MemoryStream m_Stream;
public GenScriptTarget( string classname )
: base( 15, false, TargetFlags.None )
{
ClassName = classname;
}
protected override void OnTarget( Mobile from, object targ )
{
Item it = targ as Item;
if ( it == null ) return;
try
{
m_Stream = new MemoryStream();
using ( StreamWriter op = new StreamWriter( m_Stream ) )
{
op.WriteLine( "using System;" );
op.WriteLine( " " );
op.WriteLine( "namespace Server.Items" );
op.WriteLine( "{" );
op.WriteLine( String.Format( " public class {0} : {1}", ClassName, it.GetType().Name ) );
op.WriteLine( " {" );
op.WriteLine( " [Constructable]" );
op.WriteLine( String.Format( " public {0}() : base( {1} )", ClassName, it.ItemID.ToString() ) );
op.WriteLine( " {" );
op.WriteLine( String.Format( " this.Name = \"{0}\";", it.Name ) );
op.WriteLine( String.Format( " this.Hue = \"{0}\";", it.Hue.ToString() ) );
op.WriteLine( " }" );
op.WriteLine( " " );
op.WriteLine( String.Format( " public {0}( Serial serial ) : base( serial )", ClassName ) );
op.WriteLine( " {" );
op.WriteLine( " }" );
op.WriteLine( " " );
op.WriteLine( " public override void Serialize( GenericWriter writer )" );
op.WriteLine( " {" );
op.WriteLine( " base.Serialize( writer );" );
op.WriteLine( " " );
op.WriteLine( " writer.Write( (int) 0 ); // version" );
op.WriteLine( " }" );
op.WriteLine( " " );
op.WriteLine( " public override void Deserialize( GenericReader reader )" );
op.WriteLine( " {" );
op.WriteLine( " base.Deserialize( reader );" );
op.WriteLine( " " );
op.WriteLine( " int version = reader.ReadInt();" );
op.WriteLine( " }" );
op.WriteLine( " }" );
op.WriteLine( "}" );
MailMessage message = new MailMessage( "[email protected]",
"[email protected]",
String.Format( "Skript {0}", ClassName ),
"Blub" );
op.Flush();
m_Stream.Position = 0;
Attachment data = new Attachment( m_Stream, String.Format( "{0}.cs", ClassName ) );
message.Attachments.Add( data );
//Send the message.
SmtpClient client = new SmtpClient( "mymailserver" );
// Add credentials if the SMTP server requires them.
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential( "[email protected]", "xxxxxxxxxxx" );
client.Send( message );
}
from.SendMessage( "Script generated" );
}
catch ( Exception )
{
from.SendMessage( "Scripting failed" );
}
}
}
#endregion
}
}