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)); } }
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)); } }
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)); }
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); }