internal static bool HasClass(this RulesetCharacterHero hero, string className) { if (hero?.ClassesAndLevels != null) { return(hero.ClassesAndLevels.Any(kvp => kvp.Key.Name == className)); } return(false); }
public static void Prefix(RulesetCharacterHero heroCharacter, [HarmonyArgument("addToPool")] bool _ = false) { Main.Log("SaveCharacter:enter"); if (heroCharacter != null) { // Get rid of any trailing spaces heroCharacter.SurName = heroCharacter.SurName?.Trim(); heroCharacter.Name = heroCharacter.Name?.Trim(); } Main.Log("SaveCharacter:leave"); }
static void Postfix(RulesetCharacterHero __instance, ref RulesetAttackMode __result, ref WeaponDescription weaponDescription) { DamageForm firstDamageForm = __result.EffectDescription.FindFirstDamageForm(); WeaponTypeDefinition element = DatabaseRepository.GetDatabase <WeaponTypeDefinition>().GetElement(weaponDescription.WeaponType); int originalAbilityScoreModifier = AttributeDefinitions.ComputeAbilityScoreModifier(__instance.Attributes[__result.AbilityScore].CurrentValue); __result.AbilityScore = element.WeaponProximity == RuleDefinitions.AttackProximity.Melee ? "Strength" : "Dexterity"; if (weaponDescription.WeaponTags.Contains("Finesse") && __instance.GetAttribute("Dexterity").CurrentValue > __instance.GetAttribute(__result.AbilityScore).CurrentValue) { __result.AbilityScore = "Dexterity"; } if (weaponDescription.WeaponTags.Contains("Knowledge") && __instance.GetAttribute("Intelligence").CurrentValue > __instance.GetAttribute(__result.AbilityScore).CurrentValue) { __result.AbilityScore = "Intelligence"; } if (weaponDescription.WeaponTags.Contains("Intuition") && __instance.GetAttribute("Wisdom").CurrentValue > __instance.GetAttribute(__result.AbilityScore).CurrentValue) { __result.AbilityScore = "Wisdom"; } if (weaponDescription.WeaponTags.Contains("Vigor") && __instance.GetAttribute("Constitution").CurrentValue > __instance.GetAttribute(__result.AbilityScore).CurrentValue) { __result.AbilityScore = "Constitution"; } if (weaponDescription.WeaponTags.Contains("Influence") && __instance.GetAttribute("Charisma").CurrentValue > __instance.GetAttribute(__result.AbilityScore).CurrentValue) { __result.AbilityScore = "Charisma"; } int abilityScoreModifier = AttributeDefinitions.ComputeAbilityScoreModifier(__instance.Attributes[__result.AbilityScore].CurrentValue); Predicate <RuleDefinitions.TrendInfo> predicate = FindAbilityScoreTrend; int ability_score_to_hit_trend_index = __result.ToHitBonusTrends.FindIndex(predicate); int ability_score_damage_bonus_trend_index = firstDamageForm.DamageBonusTrends.FindIndex(predicate); if (ability_score_to_hit_trend_index >= 0) { __result.ToHitBonus -= originalAbilityScoreModifier; __result.ToHitBonus += abilityScoreModifier; __result.ToHitBonusTrends.RemoveAt(ability_score_to_hit_trend_index); __result.ToHitBonusTrends.Add(new RuleDefinitions.TrendInfo(abilityScoreModifier, RuleDefinitions.FeatureSourceType.AbilityScore, __result.AbilityScore, (object)null)); } if (ability_score_damage_bonus_trend_index >= 0) { firstDamageForm.DamageBonusTrends.RemoveAt(ability_score_damage_bonus_trend_index); firstDamageForm.BonusDamage -= originalAbilityScoreModifier; firstDamageForm.BonusDamage += abilityScoreModifier; firstDamageForm.DamageBonusTrends.Add(new RuleDefinitions.TrendInfo(abilityScoreModifier, RuleDefinitions.FeatureSourceType.AbilityScore, __result.AbilityScore, (object)null)); } }
public static T SetRulesetCharacterHero <T>(this T entity, RulesetCharacterHero value) where T : GuiCharacter { entity.SetField("rulesetCharacterHero", value); return(entity); }