muddesigner/MudEngine/WinPC_Engine/GameScripts/BaseScript.cs
Scionwest_cp f5cf0c1f6a BaseScript now has a method for reporting failed Script.Load() method invocations. It will log the class name and property field if used correctly.
Some classes have some protection in place now in the event the class attempts to load a property that does not exist in the save file.
CommandSystem instances now use their instanced CommandCollection property instead of the static class property.
2012-03-10 16:08:02 -08:00

103 lines
2.9 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Xml.Linq;
using System.IO;
using System.Diagnostics;
using MudEngine.Game;
using MudEngine.DAL;
using MudEngine.Core;
namespace MudEngine.GameScripts
{
public class BaseScript
{
[DefaultValue("Scripted Object")]
public String Name { get; set; }
public String ID { get; set; }
public String Description { get; set; }
public XMLData SaveData { get; protected set; }
public StandardGame Game { get; private set; }
public BaseScript(StandardGame game, String name, String description)
{
this.Name = name;
this.Description = description;
this.Game = game;
this.ID = Guid.NewGuid().ToString();
this.SaveData = new XMLData(this.GetType().Name);
}
public virtual Boolean Save(String filename)
{
return this.Save(filename, false);
}
public virtual Boolean Save(String filename, Boolean ignoreFileWrite)
{
if (File.Exists(filename))
File.Delete(filename);
try
{
this.SaveData = new XMLData(this.GetType().Name);
this.SaveData.AddSaveData("Name", Name);
this.SaveData.AddSaveData("ID", ID);
this.SaveData.AddSaveData("Description", Description);
if (!ignoreFileWrite)
this.SaveData.Save(filename);
}
catch
{
return false;
}
return true;
}
public virtual void Load(String filename)
{
try
{
if (!File.Exists(filename))
return;
this.SaveData.Load(filename);
this.Name = this.SaveData.GetData("Name");
this.ID = this.SaveData.GetData("ID");
this.Description = this.SaveData.GetData("Description");
}
catch (Exception ex)
{
Logger.WriteLine(ex.Message);
return;
}
return;
}
public void LoadFailedMessage(String property)
{
StackTrace trace = new StackTrace();
String callingType = trace.GetFrame(1).GetMethod().ReflectedType.Name;
Logger.WriteLine("Load failed for " + callingType + "." + property);
}
public override string ToString()
{
if (String.IsNullOrEmpty(this.Name))
return "{" + this.GetType().Name + "}:" + "Without Name";
else
return "{" + this.GetType().Name + "}:" + this.Name;
}
}
}