public override bool ParseArgs(IScenarioContent content, ref IfGotoArgs args, out string error)
        {
            // if var goto #flag;
            // if !var goto #flag;
            // if var >= num goto #flag;
            if (content.length != 4 && content.length != 6)
            {
                error = GetLengthErrorString(4, 6);
                return(false);
            }

            string gotoStr;

            if (content.length == 4)
            {
                string varName;
                if (content[1][0] == '!')
                {
                    varName        = content[1].Remove(0, 1);
                    args.condition = "==";
                }
                else
                {
                    varName        = content[1];
                    args.condition = "!=";
                }

                if (!ParseOrGetVarValue(varName, ref args.left, out error))
                {
                    return(false);
                }
                args.right = 0;

                gotoStr   = content[2];
                args.flag = content[3];
            }
            else
            {
                if (!ParseOrGetVarValue(content[1], ref args.left, out error))
                {
                    return(false);
                }

                if (!IsMatchConditionOperator(content[2], ref args.condition, out error))
                {
                    return(false);
                }

                if (!ParseOrGetVarValue(content[3], ref args.right, out error))
                {
                    return(false);
                }

                gotoStr   = content[4];
                args.flag = content[5];
            }

            if (gotoStr != "goto")
            {
                error = string.Format(
                    "{0} ParseArgs error: keycode `{1}` is not equal to `goto`.",
                    GetType().Name,
                    gotoStr);
                return(false);
            }

            error = null;
            return(true);
        }
        protected override ActionStatus Run(IGameAction gameAction, IScenarioContent content, IfGotoArgs args, out string error)
        {
            ScenarioAction action;

            if (!ParseAction <ScenarioAction>(gameAction, out action, out error))
            {
                return(ActionStatus.Error);
            }

            if (CompareResult(args.condition, args.left, args.right))
            {
                return(action.GotoCommand(args.flag, out error));
            }

            error = null;
            return(ActionStatus.Continue);
        }