diff --git a/MCGalaxy/Commands/Fun/CmdTntWars.cs b/MCGalaxy/Commands/Fun/CmdTntWars.cs index 1747aed2b..436b5a06d 100644 --- a/MCGalaxy/Commands/Fun/CmdTntWars.cs +++ b/MCGalaxy/Commands/Fun/CmdTntWars.cs @@ -195,7 +195,6 @@ namespace MCGalaxy.Commands.Fun { switch (text[1]) { case "all": case "a": - case "everyone": Player[] players = PlayerInfo.Online.Items; foreach (Player pl in players) { Player.Message(pl, "TNT Wars Rules: (sent to all players by " + p.ColoredName + " %S)"); @@ -206,9 +205,6 @@ namespace MCGalaxy.Commands.Fun { case "level": case "l": - case "lvl": - case "map": - case "m": foreach (Player pl in p.level.players) { Player.Message(pl, "TNT Wars Rules: (sent to all players in map by " + p.ColoredName + " %S)"); SendRules(pl); @@ -217,8 +213,6 @@ namespace MCGalaxy.Commands.Fun { return; case "players": - case "pls": - case "pl": case "p": TntWarsGame gm = TntWarsGame.GameIn(p); if (gm == null) { Player.Message(p, "TNT Wars Error: You aren't in a TNT Wars game!"); return; } @@ -284,11 +278,7 @@ namespace MCGalaxy.Commands.Fun { Player.Message(p, "TNT Wars Error: Can't display scores - game not in progress!"); } break; - - case "me": - case "mine": - case "score": - case "i": + default: if (tntwrs.GameStatus == TntWarsGame.TntWarsGameStatus.InProgress) { Player.Message(p, "TNT Wars: Your Score: " + Colors.white + TntWarsGame.GameIn(p).FindPlayer(p).Score); @@ -1022,10 +1012,7 @@ namespace MCGalaxy.Commands.Fun { Player.Message(p, "TNT Wars: {0} is now &cdisabled", name); return true; case "check": case "current": - case "now": - case "ATM": case "c": - case "t": Player.Message(p, "TNT Wars: {0} is currently {1}", name, target ? "&aenabled" : "&cdisabled"); return false; default: target = !target; diff --git a/MCGalaxy/Drawing/DrawOps/WriteDrawOp.cs b/MCGalaxy/Drawing/DrawOps/WriteDrawOp.cs index 195f5cd48..2553400ca 100644 --- a/MCGalaxy/Drawing/DrawOps/WriteDrawOp.cs +++ b/MCGalaxy/Drawing/DrawOps/WriteDrawOp.cs @@ -102,8 +102,21 @@ namespace MCGalaxy.Drawing.Ops { static ulong[] letters; static WriteDrawOp() { letters = new ulong[256]; - // each set bit means place a block at y offset equal to that bit index. - // e.g. 0x0A means place a block at 'y = 0' and at 'y = 3' + // Each letter is represented as 8 bytes + // Each byte represents a vertical line in that letter. + // For each byte, each set bit means place a block at y offset equal to the index of that bit. + + // For example, take the letter 'A', which is 0x0F140F0000000000UL + // Taking each byte in the 'A' until value is 0, we get 0x0F 0x14 0x0F, which becomes + // y = 7 + // y = 6 + // y = 5 + // █ y = 4 + // █ █ y = 3 + // ███ y = 2 + // █ █ y = 1 + // █ █ y = 0 + letters['A'] = 0x0F140F0000000000UL; letters['B'] = 0x1F150A0000000000UL; letters['C'] = 0x0E11110000000000UL; diff --git a/MCGalaxy/Levels/LevelOptions.cs b/MCGalaxy/Levels/LevelOptions.cs index 1f9feca3d..3d1d96794 100644 --- a/MCGalaxy/Levels/LevelOptions.cs +++ b/MCGalaxy/Levels/LevelOptions.cs @@ -22,36 +22,17 @@ using MCGalaxy.Generator.Foliage; namespace MCGalaxy { - public static class LevelOptions { - + public static class LevelOptions { public delegate void OptionSetter(Player p, Level lvl, string value); - public delegate bool OptionIntValidator(Player p, int value); - public static Dictionary Options = new Dictionary() { - { "motd", SetMotd }, - { "RealmOwner", SetRealmOwner }, - { "TreeType", SetTreeType }, - { "PhysicSpeed", (p, l, value) => SetInt(p, l, ref l.Config.PhysicsSpeed, value, "Physics speed", SpeedValidator) }, - { "Overload", (p, l, value) => SetInt(p, l, ref l.Config.PhysicsOverload, value, "Physics overload", OverloadValidator) }, - { "Fall", (p, l, value) => SetInt(p, l, ref l.Config.FallHeight, value, "Fall distance") }, - { "Drown", (p, l, value) => SetInt(p, l, ref l.Config.DrownTime, value, "Drown time (in tenths of a second)") }, - { "Finite", (p, l, value) => Toggle(p, l, ref l.Config.FiniteLiquids, "Finite mode") }, - { "AI", (p, l, value) => Toggle(p, l, ref l.Config.AnimalHuntAI, "Animal AI") }, - { "Edge", (p, l, value) => Toggle(p, l, ref l.Config.EdgeWater, "Edge water") }, - { "Grass", (p, l, value) => Toggle(p, l, ref l.Config.GrassGrow, "Growing grass") }, - { "Death", (p, l, value) => Toggle(p, l, ref l.Config.SurvivalDeath, "Survival death") }, - { "Killer", (p, l, value) => Toggle(p, l, ref l.Config.KillerBlocks, "Killer blocks") }, - { "Unload", (p, l, value) => Toggle(p, l, ref l.Config.AutoUnload, "Auto unload") }, - { "LoadOnGoto", (p, l, value) => Toggle(p, l, ref l.Config.LoadOnGoto, "Load on goto") }, - { "LeafDecay", (p, l, value) => Toggle(p, l, ref l.Config.LeafDecay, "Leaf decay") }, - { "RandomFlow", (p, l, value) => Toggle(p, l, ref l.Config.RandomFlow, "Random flow") }, - { "GrowTrees", (p, l, value) => Toggle(p, l, ref l.Config.GrowTrees, "Tree growing") }, - { "Chat", (p, l, value) => Toggle(p, l, ref l.Config.ServerWideChat, "Roleplay (level only) chat", true) }, - { "Guns", ToggleGuns }, - { "Buildable", (p, l, value) => TogglePerms(p, l, ref l.Config.Buildable, "Buildable") }, - { "Deletable", (p, l, value) => TogglePerms(p, l, ref l.Config.Deletable, "Deletable") }, - { "LoadDelay", (p, l, value) => SetInt(p, l, ref l.Config.LoadDelay, value, "Load delay", DelayValidator) }, + { "motd", SetMotd }, { "RealmOwner", SetRealmOwner }, { "TreeType", SetTreeType }, + { "PhysicSpeed", SetPhysicSpeed }, { "Overload", SetOverload }, { "Fall", SetFall }, { "Drown", SetDrown }, + { "Finite", SetFinite }, { "AI", SetAI }, { "Edge", SetEdge }, { "Grass", SetGrass }, + { "Death", SetDeath }, { "Killer", SetKiller }, { "Unload", SetUnload }, { "LoadOnGoto", SetLoadOnGoto }, + { "LeafDecay", SetLeafDecay }, { "RandomFlow", SetRandomFlow }, { "GrowTrees", SetGrowTrees }, + { "Chat", SetChat }, { "Guns", ToggleGuns }, { "Buildable", SetBuildable }, { "Deletable", SetDeletable }, + { "LoadDelay", SetLoadDelay }, }; public static Dictionary Help = new Dictionary() { @@ -89,8 +70,6 @@ namespace MCGalaxy { if (opt == "tree") return "growtrees"; return opt; } - - static string GetBool(bool value) { return value ? "&aON" : "&cOFF"; } static void SetMotd(Player p, Level lvl, string value) { lvl.Config.MOTD = value.Length == 0 ? "ignore" : value; @@ -127,40 +106,58 @@ namespace MCGalaxy { Player.Message(p, "Set tree type that saplings grow into to {0}.", value); } - - - static bool SpeedValidator(Player p, int raw) { - if (raw < 10) { Player.Message(p, "Physics speed cannot be below 10 milliseconds."); return false; } - return true; + static void SetFinite(Player p, Level l, string v) { Toggle(p, l, ref l.Config.FiniteLiquids, "Finite mode"); } + static void SetAI(Player p, Level l, string v) { Toggle(p, l, ref l.Config.AnimalHuntAI, "Animal AI"); } + static void SetEdge(Player p, Level l, string v) { Toggle(p, l, ref l.Config.EdgeWater, "Edge water"); } + static void SetGrass(Player p, Level l, string v) { Toggle(p, l, ref l.Config.GrassGrow, "Growing grass"); } + static void SetDeath(Player p, Level l, string v) { Toggle(p, l, ref l.Config.SurvivalDeath, "Survival death"); } + static void SetKiller(Player p, Level l, string v) { Toggle(p, l, ref l.Config.KillerBlocks, "Killer blocks"); } + static void SetUnload(Player p, Level l, string v) { Toggle(p, l, ref l.Config.AutoUnload, "Auto unload"); } + static void SetLoadOnGoto(Player p, Level l, string v) { Toggle(p, l, ref l.Config.LoadOnGoto, "Load on goto"); } + static void SetLeafDecay(Player p, Level l, string v) { Toggle(p, l, ref l.Config.LeafDecay, "Leaf decay"); } + static void SetRandomFlow(Player p, Level l, string v) { Toggle(p, l, ref l.Config.RandomFlow, "Random flow"); } + static void SetGrowTrees(Player p, Level l, string v) { Toggle(p, l, ref l.Config.GrowTrees, "Tree growing"); } + static void SetBuildable(Player p, Level l, string v) { TogglePerms(p, l, ref l.Config.Buildable, "Buildable"); } + static void SetDeletable(Player p, Level l, string v) { TogglePerms(p, l, ref l.Config.Deletable, "Deletable"); } + static void SetChat(Player p, Level l, string v) { + Toggle(p, l, ref l.Config.ServerWideChat, "Roleplay (level only) chat", true); } - static bool OverloadValidator(Player p, int raw) { - if (raw < 500) { - Player.Message(p, "Physics overload cannot go below 500 (default is 1500)"); return false; - } - if (p != null && p.Rank < LevelPermission.Admin && raw > 2500) { - Player.Message(p, "Only SuperOPs may set physics overload higher than 2500"); return false; - } - return true; - } - - static bool DelayValidator(Player p, int raw) { - if (raw < 0) { - Player.Message(p, "Load delay cannot go below 0 milliseconds. (default is 0)"); return false; - } - if (raw > 2000) { - Player.Message(p, "Load delay cannot go above 2000 milliseconds."); return false; - } - return true; - } - - static void SetInt(Player p, Level lvl, ref int target, string value, string name, - OptionIntValidator validator = null) { - if (value.Length == 0) { Player.Message(p, "You must provide an integer."); return; } + static void SetLoadDelay(Player p, Level l, string value) { int raw = 0; - if (!CommandParser.GetInt(p, value, name, ref raw)) return; + if (!CommandParser.GetInt(p, value, "Load delay", ref raw, 0, 2000)) return; + SetInt(l, raw, ref l.Config.LoadDelay, "Load delay"); + } + + static void SetPhysicSpeed(Player p, Level l, string value) { + int raw = 0; + if (!CommandParser.GetInt(p, value, "Physics speed", ref raw, 10)) return; + SetInt(l, raw, ref l.Config.PhysicsSpeed, "Physics speed"); + } + + static void SetOverload(Player p, Level l, string value) { + int raw = 0; + if (!CommandParser.GetInt(p, value, "Physics overload", ref raw, 500)) return; - if (validator != null && !validator(p, raw)) return; + if (p != null && p.Rank < LevelPermission.Admin && raw > 2500) { + Player.Message(p, "Only SuperOPs may set physics overload higher than 2500"); return; + } + SetInt(l, raw, ref l.Config.PhysicsOverload, "Physics overload"); + } + + static void SetFall(Player p, Level l, string value) { + int raw = 0; + if (!CommandParser.GetInt(p, value, "Fall distance", ref raw)) return; + SetInt(l, raw, ref l.Config.FallHeight, "Fall distance"); + } + + static void SetDrown(Player p, Level l, string value) { + int raw = 0; + if (!CommandParser.GetInt(p, value, "Drown time (in tenths of a second)", ref raw)) return; + SetInt(l, raw, ref l.Config.DrownTime, "Drown time (in tenths of a second)"); + } + + static void SetInt(Level lvl, int raw, ref int target, string name) { target = raw; lvl.ChatLevel(name + ": &b" + target); } @@ -187,10 +184,12 @@ namespace MCGalaxy { static void Toggle(Player p, Level lvl, ref bool target, string name, bool not = false) { target = !target; bool display = not ? !target : target; - lvl.ChatLevel(name + ": " + GetBool(display)); + string targetStr = display ? "&aON" : "&cOFF"; + lvl.ChatLevel(name + ": " + targetStr); - if (p == null || p.level != lvl) - Player.Message(p, name + ": " + GetBool(display)); + if (p == null || p.level != lvl) { + Player.Message(p, name + ": " + targetStr); + } } } }