示例#1
0
        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);
        }
示例#2
0
        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;
            }
        }
示例#3
0
        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;
            }
        }
示例#4
0
        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;
            }
        }
示例#5
0
        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);
        }
示例#6
0
        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).");
                }
            }
        }
示例#7
0
        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();
        }
示例#8
0
        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;
            }
        }
示例#9
0
        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;
            }
        }