BritainKnights/Scripts/Commands/Admin/FullExport.cs

331 lines
No EOL
9.3 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.Commands;
using Server.Targeting;
namespace Server.Misc
{
public class Dumps
{
public const int Version = 200; // Script version (do not change)
public static string FilePath = @".\Export\";
public static void Initialize()
{
CommandSystem.Register("FullExport" , AccessLevel.Administrator, new CommandEventHandler(FullExport_OnCommand));
CommandSystem.Register("FullEx" , AccessLevel.Administrator, new CommandEventHandler(FullExport_OnCommand));
}
[Usage( "FullExport [string filename]" )]
[Aliases( "FullEx" )]
[Description( "Exports statics to a cfg decoration file." )]
public static void FullExport_OnCommand(CommandEventArgs e )
{
if( e.Arguments.Length > 0 )
BeginStaEx(e.Mobile, e.ArgString );
else
e.Mobile.SendMessage("Format: FullExport [string filename]" );
}
public static void BeginStaEx(Mobile mob, string file )
{
Export(mob, file, new Rectangle2D(new Point2D(0, 0), new Point2D(7168, 4096)));
}
private static void Export(Mobile mob, string file, Rectangle2D rect)
{
Map map = mob.Map;
if( !Directory.Exists(FilePath) )
Directory.CreateDirectory(FilePath);
using(StreamWriter op = new StreamWriter(String.Format(@".\Export\{0}.cfg", file)))
{
mob.SendMessage("Exporting statics...");
IPooledEnumerable eable = mob.Map.GetItemsInBounds(rect);
int i = 0;
try
{
foreach(Item item in eable)
{
if( item == null || item.Deleted )
continue;
if( item is AddonComponent && !(item is DartBoard) )
continue;
if ( item.Weight >= 0 && !(item is BaseMulti) )
{
string s = Construct(item);
if( !s.Substring(0, s.IndexOf(' ')+1).Contains("+") ) // Make sure this isn't an InternalItem of a class...
{
op.WriteLine(s);
op.WriteLine("{0} {1} {2}", item.X, item.Y, item.Z);
op.WriteLine();
i++;
}
}
}
mob.SendMessage("You exported {0} statics from this facet.", i);
}
catch(Exception e){ mob.SendMessage(e.Message); }
eable.Free();
}
}
public static List<string[]> List = new List<string[]>();
public static void Add(string s){ Add(s, ""); }
public static void Add(string s1, string s2)
{
List.Add(new string[]{s1, s2});
}
public static string Construct(Item item)
{
string s;
int itemID = item.ItemID;
if( item is BaseAddon )
for( int i = 0; i < ((BaseAddon)item).Components.Count; i++ )
if( ((BaseAddon)item).Components[i].Offset == Point3D.Zero )
{
itemID = ((BaseAddon)item).Components[i].ItemID;
break;
}
if( item is LocalizedStatic )
Add("LabelNumber", ((LocalizedStatic)item).Number.ToString());
else if( item is LocalizedSign )
Add("LabelNumber", ((LocalizedSign)item).Number.ToString());
else if( item is AnkhWest )
Add("Bloodied", (item.ItemID == 0x1D98).ToString());
else if( item is AnkhNorth )
Add("Bloodied", (item.ItemID == 0x1E5D).ToString());
else if( item is WarningItem )
{
Add("Range", ((WarningItem)item).Range.ToString());
if( VS(((WarningItem)item).WarningString) )
Add("WarningString", ((WarningItem)item).WarningString);
Add("WarningNumber", ((WarningItem)item).WarningNumber.ToString());
if( item is HintItem )
{
if( VS(((HintItem)item).HintString) )
Add("HintString", ((HintItem)item).HintString);
Add("HintNumber", ((HintItem)item).HintNumber.ToString());
}
Add("Range", ((WarningItem)item).ResetDelay.ToString());
}
else if( item.GetType().IsSubclassOf(typeof(BaseBeverage)) )
Add("Content", ((BaseBeverage)item).Content.ToString());
else if( item.GetType().IsSubclassOf(typeof(BaseDoor)) )
{
if ( ( item.ItemID == 0x3B1 ) )
{
Add("Facing", "WestSS");
}
else if ( ( item.ItemID == 0x3B2 ) )
{
Add("Facing", "SouthSW");
}
else if ( ( item.ItemID == 1663 ) ||
( item.ItemID == 1743 ) ||
( item.ItemID == 1695 ) ||
( item.ItemID == 1711 ) ||
( item.ItemID == 1759 ) ||
( item.ItemID == 1775 ) ||
( item.ItemID == 2115 ) ||
( item.ItemID == 2160 ) ||
( item.ItemID == 1727 ) ||
( item.ItemID == 846 ) ||
( item.ItemID == 830 ) ||
( item.ItemID == 798 ) ||
( item.ItemID == 242 ) ||
( item.ItemID == 814 ) ||
( item.ItemID == 862 ) ||
( item.ItemID == 2134 ) ||
( item.ItemID == 2094 ) ||
( item.ItemID == 1679 ) ||
( item.ItemID == 8183 ) )
{
Add("Facing", "NorthCCW");
}
else if ( ( item.ItemID == 1661 ) ||
( item.ItemID == 1741 ) ||
( item.ItemID == 1693 ) ||
( item.ItemID == 1709 ) ||
( item.ItemID == 1757 ) ||
( item.ItemID == 1773 ) ||
( item.ItemID == 2113 ) ||
( item.ItemID == 2158 ) ||
( item.ItemID == 1725 ) ||
( item.ItemID == 844 ) ||
( item.ItemID == 828 ) ||
( item.ItemID == 796 ) ||
( item.ItemID == 240 ) ||
( item.ItemID == 812 ) ||
( item.ItemID == 860 ) ||
( item.ItemID == 2132 ) ||
( item.ItemID == 2092 ) ||
( item.ItemID == 1677 ) ||
( item.ItemID == 8181 ) )
{
Add("Facing", "SouthCW");
}
else
{
Add("Facing", GetFacing(((BaseDoor)item).Offset).ToString());
}
}
if( item is BaseLight )
{
if( !((BaseLight)item).Burning )
Add("Unlit", String.Empty);
if( !((BaseLight)item).Protected )
Add("Unprotected", String.Empty);
}
else if( item is Spawner )
{
Spawner sp = (Spawner)item;
for(int i = 0; i < sp.SpawnNames.Count; i++)
if( VS(sp.SpawnNames[i]) )
Add("Spawn", sp.SpawnNames[i]);
// if( sp.MinDelay > TimeSpan.Zero )
Add("MinDelay", sp.MinDelay.ToString());
// if( sp.MaxDelay > TimeSpan.Zero )
Add("MaxDelay", sp.MaxDelay.ToString());
// if( sp.NextSpawn > TimeSpan.Zero )
//Add("NextSpawn", sp.NextSpawn.ToString());
// if( sp.Count > 0 )
Add("Count", sp.Count.ToString());
// if( sp.Team > 0 )
//Add("Team", sp.Team.ToString());
// if( sp.HomeRange > 0 )
Add("HomeRange", sp.HomeRange.ToString());
// if( sp.Running )
Add("Running", sp.Running.ToString());
// if( sp.Group )
Add("Group", sp.Group.ToString());
}
else if( item is Teleporter )
{
Teleporter tp = (Teleporter)item;
if( item is SkillTeleporter )
{
SkillTeleporter st = (SkillTeleporter)item;
Add("Skill", st.Skill.ToString());
// "RequiredFixedPoint" == Required * 0.1 ?
Add("Required", st.Required.ToString());
if( VS(st.MessageString) )
Add("MessageString", st.MessageString);
Add("MessageNumber", st.MessageNumber.ToString());
}
else if( item is KeywordTeleporter )
{
KeywordTeleporter kt = (KeywordTeleporter)item;
if( VS(kt.Substring) )
Add("Substring", kt.Substring);
Add("Keyword", kt.Keyword.ToString());
Add("Range", kt.Range.ToString());
}
Add("PointDest", tp.PointDest.ToString());
if( tp.MapDest != null )
Add("MapDest", tp.MapDest.ToString());
Add("Creatures", tp.Creatures.ToString());
Add("SourceEffect", tp.SourceEffect.ToString());
Add("DestEffect", tp.DestEffect.ToString());
Add("SoundID", tp.SoundID.ToString());
Add("Delay", tp.Delay.ToString());
}
if( item.Light != LightType.ArchedWindowEast )
Add("Light", item.Light.ToString());
if( item.Hue > 0 )
Add("Hue", item.Hue.ToString());
if( VS(item.Name) )
Add("Name", item.Name);
if( item.Amount > 1 )
Add("Amount", item.Amount.ToString());
s = String.Format("{0} {1}", ConstructType(item), itemID);
if( List.Count > 0 )
{
s += " (";
for( int i = 0; i < List.Count; i++ )
{
if( List[i][1] == String.Empty )
s += String.Format("{0}{1}", List[i][0], (i < List.Count-1 ? "; " : String.Empty));
else
s += String.Format("{0}={1}{2}", List[i][0], List[i][1], (i < List.Count-1 ? "; " : String.Empty));
}
s += ")";
}
List.Clear();
return s;
}
public static bool VS(string s)
{
if( s == null || s == String.Empty )
return false;
return true;
}
public static string ConstructType(Item item)
{
string s = item.GetType().ToString();
if( s.LastIndexOf('.') > -1 )
s = s.Remove(0, s.LastIndexOf('.')+1);
return s;
}
public static DoorFacing GetFacing(Point3D p)
{
DoorFacing facing = DoorFacing.WestCW;
for(int i = 0; i < m_Offsets.Length; i++)
{
if( p == m_Offsets[i] )
{
facing = (DoorFacing)i;
break;
}
}
return facing;
}
private static Point3D[] m_Offsets = new Point3D[]
{
new Point3D(-1, 1, 0 ),
new Point3D( 1, 1, 0 ),
new Point3D(-1, 0, 0 ),
new Point3D( 1,-1, 0 ),
new Point3D( 1, 1, 0 ),
new Point3D( 1,-1, 0 ),
new Point3D( 0, 0, 0 ),
new Point3D( 0,-1, 0 ),
new Point3D( 0, 0, 0 ),
new Point3D( 0, 0, 0 ),
new Point3D( 0, 0, 0 ),
new Point3D( 0, 0, 0 )
};
}
}