Now /mi has pretty much some behaviour, regardless of whether map is loaded or not.

This commit is contained in:
UnknownShadow200 2017-06-27 22:17:06 +10:00
parent 78ddd724cc
commit b05a20981c
4 changed files with 61 additions and 134 deletions

View File

@ -102,17 +102,8 @@ namespace MCGalaxy.Commands.Info {
} }
void ShowPermissions(Player p, MapInfoData data) { void ShowPermissions(Player p, MapInfoData data) {
List<string> vWhitelist = data.VisitWhitelist, vBlacklist = data.VisitBlacklist; PrintRanks(p, data.Visit, " Visitable by ");
List<string> bWhitelist = data.BuildWhitelist, bBlacklist = data.BuildBlacklist; PrintRanks(p, data.Build, " Modifiable by ");
GetBlacklistedPlayers(data.Name, vBlacklist);
StringBuilder visitPerms = new StringBuilder(" Visitable by ");
PrintRanks(p, data.visit, data.visitmax, vWhitelist, vBlacklist, visitPerms);
Player.Message(p, visitPerms.ToString());
StringBuilder buildPerms = new StringBuilder(" Modifiable by ");
PrintRanks(p, data.build, data.buildmax, bWhitelist, bBlacklist, buildPerms);
Player.Message(p, buildPerms.ToString());
if (String.IsNullOrEmpty(data.RealmOwner)) if (String.IsNullOrEmpty(data.RealmOwner))
data.RealmOwner = GetRealmMapOwner(data.Name); data.RealmOwner = GetRealmMapOwner(data.Name);
@ -123,22 +114,25 @@ namespace MCGalaxy.Commands.Info {
owners.Join(n => PlayerInfo.GetColoredName(p, n))); owners.Join(n => PlayerInfo.GetColoredName(p, n)));
} }
// Can't pass a LevelAccess instance here static void PrintRanks(Player p, LevelAccessController access, string initial) {
static void PrintRanks(Player p, LevelPermission min, LevelPermission max, StringBuilder perms = new StringBuilder(initial);
List<string> whitelist, List<string> blacklist, StringBuilder builder) { perms.Append(Group.GetColoredName(access.Min) + "%S+");
builder.Append(Group.GetColoredName(min) + "%S+"); if (access.Max != LevelPermission.Nobody)
if (max != LevelPermission.Nobody) perms.Append(" up to " + Group.GetColoredName(access.Max));
builder.Append(" up to " + Group.GetColoredName(max));
List<string> whitelist = access.Whitelisted;
foreach (string name in whitelist) foreach (string name in whitelist)
builder.Append(", " + PlayerInfo.GetColoredName(p, name)); perms.Append(", " + PlayerInfo.GetColoredName(p, name));
if (blacklist.Count == 0) return; List<string> blacklist = access.Blacklisted;
if (blacklist.Count == 0) { Player.Message(p, perms.ToString()); return; }
builder.Append( " %S(except "); perms.Append( " %S(except ");
foreach (string name in blacklist) foreach (string name in blacklist)
builder.Append(PlayerInfo.GetColoredName(p, name) + ", "); perms.Append(PlayerInfo.GetColoredName(p, name) + ", ");
builder.Remove(builder.Length - 2, 2); perms.Remove(perms.Length - 2, 2);
builder.Append("%S)"); perms.Append("%S)");
Player.Message(p, perms.ToString());
} }
void ShowZombieSurvival(Player p, MapInfoData data) { void ShowZombieSurvival(Player p, MapInfoData data) {
@ -169,17 +163,6 @@ namespace MCGalaxy.Commands.Info {
return PlayerInfo.FindName(lvlName); return PlayerInfo.FindName(lvlName);
} }
void GetBlacklistedPlayers(string l, List<string> blacklist) {
string path = "levels/blacklists/" + l + ".txt";
if (!File.Exists(path)) return;
string[] lines = File.ReadAllLines(path);
foreach (string line in lines) {
if (line.IndexOf(' ') < 0) continue;
blacklist.Add(line.SplitSpaces()[1]);
}
}
void ShowEnv(Player p, MapInfoData data) { void ShowEnv(Player p, MapInfoData data) {
if (data.TerrainUrl != "") if (data.TerrainUrl != "")
Player.Message(p, "Texture: %b" + data.TerrainUrl); Player.Message(p, "Texture: %b" + data.TerrainUrl);
@ -222,11 +205,7 @@ namespace MCGalaxy.Commands.Info {
public bool ExpFog; public bool ExpFog;
// Permissions data // Permissions data
public LevelPermission visit, build, visitmax, buildmax; public LevelAccessController Visit, Build;
public List<string> VisitWhitelist = new List<string>();
public List<string> VisitBlacklist = new List<string>();
public List<string> BuildWhitelist = new List<string>();
public List<string> BuildBlacklist = new List<string>();
// Zombie data // Zombie data
public string Authors; public string Authors;
@ -236,33 +215,10 @@ namespace MCGalaxy.Commands.Info {
public void FromOnlineLevel(Level lvl) { public void FromOnlineLevel(Level lvl) {
Name = lvl.name; Name = lvl.name;
Width = lvl.Width; Height = lvl.Height; Length = lvl.Length; Width = lvl.Width; Height = lvl.Height; Length = lvl.Length;
Physics = lvl.physics; Guns = lvl.Config.Guns; BlockDB = lvl.Config.UseBlockDB;
RealmOwner = lvl.Config.RealmOwner;
BlockDBEntries = lvl.BlockDB.TotalEntries(); BlockDBEntries = lvl.BlockDB.TotalEntries();
LoadConfig(lvl.Config);
visit = lvl.VisitAccess.Min; visitmax = lvl.VisitAccess.Max; Visit = lvl.VisitAccess; Build = lvl.BuildAccess;
build = lvl.BuildAccess.Min; buildmax = lvl.BuildAccess.Max;
VisitWhitelist = new List<string>(lvl.VisitAccess.Whitelisted);
VisitBlacklist = new List<string>(lvl.VisitAccess.Blacklisted);
BuildWhitelist = new List<string>(lvl.BuildAccess.Whitelisted);
BuildBlacklist = new List<string>(lvl.BuildAccess.Blacklisted);
Fog = lvl.Config.FogColor; Sky = lvl.Config.SkyColor; Clouds = lvl.Config.CloudColor;
Light = lvl.Config.LightColor; Shadow = lvl.Config.ShadowColor;
EdgeLevel = lvl.Config.EdgeLevel; SidesOffset = lvl.Config.SidesOffset; CloudsHeight = lvl.Config.CloudsHeight;
MaxFog = lvl.Config.MaxFogDistance; ExpFog = lvl.Config.ExpFog;
CloudsSpeed = lvl.Config.CloudsSpeed; WeatherSpeed = lvl.Config.WeatherSpeed;
EdgeBlock = (byte)lvl.Config.EdgeBlock; HorizonBlock = (byte)lvl.Config.HorizonBlock;
WeatherFade = lvl.Config.WeatherFade;
TerrainUrl = lvl.Config.Terrain != "" ?
lvl.Config.Terrain : ServerConfig.DefaultTerrain;
TextureUrl = lvl.Config.TexturePack != "" ?
lvl.Config.TexturePack : ServerConfig.DefaultTexture;
Authors = lvl.Config.Authors;
TotalRounds = lvl.Config.RoundsPlayed; HumanRounds = lvl.Config.RoundsHumanWon;
Likes = lvl.Config.Likes; Dislikes = lvl.Config.Dislikes;
} }
public void FromOfflineLevel(string name) { public void FromOfflineLevel(string name) {
@ -275,64 +231,32 @@ namespace MCGalaxy.Commands.Info {
BlockDBEntries = BlockDBFile.CountEntries(name); BlockDBEntries = BlockDBFile.CountEntries(name);
path = LevelInfo.FindPropertiesFile(name); path = LevelInfo.FindPropertiesFile(name);
if (path != null) LevelConfig cfg = new LevelConfig();
PropertiesFile.Read(path, ParseProperty, '='); LevelConfig.Load(path, cfg);
if (Authors == null) Authors = ""; LoadConfig(cfg);
if (SidesOffset == int.MinValue) SidesOffset = EdgeLevel - 2;
Visit = new LevelAccessController(null, cfg, true);
Build = new LevelAccessController(null, cfg, false);
} }
void ParseProperty(string key, string value) { void LoadConfig(LevelConfig cfg) {
switch (key.ToLower()) { Physics = cfg.Physics; Guns = cfg.Guns; BlockDB = cfg.UseBlockDB;
case "physics": Physics = int.Parse(value); break; RealmOwner = cfg.RealmOwner;
case "guns": Guns = bool.Parse(value); break;
case "useblockdb": BlockDB = bool.Parse(value); break;
case "realmowner": RealmOwner = value; break;
case "perbuild": build = GetPerm(value); break; Fog = cfg.FogColor; Sky = cfg.SkyColor; Clouds = cfg.CloudColor;
case "pervisit": visit = GetPerm(value); break; Light = cfg.LightColor; Shadow = cfg.ShadowColor;
case "perbuildmax": buildmax = GetPerm(value); break; EdgeLevel = cfg.EdgeLevel; SidesOffset = cfg.SidesOffset; CloudsHeight = cfg.CloudsHeight;
case "pervisitmax": visitmax = GetPerm(value); break; MaxFog = cfg.MaxFogDistance; ExpFog = cfg.ExpFog;
case "visitwhitelist": VisitWhitelist = Parse(value); break; CloudsSpeed = cfg.CloudsSpeed; WeatherSpeed = cfg.WeatherSpeed;
case "visitblacklist": VisitBlacklist = Parse(value); break; EdgeBlock = (byte)cfg.EdgeBlock; HorizonBlock = (byte)cfg.HorizonBlock;
case "buildwhitelist": BuildWhitelist = Parse(value); break; WeatherFade = cfg.WeatherFade;
case "buildblacklist": BuildBlacklist = Parse(value); break;
case "authors": Authors = value; break; TerrainUrl = cfg.Terrain != "" ? cfg.Terrain : ServerConfig.DefaultTerrain;
case "roundsplayed": TotalRounds = int.Parse(value); break; TextureUrl = cfg.TexturePack != "" ? cfg.TexturePack : ServerConfig.DefaultTexture;
case "roundshumanwon": HumanRounds = int.Parse(value); break;
case "likes": Likes = int.Parse(value); break;
case "dislikes": Dislikes = int.Parse(value); break;
case "cloudcolor": Clouds = value; break; Authors = cfg.Authors;
case "fogcolor": Fog = value; break; TotalRounds = cfg.RoundsPlayed; HumanRounds = cfg.RoundsHumanWon;
case "skycolor": Sky = value; break; Likes = cfg.Likes; Dislikes = cfg.Dislikes;
case "shadowcolor": Shadow = value; break;
case "lightcolor": Light = value; break;
case "edgeblock": EdgeBlock = byte.Parse(value); break;
case "edgelevel": EdgeLevel = short.Parse(value); break;
case "sidesoffset": SidesOffset = short.Parse(value); break;
case "horizonblock": HorizonBlock = byte.Parse(value); break;
case "cloudsheight": CloudsHeight = short.Parse(value); break;
case "maxfog": MaxFog = short.Parse(value); break;
case "expfog": ExpFog = bool.Parse(value); break;
case "texture": TerrainUrl = value; break;
case "texturepack": TextureUrl = value; break;
case "clouds-speed": CloudsSpeed = int.Parse(value); break;
case "weather-speed": WeatherSpeed = int.Parse(value); break;
case "weather-fade": WeatherFade = int.Parse(value); break;
}
}
static List<string> Parse(string value) {
if (value == "") return new List<string>();
return new List<string>(value.Split(','));
}
static LevelPermission GetPerm(string value) {
LevelPermission perm = Group.ParsePermOrName(value);
return perm != LevelPermission.Null ? perm : LevelPermission.Guest;
} }
} }

View File

@ -182,38 +182,40 @@ namespace MCGalaxy {
/// visit (true) or build (false) permission for the level. </summary> /// visit (true) or build (false) permission for the level. </summary>
public readonly bool IsVisit; public readonly bool IsVisit;
readonly Level lvl; readonly Level lvl;
readonly LevelConfig cfg;
public LevelAccessController(Level lvl, bool isVisit) { public LevelAccessController(Level lvl, LevelConfig cfg, bool isVisit) {
this.lvl = lvl; this.lvl = lvl;
this.cfg = cfg;
IsVisit = isVisit; IsVisit = isVisit;
} }
/// <summary> Lowest allowed rank. </summary> /// <summary> Lowest allowed rank. </summary>
public override LevelPermission Min { public override LevelPermission Min {
get { return IsVisit ? lvl.Config.VisitMin : lvl.Config.BuildMin; } get { return IsVisit ? cfg.VisitMin : cfg.BuildMin; }
set { set {
if (IsVisit) lvl.Config.VisitMin = value; if (IsVisit) cfg.VisitMin = value;
else lvl.Config.BuildMin = value; else cfg.BuildMin = value;
} }
} }
/// <summary> Highest allowed rank. </summary> /// <summary> Highest allowed rank. </summary>
public override LevelPermission Max { public override LevelPermission Max {
get { return IsVisit ? lvl.Config.VisitMax : lvl.Config.BuildMax; } get { return IsVisit ? cfg.VisitMax : cfg.BuildMax; }
set { set {
if (IsVisit) lvl.Config.VisitMax = value; if (IsVisit) cfg.VisitMax = value;
else lvl.Config.BuildMax = value; else cfg.BuildMax = value;
} }
} }
/// <summary> List of always allowed players, overrides rank allowances. </summary> /// <summary> List of always allowed players, overrides rank allowances. </summary>
public override List<string> Whitelisted { public override List<string> Whitelisted {
get { return IsVisit ? lvl.Config.VisitWhitelist : lvl.Config.BuildWhitelist; } get { return IsVisit ? cfg.VisitWhitelist : cfg.BuildWhitelist; }
} }
/// <summary> List of never allowed players, ignores rank allowances. </summary> /// <summary> List of never allowed players, ignores rank allowances. </summary>
public override List<string> Blacklisted { public override List<string> Blacklisted {
get { return IsVisit ? lvl.Config.VisitBlacklist : lvl.Config.BuildBlacklist; } get { return IsVisit ? cfg.VisitBlacklist : cfg.BuildBlacklist; }
} }
protected override string ColoredName { get { return lvl.ColoredName; } } protected override string ColoredName { get { return lvl.ColoredName; } }

View File

@ -99,6 +99,7 @@ namespace MCGalaxy {
set { set {
if (value > 0 && Physicsint == 0) StartPhysics(); if (value > 0 && Physicsint == 0) StartPhysics();
Physicsint = value; Physicsint = value;
Config.Physics = value;
} }
} }
int Physicsint; int Physicsint;

View File

@ -79,8 +79,8 @@ namespace MCGalaxy {
rotx = 0; roty = 0; rotx = 0; roty = 0;
ZoneList = new List<Zone>(); ZoneList = new List<Zone>();
VisitAccess = new LevelAccessController(this, true); VisitAccess = new LevelAccessController(this, Config, true);
BuildAccess = new LevelAccessController(this, false); BuildAccess = new LevelAccessController(this, Config, false);
listCheckExists = new SparseBitSet(Width, Height, Length); listCheckExists = new SparseBitSet(Width, Height, Length);
listUpdateExists = new SparseBitSet(Width, Height, Length); listUpdateExists = new SparseBitSet(Width, Height, Length);
} }