예제 #1
0
        /// <summary>Executes the trigger in Context</summary>
        public void ExecuteInContext(CmdTrigger <RealmServerCmdArgs> trigger,
                                     Action <CmdTrigger <RealmServerCmdArgs> > doneCallback, Action <CmdTrigger <RealmServerCmdArgs> > failCalback)
        {
            BaseCommand <RealmServerCmdArgs> cmd = this.GetCommand(trigger);

            if (cmd == null)
            {
                return;
            }
            if (cmd.GetRequiresContext())
            {
                if (trigger.Args.Context == null)
                {
                    RealmCommandHandler.OnInvalidArguments(trigger, (RealmServerCommand)cmd.RootCmd);
                }
                else
                {
                    trigger.Args.Context.ExecuteInContext((Action)(() =>
                                                                   this.Execute(trigger, cmd, doneCallback, failCalback)));
                }
            }
            else
            {
                this.Execute(trigger, cmd, doneCallback, failCalback);
            }
        }
예제 #2
0
        public static void Initialize()
        {
            if (RealmCommandHandler.Instance.TriggerValidator != null)
            {
                return;
            }
            char ch;

            if (RealmCommandHandler.CommandPrefixes.Contains <char>(ch = RealmCommandHandler.ExecCommandPrefix) ||
                RealmCommandHandler.CommandPrefixes.Contains <char>(ch = RealmCommandHandler.SelectCommandPrefix))
            {
                throw new ArgumentException("Invalid Command-prefix may not be used as Command-prefix: " + (object)ch);
            }
            RealmCommandHandler.Instance.TriggerValidator =
                (CommandMgr <RealmServerCmdArgs> .TriggerValidationHandler)((trigger, cmd, silent) =>
            {
                Command <RealmServerCmdArgs> rootCmd = cmd.RootCmd;
                if (rootCmd is CommandMgr <RealmServerCmdArgs> .HelpCommand)
                {
                    return(true);
                }
                if (!trigger.Args.Role.MayUse(rootCmd))
                {
                    if (!silent)
                    {
                        trigger.Reply(RealmLangKey.MustNotUseCommand, (object)cmd.Name);
                    }
                    return(false);
                }

                if (rootCmd is RealmServerCommand && !trigger.Args.CheckArgs(rootCmd))
                {
                    if (!silent)
                    {
                        RealmCommandHandler.OnInvalidArguments(trigger, (RealmServerCommand)rootCmd);
                    }
                    return(false);
                }

                if (!(trigger.Args.Target is Character) ||
                    !(((Character)trigger.Args.Target).Account.Role > trigger.Args.Role))
                {
                    return(true);
                }
                if (!silent)
                {
                    trigger.Reply("Insufficient privileges.");
                }
                return(false);
            });
            RealmCommandHandler.Instance.AddCmdsOfAsm(typeof(RealmCommandHandler).Assembly);
            RealmCommandHandler.Instance.UnknownCommand +=
                (CommandMgr <RealmServerCmdArgs> .UnknownCommandHandler)(trigger =>
                                                                         trigger.Reply("Unknown Command \"" + trigger.Alias + "\" - Type ? for help."));
        }