- Rooms can now be linked automatically via the new Zone.LinkRooms method. Room linking can no longer be done manually as the Doorways property is now read-only. - Door.Description has been removed. Doorway description will need to be included in Room.Description or Room.DetailedDescription properties. - Added DetailedDescription to make creating multi-line descriptions easier. Not supported by the Look command yet. - Game.IsRunning is now read-only. The Game will manage this property on its own. - BaseCharacter.ExecuteCommand now will always return a string. Simplifying the game loop for users as they no longer need to check what Type was returned by the command. - Doors now contain a DepartureRoom and a ArrivalRoom property allowing for easy access to Rooms that are linked together. - Fixed a bug where Game, Realms and Zones always assigned IsInitial to Realms, Zones and Rooms when added to the collections. Collection would contain multiple IsInitial objects. - Removed Room.InstalledDoorways property as that was used only by the old Designer - Removed Room.Load() as that implementation of it is obsolete. MudGame: - Revised Zeroth to build it's Zone and Rooms using the new Zone.LinkRooms function. - Greatly revised Program.cs and the Game loop to take advantage of many of the automations provided by the Engine now.
100 lines
3.2 KiB
C#
100 lines
3.2 KiB
C#
//Microsoft .NET Framework
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
//MUD Engine
|
|
using MudEngine.FileSystem;
|
|
using MudEngine.Commands;
|
|
using MudEngine.GameManagement;
|
|
using MudEngine.GameObjects;
|
|
using MudEngine.GameObjects.Environment;
|
|
using MudEngine.GameObjects.Items;
|
|
|
|
namespace MudEngine.GameObjects.Characters
|
|
{
|
|
public class BaseCharacter : BaseObject
|
|
{
|
|
/// <summary>
|
|
/// The current Room this Character is located at.
|
|
/// </summary>
|
|
public Room CurrentRoom { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or Sets if this Character is controlled by the user. If not user controlled then it will be AI controlled.
|
|
/// </summary>
|
|
public Boolean IsControlled { get; set; }
|
|
|
|
/// <summary>
|
|
/// Gets or Sets if this user has Admin privileges or not.
|
|
/// </summary>
|
|
public Boolean IsAdmin { get; private set; }
|
|
|
|
/// <summary>
|
|
/// Gets a reference to the currently running game.
|
|
/// </summary>
|
|
public Game Game { get; private set; }
|
|
|
|
public BaseCharacter(Game game)
|
|
{
|
|
Game = game;
|
|
IsAdmin = true;
|
|
CurrentRoom = game.InitialRealm.InitialZone.InitialRoom;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Moves the player from one Room to another if the supplied direction contains a doorway.
|
|
/// Returns false if no doorway is available.
|
|
/// </summary>
|
|
/// <param name="travelDirection"></param>
|
|
/// <returns></returns>
|
|
public bool Move(AvailableTravelDirections travelDirection)
|
|
{
|
|
//Check if the current room has a doorway in the supplied direction of travel.
|
|
if (!CurrentRoom.DoorwayExist(travelDirection))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
//We have a doorway, lets move to the next room.
|
|
CurrentRoom = CurrentRoom.GetDoor(travelDirection).ArrivalRoom;
|
|
|
|
OnTravel(travelDirection);
|
|
|
|
return true;
|
|
}
|
|
|
|
public virtual void OnTravel(AvailableTravelDirections travelDirection)
|
|
{
|
|
//TODO: Check the Room/Zone/Realm to see if anything needs to occure during travel.
|
|
}
|
|
|
|
public String ExecuteCommand(string command)
|
|
{
|
|
//TODO: Character class can handle a lot of the command management here, checking various things prior to sending
|
|
//the command off to the command engine for execution.
|
|
CommandResults result = CommandEngine.ExecuteCommand(command, this);
|
|
|
|
|
|
if (result.Result is string[])
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach (string item in result.Result)
|
|
sb.AppendLine(item);
|
|
|
|
return sb.ToString();
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
public void Initialize(ref MudEngine.Networking.ClientSocket rcs)
|
|
{
|
|
CurrentRoom = Game.InitialRealm.InitialZone.InitialRoom;
|
|
sock = rcs;
|
|
}
|
|
|
|
public MudEngine.Networking.ClientSocket sock;
|
|
}
|
|
}
|