Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
@@ -0,0 +1,279 @@
|
||||
using System;
|
||||
using Server;
|
||||
using System.IO;
|
||||
using System.Collections;
|
||||
using Server.Multis;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.XmlSpawner2
|
||||
{
|
||||
public class XmlSpawnerAddon : BaseAddon
|
||||
{
|
||||
|
||||
public override bool ShareHue { get { return false; } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public virtual int PartialVisibility
|
||||
{
|
||||
get
|
||||
{
|
||||
int nvisible = 0;
|
||||
// figure out what percentage of components is visible and return that value
|
||||
// go through the components
|
||||
for (int i = 0; i < Components.Count; i++)
|
||||
{
|
||||
if (Components[i].Visible) nvisible++;
|
||||
}
|
||||
|
||||
return (int)(100.0 * nvisible / Components.Count + 0.5);
|
||||
}
|
||||
set
|
||||
{
|
||||
if (Components == null || Components.Count < 1) return;
|
||||
|
||||
// assign visibility to the components based upon the percentage value
|
||||
int nvisible = value * (Components.Count - 1) / 100;
|
||||
|
||||
// go through the components and assign visibility to the specified percentage
|
||||
// starting at the beginning of the component list
|
||||
for (int i = 0; i < Components.Count; i++)
|
||||
{
|
||||
Components[i].Visible = (i < nvisible);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// create an addon with the static components described in the multi.txt file
|
||||
public static XmlSpawnerAddon ReadMultiFile(string filename, out string status_str)
|
||||
{
|
||||
status_str = null;
|
||||
|
||||
if (filename == null) return null;
|
||||
|
||||
XmlSpawnerAddon newaddon = null;
|
||||
|
||||
// look for the file in the default spawner locations
|
||||
string dirname = XmlSpawner.LocateFile(filename);
|
||||
|
||||
if (System.IO.File.Exists(dirname))
|
||||
{
|
||||
int ncomponents = 0;
|
||||
|
||||
newaddon = new XmlSpawnerAddon();
|
||||
|
||||
try
|
||||
{
|
||||
ncomponents = LoadAddonFromMulti(newaddon, dirname, out status_str);
|
||||
}
|
||||
catch
|
||||
{
|
||||
newaddon.Delete();
|
||||
status_str = "Bad Multi file : " + filename;
|
||||
return null;
|
||||
}
|
||||
|
||||
if (ncomponents == 0)
|
||||
{
|
||||
newaddon.Delete();
|
||||
status_str += " : " + filename;
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
status_str = "No such file : " + filename;
|
||||
}
|
||||
|
||||
return newaddon;
|
||||
}
|
||||
|
||||
// adds components from a multi.txt file to an existing addon
|
||||
public static int LoadAddonFromMulti(XmlSpawnerAddon newaddon, string filename, out string status_str)
|
||||
{
|
||||
status_str = null;
|
||||
|
||||
if (filename == null)
|
||||
{
|
||||
status_str = "Invalid filename";
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (newaddon == null)
|
||||
{
|
||||
status_str = "Invalid addon";
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool badformat = false;
|
||||
int ncomponents = 0;
|
||||
|
||||
if (System.IO.File.Exists(filename))
|
||||
{
|
||||
|
||||
using (StreamReader sr = new StreamReader(filename))
|
||||
{
|
||||
string line;
|
||||
int linenumber = 0;
|
||||
|
||||
// Read and process lines from the file until the end of the file is reached.
|
||||
// Individual lines have the format of
|
||||
// itemid x y z visible [hue] ; attachment[,args]
|
||||
// where visible is a 0/1 and hue can be optionally specified for individual itemid entries.
|
||||
while ((line = sr.ReadLine()) != null)
|
||||
{
|
||||
linenumber++;
|
||||
|
||||
// process the line
|
||||
if (line.Length == 0) continue;
|
||||
|
||||
// first parse out the component specification from any optional attachment specifications
|
||||
|
||||
string[] specs = line.Split(';');
|
||||
|
||||
// the component spec will always be first
|
||||
|
||||
if (specs == null || specs.Length < 1) continue;
|
||||
|
||||
string[] args = specs[0].Trim().Split(' ');
|
||||
|
||||
AddonComponent newcomponent = null;
|
||||
|
||||
if (args != null && args.Length >= 5)
|
||||
{
|
||||
|
||||
int itemid = -1;
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
int z = 0;
|
||||
int visible = 0;
|
||||
int hue = -1;
|
||||
|
||||
try
|
||||
{
|
||||
itemid = int.Parse(args[0]);
|
||||
x = int.Parse(args[1]);
|
||||
y = int.Parse(args[2]);
|
||||
z = int.Parse(args[3]);
|
||||
visible = int.Parse(args[4]);
|
||||
|
||||
// handle the optional fields that are not part of the original multi.txt specification
|
||||
if (args.Length > 5)
|
||||
{
|
||||
hue = int.Parse(args[5]);
|
||||
}
|
||||
}
|
||||
catch { badformat = true; }
|
||||
|
||||
if (itemid < 0 || badformat)
|
||||
{
|
||||
status_str = String.Format("Error line {0}", linenumber);
|
||||
break;
|
||||
}
|
||||
|
||||
// create the new component
|
||||
newcomponent = new AddonComponent(itemid);
|
||||
|
||||
// set the properties according to the specification
|
||||
newcomponent.Visible = (visible == 1);
|
||||
|
||||
if (hue >= 0)
|
||||
newcomponent.Hue = hue;
|
||||
|
||||
// add it to the addon
|
||||
newaddon.AddComponent(newcomponent, x, y, z);
|
||||
|
||||
ncomponents++;
|
||||
|
||||
}
|
||||
|
||||
// if a valid component was added, then check to see if any additional attachment specifications need to be processed
|
||||
if (newcomponent != null && specs.Length > 1)
|
||||
{
|
||||
for (int j = 1; j < specs.Length; j++)
|
||||
{
|
||||
|
||||
if (specs[j] == null) continue;
|
||||
|
||||
string attachstring = specs[j].Trim();
|
||||
|
||||
Type type = null;
|
||||
try
|
||||
{
|
||||
type = SpawnerType.GetType(BaseXmlSpawner.ParseObjectType(attachstring));
|
||||
}
|
||||
catch { }
|
||||
|
||||
// if so then create it
|
||||
if (type != null && type.IsSubclassOf(typeof(XmlAttachment)))
|
||||
{
|
||||
object newo = XmlSpawner.CreateObject(type, attachstring, false, true);
|
||||
if (newo is XmlAttachment)
|
||||
{
|
||||
// add the attachment to the target
|
||||
XmlAttach.AttachTo(newcomponent, (XmlAttachment)newo);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sr.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
status_str = "No such file : " + filename;
|
||||
}
|
||||
|
||||
if (badformat)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ncomponents;
|
||||
}
|
||||
}
|
||||
|
||||
public override BaseAddonDeed Deed
|
||||
{
|
||||
get
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public XmlSpawnerAddon()
|
||||
{
|
||||
}
|
||||
|
||||
public XmlSpawnerAddon(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(1); // Version
|
||||
// version 1
|
||||
writer.Write(PartialVisibility);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
PartialVisibility = reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user