You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.3 KiB
148 lines
3.3 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.Serialization;
|
|
using System.Text;
|
|
|
|
namespace Mapper
|
|
{
|
|
[DataContract]
|
|
public class Area
|
|
{
|
|
public Area(uint entry)
|
|
{
|
|
Entry = entry;
|
|
}
|
|
|
|
[DataMember]
|
|
public readonly uint Entry;
|
|
|
|
[DataMember]
|
|
public string Name
|
|
{
|
|
get;
|
|
internal set;
|
|
}
|
|
|
|
[DataMember]
|
|
public string Keyword
|
|
{
|
|
get;
|
|
internal set;
|
|
}
|
|
|
|
[DataMember]
|
|
public int MinLevel
|
|
{
|
|
get;
|
|
internal set;
|
|
}
|
|
|
|
[DataMember]
|
|
public int MaxLevel
|
|
{
|
|
get;
|
|
internal set;
|
|
}
|
|
|
|
[DataMember]
|
|
public int LevelLock
|
|
{
|
|
get;
|
|
internal set;
|
|
}
|
|
|
|
[DataMember]
|
|
public uint StartRoom
|
|
{
|
|
get;
|
|
internal set;
|
|
}
|
|
|
|
[DataMember]
|
|
internal List<Room> rooms = new List<Room>();
|
|
|
|
[DataMember]
|
|
internal List<Exit> Portals = new List<Exit>();
|
|
|
|
public Room[] Rooms
|
|
{
|
|
get
|
|
{
|
|
return rooms.ToArray();
|
|
}
|
|
}
|
|
|
|
[DataMember]
|
|
public int ExplorableRooms
|
|
{
|
|
get;
|
|
internal set;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get all rooms in area with this name (exact, case sensitive).
|
|
/// </summary>
|
|
/// <param name="Name">Name of room.</param>
|
|
/// <returns></returns>
|
|
public List<Room> GetRooms(string Name)
|
|
{
|
|
List<Room> r = new List<Room>();
|
|
foreach(Room x in rooms)
|
|
{
|
|
if(x.Name == Name)
|
|
r.Add(x);
|
|
}
|
|
|
|
return r;
|
|
}
|
|
|
|
[DataMember]
|
|
internal List<string> Flags = null;
|
|
|
|
/// <summary>
|
|
/// Check if area has a flag.
|
|
/// </summary>
|
|
/// <param name="flag">Flag to check for.</param>
|
|
/// <returns></returns>
|
|
public bool HasFlag(string flag)
|
|
{
|
|
return Flags != null && Flags.Contains(flag.ToLower().Trim());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add a flag to area.
|
|
/// </summary>
|
|
/// <param name="flag">Flag to add.</param>
|
|
public void AddFlag(string flag)
|
|
{
|
|
flag = flag != null ? flag.ToLower().Trim() : "";
|
|
if(Flags == null)
|
|
Flags = new List<string>();
|
|
if(!string.IsNullOrEmpty(flag) && !Flags.Contains(flag))
|
|
Flags.Add(flag);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Remove a flag from area.
|
|
/// </summary>
|
|
/// <param name="flag">Flag to remove.</param>
|
|
/// <returns></returns>
|
|
public bool RemoveFlag(string flag)
|
|
{
|
|
flag = flag != null ? flag.ToLower().Trim() : "";
|
|
if(Flags != null && Flags.Contains(flag))
|
|
{
|
|
Flags.Remove(flag);
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return "Area '" + (!string.IsNullOrEmpty(Name) ? Name : "NULL") + "' [" + Entry + "]";
|
|
}
|
|
}
|
|
}
|