UO-Dev Arama


Yazar: Bilinmiyor
Tarih: 26-08-2009 13:37


Paylaş : Paylaş

Kod:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Targeting;
using Server.Targets;

namespace Server.Commands.Generic
{
public class InterfaceCommand : BaseCommand
{
public InterfaceCommand()
{
AccessLevel = AccessLevel.GameMaster;
Supports = CommandSupport.Complex | CommandSupport.Simple;
Commands = new string[]{ "Interface" };
ObjectTypes = ObjectTypes.Both;
Usage = "Interface [view <properties ...>]";
Description = "Opens an interface to interact with matched objects. Generally used with condition arguments.";
ListOptimized = true;
}

public override void ExecuteList( CommandEventArgs e, ArrayList list )
{
if ( list.Count > 0 )
{
List<string> columns = new List<string>();

columns.Add( "Object" );

if ( e.Length > 0 )
{
int offset = 0;

if ( Insensitive.Equals( e.GetString( 0 ), "view" ) )
++offset;

while ( offset < e.Length )
columns.Add( e.GetString( offset++ ) );
}

e.Mobile.SendGump( new InterfaceGump( e.Mobile, columns.ToArray(), list, 0, null ) );
}
else
{
AddResponse( "No matching objects found." );
}
}
}

public class InterfaceGump : BaseGridGump
{
private Mobile m_From;

private string[] m_Columns;

private ArrayList m_List;
private int m_Page;

private object m_Select;

private const int EntriesPerPage = 15;

public InterfaceGump( Mobile from, string[] columns, ArrayList list, int page, object select ) : base( 30, 30 )
{
m_From = from;

m_Columns = columns;

m_List = list;
m_Page = page;

m_Select = select;

Render();
}

public void Render()
{
AddNewPage();

if ( m_Page > 0 )
AddEntryButton( 20, ArrowLeftID1, ArrowLeftID2, 1, ArrowLeftWidth, ArrowLeftHeight );
else
AddEntryHeader( 20 );

AddEntryHtml( 40 + ( m_Columns.Length * 130 ) - 20 + ( ( m_Columns.Length - 2 ) * OffsetSize ), Center( String.Format( "Page {0} of {1}", m_Page+1, (m_List.Count + EntriesPerPage - 1) / EntriesPerPage ) ) );

if ( (m_Page + 1) * EntriesPerPage < m_List.Count )
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 2, ArrowRightWidth, ArrowRightHeight );
else
AddEntryHeader( 20 );

if ( m_Columns.Length > 1 )
{
AddNewLine();

for ( int i = 0; i < m_Columns.Length; ++i )
{
if ( i > 0 && m_List.Count > 0 )
{
object obj = m_List[0];

if ( obj != null )
{
string failReason = null;
PropertyInfo[] chain = Properties.GetPropertyInfoChain( m_From, obj.GetType(), m_Columns[i], PropertyAccess.Read, ref failReason );

if ( chain != null && chain.Length > 0 )
{
m_Columns[i] = "";

for ( int j = 0; j < chain.Length; ++j )
{
if ( j > 0 )
m_Columns[i] += '.';

m_Columns[i] += chain[j].Name;
}
}
}
}

AddEntryHtml( 130 + ( i == 0 ? 40 : 0 ), m_Columns[i] );
}

AddEntryHeader( 20 );
}

for ( int i = m_Page * EntriesPerPage, line = 0; line < EntriesPerPage && i < m_List.Count; ++i, ++line )
{
AddNewLine();

object obj = m_List[i];
bool isDeleted = false;

if ( obj is Item )
{
Item item = (Item)obj;

if ( !(isDeleted = item.Deleted) )
AddEntryHtml( 40 + 130, item.GetType().Name );
}
else if ( obj is Mobile )
{
Mobile mob = (Mobile)obj;

if ( !(isDeleted = mob.Deleted) )
AddEntryHtml( 40 + 130, mob.Name );
}

if ( isDeleted )
{
AddEntryHtml( 40 + 130, "(deleted)" );

for ( int j = 1; j < m_Columns.Length; ++j )
AddEntryHtml( 130, "---" );

AddEntryHeader( 20 );
}
else
{
for ( int j = 1; j < m_Columns.Length; ++j )
{
object src = obj;

string value;
string failReason = "";

PropertyInfo[] chain = Properties.GetPropertyInfoChain( m_From, src.GetType(), m_Columns[j], PropertyAccess.Read, ref failReason );

if ( chain == null || chain.Length == 0 )
{
value = "---";
}
else
{
PropertyInfo p = Properties.GetPropertyInfo( ref src, chain, ref failReason );

if ( p == null )
value = "---";
else
value = PropertiesGump.ValueToString( src, p );
}

AddEntryHtml( 130, value );
}

bool isSelected = ( m_Select != null && obj == m_Select );

AddEntryButton( 20, ( isSelected ? 9762 : ArrowRightID1 ), ( isSelected ? 9763 : ArrowRightID2 ), 3 + i, ArrowRightWidth, ArrowRightHeight );
}
}

FinishPage();
}

public override void OnResponse( NetState sender, RelayInfo info )
{
switch ( info.ButtonID )
{
case 1:
{
if ( m_Page > 0 )
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page - 1, m_Select ) );

break;
}
case 2:
{
if ( (m_Page + 1) * EntriesPerPage < m_List.Count )
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page + 1, m_Select ) );

break;
}
default:
{
int v = info.ButtonID - 3;

if ( v >= 0 && v < m_List.Count )
{
object obj = m_List[v];

if ( !BaseCommand.IsAccessible( m_From, obj ) )
{
m_From.SendMessage( "That is not accessible." );
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Select ) );
break;
}

if ( obj is Item && !((Item)obj).Deleted )
m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, (Item) obj ) );
else if ( obj is Mobile && !((Mobile)obj).Deleted )
m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, (Mobile) obj ) );
else
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Select ) );
}

break;
}
}
}
}

public class InterfaceItemGump : BaseGridGump
{
private Mobile m_From;

private string[] m_Columns;

private ArrayList m_List;
private int m_Page;

private Item m_Item;

public InterfaceItemGump( Mobile from, string[] columns, ArrayList list, int page, Item item ) : base( 30, 30 )
{
m_From = from;

m_Columns = columns;

m_List = list;
m_Page = page;

m_Item = item;

Render();
}

public void Render()
{
AddNewPage();

AddEntryButton( 20, ArrowLeftID1, ArrowLeftID2, 1, ArrowLeftWidth, ArrowLeftHeight );
AddEntryHtml( 160, m_Item.GetType().Name );
AddEntryHeader( 20 );

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Properties" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 2, ArrowRightWidth, ArrowRightHeight );

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Delete" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 3, ArrowRightWidth, ArrowRightHeight );

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Go there" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 4, ArrowRightWidth, ArrowRightHeight );

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Move to target" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 5, ArrowRightWidth, ArrowRightHeight );

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Bring to pack" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 6, ArrowRightWidth, ArrowRightHeight );

FinishPage();
}

private void InvokeCommand( string ip )
{
CommandSystem.Handle( m_From, String.Format( "{0}{1}", CommandSystem.Prefix, ip ) );
}

public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Item.Deleted )
{
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
return;
}
else if ( !BaseCommand.IsAccessible( m_From, m_Item ) )
{
m_From.SendMessage( "That is no longer accessible." );
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
return;
}

switch ( info.ButtonID )
{
case 0:
case 1:
{
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
break;
}
case 2: // Properties
{
m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
m_From.SendGump( new PropertiesGump( m_From, m_Item ) );
break;
}
case 3: // Delete
{
CommandLogging.WriteLine( m_From, "{0} {1} deleting {2}", m_From.AccessLevel, CommandLogging.Format( m_From ), CommandLogging.Format( m_Item ) );
m_Item.Delete();
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
break;
}
case 4: // Go there
{
m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
InvokeCommand( String.Format( "Go {0}", m_Item.Serial.Value ) );
break;
}
case 5: // Move to target
{
m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
m_From.Target = new MoveTarget( m_Item );
break;
}
case 6: // Bring to pack
{
Mobile owner = m_Item.RootParent as Mobile;

if ( owner != null && (owner.Map != null && owner.Map != Map.Internal) && !BaseCommand.IsAccessible( m_From, owner ) /* !m_From.CanSee( owner )*/ )
{
m_From.SendMessage( "You can not get what you can not see." );
}
else if ( owner != null && (owner.Map == null || owner.Map == Map.Internal) && owner.Hidden && owner.AccessLevel >= m_From.AccessLevel )
{
m_From.SendMessage( "You can not get what you can not see." );
}
else
{
m_From.SendGump( new InterfaceItemGump( m_From, m_Columns, m_List, m_Page, m_Item ) );
m_From.AddToBackpack( m_Item );
}

break;
}
}
}
}

public class InterfaceMobileGump : BaseGridGump
{
private Mobile m_From;

private string[] m_Columns;

private ArrayList m_List;
private int m_Page;

private Mobile m_Mobile;

public InterfaceMobileGump( Mobile from, string[] columns, ArrayList list, int page, Mobile mob )
: base( 30, 30 )
{
m_From = from;

m_Columns = columns;

m_List = list;
m_Page = page;

m_Mobile = mob;

Render();
}

public void Render()
{
AddNewPage();

AddEntryButton( 20, ArrowLeftID1, ArrowLeftID2, 1, ArrowLeftWidth, ArrowLeftHeight );
AddEntryHtml( 160, m_Mobile.Name );
AddEntryHeader( 20 );

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Properties" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 2, ArrowRightWidth, ArrowRightHeight );

if ( !m_Mobile.Player )
{
AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Delete" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 3, ArrowRightWidth, ArrowRightHeight );
}

if ( m_Mobile != m_From )
{
AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Go to there" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 4, ArrowRightWidth, ArrowRightHeight );

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Bring them here" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 5, ArrowRightWidth, ArrowRightHeight );
}

AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Move to target" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 6, ArrowRightWidth, ArrowRightHeight );

if ( m_From == m_Mobile || m_From.AccessLevel > m_Mobile.AccessLevel )
{
AddNewLine();
if ( m_Mobile.Alive )
{
AddEntryHtml( 20 + OffsetSize + 160, "Kill" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 7, ArrowRightWidth, ArrowRightHeight );
}
else
{
AddEntryHtml( 20 + OffsetSize + 160, "Resurrect" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 8, ArrowRightWidth, ArrowRightHeight );
}
}

if ( m_Mobile.NetState != null )
{
AddNewLine();
AddEntryHtml( 20 + OffsetSize + 160, "Client" );
AddEntryButton( 20, ArrowRightID1, ArrowRightID2, 9, ArrowRightWidth, ArrowRightHeight );
}

FinishPage();
}

private void InvokeCommand( string ip )
{
CommandSystem.Handle( m_From, String.Format( "{0}{1}", CommandSystem.Prefix, ip ) );
}

public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Mobile.Deleted )
{
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
return;
}
else if ( !BaseCommand.IsAccessible( m_From, m_Mobile ) )
{
m_From.SendMessage( "That is no longer accessible." );
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
return;
}

switch ( info.ButtonID )
{
case 0:
case 1:
{
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
break;
}
case 2: // Properties
{
m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
m_From.SendGump( new PropertiesGump( m_From, m_Mobile ) );
break;
}
case 3: // Delete
{
if ( !m_Mobile.Player )
{
CommandLogging.WriteLine( m_From, "{0} {1} deleting {2}", m_From.AccessLevel, CommandLogging.Format( m_From ), CommandLogging.Format( m_Mobile ) );
m_Mobile.Delete();
m_From.SendGump( new InterfaceGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
}

break;
}
case 4: // Go there
{
m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
InvokeCommand( String.Format( "Go {0}", m_Mobile.Serial.Value ) );
break;
}
case 5: // Bring them here
{
if ( m_From.Map == null || m_From.Map == Map.Internal )
{
m_From.SendMessage( "You cannot bring that person here." );
}
else
{
m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
m_Mobile.MoveToWorld( m_From.Location, m_From.Map );
}

break;
}
case 6: // Move to target
{
m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );
m_From.Target = new MoveTarget( m_Mobile );
break;
}
case 7: // Kill
{
if ( m_From == m_Mobile || m_From.AccessLevel > m_Mobile.AccessLevel )
m_Mobile.Kill();

m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );

break;
}
case 8: // Res
{
if ( m_From == m_Mobile || m_From.AccessLevel > m_Mobile.AccessLevel )
{
m_Mobile.PlaySound( 0x214 );
m_Mobile.FixedEffect( 0x376A, 10, 16 );

m_Mobile.Resurrect();
}

m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );

break;
}
case 9: // Client
{
m_From.SendGump( new InterfaceMobileGump( m_From, m_Columns, m_List, m_Page, m_Mobile ) );

if ( m_Mobile.NetState != null )
m_From.SendGump( new ClientGump( m_From, m_Mobile.NetState ) );

break;
}
}
}
}
}



Yorumlar

Henüz yorum yapılmamıştır.

Oylamalar

Oylama :
Üyelerin oylama ortalaması (10 dışında) : Henüz Oylanmamış   
Oylar: 0

Benzer Sayfalar

SayfalarYorumlarGönderenTarih


Keywords:

ultima online, RunUO, ultima online download, sphere scripting, role play, uo grafik, second age ultima, uo loop, macroman, pvp server, server kurulumu, sphere, multool, ml mulls, 56b 55r 55i, htmlgumps, client 4x, client edit, sphere release, osi, rp server, sunucular, ghost mouse, inside uo, kingdom reborn, stygian abyss, uo nasıl oynanır, mondain's legacy, age of shadows, world build, grandmaster, ultima online pvp, player dosyaları, ultima online indir, frp game, RunUO 1.0.0, razor, uo rice, hue editör, skill tools, ultima online patch, axis, world build, verdata, verdata patcher, map editör, gump editör, mul patcher, aos mulls, scriptler, anim edit, anim publish, hues mul, hosting vps, event dialog, account sistemi, skill gain, static yapımı,