Show a message when level isn't actually saved when using /save or /os map save

This commit is contained in:
UnknownShadow200 2018-06-23 23:27:19 +10:00
parent 3bafdbe5da
commit 3302e0b918
2 changed files with 22 additions and 16 deletions

View File

@ -106,7 +106,6 @@ namespace MCGalaxy.Commands.World {
DeleteMap(p, value); DeleteMap(p, value);
} else if (cmd == "SAVE") { } else if (cmd == "SAVE") {
Command.Find("Save").Use(p, ""); Command.Find("Save").Use(p, "");
Player.Message(p, "Map has been saved.");
} else if (cmd == "RESTORE") { } else if (cmd == "RESTORE") {
Command.Find("Restore").Use(p, value); Command.Find("Restore").Use(p, value);
} else if (cmd == "RESIZE") { } else if (cmd == "RESIZE") {

View File

@ -29,9 +29,9 @@ namespace MCGalaxy.Commands.World {
} }
public override void Use(Player p, string message) { public override void Use(Player p, string message) {
if (message.CaselessEq("all")) { SaveAll(); return; } if (message.CaselessEq("all")) { SaveAll(p); return; }
if (message.Length == 0) { if (message.Length == 0) {
if (Player.IsSuper(p)) { SaveAll(); } if (Player.IsSuper(p)) { SaveAll(p); }
else { Save(p, p.level, ""); } else { Save(p, p.level, ""); }
return; return;
} }
@ -48,25 +48,32 @@ namespace MCGalaxy.Commands.World {
} }
} }
static void SaveAll() { static void SaveAll(Player p) {
Level[] loaded = LevelInfo.Loaded.Items; Level[] loaded = LevelInfo.Loaded.Items;
foreach (Level lvl in loaded) { foreach (Level lvl in loaded) {
try { TrySave(p, lvl, false);
if (lvl.SaveChanges) {
lvl.Save();
} else {
Logger.Log(LogType.SystemActivity, "Level \"{0}\" is running a game, skipping save.", lvl.name);
}
} catch (Exception ex) {
Logger.LogError(ex);
}
} }
Chat.MessageGlobal("All levels have been saved."); Chat.MessageGlobal("All levels have been saved.");
} }
static bool TrySave(Player p, Level lvl, bool force) {
if (!force && !lvl.Changed) return false;
if (!lvl.SaveChanges) {
Player.Message(p, "Level {0} %Sis running a game, skipping save", lvl.ColoredName);
return false;
}
bool saved = lvl.Save(force);
if (!saved) Player.Message(p, "Saving of level {0} %Swas cancelled", lvl.ColoredName);
return saved;
}
static void Save(Player p, Level lvl, string restoreName) { static void Save(Player p, Level lvl, string restoreName) {
lvl.Save(true); if (TrySave(p, lvl, true)) {
Player.Message(p, "Level {0} %Ssaved.", lvl.ColoredName); Player.Message(p, "Level {0} %Ssaved", lvl.ColoredName);
}
int num = lvl.Backup(true, restoreName); int num = lvl.Backup(true, restoreName);
if (num == -1) return; if (num == -1) return;