private bool verif(BaseGame gameInfo, Player p) { if (gameInfo == null) { Player.SendMessage(p, "Il y a aucune partie en cours sur la map"); return(false); } if (gameInfo.typeGame.ToLower() != "bomberman") { Player.SendMessage(p, "Le bomberman n'est pas actif sur cette map"); return(false); } if (p != gameInfo.owner || p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous n'etes pas le maitre de la partie"); return(false); } return(true); }
public override void Use(Player p, string message) { if (p == null) { Player.SendMessage(p, "Impossible depuis la console ou l'irc"); return; } BaseGame gameInfo = Server.allGames.Find(g => g.lvl == p.level); FootGame footInfo = null; if (footInfo != null) { if (gameInfo.typeGame == "foot") { footInfo = (FootGame)gameInfo; } } string key = ""; if (message == "") { ; } else if (message.IndexOf(' ') == -1) { key = message; message = ""; } else { key = message.Split(' ')[0]; message = message.Substring(message.IndexOf(' ') + 1); } switch (key.ToLower()) { case "start": if (!verif(gameInfo, p)) { return; } if (footInfo.gameOn) { Player.SendMessage(p, "Le jeu est deja lance"); return; } footInfo.startGame(p); break; case "stop": if (!verif(gameInfo, p)) { return; } if (!footInfo.gameOn) { Player.SendMessage(p, "Le jeu n'est pas lance"); return; } footInfo.stopGame(p); break; case "info": if (gameInfo == null) { Player.SendMessage(p, "Il y a aucune partie en cours sur la map"); return; } if (gameInfo.typeGame.ToLower() != "foot") { Player.SendMessage(p, "Le foot n'est pas actif sur cette map"); return; } footInfo.GameInfo(p); break; case "list": BaseGame.listSave(p, "foot"); break; case "save": if (!verif(gameInfo, p)) { return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Impossible de sauvegarder les configurations quand le foot est lance"); return; } gameInfo.saveGame(p, message); break; case "load": if (!verif(gameInfo, p)) { return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Impossible de charger des configurations quand le foot est lance"); return; } gameInfo.loadGame(p, message); break; case "but": if (!verif(gameInfo, p)) { return; } CatchPos cpos; cpos.x = 0; cpos.y = 0; cpos.z = 0; switch (message) { case "red": case "rouge": cpos.colorTeam = "red"; break; case "bleu": case "blue": cpos.colorTeam = "blue"; break; default: Player.SendMessage(p, "Couleur inconnue"); return; } p.blockchangeObject = cpos; Player.SendMessage(p, "Place 2 blocs pour determiner la zone de but."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(butBlocChange1); break; case "spawn": if (!verif(gameInfo, p)) { return; } p.blockchangeObject = null; Player.SendMessage(p, "Place un bloc pour determiner la position du spawn du ballon."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(BallonBlocChange); break; case "points": if (!verif(gameInfo, p)) { return; } int points = 0; try { points = int.Parse(message); } catch { Player.SendMessage(p, "Valeur invalide"); return; } if (points < 1 || points > 25) { Player.SendMessage(p, "La valeur doit etre entre 1 et 25"); return; } footInfo.points = points; break; case "joint": if (gameInfo == null) { Player.SendMessage(p, "Il y a aucune partie en cours sur la map"); return; } if (gameInfo.typeGame.ToLower() != "foot") { Player.SendMessage(p, "Le foot n'est pas actif sur cette map"); return; } retry: if (message == "") { Random rand = new Random(); if (rand.Next(2) == 0) { message = "red"; } else { message = "blue"; } } switch (message) { case "red": case "rouge": case "bleu": case "blue": jointTeam(p, footInfo, message); break; default: message = ""; goto retry; } break; default: if (gameInfo == null) { if (p.level.world != p.name.ToLower() && p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous ne pouvez pas lancer de jeu dans ce monde"); return; } if (Server.allGames.Count > Server.maxGames) { Player.SendMessage(p, "Le maximum de jeux en simultanees est attein"); Player.SendMessage(p, "Attendez qu'une partie se finisse avant d'en lancer une autre"); return; } FootGame bB = new FootGame(p.level); bB.owner = p; if (key == "") { Player.SendMessage(p, "Vous devez donner un nom a la partie"); return; } if (message != "") { Player.SendMessage(p, "Le nom de la partie doit etre fait d'un seul mot"); return; } bB.name = key; if (!BaseGame.addGame(bB)) { Player.SendMessage(p, "Impossible de creer le jeu, reessayez !"); return; } Player.SendMessage(p, "Creation du foot termine"); Player.GlobalMessage("Une partie de foot vas bientot demarrer sur &b" + bB.lvl.name + Server.DefaultColor + " du monde &b" + bB.lvl.world); return; } if (gameInfo.typeGame.ToLower() != "foot") { Player.SendMessage(p, "Un jeu est deja actif sur cette map"); return; } if (gameInfo != null) { if (p != gameInfo.owner || p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous n'etes pas le maitre de la partie"); return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Arettez la partie avant de desactiver le foot"); return; } gameInfo.deleteGame(p); Player.GlobalMessageLevel(p.level, "Mode foot desactive"); return; } break; } }
public override void Use(Player p, string message) { if (message == "") { Help(p); return; } if (message == "list" || message == "liste") { if (listGame.Count == 0) { Player.SendMessage(p, "Aucun jeu ne propose de statistiques"); } string li = ""; foreach (string g in listGame) { li += g + ", "; } Player.SendMessage(p, "Jeux avec statistiques : " + li.Remove(li.Length - 2)); return; } if (message.Split(' ').Length < 2) { Help(p); return; } switch (message.Split(' ')[0]) { case "top": switch (message.Split(' ')[1]) { case "bomberman": BombermanGame.top(p); break; case "ctf": CTFGame2.top(p); break; case "infection": InfectionGame.top(p); break; default: Player.SendMessage(p, "Le jeu '" + message.Split(' ')[1] + "' n'a pas de statistiques"); break; } break; case "reset": if (p.group.Permission < LevelPermission.Admin) { Player.SendMessage(p, "Tu n'a pas les permissions de faire ca"); } if (!listGame.Exists(m => m == message.Split(' ')[1])) { Player.SendMessage(p, "Le jeu '" + message.Split(' ')[1] + "' n'a pas de statistiques"); } if (message.Split(' ').Length == 2) //resetjeu { BaseGame.resetGame(message.Split(' ')[1]); Player.SendMessage(p, "Statistiques du jeu '" + message.Split(' ')[1] + "' reinitialise"); } else { BaseGame.resetPlayer(message.Split(' ')[2], message.Split(' ')[1]); Player.SendMessage(p, "Statistique de '" + message.Split(' ')[2] + "' reset sur '" + message.Split(' ')[1] + "'"); } break; case "bomberman": BombermanGame.stats(p, message.Split(' ')[1]); break; case "ctf": CTFGame2.stats(p, message.Split(' ')[1]); break; case "infection": InfectionGame.stats(p, message.Split(' ')[1]); break; default: Player.SendMessage(p, "Le jeu '" + message.Split(' ')[0] + "' n'a pas de statistiques"); break; } }
public override void Use(Player p, string message) { if (p == null) { Player.SendMessage(p, "Impossible de faire ca depuis la console ou l'IRC"); return; } BaseGame gameInfo = Server.allGames.Find(g => g.lvl == p.level); BombermanGame bBInfo = null; if (gameInfo != null) { if (gameInfo.typeGame == "bomberman") { bBInfo = (BombermanGame)gameInfo; } } string key = ""; if (message == "") { ; } else if (message.IndexOf(' ') == -1) { key = message; message = ""; } else { key = message.Split(' ')[0]; message = message.Substring(message.IndexOf(' ') + 1); } switch (key.ToLower()) { case "start": if (!verif(gameInfo, p)) { return; } if (bBInfo.gameOn) { Player.SendMessage(p, "Le jeu est deja lance"); return; } bBInfo.startGame(p); break; case "stop": if (!verif(gameInfo, p)) { return; } if (!bBInfo.gameOn) { Player.SendMessage(p, "Le jeu n'est pas lance"); return; } bBInfo.stopGame(p); break; case "info": if (gameInfo == null) { Player.SendMessage(p, "Il y a aucune partie en cours sur la map"); return; } if (gameInfo.typeGame.ToLower() != "bomberman") { Player.SendMessage(p, "Le bomberman n'est pas actif sur cette map"); return; } bBInfo.GameInfo(p); break; case "list": BaseGame.listSave(p, "bomberman"); break; case "save": if (!verif(gameInfo, p)) { return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Impossible de sauvegarder les configurations quand le bomberman est lance"); return; } gameInfo.saveGame(p, message); break; case "load": if (!verif(gameInfo, p)) { return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Impossible de charger des configurations quand le bomberman est lance"); return; } gameInfo.loadGame(p, message); break; case "zone": if (!verif(gameInfo, p)) { return; } CatchPos cpos; cpos.x = 0; cpos.y = 0; cpos.z = 0; p.blockchangeObject = cpos; Player.SendMessage(p, "Place 2 blocs pour determiner la taille."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(ZoneBlocChange1); break; case "portail": if (!verif(gameInfo, p)) { return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Impossible de creer un portail quand le bomberman est lance"); return; } bBInfo.addPortail(p, (ushort)(p.pos[0] / 32), (ushort)(p.pos[1] / 32), (ushort)(p.pos[2] / 32)); break; default: if (gameInfo == null) { if (p.level.world != p.name.ToLower() && p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous ne pouvez pas lancer de jeu dans ce monde"); return; } if (Server.allGames.Count > Server.maxGames) { Player.SendMessage(p, "Le maximum de jeux en simultanees est attein"); Player.SendMessage(p, "Attendez qu'une partie se finisse avant d'en lancer une autre"); return; } BombermanGame bB = new BombermanGame(p.level); bB.owner = p; if (key == "") { Player.SendMessage(p, "Vous devez donner un nom a la partie"); return; } if (message != "") { Player.SendMessage(p, "Le nom de la partie doit etre fait d'un seul mot"); return; } bB.name = key; if (!BaseGame.addGame(bB)) { Player.SendMessage(p, "Impossible de creer le jeu, reessayez !"); return; } Player.SendMessage(p, "Creation du bomberman termine"); Player.GlobalMessage("Une partie de bomberman vas bientot demarrer sur &b" + bB.lvl.name + Server.DefaultColor + " du monde &b" + bB.lvl.world); return; } if (gameInfo.typeGame.ToLower() != "bomberman") { Player.SendMessage(p, "Un jeu est deja actif sur cette map"); return; } if (gameInfo != null) { if (p != gameInfo.owner || p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous n'etes pas le maitre de la partie"); return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Arettez la partie avant de desactiver le bomberman"); return; } gameInfo.deleteGame(p); Player.GlobalMessageLevel(p.level, "Mode bomberman desactive"); return; } break; } }
public override void Use(Player p, string message) { if (message == "") { string games = ""; foreach (string g in BaseGame.NameGames) { games += g + ", "; } if (games == "") { Player.SendMessage(p, "Il n'y a aucun jeu disponible"); return; } Player.SendMessage(p, "Liste des jeux disponible :"); Player.SendMessage(p, games.Remove(games.Length - 2)); return; } if (message == "liste" || message == "list") { string gameinfos = ""; List <string> gamesStarted = new List <string>(); List <string> gamesPlayed = new List <string>(); foreach (BaseGame g in Server.allGames) { if (g == null) { Server.s.Log("Attention pointeur nul dans les jeux !"); continue; } gameinfos = g.name + " (type : " + g.typeGame.ToLower() + ") - map : " + g.lvl.name + " - monde : " + g.lvl.world; if (g.gameOn) { gamesPlayed.Add(gameinfos); } else { gamesStarted.Add(gameinfos); } } if (gamesPlayed.Count == 0 && gamesStarted.Count == 0) { Player.SendMessage(p, "Il y a aucun jeu en cours"); return; } if (gamesPlayed.Count != 0) { Player.SendMessage(p, "Jeux en cours :"); foreach (string g in gamesPlayed) { Player.SendMessage(p, "&c" + g); } } if (gamesStarted.Count != 0) { Player.SendMessage(p, "Jeux joignable :"); foreach (string g in gamesPlayed) { Player.SendMessage(p, "&2" + g); } } return; } if (message.Split(' ')[0] == "commandes") { string name = ""; if (message.IndexOf(' ') != -1) { name = message.Split(' ')[1]; } if (name == "") { if (p == null) { Player.SendMessage(p, "Impossible depuis la console ou l'irc"); return; } BaseGame game = Server.allGames.Find(g => g.lvl == p.level); if (game == null) { Player.SendMessage(p, "Il n'y a pas de jeu sur votre map"); return; } if (game.cmdAllow.Count == 0) { Player.SendMessage(p, "Aucune commande n'est autorise dans ce jeu"); return; } string cmds = ""; foreach (string s in game.cmdAllow) { cmds += s + ", "; } Player.SendMessage(p, "Il y a " + game.cmdAllow.Count + " commandes autorise sur cette map"); Player.SendMessage(p, cmds.Remove(cmds.Length - 2)); } else { if (BaseGame.NameGames.Find(ng => ng.ToLower() == name.ToLower()) == null) { Player.SendMessage(p, "Il n'existe pas de jeu nomme '" + name + "'"); return; } if (!File.Exists("extra/games/" + name.ToLower() + "/default.cmds")) { Player.SendMessage(p, "Par defaut, aucunes commande n'est autorise sur le jeu '" + name + "'"); return; } string[] lignes = File.ReadAllLines("extra/games/" + name.ToLower() + "/default.cmds"); string cmds = ""; foreach (string l in lignes) { if (l == "") { continue; } if (l[0] == '#') { continue; } cmds += l + ", "; } if (cmds == "") { Player.SendMessage(p, "Par defaut, aucunes commande n'est autorise sur le jeu '" + name + "'"); return; } else { Player.SendMessage(p, "Commandes autorise par defaut sur le jeu '" + name + "' :"); Player.SendMessage(p, cmds.Remove(cmds.Length - 2)); } } return; } if (message.IndexOf(' ') == -1) { Help(p); return; } string key = message.Split(' ')[0]; if (key == "cheats") { BaseGame game = Server.allGames.Find(g => g.lvl == p.level); if (game == null) { Player.SendMessage(p, "Il n'y a pas de jeu en cours sur cette map"); return; } if (p != game.owner) { Player.SendMessage(p, "Vous n'etes pas le maitre du jeu"); return; } if (message.Split(' ')[1] == "on") { game.cheat = true; Player.GlobalMessageLevel(p.level, "Les cheats sont maintenant autorise"); } else if (message.Split(' ')[1] == "off") { game.cheat = false; Player.GlobalMessageLevel(p.level, "Les cheats sont maintenant interdit"); } else { Help(p); } return; } if (key == "help") { string name = message.Split(' ')[1]; if (BaseGame.NameGames.Find(ng => ng.ToLower() == name.ToLower()) != null) { Command cmd = Command.all.Find(name); if (cmd != null) { cmd.Help(p); } else { Player.SendMessage(p, "Il n'existe pas de commande de jeu nomme '" + name + "'"); } } else { Player.SendMessage(p, "Il n'existe pas de commande de jeu nomme '" + name + "'"); } return; } if (key == "joindre") { if (p == null) { Player.SendMessage(p, "Impossible depuis la console ou l'irc"); return; } string name = message.Split(' ')[1]; BaseGame game = Server.allGames.Find(g => g.name.ToLower() == name.ToLower()); if (game == null) { Player.SendMessage(p, "Aucun jeu en cours se nome '" + name + "'"); return; } if (game.gameOn) { Player.SendMessage(p, "La partie est en cours, vous rejoignez en tant que spectateur"); } else { Player.SendMessage(p, "Vous rejoignez la map du jeu '" + name + "'."); Player.SendMessage(p, "Lisez /help " + game.typeGame.ToLower() + " pour avoir plus d'infos sur ce jeu"); } Command.all.Find("goto").Use(p, game.lvl.name + " " + game.lvl.world); return; } if (key == "add" || key == "del") { if (message.Split(' ').Length == 3) { if (p != null) { if (p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous n'avez pas le rang pour faire ca !"); return; } } string name = message.Split(' ')[1]; string cmdName = message.Split(' ')[2]; if (BaseGame.NameGames.Find(ng => ng.ToLower() == name.ToLower()) == null) { Player.SendMessage(p, "Il n'existe pas de jeu nomme '" + name + "'"); return; } if (Command.all.Find(cmdName) == null) { Player.SendMessage(p, "La commande '" + cmdName + "' n'existe pas"); return; } if (!Directory.Exists("extra")) { Directory.CreateDirectory("extra"); } if (!Directory.Exists("extra/games")) { Directory.CreateDirectory("extra/games"); } if (!Directory.Exists("extra/games/" + name.ToLower())) { Directory.CreateDirectory("extra/games/" + name.ToLower()); } List <string> cmdAllow = new List <string>(); if (File.Exists("extra/games/" + name.ToLower() + "/default.cmds")) { string[] lignes = File.ReadAllLines("extra/games/" + name.ToLower() + "/default.cmds"); foreach (string l in lignes) { if (l == "") { continue; } if (l[0] == '#') { continue; } if (Command.all.Find(l) == null) { continue; } if (cmdAllow.Find(cmd => cmd == l) == null) { cmdAllow.Add(l); } } } if (cmdAllow.Find(cmd => cmd == cmdName) == null) { if (key == "del") { Player.SendMessage(p, "La commande '" + cmdName + "' n'est pas autorise pour le jeu '" + name + "'"); return; } cmdAllow.Add(cmdName); Player.SendMessage(p, "Ajout de la commande '" + cmdName + "' au jeu '" + name + "'"); } else { if (key == "add") { Player.SendMessage(p, "La commande '" + cmdName + "' est deja autorise pour le jeu '" + name + "'"); return; } cmdAllow.Remove(cmdName); Player.SendMessage(p, "Supression de la commande '" + cmdName + "' au jeu '" + name + "'"); } StreamWriter SW = new StreamWriter(File.Create("extra/games/" + name.ToLower() + "/default.cmds")); foreach (string cmd in cmdAllow) { SW.WriteLine(cmd); } SW.Flush(); SW.Close(); SW.Dispose(); } else if (message.Split(' ').Length == 2) { if (p == null) { Player.SendMessage(p, "Impossible depuis la console ou l'irc"); return; } string cmdName = message.Split(' ')[1]; if (Command.all.Find(cmdName) == null) { Player.SendMessage(p, "La commande '" + cmdName + "' n'existe pas"); return; } BaseGame game = Server.allGames.Find(g => g.lvl == p.level); if (game == null) { Player.SendMessage(p, "Il n'y a pas de jeu sur votre map"); } if (p.group.Permission < LevelPermission.Operator && game.owner != p) { Player.SendMessage(p, "Vous n'avez pas les autorisation pour faire ca !"); return; } if (game.cmdAllow.Find(cmd => cmd == cmdName) == null) { if (key == "del") { Player.SendMessage(p, "La commande '" + cmdName + "' n'est pas autorise"); return; } game.cmdAllow.Add(cmdName); Player.GlobalMessageLevel(p.level, "Ajout de la commande '" + cmdName + "' au jeu"); } else { if (key == "add") { Player.SendMessage(p, "La commande '" + cmdName + "' est deja autorise"); return; } game.cmdAllow.Remove(cmdName); Player.GlobalMessageLevel(p.level, "Supression de la commande '" + cmdName + "' au jeu"); } } else { Help(p); } return; } Help(p); }
public override void Use(Player p, string message) { if (p == null) { Player.SendMessage(p, "Impossible depuis la console ou l'irc"); return; } BaseGame game = Server.allGames.Find(g => g.lvl == p.level); if (game == null) { Player.SendMessage(p, "Il n'y a pas de jeu en cours sur cette map"); return; } if (game.typeGame != "ctf") { Player.SendMessage(p, "Le CTF n'est pas active sur cette map."); return; } CTFGame2 ctfGame = (CTFGame2)game; if (message.Split(' ')[0].ToLower() == "set") { if (game.gameOn) { Player.SendMessage(p, "Vous le pouvez pas rejoindre modifier les equipes en cours de partie"); } if (p.group.Permission >= LevelPermission.Operator) { string name = message.Split(' ')[1].ToLower(); string team = message.Split(' ')[2].ToLower(); if (team == "none") { Player pl = Player.Find(name); if (pl == null || pl.level != p.level) { Player.SendMessage(p, "Ce joueur n'est pas sur la meme map que vous."); } if (pl.team == null) { Player.SendMessage(p, "Ce joueur n'est pas dans une equipe."); } pl.team.RemoveMember(pl); return; } string color = c.Parse(team); if (color == "") { Player.SendMessage(p, "Couleur de d'equipe invalide."); return; } Player who = Player.Find(name); if (who == null || who.level != p.level) { Player.SendMessage(p, "Ce joueur n'est pas sur la meme map que vous."); } char teamCol = (char)color[1]; if (ctfGame.teams.Find(team1 => team1.color == teamCol) == null) { Player.SendMessage(p, "Ce joueur n'est pas dans une equipe."); return; } Team workTeam = ctfGame.teams.Find(team1 => team1.color == teamCol); if (who.team != null) { who.team.RemoveMember(who); } workTeam.AddMember(who); } } if (message.Split(' ')[0].ToLower() == "join") { if (game.gameOn) { Player.SendMessage(p, "Vous ne pouvez pas rejoindre le ctf en cours de partie"); } string color = c.Parse(message.Split(' ')[1]); if (color == "") { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } char teamCol = (char)color[1]; if (ctfGame.teams.Find(team => team.color == teamCol) == null) { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } Team workTeam = ctfGame.teams.Find(team => team.color == teamCol); if (p.team != null) { p.team.RemoveMember(p); } workTeam.AddMember(p); } else if (message.Split(' ')[0].ToLower() == "leave") { if (p.team != null) { p.team.RemoveMember(p); } else { Player.SendMessage(p, "Vous n'etent pas dans une equipe."); return; } } else if (message.Split(' ')[0].ToLower() == "chat") { if (p.team == null) { Player.SendMessage(p, "Vous devez etre dans une equipe pour pouvoir utiliser le tchat d'equipe."); return; } p.teamchat = !p.teamchat; if (p.teamchat) { Player.SendMessage(p, "Le tchat d'equipe est active."); return; } else { Player.SendMessage(p, "Le tchat d'equipe est desactive."); return; } } else if (message.Split(' ')[0].ToLower() == "scores") { foreach (Team t in ctfGame.teams) { Player.SendMessage(p, t.teamstring + " a " + t.points + " point(s)."); } } }
public void Blockchange1(Player p, ushort x, ushort y, ushort z, byte type) { byte by = p.level.GetTile(x, y, z); p.SendBlockchange(x, y, z, by); Pos bp = (Pos)p.blockchangeObject; double a = Math.Sin(((double)(128 - p.rot[0]) / 256) * 2 * Math.PI); double b = Math.Cos(((double)(128 - p.rot[0]) / 256) * 2 * Math.PI); double c = Math.Cos(((double)(p.rot[1] + 64) / 256) * 2 * Math.PI); double bigDiag = Math.Sqrt(Math.Sqrt(p.level.width * p.level.width + p.level.height * p.level.height) + p.level.depth * p.level.depth + p.level.width * p.level.width); List <CatchPos> previous = new List <CatchPos>(); List <CatchPos> allBlocks = new List <CatchPos>(); CatchPos pos; if (p.modeType != Block.air) { type = p.modeType; } Thread gunThread = new Thread(new ThreadStart(delegate { ushort startX = (ushort)(p.pos[0] / 32); ushort startY = (ushort)(p.pos[1] / 32); ushort startZ = (ushort)(p.pos[2] / 32); pos.x = (ushort)Math.Round(startX + (double)(a * 3)); pos.y = (ushort)Math.Round(startY + (double)(c * 3)); pos.z = (ushort)Math.Round(startZ + (double)(b * 3)); for (double t = 4; bigDiag > t; t++) { pos.x = (ushort)Math.Round(startX + (double)(a * t)); pos.y = (ushort)Math.Round(startY + (double)(c * t)); pos.z = (ushort)Math.Round(startZ + (double)(b * t)); by = p.level.GetTile(pos.x, pos.y, pos.z); if (by != Block.air && !allBlocks.Contains(pos)) { if (p.level.physics < 2 || bp.ending <= 0) { break; } else { if (bp.ending == 1) { if ((!Block.LavaKill(by) && !Block.NeedRestart(by)) && by != Block.glass) { break; } } else if (p.level.physics >= 3) { if (by != Block.glass) { p.level.MakeExplosion(pos.x, pos.y, pos.z, 1); break; } } else { break; } } } p.level.Blockchange(pos.x, pos.y, pos.z, type); previous.Add(pos); allBlocks.Add(pos); BaseGame game = Server.allGames.Find(g => g.lvl == p.level); bool comeOut = false; foreach (Player pl in Player.players) { if (pl.level == p.level) { if ((ushort)(pl.pos[0] / 32) == pos.x || (ushort)(pl.pos[0] / 32 + 1) == pos.x || (ushort)(pl.pos[0] / 32 - 1) == pos.x) { if ((ushort)(pl.pos[1] / 32) == pos.y || (ushort)(pl.pos[1] / 32 + 1) == pos.y || (ushort)(pl.pos[1] / 32 - 1) == pos.y) { if ((ushort)(pl.pos[2] / 32) == pos.z || (ushort)(pl.pos[2] / 32 + 1) == pos.z || (ushort)(pl.pos[2] / 32 - 1) == pos.z) { if (game != null) { if (game.typeGame == "ctf") { if (!((CTFGame2)game).friendlyfire && p.team == pl.team) { comeOut = true; break; } pl.health = pl.health - 25; if (pl.health > 0) { pl.addMessage(Server.DefaultColor + "Vie : &" + pl.team.color + pl.health, true, 3); comeOut = true; break; } else { CTFGame2.pinfo pi = ((CTFGame2)game).players.Find(pin => pin.p == p); if (pi != null) { pi.nbKills++; pi.nbPoints++; } } } } if (p.level.physics >= 3 && bp.ending >= 2) { pl.HandleDeath(Block.stone, " s'est fait explose par " + p.color + p.Name(), true); } else { pl.HandleDeath(Block.stone, " s'est fait tue par " + p.color + p.Name()); } comeOut = true; } } } } } if (comeOut) { break; } if (t > 12 && bp.ending != 3) { pos = previous[0]; p.level.Blockchange(pos.x, pos.y, pos.z, Block.air); previous.Remove(pos); } if (bp.ending != 3) { Thread.Sleep(20); } } if (bp.ending == -1) { try { unchecked { p.SendPos((byte)-1, (ushort)(previous[previous.Count - 3].x * 32), (ushort)(previous[previous.Count - 3].y * 32 + 32), (ushort)(previous[previous.Count - 3].z * 32), p.rot[0], p.rot[1]); } } catch { } } if (bp.ending == 3) { Thread.Sleep(400); } foreach (CatchPos pos1 in previous) { p.level.Blockchange(pos1.x, pos1.y, pos1.z, Block.air); if (bp.ending != 3) { Thread.Sleep(20); } } })); gunThread.Start(); }
public override void Use(Player p, string message) { if (p == null) { Player.SendMessage(p, "Impossible depuis la console ou l'irc"); return; } BaseGame gameInfo = Server.allGames.Find(g => g.lvl == p.level); InfectionGame InfInfo = null; if (gameInfo != null) { if (gameInfo.typeGame == "infection") { InfInfo = (InfectionGame)gameInfo; } } string key = ""; if (message == "") { ; } else if (message.IndexOf(' ') == -1) { key = message; message = ""; } else { key = message.Split(' ')[0]; message = message.Substring(message.IndexOf(' ') + 1); } switch (key.ToLower()) { case "start": if (!verif(gameInfo, p)) { return; } if (InfInfo.gameOn) { Player.SendMessage(p, "Le jeu est deja lance"); return; } InfInfo.startGame(p); break; case "stop": if (!verif(gameInfo, p)) { return; } if (!InfInfo.gameOn) { Player.SendMessage(p, "Le jeu n'est pas lance"); return; } InfInfo.gameOn = false; InfInfo.stopGame(p); break; case "info": if (gameInfo == null) { Player.SendMessage(p, "Il y a aucune partie en cours sur la map"); return; } if (gameInfo.typeGame.ToLower() != "infection") { Player.SendMessage(p, "L'infection n'est pas actif sur cette map"); return; } InfInfo.GameInfo(p); break; case "list": BaseGame.listSave(p, "ctf"); break; case "save": if (!verif(gameInfo, p)) { return; } if (InfInfo.gameOn) { Player.SendMessage(p, "Impossible de sauvegarder les configurations quand l'infection est lance"); return; } InfInfo.saveGame(p, message); break; case "load": if (!verif(gameInfo, p)) { return; } if (InfInfo.gameOn) { Player.SendMessage(p, "Impossible de charger une configuration quand l'infection est lance"); return; } InfInfo.loadGame(p, message); break; case "blocs": case "blocks": if (!verif(gameInfo, p)) { return; } int nbBlocs = 0; Int32.TryParse(message, out nbBlocs); if (nbBlocs <= 0) { Player.SendMessage(p, "Vous devez choisir un nombre de blocs superieur a 0 !"); return; } InfInfo.nbBlocsAllow = nbBlocs; Player.SendMessage(p, "Le nombre de blocs posable a ete mis a " + nbBlocs); break; case "time": case "temps": if (!verif(gameInfo, p)) { return; } int nbMins = 0; Int32.TryParse(message, out nbMins); if (nbMins <= 0) { Player.SendMessage(p, "Vous devez choisir un temps superieur a 0 !"); return; } if (nbMins >= 30) { Player.SendMessage(p, "Vous devez choisir un temps de moins de 30 min !"); return; } InfInfo.time = nbMins; Player.SendMessage(p, "Le temps d'une partie est regle a " + nbMins + " minutes"); break; default: if (gameInfo == null) { if (p.level.world != p.name.ToLower() && p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous ne pouvez pas lancer de jeu dans ce monde"); return; } if (Server.allGames.Count > Server.maxGames) { Player.SendMessage(p, "Le maximum de jeux en simultanees est attein"); Player.SendMessage(p, "Attendez qu'une partie se finisse avant d'en lancer une autre"); return; } InfectionGame infection = new InfectionGame(p.level); infection.owner = p; if (key == "") { Player.SendMessage(p, "Vous devez donner un nom a la partie"); return; } if (message != "") { Player.SendMessage(p, "Le nom de la partie doit etre fait d'un seul mot"); return; } infection.name = key; if (!BaseGame.addGame(infection)) { Player.SendMessage(p, "Impossible de creer le jeu, reessayez !"); return; } Player.SendMessage(p, "Creation du ctf termine"); Player.GlobalMessage("Une infection vas bientot demarrer sur &b" + infection.lvl.name + Server.DefaultColor + " du monde &b" + infection.lvl.world); return; } if (gameInfo.typeGame.ToLower() != "infection") { Player.SendMessage(p, "Un jeu est deja actif sur cette map"); return; } if (gameInfo != null) { if (p != gameInfo.owner || p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous n'etes pas le maitre de la partie"); return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Arettez la partie avant de desactiver l'infection"); return; } gameInfo.deleteGame(p); Player.GlobalMessageLevel(p.level, "Infection desactive"); return; } break; } }
public override void Use(Player p, string message) { if (p == null) { Player.SendMessage(p, "Impossible depuis la console ou l'irc"); return; } BaseGame gameInfo = Server.allGames.Find(g => g.lvl == p.level); CTFGame2 ctfInfo = null; if (gameInfo != null) { if (gameInfo.typeGame == "ctf") { ctfInfo = (CTFGame2)gameInfo; } } string key = ""; if (message == "") { ; } else if (message.IndexOf(' ') == -1) { key = message; message = ""; } else { key = message.Split(' ')[0]; message = message.Substring(message.IndexOf(' ') + 1); } switch (key.ToLower()) { case "start": if (!verif(gameInfo, p)) { return; } if (ctfInfo.gameOn) { Player.SendMessage(p, "Le jeu est deja lance"); return; } ctfInfo.startGame(p); break; case "stop": if (!verif(gameInfo, p)) { return; } if (!ctfInfo.gameOn) { Player.SendMessage(p, "Le jeu n'est pas lance"); return; } ctfInfo.gameOn = false; ctfInfo.stopGame(p); break; case "info": if (gameInfo == null) { Player.SendMessage(p, "Il y a aucune partie en cours sur la map"); return; } if (gameInfo.typeGame.ToLower() != "ctf") { Player.SendMessage(p, "Le ctf n'est pas actif sur cette map"); return; } ctfInfo.GameInfo(p); break; case "list": BaseGame.listSave(p, "ctf"); break; case "save": if (!verif(gameInfo, p)) { return; } if (ctfInfo.gameOn) { Player.SendMessage(p, "Impossible de sauvegarder les configurations quand le CTF est lance"); return; } ctfInfo.saveGame(p, message); break; case "load": if (!verif(gameInfo, p)) { return; } if (ctfInfo.gameOn) { Player.SendMessage(p, "Impossible de charger une configuration quand le CTF est lance"); return; } ctfInfo.loadGame(p, message); break; case "clear": if (!verif(gameInfo, p)) { return; } ctfInfo.stopGame(p); List <Team> storedT = new List <Team>(); for (int i = 0; i < ctfInfo.teams.Count; i++) { storedT.Add(ctfInfo.teams[i]); } foreach (Team t in storedT) { ctfInfo.RemoveTeam("&" + t.color); } ctfInfo.onTeamCheck.Stop(); ctfInfo.onTeamCheck.Dispose(); ctfInfo.gameOn = false; ctfInfo.loadCmds(); Player.SendMessage(p, "Les parametres du CTF ont ete remis a 0."); break; case "ff": if (!verif(gameInfo, p)) { return; } if (ctfInfo.friendlyfire) { p.level.ChatLevel("Les tirs alliers ont ete activer."); ctfInfo.friendlyfire = false; } else { p.level.ChatLevel("Les tirs alliers ont ete activer."); ctfInfo.friendlyfire = true; } break; case "flag": if (!verif(gameInfo, p)) { return; } string colorf = c.Parse(message); if (colorf == "") { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } char teamColf = (char)colorf[1]; if (ctfInfo.teams.Find(team => team.color == teamColf) == null) { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } CatchPos cpos; cpos.x = 0; cpos.y = 0; cpos.z = 0; cpos.color = colorf; p.blockchangeObject = cpos; Player.SendMessage(p, "Place un bloc pour determiner la position du drapeau."); p.ClearBlockchange(); p.Blockchange += new Player.BlockchangeEventHandler(FlagBlockChange); break; case "spawn": if (!verif(gameInfo, p)) { return; } string colors = c.Parse(message); if (colors == "") { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } char teamCols = (char)colors[1]; if (ctfInfo.teams.Find(team => team.color == teamCols) == null) { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } AddSpawn(p, colors, ctfInfo); break; case "points": if (!verif(gameInfo, p)) { return; } int points = 0; Int32.TryParse(message, out points); if (points <= 0) { Player.SendMessage(p, "Vous devez choisir un nombre de points superieur a 0 !"); return; } ctfInfo.maxPoints = points; Player.SendMessage(p, "Le nombre de points a ete mis a " + points); break; case "team": if (!verif(gameInfo, p)) { return; } if (message.Split(' ').Length != 2) { Help(p); return; } if (message.Split(' ')[0] == "add") { string colort = c.Parse(message.Split(' ')[1]); if (colort == "") { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } char teamColt = (char)colort[1]; switch (teamColt) { case '2': case '5': case '8': case '9': case 'c': case 'e': case 'f': AddTeam(p, colort, ctfInfo); break; default: Player.SendMessage(p, "Couleur d'equipe invalide."); return; } } else if (message.Split(' ')[0] == "remove") { string colort = c.Parse(message.Split(' ')[1]); if (colort == "") { Player.SendMessage(p, "Couleur d'equipe invalide."); return; } char teamColt = (char)colort[1]; switch (teamColt) { case '2': case '5': case '8': case '9': case 'c': case 'e': case 'f': RemoveTeam(p, colort, ctfInfo); break; default: Player.SendMessage(p, "Couleur d'equipe invalide."); return; } } break; default: if (gameInfo == null) { if (p.level.world != p.name.ToLower() && p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous ne pouvez pas lancer de jeu dans ce monde"); return; } if (Server.allGames.Count > Server.maxGames) { Player.SendMessage(p, "Le maximum de jeux en simultanees est attein"); Player.SendMessage(p, "Attendez qu'une partie se finisse avant d'en lancer une autre"); return; } CTFGame2 ctf = new CTFGame2(p.level); ctf.owner = p; if (key == "") { Player.SendMessage(p, "Vous devez donner un nom a la partie"); return; } if (message != "") { Player.SendMessage(p, "Le nom de la partie doit etre fait d'un seul mot"); return; } ctf.name = key; if (!BaseGame.addGame(ctf)) { Player.SendMessage(p, "Impossible de creer le jeu, reessayez !"); return; } Player.SendMessage(p, "Creation du ctf termine"); Player.GlobalMessage("Une partie de CTF vas bientot demarrer sur &b" + ctf.lvl.name + Server.DefaultColor + " du monde &b" + ctf.lvl.world); return; } if (gameInfo.typeGame.ToLower() != "ctf") { Player.SendMessage(p, "Un jeu est deja actif sur cette map"); return; } if (gameInfo != null) { if (p != gameInfo.owner || p.group.Permission < LevelPermission.Operator) { Player.SendMessage(p, "Vous n'etes pas le maitre de la partie"); return; } if (gameInfo.gameOn) { Player.SendMessage(p, "Arettez la partie avant de desactiver le ctf"); return; } gameInfo.deleteGame(p); Player.GlobalMessageLevel(p.level, "Mode CTF desactive"); return; } break; } }