diff --git a/Commands/Fun/CmdMapSet.cs b/Commands/Fun/CmdMapSet.cs
index 648185ce6..2072af352 100644
--- a/Commands/Fun/CmdMapSet.cs
+++ b/Commands/Fun/CmdMapSet.cs
@@ -27,7 +27,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
- public override bool Enabled { get { return Server.ZombieModeOn || Server.lava.active; } }
+ public override bool Enabled { get { return Server.zombie.Running || Server.lava.active; } }
static char[] trimChars = {' '};
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/RateMapCmds.cs b/Commands/Fun/RateMapCmds.cs
index 40b386668..a5f8d5478 100644
--- a/Commands/Fun/RateMapCmds.cs
+++ b/Commands/Fun/RateMapCmds.cs
@@ -27,7 +27,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn || Server.lava.active; } }
+ public override bool Enabled { get { return Server.zombie.Running || Server.lava.active; } }
public override void Use(Player p, string message) {
if (p == null) { MessageInGameOnly(p); return; }
@@ -49,7 +49,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn || Server.lava.active; } }
+ public override bool Enabled { get { return Server.zombie.Running || Server.lava.active; } }
public override void Use(Player p, string message) {
if (p == null) { MessageInGameOnly(p); return; }
diff --git a/Commands/Fun/ZombieSurvival/CmdAlive.cs b/Commands/Fun/ZombieSurvival/CmdAlive.cs
index 8ec715994..f98b00e31 100644
--- a/Commands/Fun/ZombieSurvival/CmdAlive.cs
+++ b/Commands/Fun/ZombieSurvival/CmdAlive.cs
@@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdAlive() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdBounties.cs b/Commands/Fun/ZombieSurvival/CmdBounties.cs
index ce72e4280..c04db12ad 100644
--- a/Commands/Fun/ZombieSurvival/CmdBounties.cs
+++ b/Commands/Fun/ZombieSurvival/CmdBounties.cs
@@ -27,7 +27,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdBounties() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdBounty.cs b/Commands/Fun/ZombieSurvival/CmdBounty.cs
index 7f6d539fb..697dd9caf 100644
--- a/Commands/Fun/ZombieSurvival/CmdBounty.cs
+++ b/Commands/Fun/ZombieSurvival/CmdBounty.cs
@@ -26,7 +26,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public override void Use(Player p, string message) {
string[] args = message.Split(' ');
diff --git a/Commands/Fun/ZombieSurvival/CmdDisinfect.cs b/Commands/Fun/ZombieSurvival/CmdDisinfect.cs
index ffb6e4fd4..f5cff08a8 100644
--- a/Commands/Fun/ZombieSurvival/CmdDisinfect.cs
+++ b/Commands/Fun/ZombieSurvival/CmdDisinfect.cs
@@ -24,7 +24,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdDisInfect() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdEndRound.cs b/Commands/Fun/ZombieSurvival/CmdEndRound.cs
index 31fb5c0aa..56c591a79 100644
--- a/Commands/Fun/ZombieSurvival/CmdEndRound.cs
+++ b/Commands/Fun/ZombieSurvival/CmdEndRound.cs
@@ -24,7 +24,7 @@ namespace MCGalaxy.Commands
public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdEndRound() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdFliphead.cs b/Commands/Fun/ZombieSurvival/CmdFliphead.cs
index 025c76f26..092f6a0ba 100644
--- a/Commands/Fun/ZombieSurvival/CmdFliphead.cs
+++ b/Commands/Fun/ZombieSurvival/CmdFliphead.cs
@@ -24,7 +24,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdFlipHead() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdHuman.cs b/Commands/Fun/ZombieSurvival/CmdHuman.cs
index 167ef3681..24e60fc0f 100644
--- a/Commands/Fun/ZombieSurvival/CmdHuman.cs
+++ b/Commands/Fun/ZombieSurvival/CmdHuman.cs
@@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdHuman() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdInfect.cs b/Commands/Fun/ZombieSurvival/CmdInfect.cs
index 5e2331939..e80c69451 100644
--- a/Commands/Fun/ZombieSurvival/CmdInfect.cs
+++ b/Commands/Fun/ZombieSurvival/CmdInfect.cs
@@ -24,7 +24,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdInfect() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdInfected.cs b/Commands/Fun/ZombieSurvival/CmdInfected.cs
index 96600d759..4cd087b45 100644
--- a/Commands/Fun/ZombieSurvival/CmdInfected.cs
+++ b/Commands/Fun/ZombieSurvival/CmdInfected.cs
@@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdInfected() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdQueue.cs b/Commands/Fun/ZombieSurvival/CmdQueue.cs
index f9d621674..7ef603cc7 100644
--- a/Commands/Fun/ZombieSurvival/CmdQueue.cs
+++ b/Commands/Fun/ZombieSurvival/CmdQueue.cs
@@ -25,7 +25,7 @@ namespace MCGalaxy.Commands
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdQueue() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdReferee.cs b/Commands/Fun/ZombieSurvival/CmdReferee.cs
index 811d6b117..16eb0363f 100644
--- a/Commands/Fun/ZombieSurvival/CmdReferee.cs
+++ b/Commands/Fun/ZombieSurvival/CmdReferee.cs
@@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
- public override bool Enabled { get { return Server.ZombieModeOn; } }
+ public override bool Enabled { get { return Server.zombie.Running; } }
public CmdReferee() { }
public override void Use(Player p, string message) {
diff --git a/Commands/Fun/ZombieSurvival/CmdZombieGame.cs b/Commands/Fun/ZombieSurvival/CmdZombieGame.cs
index c3d8a5347..8ee53626e 100644
--- a/Commands/Fun/ZombieSurvival/CmdZombieGame.cs
+++ b/Commands/Fun/ZombieSurvival/CmdZombieGame.cs
@@ -58,7 +58,7 @@ namespace MCGalaxy.Commands
}
static void HandleStart(Player p, string message, string[] args) {
- if (Server.zombie.Status != ZombieGameStatus.NotStarted) {
+ if (Server.zombie.Running) {
Player.SendMessage(p, "There is already a Zombie Survival game currently in progress."); return;
}
if (args.Length == 2) {
@@ -75,7 +75,7 @@ namespace MCGalaxy.Commands
}
static void HandleStop(Player p, string message, string[] args) {
- if (Server.zombie.Status == ZombieGameStatus.NotStarted) {
+ if (!Server.zombie.Running) {
Player.SendMessage(p, "There is no Zombie Survival game currently in progress."); return;
}
Player.GlobalMessage("The current game of Zombie Survival will end this round!");
@@ -83,7 +83,7 @@ namespace MCGalaxy.Commands
}
static void HandleForceStop(Player p, string message, string[] args) {
- if (Server.zombie.Status == ZombieGameStatus.NotStarted) {
+ if (!Server.zombie.Running) {
Player.SendMessage(p, "There is no Zombie Survival game currently in progress."); return;
}
Server.s.Log("Zombie Survival ended forcefully by " + p.name);
diff --git a/Commands/Information/CmdTime.cs b/Commands/Information/CmdTime.cs
index 25a10f60b..cd952524c 100644
--- a/Commands/Information/CmdTime.cs
+++ b/Commands/Information/CmdTime.cs
@@ -14,7 +14,7 @@
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
-*/
+ */
using System;
using MCGalaxy.Games;
@@ -31,15 +31,15 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
string time = DateTime.Now.ToString("HH:mm:ss"); //DateTime.Now.ToString();
Player.SendMessage(p, "Server time is " + time);
- if (Server.zombie.Status != ZombieGameStatus.NotStarted) {
- int delta = (int)(Server.zombie.RoundEnd - DateTime.UtcNow).TotalSeconds;
- if (delta > 0) {
- Player.SendMessage(p, "&a" + delta + " %Sseconds until the round ends.");
- } else {
- delta = (int)(Server.zombie.RoundStart - DateTime.UtcNow).TotalSeconds;
- if (delta > 0)
- Player.SendMessage(p, "&a" + delta + " %Sseconds until the round starts.");
- }
+ if (!Server.zombie.Running) return;
+
+ int delta = (int)(Server.zombie.RoundEnd - DateTime.UtcNow).TotalSeconds;
+ if (delta > 0) {
+ Player.SendMessage(p, "&a" + delta + " %Sseconds until the round ends.");
+ } else {
+ delta = (int)(Server.zombie.RoundStart - DateTime.UtcNow).TotalSeconds;
+ if (delta > 0)
+ Player.SendMessage(p, "&a" + delta + " %Sseconds until the round starts.");
}
}
diff --git a/Commands/World/CmdGoto.cs b/Commands/World/CmdGoto.cs
index aa93b58f3..5880e6dcd 100644
--- a/Commands/World/CmdGoto.cs
+++ b/Commands/World/CmdGoto.cs
@@ -113,6 +113,7 @@ namespace MCGalaxy.Commands {
if (File.Exists("text/lockdown/map/" + message.ToLower())) {
Player.SendMessage(p, "The level " + message + " is locked."); return false;
}
+ if (!Server.zombie.PlayerCanJoinLevel(p, lvl, p.level)) return false;
p.Loading = true;
Player[] players = PlayerInfo.Online.Items;
@@ -153,8 +154,8 @@ namespace MCGalaxy.Commands {
}
internal static void CheckGamesJoin(Player p, Level oldLvl) {
- Server.lava.PlayerJoinedLevel(p, oldLvl);
- Server.zombie.PlayerJoinedLevel(p, oldLvl);
+ Server.lava.PlayerJoinedLevel(p, p.level, oldLvl);
+ Server.zombie.PlayerJoinedLevel(p, p.level, oldLvl);
if (p.inTNTwarsMap) p.canBuild = true;
TntWarsGame game = TntWarsGame.Find(p.level);
diff --git a/Commands/other/CmdServer.cs b/Commands/other/CmdServer.cs
index 93cb584f9..8c841a23c 100644
--- a/Commands/other/CmdServer.cs
+++ b/Commands/other/CmdServer.cs
@@ -175,7 +175,7 @@ namespace MCGalaxy.Commands
Server.voteKickVotesNeeded = 0;
//Zombie
- Server.ZombieModeOn = false;
+ Server.zombie.ResetState();
Server.startZombieModeOnStartup = false;
Server.zombie.noRespawn = true;
Server.zombie.noPillaring = true;
diff --git a/Games/IGame.cs b/Games/IGame.cs
index c994e2498..30609dccb 100644
--- a/Games/IGame.cs
+++ b/Games/IGame.cs
@@ -21,30 +21,43 @@ namespace MCGalaxy.Games {
public abstract class IGame {
+ /// Returns whether this game handed the player manually placing a block.
public virtual bool HandlesManualChange(Player p, ushort x, ushort y, ushort z,
byte action, byte tile, byte b) {
return false;
}
+ /// Returns whether this game handled the player moving to a new position.
public virtual bool HandlesMovement(Player p, ushort x, ushort y, ushort z,
byte rotX, byte rotY) {
return false;
}
+ /// Returns whether this game handled the player sending a chat message.
public virtual bool HandlesChatMessage(Player p, string message) {
return false;
}
+ /// Raised when a player joins the server.
public virtual void PlayerJoinedServer(Player p) { }
+ /// Raised when a player leaves the server.
public virtual void PlayerLeftServer(Player p) { }
+ /// Raised when a player joins this game.
public virtual void PlayerJoinedGame(Player p) { }
+ /// Raised when a player leaves this game.
public virtual void PlayerLeftGame(Player p) { }
- public virtual void PlayerJoinedLevel(Player p, Level oldLvl) { }
+ /// Raised when a player moves to a different map/level.
+ public virtual void PlayerJoinedLevel(Player p, Level lvl, Level oldLvl) { }
+ public virtual bool PlayerCanJoinLevel(Player p, Level lvl, Level oldLvl) {
+ return true;
+ }
+
+ /// Raised when a player's money amount changes.
public virtual void PlayerMoneyChanged(Player p) { }
}
}
diff --git a/Games/LavaSurvival/LavaSurvival.Game.cs b/Games/LavaSurvival/LavaSurvival.Game.cs
index 6583a75a9..52f2ed9ae 100644
--- a/Games/LavaSurvival/LavaSurvival.Game.cs
+++ b/Games/LavaSurvival/LavaSurvival.Game.cs
@@ -35,8 +35,8 @@ namespace MCGalaxy.Games {
return false;
}
- public override void PlayerJoinedLevel(Player p, Level oldLevl) {
- if (Server.lava.active && !Server.lava.sendingPlayers && Server.lava.map == p.level) {
+ public override void PlayerJoinedLevel(Player p, Level lvl, Level oldLevl) {
+ if (Server.lava.active && !Server.lava.sendingPlayers && Server.lava.map == lvl) {
if (Server.lava.roundActive) {
Server.lava.AnnounceRoundInfo(p);
Server.lava.AnnounceTimeLeft(!Server.lava.flooded, true, p);
diff --git a/Games/ZombieSurvival/ZombieGame.Core.cs b/Games/ZombieSurvival/ZombieGame.Core.cs
index b3a56c82c..655472b0d 100644
--- a/Games/ZombieSurvival/ZombieGame.Core.cs
+++ b/Games/ZombieSurvival/ZombieGame.Core.cs
@@ -39,7 +39,7 @@ namespace MCGalaxy.Games {
RoundInProgress = false;
RoundsDone++;
- if (Status == ZombieGameStatus.NotStarted) {
+ if (!Running) {
return;
} else if (Status == ZombieGameStatus.InfiniteRounds) {
DoRound();
@@ -61,7 +61,7 @@ namespace MCGalaxy.Games {
}
void DoRound() {
- if (Status == ZombieGameStatus.NotStarted) return;
+ if (!Running) return;
List players = DoRoundCountdown();
RoundInProgress = true;
Random random = new Random();
@@ -91,7 +91,7 @@ namespace MCGalaxy.Games {
UpdateAllPlayerStatus();
DoCoreGame(random);
- if (Status == ZombieGameStatus.NotStarted) {
+ if (!Running) {
Status = ZombieGameStatus.LastRound; return;
} else {
HandOutRewards();
@@ -112,19 +112,19 @@ namespace MCGalaxy.Games {
while (true) {
RoundStart = DateTime.UtcNow.AddSeconds(30);
CurLevel.ChatLevel("%4Round Start:%f 30...");
- Thread.Sleep(20000); if (!Server.ZombieModeOn) return null;
+ Thread.Sleep(20000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 10...");
- Thread.Sleep(10000); if (!Server.ZombieModeOn) return null;
+ Thread.Sleep(10000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 5...");
- Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
+ Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 4...");
- Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
+ Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 3...");
- Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
+ Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 2...");
- Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
+ Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 1...");
- Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
+ Thread.Sleep(1000); if (!Running) return null;
int nonRefPlayers = 0;
List players = new List();
@@ -241,7 +241,7 @@ namespace MCGalaxy.Games {
}
void EndRound(object sender, ElapsedEventArgs e) {
- if (Status == ZombieGameStatus.NotStarted) return;
+ if (!Running) return;
CurLevel.ChatLevel("%4Round End:%f 5"); Thread.Sleep(1000);
CurLevel.ChatLevel("%4Round End:%f 4"); Thread.Sleep(1000);
CurLevel.ChatLevel("%4Round End:%f 3"); Thread.Sleep(1000);
@@ -256,7 +256,7 @@ namespace MCGalaxy.Games {
RoundStart = DateTime.MinValue;
RoundEnd = DateTime.MinValue;
Bounties.Clear();
- if (Status == ZombieGameStatus.NotStarted) return;
+ if (!Running) return;
Player[] alive = Alive.Items;
CurLevel.ChatLevel(Colors.lime + "The game has ended!");
@@ -364,9 +364,7 @@ namespace MCGalaxy.Games {
Level1Vote = 0; Level2Vote = 0; Level3Vote = 0;
lastLevel1 = selectedLevel1; lastLevel2 = selectedLevel2;
-
- if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound)
- return;
+ if (!Running || Status == ZombieGameStatus.LastRound) return;
if (initialChangeLevel) {
Server.votingforlevel = true;
@@ -379,8 +377,7 @@ namespace MCGalaxy.Games {
Server.votingforlevel = false;
} else { Level1Vote = 1; Level2Vote = 0; Level3Vote = 0; }
- if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound)
- return;
+ if (!Running || Status == ZombieGameStatus.LastRound) return;
if (Level1Vote >= Level2Vote) {
if (Level3Vote > Level1Vote && Level3Vote > Level2Vote) {
diff --git a/Games/ZombieSurvival/ZombieGame.Game.cs b/Games/ZombieSurvival/ZombieGame.Game.cs
index b53cd217b..63457d146 100644
--- a/Games/ZombieSurvival/ZombieGame.Game.cs
+++ b/Games/ZombieSurvival/ZombieGame.Game.cs
@@ -24,8 +24,7 @@ namespace MCGalaxy.Games {
public override bool HandlesManualChange(Player p, ushort x, ushort y, ushort z,
byte action, byte tile, byte b) {
- if (Status == ZombieGameStatus.NotStarted
- || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
+ if (!Running || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (CurLevel.BuildType == BuildType.NoModify) {
p.RevertBlock(x, y, z); return true;
} else if (CurLevel.BuildType == BuildType.ModifyOnly
@@ -66,8 +65,7 @@ namespace MCGalaxy.Games {
public override bool HandlesMovement(Player p, ushort x, ushort y, ushort z,
byte rotX, byte rotY) {
- if (Status == ZombieGameStatus.NotStarted
- || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
+ if (!Running || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (!p.referee && noRespawn) {
if (p.pos[0] >= x + 70 || p.pos[0] <= x - 70 ) {
p.SendPos(0xFF, p.pos[0], p.pos[1], p.pos[2], p.rot[0], p.rot[1]);
@@ -82,8 +80,7 @@ namespace MCGalaxy.Games {
}
public override bool HandlesChatMessage(Player p, string message) {
- if (Status == ZombieGameStatus.NotStarted
- || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
+ if (!Running || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (Server.votingforlevel && HandleVote(p, message)) return true;
if (message[0] == '~' && message.Length > 1) {
@@ -119,23 +116,23 @@ namespace MCGalaxy.Games {
}
public override void PlayerJoinedServer(Player p) {
- if (Status == ZombieGameStatus.NotStarted || Server.ZombieOnlyServer) return;
+ if (!Running || Server.ZombieOnlyServer) return;
Player.SendMessage(p, "A Zombie Survival game is running! " +
"Type %T/g " + CurLevelName + " %Sto join.");
}
- public override void PlayerJoinedLevel(Player p, Level oldLvl) {
+ public override void PlayerJoinedLevel(Player p, Level lvl, Level oldLvl) {
p.SendCpeMessage(CpeMessageType.BottomRight2, "");
p.SendCpeMessage(CpeMessageType.BottomRight1, "");
- if (RoundInProgress && p.level.name.CaselessEq(CurLevelName)) {
- if (Status != ZombieGameStatus.NotStarted && p != null) {
+ if (RoundInProgress && lvl.name.CaselessEq(CurLevelName)) {
+ if (Running && p != null) {
p.SendMessage("You joined in the middle of a round. &cYou are now infected!");
p.blockCount = 50;
InfectPlayer(p);
}
}
- if (p.level.name.CaselessEq(CurLevelName)) {
+ if (lvl.name.CaselessEq(CurLevelName)) {
double startLeft = (RoundStart - DateTime.UtcNow).TotalSeconds;
if (startLeft >= 0)
p.SendMessage("%a" + (int)startLeft + " %Sseconds left until the round starts. %aRun!");
@@ -163,9 +160,13 @@ namespace MCGalaxy.Games {
if (oldLvl != null && oldLvl.name.CaselessEq(CurLevelName))
UpdateAllPlayerStatus();
}
+
+ public override bool PlayerCanJoinLevel(Player p, Level lvl, Level oldLvl) {
+ return base.PlayerCanJoinLevel(p, lvl, oldLvl);
+ }
public override void PlayerMoneyChanged(Player p) {
- if (Status == ZombieGameStatus.NotStarted || !p.level.name.CaselessEq(CurLevelName)) return;
+ if (!Running || !p.level.name.CaselessEq(CurLevelName)) return;
string moneyMsg = "&a" + p.money + " %S" + Server.moneys;
string stateMsg = " and you are " + (p.infected ? "&cdead" : "&aalive");
p.SendCpeMessage(CpeMessageType.Status3, moneyMsg + stateMsg);
diff --git a/Games/ZombieSurvival/ZombieGame.cs b/Games/ZombieSurvival/ZombieGame.cs
index fc88e4cbd..8ac248973 100644
--- a/Games/ZombieSurvival/ZombieGame.cs
+++ b/Games/ZombieSurvival/ZombieGame.cs
@@ -53,6 +53,9 @@ namespace MCGalaxy.Games {
/// Current round status of the game.
public ZombieGameStatus Status = ZombieGameStatus.NotStarted;
+ /// Gets whether zombie survival is currently running.
+ public bool Running { get { return Status != ZombieGameStatus.NotStarted; } }
+
/// Whether a round is currently in progress.
public bool RoundInProgress = false;
@@ -108,7 +111,6 @@ namespace MCGalaxy.Games {
public void Start(ZombieGameStatus status, int amount) {
if (UseLevelList && LevelList == null)
ChangeLevels = false;
- Server.ZombieModeOn = true;
Status = status;
RoundInProgress = false;
initialChangeLevel = false;
@@ -122,7 +124,7 @@ namespace MCGalaxy.Games {
/// If there are no infected players left, randomly selected one of the alive players to continue the infection.
public void AssignFirstZombie() {
- if (Status == ZombieGameStatus.NotStarted || !RoundInProgress || Infected.Count > 0) return;
+ if (!Running || !RoundInProgress || Infected.Count > 0) return;
Random random = new Random();
Player[] alive = Alive.Items;
if (alive.Length == 0) return;
@@ -202,7 +204,6 @@ namespace MCGalaxy.Games {
Status = ZombieGameStatus.NotStarted;
MaxRounds = 0;
initialChangeLevel = false;
- Server.ZombieModeOn = false;
RoundInProgress = false;
RoundStart = DateTime.MinValue;
RoundEnd = DateTime.MinValue;
diff --git a/Levels/Level.cs b/Levels/Level.cs
index 74c40641b..68f05f897 100644
--- a/Levels/Level.cs
+++ b/Levels/Level.cs
@@ -284,7 +284,7 @@ namespace MCGalaxy
public static event OnLevelLoaded LevelLoaded;
public bool ShouldSaveLevelFile() {
- if (Server.ZombieModeOn &&
+ if (Server.zombie.Running &&
(name.CaselessEq(Server.zombie.CurLevelName)
|| name.CaselessEq(Server.zombie.LastLevelName))) return false;
if (Server.lava.active && Server.lava.HasMap(name)) return false;
diff --git a/Player/Player.Handlers.cs b/Player/Player.Handlers.cs
index d96096d74..2341f03ad 100644
--- a/Player/Player.Handlers.cs
+++ b/Player/Player.Handlers.cs
@@ -58,7 +58,7 @@ namespace MCGalaxy {
RevertBlock(x, y, z); return;
}
- if (Server.ZombieModeOn && Server.zombie.HandlesManualChange(this, x, y, z, action, type, b))
+ if (Server.zombie.Running && Server.zombie.HandlesManualChange(this, x, y, z, action, type, b))
return;
if ( Server.lava.active && Server.lava.HasPlayer(this) && Server.lava.IsPlayerDead(this) ) {
@@ -905,7 +905,7 @@ return;
if (Server.Countdown.HandlesMovement(this, x, y, z, rotx, roty))
return;
- if (Server.ZombieModeOn && Server.zombie.HandlesMovement(this, x, y, z, rotx, roty))
+ if (Server.zombie.Running && Server.zombie.HandlesMovement(this, x, y, z, rotx, roty))
return;
if (OnMove != null) OnMove(this, x, y, z);
diff --git a/Player/Player.cs b/Player/Player.cs
index cb888d1b5..99376b545 100644
--- a/Player/Player.cs
+++ b/Player/Player.cs
@@ -510,7 +510,7 @@ namespace MCGalaxy {
internal static void SpawnEntity(Player p, Player dst, byte id, ushort x, ushort y, ushort z,
byte rotx, byte roty, string possession = "") {
- if (!Server.ZombieModeOn || !p.infected) {
+ if (!Server.zombie.Running || !p.infected) {
dst.SendSpawn(id, p.color + p.name + possession, x, y, z, rotx, roty); return;
}
@@ -864,7 +864,7 @@ Next: continue;
}
public void OnMoneyChanged() {
- if (Server.ZombieModeOn) Server.zombie.PlayerMoneyChanged(this);
+ if (Server.zombie.Running) Server.zombie.PlayerMoneyChanged(this);
if (Server.lava.active) Server.lava.PlayerMoneyChanged(this);
}
diff --git a/Server/Server.cs b/Server/Server.cs
index 100153217..287458ef0 100644
--- a/Server/Server.cs
+++ b/Server/Server.cs
@@ -154,7 +154,6 @@ namespace MCGalaxy
//Zombie
public static ZombieGame zombie;
- public static bool ZombieModeOn = false;
public static bool startZombieModeOnStartup = false;
public static bool ZombieOnlyServer = true;
public static bool bufferblocks = true;