Unify CPE status sending between games

This commit is contained in:
UnknownShadow200 2018-07-07 08:22:18 +10:00
parent 43e185bab9
commit 1195ad1778
14 changed files with 86 additions and 80 deletions

View File

@ -75,7 +75,7 @@ namespace MCGalaxy.Commands.Fun {
string prop = args[1], value = args[2];
if (prop.CaselessEq("spawn")) {
if (gameCfg.Mode == TntWarsGameMode.FFA) {
if (gameCfg.Mode == TWGameMode.FFA) {
Player.Message(p, "&cCannot set spawns in Free For All mode"); return;
}
@ -105,14 +105,14 @@ namespace MCGalaxy.Commands.Fun {
Player.Message(p, "TNT Wars: Grace period is now {0} seconds", value);
} else if (prop.CaselessEq("gamemode")) {
if (value.CaselessEq("tdm")) {
if (gameCfg.Mode == TntWarsGameMode.FFA) {
if (gameCfg.Mode == TWGameMode.FFA) {
if (p.level != game.Map) { Player.Message(p, "Changed gamemode to Team Deathmatch"); }
game.ModeTDM();
} else {
Player.Message(p, "&cGamemode is already Team Deathmatch"); return;
}
} else if (value.CaselessEq("ffa")) {
if (gameCfg.Mode == TntWarsGameMode.TDM) {
if (gameCfg.Mode == TWGameMode.TDM) {
if (p.level != game.Map) { Player.Message(p, "Changed gamemode to Free For All"); }
game.ModeFFA();
} else {
@ -122,7 +122,7 @@ namespace MCGalaxy.Commands.Fun {
Help(p, "other"); return;
}
} else if (prop.CaselessEq("difficulty")) {
TntWarsDifficulty diff = TntWarsDifficulty.Easy;
TWDifficulty diff = TWDifficulty.Easy;
if (!CommandParser.GetEnum(p, value, "Difficulty", ref diff)) return;
SetDifficulty(game, diff, p);
} else if (prop.CaselessEq("score")) {
@ -290,7 +290,7 @@ namespace MCGalaxy.Commands.Fun {
return false;
}
static void SetDifficulty(TWGame game, TntWarsDifficulty diff, Player p) {
static void SetDifficulty(TWGame game, TWDifficulty diff, Player p) {
if (p.level != game.Map)
Player.Message(p, "TNT Wars: Changed difficulty to {0}", diff);
game.SetDifficulty(diff);

View File

@ -59,13 +59,13 @@ namespace MCGalaxy.Commands.Fun {
if (!CommandParser.GetBool(p, args[1], ref lCfg.Pillaring)) return;
Player.Message(p, "Set pillaring allowed to &b" + lCfg.Pillaring);
ZSGame.Instance.UpdateAllStatus2();
game.UpdateAllStatus2();
} else if (prop.CaselessEq("build")) {
if (!CommandParser.GetEnum(p, args[1], "Build type", ref lCfg.BuildType)) return;
p.level.UpdateBlockPermissions();
Player.Message(p, "Set build type to &b" + lCfg.BuildType);
ZSGame.Instance.UpdateAllStatus2();
game.UpdateAllStatus2();
} else if (prop.CaselessEq("minround")) {
if (!ParseTimespan(p, "min round time", args, ref lCfg.MinRoundTime)) return;
} else if (prop.CaselessEq("maxround")) {

View File

@ -49,7 +49,7 @@ namespace MCGalaxy.Games {
if (!Running) return;
RoundInProgress = true;
MessageAllStatus();
UpdateAllStatus();
RemoveSquares();
}
@ -217,7 +217,7 @@ namespace MCGalaxy.Games {
RoundInProgress = false;
Remaining.Clear();
squaresLeft.Clear();
MessageAllStatus();
UpdateAllStatus();
if (winner != null) {
winner.SendMessage("Congratulations, you won this round of countdown!");

View File

@ -175,19 +175,12 @@ namespace MCGalaxy.Games {
UpdatePlayersLeft();
}
void MessageAllStatus() {
UpdateAllStatus1();
UpdateAllStatus2();
protected override string FormatStatus1(Player p) {
return RoundInProgress ? squaresLeft.Count + " squares left" : "";
}
void UpdateAllStatus1() {
string msg = RoundInProgress ? squaresLeft.Count + " squares left" : "";
MessageMap(CpeMessageType.Status1, msg);
}
void UpdateAllStatus2() {
string msg = RoundInProgress ? Remaining.Count + " players left" : "";
MessageMap(CpeMessageType.Status2, msg);
protected override string FormatStatus2(Player p) {
return RoundInProgress ? Remaining.Count + " players left" : "";
}
}
}

View File

@ -45,7 +45,8 @@ namespace MCGalaxy.Games {
public abstract void End();
public abstract void EndRound();
protected void ResetHUD(Player p) {
protected void ResetStatus(Player p) {
p.SendCpeMessage(CpeMessageType.Status1, "");
p.SendCpeMessage(CpeMessageType.Status2, "");
p.SendCpeMessage(CpeMessageType.Status3, "");
@ -60,5 +61,30 @@ namespace MCGalaxy.Games {
p.SendCpeMessage(type, message);
}
}
protected virtual string FormatStatus1(Player p) { return ""; }
protected virtual string FormatStatus2(Player p) { return ""; }
protected virtual string FormatStatus3(Player p) { return ""; }
public void UpdateAllStatus1() { UpdateAllStatus(CpeMessageType.Status1); }
public void UpdateAllStatus2() { UpdateAllStatus(CpeMessageType.Status2); }
public void UpdateAllStatus3() { UpdateAllStatus(CpeMessageType.Status3); }
public void UpdateAllStatus() {
UpdateAllStatus1();
UpdateAllStatus2();
UpdateAllStatus3();
}
void UpdateAllStatus(CpeMessageType status) {
Player[] online = PlayerInfo.Online.Items;
foreach (Player p in online) {
if (p.level != Map) continue;
string msg = status == CpeMessageType.Status1 ? FormatStatus1(p) :
(status == CpeMessageType.Status2 ? FormatStatus2(p) : FormatStatus3(p));
p.SendCpeMessage(CpeMessageType.Status1, msg);
}
}
}
}

View File

@ -56,10 +56,13 @@ namespace MCGalaxy.Games {
protected void HandleJoinedCommon(Player p, Level prevLevel, Level level, ref bool announce) {
if (prevLevel == Map && level != Map) {
if (Picker.Voting) Picker.ResetVoteMessage(p);
ResetHUD(p);
ResetStatus(p);
PlayerLeftGame(p);
} else if (level == Map) {
if (Picker.Voting) Picker.SendVoteMessage(p);
p.SendCpeMessage(CpeMessageType.Status1, FormatStatus1(p));
p.SendCpeMessage(CpeMessageType.Status2, FormatStatus2(p));
p.SendCpeMessage(CpeMessageType.Status3, FormatStatus3(p));
}
if (level != Map) return;

View File

@ -195,7 +195,7 @@ namespace MCGalaxy.Games {
pl.Game.PledgeSurvive = false;
TabList.Update(pl, true);
ResetHUD(pl);
ResetStatus(pl);
pl.SetPrefix();
}

View File

@ -31,10 +31,10 @@ namespace MCGalaxy.Games {
protected override string GameName { get { return "TNT Wars"; } }
protected override string PropsPath { get { return "properties/tntwars.properties"; } }
[ConfigEnum("Mode", null, TntWarsGameMode.TDM, typeof(TntWarsGameMode))]
public TntWarsGameMode Mode = TntWarsGameMode.TDM;
[ConfigEnum("Difficulty", null, TntWarsDifficulty.Normal, typeof(TntWarsDifficulty))]
public TntWarsDifficulty Difficulty = TntWarsDifficulty.Normal;
[ConfigEnum("Mode", null, TWGameMode.TDM, typeof(TWGameMode))]
public TWGameMode Mode = TWGameMode.TDM;
[ConfigEnum("Difficulty", null, TWDifficulty.Normal, typeof(TWDifficulty))]
public TWDifficulty Difficulty = TWDifficulty.Normal;
}
public sealed class TWMapConfig {

View File

@ -58,7 +58,7 @@ namespace MCGalaxy.Games {
if (p.level != Map || message.Length == 0 || message[0] != ':') return;
TWTeam team = TeamOf(p);
if (team == null || Config.Mode != TntWarsGameMode.TDM) return;
if (team == null || Config.Mode != TWGameMode.TDM) return;
message = message.Substring(1);
// "To Team &c-" + ColoredName + "&c- %S" + message);
@ -80,7 +80,7 @@ namespace MCGalaxy.Games {
}
TWTeam team = TeamOf(p);
if (team == null || Config.Mode != TntWarsGameMode.TDM) return;
if (team == null || Config.Mode != TWGameMode.TDM) return;
Vec3U16 coords = team.SpawnPos;
pos = Position.FromFeetBlockCoords(coords.X, coords.Y, coords.Z);
@ -133,8 +133,8 @@ namespace MCGalaxy.Games {
int delay = 1250;
switch (Config.Difficulty) {
case TntWarsDifficulty.Easy: delay = 3250; break;
case TntWarsDifficulty.Normal: delay = 2250; break;
case TWDifficulty.Easy: delay = 3250; break;
case TWDifficulty.Normal: delay = 2250; break;
}
AddTntCheck(Map.PosToInt(x, y, z), p);
@ -167,9 +167,9 @@ namespace MCGalaxy.Games {
int power = 2, threshold = 3;
switch (Config.Difficulty) {
case TntWarsDifficulty.Easy: threshold = 7; break;
case TntWarsDifficulty.Normal: threshold = 5; break;
case TntWarsDifficulty.Extreme: power = 3; break;
case TWDifficulty.Easy: threshold = 7; break;
case TWDifficulty.Normal: threshold = 5; break;
case TWDifficulty.Extreme: power = 3; break;
}
if ((C.Data.Data >> 4) < threshold) {
@ -209,9 +209,9 @@ namespace MCGalaxy.Games {
void KillPlayers(Player killer, TWData data, List<Player> inRange) {
List<Player> killed = new List<Player>();
int damage = 1, kills = 0, penalty = 0;
TntWarsDifficulty diff = Config.Difficulty;
TWDifficulty diff = Config.Difficulty;
if (diff == TntWarsDifficulty.Hard || diff == TntWarsDifficulty.Extreme) {
if (diff == TWDifficulty.Hard || diff == TWDifficulty.Extreme) {
damage = 2;
}
@ -284,7 +284,7 @@ namespace MCGalaxy.Games {
data.ScoreMultiplier = cfg.StreakThreeMultiplier;
data.LastKillStreakAnnounced = cfg.StreakThreeAmount;
if (diff == TntWarsDifficulty.Hard || diff == TntWarsDifficulty.Extreme) {
if (diff == TWDifficulty.Hard || diff == TWDifficulty.Extreme) {
data.Health += 2;
} else {
data.Health += 1;

View File

@ -56,28 +56,28 @@ namespace MCGalaxy.Games {
//Announcing Etc.
// TODO: tidy up
string Gamemode = "Free For All";
if (Config.Mode == TntWarsGameMode.TDM) Gamemode = "Team Deathmatch";
if (Config.Mode == TWGameMode.TDM) Gamemode = "Team Deathmatch";
string difficulty = "Normal";
string HitsToDie = "2";
string explosiontime = "medium";
string explosionsize = "normal";
switch (Config.Difficulty)
{
case TntWarsDifficulty.Easy:
case TWDifficulty.Easy:
difficulty = "Easy";
explosiontime = "long";
break;
case TntWarsDifficulty.Normal:
case TWDifficulty.Normal:
difficulty = "Normal";
break;
case TntWarsDifficulty.Hard:
case TWDifficulty.Hard:
HitsToDie = "1";
difficulty = "Hard";
break;
case TntWarsDifficulty.Extreme:
case TWDifficulty.Extreme:
HitsToDie = "1";
explosiontime = "short";
explosionsize = "big";
@ -93,7 +93,7 @@ namespace MCGalaxy.Games {
", team killing is &3" + teamkillling + " %Sand you can place &3" + cfg.MaxPlayerActiveTnt
+ " %STNT at a time and there is a score limit of &3" + cfg.ScoreRequired + "%S!!");
if (Config.Mode == TntWarsGameMode.TDM) {
if (Config.Mode == TWGameMode.TDM) {
Map.Message("Start your message with ':' to send it to team only!");
}
@ -103,7 +103,7 @@ namespace MCGalaxy.Games {
bool won = false;
while (Running && !won) {
if (Config.Mode == TntWarsGameMode.TDM) {
if (Config.Mode == TWGameMode.TDM) {
won = Red.Score >= cfg.ScoreRequired || Blue.Score >= cfg.ScoreRequired;
} else {
all = allPlayers.Items;
@ -163,7 +163,7 @@ namespace MCGalaxy.Games {
PlayerActions.Respawn(p);
}
if (Config.Mode == TntWarsGameMode.TDM) {
if (Config.Mode == TWGameMode.TDM) {
if (Red.Score > Blue.Score) {
int amount = Red.Score - Blue.Score;
Map.Message(Red.ColoredName + " %Swon &cTNT Wars %Sby &f" + amount + " %Spoints!");

View File

@ -34,8 +34,8 @@ using BlockID = System.UInt16;
namespace MCGalaxy.Games {
public enum TntWarsGameMode { FFA, TDM };
public enum TntWarsDifficulty {
public enum TWGameMode { FFA, TDM };
public enum TWDifficulty {
Easy, // 2 Hits to die, Tnt has long delay
Normal, // 2 Hits to die, Tnt has normal delay
Hard, // 1 Hit to die, Tnt has short delay
@ -50,8 +50,8 @@ namespace MCGalaxy.Games {
public Player HarmedBy; // For Assists
public string OrigCol;
public void Reset(TntWarsDifficulty diff) {
bool easyish = diff == TntWarsDifficulty.Easy || diff == TntWarsDifficulty.Normal;
public void Reset(TWDifficulty diff) {
bool easyish = diff == TWDifficulty.Easy || diff == TWDifficulty.Normal;
Score = 0;
Health = easyish ? 2 : 1;
KillStreak = 0;
@ -122,7 +122,7 @@ namespace MCGalaxy.Games {
}
public override void OutputStatus(Player p) {
if (Config.Mode == TntWarsGameMode.TDM) {
if (Config.Mode == TWGameMode.TDM) {
Player.Message(p, "{0} team score: &f{1}/{2} points",
Red.ColoredName, Red.Score, cfg.ScoreRequired);
Player.Message(p, "{0} team score: &f{1}/{2} points",
@ -189,7 +189,7 @@ namespace MCGalaxy.Games {
public void ModeTDM() {
Config.Mode = TntWarsGameMode.TDM;
Config.Mode = TWGameMode.TDM;
MessageMap(CpeMessageType.Announcement,
"&4Gamemode changed to &fTeam Deathmatch");
Player[] players = allPlayers.Items;
@ -206,7 +206,7 @@ namespace MCGalaxy.Games {
}
public void ModeFFA() {
Config.Mode = TntWarsGameMode.FFA;
Config.Mode = TWGameMode.FFA;
MessageMap(CpeMessageType.Announcement,
"&4Gamemode changed to &fFree For All");
ResetTeams();
@ -218,13 +218,13 @@ namespace MCGalaxy.Games {
Config.Save();
}
public void SetDifficulty(TntWarsDifficulty diff) {
public void SetDifficulty(TWDifficulty diff) {
Config.Difficulty = diff;
MessageMap(CpeMessageType.Announcement,
"&4Difficulty changed to &f" + diff);
Config.Save();
bool teamKill = diff >= TntWarsDifficulty.Hard;
bool teamKill = diff >= TWDifficulty.Hard;
if (cfg.TeamKills == teamKill) return;
cfg.TeamKills = teamKill;
@ -284,14 +284,14 @@ namespace MCGalaxy.Games {
public void ChangeScore(Player p, int amount) {
Get(p).Score += amount;
if (Config.Mode != TntWarsGameMode.TDM) return;
if (Config.Mode != TWGameMode.TDM) return;
TWTeam team = TeamOf(p);
if (team != null) team.Score += amount;
}
public bool TeamKill(Player p1, Player p2) {
return Config.Mode == TntWarsGameMode.TDM && TeamOf(p1) == TeamOf(p2);
return Config.Mode == TWGameMode.TDM && TeamOf(p1) == TeamOf(p2);
}
}
}

View File

@ -82,7 +82,7 @@ namespace MCGalaxy.Games {
void HandleMoneyChanged(Player p) {
if (p.level != Map) return;
UpdateStatus3(p, Get(p).Infected);
p.SendCpeMessage(CpeMessageType.Status3, FormatStatus3(p));
}
void HandleEntitySpawned(Entity entity, ref string name, ref string skin, ref string model, Player dst) {
@ -124,9 +124,6 @@ namespace MCGalaxy.Games {
ZSData data = Get(p);
p.SetPrefix();
p.SendCpeMessage(CpeMessageType.Status1, FormatStatus1());
p.SendCpeMessage(CpeMessageType.Status2, FormatStatus2());
UpdateStatus3(p, data.Infected);
if (RoundInProgress) {
Player.Message(p, "You joined in the middle of a round. &cYou are now infected!");

View File

@ -311,7 +311,7 @@ namespace MCGalaxy.Games {
}
RespawnPlayer(pl);
UpdateStatus3(pl, data.Infected);
pl.SendCpeMessage(CpeMessageType.Status3, FormatStatus3(pl));
}
}

View File

@ -160,7 +160,7 @@ namespace MCGalaxy.Games {
ResetInvisibility(p, data);
UpdateAllStatus1();
UpdateStatus3(p, infected);
p.SendCpeMessage(CpeMessageType.Status3, FormatStatus3(p));
}
void ResetInvisibility(Player p, ZSData data) {
@ -253,19 +253,6 @@ namespace MCGalaxy.Games {
return Running && Config.Maps.CaselessContains(name);
}
void UpdateAllStatus1() {
MessageMap(CpeMessageType.Status1, FormatStatus1());
}
internal void UpdateAllStatus2() {
MessageMap(CpeMessageType.Status2, FormatStatus2());
}
void UpdateStatus3(Player p, bool infected) {
string status = FormatStatus3(p, infected);
p.SendCpeMessage(CpeMessageType.Status3, status);
}
static string GetTimeLeft(int seconds) {
if (seconds < 0) return "";
if (seconds <= 10) return "10s left";
@ -274,7 +261,7 @@ namespace MCGalaxy.Games {
return ((seconds + 59) / 60) + "m left";
}
string FormatStatus1() {
protected override string FormatStatus1(Player p) {
int left = (int)(RoundEnd - DateTime.UtcNow).TotalSeconds;
string timespan = GetTimeLeft(left);
@ -283,15 +270,15 @@ namespace MCGalaxy.Games {
return string.Format(format, Alive.Count, Map.MapName, timespan);
}
string FormatStatus2() {
protected override string FormatStatus2(Player p) {
string pillar = "%SPillaring " + (Map.Config.Pillaring ? "&aYes" : "&cNo");
string type = "%S, Type is &a" + Map.Config.BuildType;
return pillar + type;
}
static string FormatStatus3(Player p, bool infected) {
protected override string FormatStatus3(Player p) {
string money = "&a" + p.money + " %S" + ServerConfig.Currency;
string state = ", you are " + (infected ? "&cdead" : "&aalive");
string state = ", you are " + (Get(p).Infected ? "&cdead" : "&aalive");
return money + state;
}
}