mirror of
https://github.com/ClassiCube/MCGalaxy.git
synced 2025-09-28 16:07:07 -04:00
Allow configuring round min/max time.
This commit is contained in:
parent
bdf297c4c1
commit
16997d8ed5
@ -43,8 +43,8 @@ namespace MCGalaxy.Commands {
|
|||||||
if (args.Length == 1) { Player.SendMessage(p, "You need to provide a value."); return; }
|
if (args.Length == 1) { Player.SendMessage(p, "You need to provide a value."); return; }
|
||||||
|
|
||||||
if (args[0].CaselessEq("author") || args[0].CaselessEq("authors")) {
|
if (args[0].CaselessEq("author") || args[0].CaselessEq("authors")) {
|
||||||
p.level.Authors = args[1].Replace(" ", "%S, ");
|
p.level.Authors = args[1].Replace(" ", "%S, ");
|
||||||
Player.SendMessage(p, "Sets the authors of the map to: " + args[1]);
|
Player.SendMessage(p, "Sets the authors of the map to: " + args[1]);
|
||||||
} else if (args[0].CaselessEq("pillar") || args[0].CaselessEq("pillaring")) {
|
} else if (args[0].CaselessEq("pillar") || args[0].CaselessEq("pillaring")) {
|
||||||
bool value;
|
bool value;
|
||||||
if (!bool.TryParse(args[1], out value)) {
|
if (!bool.TryParse(args[1], out value)) {
|
||||||
@ -59,6 +59,28 @@ namespace MCGalaxy.Commands {
|
|||||||
}
|
}
|
||||||
p.level.BuildType = value;
|
p.level.BuildType = value;
|
||||||
Player.SendMessage(p, "Set build type to: " + value);
|
Player.SendMessage(p, "Set build type to: " + value);
|
||||||
|
} else if (args[0].CaselessEq("minroundtime") || args[0].CaselessEq("minround")) {
|
||||||
|
byte time;
|
||||||
|
if (!byte.TryParse(args[1], out time) || time == 0 || time > 10) {
|
||||||
|
Player.SendMessage(p, "Minutes must be an integer between 1 and 10."); return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time > p.level.MaxRoundTime) {
|
||||||
|
Player.SendMessage(p, "Min round time must be less than or equal to max round time"); return;
|
||||||
|
}
|
||||||
|
p.level.MinRoundTime = time;
|
||||||
|
Player.SendMessage(p, "Set min round time to: " + time + " minutes");
|
||||||
|
} else if (args[0].CaselessEq("maxroundtime") || args[0].CaselessEq("maxround")) {
|
||||||
|
byte time;
|
||||||
|
if (!byte.TryParse(args[1], out time) || time == 0 || time > 10) {
|
||||||
|
Player.SendMessage(p, "Minutes must be an integer between 1 and 10."); return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time < p.level.MinRoundTime) {
|
||||||
|
Player.SendMessage(p, "Max round time must be greater than or equal to min round time"); return;
|
||||||
|
}
|
||||||
|
p.level.MaxRoundTime = time;
|
||||||
|
Player.SendMessage(p, "Set max round time to: " + time + " minutes");
|
||||||
} else {
|
} else {
|
||||||
Player.SendMessage(p, "Unrecognised property \"" + args[0] + "\"."); return;
|
Player.SendMessage(p, "Unrecognised property \"" + args[0] + "\"."); return;
|
||||||
}
|
}
|
||||||
@ -66,13 +88,13 @@ namespace MCGalaxy.Commands {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public override void Help(Player p) {
|
public override void Help(Player p) {
|
||||||
Player.SendMessage(p, "%T/mapset author [name1] <name2>...");
|
Player.SendMessage(p, "%HThis sets the various options for games on this map.");
|
||||||
Player.SendMessage(p, "%HSets the authors of the current map. " +
|
Player.SendMessage(p, "%T/mapset authors [name1] <name2> <name3>...");
|
||||||
"This is shown to players at the start of rounds in various games.");
|
Player.SendMessage(p, "%HThis is shown to players at the start of rounds.");
|
||||||
Player.SendMessage(p, "%T/mapset pillaring [true/false]");
|
Player.SendMessage(p, "%T/mapset pillaring [true/false]");
|
||||||
Player.SendMessage(p, "%HSets whether players can pillar on this map in various games.");
|
|
||||||
Player.SendMessage(p, "%T/mapset build [normal/modifyonly/nomodify]");
|
Player.SendMessage(p, "%T/mapset build [normal/modifyonly/nomodify]");
|
||||||
Player.SendMessage(p, "%HSets how players are allowed to change blocks.");
|
Player.SendMessage(p, "%T/mapset minroundtime [minutes]");
|
||||||
|
Player.SendMessage(p, "%T/mapset maxroundtime [minutes]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ namespace MCGalaxy.Commands {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.pledgeSurvive = true;
|
p.pledgeSurvive = true;
|
||||||
Server.zombie.CurrentLevel
|
Server.zombie.CurLevel
|
||||||
.ChatLevel(p.color + p.DisplayName + " %Spledges that they will not succumb to the infection!");
|
.ChatLevel(p.color + p.DisplayName + " %Spledges that they will not succumb to the infection!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,8 +43,8 @@ namespace MCGalaxy.Commands
|
|||||||
if (LevelInfo.ExistsOffline(value)) {
|
if (LevelInfo.ExistsOffline(value)) {
|
||||||
p.SendMessage(value + " was queued.");
|
p.SendMessage(value + " was queued.");
|
||||||
Server.zombie.QueuedLevel = value.ToLower();
|
Server.zombie.QueuedLevel = value.ToLower();
|
||||||
if (Server.zombie.CurrentLevel != null)
|
if (Server.zombie.CurLevel != null)
|
||||||
Server.zombie.CurrentLevel.ChatLevel(value + " was queued as the next map.");
|
Server.zombie.CurLevel.ChatLevel(value + " was queued as the next map.");
|
||||||
} else {
|
} else {
|
||||||
p.SendMessage("Level does not exist.");
|
p.SendMessage("Level does not exist.");
|
||||||
}
|
}
|
||||||
|
@ -67,13 +67,14 @@ namespace MCGalaxy.Games {
|
|||||||
Random random = new Random();
|
Random random = new Random();
|
||||||
Player first = PickFirstZombie(random, players);
|
Player first = PickFirstZombie(random, players);
|
||||||
|
|
||||||
CurrentLevel.ChatLevel(first.color + first.name + " %Sstarted the infection!");
|
CurLevel.ChatLevel(first.color + first.name + " %Sstarted the infection!");
|
||||||
first.infected = true;
|
first.infected = true;
|
||||||
UpdatePlayerColor(first, InfectCol);
|
UpdatePlayerColor(first, InfectCol);
|
||||||
|
|
||||||
RoundInProgress = true;
|
RoundInProgress = true;
|
||||||
int roundMins = random.Next(4, 7);
|
int roundMins = random.Next(CurLevel.MinRoundTime, CurLevel.MaxRoundTime);
|
||||||
CurrentLevel.ChatLevel("The round will last for " + roundMins + " minutes!");
|
string suffix = roundMins == 1 ? " %Sminute!" : " %Sminutes!";
|
||||||
|
CurLevel.ChatLevel("The round will last for &a" + roundMins + suffix);
|
||||||
RoundEnd = DateTime.UtcNow.AddMinutes(roundMins);
|
RoundEnd = DateTime.UtcNow.AddMinutes(roundMins);
|
||||||
timer = new System.Timers.Timer(roundMins * 60 * 1000);
|
timer = new System.Timers.Timer(roundMins * 60 * 1000);
|
||||||
timer.Elapsed += new ElapsedEventHandler(EndRound);
|
timer.Elapsed += new ElapsedEventHandler(EndRound);
|
||||||
@ -102,40 +103,40 @@ namespace MCGalaxy.Games {
|
|||||||
first = QueuedZombie != null ?
|
first = QueuedZombie != null ?
|
||||||
PlayerInfo.Find(QueuedZombie) : players[random.Next(players.Count)];
|
PlayerInfo.Find(QueuedZombie) : players[random.Next(players.Count)];
|
||||||
QueuedZombie = null;
|
QueuedZombie = null;
|
||||||
} while (first == null || !first.level.name.CaselessEq(CurrentLevelName));
|
} while (first == null || !first.level.name.CaselessEq(CurLevelName));
|
||||||
return first;
|
return first;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Player> DoRoundCountdown() {
|
List<Player> DoRoundCountdown() {
|
||||||
while (true) {
|
while (true) {
|
||||||
RoundStart = DateTime.UtcNow.AddSeconds(30);
|
RoundStart = DateTime.UtcNow.AddSeconds(30);
|
||||||
CurrentLevel.ChatLevel("%4Round Start:%f 30...");
|
CurLevel.ChatLevel("%4Round Start:%f 30...");
|
||||||
Thread.Sleep(20000); if (!Server.ZombieModeOn) return null;
|
Thread.Sleep(20000); if (!Server.ZombieModeOn) return null;
|
||||||
CurrentLevel.ChatLevel("%4Round Start:%f 10...");
|
CurLevel.ChatLevel("%4Round Start:%f 10...");
|
||||||
Thread.Sleep(10000); if (!Server.ZombieModeOn) return null;
|
Thread.Sleep(10000); if (!Server.ZombieModeOn) return null;
|
||||||
CurrentLevel.ChatLevel("%4Round Start:%f 5...");
|
CurLevel.ChatLevel("%4Round Start:%f 5...");
|
||||||
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
||||||
CurrentLevel.ChatLevel("%4Round Start:%f 4...");
|
CurLevel.ChatLevel("%4Round Start:%f 4...");
|
||||||
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
||||||
CurrentLevel.ChatLevel("%4Round Start:%f 3...");
|
CurLevel.ChatLevel("%4Round Start:%f 3...");
|
||||||
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
||||||
CurrentLevel.ChatLevel("%4Round Start:%f 2...");
|
CurLevel.ChatLevel("%4Round Start:%f 2...");
|
||||||
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
||||||
CurrentLevel.ChatLevel("%4Round Start:%f 1...");
|
CurLevel.ChatLevel("%4Round Start:%f 1...");
|
||||||
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
|
||||||
int nonRefPlayers = 0;
|
int nonRefPlayers = 0;
|
||||||
List<Player> players = new List<Player>();
|
List<Player> players = new List<Player>();
|
||||||
|
|
||||||
Player[] online = PlayerInfo.Online.Items;
|
Player[] online = PlayerInfo.Online.Items;
|
||||||
foreach (Player p in online) {
|
foreach (Player p in online) {
|
||||||
if (!p.referee && p.level.name.CaselessEq(CurrentLevelName)) {
|
if (!p.referee && p.level.name.CaselessEq(CurLevelName)) {
|
||||||
players.Add(p);
|
players.Add(p);
|
||||||
nonRefPlayers++;
|
nonRefPlayers++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nonRefPlayers >= 2) return players;
|
if (nonRefPlayers >= 2) return players;
|
||||||
CurrentLevel.ChatLevel(Colors.red + "ERROR: Need 2 or more players to play");
|
CurLevel.ChatLevel(Colors.red + "ERROR: Need 2 or more players to play");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -164,7 +165,7 @@ namespace MCGalaxy.Games {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!pAlive.infected && pKiller.infected && !pAlive.referee && !pKiller.referee && pKiller != pAlive
|
if (!pAlive.infected && pKiller.infected && !pAlive.referee && !pKiller.referee && pKiller != pAlive
|
||||||
&& pKiller.level.name.CaselessEq(CurrentLevelName) && pAlive.level.name.CaselessEq(CurrentLevelName))
|
&& pKiller.level.name.CaselessEq(CurLevelName) && pAlive.level.name.CaselessEq(CurLevelName))
|
||||||
{
|
{
|
||||||
InfectPlayer(pAlive);
|
InfectPlayer(pAlive);
|
||||||
aliveChanged = true;
|
aliveChanged = true;
|
||||||
@ -176,7 +177,7 @@ namespace MCGalaxy.Games {
|
|||||||
pKiller.SendMessage("You gained " + (2 + infectCombo) + " " + Server.moneys);
|
pKiller.SendMessage("You gained " + (2 + infectCombo) + " " + Server.moneys);
|
||||||
pKiller.money += 2 + infectCombo;
|
pKiller.money += 2 + infectCombo;
|
||||||
pKiller.OnMoneyChanged();
|
pKiller.OnMoneyChanged();
|
||||||
CurrentLevel.ChatLevel(pKiller.FullName + " is on a rampage! " + (infectCombo + 1) + " infections in a row!");
|
CurLevel.ChatLevel(pKiller.FullName + " is on a rampage! " + (infectCombo + 1) + " infections in a row!");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
infectCombo = 0;
|
infectCombo = 0;
|
||||||
@ -184,7 +185,7 @@ namespace MCGalaxy.Games {
|
|||||||
|
|
||||||
lastPlayerToInfect = pKiller.name;
|
lastPlayerToInfect = pKiller.name;
|
||||||
pKiller.playersInfected++;
|
pKiller.playersInfected++;
|
||||||
CurrentLevel.ChatLevel(String.Format(
|
CurLevel.ChatLevel(String.Format(
|
||||||
messages[random.Next(messages.Length)],
|
messages[random.Next(messages.Length)],
|
||||||
Colors.red + pKiller.DisplayName + Colors.yellow,
|
Colors.red + pKiller.DisplayName + Colors.yellow,
|
||||||
Colors.red + pAlive.DisplayName + Colors.yellow));
|
Colors.red + pAlive.DisplayName + Colors.yellow));
|
||||||
@ -203,7 +204,7 @@ namespace MCGalaxy.Games {
|
|||||||
void CheckHumanPledge(Player pAlive) {
|
void CheckHumanPledge(Player pAlive) {
|
||||||
if (!pAlive.pledgeSurvive) return;
|
if (!pAlive.pledgeSurvive) return;
|
||||||
pAlive.pledgeSurvive = false;
|
pAlive.pledgeSurvive = false;
|
||||||
CurrentLevel.ChatLevel(pAlive.FullName + "%Sbroke their pledge of not being infected.");
|
CurLevel.ChatLevel(pAlive.FullName + "%Sbroke their pledge of not being infected.");
|
||||||
pAlive.money = Math.Max(pAlive.money - 2, 0);
|
pAlive.money = Math.Max(pAlive.money - 2, 0);
|
||||||
pAlive.OnMoneyChanged();
|
pAlive.OnMoneyChanged();
|
||||||
}
|
}
|
||||||
@ -213,7 +214,7 @@ namespace MCGalaxy.Games {
|
|||||||
if (Bounties.TryGetValue(pAlive.name, out bounty))
|
if (Bounties.TryGetValue(pAlive.name, out bounty))
|
||||||
Bounties.Remove(pAlive.name);
|
Bounties.Remove(pAlive.name);
|
||||||
if (bounty != null) {
|
if (bounty != null) {
|
||||||
CurrentLevel.ChatLevel(pKiller.FullName + " %Scollected the bounty of &a" +
|
CurLevel.ChatLevel(pKiller.FullName + " %Scollected the bounty of &a" +
|
||||||
bounty.Amount + " %S" + Server.moneys + " on " + pAlive.FullName + "%S.");
|
bounty.Amount + " %S" + Server.moneys + " on " + pAlive.FullName + "%S.");
|
||||||
bounty.Origin.money = Math.Max(0, bounty.Origin.money - bounty.Amount);
|
bounty.Origin.money = Math.Max(0, bounty.Origin.money - bounty.Amount);
|
||||||
bounty.Origin.OnMoneyChanged();
|
bounty.Origin.OnMoneyChanged();
|
||||||
@ -231,11 +232,11 @@ namespace MCGalaxy.Games {
|
|||||||
|
|
||||||
void EndRound(object sender, ElapsedEventArgs e) {
|
void EndRound(object sender, ElapsedEventArgs e) {
|
||||||
if (Status == ZombieGameStatus.NotStarted) return;
|
if (Status == ZombieGameStatus.NotStarted) return;
|
||||||
CurrentLevel.ChatLevel("%4Round End:%f 5"); Thread.Sleep(1000);
|
CurLevel.ChatLevel("%4Round End:%f 5"); Thread.Sleep(1000);
|
||||||
CurrentLevel.ChatLevel("%4Round End:%f 4"); Thread.Sleep(1000);
|
CurLevel.ChatLevel("%4Round End:%f 4"); Thread.Sleep(1000);
|
||||||
CurrentLevel.ChatLevel("%4Round End:%f 3"); Thread.Sleep(1000);
|
CurLevel.ChatLevel("%4Round End:%f 3"); Thread.Sleep(1000);
|
||||||
CurrentLevel.ChatLevel("%4Round End:%f 2"); Thread.Sleep(1000);
|
CurLevel.ChatLevel("%4Round End:%f 2"); Thread.Sleep(1000);
|
||||||
CurrentLevel.ChatLevel("%4Round End:%f 1"); Thread.Sleep(1000);
|
CurLevel.ChatLevel("%4Round End:%f 1"); Thread.Sleep(1000);
|
||||||
HandOutRewards();
|
HandOutRewards();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -248,10 +249,10 @@ namespace MCGalaxy.Games {
|
|||||||
if (Status == ZombieGameStatus.NotStarted) return;
|
if (Status == ZombieGameStatus.NotStarted) return;
|
||||||
|
|
||||||
Player[] alive = Alive.Items;
|
Player[] alive = Alive.Items;
|
||||||
CurrentLevel.ChatLevel(Colors.lime + "The game has ended!");
|
CurLevel.ChatLevel(Colors.lime + "The game has ended!");
|
||||||
if (alive.Length == 0) CurrentLevel.ChatLevel(Colors.maroon + "Zombies have won this round.");
|
if (alive.Length == 0) CurLevel.ChatLevel(Colors.maroon + "Zombies have won this round.");
|
||||||
else if (alive.Length == 1) CurrentLevel.ChatLevel(Colors.green + "Congratulations to the sole survivor:");
|
else if (alive.Length == 1) CurLevel.ChatLevel(Colors.green + "Congratulations to the sole survivor:");
|
||||||
else CurrentLevel.ChatLevel(Colors.green + "Congratulations to the survivors:");
|
else CurLevel.ChatLevel(Colors.green + "Congratulations to the survivors:");
|
||||||
|
|
||||||
timer.Enabled = false;
|
timer.Enabled = false;
|
||||||
string playersString = "";
|
string playersString = "";
|
||||||
@ -273,12 +274,12 @@ namespace MCGalaxy.Games {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CurrentLevel.ChatLevel(playersString);
|
CurLevel.ChatLevel(playersString);
|
||||||
online = PlayerInfo.Online.Items;
|
online = PlayerInfo.Online.Items;
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
foreach (Player pl in online) {
|
foreach (Player pl in online) {
|
||||||
int money = 0;
|
int money = 0;
|
||||||
if (!pl.level.name.CaselessEq(CurrentLevelName)) continue;
|
if (!pl.level.name.CaselessEq(CurLevelName)) continue;
|
||||||
bool inBlock = pl.CheckIfInsideBlock();
|
bool inBlock = pl.CheckIfInsideBlock();
|
||||||
|
|
||||||
if (!inBlock && alive.Length == 0) {
|
if (!inBlock && alive.Length == 0) {
|
||||||
@ -317,7 +318,7 @@ namespace MCGalaxy.Games {
|
|||||||
p.infected = false;
|
p.infected = false;
|
||||||
p.playersInfected = 0;
|
p.playersInfected = 0;
|
||||||
|
|
||||||
if (p.level.name.CaselessEq(CurrentLevelName))
|
if (p.level.name.CaselessEq(CurLevelName))
|
||||||
playersString += p.color + p.DisplayName + Colors.white + ", ";
|
playersString += p.color + p.DisplayName + Colors.white + ", ";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -339,8 +340,8 @@ namespace MCGalaxy.Games {
|
|||||||
string level = levels[r.Next(0, levels.Count)];
|
string level = levels[r.Next(0, levels.Count)];
|
||||||
string level2 = levels[r.Next(0, levels.Count)];
|
string level2 = levels[r.Next(0, levels.Count)];
|
||||||
|
|
||||||
if (level == lastLevel1 || level == lastLevel2 || level == CurrentLevelName ||
|
if (level == lastLevel1 || level == lastLevel2 || level == CurLevelName ||
|
||||||
level2 == lastLevel1 || level2 == lastLevel2 || level2 == CurrentLevelName ||
|
level2 == lastLevel1 || level2 == lastLevel2 || level2 == CurLevelName ||
|
||||||
level == selectedLevel1) {
|
level == selectedLevel1) {
|
||||||
goto LevelChoice;
|
goto LevelChoice;
|
||||||
} else if (selectedLevel1 == "") {
|
} else if (selectedLevel1 == "") {
|
||||||
@ -357,7 +358,7 @@ namespace MCGalaxy.Games {
|
|||||||
|
|
||||||
if (initialChangeLevel) {
|
if (initialChangeLevel) {
|
||||||
Server.votingforlevel = true;
|
Server.votingforlevel = true;
|
||||||
CurrentLevel.ChatLevel(" " + Colors.black + "Level Vote: %S" + selectedLevel1 + ", " + selectedLevel2 +
|
CurLevel.ChatLevel(" " + Colors.black + "Level Vote: %S" + selectedLevel1 + ", " + selectedLevel2 +
|
||||||
" or random " + "(" + Colors.lime + "1%S/" + Colors.red + "2%S/" + Colors.blue + "3%S)");
|
" or random " + "(" + Colors.lime + "1%S/" + Colors.red + "2%S/" + Colors.blue + "3%S)");
|
||||||
System.Threading.Thread.Sleep(15000);
|
System.Threading.Thread.Sleep(15000);
|
||||||
Server.votingforlevel = false;
|
Server.votingforlevel = false;
|
||||||
|
@ -25,15 +25,15 @@ namespace MCGalaxy.Games {
|
|||||||
public override bool HandlesManualChange(Player p, ushort x, ushort y, ushort z,
|
public override bool HandlesManualChange(Player p, ushort x, ushort y, ushort z,
|
||||||
byte action, byte tile, byte b) {
|
byte action, byte tile, byte b) {
|
||||||
if (Status == ZombieGameStatus.NotStarted
|
if (Status == ZombieGameStatus.NotStarted
|
||||||
|| (p.level == null || !p.level.name.CaselessEq(CurrentLevelName))) return false;
|
|| (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
|
||||||
if (CurrentLevel.BuildType == BuildType.NoModify) {
|
if (CurLevel.BuildType == BuildType.NoModify) {
|
||||||
p.RevertBlock(x, y, z); return true;
|
p.RevertBlock(x, y, z); return true;
|
||||||
} else if (CurrentLevel.BuildType == BuildType.ModifyOnly
|
} else if (CurLevel.BuildType == BuildType.ModifyOnly
|
||||||
&& p.level.GetTile(x, y, z) == Block.op_air) {
|
&& p.level.GetTile(x, y, z) == Block.op_air) {
|
||||||
p.RevertBlock(x, y, z); return true;
|
p.RevertBlock(x, y, z); return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action == 1 && !CurrentLevel.Pillaring && !p.referee) {
|
if (action == 1 && !CurLevel.Pillaring && !p.referee) {
|
||||||
if (p.lastYblock == y - 1 && p.lastXblock == x && p.lastZblock == z ) {
|
if (p.lastYblock == y - 1 && p.lastXblock == x && p.lastZblock == z ) {
|
||||||
p.blocksStacked++;
|
p.blocksStacked++;
|
||||||
} else {
|
} else {
|
||||||
@ -50,7 +50,7 @@ namespace MCGalaxy.Games {
|
|||||||
p.lastXblock = x; p.lastYblock = y; p.lastZblock = z;
|
p.lastXblock = x; p.lastYblock = y; p.lastZblock = z;
|
||||||
|
|
||||||
if (action == 1 || (action == 0 && p.painting)) {
|
if (action == 1 || (action == 0 && p.painting)) {
|
||||||
if (!p.level.name.CaselessEq(CurrentLevelName) || p.referee) return false;
|
if (!p.level.name.CaselessEq(CurLevelName) || p.referee) return false;
|
||||||
|
|
||||||
if (p.blockCount == 0 ) {
|
if (p.blockCount == 0 ) {
|
||||||
p.SendMessage("You have no blocks left.");
|
p.SendMessage("You have no blocks left.");
|
||||||
@ -67,7 +67,7 @@ namespace MCGalaxy.Games {
|
|||||||
public override bool HandlesMovement(Player p, ushort x, ushort y, ushort z,
|
public override bool HandlesMovement(Player p, ushort x, ushort y, ushort z,
|
||||||
byte rotX, byte rotY) {
|
byte rotX, byte rotY) {
|
||||||
if (Status == ZombieGameStatus.NotStarted
|
if (Status == ZombieGameStatus.NotStarted
|
||||||
|| (p.level == null || !p.level.name.CaselessEq(CurrentLevelName))) return false;
|
|| (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
|
||||||
if (!p.referee && noRespawn) {
|
if (!p.referee && noRespawn) {
|
||||||
if (p.pos[0] >= x + 70 || p.pos[0] <= x - 70 ) {
|
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]);
|
p.SendPos(0xFF, p.pos[0], p.pos[1], p.pos[2], p.rot[0], p.rot[1]);
|
||||||
@ -83,7 +83,7 @@ namespace MCGalaxy.Games {
|
|||||||
|
|
||||||
public override bool HandlesChatMessage(Player p, string message) {
|
public override bool HandlesChatMessage(Player p, string message) {
|
||||||
if (Status == ZombieGameStatus.NotStarted
|
if (Status == ZombieGameStatus.NotStarted
|
||||||
|| (p.level == null || !p.level.name.CaselessEq(CurrentLevelName))) return false;
|
|| (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
|
||||||
if (Server.votingforlevel && HandleVote(p, message)) return true;
|
if (Server.votingforlevel && HandleVote(p, message)) return true;
|
||||||
|
|
||||||
if (message[0] == '~' && message.Length > 1) {
|
if (message[0] == '~' && message.Length > 1) {
|
||||||
@ -125,11 +125,11 @@ namespace MCGalaxy.Games {
|
|||||||
public override void PlayerJoinedServer(Player p) {
|
public override void PlayerJoinedServer(Player p) {
|
||||||
if (Status == ZombieGameStatus.NotStarted || Server.ZombieOnlyServer) return;
|
if (Status == ZombieGameStatus.NotStarted || Server.ZombieOnlyServer) return;
|
||||||
Player.SendMessage(p, "A Zombie Survival game is running! " +
|
Player.SendMessage(p, "A Zombie Survival game is running! " +
|
||||||
"Type %T/g " + CurrentLevelName + " %Sto join.");
|
"Type %T/g " + CurLevelName + " %Sto join.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PlayerJoinedLevel(Player p, Level oldLvl) {
|
public override void PlayerJoinedLevel(Player p, Level oldLvl) {
|
||||||
if (RoundInProgress && p.level.name.CaselessEq(CurrentLevelName)) {
|
if (RoundInProgress && p.level.name.CaselessEq(CurLevelName)) {
|
||||||
if (Status != ZombieGameStatus.NotStarted && p != null) {
|
if (Status != ZombieGameStatus.NotStarted && p != null) {
|
||||||
p.SendMessage("You joined in the middle of a round. &cYou are now infected!");
|
p.SendMessage("You joined in the middle of a round. &cYou are now infected!");
|
||||||
p.blockCount = 50;
|
p.blockCount = 50;
|
||||||
@ -137,18 +137,18 @@ namespace MCGalaxy.Games {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p.level.name.CaselessEq(CurrentLevelName)) {
|
if (p.level.name.CaselessEq(CurLevelName)) {
|
||||||
double startLeft = (RoundStart - DateTime.UtcNow).TotalSeconds;
|
double startLeft = (RoundStart - DateTime.UtcNow).TotalSeconds;
|
||||||
if (startLeft >= 0)
|
if (startLeft >= 0)
|
||||||
p.SendMessage("%a" + (int)startLeft + " %Sseconds left until the round starts. %aRun!");
|
p.SendMessage("%a" + (int)startLeft + " %Sseconds left until the round starts. %aRun!");
|
||||||
p.SendMessage("This map has &a" + CurrentLevel.Likes +
|
p.SendMessage("This map has &a" + CurLevel.Likes +
|
||||||
" likes %Sand &c" + CurrentLevel.Dislikes + " dislikes");
|
" likes %Sand &c" + CurLevel.Dislikes + " dislikes");
|
||||||
p.SendCpeMessage(CpeMessageType.Status2,
|
p.SendCpeMessage(CpeMessageType.Status2,
|
||||||
"%SPillaring " + (CurrentLevel.Pillaring ? "&aYes" : "&cNo") +
|
"%SPillaring " + (CurLevel.Pillaring ? "&aYes" : "&cNo") +
|
||||||
"%S, Type is &a" + CurrentLevel.BuildType);
|
"%S, Type is &a" + CurLevel.BuildType);
|
||||||
|
|
||||||
if (CurrentLevel.Authors != "")
|
if (CurLevel.Authors != "")
|
||||||
p.SendMessage("It was created by " + CurrentLevel.Authors);
|
p.SendMessage("It was created by " + CurLevel.Authors);
|
||||||
p.SendCpeMessage(CpeMessageType.Status3, "%SYou have &a" + p.money + " %S" + Server.moneys);
|
p.SendCpeMessage(CpeMessageType.Status3, "%SYou have &a" + p.money + " %S" + Server.moneys);
|
||||||
UpdatePlayerStatus(p);
|
UpdatePlayerStatus(p);
|
||||||
return;
|
return;
|
||||||
@ -159,13 +159,13 @@ namespace MCGalaxy.Games {
|
|||||||
p.SendCpeMessage(CpeMessageType.Status3, "");
|
p.SendCpeMessage(CpeMessageType.Status3, "");
|
||||||
Alive.Remove(p);
|
Alive.Remove(p);
|
||||||
Infected.Remove(p);
|
Infected.Remove(p);
|
||||||
if (oldLvl != null && oldLvl.name.CaselessEq(CurrentLevelName))
|
if (oldLvl != null && oldLvl.name.CaselessEq(CurLevelName))
|
||||||
UpdateAllPlayerStatus();
|
UpdateAllPlayerStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PlayerMoneyChanged(Player p) {
|
public override void PlayerMoneyChanged(Player p) {
|
||||||
if (Status == ZombieGameStatus.NotStarted
|
if (Status == ZombieGameStatus.NotStarted
|
||||||
|| !p.level.name.CaselessEq(CurrentLevelName)) return;
|
|| !p.level.name.CaselessEq(CurLevelName)) return;
|
||||||
p.SendCpeMessage(CpeMessageType.Status3, "%SYou have &a" + p.money + " %S" + Server.moneys);
|
p.SendCpeMessage(CpeMessageType.Status3, "%SYou have &a" + p.money + " %S" + Server.moneys);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -69,10 +69,10 @@ namespace MCGalaxy.Games {
|
|||||||
public string LastLevelName = "";
|
public string LastLevelName = "";
|
||||||
|
|
||||||
/// <summary> The name of the level that the current round of zombie survival is being played on. </summary>
|
/// <summary> The name of the level that the current round of zombie survival is being played on. </summary>
|
||||||
public string CurrentLevelName = "";
|
public string CurLevelName = "";
|
||||||
|
|
||||||
/// <summary> The level that the current round of zombie survival is being played on. </summary>
|
/// <summary> The level that the current round of zombie survival is being played on. </summary>
|
||||||
public Level CurrentLevel = null;
|
public Level CurLevel = null;
|
||||||
|
|
||||||
/// <summary> List of alive/human players. </summary>
|
/// <summary> List of alive/human players. </summary>
|
||||||
public VolatileArray<Player> Alive = new VolatileArray<Player>(false);
|
public VolatileArray<Player> Alive = new VolatileArray<Player>(false);
|
||||||
@ -128,7 +128,7 @@ namespace MCGalaxy.Games {
|
|||||||
if (alive.Length == 0) return;
|
if (alive.Length == 0) return;
|
||||||
int index = random.Next(alive.Length);
|
int index = random.Next(alive.Length);
|
||||||
|
|
||||||
while (alive[index].referee || !alive[index].level.name.CaselessEq(CurrentLevelName)) {
|
while (alive[index].referee || !alive[index].level.name.CaselessEq(CurLevelName)) {
|
||||||
if (index >= alive.Length - 1) {
|
if (index >= alive.Length - 1) {
|
||||||
index = 0;
|
index = 0;
|
||||||
alive = Alive.Items;
|
alive = Alive.Items;
|
||||||
@ -139,7 +139,7 @@ namespace MCGalaxy.Games {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player zombie = alive[index];
|
Player zombie = alive[index];
|
||||||
CurrentLevel.ChatLevel(zombie.FullName + " %Scontinued the infection!");
|
CurLevel.ChatLevel(zombie.FullName + " %Scontinued the infection!");
|
||||||
InfectPlayer(zombie);
|
InfectPlayer(zombie);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,22 +163,22 @@ namespace MCGalaxy.Games {
|
|||||||
|
|
||||||
void ChangeLevel(string next) {
|
void ChangeLevel(string next) {
|
||||||
Player[] online = PlayerInfo.Online.Items;
|
Player[] online = PlayerInfo.Online.Items;
|
||||||
if (CurrentLevel != null) {
|
if (CurLevel != null) {
|
||||||
bool saveSettings = false;
|
bool saveSettings = false;
|
||||||
foreach (Player pl in online)
|
foreach (Player pl in online)
|
||||||
saveSettings |= pl.ratedMap;
|
saveSettings |= pl.ratedMap;
|
||||||
if (saveSettings) Level.SaveSettings(CurrentLevel);
|
if (saveSettings) Level.SaveSettings(CurLevel);
|
||||||
|
|
||||||
CurrentLevel.ChatLevel("The next map has been chosen - " + Colors.red + next.ToLower());
|
CurLevel.ChatLevel("The next map has been chosen - " + Colors.red + next.ToLower());
|
||||||
CurrentLevel.ChatLevel("Please wait while you are transfered.");
|
CurLevel.ChatLevel("Please wait while you are transfered.");
|
||||||
}
|
}
|
||||||
|
|
||||||
CurrentLevelName = next;
|
CurLevelName = next;
|
||||||
QueuedLevel = null;
|
QueuedLevel = null;
|
||||||
Command.all.Find("load").Use(null, next.ToLower() + " 0");
|
Command.all.Find("load").Use(null, next.ToLower() + " 0");
|
||||||
CurrentLevel = LevelInfo.Find(next);
|
CurLevel = LevelInfo.Find(next);
|
||||||
if (Server.ZombieOnlyServer)
|
if (Server.ZombieOnlyServer)
|
||||||
Server.mainLevel = CurrentLevel;
|
Server.mainLevel = CurLevel;
|
||||||
|
|
||||||
online = PlayerInfo.Online.Items;
|
online = PlayerInfo.Online.Items;
|
||||||
foreach (Player pl in online) {
|
foreach (Player pl in online) {
|
||||||
@ -203,8 +203,8 @@ namespace MCGalaxy.Games {
|
|||||||
RoundStart = DateTime.MinValue;
|
RoundStart = DateTime.MinValue;
|
||||||
RoundEnd = DateTime.MinValue;
|
RoundEnd = DateTime.MinValue;
|
||||||
LastLevelName = "";
|
LastLevelName = "";
|
||||||
CurrentLevelName = "";
|
CurLevelName = "";
|
||||||
CurrentLevel = null;
|
CurLevel = null;
|
||||||
|
|
||||||
Player[] online = PlayerInfo.Online.Items;
|
Player[] online = PlayerInfo.Online.Items;
|
||||||
foreach (Player pl in online) {
|
foreach (Player pl in online) {
|
||||||
|
@ -61,6 +61,7 @@ namespace MCGalaxy.Levels.IO {
|
|||||||
writer.WriteLine("Unload = " + level.unload);
|
writer.WriteLine("Unload = " + level.unload);
|
||||||
writer.WriteLine("WorldChat = " + level.worldChat);
|
writer.WriteLine("WorldChat = " + level.worldChat);
|
||||||
|
|
||||||
|
writer.WriteLine("#Permission settings");
|
||||||
writer.WriteLine("PerBuild = " + GetName(level.permissionbuild));
|
writer.WriteLine("PerBuild = " + GetName(level.permissionbuild));
|
||||||
writer.WriteLine("PerVisit = " + GetName(level.permissionvisit));
|
writer.WriteLine("PerVisit = " + GetName(level.permissionvisit));
|
||||||
writer.WriteLine("PerBuildMax = " + GetName(level.perbuildmax));
|
writer.WriteLine("PerBuildMax = " + GetName(level.perbuildmax));
|
||||||
@ -77,11 +78,14 @@ namespace MCGalaxy.Levels.IO {
|
|||||||
writer.WriteLine("Texture = " + level.terrainUrl);
|
writer.WriteLine("Texture = " + level.terrainUrl);
|
||||||
writer.WriteLine("TexturePack = " + level.texturePackUrl);
|
writer.WriteLine("TexturePack = " + level.texturePackUrl);
|
||||||
|
|
||||||
|
writer.WriteLine("#Game settings");
|
||||||
writer.WriteLine("Likes = " + level.Likes);
|
writer.WriteLine("Likes = " + level.Likes);
|
||||||
writer.WriteLine("Dislikes = " + level.Dislikes);
|
writer.WriteLine("Dislikes = " + level.Dislikes);
|
||||||
writer.WriteLine("Authors = " + level.Authors);
|
writer.WriteLine("Authors = " + level.Authors);
|
||||||
writer.WriteLine("Pillaring = " + level.Pillaring);
|
writer.WriteLine("Pillaring = " + level.Pillaring);
|
||||||
writer.WriteLine("BuildType = " + level.BuildType);
|
writer.WriteLine("BuildType = " + level.BuildType);
|
||||||
|
writer.WriteLine("MinRoundTime = " + level.MinRoundTime);
|
||||||
|
writer.WriteLine("MaxRoundTime = " + level.MaxRoundTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
static string GetName(LevelPermission perm) {
|
static string GetName(LevelPermission perm) {
|
||||||
@ -113,7 +117,7 @@ namespace MCGalaxy.Levels.IO {
|
|||||||
public static void Load(Level level, string path) {
|
public static void Load(Level level, string path) {
|
||||||
foreach (string line in File.ReadAllLines(path)) {
|
foreach (string line in File.ReadAllLines(path)) {
|
||||||
try {
|
try {
|
||||||
if (line[0] == '#') continue;
|
if (line.Length == 0 || line[0] == '#') continue;
|
||||||
int sepIndex = line.IndexOf(" = ");
|
int sepIndex = line.IndexOf(" = ");
|
||||||
if (sepIndex < 0) continue;
|
if (sepIndex < 0) continue;
|
||||||
|
|
||||||
@ -228,6 +232,10 @@ namespace MCGalaxy.Levels.IO {
|
|||||||
level.Pillaring = bool.Parse(value); break;
|
level.Pillaring = bool.Parse(value); break;
|
||||||
case "buildtype":
|
case "buildtype":
|
||||||
level.BuildType = (BuildType)Enum.Parse(typeof(BuildType), value); break;
|
level.BuildType = (BuildType)Enum.Parse(typeof(BuildType), value); break;
|
||||||
|
case "minroundtime":
|
||||||
|
level.MinRoundTime = int.Parse(value); break;
|
||||||
|
case "maxroundtime":
|
||||||
|
level.MaxRoundTime = int.Parse(value); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,6 +208,7 @@ namespace MCGalaxy
|
|||||||
public BuildType BuildType = BuildType.Normal;
|
public BuildType BuildType = BuildType.Normal;
|
||||||
public bool CanPlace { get { return Buildable && BuildType != BuildType.NoModify; } }
|
public bool CanPlace { get { return Buildable && BuildType != BuildType.NoModify; } }
|
||||||
public bool CanDelete { get { return Deletable && BuildType != BuildType.NoModify; } }
|
public bool CanDelete { get { return Deletable && BuildType != BuildType.NoModify; } }
|
||||||
|
public int MinRoundTime = 4, MaxRoundTime = 7;
|
||||||
|
|
||||||
public Level(string n, ushort x, ushort y, ushort z, string type, int seed = 0, bool useSeed = false)
|
public Level(string n, ushort x, ushort y, ushort z, string type, int seed = 0, bool useSeed = false)
|
||||||
{
|
{
|
||||||
@ -284,7 +285,7 @@ namespace MCGalaxy
|
|||||||
|
|
||||||
public bool ShouldSaveLevelFile() {
|
public bool ShouldSaveLevelFile() {
|
||||||
if (Server.ZombieModeOn &&
|
if (Server.ZombieModeOn &&
|
||||||
(name.CaselessEq(Server.zombie.CurrentLevelName)
|
(name.CaselessEq(Server.zombie.CurLevelName)
|
||||||
|| name.CaselessEq(Server.zombie.LastLevelName))) return false;
|
|| name.CaselessEq(Server.zombie.LastLevelName))) return false;
|
||||||
if (Server.lava.active && Server.lava.HasMap(name)) return false;
|
if (Server.lava.active && Server.lava.HasMap(name)) return false;
|
||||||
return true;
|
return true;
|
||||||
|
@ -517,7 +517,7 @@ namespace MCGalaxy {
|
|||||||
dst.SendSpawn(id, Colors.red + Server.zombie.ZombieName + possession, x, y, z, rotx, roty);
|
dst.SendSpawn(id, Colors.red + Server.zombie.ZombieName + possession, x, y, z, rotx, roty);
|
||||||
else
|
else
|
||||||
dst.SendSpawn(id, Colors.red + p.name + possession, x, y, z, rotx, roty);
|
dst.SendSpawn(id, Colors.red + p.name + possession, x, y, z, rotx, roty);
|
||||||
if (dst.HasCpeExt(CpeExt.ChangeModel))
|
if (dst.HasCpeExt(CpeExt.ChangeModel) && id != 0xFF)
|
||||||
dst.SendChangeModel(id, "zombie");
|
dst.SendChangeModel(id, "zombie");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user