CTF: don't hardcode /goto CTF command

This commit is contained in:
UnknownShadow200 2017-07-15 16:08:31 +10:00
parent 9ac7b17c8b
commit e0932e57b2
2 changed files with 37 additions and 30 deletions

View File

@ -304,8 +304,8 @@ namespace MCGalaxy.Games {
}
team.Members.Add(p);
Chat.MessageLevel(Map, p.ColoredName + " joined the " + team.ColoredName + " %Steam");
Player.Message(p, team.Color + "You are now on the " + team.Name + " team!");
Chat.MessageLevel(Map, p.ColoredName + " %Sjoined the " + team.ColoredName + " %Steam");
Player.Message(p, "You are now on the " + team.ColoredName + " team!");
}
bool OnOwnTeamSide(int z, CtfTeam2 team) {

View File

@ -34,22 +34,28 @@ namespace MCGalaxy.Games {
OnPlayerDeathEvent.Register(HandlePlayerDeath, Priority.High);
OnPlayerChatEvent.Register(HandlePlayerChat, Priority.High);
OnPlayerCommandEvent.Register(HandlePlayerCommand, Priority.High);
OnBlockChangeEvent.Register(HandleBlockChange, Priority.High);
OnPlayerDisconnectEvent.Register(HandleDisconnect, Priority.High);
OnLevelUnloadEvent.Register(HandleLevelUnload, Priority.High);
OnPlayerSpawningEvent.Register(HandlePlayerSpawning, Priority.High);
OnTabListEntryAddedEvent.Register(HandleTabListEntryAdded, Priority.High);
OnJoinedLevelEvent.Register(HandleOnJoinedLevel, Priority.High);
}
public override void Unload(bool shutdown) {
OnPlayerDeathEvent.Unregister(HandlePlayerDeath);
OnPlayerChatEvent.Unregister(HandlePlayerChat);
OnPlayerCommandEvent.Unregister(HandlePlayerCommand);
OnBlockChangeEvent.Unregister(HandleBlockChange);
OnPlayerDisconnectEvent.Unregister(HandleDisconnect);
OnLevelUnloadEvent.Unregister(HandleLevelUnload);
OnPlayerSpawningEvent.Unregister(HandlePlayerSpawning);
OnTabListEntryAddedEvent.Unregister(HandleTabListEntryAdded);
OnJoinedLevelEvent.Unregister(HandleOnJoinedLevel);
}
@ -129,15 +135,15 @@ namespace MCGalaxy.Games {
Logger.Log(LogType.GameActivity, "Unload Failed!, A ctf game is currently going on!");
lvl.cancelunload = true;
}
}
}
void HandlePlayerSpawning(Player p, ref Position pos, ref byte yaw, ref byte pitch, bool respawning) {
if (!Game.started || p.level != Game.Map) return;
CtfTeam2 team = Game.TeamOf(p);
if (team != null) pos = team.SpawnPos;
if (team != null && respawning) Game.DropFlag(p, team);
}
}
void HandleTabListEntryAdded(Entity entity, ref string tabName, ref string tabGroup, Player dst) {
Player p = entity as Player;
@ -147,30 +153,23 @@ namespace MCGalaxy.Games {
if (p.Game.Referee) {
tabGroup = "&2Referees";
} else if (team != null) {
tabGroup = team.ColoredName + " &fteam";
tabGroup = team.ColoredName + " team";
} else {
tabGroup = "&7Spectators";
}
}
void HandlePlayerCommand(Player p, string cmd, string args) {
if (!Game.started) return;
void HandleOnJoinedLevel(Player p, Level prevLevel, Level level) {
if (p == null || !Game.started) return;
if (cmd == "teamchat" && p.level == Game.Map) {
CtfData data = Game.Get(p);
if (data != null) {
if (data.TeamChatting) {
Player.Message(data.p, "You are no longer chatting with your team!");
} else {
Player.Message(data.p, "You are now chatting with your team!");
}
data.TeamChatting = !data.TeamChatting;
p.cancelcommand = true;
}
}
if (cmd != "goto") return;
if (args == "ctf" && p.level != Game.Map) {
if (prevLevel == Game.Map) {
CtfTeam2 team = Game.TeamOf(p);
if (team == null) return;
Game.DropFlag(p, team);
team.Remove(p);
Chat.MessageLevel(Game.Map, team.Color + p.DisplayName + " %Sleft the ctf game");
} else if (level == Game.Map) {
if (Game.Blue.Members.Count > Game.Red.Members.Count) {
Game.JoinTeam(p, Game.Red);
} else if (Game.Red.Members.Count > Game.Blue.Members.Count) {
@ -180,14 +179,22 @@ namespace MCGalaxy.Games {
} else {
Game.JoinTeam(p, Game.Blue);
}
} else if (args != "ctf" && p.level == Game.Map) {
CtfTeam2 team = Game.TeamOf(p);
if (team == null) return;
Game.DropFlag(p, team);
team.Remove(p);
Chat.MessageLevel(Game.Map, team.Color + p.DisplayName + " %Sleft the ctf game");
}
}
void HandlePlayerCommand(Player p, string cmd, string args) {
if (!Game.started || p.level != Game.Map || cmd != "teamchat") return;
CtfData data = Game.Get(p);
if (data == null) return;
if (data.TeamChatting) {
Player.Message(data.p, "You are no longer chatting with your team!");
} else {
Player.Message(data.p, "You are now chatting with your team!");
}
data.TeamChatting = !data.TeamChatting;
p.cancelcommand = true;
}
}
}