From 21c5a9c25b615c927228ee01e6682f5127dd06fe Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 14 Mar 2016 10:44:26 +1100 Subject: [PATCH] Fix random level picking not being random. --- Games/ZombieSurvival/ZombieGame.Core.cs | 132 ++++++++++++------------ Games/ZombieSurvival/ZombieGame.cs | 12 +-- 2 files changed, 69 insertions(+), 75 deletions(-) diff --git a/Games/ZombieSurvival/ZombieGame.Core.cs b/Games/ZombieSurvival/ZombieGame.Core.cs index 15af32245..fb03c9cc0 100644 --- a/Games/ZombieSurvival/ZombieGame.Core.cs +++ b/Games/ZombieSurvival/ZombieGame.Core.cs @@ -159,7 +159,7 @@ namespace MCGalaxy { || Math.Abs(pAlive.pos[2] - pKiller.pos[2]) > HitboxPrecision) return; - if (!pAlive.infected && pKiller.infected && !pAlive.referee && !pKiller.referee && + if (!pAlive.infected && pKiller.infected && !pAlive.referee && !pKiller.referee && pKiller != pAlive && pKiller.level.name == currentLevelName && pAlive.level.name == currentLevelName) { pAlive.infected = true; @@ -265,7 +265,7 @@ namespace MCGalaxy { pl.blockCount = 50; pl.playersInfected = 0; - pl.money += money; + pl.money += money; pl.infected = false; pl.color = pl.group.color; if (pl.referee) { @@ -286,85 +286,81 @@ namespace MCGalaxy { playersString += p.group.color + p.DisplayName + Colors.white + ", "; } } - - void ChooseNextLevel() - { - if (queLevel) - { - ChangeLevel(nextLevel, Server.ZombieOnlyServer); - } + + void ChooseNextLevel() { + if (queLevel) { ChangeLevel(nextLevel); return; } // TODO: show global message of 'x level was queued' + if (!ChangeLevels) return; + try { - if (ChangeLevels) - { - List levels = GetCandidateLevels(); - if (levels.Count <= 2 && !UseLevelList) { Server.s.Log("You must have more than 2 levels to change levels in Zombie Survival"); return; } + List levels = GetCandidateLevels(); + if (levels.Count <= 2 && !UseLevelList) { Server.s.Log("You must have more than 2 levels to change levels in Zombie Survival"); return; } - if (levels.Count < 2 && UseLevelList) { Server.s.Log("You must have more than 2 levels in your level list to change levels in Zombie Survival"); return; } + if (levels.Count < 2 && UseLevelList) { Server.s.Log("You must have more than 2 levels in your level list to change levels in Zombie Survival"); return; } - string selectedLevel1 = "", selectedLevel2 = ""; - Random r = new Random(); + string selectedLevel1 = "", selectedLevel2 = ""; + Random r = new Random(); - LevelChoice: - int x = 0, x2 = 1; - string level = "", level2 = ""; - level = levels[r.Next(0, levels.Count)]; - level2 = levels[r.Next(0, levels.Count)]; - Level current = Server.mainLevel; + LevelChoice: + string level = levels[r.Next(0, levels.Count)]; + string level2 = levels[r.Next(0, levels.Count)]; - if (lastLevelVote1 == level || lastLevelVote2 == level2 || lastLevelVote1 == level2 || lastLevelVote2 == level || current == LevelInfo.Find(level) || currentZombieLevel == level || current == LevelInfo.Find(level2) || currentZombieLevel == level2) - goto LevelChoice; - else if (selectedLevel1 == "") { selectedLevel1 = level; goto LevelChoice; } - else - selectedLevel2 = level2; - - Level1Vote = 0; Level2Vote = 0; Level3Vote = 0; - lastLevelVote1 = selectedLevel1; lastLevelVote2 = selectedLevel2; - - if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound) - return; - - if (initialChangeLevel) - { - Server.votingforlevel = true; - Player.GlobalMessage(" " + Colors.black + "Level Vote: %S" + selectedLevel1 + ", " + selectedLevel2 + - " or random " + "(" + Colors.lime + "1%S/" + Colors.red + "2%S/" + Colors.blue + "3%S)"); - System.Threading.Thread.Sleep(15000); - Server.votingforlevel = false; - } - else { Level1Vote = 1; Level2Vote = 0; Level3Vote = 0; } - - if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound) - return; - - if (Level1Vote >= Level2Vote) { - if (Level3Vote > Level1Vote && Level3Vote > Level2Vote) { - ChangeLevel(levels[r.Next(0, levels.Count)], Server.ZombieOnlyServer); - } - ChangeLevel(selectedLevel1, Server.ZombieOnlyServer); - } else { - if (Level3Vote > Level1Vote && Level3Vote > Level2Vote) { - ChangeLevel(levels[r.Next(0, levels.Count)], Server.ZombieOnlyServer); - } - ChangeLevel(selectedLevel2, Server.ZombieOnlyServer); - } - Player[] online = PlayerInfo.Online.Items; - foreach (Player pl in online) - pl.voted = false; + if (lastLevel1 == level || lastLevel2 == level2 || lastLevel1 == level2 || + lastLevel2 == level || currentLevelName == level || currentLevelName == level2) { + goto LevelChoice; + } else if (selectedLevel1 == "") { + selectedLevel1 = level; goto LevelChoice; + } else { + selectedLevel2 = level2; } + + Level1Vote = 0; Level2Vote = 0; Level3Vote = 0; + lastLevel1 = selectedLevel1; lastLevel2 = selectedLevel2; + + if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound) + return; + + if (initialChangeLevel) { + Server.votingforlevel = true; + Player.GlobalMessage(" " + Colors.black + "Level Vote: %S" + selectedLevel1 + ", " + selectedLevel2 + + " or random " + "(" + Colors.lime + "1%S/" + Colors.red + "2%S/" + Colors.blue + "3%S)"); + System.Threading.Thread.Sleep(15000); + Server.votingforlevel = false; + } else { Level1Vote = 1; Level2Vote = 0; Level3Vote = 0; } + + if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound) + return; + + if (Level1Vote >= Level2Vote) { + if (Level3Vote > Level1Vote && Level3Vote > Level2Vote) { + ChangeLevel(levels[r.Next(0, levels.Count)]); + } else { + ChangeLevel(selectedLevel1); + } + } else { + if (Level3Vote > Level1Vote && Level3Vote > Level2Vote) { + ChangeLevel(levels[r.Next(0, levels.Count)]); + } else { + ChangeLevel(selectedLevel2); + } + } + Player[] online = PlayerInfo.Online.Items; + foreach (Player pl in online) + pl.voted = false; + } catch (Exception ex) { + Server.ErrorLog(ex); } - catch { } } List GetCandidateLevels() { - if (UseLevelList) return LevelList; - - List maps = new List(); - DirectoryInfo di = new DirectoryInfo("levels/"); + if (UseLevelList) return LevelList; + + List maps = new List(); + DirectoryInfo di = new DirectoryInfo("levels/"); FileInfo[] fi = di.GetFiles("*.lvl"); foreach (FileInfo fil in fi) - maps.Add(fil.Name.Split('.')[0]); + maps.Add(fil.Name.Split('.')[0]); return maps; - } + } } } diff --git a/Games/ZombieSurvival/ZombieGame.cs b/Games/ZombieSurvival/ZombieGame.cs index d01a822e8..6f1382dfb 100644 --- a/Games/ZombieSurvival/ZombieGame.cs +++ b/Games/ZombieSurvival/ZombieGame.cs @@ -54,7 +54,6 @@ namespace MCGalaxy { public bool RoundInProgress = false; public int aliveCount = 0; - public string currentZombieLevel = ""; public static System.Timers.Timer timer; public bool initialChangeLevel = false; public string lastLevelName = "", currentLevelName = ""; @@ -73,7 +72,7 @@ namespace MCGalaxy { internal bool ChangeLevels = true, UseLevelList = false; internal List LevelList = new List(); - string lastLevelVote1 = "", lastLevelVote2 = ""; + string lastLevel1 = "", lastLevel2 = ""; int Level1Vote = 0, Level2Vote = 0, Level3Vote = 0; @@ -148,18 +147,17 @@ namespace MCGalaxy { aliveCount = alive.Count; } - public void ChangeLevel(string LevelName, bool changeMainLevel) - { - string next = LevelName; + void ChangeLevel(string next) { currentLevelName = next; queLevel = false; nextLevel = ""; Command.all.Find("load").Use(null, next.ToLower() + " 0"); + Player.GlobalMessage("The next map has been chosen - " + Colors.red + next.ToLower()); Player.GlobalMessage("Please wait while you are transfered."); string oldLevel = Server.mainLevel.name; - if (changeMainLevel) - Server.mainLevel = LevelInfo.Find(next.ToLower()); + if (Server.ZombieOnlyServer) + Server.mainLevel = LevelInfo.Find(next); Player[] online = PlayerInfo.Online.Items; foreach (Player pl in online) {