diff --git a/MUDGame/Program.cs b/MUDGame/Program.cs index 8e3644e..7e052e2 100644 --- a/MUDGame/Program.cs +++ b/MUDGame/Program.cs @@ -59,13 +59,13 @@ namespace MUDGame if (game.InitialRealm == null) Console.WriteLine("Critical Error: No Initial Realm defined!"); - game.player = new MudEngine.GameObjects.Characters.Controlled.PlayerBasic[1000]; + game.PlayerCollection = new List(); //Start the game. MudEngine.GameManagement.CommandEngine.LoadAllCommands(); // Start the server thread. - game.StartServer(); + game.Start(); game.IsRunning = true; diff --git a/MudEngine/Commands/CommandRestart.cs b/MudEngine/Commands/CommandRestart.cs index b473878..e94b7c6 100644 --- a/MudEngine/Commands/CommandRestart.cs +++ b/MudEngine/Commands/CommandRestart.cs @@ -26,13 +26,13 @@ namespace MudEngine.Commands { if (player is PlayerAdmin) { - for (int i = 0; i < project.player.Length; i++) - project.player[i].Save(project.player[i].Name + ".dat"); + for (int i = 0; i < project.PlayerCollection.Count; i++) + project.PlayerCollection[i].Save(project.PlayerCollection[i].Name + ".dat"); project.server.EndServer(); if (project.ServerType == ProtocolType.Tcp) - project.server.InitializeTCP(555, ref project.player); + project.server.InitializeTCP(555, ref project.PlayerCollection); else - project.server.InitializeUDP(555, ref project.player); + project.server.InitializeUDP(555, ref project.PlayerCollection); return new CommandResults("Server Restarted."); } return new CommandResults("Access Denied."); diff --git a/MudEngine/GameManagement/Game.cs b/MudEngine/GameManagement/Game.cs index 28f3c50..0c1c3ca 100644 --- a/MudEngine/GameManagement/Game.cs +++ b/MudEngine/GameManagement/Game.cs @@ -9,11 +9,13 @@ using System.Xml; using System.IO; using System.Net; using System.Net.Sockets; +using System.Reflection; //MUD Engine using MudEngine.FileSystem; using MudEngine.GameObjects; using MudEngine.GameObjects.Environment; +using MudEngine.GameObjects.Characters.Controlled; namespace MudEngine.GameManagement { @@ -172,6 +174,34 @@ namespace MudEngine.GameManagement BaseCurrencyName = "Copper"; } + /// + /// Starts the game. + /// + public void Start() + { + this.StartServer(); + + scriptEngine = new Scripting.ScriptEngine(); + scriptEngine.Initialize(); + scriptEngine.ScriptPath = "Scripts"; + scriptEngine.ScriptExtension = ".mud"; + + if (System.IO.File.Exists("Scripts.dll")) + { + Assembly assem = Assembly.LoadFile("Scripts.dll"); + + foreach (Type t in assem.GetTypes()) + { + if (t.BaseType.Name == "PlayerBasic") + { + Scripting.GameObject obj = new Scripting.GameObject(); + obj = scriptEngine.GetObject(t.Name); + PlayerCollection.Add((PlayerBasic)obj.Instance); + } + } + } + } + public void Save(string filename) { string directory = Path.GetDirectoryName(filename); @@ -199,15 +229,18 @@ namespace MudEngine.GameManagement } - public MudEngine.GameObjects.Characters.BaseCharacter[] player; + public List PlayerCollection; + public MudEngine.Networking.Server server = new MudEngine.Networking.Server(); public ProtocolType ServerType = ProtocolType.Tcp; public int ServerPort = 555; public int MaximumPlayers = 1000; - public void StartServer() + private Scripting.ScriptEngine scriptEngine; + + private void StartServer() { - server.InitializeTCP(ServerPort, ref player); + server.InitializeTCP(ServerPort, ref PlayerCollection); server.Start(); } } diff --git a/MudEngine/Networking/Server.cs b/MudEngine/Networking/Server.cs index 46ce94c..e442b26 100644 --- a/MudEngine/Networking/Server.cs +++ b/MudEngine/Networking/Server.cs @@ -6,6 +6,9 @@ using System.Net; using System.Net.Sockets; using System.Threading; +using MudEngine.GameObjects.Characters; +using MudEngine.GameObjects.Characters.Controlled; + /* Usage: * Server MUDServer = new Server(); * MUDServer.InitializeUDP(666); or MUDServer.InitializeTCP(666); @@ -32,22 +35,22 @@ namespace MudEngine.Networking } server.CleanUp(); } - public bool InitializeTCP(int port, ref MudEngine.GameObjects.Characters.BaseCharacter[] pbs) + public bool InitializeTCP(int port, ref List pbs) { if (stage != 0) return false; if (server.Initialize(port, ProtocolType.Tcp) < 0) return false; - numberOfClients = pbs.Length; - clients = new ClientSocket[pbs.Length]; - clientThreads = new Thread[pbs.Length]; + numberOfClients = pbs.Count; + clients = new ClientSocket[pbs.Count]; + clientThreads = new Thread[pbs.Count]; players = pbs; stage++; return true; } - public bool InitializeUDP(int port, ref MudEngine.GameObjects.Characters.BaseCharacter[] pbs) + public bool InitializeUDP(int port, ref List pbs) { if (stage != 0) return false; @@ -135,7 +138,7 @@ namespace MudEngine.Networking private ServerSocket server; private int stage; - MudEngine.GameObjects.Characters.BaseCharacter[] players; + List players; // TCP Stuff: private ClientSocket[] clients; diff --git a/MudEngine/Scripting/ScriptEngine.cs b/MudEngine/Scripting/ScriptEngine.cs index 7727a22..783585b 100644 --- a/MudEngine/Scripting/ScriptEngine.cs +++ b/MudEngine/Scripting/ScriptEngine.cs @@ -97,7 +97,7 @@ namespace MudEngine.Scripting Directory.Delete("temp", true); Directory.CreateDirectory("temp"); - string source = "namespace MUDScripts\n{\n}"; + string source = "namespace MudScripts\n{\n}"; foreach (string script in scripts) { string tempPath = "temp";