Now /copylvl also copies bots

This commit is contained in:
UnknownShadow200 2017-02-28 09:50:35 +11:00
parent 57446cbcd4
commit c0db0f2258
3 changed files with 69 additions and 42 deletions

View File

@ -109,17 +109,7 @@ namespace MCGalaxy.Bots {
}
}
public static void RemoveLevelBots(string level) {
lock (locker) {
for (int i = 0; i < SavedBots.Count; i++) {
BotProperties props = SavedBots[i];
if (level != props.Level) continue;
SavedBots.RemoveAt(i); i--;
}
Save();
}
}
/// <summary> Deletes all bots which are located on the given map. </summary>
public static void DeleteBots(string level) {
lock (locker) {
int removed = 0;
@ -129,23 +119,43 @@ namespace MCGalaxy.Bots {
SavedBots.RemoveAt(i);
removed++; i--;
}
}
if (removed > 0) Save();
}
}
/// <summary> Moves all bots located on the given source map to the destination map. </summary>
public static void MoveBots(string srcLevel, string dstLevel) {
lock (locker) {
int moved = 0;
for (int i = 0; i < SavedBots.Count; i++) {
BotProperties props = SavedBots[i];
if (!props.Level.CaselessEq(srcLevel)) continue;
props.Level = dstLevel; moved++;
props.Level = dstLevel;
moved++;
}
if (moved > 0) Save();
}
}
/// <summary> Copies all bots located on the given source map to the destination map. </summary>
public static void CopyBots(string srcLevel, string dstLevel) {
lock (locker) {
int copied = 0, count = SavedBots.Count;
for (int i = 0; i < SavedBots.Count; i++) {
BotProperties props = SavedBots[i];
if (!props.Level.CaselessEq(srcLevel)) continue;
BotProperties copy = props.Copy();
copy.Level = dstLevel;
SavedBots.Add(copy);
copied++;
}
if (copied > 0) Save();
}
}
public static void UpdateBot(PlayerBot bot) {
lock (locker) DoUpdateBot(bot, true);
}
@ -195,5 +205,19 @@ namespace MCGalaxy.Bots {
X = bot.pos[0]; Y = bot.pos[1]; Z = bot.pos[2];
RotX = bot.rot[0]; RotY = bot.rot[1];
}
public BotProperties Copy() {
BotProperties copy = new BotProperties();
copy.DisplayName = DisplayName; copy.Name = Name;
copy.Level = Level; copy.Skin = Skin;
copy.Model = Model; copy.Color = Color;
copy.AI = AI; copy.Kill = Kill;
copy.Hunt = Hunt; copy.CurInstruction = CurInstruction;
copy.X = X; copy.Y = Y; copy.Z = Z;
copy.RotX = RotX; copy.RotY = RotY;
return copy;
}
}
}

View File

@ -93,15 +93,15 @@ namespace MCGalaxy {
public static void UnloadFromLevel(Level lvl) {
BotsFile.UnloadBots(lvl);
RemoveAll(lvl, false);
RemoveLoadedBots(lvl, false);
}
public static void RemoveAllFromLevel(Level lvl) {
RemoveAll(lvl, true);
BotsFile.RemoveLevelBots(lvl.name);
RemoveLoadedBots(lvl, true);
BotsFile.DeleteBots(lvl.name);
}
static void RemoveAll(Level lvl, bool save) {
static void RemoveLoadedBots(Level lvl, bool save) {
PlayerBot[] bots = Bots.Items;
for (int i = 0; i < bots.Length; i++) {
PlayerBot bot = bots[i];

View File

@ -31,21 +31,22 @@ namespace MCGalaxy {
public static void Rename(string src, string dst) {
File.Move(LevelInfo.MapPath(src), LevelInfo.MapPath(dst));
SafeMove(LevelInfo.MapPath(src) + ".backup",
LevelInfo.MapPath(dst) + ".backup");
SafeMove("levels/level properties/" + src + ".properties",
"levels/level properties/" + dst + ".properties");
SafeMove("levels/level properties/" + src,
"levels/level properties/" + dst + ".properties");
SafeMove("blockdefs/lvl_" + src + ".json",
"blockdefs/lvl_" + dst + ".json");
SafeMove("blockprops/lvl_" + src + ".txt",
"blockprops/lvl_" + dst + ".txt");
MoveIfExists(LevelInfo.MapPath(src) + ".backup",
LevelInfo.MapPath(dst) + ".backup");
MoveIfExists("levels/level properties/" + src + ".properties",
"levels/level properties/" + dst + ".properties");
MoveIfExists("levels/level properties/" + src,
"levels/level properties/" + dst + ".properties");
MoveIfExists("blockdefs/lvl_" + src + ".json",
"blockdefs/lvl_" + dst + ".json");
MoveIfExists("blockprops/lvl_" + src + ".txt",
"blockprops/lvl_" + dst + ".txt");
try {
MoveBackups(src, dst);
} catch {
}
BotsFile.MoveBots(src, dst);
RenameDatabaseTables(src, dst);
BlockDBFile.MoveBackingFile(src, dst);
@ -75,7 +76,7 @@ namespace MCGalaxy {
}
}
static void SafeMove(string src, string dst) {
static void MoveIfExists(string src, string dst) {
if (!File.Exists(src)) return;
try {
File.Move(src, dst);
@ -127,10 +128,10 @@ namespace MCGalaxy {
File.Move(LevelInfo.MapPath(name), LevelInfo.DeletedPath(name));
}
SafeDelete("levels/level properties/" + name);
SafeDelete("levels/level properties/" + name + ".properties");
SafeDelete("blockdefs/lvl_" + name + ".json");
SafeDelete("blockprops/lvl_" + name + ".txt");
DeleteIfExists("levels/level properties/" + name);
DeleteIfExists("levels/level properties/" + name + ".properties");
DeleteIfExists("blockdefs/lvl_" + name + ".json");
DeleteIfExists("blockprops/lvl_" + name + ".txt");
BotsFile.DeleteBots(name);
DeleteDatabaseTables(name);
@ -155,7 +156,7 @@ namespace MCGalaxy {
}
}
static void SafeDelete(string src) {
static void DeleteIfExists(string src) {
if (!File.Exists(src)) return;
try {
File.Delete(src);
@ -208,14 +209,16 @@ namespace MCGalaxy {
public static void CopyLevel(string src, string dst) {
File.Copy(LevelInfo.MapPath(src), LevelInfo.MapPath(dst));
SafeCopy("levels/level properties/" + src,
"levels/level properties/" + dst + ".properties");
SafeCopy("levels/level properties/" + src + ".properties",
"levels/level properties/" + dst + ".properties");
SafeCopy("blockdefs/lvl_" + src + ".json",
"blockdefs/lvl_" + dst + ".json");
SafeCopy("blockprops/lvl_" + src + ".txt",
"blockprops/lvl_" + dst + ".txt");
CopyIfExists("levels/level properties/" + src,
"levels/level properties/" + dst + ".properties");
CopyIfExists("levels/level properties/" + src + ".properties",
"levels/level properties/" + dst + ".properties");
CopyIfExists("blockdefs/lvl_" + src + ".json",
"blockdefs/lvl_" + dst + ".json");
CopyIfExists("blockprops/lvl_" + src + ".txt",
"blockprops/lvl_" + dst + ".txt");
BotsFile.CopyBots(src, dst);
CopyDatabaseTables(src, dst);
}
@ -244,7 +247,7 @@ namespace MCGalaxy {
}
}
static void SafeCopy(string src, string dst) {
static void CopyIfExists(string src, string dst) {
if (!File.Exists(src)) return;
try {
File.Copy(src, dst, true);