#W# Initial Commit: Avatars Conquest
This commit is contained in:
commit
5df497787a
7510 changed files with 416048 additions and 0 deletions
458
Scripts/Engines/Spawner/SpawnsOverseerCommand.cs
Normal file
458
Scripts/Engines/Spawner/SpawnsOverseerCommand.cs
Normal file
|
|
@ -0,0 +1,458 @@
|
|||
// Engine r117
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Commands
|
||||
{
|
||||
public class GenOverseer
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
CommandSystem.Register( "GenSeers", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) );
|
||||
CommandSystem.Register( "GenOverseers", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) );
|
||||
CommandSystem.Register( "GenSeer", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) );
|
||||
CommandSystem.Register( "GenOverseer", AccessLevel.Administrator, new CommandEventHandler( GenOverseer_OnCommand ) );
|
||||
}
|
||||
|
||||
[Usage( "GenSeers" )]
|
||||
[Aliases( "GenSeer, GenOverseer and GenOverseers" )]
|
||||
[Description( "Generates Spawns' Overseers around the world." )]
|
||||
private static void GenOverseer_OnCommand( CommandEventArgs e )
|
||||
{
|
||||
m_Mobile = e.Mobile;
|
||||
m_Count = 0;
|
||||
|
||||
m_Mobile.SendMessage( "Generating Spawns' Overseers, please wait." );
|
||||
|
||||
Generate( "Data/Spawns/britannia", Map.Britannia );
|
||||
Generate( "Data/Spawns/underworld", Map.Underworld );
|
||||
Generate( "Data/Spawns/darkness", Map.Darkness );
|
||||
Generate( "Data/Spawns/ocean", Map.Ocean );
|
||||
Generate( "Data/Spawns/grassland", Map.Grassland );
|
||||
|
||||
m_Mobile.SendMessage( "Spawns' Overseers generation complete. {0} seers were generated.", m_Count );
|
||||
}
|
||||
|
||||
public static void Generate( string folder, params Map[] maps )
|
||||
{
|
||||
if ( !Directory.Exists( folder ) )
|
||||
return;
|
||||
|
||||
string[] files = Directory.GetFiles( folder, "*.cfg" );
|
||||
|
||||
for ( int i = 0; i < files.Length; ++i )
|
||||
{
|
||||
ArrayList list = DecorationListSeers.ReadAll( files[i] );
|
||||
|
||||
for ( int j = 0; j < list.Count; ++j )
|
||||
m_Count += ((DecorationListSeers)list[j]).Generate( maps );
|
||||
}
|
||||
}
|
||||
|
||||
private static Mobile m_Mobile;
|
||||
private static int m_Count;
|
||||
}
|
||||
|
||||
public class DecorationListSeers
|
||||
{
|
||||
private Type m_Type;
|
||||
private int m_ItemID;
|
||||
private string[] m_Params;
|
||||
private ArrayList m_Entries;
|
||||
|
||||
public DecorationListSeers()
|
||||
{
|
||||
}
|
||||
|
||||
private static Type typeofStatic = typeof( Static );
|
||||
private static Type typeofLocalizedStatic = typeof( LocalizedStatic );
|
||||
|
||||
public Item Construct()
|
||||
{
|
||||
Item item;
|
||||
|
||||
try
|
||||
{
|
||||
if ( m_Type == typeofStatic )
|
||||
{
|
||||
item = new Static( m_ItemID );
|
||||
}
|
||||
else if ( m_Type == typeofLocalizedStatic )
|
||||
{
|
||||
int labelNumber = 0;
|
||||
|
||||
for ( int i = 0; i < m_Params.Length; ++i )
|
||||
{
|
||||
if ( m_Params[i].StartsWith( "LabelNumber" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
{
|
||||
labelNumber = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
item = new LocalizedStatic( m_ItemID, labelNumber );
|
||||
}
|
||||
else
|
||||
{
|
||||
item = (Item)Activator.CreateInstance( m_Type );
|
||||
}
|
||||
}
|
||||
catch ( Exception e )
|
||||
{
|
||||
throw new Exception( String.Format( "Bad type: {0}", m_Type ), e );
|
||||
}
|
||||
|
||||
if ( item is Server.Items.SpawnsOverseer )
|
||||
{
|
||||
Server.Items.SpawnsOverseer sp = (Server.Items.SpawnsOverseer)item;
|
||||
|
||||
for ( int i = 0; i < m_Params.Length; ++i )
|
||||
{
|
||||
if ( m_Params[i].StartsWith( "Range" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
sp.Range = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
|
||||
}
|
||||
else if ( m_Params[i].StartsWith( "InRangeDelay" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
sp.InRangeDelay = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
|
||||
}
|
||||
else if ( m_Params[i].StartsWith( "OutRangeDelay" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
sp.OutRangeDelay = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
item.Movable = false;
|
||||
|
||||
for ( int i = 0; i < m_Params.Length; ++i )
|
||||
{
|
||||
if ( m_Params[i].StartsWith( "Light" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
item.Light = (LightType)Enum.Parse( typeof( LightType ), m_Params[i].Substring( ++indexOf ), true );
|
||||
}
|
||||
else if ( m_Params[i].StartsWith( "Hue" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
{
|
||||
int hue = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
|
||||
|
||||
if ( item is DyeTub )
|
||||
((DyeTub)item).DyedHue = hue;
|
||||
else
|
||||
item.Hue = hue;
|
||||
}
|
||||
}
|
||||
else if ( m_Params[i].StartsWith( "Name" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
item.Name = m_Params[i].Substring( ++indexOf );
|
||||
}
|
||||
else if ( m_Params[i].StartsWith( "Amount" ) )
|
||||
{
|
||||
int indexOf = m_Params[i].IndexOf( '=' );
|
||||
|
||||
if ( indexOf >= 0 )
|
||||
{
|
||||
// Must supress stackable warnings
|
||||
|
||||
bool wasStackable = item.Stackable;
|
||||
|
||||
item.Stackable = true;
|
||||
item.Amount = Utility.ToInt32( m_Params[i].Substring( ++indexOf ) );
|
||||
item.Stackable = wasStackable;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
private static Queue m_DeleteQueue = new Queue();
|
||||
|
||||
private static bool FindItem( int x, int y, int z, Map map, Item srcItem )
|
||||
{
|
||||
int itemID = srcItem.ItemID;
|
||||
|
||||
bool res = false;
|
||||
|
||||
IPooledEnumerable eable;
|
||||
|
||||
if ( (TileData.ItemTable[itemID & TileData.MaxItemValue].Flags & TileFlag.LightSource) != 0 )
|
||||
{
|
||||
eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 );
|
||||
|
||||
LightType lt = srcItem.Light;
|
||||
string srcName = srcItem.ItemData.Name;
|
||||
|
||||
foreach ( Item item in eable )
|
||||
{
|
||||
if ( item.Z == z )
|
||||
{
|
||||
if ( item.ItemID == itemID )
|
||||
{
|
||||
if ( item.Light != lt )
|
||||
m_DeleteQueue.Enqueue( item );
|
||||
else
|
||||
res = true;
|
||||
}
|
||||
else if ( (item.ItemData.Flags & TileFlag.LightSource) != 0 && item.ItemData.Name == srcName )
|
||||
{
|
||||
m_DeleteQueue.Enqueue( item );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 );
|
||||
|
||||
foreach ( Item item in eable )
|
||||
{
|
||||
if ( item.Z == z && item.ItemID == itemID )
|
||||
{
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
|
||||
while ( m_DeleteQueue.Count > 0 )
|
||||
((Item)m_DeleteQueue.Dequeue()).Delete();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
public int Generate( Map[] maps )
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
Item item = null;
|
||||
|
||||
for ( int i = 0; i < m_Entries.Count; ++i )
|
||||
{
|
||||
DecorationEntrySeers entry = (DecorationEntrySeers)m_Entries[i];
|
||||
Point3D loc = entry.Location;
|
||||
string extra = entry.Extra;
|
||||
|
||||
for ( int j = 0; j < maps.Length; ++j )
|
||||
{
|
||||
if ( item == null )
|
||||
item = Construct();
|
||||
|
||||
if ( item == null )
|
||||
continue;
|
||||
|
||||
if ( FindItem( loc.X, loc.Y, loc.Z, maps[j], item ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
item.MoveToWorld( loc, maps[j] );
|
||||
++count;
|
||||
|
||||
item = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( item != null )
|
||||
item.Delete();
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
public static ArrayList ReadAll( string path )
|
||||
{
|
||||
using ( StreamReader ip = new StreamReader( path ) )
|
||||
{
|
||||
ArrayList list = new ArrayList();
|
||||
|
||||
for ( DecorationListSeers v = Read( ip ); v != null; v = Read( ip ) )
|
||||
list.Add( v );
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
private static string[] m_EmptyParams = new string[0];
|
||||
|
||||
public static DecorationListSeers Read( StreamReader ip )
|
||||
{
|
||||
string line;
|
||||
|
||||
while ( (line = ip.ReadLine()) != null )
|
||||
{
|
||||
line = line.Trim();
|
||||
|
||||
if ( line.Length > 0 && !line.StartsWith( "#" ) )
|
||||
break;
|
||||
}
|
||||
|
||||
if ( string.IsNullOrEmpty( line ) )
|
||||
return null;
|
||||
|
||||
DecorationListSeers list = new DecorationListSeers();
|
||||
|
||||
int indexOf = line.IndexOf( ' ' );
|
||||
|
||||
list.m_Type = ScriptCompiler.FindTypeByName( line.Substring( 0, indexOf++ ), true );
|
||||
|
||||
if ( list.m_Type == null )
|
||||
throw new ArgumentException( String.Format( "Type not found for header: '{0}'", line ) );
|
||||
|
||||
line = line.Substring( indexOf );
|
||||
indexOf = line.IndexOf( '(' );
|
||||
if ( indexOf >= 0 )
|
||||
{
|
||||
list.m_ItemID = Utility.ToInt32( line.Substring( 0, indexOf - 1 ) );
|
||||
|
||||
string parms = line.Substring( ++indexOf );
|
||||
|
||||
if ( line.EndsWith( ")" ) )
|
||||
parms = parms.Substring( 0, parms.Length - 1 );
|
||||
|
||||
list.m_Params = parms.Split( ';' );
|
||||
|
||||
for ( int i = 0; i < list.m_Params.Length; ++i )
|
||||
list.m_Params[i] = list.m_Params[i].Trim();
|
||||
}
|
||||
else
|
||||
{
|
||||
list.m_ItemID = Utility.ToInt32( line );
|
||||
list.m_Params = m_EmptyParams;
|
||||
}
|
||||
|
||||
list.m_Entries = new ArrayList();
|
||||
|
||||
while ( (line = ip.ReadLine()) != null )
|
||||
{
|
||||
line = line.Trim();
|
||||
|
||||
if ( line.Length == 0 )
|
||||
break;
|
||||
|
||||
if ( line.StartsWith( "#" ) )
|
||||
continue;
|
||||
|
||||
list.m_Entries.Add( new DecorationEntrySeers( line ) );
|
||||
}
|
||||
|
||||
return list;
|
||||
}
|
||||
}
|
||||
|
||||
public class DecorationEntrySeers
|
||||
{
|
||||
private Point3D m_Location;
|
||||
private string m_Extra;
|
||||
|
||||
public Point3D Location{ get{ return m_Location; } }
|
||||
public string Extra{ get{ return m_Extra; } }
|
||||
|
||||
public DecorationEntrySeers( string line )
|
||||
{
|
||||
string x, y, z;
|
||||
|
||||
Pop( out x, ref line );
|
||||
Pop( out y, ref line );
|
||||
Pop( out z, ref line );
|
||||
|
||||
m_Location = new Point3D( Utility.ToInt32( x ), Utility.ToInt32( y ), Utility.ToInt32( z ) );
|
||||
m_Extra = line;
|
||||
}
|
||||
|
||||
public void Pop( out string v, ref string line )
|
||||
{
|
||||
int space = line.IndexOf( ' ' );
|
||||
|
||||
if ( space >= 0 )
|
||||
{
|
||||
v = line.Substring( 0, space++ );
|
||||
line = line.Substring( space );
|
||||
}
|
||||
else
|
||||
{
|
||||
v = line;
|
||||
line = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class RemOverseer
|
||||
{
|
||||
public static void Initialize()
|
||||
{
|
||||
CommandSystem.Register( "RemOverseers", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) );
|
||||
CommandSystem.Register( "RemSeers", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) );
|
||||
CommandSystem.Register( "RemOverseer", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) );
|
||||
CommandSystem.Register( "RemSeer", AccessLevel.Administrator, new CommandEventHandler( RemOverseers_OnCommand ) );
|
||||
}
|
||||
|
||||
[Usage( "RemSeers" )]
|
||||
[Aliases( "RemSeer, RemOverseer, RemOverseers" )]
|
||||
[Description( "Remove all Overseers in all facets." )]
|
||||
public static void RemOverseers_OnCommand( CommandEventArgs e )
|
||||
{
|
||||
Mobile from = e.Mobile;
|
||||
World.Broadcast( 0x35, true, "Overseers are being removed, please wait." );
|
||||
DateTime startTime = DateTime.Now;
|
||||
int count = 0;
|
||||
List<Item> itemsremove = new List<Item>();
|
||||
|
||||
foreach ( Item itemremove in World.Items.Values )
|
||||
{
|
||||
if ( itemremove is SpawnsOverseer && itemremove.Parent == null )
|
||||
{
|
||||
itemsremove.Add( itemremove );
|
||||
count +=1;
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( Item itemremove2 in itemsremove )
|
||||
{
|
||||
itemremove2.Delete();
|
||||
}
|
||||
|
||||
foreach ( Item premiums in World.Items.Values )
|
||||
{
|
||||
if ( premiums is PremiumSpawner && premiums.Parent == null && ((PremiumSpawner)premiums).Running == false )
|
||||
{
|
||||
((PremiumSpawner)premiums).Running = true;
|
||||
((PremiumSpawner)premiums).NextSpawn = TimeSpan.FromSeconds( 1 );
|
||||
}
|
||||
}
|
||||
|
||||
DateTime endTime = DateTime.Now;
|
||||
World.Broadcast( 0x35, true, "{0} Overseers has been removed in {1:F1} seconds.", count, (endTime - startTime).TotalSeconds );
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue