using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.IO;
using MudEngine.Networking;
using MudEngine.Core;
using MudEngine.Game.Characters;
using MudEngine.DAL;
namespace MudEngine.Game
{
///
/// StandardGame will be the base of all Mud Games created with the engine.
/// It manages all of the game components including the Server and the Game World.
///
public class StandardGame
{
///
/// Gets or Sets the Name of this game.
///
public String Name { get; set; }
///
/// Gets or Sets the website where this game can be played at.
///
public String Website { get; set; }
///
/// Gets or Sets the Description of this game. This is often displayed upon first connection.
/// Note that this is displayed BEFORE the Servers MOTD.
///
public String Description { get; set; }
///
/// Gets or Sets the Version of this game.
///
public String Version { get; set; }
///
/// Gets or Sets if Room Names will be shown to the player each time they travel to a new Room.
///
public Boolean HiddenRoomNames { get; set; }
///
/// Gets or Sets if this Game is currently being played on a Server
///
public Boolean Multiplayer { get; set; }
///
/// Gets or Sets the minimum password size required for user account passwords
///
public Int32 MinimumPasswordSize { get; set; }
///
/// Get or Sets if the game will automatically save the world. For servers with poor specifications, this can be disabled to
/// help with performance. Manually saving the world will be required.
///
public Boolean AutoSave { get; set; }
///
/// Gets if the game is currently running or not.
///
public Boolean Enabled { get; private set; }
///
/// Gets or Sets if the game is in debug more or not.
///
public Boolean Debugging { get; set; }
///
/// Gets or reference to the currently running Server.
///
public Server Server { get; protected set; }
///
/// Gets or Sets the paths that content is saved to.
///
public DataPaths SavePaths { get; set; }
///
/// StandardGame constructor. If no Port number is provided, 4000 is used.
///
///
public StandardGame(String name) : this(name, 4000)
{
}
///
/// StandardGame constructor.
///
///
///
public StandardGame(String name, Int32 port)
{
Logger.WriteLine("Initializing Standard Mud Game");
this.Name = name;
this.Website = "http://scionwest.net";
this.Description = "A sample Mud game created using the Mud Designer kit.";
this.Version = "1.0";
this.Multiplayer = true;
this.MinimumPasswordSize = 8;
this.AutoSave = true;
//Setup our server.
this.Server = new Server(this, port);
//Setup default save paths.
DataPaths paths = new DataPaths();
this.SavePaths = paths;
SetupPaths();
}
///
/// Starts the game by getting all of the game scripts, loading the world
/// loading all of the games commands and starting the server.
///
///
///
///
public Boolean Start(Int32 maxPlayers, Int32 maxQueueSize)
{
Logger.WriteLine("Starting up Standard Game");
//Instance Script Engine
//Compile any scripts
//Load our Commands
CommandSystem.LoadCommands();
//Load World
//Start our server.
this.Server.Start(maxPlayers, maxQueueSize);
//If the server started without error, flag the Game as enabled.
if (this.Server.Enabled)
this.Enabled = true;
return this.Enabled;
}
///
/// Stops the game but unloading the world, shutting down the server and unloading all scripts/commands.
///
public void Stop()
{
//Save the world.
//Stop the server
this.Server.Stop();
//Stop the world.
//Purge all scripts and commands.
CommandSystem.PurgeCommands();
//Disable the game.
this.Enabled = false;
}
public void Update()
{
}
private void SetupPaths()
{
if (!Directory.Exists(this.SavePaths.GetPath(DataTypes.Players)))
Directory.CreateDirectory(this.SavePaths.GetPath(DataTypes.Players));
}
}
}