Пример #1
0
        public override void Trigger()
        {
            EPreconditionDecision decision = Decision;

            if (decision == EPreconditionDecision.WHO_WILL)
            {
                throw new Exception("Precondition WHO_WILL makes no sense here");
            }
            if (decision != EPreconditionDecision.TEXT_INPUT)
            {
                base.Trigger();
                return;
            }
            throw new Exception("Precondition TEXT_INPUT makes no sense here");
        }
Пример #2
0
        protected internal static BasePrecondition ParsePrecondition(String p_precondition)
        {
            if (p_precondition == "NONE" || p_precondition == String.Empty)
            {
                return(null);
            }
            String[] array = p_precondition.Split(new Char[]
            {
                ','
            });
            if (array[0] == "NONE")
            {
                return(null);
            }
            BasePrecondition      basePrecondition      = null;
            String                maintext              = String.Empty;
            String                successText           = String.Empty;
            String                failText              = String.Empty;
            String                text                  = String.Empty;
            EPotionTarget         attribute             = EPotionTarget.NONE;
            Int32                 requiredValue         = 0;
            EPreconditionDecision epreconditionDecision = (EPreconditionDecision)Enum.Parse(typeof(EPreconditionDecision), array[1]);

            maintext = array[2];
            if (epreconditionDecision == EPreconditionDecision.TEXT_INPUT && array.Length > 5)
            {
                text = array[5];
            }
            if (epreconditionDecision == EPreconditionDecision.WHO_WILL && array.Length > 5)
            {
                attribute     = (EPotionTarget)Enum.Parse(typeof(EPotionTarget), array[5]);
                requiredValue = Convert.ToInt32(array[6]);
            }
            if (array[0] == "PLAIN")
            {
                basePrecondition = new PlainPrecondition();
            }
            else
            {
                successText = array[3];
                failText    = array[4];
            }
            if (array[0] == "SELECT_CHARACTER")
            {
                basePrecondition = new SelectCharacterPrecondition();
            }
            if (array[0] == "TEST")
            {
                if (array.Length != 7)
                {
                    throw new FormatException(String.Concat(new Object[]
                    {
                        "Could not parse precondition params ",
                        p_precondition,
                        " because it contains ",
                        array.Length,
                        " arguments instead of ",
                        7
                    }));
                }
                basePrecondition = new TestPrecondition
                {
                    Attribute     = attribute,
                    RequiredValue = requiredValue,
                    SuccessText   = successText,
                    FailText      = failText
                };
            }
            if (array[0] == "CHALLENGE")
            {
                if (array.Length != 8 && array.Length != 7)
                {
                    throw new FormatException(String.Concat(new Object[]
                    {
                        "Could not parse precondition params ",
                        p_precondition,
                        " because it contains ",
                        array.Length,
                        " arguments instead of ",
                        8
                    }));
                }
                if (array.Length == 8)
                {
                    basePrecondition = new ChallengePrecondition
                    {
                        Attribute     = attribute,
                        RequiredValue = requiredValue,
                        SuccessText   = successText,
                        FailText      = failText,
                        Damage        = Convert.ToInt32(array[7])
                    };
                }
                else
                {
                    basePrecondition = new ChallengePrecondition
                    {
                        Attribute     = attribute,
                        RequiredValue = requiredValue,
                        SuccessText   = successText,
                        FailText      = failText,
                        Damage        = 0
                    };
                }
            }
            if (array[0] == "SECRET_CHALLENGE")
            {
                if (array.Length != 8)
                {
                    throw new FormatException(String.Concat(new Object[]
                    {
                        "Could not parse precondition params ",
                        p_precondition,
                        " because it contains ",
                        array.Length,
                        " arguments instead of ",
                        8
                    }));
                }
                basePrecondition = new SecretChallengePrecondition
                {
                    Attribute     = attribute,
                    RequiredValue = requiredValue,
                    SuccessText   = successText,
                    FailText      = failText,
                    Damage        = Convert.ToInt32(array[7])
                };
            }
            if (array[0] == "DISARM_TRAP")
            {
                if (array.Length != 7)
                {
                    throw new FormatException(String.Concat(new Object[]
                    {
                        "Could not parse precondition params ",
                        p_precondition,
                        " because it contains ",
                        array.Length,
                        " arguments instead of ",
                        7
                    }));
                }
                basePrecondition = new DisarmTrapPrecondition
                {
                    Attribute     = attribute,
                    RequiredValue = requiredValue,
                    SuccessText   = successText,
                    FailText      = failText
                };
            }
            if (array[0] == "INPUT")
            {
                if (array.Length != 6)
                {
                    throw new FormatException(String.Concat(new Object[]
                    {
                        "Could not parse precondition params ",
                        p_precondition,
                        " because it contains ",
                        array.Length,
                        " arguments instead of ",
                        6
                    }));
                }
                basePrecondition = new InputPrecondition
                {
                    WantedInput = text,
                    SuccessText = successText,
                    FailText    = failText
                };
            }
            if (array[0] == "UNLOCK_KEY")
            {
                if (array.Length != 6)
                {
                    throw new FormatException(String.Concat(new Object[]
                    {
                        "Could not parse precondition params ",
                        p_precondition,
                        " because it contains ",
                        array.Length,
                        " arguments instead of ",
                        6
                    }));
                }
                Int32 wantedPrivilege = 0;
                if (text != String.Empty)
                {
                    wantedPrivilege = Int32.Parse(text, CultureInfo.InvariantCulture.NumberFormat);
                }
                basePrecondition = new UnlockKeyPrecondition
                {
                    WantedPrivilege = wantedPrivilege,
                    SuccessText     = successText,
                    FailText        = failText
                };
            }
            if (array[0] == "PARTY_CHECK")
            {
                if (array.Length != 13 && array.Length != 10 && array.Length != 9 && array.Length != 8)
                {
                    throw new FormatException(String.Concat(new Object[]
                    {
                        "Could not parse precondition params ",
                        p_precondition,
                        " because it contains ",
                        array.Length,
                        " arguments instead of ",
                        13
                    }));
                }
                if (array.Length > 5)
                {
                    basePrecondition = new PartyCheckPrecondition
                    {
                        SuccessText               = successText,
                        FailText                  = failText,
                        RequiredTokenID           = Convert.ToInt32(array[5]),
                        RequiredBlessingID        = Convert.ToInt32(array[6]),
                        RequiredActiveQuestStepID = Convert.ToInt32(array[7])
                    };
                    if (array.Length > 8)
                    {
                        ((PartyCheckPrecondition)basePrecondition).RequiredFinishedQuestStepID = Convert.ToInt32(array[8]);
                    }
                    if (array.Length > 9)
                    {
                        ((PartyCheckPrecondition)basePrecondition).RequiredHirelingID = Convert.ToInt32(array[9]);
                    }
                    if (array.Length > 12)
                    {
                        ((PartyCheckPrecondition)basePrecondition).RequiredInactiveQuestStepID = Convert.ToInt32(array[10]);
                        ((PartyCheckPrecondition)basePrecondition).WithoutHirelingID           = Convert.ToInt32(array[11]);
                        ((PartyCheckPrecondition)basePrecondition).WithoutTokenID = Convert.ToInt32(array[12]);
                    }
                }
                else
                {
                    basePrecondition = new PartyCheckPrecondition
                    {
                        SuccessText = successText,
                        FailText    = failText
                    };
                }
            }
            basePrecondition.Decision = epreconditionDecision;
            basePrecondition.Maintext = maintext;
            return(basePrecondition);
        }