Exemple #1
0
 public void OnUpdate()
 {
     for (int i = 0; i < ArenaManager.Arenas.Count; i++)
     {
         var arena = ArenaManager.Arenas[i];
         if (ParamContains(arena, "autochange"))
         {
             if (arena.NextChange < DateTime.Now)
             {
                 string[] param       = arena.Parameters.Find(s => s.StartsWith("autochange")).Split(':');
                 int      nextVoteSec = int.Parse(param[1]);
                 string   tag         = param[2];
                 var      maps        = MapManager.GetMapsByTag(tag);
                 maps.RemoveAll(mp => mp.Size.X > arena.Size.X || mp.Size.Y > arena.Size.Y);
                 maps.Remove(arena.Map);
                 if (maps.Count > 0)
                 {
                     int id = new Random().Next() % maps.Count;
                     ArenaManager.SetMap(arena, maps[id]);
                 }
                 arena.NextChange = DateTime.Now.AddSeconds(nextVoteSec);
             }
         }
     }
     for (int i = 0; i < Votings.Count; i++)
     {
         if (Votings[i].CheckEnd())
         {
             var      arena = Votings[i].Arena;
             var      map   = Votings[i].GetWinner();
             string[] param = arena.Parameters.Find(s => s.StartsWith("vote")).Split(':');
             ArenaManager.SetMap(arena, map);
             arena.NextChange = DateTime.Now;
             var nextVote = DateTime.Now.AddSeconds(int.Parse(param[2]));
             arena.NextChange = nextVote;
             ArenaManager.GetPlayersInArena(arena).ForEach(plr =>
                                                           plr.SendInfoMessage($"Next vote will be available in {GenerateTimeString(TimeSpan.FromSeconds(int.Parse(param[1])))}"));
             Votings.RemoveAt(i);
         }
     }
 }
Exemple #2
0
        private void ArenaCmd(CommandArgs args)
        {
            string subCmd = args.Parameters.Count == 0 ? "help" : args.Parameters[0];


            switch (subCmd)
            {
                #region Define
            case "define":
                if (args.Parameters.Count < 3)
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /arena define <name> <mapname> [align] [width] [height]");
                    return;
                }

                var arena = ArenaManager.GetArenaByName(args.Parameters[1]);
                if (arena != null)
                {
                    args.Player.SendErrorMessage($"Arena {arena.Name} already exist!");
                    return;
                }

                var map = MapManager.GetMapByName(args.Parameters[2]);
                if (map == null)
                {
                    args.Player.SendErrorMessage($"Map {args.Parameters[2]} does not exist!");
                    return;
                }

                string align;
                if (args.Parameters.Count > 3)
                {
                    if (!CheckAlign(args.Player, args.Parameters[3].ToLower()))
                    {
                        return;
                    }
                    align = args.Parameters[3].ToLower();
                }
                else
                {
                    align = "c";
                }

                var playerInfo = args.Player.GetPlayerInfo();
                if (args.Parameters.Count == 6)
                {
                    Point size;
                    if (!int.TryParse(args.Parameters[4], out size.X))
                    {
                        args.Player.SendErrorMessage($"Invalid width {args.Parameters[4]}");
                        return;
                    }
                    if (!int.TryParse(args.Parameters[5], out size.Y))
                    {
                        args.Player.SendErrorMessage($"Invalid height {args.Parameters[5]}");
                        return;
                    }
                    size.X--;
                    size.Y--;
                    if (map.Size.X > size.X || map.Size.Y > size.Y)
                    {
                        args.Player.SendErrorMessage($"Map size must be smaller than arena size!");
                        return;
                    }
                    playerInfo.Point = size;
                    playerInfo.State = State.ArenaSetWithSize;
                    args.Player.SendInfoMessage("Set point for create new arena.");
                }
                else
                {
                    playerInfo.State = State.ArenaSet;
                    args.Player.SendInfoMessage("Set 2 point or use The Grand Design for create new arena.");
                }
                playerInfo.Name  = args.Parameters[1];
                playerInfo.Map   = map;
                playerInfo.Align = align;


                break;
                #endregion

                #region Delete
            case "delete":
                if (args.Parameters.Count < 2)
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /arena delete <name> ");
                    return;
                }

                arena = ArenaManager.GetArenaByName(args.Parameters[1]);
                if (arena == null)
                {
                    args.Player.SendErrorMessage($"Arena {args.Parameters[1]} does not exist!");
                    return;
                }

                ArenaManager.RemoveArena(arena);
                args.Player.SendSuccessMessage("Arena deleted successfully.");
                break;
                #endregion

                #region Setmap
            case "setmap":
                if (args.Parameters.Count < 3)
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /arena setmap <name> <mapname> ");
                    return;
                }

                arena = ArenaManager.GetArenaByName(args.Parameters[1]);
                if (arena == null)
                {
                    args.Player.SendErrorMessage($"Arena {args.Parameters[1]} does not exist!");
                    return;
                }

                map = MapManager.GetMapByName(args.Parameters[2]);
                if (map == null)
                {
                    args.Player.SendErrorMessage($"Map {args.Parameters[2]} does not exist!");
                    return;
                }

                if (map.Size.X > arena.Size.X || map.Size.Y > arena.Size.Y)
                {
                    args.Player.SendErrorMessage($"Map size must be smaller than arena size!");
                    return;
                }
                ArenaManager.SetMap(arena, map);
                args.Player.SendSuccessMessage("New map setted.");
                break;
                #endregion

                #region Align
            case "align":
                if (args.Parameters.Count < 3)
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /arena align <name> <align>");
                    return;
                }

                arena = ArenaManager.GetArenaByName(args.Parameters[1]);
                if (arena == null)
                {
                    args.Player.SendErrorMessage($"Arena {args.Parameters[1]} does not exist!");
                    return;
                }


                if (!CheckAlign(args.Player, args.Parameters[2].ToLower()))
                {
                    return;
                }
                align = args.Parameters[2].ToLower();

                ArenaManager.SetAlign(arena, align);
                args.Player.SendSuccessMessage("New align setted.");
                break;

                #endregion

                #region Info
            case "info":
                if (args.Parameters.Count < 2)
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /arena info <name> [page number]");
                    return;
                }
                arena = ArenaManager.GetArenaByName(args.Parameters[1]);
                if (arena == null)
                {
                    args.Player.SendErrorMessage($"Arena {args.Parameters[1]} does not exist!");
                    return;
                }
                int page = 1;
                if (args.Parameters.Count > 2)
                {
                    if (!int.TryParse(args.Parameters[2], out page))
                    {
                        args.Player.SendErrorMessage($"Invalid number {args.Parameters[2]}.");
                        return;
                    }
                }
                PaginationTools.SendPage(args.Player, page, ArenaManager.ArenaInfo(arena),
                                         new PaginationTools.Settings()
                {
                    NothingToDisplayString = "Arena not found. Use /arena define <name> <mapname> for create arena.",
                    HeaderFormat           = "Arena info ({0}/{1}):",
                    FooterFormat           = "Type /arena info " + arena.Name + " {0} for more.",
                });
                break;
                #endregion

                #region List
            case "list":
                page = 1;
                if (args.Parameters.Count > 1)
                {
                    if (!int.TryParse(args.Parameters[1], out page))
                    {
                        args.Player.SendErrorMessage($"Invalid number {args.Parameters[1]}.");
                        return;
                    }
                }
                PaginationTools.SendPage(args.Player, page, PaginationTools.BuildLinesFromTerms(ArenaManager.ArenaList),
                                         new PaginationTools.Settings()
                {
                    NothingToDisplayString = "Arenas not found. Use /arena define for map save",
                    HeaderFormat           = "Arena list ({0}/{1}):",
                    FooterFormat           = "Type /arena list {0} for more.",
                });
                break;
                #endregion

                #region AddParam
            case "addparam":
            case "ap":

                if (args.Parameters.Count < 3)
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /arena ap <arenaname> <param>");
                    return;
                }
                string param = args.Parameters[2];
                if ((param == "vote" || param == "vt"))
                {
                    if (args.Parameters.Count != 5)
                    {
                        args.Player.SendErrorMessage($"Invalid syntax! Proper syntax: /arena ap <arenaname> vote [votetime] [voterepeat]");
                        return;
                    }
                    int i = 0;
                    if (!int.TryParse(args.Parameters[3], out i))
                    {
                        args.Player.SendErrorMessage($"Invalid number {args.Parameters[3]}!");
                        return;
                    }
                    if (!int.TryParse(args.Parameters[4], out i))
                    {
                        args.Player.SendErrorMessage($"Invalid number {args.Parameters[4]}!");
                        return;
                    }
                    param = string.Format("{0}:{1}:{2}", param, args.Parameters[3], args.Parameters[4]);
                }

                if (param == "autochange" || param == "ac")
                {
                    if (args.Parameters.Count != 5)
                    {
                        args.Player.SendErrorMessage($"Invalid syntax! Proper syntax: /arena ap <arenaname> autochange [maptag] [timer]");
                        return;
                    }
                    int i = 0;
                    if (!int.TryParse(args.Parameters[3], out i))
                    {
                        args.Player.SendErrorMessage($"Invalid number{args.Parameters[3]}!");
                        return;
                    }
                    param = string.Format("{0}:{1}:{2}", param, args.Parameters[3], args.Parameters[4]);
                }


                arena = ArenaManager.GetArenaByName(args.Parameters[1]);
                if (arena == null)
                {
                    args.Player.SendErrorMessage($"Arena {args.Parameters[1]} does not exist!");
                    return;
                }

                if (!ParamManager.AddParam(arena, param))
                {
                    args.Player.SendErrorMessage($"Failed add param!");
                    return;
                }
                args.Player.SendSuccessMessage($"Success add param!");
                break;
                #endregion

                #region RemoveParam
            case "removeparam":
            case "rp":
                if (args.Parameters.Count < 3)
                {
                    args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /arena rp <arenaname> <param>");
                    return;
                }
                param = args.Parameters[2];


                arena = ArenaManager.GetArenaByName(args.Parameters[1]);
                if (arena == null)
                {
                    args.Player.SendErrorMessage($"Arena {args.Parameters[1]} does not exist!");
                    return;
                }

                if (!ParamManager.RemoveParam(arena, param))
                {
                    args.Player.SendErrorMessage($"Failed remove param!");
                    return;
                }
                args.Player.SendSuccessMessage($"Success remove param!");
                break;
                #endregion

                #region ParamList
            case "paramlist":
            case "pl":
                page = 1;
                if (args.Parameters.Count > 1)
                {
                    if (!int.TryParse(args.Parameters[1], out page))
                    {
                        args.Player.SendErrorMessage($"Invalid number {args.Parameters[1]}.");
                        return;
                    }
                }
                var helpList = new List <string>
                {
                    "vote (vt) - allow vote for arena, require vote time & repeat vote time in seconds.",
                    "autochange (ac) - set random map with given tag in given time in seconds.",
                    "autopvp (ap) - activate players pvp if they in arena area.",
                    "autotp (tp) - teleport into spawn if player not in pvp.",
                    "autoinvise (ai) - give invisibile buff if player not in pvp",
                    "autospawn (as) - teleport into arena spawn if player activate pvp"
                };
                PaginationTools.SendPage(args.Player, page, helpList,
                                         new PaginationTools.Settings()
                {
                    HeaderFormat = "Param list ({0}/{1}):",
                    FooterFormat = "Type /param pl {0} for more.",
                });
                break;
                #endregion

                #region Help
            case "help":
                page = 1;
                if (args.Parameters.Count > 1)
                {
                    if (!int.TryParse(args.Parameters[1], out page))
                    {
                        args.Player.SendErrorMessage($"Invalid number {args.Parameters[1]}.");
                        return;
                    }
                }
                helpList = new List <string>
                {
                    "define <arenaname> <mapname> [align] [width] [height] - create arena.",
                    "delete <arenaname> - remove arena.",
                    "setmap <arenaname> <mapname> - set new map for arena",
                    "align <arenaname> <align> - set new align for arena",
                    "info <arenaname> - return info about arena",
                    "list [page] - return arena list",
                    "addparam <arenaname> <param> - adds param for arena",
                    "removeparam <arenaname> <param> - remove param for arena",
                    "paramlist [page] - return param list."
                };
                PaginationTools.SendPage(args.Player, page, helpList,
                                         new PaginationTools.Settings()
                {
                    HeaderFormat = "Arena sub command list ({0}/{1}):",
                    FooterFormat = "Type /arena help {0} for more.",
                });
                break;
                #endregion

            default:
                args.Player.SendErrorMessage("Invalid sub command! Check /arena help for more details.");
                break;
            }
        }