Exemplo n.º 1
0
        private void ProcessCommandInvoke(int source, List <object> args, string raw)
        {
            string baseCommand = raw.Split(' ')[0].Replace("/", "");

            if (args.Count < 1)
            {
                //Show base command usage.
                return;
            }

            string subCommand = (string)args[0];

            RaceCommandDefinition currentDefinition = null;

            foreach (RaceCommandDefinition def in commandDefinitions)
            {
                if (string.Compare(baseCommand, def.BaseCommand, true) == 0 &&
                    string.Compare(subCommand, def.SubCommand, true) == 0)
                {
                    currentDefinition = def;
                    break;
                }
            }

            if (currentDefinition != null)
            {
                bool          isValid    = true;
                string        paramName  = "";
                List <object> paramList  = new List <object>();
                int           paramCount = 1;

                if (currentDefinition.Parameters.Count > args.Count)
                {
                    //TODO: Move this to RaceCommandDefinition.
                    currentDefinition.OnCommandFailed.DynamicInvoke(new[] {
                        $"Parameter count doesn't match, expected {currentDefinition.Parameters.Count} params , got {args.Count} params."
                    });

                    return;
                }

                string paramInvalidReason = "";

                foreach (var paramKvp in currentDefinition.Parameters)
                {
                    paramName = paramKvp.Key;
                    var param = paramKvp.Value;
                    var arg   = args[paramCount];

                    //Add player source.
                    if (string.Compare("player", param.Name) == 0)
                    {
                        paramList.Add(source);
                    }
                    //Else we copy over any of the args we got passed.
                    else if (param.IsParamValid(arg, out paramInvalidReason))
                    {
                        paramList.Add(arg);
                        paramCount++;
                    }

                    else
                    {
                        isValid = false;
                        break;
                    }
                }

                if (!isValid)
                {
                    currentDefinition.InvokeFailed(paramInvalidReason);
                }
                else
                {
                    currentDefinition.InvokeSuccess(paramList.ToArray());
                }
            }
        }
Exemplo n.º 2
0
 public void Register(RaceCommandDefinition definition)
 {
     //TODO: Set the restricted/permissions parameter.
     registerProxy?.Invoke(definition.BaseCommand, new RaceCommandInvokable(ProcessCommandInvoke), false);
     commandDefinitions.Add(definition);
 }