mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-24 05:03:34 -04:00
Fix being unable to delete /os maps if perbuild is higher than your rank.
This commit is contained in:
parent
440660aef7
commit
a90045c47f
@ -170,20 +170,24 @@ namespace MCGalaxy.Commands
|
||||
Player.Message(p, "Accepted numbers are: 0, 1, 2, 3, 4 or 5");
|
||||
} else if (cmd == "DELETE") {
|
||||
if (value == "") {
|
||||
Player.Message(p, "To delete one of your maps type /os map delete <map number>");
|
||||
Player.Message(p, "To delete one of your maps, type %T/os map delete [map number[");
|
||||
} else if (value == "1") {
|
||||
string map = FirstMapName(p);
|
||||
if (!LevelInfo.ExistsOffline(map)) {
|
||||
Player.Message(p, "You don't have a map with that map number."); return;
|
||||
}
|
||||
Command.all.Find("deletelvl").Use(p, map);
|
||||
|
||||
Player.Message(p, "Created backup.");
|
||||
LevelActions.Delete(map);
|
||||
Player.Message(p, "Map 1 has been removed.");
|
||||
} else if (byte.TryParse(value, out mapNum)) {
|
||||
string map = p.name.ToLower() + value;
|
||||
if (!LevelInfo.ExistsOffline(map)) {
|
||||
Player.Message(p, "You don't have a map with that map number."); return;
|
||||
}
|
||||
Command.all.Find("deletelvl").Use(p, map);
|
||||
|
||||
Player.Message(p, "Created backup.");
|
||||
LevelActions.Delete(map);
|
||||
Player.Message(p, "Map " + value + " has been removed.");
|
||||
} else {
|
||||
Help(p);
|
||||
|
@ -19,8 +19,8 @@ using System;
|
||||
using System.IO;
|
||||
using MCGalaxy.SQL;
|
||||
|
||||
namespace MCGalaxy.Commands.World {
|
||||
public sealed class CmdDeleteLvl : Command {
|
||||
namespace MCGalaxy.Commands.World {
|
||||
public sealed class CmdDeleteLvl : Command {
|
||||
public override string name { get { return "deletelvl"; } }
|
||||
public override string shortcut { get { return ""; } }
|
||||
public override string type { get { return CommandTypes.World; } }
|
||||
@ -29,25 +29,20 @@ namespace MCGalaxy.Commands.World {
|
||||
|
||||
public override void Use(Player p, string message) {
|
||||
if (message == "" || message.Split(' ').Length > 1) { Help(p); return; }
|
||||
Level lvl = LevelInfo.Find(message);
|
||||
if (lvl != null) {
|
||||
if (p != null && lvl.permissionbuild > p.group.Permission) {
|
||||
Player.Message(p, "%cYou can't delete levels with a perbuild rank higher than yours!");
|
||||
return;
|
||||
}
|
||||
lvl.Unload();
|
||||
}
|
||||
|
||||
if (!ValidName(p, message, "level")) return;
|
||||
if (lvl == Server.mainLevel) { Player.Message(p, "Cannot delete the main level."); return; }
|
||||
|
||||
string map = LevelInfo.FindMapMatches(p, message);
|
||||
if (map == null) return;
|
||||
|
||||
Level lvl = LevelInfo.FindExact(map);
|
||||
if (lvl != null && p != null && lvl.permissionbuild > p.group.Permission) {
|
||||
Player.Message(p, "%cYou can't delete levels with a perbuild rank higher than yours!"); return;
|
||||
}
|
||||
if (lvl == Server.mainLevel) { Player.Message(p, "Cannot delete the main level."); return; }
|
||||
|
||||
LevelPermission perbuild = GetPerBuildPermission(map);
|
||||
if (p != null && perbuild > p.group.Permission) {
|
||||
Player.Message(p, "%cYou can't delete levels with a perbuild rank higher than yours!"); return;
|
||||
}
|
||||
|
||||
Player.Message(p, "Created backup.");
|
||||
LevelActions.Delete(map.ToLower());
|
||||
}
|
||||
@ -60,8 +55,8 @@ namespace MCGalaxy.Commands.World {
|
||||
}
|
||||
|
||||
public override void Help(Player p) {
|
||||
Player.Message(p, "%T/deletelvl [map]");
|
||||
Player.Message(p, "%HCompletely deletes [map] (portals, MBs, everything");
|
||||
Player.Message(p, "%T/deletelvl [map]");
|
||||
Player.Message(p, "%HCompletely deletes [map] (portals, MBs, everything");
|
||||
Player.Message(p, "%HA backup of the map will be placed in the levels/deleted folder");
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ namespace MCGalaxy.Commands {
|
||||
foreach (Level l in loaded) {
|
||||
try {
|
||||
if (l.ShouldSaveChanges()) l.Save();
|
||||
else { Server.s.Log("The level \"" + l.name + "\" is running a game, not saving."); }
|
||||
else { Server.s.Log("Level \"" + l.name + "\" is running a game, skipping save."); }
|
||||
} catch (Exception ex) {
|
||||
Server.ErrorLog(ex);
|
||||
}
|
||||
@ -46,17 +46,13 @@ namespace MCGalaxy.Commands {
|
||||
} else {
|
||||
string[] args = message.Split(' ');
|
||||
if (message == "") {
|
||||
if (p == null)
|
||||
Use(p, "all");
|
||||
else
|
||||
Save(p, p.level, "");
|
||||
if (p == null) Use(p, "all");
|
||||
else Save(p, p.level, "");
|
||||
} else if (args.Length <= 2) {
|
||||
Level lvl = LevelInfo.Find(args[0]);
|
||||
Level lvl = LevelInfo.FindMatches(p, args[0]);
|
||||
if (lvl == null) return;
|
||||
string restore = args.Length > 1 ? args[1].ToLower() : "";
|
||||
if (lvl != null)
|
||||
Save(p, lvl, restore);
|
||||
else
|
||||
Player.Message(p, "Could not find level specified");
|
||||
Save(p, lvl, restore);
|
||||
} else {
|
||||
Help(p);
|
||||
}
|
||||
|
@ -17,10 +17,8 @@
|
||||
*/
|
||||
using MCGalaxy.Games;
|
||||
|
||||
namespace MCGalaxy.Commands {
|
||||
|
||||
public sealed class CmdTp : Command {
|
||||
|
||||
namespace MCGalaxy.Commands {
|
||||
public sealed class CmdTp : Command {
|
||||
public override string name { get { return "tp"; } }
|
||||
public override string shortcut { get { return ""; } }
|
||||
public override string type { get { return CommandTypes.Other; } }
|
||||
|
@ -97,16 +97,19 @@ namespace MCGalaxy {
|
||||
|
||||
|
||||
/// <summary> Deletes the .lvl (and related) files and database tables.
|
||||
/// Does not perform any unloading. </summary>
|
||||
/// Unloads a level (if present) which exactly matches name. </summary>
|
||||
public static void Delete(string name) {
|
||||
Level lvl = LevelInfo.FindExact(name);
|
||||
if (lvl != null) lvl.Unload();
|
||||
|
||||
if (!Directory.Exists("levels/deleted"))
|
||||
Directory.CreateDirectory("levels/deleted");
|
||||
|
||||
if (File.Exists("levels/deleted/" + name + ".lvl")) {
|
||||
int currentNum = 0;
|
||||
while (File.Exists("levels/deleted/" + name + currentNum + ".lvl")) currentNum++;
|
||||
int num = 0;
|
||||
while (File.Exists("levels/deleted/" + name + num + ".lvl")) num++;
|
||||
|
||||
File.Move(LevelInfo.LevelPath(name), "levels/deleted/" + name + currentNum + ".lvl");
|
||||
File.Move(LevelInfo.LevelPath(name), "levels/deleted/" + name + num + ".lvl");
|
||||
} else {
|
||||
File.Move(LevelInfo.LevelPath(name), "levels/deleted/" + name + ".lvl");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user