private void mod_Resolve(int checkMargin, AlignmentMaskType alignment, LeaderType type) { if (!KingmakerPatchSettings.KingdomAlignment.Enabled && !KingmakerPatchSettings.KingdomEvents.MaximumEffort) { this.source_Resolve(checkMargin, alignment, type); return; } if (KingmakerPatchSettings.KingdomAlignment.Enabled) { string alignmentString = KingmakerPatchSettings.KingdomAlignment.Alignment.ToLowerInvariant(); alignment = new_GetAlignment(alignmentString) ?? alignment; } if (!KingmakerPatchSettings.KingdomEvents.MaximumEffort) { this.source_Resolve(checkMargin, alignment, type); return; } EventResult.MarginType overrideMargin = this.new_GetOverrideMargin(); if (overrideMargin == EventResult.MarginType.Success || overrideMargin == EventResult.MarginType.GreatSuccess) { checkMargin = EventResult.MarginToInt(overrideMargin); } this.source_Resolve(checkMargin, alignment, type); }
public static KingdomStats.Changes CalculateEventResult(KingdomEvent kingdomEvent, EventResult.MarginType margin, AlignmentMaskType alignment, LeaderType leaderType) { var checkMargin = EventResult.MarginToInt(margin); var result = new KingdomStats.Changes(); var m_TriggerChange = Traverse.Create(kingdomEvent).Field("m_TriggerChange").GetValue <KingdomStats.Changes>(); var m_SuccessCount = Traverse.Create(kingdomEvent).Field("m_SuccessCount").GetValue <int>(); BlueprintKingdomEvent blueprintKingdomEvent = kingdomEvent.EventBlueprint as BlueprintKingdomEvent; if (blueprintKingdomEvent && blueprintKingdomEvent.UnapplyTriggerOnResolve && m_TriggerChange != null) { result.Accumulate(m_TriggerChange.Opposite(), 1); } var resolutions = kingdomEvent.EventBlueprint.Solutions.GetResolutions(leaderType); if (resolutions == null) { resolutions = Array.Empty <EventResult>(); } foreach (var eventResult in resolutions) { var validConditions = eventResult.Condition == null; // || eventResult.Condition.Check(kingdomEvent.GetKingdomEventData()); if (eventResult.MatchesMargin(checkMargin) && (alignment & eventResult.LeaderAlignment) != AlignmentMaskType.None && validConditions) { result.Accumulate(eventResult.StatChanges, 1); m_SuccessCount += eventResult.SuccessCount; } } if (checkMargin >= 0 && blueprintKingdomEvent != null) { result.Accumulate((KingdomStats.Type)leaderType, Game.Instance.BlueprintRoot.Kingdom.StatIncreaseOnEvent); } bool willBeFinished = true; if (blueprintKingdomEvent != null && blueprintKingdomEvent.IsRecurrent) { willBeFinished = m_SuccessCount >= blueprintKingdomEvent.Solutions.GetSuccessCount(leaderType); } if (willBeFinished) { var eventFinalResults = kingdomEvent.EventBlueprint.GetComponent <EventFinalResults>(); if (eventFinalResults != null && eventFinalResults.Results != null) { foreach (var eventResult in eventFinalResults.Results) { var validConditions = eventResult.Condition == null; // || eventResult.Condition.Check(kingdomEvent.EventBlueprint); if (eventResult.MatchesMargin(checkMargin) && (alignment & eventResult.LeaderAlignment) != AlignmentMaskType.None && validConditions) { result.Accumulate(eventResult.StatChanges, 1); } } } } return(result); }