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;