diff --git a/MudEngine/WinPC_Engine/Core/Interfaces/ISavable.cs b/MudEngine/WinPC_Engine/Core/Interfaces/ISavable.cs index d669eb8..d8e3350 100644 --- a/MudEngine/WinPC_Engine/Core/Interfaces/ISavable.cs +++ b/MudEngine/WinPC_Engine/Core/Interfaces/ISavable.cs @@ -19,9 +19,9 @@ namespace MudEngine.Core.Interfaces /// Save method for dumping the object to physical file. /// /// - Boolean Save(String filename); + Boolean Save(); - Boolean Save(String filename, Boolean ignoreFileWrite); + Boolean Save(Boolean ignoreFileWrite); /// /// Load method for retrieving saved data from file. diff --git a/MudEngine/WinPC_Engine/DAL/DataPaths.cs b/MudEngine/WinPC_Engine/DAL/DataPaths.cs index 6145087..eba9d16 100644 --- a/MudEngine/WinPC_Engine/DAL/DataPaths.cs +++ b/MudEngine/WinPC_Engine/DAL/DataPaths.cs @@ -48,7 +48,7 @@ namespace MudEngine.DAL this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Environments"), DataTypes.Environments); this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Equipment"), DataTypes.Equipment); this.SetAbsolutePath(Path.Combine(this._InstallRoot, "Players"), DataTypes.Players); - this.SetAbsolutePath(Path.Combine(this._InstallRoot, "GameScripts"), DataTypes.Scripts); + this.SetAbsolutePath(Path.Combine(this.GetInstallPath(), "GameScripts"), DataTypes.Scripts); } public void SetAbsolutePath(String path, DataTypes objectType) diff --git a/MudEngine/WinPC_Engine/Game/Characters/StandardCharacter.cs b/MudEngine/WinPC_Engine/Game/Characters/StandardCharacter.cs index 06dc9f4..7eb3905 100644 --- a/MudEngine/WinPC_Engine/Game/Characters/StandardCharacter.cs +++ b/MudEngine/WinPC_Engine/Game/Characters/StandardCharacter.cs @@ -27,7 +27,7 @@ namespace MudEngine.Game.Characters /// Gets a reference to the currently active game. /// - public string Filename + public new string Filename { get { @@ -138,20 +138,20 @@ namespace MudEngine.Game.Characters this.Commands = null; } - public override bool Save(String filename) + public override bool Save() { - return this.Save(filename, true); + return this.Save(true); } - public override bool Save(String filename, Boolean verbose) + public override bool Save(Boolean verbose) { - base.Save(filename, true); + base.Save(true); SaveData.AddSaveData("Immovable", Immovable.ToString()); SaveData.AddSaveData("Password", Password); SaveData.AddSaveData("Role", this.Role.ToString()); - if (this.SaveData.Save(filename)) + if (this.SaveData.Save(this.Filename)) { if (!verbose) this.SendMessage("Save completed."); @@ -236,7 +236,7 @@ namespace MudEngine.Game.Characters public void Disconnect() { - this.Save(this.Filename); + this.Save(); //Purge all of this characters commands. this.Destroy(); diff --git a/MudEngine/WinPC_Engine/Game/Environment/Environment.cs b/MudEngine/WinPC_Engine/Game/Environment/Environment.cs index 8f1e9a9..19d4c35 100644 --- a/MudEngine/WinPC_Engine/Game/Environment/Environment.cs +++ b/MudEngine/WinPC_Engine/Game/Environment/Environment.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.IO; using MudEngine.Core; using MudEngine.Core.Interfaces; @@ -11,12 +12,19 @@ using MudEngine.GameScripts; namespace MudEngine.Game.Environment { - public class Environment : BaseScript, IGameComponent, ISavable, IUpdatable + public abstract class Environment : BaseScript, IGameComponent, ISavable, IUpdatable { /// /// Gets or Sets the filename for this environment when it is saved. /// - public string Filename { get; set; } + public new string Filename + { + get + { + String path = Path.Combine(this.Game.SavePaths.GetPath(DAL.DataTypes.Environments), this.Name + this.Game.SavePaths.GetExtension(DAL.DataTypes.Environments)); + return path; + } + } /// /// Gets or Sets if this object is enabled. When disabled, characters can not traverse it. @@ -53,16 +61,21 @@ namespace MudEngine.Game.Environment this.Enabled = false; } - public override bool Save(String filename, Boolean ignoreFileWrite) + public override bool Save() { - base.Save(filename, true); + return this.Save(false); + } - SaveData.AddSaveData("Filename", this.Filename); + public override bool Save(Boolean ignoreFileWrite) + { + base.Save(true); + + //SaveData.AddSaveData("Filename", this.Filename); SaveData.AddSaveData("Enabled", this.Enabled.ToString()); SaveData.AddSaveData("RequiredRole", this.RequiredRole.ToString()); if (!ignoreFileWrite) - return this.SaveData.Save(filename); + return this.SaveData.Save(this.Filename); else return true; } @@ -70,10 +83,10 @@ namespace MudEngine.Game.Environment public override void Load(string filename) { base.Load(filename); - + /* try { this.Filename = this.SaveData.GetData("Filename"); } catch { LoadFailedMessage("Filename"); } - + */ try { this.Enabled = Convert.ToBoolean(this.SaveData.GetData("Enabled")); } catch { this.LoadFailedMessage("Enabled");} diff --git a/MudEngine/WinPC_Engine/Game/Environment/Realm.cs b/MudEngine/WinPC_Engine/Game/Environment/Realm.cs index 9c1d5ea..9c90892 100644 --- a/MudEngine/WinPC_Engine/Game/Environment/Realm.cs +++ b/MudEngine/WinPC_Engine/Game/Environment/Realm.cs @@ -13,6 +13,15 @@ namespace MudEngine.Game.Environment { public class Realm : Environment { + public new String Filename + { + get + { + String path = Path.Combine(this.Game.SavePaths.GetPath(DAL.DataTypes.Environments), this.Name, this.Name + "." + this.GetType().Name); + return path; + } + } + public Realm(StandardGame game, String name, String description) : base(game, name, description) { this._ZoneCollection = new List(); @@ -35,6 +44,22 @@ namespace MudEngine.Game.Environment return v.First(); } + public override bool Save(Boolean ignoreFileWrite) + { + if (!base.Save(true)) + return false; + + foreach (Zone zone in this._ZoneCollection) + { + this.SaveData.AddSaveData("Zone", zone.Name); + zone.Save(); + } + + this.SaveData.Save(this.Filename); + + return true; + } + private List _ZoneCollection; } } diff --git a/MudEngine/WinPC_Engine/Game/Environment/Zone.cs b/MudEngine/WinPC_Engine/Game/Environment/Zone.cs index 6666845..dd61ee2 100644 --- a/MudEngine/WinPC_Engine/Game/Environment/Zone.cs +++ b/MudEngine/WinPC_Engine/Game/Environment/Zone.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.IO; using MudEngine.Core.Interfaces; using MudEngine.GameScripts; @@ -12,6 +13,15 @@ namespace MudEngine.Game.Environment { public class Zone : Environment { + public new String Filename + { + get + { + String path = Path.Combine(this.Game.SavePaths.GetPath(DAL.DataTypes.Environments), this.Realm.Name, "Zones", this.Name + "." + this.GetType().Name); + return path; + } + } + /// /// Gets or Sets the what stats /// @@ -26,6 +36,16 @@ namespace MudEngine.Game.Environment this._RoomCollection = new List(); } + public override bool Save() + { + if (!base.Save(true)) + return false; + + this.SaveData.AddSaveData("Safe", this.Safe.ToString()); + this.SaveData.Save(this.Filename); + return true; + } + public Room CreateRoom(String name, String description) { Room room = new Room(this.Game, name, description, this); diff --git a/MudEngine/WinPC_Engine/Game/StandardGame.cs b/MudEngine/WinPC_Engine/Game/StandardGame.cs index e219aa4..9766260 100644 --- a/MudEngine/WinPC_Engine/Game/StandardGame.cs +++ b/MudEngine/WinPC_Engine/Game/StandardGame.cs @@ -230,6 +230,8 @@ namespace MudEngine.Game if (this.Server.Enabled) this.Enabled = true; + this.World.Save(); + return this.Enabled; } diff --git a/MudEngine/WinPC_Engine/Game/World.cs b/MudEngine/WinPC_Engine/Game/World.cs index 063204b..ad83b1e 100644 --- a/MudEngine/WinPC_Engine/Game/World.cs +++ b/MudEngine/WinPC_Engine/Game/World.cs @@ -49,6 +49,10 @@ namespace MudEngine.Game public void Save() { + foreach (Realm realm in this._RealmCollection) + { + realm.Save(); + } } public void Load() diff --git a/MudEngine/WinPC_Engine/GameScripts/BaseCommands/CreatePlayer.cs b/MudEngine/WinPC_Engine/GameScripts/BaseCommands/CreatePlayer.cs index 2aa262d..b3d10c8 100644 --- a/MudEngine/WinPC_Engine/GameScripts/BaseCommands/CreatePlayer.cs +++ b/MudEngine/WinPC_Engine/GameScripts/BaseCommands/CreatePlayer.cs @@ -86,7 +86,7 @@ namespace MudEngine.GameScripts.Commands character.Move(game.World.StartLocation); //TODO: Create a class and setup Stats. - character.Save(character.Filename, false); + character.Save(false); } catch (Exception ex) { diff --git a/MudEngine/WinPC_Engine/GameScripts/BaseScript.cs b/MudEngine/WinPC_Engine/GameScripts/BaseScript.cs index ec5dc85..404dd5b 100644 --- a/MudEngine/WinPC_Engine/GameScripts/BaseScript.cs +++ b/MudEngine/WinPC_Engine/GameScripts/BaseScript.cs @@ -18,6 +18,14 @@ namespace MudEngine.GameScripts [DefaultValue("Scripted Object")] public String Name { get; set; } + public String Filename + { + get + { + return Path.Combine(this.Game.SavePaths.GetPath(DataTypes.Root), this.Name + "." + this.Game.SavePaths.GetExtension(DataTypes.Root)); + } + } + public String ID { get; set; } public String Description { get; set; } @@ -37,15 +45,15 @@ namespace MudEngine.GameScripts this.SaveData = new XMLData(this.GetType().Name); } - public virtual Boolean Save(String filename) + public virtual Boolean Save() { - return this.Save(filename, false); + return this.Save(false); } - public virtual Boolean Save(String filename, Boolean ignoreFileWrite) + public virtual Boolean Save(Boolean ignoreFileWrite) { - if (File.Exists(filename)) - File.Delete(filename); + if (File.Exists(this.Filename)) + File.Delete(this.Filename); try { @@ -55,7 +63,7 @@ namespace MudEngine.GameScripts this.SaveData.AddSaveData("Description", Description); if (!ignoreFileWrite) - this.SaveData.Save(filename); + this.SaveData.Save(this.Filename); } catch { diff --git a/MudEngine/WinPC_Engine/GameScripts/SampleGame.cs b/MudEngine/WinPC_Engine/GameScripts/SampleGame.cs index 1fa1b60..8c409e2 100644 --- a/MudEngine/WinPC_Engine/GameScripts/SampleGame.cs +++ b/MudEngine/WinPC_Engine/GameScripts/SampleGame.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.Linq; using System.Text; -using MudEngine.Game; using MudEngine.DAL; using MudEngine.Game.Environment; using MudEngine.Game; @@ -24,6 +23,7 @@ namespace MudEngine.GameScripts public override Boolean Start(Int32 maxPlayers, Int32 maxQueueSize) { this.Server.ServerOwner = "Admin"; + base.Start(maxPlayers, maxQueueSize); //Quick demonstration on how to create the initial starting room for new players. this.World.CreateRealm("Azeroth", "Starting Realm for beginning players"); @@ -43,6 +43,7 @@ namespace MudEngine.GameScripts if (startOK && linked) { this.World.StartLocation = bedroom; + this.World.Save(); return true; } //Otherwise return false and prevent the game from running. diff --git a/MudEngine/WinPC_Engine/WinPC_Engine.csproj b/MudEngine/WinPC_Engine/WinPC_Engine.csproj index c7fcf73..a1a833c 100644 --- a/MudEngine/WinPC_Engine/WinPC_Engine.csproj +++ b/MudEngine/WinPC_Engine/WinPC_Engine.csproj @@ -73,9 +73,9 @@ Always - + Always - +