Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,368 @@
#region AuthorHeader
//
// FindMobs version 1.5 - utilities version 2.0, by Xanthos
// based on the GoByName utility by unknown
//
#endregion AuthorHeaderusing System;
using System;
using System.Collections;
using Server;
using Server.Network;
using Server.Mobiles;
using Server.Accounting;
using Server.Gumps;
using Server.Commands;
namespace Xanthos.Utilities
{
public class FindMobsGump : Gump
{
public const string kCommandName = "FindMobs";
public const int kGumpOffsetX = 30;
public const int kGumpOffsetY = 30;
public const int kTextHue = 0;
public const int kTextOffsetX = 2;
public const int kButtonWidth = 20;
public const int kOffsetSize = 1;
public const int kEntryHeight = 20;
public const int kBorderSize = 10;
public const int kOffsetGumpID = 0x0052; // Pure black
public const int kHeaderGumpID = 0x0E14; // Dark navy blue, textured
public const int kEntryGumpID = 0x0BBC; // Light offwhite, textured
public const int kBackGumpID = 0x13BE; // Gray slate/stoney
public const int kButtonGumpID = 0x0E14; // Dark navy blue, textured
public const int kGoOffsetX = 2;
public const int kGoOffsetY = 2;
public const int kGoButtonID1 = 0x15E1; // Arrow pointing right
public const int kGoButtonID2 = 0x15E5; // " pressed
public const int kBringOffsetX = 1;
public const int kBringOffsetY = 1;
public const int kBringButtonID1 = 0x15E3; // 'X' Button
public const int kBringButtonID2 = 0x15E7; // " pressed
public const int kPrevWidth = 20;
public const int kPrevOffsetX = 2;
public const int kPrevOffsetY = 2;
public const int kPrevButtonID1 = 0x15E3; // Arrow pointing left
public const int kPrevButtonID2 = 0x15E7; // " pressed
public const int kNextWidth = 20;
public const int kNextOffsetX = 2;
public const int kNextOffsetY = 2;
public const int kNextButtonID1 = 0x15E1; // Arrow pointing right
public const int kNextButtonID2 = 0x15E5; // " pressed
private const int kMiniGumpButtonID = 7107;
private const int kGreenHue = 0x40;
private const int kRedHue = 0x20;
private const int kPrevLabelOffsetX = kPrevWidth + 1;
private const int kPrevLabelOffsetY = 0;
private const int kNextLabelOffsetX = -29;
private const int kNextLabelOffsetY = 0;
private const int kEntryWidth = 500;
private const int kEntryCount = 15;
private const int kTotalWidth = kOffsetSize + kEntryWidth + kOffsetSize + (kButtonWidth * 2) + kOffsetSize;
private const int kTotalHeight = kOffsetSize + ((kEntryHeight + kOffsetSize) * (kEntryCount + 2));
private const int kBackWidth = kBorderSize + kTotalWidth + kBorderSize;
private const int kBackHeight = kBorderSize + kTotalHeight + kBorderSize;
private static bool s_PrevLabel = false;
private static bool s_NextLabel = false;
private string m_SearchValue;
private int m_Options;
private Mobile m_Owner;
private ArrayList m_Names;
private int m_Page;
private string m_Args;
private bool m_MiniGump;
public static void Initialize()
{
CommandSystem.Register( kCommandName, AccessLevel.GameMaster, new CommandEventHandler( Find_OnCommand ) );
}
[Usage( kCommandName + " [-i] [-p|-t] <name>" )]
[Description( "Finds all mobiles by name, -p for players, -t searches by mobiles type name, -i specifies the internal map" )]
private static void Find_OnCommand( CommandEventArgs e )
{
string str;
try
{
int options = GetOptions( e, out str );
e.Mobile.SendGump( new FindMobsGump( e.Mobile, str, options ) );
}
catch
{
Misc.SendCommandDetails( e.Mobile, kCommandName );
}
}
public enum FindOptions
{
None = 0x00,
Player = 0x01,
Internal = 0x02,
Type = 0x04,
}
private static int GetOptions( CommandEventArgs e, out string searchValue )
{
int options = (int)FindOptions.None;
searchValue = "";
for ( int i = 0; i < e.Length; i++ )
{
string str = e.GetString( i ).ToLower();
if ( str.Equals( "-?" ) )
throw new Exception();
else if ( str.Equals( "-i" ) )
options |= (int)FindOptions.Internal;
else if ( str.Equals( "-p" ) )
{
options |= (int)FindOptions.Player;
options &= ~( (int)FindOptions.Type ); // mutually exclusive, turn off the bit
}
else if ( str.Equals( "-t" ) )
{
options |= (int)FindOptions.Type;
options &= ~( (int)FindOptions.Player ); // mutually exclusive, turn off the bit
}
else
searchValue = str;
}
return options;
}
public FindMobsGump( Mobile owner, string searchValue, int options ) : this( owner, BuildList( owner, searchValue, options ), 0, searchValue, options, false )
{
m_SearchValue = searchValue;
m_Options = options;
m_MiniGump = false;
GenerateArgString();
}
public FindMobsGump( Mobile owner, ArrayList list, int page, string searchValue, int options, bool miniGump ) : base( kGumpOffsetX, kGumpOffsetY )
{
m_Owner = owner;
m_Names = list;
m_SearchValue = searchValue;
m_Options = options;
m_MiniGump = miniGump;
owner.CloseGump( typeof( FindMobsGump ) );
GenerateArgString();
Initialize( page );
}
public static ArrayList BuildList( Mobile owner, string searchValue, int options )
{
ArrayList list = new ArrayList();
bool searchInternal = ((options & (int)FindOptions.Internal) == (int)FindOptions.Internal);
bool findPlayers = ((options & (int)FindOptions.Player) == (int)FindOptions.Player);
bool findTypes = ((options & (int)FindOptions.Type) == (int)FindOptions.Type);
foreach ( Mobile mob in World.Mobiles.Values )
{
if ( searchInternal != (Map.Internal == mob.Map) )
continue;
else if ( findPlayers && !(mob is PlayerMobile) )
continue;
if ( findTypes && searchValue != "" && mob.GetType().Name.ToLower().StartsWith( searchValue ) )
list.Add( mob );
if ( !findTypes && (searchValue == "" || mob.Name.ToLower().StartsWith( searchValue )) )
list.Add( mob );
}
return list;
}
private void GenerateArgString()
{
bool m_SearchInternal = ( ( m_Options & (int)FindOptions.Internal ) == (int)FindOptions.Internal );
bool m_FindPlayers = ( ( m_Options & (int)FindOptions.Player ) == (int)FindOptions.Player );
bool m_FindTypes = ( ( m_Options & (int)FindOptions.Type ) == (int)FindOptions.Type );
if ( m_SearchValue == "" )
m_Args = "all ";
m_Args += m_FindPlayers ? "players" : "mobiles";
m_Args += m_SearchInternal ? " (internal)" : "";
if ( m_SearchValue != "" )
{
m_Args += m_FindTypes ? " of type " : " named ";
m_Args += m_SearchValue;
}
}
public void Initialize( int page )
{
m_Page = page;
int count = m_Names.Count - ( page * kEntryCount );
if ( count < 0 )
count = 0;
else if ( count > kEntryCount )
count = kEntryCount;
if ( m_MiniGump )
{
AddPage( 0 );
AddBackground( 0, 0, 40, 40, kBackGumpID );
AddItem( 10, 10, kMiniGumpButtonID, kGreenHue );
}
else
{
int kTotalHeight = kOffsetSize + ( ( kEntryHeight + kOffsetSize ) * ( count + 2 ) );
int x = kBorderSize + kOffsetSize;
int y = kBorderSize + kOffsetSize;
int emptyWidth = kEntryWidth;
AddPage( 0 );
AddBackground( 0, 0, kBackWidth, kBorderSize + kTotalHeight + kBorderSize, kBackGumpID );
AddImageTiled( kBorderSize, kBorderSize, kTotalWidth, kTotalHeight, kOffsetGumpID );
AddImageTiled( x, y, emptyWidth, kEntryHeight, kEntryGumpID );
AddLabel( x + kTextOffsetX, y, kTextHue, string.Format( "Page {0} of {1} ({2}) - Matches for: {3}", page + 1, ( m_Names.Count + kEntryCount - 1 ) / kEntryCount, m_Names.Count, m_Args ) );
x += emptyWidth + kOffsetSize;
AddImageTiled( x, y, kPrevWidth, kEntryHeight, kHeaderGumpID );
if ( page > 0 )
{
AddButton( x + kPrevOffsetX, y + kPrevOffsetY, kPrevButtonID1, kPrevButtonID2, 1, GumpButtonType.Reply, 0 );
if ( s_PrevLabel )
AddLabel( x + kPrevLabelOffsetX, y + kPrevLabelOffsetY, kTextHue, "Previous" );
}
x += kPrevWidth + kOffsetSize;
AddImageTiled( x, y, kNextWidth, kEntryHeight, kHeaderGumpID );
if ( ( page + 1 ) * kEntryCount < m_Names.Count )
{
AddButton( x + kNextOffsetX, y + kNextOffsetY, kNextButtonID1, kNextButtonID2, 2, GumpButtonType.Reply, 1 );
if ( s_NextLabel )
AddLabel( x + kNextLabelOffsetX, y + kNextLabelOffsetY, kTextHue, "Next" );
}
for ( int i = 0, index = page * kEntryCount; i < kEntryCount && index < m_Names.Count; ++i, ++index )
{
x = kBorderSize + kOffsetSize;
y += kEntryHeight + kOffsetSize;
Mobile item = (Mobile)m_Names[ index ];
AddImageTiled( x, y, kEntryWidth, kEntryHeight, kEntryGumpID );
AddLabelCropped( x + kTextOffsetX, y, kEntryWidth - kTextOffsetX, kEntryHeight, 0x58,
item.Deleted ? "(deleted)" : ( string.Format( "{0} : {1} : {2} {3}", item.Name, item is PlayerMobile ? ( (Account)item.Account ).Username : "Null", item.Map, item.Location ) ) );
if ( !item.Deleted )
{
x += kEntryWidth + kOffsetSize;
AddImageTiled( x, y, kButtonWidth, kEntryHeight, kButtonGumpID );
AddButton( x + kBringOffsetX, y + kBringOffsetY, kBringButtonID1, kBringButtonID2, i + 4, GumpButtonType.Reply, 0 );
x += kButtonWidth + kOffsetSize;
AddImageTiled( x, y, kButtonWidth, kEntryHeight, kButtonGumpID );
AddButton( x + kGoOffsetX, y + kGoOffsetY, kGoButtonID1, kGoButtonID2, i + 1004, GumpButtonType.Reply, 0 );
}
}
// AddItem( kBackWidth - 55, ((kEntryHeight + kOffsetSize) * (count + 1)) + 15, kMiniGumpButtonID, kRedHue );
// AddButton( kBackWidth - 55, ( ( kEntryHeight + kOffsetSize ) * ( count + 1 ) ) + 15, 0, 0, 3, GumpButtonType.Reply, 0 );
}
}
public override void OnResponse( NetState state, RelayInfo info )
{
Mobile from = state.Mobile;
switch ( info.ButtonID )
{
case 0: // Close
{
return;
}
case 1: // Previous
{
if ( m_Page > 0 )
from.SendGump( new FindMobsGump( from, m_Names, m_Page - 1, m_SearchValue, m_Options, false ) );
break;
}
case 2: // Next
{
if ( ( m_Page + 1 ) * kEntryCount < m_Names.Count )
from.SendGump( new FindMobsGump( from, m_Names, m_Page + 1, m_SearchValue, m_Options, false ) );
break;
}
case 3: // MiniGump toggle
{
from.SendGump( new FindMobsGump( from, m_Names, m_Page, m_SearchValue, m_Options, !m_MiniGump ) );
break;
}
default:
{
int index = (m_Page * kEntryCount) + (info.ButtonID - 4);
bool bringing = index < 1000;
if ( !bringing )
index -= 1000;
if ( index >= 0 && index < m_Names.Count )
{
Mobile sought = (Mobile)m_Names[index];
if ( sought.Deleted )
{
from.SendMessage( "That mobile no longer exists." );
from.SendGump( new FindMobsGump( from, m_Names, m_Page, m_SearchValue, m_Options, false ) );
}
else if ( bringing )
{
from.SendMessage( "Bringing {0} to you.", sought.Name );
sought.Map = from.Map;
sought.SetLocation( from.Location, true );
from.SendGump( new FindMobsGump( from, m_Names, m_Page, m_SearchValue, m_Options, false ) );
}
else
{
from.SendMessage( "Going to {0}.", sought.Name );
if ( sought.Map == Map.Internal)
{
from.Map = sought.LogoutMap;
}
else
{
from.Map = sought.Map;
}
from.SetLocation( sought.Location, true );
from.SendGump( new FindMobsGump( from, m_Names, m_Page, m_SearchValue, m_Options, false ) );
}
}
break;
}
}
}
}
}