예제 #1
0
        void cmdChat(BasePlayer player, string command, string[] args)
        {
            if (!IsPlayerPermitted(player, PermissionName))
            {
                return;
            }

            if (args.Length > 0)
            {
                string cmdWithArgs = ArrayToString(args);

                QueryLanguage.Lexer lexer = new QueryLanguage.Lexer();

                lexer.Parse(cmdWithArgs);

                QueryLanguage.Parser parser = new QueryLanguage.Parser(lexer.Lexems as List <QueryLanguage.Lexem>);

                QueryLanguage.LexemType type = parser.ParseCommand();

                string id = parser.ParseId();

                switch (type)
                {
                case QueryLanguage.LexemType.AddCmd: {
                    if (string.IsNullOrEmpty(id))
                    {
                        PrintToChat(player, Lang("ErrorEnterID", player));
                        return;
                    }

                    AddCommand(parser, id, player);
                }
                break;

                case QueryLanguage.LexemType.RemoveCmd: {
                    if (string.IsNullOrEmpty(id))
                    {
                        PrintToChat(player, Lang("ErrorEnterID", player));
                        return;
                    }

                    RemoveCommand(parser, id, player);
                }
                break;

                case QueryLanguage.LexemType.ListCmd:
                    ListCommand(parser, player);
                    break;

                default:
                    PrintToChat(player, Lang("HelpText", player));
                    break;
                }
            }
            else
            {
                PrintToChat(player, Lang("HelpText", player));
            }
        }
예제 #2
0
 void RemoveCommand(QueryLanguage.Parser parser, string id, BasePlayer player)
 {
     if (data.Zones.RemoveWhere(x => x.Id == id) > 0)
     {
         player.ChatMessage(Lang("Removed", player));
     }
     else
     {
         player.ChatMessage(Lang("ErrorNotFound", player));
     }
 }
예제 #3
0
        void AddCommand(QueryLanguage.Parser parser, string id, BasePlayer player)
        {
            PrintToChat("AddCommand");

            List <string> cmds = parser.ParseCommands();

            if (cmds.Count == 0)
            {
                PrintToChat(player, Lang("ErrorEnterCommands", player));
                return;
            }

            QueryLanguage.Parser.ExecutionAndCount executionAndCount = parser.ParseExecutionAndCount();

            Methods method = Methods.Always;

            switch (executionAndCount.Execution1)
            {
            case QueryLanguage.LexemType.Always: method = Methods.Always; break;

            case QueryLanguage.LexemType.Once: method = Methods.Once; break;
            }

            switch (executionAndCount.Execution2)
            {
            case QueryLanguage.LexemType.Player: method = Methods.PerPlayer; break;

            case QueryLanguage.LexemType.Day: method = Methods.PerDay; break;

            case QueryLanguage.LexemType.Game: method = Methods.PerGame; break;
            }

            if (executionAndCount.Execution2 == QueryLanguage.LexemType.Game && executionAndCount.Execution3 == QueryLanguage.LexemType.Day)
            {
                method = Methods.PerGameDay;
            }

            Zone zone = new Zone(id);

            zone.Commands  = new List <string>(cmds);
            zone.Mode      = parser.ParseRule() == QueryLanguage.LexemType.Exit ? Modes.OnExit : Modes.OnEnter;
            zone.Amount    = executionAndCount.Count;
            zone.Method    = method;
            zone.UserGroup = parser.ParseUserGroup();

            data.Add(zone);

            SaveData();
            PrintToChat(player, Lang("Added", player));
        }
예제 #4
0
        void ListCommand(QueryLanguage.Parser parser, BasePlayer player)
        {
            string result = string.Empty;

            foreach (Zone zone in data.Zones)
            {
                result += zone.Id + " (" + (zone.Mode == Modes.OnEnter ? "on enter" : "on exit") + ", " + zone.Method.ToString().ToLower() + "):\n\t";

                foreach (string command in zone.Commands)
                {
                    result += command + ", ";
                }

                result = result.Substring(0, result.Length - 2);
            }

            if (string.IsNullOrEmpty(result))
            {
                player.ChatMessage(Lang("ErrorNotFound", player));
                return;
            }

            player.ChatMessage(result);
        }