public void OnEventAboutToTrigger(RulePartySkillCheck evt) { var bonus = Value.Calculate(Context); // For party rolls, we want to take our bonus into account, so the party has the best chance of passing. Modifiers = Stats.Select(s => Owner.Stats.GetStat(s).AddModifier(bonus, this, ModifierDescriptor.Other)).ToArray(); }
public void OnEventDidTrigger(RulePartySkillCheck evt) { if (Modifiers == null) { return; } Modifiers.ForEach(m => m.Remove()); Modifiers = null; }
static bool Prefix(RulePartySkillCheck __instance, bool isTrigger, ref int ___m_D20, ref int ___m_StatValue, StatType ___m_StatType, int ___m_DifficultyClass) { ___m_StatValue = int.MinValue; var tr = Harmony12.Traverse.Create(__instance); tr.Property("Roller").SetValue(null); RuleSkillCheck selected_evt = null; foreach (UnitEntityData unitEntityData in Game.Instance.Player.Party) { if (unitEntityData.Descriptor.State.CanAct) { ModifiableValue stat = unitEntityData.Stats.GetStat(___m_StatType); ModifiableValueAttributeStat valueAttributeStat = stat as ModifiableValueAttributeStat; int num = valueAttributeStat != null ? valueAttributeStat.Bonus : stat.ModifiedValue; RuleSkillCheck evt = new RuleSkillCheck(unitEntityData, ___m_StatType, ___m_DifficultyClass) { Voice = __instance.Voice, EnsureSuccess = __instance.EnsureSuccess }; if (isTrigger) { evt.Silent = true;; Rulebook.Trigger <RuleSkillCheck>(evt); num += (int)evt.Bonus; } if (___m_StatValue < num) { ___m_StatValue = num; tr.Property("Roller").SetValue(unitEntityData); selected_evt = evt; } } } if (__instance.Roller == null) { UberDebug.Log("Roller is null, in the party skillcheck", (object[])Array.Empty <object>()); } else { if (!isTrigger) { selected_evt.Calculate(); } else { selected_evt.Silent = false; EventBus.RaiseEvent <IRollSkillCheckHandler>((Action <IRollSkillCheckHandler>)(h => h.HandleOnRuleSkillCheck(selected_evt))); //Game.Instance?.UI?.BattleLogManager?.HandleUnitSkillCheckRolled(selected_evt); } ___m_D20 = selected_evt.D20; } return(false); }
private static void Postfix(ref bool __result, RulePartySkillCheck __instance) { if (settings.toggleNoFriendlyFireForAOE) { if (__instance.Reason != null) { if (__instance.Reason.Ability != null) { if (__instance.Reason.Caster != null && __instance.Reason.Caster.IsPlayerFaction && __instance.Initiator.IsPlayerFaction && __instance.Reason.Ability.Blueprint != null && ((__instance.Reason.Ability.Blueprint.EffectOnAlly == AbilityEffectOnUnit.Harmful) || (__instance.Reason.Ability.Blueprint.EffectOnEnemy == AbilityEffectOnUnit.Harmful))) { __result = true; } } } } #if false if (StringUtils.ToToggleBool(settings.togglePassSavingThrowIndividual)) { for (int i = 0; i < settings.togglePassSavingThrowIndividualArray.Count(); i++) { if (StringUtils.ToToggleBool(settings.togglePassSavingThrowIndividualArray[i]) && Storage.statsSavesDict[Storage.individualSavesArray[i]] == __instance.StatType) { if (UnitEntityDataUtils.CheckUnitEntityData(__instance.Initiator, (UnitSelectType)settings.indexPassSavingThrowIndividuall)) { __result = true; } } } } if (StringUtils.ToToggleBool(settings.togglePassSkillChecksIndividual)) { for (int i = 0; i < settings.togglePassSkillChecksIndividualArray.Count(); i++) { if (StringUtils.ToToggleBool(settings.togglePassSkillChecksIndividualArray[i]) && Storage.statsSkillsDict.Union(Storage.statsSocialSkillsDict).ToDictionary(d => d.Key, d => d.Value)[Storage.individualSkillsArray[i]] == __instance.StatType) { if (UnitEntityDataUtils.CheckUnitEntityData(__instance.Initiator, (UnitSelectType)settings.indexPassSkillChecksIndividual)) { __result = true; } } } } #endif }