Fix random level picking not being random.

This commit is contained in:
UnknownShadow200 2016-03-14 10:44:26 +11:00
parent e68cf4edf6
commit 21c5a9c25b
2 changed files with 69 additions and 75 deletions

View File

@ -159,7 +159,7 @@ namespace MCGalaxy {
|| Math.Abs(pAlive.pos[2] - pKiller.pos[2]) > HitboxPrecision) || Math.Abs(pAlive.pos[2] - pKiller.pos[2]) > HitboxPrecision)
return; 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) pKiller != pAlive && pKiller.level.name == currentLevelName && pAlive.level.name == currentLevelName)
{ {
pAlive.infected = true; pAlive.infected = true;
@ -265,7 +265,7 @@ namespace MCGalaxy {
pl.blockCount = 50; pl.blockCount = 50;
pl.playersInfected = 0; pl.playersInfected = 0;
pl.money += money; pl.money += money;
pl.infected = false; pl.infected = false;
pl.color = pl.group.color; pl.color = pl.group.color;
if (pl.referee) { if (pl.referee) {
@ -286,85 +286,81 @@ namespace MCGalaxy {
playersString += p.group.color + p.DisplayName + Colors.white + ", "; playersString += p.group.color + p.DisplayName + Colors.white + ", ";
} }
} }
void ChooseNextLevel() void ChooseNextLevel() {
{ if (queLevel) { ChangeLevel(nextLevel); return; } // TODO: show global message of 'x level was queued'
if (queLevel) if (!ChangeLevels) return;
{
ChangeLevel(nextLevel, Server.ZombieOnlyServer);
}
try try
{ {
if (ChangeLevels) List<string> 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<string> 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 = ""; string selectedLevel1 = "", selectedLevel2 = "";
Random r = new Random(); Random r = new Random();
LevelChoice: LevelChoice:
int x = 0, x2 = 1; string level = levels[r.Next(0, levels.Count)];
string level = "", level2 = ""; string level2 = levels[r.Next(0, levels.Count)];
level = levels[r.Next(0, levels.Count)];
level2 = levels[r.Next(0, levels.Count)];
Level current = Server.mainLevel;
if (lastLevelVote1 == level || lastLevelVote2 == level2 || lastLevelVote1 == level2 || lastLevelVote2 == level || current == LevelInfo.Find(level) || currentZombieLevel == level || current == LevelInfo.Find(level2) || currentZombieLevel == level2) if (lastLevel1 == level || lastLevel2 == level2 || lastLevel1 == level2 ||
goto LevelChoice; lastLevel2 == level || currentLevelName == level || currentLevelName == level2) {
else if (selectedLevel1 == "") { selectedLevel1 = level; goto LevelChoice; } goto LevelChoice;
else } else if (selectedLevel1 == "") {
selectedLevel2 = level2; selectedLevel1 = level; goto LevelChoice;
} else {
Level1Vote = 0; Level2Vote = 0; Level3Vote = 0; selectedLevel2 = level2;
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;
} }
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<string> GetCandidateLevels() { List<string> GetCandidateLevels() {
if (UseLevelList) return LevelList; if (UseLevelList) return LevelList;
List<string> maps = new List<string>(); List<string> maps = new List<string>();
DirectoryInfo di = new DirectoryInfo("levels/"); DirectoryInfo di = new DirectoryInfo("levels/");
FileInfo[] fi = di.GetFiles("*.lvl"); FileInfo[] fi = di.GetFiles("*.lvl");
foreach (FileInfo fil in fi) foreach (FileInfo fil in fi)
maps.Add(fil.Name.Split('.')[0]); maps.Add(fil.Name.Split('.')[0]);
return maps; return maps;
} }
} }
} }

View File

@ -54,7 +54,6 @@ namespace MCGalaxy {
public bool RoundInProgress = false; public bool RoundInProgress = false;
public int aliveCount = 0; public int aliveCount = 0;
public string currentZombieLevel = "";
public static System.Timers.Timer timer; public static System.Timers.Timer timer;
public bool initialChangeLevel = false; public bool initialChangeLevel = false;
public string lastLevelName = "", currentLevelName = ""; public string lastLevelName = "", currentLevelName = "";
@ -73,7 +72,7 @@ namespace MCGalaxy {
internal bool ChangeLevels = true, UseLevelList = false; internal bool ChangeLevels = true, UseLevelList = false;
internal List<string> LevelList = new List<string>(); internal List<string> LevelList = new List<string>();
string lastLevelVote1 = "", lastLevelVote2 = ""; string lastLevel1 = "", lastLevel2 = "";
int Level1Vote = 0, Level2Vote = 0, Level3Vote = 0; int Level1Vote = 0, Level2Vote = 0, Level3Vote = 0;
@ -148,18 +147,17 @@ namespace MCGalaxy {
aliveCount = alive.Count; aliveCount = alive.Count;
} }
public void ChangeLevel(string LevelName, bool changeMainLevel) void ChangeLevel(string next) {
{
string next = LevelName;
currentLevelName = next; currentLevelName = next;
queLevel = false; queLevel = false;
nextLevel = ""; nextLevel = "";
Command.all.Find("load").Use(null, next.ToLower() + " 0"); Command.all.Find("load").Use(null, next.ToLower() + " 0");
Player.GlobalMessage("The next map has been chosen - " + Colors.red + next.ToLower()); Player.GlobalMessage("The next map has been chosen - " + Colors.red + next.ToLower());
Player.GlobalMessage("Please wait while you are transfered."); Player.GlobalMessage("Please wait while you are transfered.");
string oldLevel = Server.mainLevel.name; string oldLevel = Server.mainLevel.name;
if (changeMainLevel) if (Server.ZombieOnlyServer)
Server.mainLevel = LevelInfo.Find(next.ToLower()); Server.mainLevel = LevelInfo.Find(next);
Player[] online = PlayerInfo.Online.Items; Player[] online = PlayerInfo.Online.Items;
foreach (Player pl in online) { foreach (Player pl in online) {