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