static bool Prefix(Spellbook __instance, int spellLevel, ref int __result) { if (__instance.Blueprint.GetComponent <NoSpellsPerDaySacaling>() == null) { return(true); } ModifiableValueAttributeStat stat = __instance.Owner.Stats.GetStat(__instance.Blueprint.CastingAttribute) as ModifiableValueAttributeStat; if (stat == null || stat.ModifiedValue < 10 + spellLevel) { __result = 0; return(false); } int?count = __instance.Blueprint.SpellsPerDay.GetCount(__instance.CasterLevel, spellLevel); if (!count.HasValue) { __result = 0; } else { __result = count.Value; } return(false); }
public override void OnTurnOn() { ModifiableValue value = base.Owner.Stats.GetStat(StatTypeToReplaceBastStatFor); if (value.GetType() == typeof(ModifiableValueSkill)) { if (_oldStatType == null) { _oldStatType = ((ModifiableValueSkill)value).BaseStat.Type; } ModifiableValueAttributeStat oldStat = base.Owner.Stats.GetStat <ModifiableValueAttributeStat>((StatType)_oldStatType); ModifiableValueAttributeStat newStat = base.Owner.Stats.GetStat <ModifiableValueAttributeStat>(NewBaseStatType); if (newStat.Bonus < oldStat.Bonus && only_if_greater) { return; } Traverse traverse = Traverse.Create(value); traverse.Field("BaseStat").SetValue(newStat); newStat.AddDependentValue(value); oldStat.RemoveDependentValue(value); value.UpdateValue(); } }
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); }
public override void OnEventAboutToTrigger(RuleCalculateWeaponStats evt) { ModifiableValueAttributeStat stat = evt.Initiator.Descriptor.Stats.GetStat(this.Stat) as ModifiableValueAttributeStat; ModifiableValueAttributeStat valueAttributeStat = !evt.DamageBonusStat.HasValue ? (ModifiableValueAttributeStat)null : evt.Initiator.Descriptor.Stats.GetStat(evt.DamageBonusStat.Value) as ModifiableValueAttributeStat; if (stat.Type != valueAttributeStat.Type && (stat == null || valueAttributeStat != null && stat.Bonus <= valueAttributeStat.Bonus || evt.Weapon.Blueprint.Type.Category != this.Category)) { return; } float bonusDmg = Multiplier * stat.Bonus; evt.AddBonusDamage((int)bonusDmg); }
public override void OnEventAboutToTrigger(RuleCalculateAttackBonusWithoutTarget evt) { if (AdvancedWeaponTraining.WieldsWeaponFromFighterGroup(base.Owner, WeaponTraining) && !evt.Weapon.Blueprint.Category.HasSubCategory(WeaponSubCategory.Finessable)) { ModifiableValueAttributeStat stat1 = this.Owner.Stats.GetStat(evt.AttackBonusStat) as ModifiableValueAttributeStat; ModifiableValueAttributeStat stat2 = this.Owner.Stats.GetStat(StatType.Dexterity) as ModifiableValueAttributeStat; bool flag = stat2 != null && stat1 != null && stat2.Bonus >= stat1.Bonus; if (!flag) { return; } evt.AttackBonusStat = StatType.Dexterity; } }
public override void OnEventAboutToTrigger(RuleCalculateWeaponStats evt) { if (AdvancedWeaponTraining.WieldsWeaponFromFighterGroup(this.Owner, WeaponFighterGroupFeature) && ( evt.Weapon.Blueprint.Category.HasSubCategory(WeaponSubCategory.Finessable) || base.Owner.Progression.Features.GetRank(FightersFinesseFeature) > 0)) { ModifiableValueAttributeStat stat1 = this.Owner.Stats.GetStat(evt.Weapon.Blueprint.AttackBonusStat) as ModifiableValueAttributeStat; ModifiableValueAttributeStat stat2 = this.Owner.Stats.GetStat(StatType.Dexterity) as ModifiableValueAttributeStat; bool flag = stat2 != null && stat1 != null && stat2.Bonus >= stat1.Bonus; if (!flag) { return; } int value = base.Owner.Progression.Features.GetRank(WeaponFighterGroupFeature); evt.AddBonusDamage(value); } }
static public int getArcanistMemorizeSlotCnt(int spellLevel, Spellbook spellBook) { BlueprintSpellbook spellBookBlueprint = spellBook.Blueprint; ModifiableValueAttributeStat castingStat = spellBook.Owner.Stats.GetStat <ModifiableValueAttributeStat>(spellBookBlueprint.CastingAttribute); if (castingStat == null) { return(0); } if (castingStat < 10 + spellLevel) { return(0); } if (spellLevel < 0 || spellLevel > spellBook.MaxSpellLevel) { return(0); } return(spellBookBlueprint.SpellsKnown.GetCount(spellBook.CasterLevel + 20, spellLevel).Value); }
public override void OnEventAboutToTrigger(RuleCalculateAttackBonusWithoutTarget evt) { var weapon_training = this.Owner.Get <UnitPartWeaponTraining>(); if (weapon_training == null) { return; } if (weapon_training.GetWeaponRank(evt.Weapon) <= 0) { return; } ModifiableValueAttributeStat stat1 = this.Owner.Stats.GetStat(evt.AttackBonusStat) as ModifiableValueAttributeStat; ModifiableValueAttributeStat stat2 = this.Owner.Stats.GetStat(this.repalcement_stat) as ModifiableValueAttributeStat; bool flag = stat2 != null && stat1 != null && stat2.Bonus > stat1.Bonus; if (!flag) { return; } evt.AttackBonusStat = this.repalcement_stat; }
public override void OnEventAboutToTrigger(RuleCalculateWeaponStats evt) { var weapon = evt.Weapon; if (weapon == null) { return; } if (!evt.DamageBonusStat.HasValue || evt.DamageBonusStat != StatType.Strength) { return; } if (weapon.Blueprint.Category == WeaponCategory.DuelingSword && this.Owner.Progression.Features.HasFact(deft_grace)) { return; } if (weapon.Blueprint.Category == WeaponCategory.Scimitar && this.Owner.Progression.Features.HasFact(NewFeats.dervish_dance)) { return; } if (!evt.Weapon.Blueprint.Category.HasSubCategory(WeaponSubCategory.Finessable) && !this.Owner.HasFact(AdvancedFighterOptions.fighters_finesse)) { return; } if (AdvancedFighterOptions.category_finesse_training_map.ContainsKey(evt.Weapon.Blueprint.Category) && this.Owner.HasFact(AdvancedFighterOptions.category_finesse_training_map[evt.Weapon.Blueprint.Category])) { return; } var has_free_secondary_hand = HoldingItemsMechanics.Helpers.hasFreeHandOrBuckler(evt.Initiator.Body?.SecondaryHand); if (this.Owner.Progression.Features.Enumerable.Where <Kingmaker.UnitLogic.Feature>(p => p.Blueprint == slashing_grace).Any(p => p.Param == weapon.Blueprint.Category) && has_free_secondary_hand) { return; } if (this.Owner.Progression.Features.Enumerable.Where <Kingmaker.UnitLogic.Feature>(p => p.Blueprint == fencing_grace).Any(p => p.Param == weapon.Blueprint.Category) && has_free_secondary_hand) { return; } if (weapon.EnchantmentsCollection != null && weapon.EnchantmentsCollection.HasFact(agile)) { return; } ModifiableValueAttributeStat stat1 = this.Owner.Stats.GetStat(evt.Weapon.Blueprint.AttackBonusStat) as ModifiableValueAttributeStat; ModifiableValueAttributeStat stat2 = this.Owner.Stats.GetStat(StatType.Dexterity) as ModifiableValueAttributeStat; if (stat2 <= stat1) { return; } var training_part = this.Owner.Get <UnitPartWeaponTraining>(); if (training_part == null) { return; } int value = training_part.GetWeaponRank(evt.Weapon); evt.AddBonusDamage(value); }
public void OnEventAboutToTrigger(RuleCalculateWeaponStats evt) { var weapon = evt.Weapon; if (weapon == null) { return; } if (weapon.Blueprint.Category != this.Param) { return; } if (weapon.Blueprint.Category == WeaponCategory.DuelingSword && this.Owner.Progression.Features.HasFact(deft_grace)) { return; } if (weapon.Blueprint.Category == WeaponCategory.Scimitar && this.Owner.Progression.Features.HasFact(NewFeats.dervish_dance)) { return; } if ((weapon.Blueprint.Category == WeaponCategory.Bite || weapon.Blueprint.Category == WeaponCategory.Claw) && this.Owner.Progression.Features.HasFact(leopard_frace)) { return; } if (!evt.DamageBonusStat.HasValue || evt.DamageBonusStat != StatType.Strength) { return; } /*if (!evt.Weapon.Blueprint.Category.HasSubCategory(WeaponSubCategory.Finessable) && !this.Owner.HasFact(AdvancedFighterOptions.fighters_finesse)) * { * return; * }*/ if (AdvancedFighterOptions.category_finesse_training_map.ContainsKey(evt.Weapon.Blueprint.Category) && this.Owner.HasFact(AdvancedFighterOptions.category_finesse_training_map[evt.Weapon.Blueprint.Category])) { return; } if (this.Owner.Progression.Features.Enumerable.Where <Kingmaker.UnitLogic.Feature>(p => p.Blueprint == slashing_grace).Any(p => p.Param == weapon.Blueprint.Category)) { return; } if (this.Owner.Progression.Features.Enumerable.Where <Kingmaker.UnitLogic.Feature>(p => p.Blueprint == fencing_grace).Any(p => p.Param == weapon.Blueprint.Category)) { return; } if (weapon.EnchantmentsCollection != null && weapon.EnchantmentsCollection.HasFact(agile)) { return; } ModifiableValueAttributeStat stat1 = this.Owner.Stats.GetStat(evt.Weapon.Blueprint.AttackBonusStat) as ModifiableValueAttributeStat; ModifiableValueAttributeStat stat2 = this.Owner.Stats.GetStat(StatType.Dexterity) as ModifiableValueAttributeStat; if (stat2 <= stat1) { return; } evt.AddBonusDamage(value.Calculate(this.Fact.MaybeContext)); }