mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-23 20:53:40 -04:00
Now /mi has pretty much some behaviour, regardless of whether map is loaded or not.
This commit is contained in:
parent
78ddd724cc
commit
b05a20981c
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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; } }
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user