private void FixPerkHealthyScout() { PerkObject _perk = PerkObject.FindFirst(x => x.Name.GetID() == "dDKOoD3e"); if (_perk.PrimaryRole == SkillEffect.PerkRole.PartyMember && _perk.PrimaryBonus == 0.15f) { var textObjStrings = TextObject.ConvertToStringList( new List <TextObject> { _perk.Name, _perk.Description } ); // most of the properties of skills have private setters, yet Initialize is public _perk.Initialize( textObjStrings[0], textObjStrings[1], _perk.Skill, (int)_perk.RequiredSkillValue, _perk.AlternativePerk, SkillEffect.PerkRole.Personal, 8f, _perk.SecondaryRole, _perk.SecondaryBonus, _perk.IncrementType ); } }
private void RefreshPerks() { this.Perks.Clear(); PerkObject perkObject = null; IEnumerable <PerkObject> listPerks = from p in PerkObject.All where p.Skill == this.Skill select p; foreach (PerkObject current2 in listPerks.OrderBy(p => p.RequiredSkillValue)) { if (current2.AlternativePerk != null) { HeroAdminPerkVM.PerkAlternativeType perkAlternativeType = (perkObject == null) ? HeroAdminPerkVM.PerkAlternativeType.FirstAlternative : HeroAdminPerkVM.PerkAlternativeType.SecondAlternative; HeroAdminPerkVM item = new HeroAdminPerkVM(current2, this.IsPerkSelected(current2), perkAlternativeType, OnPerkSelectedChange); this.Perks.Add(item); if (perkAlternativeType == HeroAdminPerkVM.PerkAlternativeType.SecondAlternative) { perkObject = null; } else { perkObject = current2.AlternativePerk; } } else { HeroAdminPerkVM item = new HeroAdminPerkVM(current2, this.IsPerkSelected(current2), HeroAdminPerkVM.PerkAlternativeType.NoAlternative, OnPerkSelectedChange); this.Perks.Add(item); perkObject = null; } } }
private void FixPerkPeakForm() { var _perk = PerkObject.FindFirst(x => x.Name.GetID() == "fBgGbxaw"); if (_perk.PrimaryBonus == 0f) { var textObjStrings = TextObject.ConvertToStringList( new List <TextObject> { _perk.Name, _perk.Description } ); // most of the properties of skills have private setters, yet Initialize is public _perk.Initialize( textObjStrings[0], textObjStrings[1], _perk.Skill, (int)_perk.RequiredSkillValue, _perk.AlternativePerk, _perk.PrimaryRole, 10f, _perk.SecondaryRole, _perk.SecondaryBonus, _perk.IncrementType ); } }
private void FixPerkDisciplinarian() { PerkObject _perk = PerkObject.FindFirst(x => x.Name.GetID() == "ER3ieXOb"); if (_perk.PrimaryRole == SkillEffect.PerkRole.Personal) { var textObjStrings = TextObject.ConvertToStringList( new List <TextObject> { _perk.Name, _perk.Description } ); // most of the properties of skills have private setters, yet Initialize is public _perk.Initialize( textObjStrings[0], textObjStrings[1], _perk.Skill, (int)_perk.RequiredSkillValue, _perk.AlternativePerk, SkillEffect.PerkRole.PartyLeader, 0f, _perk.PrimaryRole, _perk.PrimaryBonus, _perk.IncrementType ); } }
public static void Postfix(SkillVM __instance, PerkObject perk, ref bool __result) { if (Settings.Instance.Enabled && Settings.Instance.CharacterUpgrades) { __result = perk.RequiredSkillValue <= __instance.Level; } }
/*** Player Party Has Perk ***/ public static bool PlayerPartyHasPerk(PerkObject perk) { bool found = HasPerk(Hero.MainHero.CharacterObject, perk); int count = 0; int companionCount = Hero.MainHero.CompanionsInParty.Count(); Hero companion; while (!found && count < companionCount) { companion = Hero.MainHero.CompanionsInParty.ElementAt <Hero>(count); if (companion != null) { if (companion.CharacterObject != null) { if (HasPerk(companion.CharacterObject, perk)) { found = true; } } } count++; } return(found); }
private void OnPerkOpened(Hero hero, PerkObject openedPerk) { if (hero != null && openedPerk == DefaultPerks.Riding.NomadicTraditions) { var versionField = typeof(MobileParty).GetField("_partyPureSpeedLastCheckVersion", BindingFlags.Instance | BindingFlags.NonPublic); versionField.SetValue(hero.PartyBelongedTo, -1); } }
/*************/ /*** PERKS ***/ /*************/ /*** Has Perk ***/ public static bool HasPerk(CharacterObject character, PerkObject perk) { if (character != null && perk != null) { return(character.GetPerkValue(perk)); } else { return(false); } }
public static void AddPerkTooltip(List <TooltipProperty> tooltips, PerkObject perk, float bonusValue) { if (bonusValue.IsZero()) { return; } var isRate = perk.IncrementType == SkillEffect.EffectIncrementType.AddFactor; var suffix = isRate ? "%" : ""; var tooltip = new TooltipProperty(perk.Name.ToString(), value: $"{bonusValue:F1}{suffix}", 0); tooltips.Add(tooltip); }
private static void Postfix( ref PerkObject ___PolearmExtraHp, ref PerkObject ___AthleticsEndurance, ref PerkObject ___AthleticsDexterous, ref PerkObject ___MedicinePreventiveMedicine, ref PerkObject ___MedicineSelfMedication, ref PerkObject ___ScoutingExtra1, ref int[] ____tierSkillRequirements) { ___PolearmExtraHp.Initialize("{=7Jwuax4w}Extra HP", "{=6RUssLxi}Hitpoints increased by 3%.", DefaultSkills.Polearm, ____tierSkillRequirements[0], null, SkillEffect.PerkRole.Personal, 6f); ___AthleticsEndurance.Initialize("{=kvOavzcs}Endurance", "{=01jmBrDb}+4 hitpoints.", DefaultSkills.Athletics, ____tierSkillRequirements[2], ___AthleticsDexterous, SkillEffect.PerkRole.Personal, 8f); ___MedicinePreventiveMedicine.Initialize("{=wI393cla}Preventive Medicine", "{=HIVRbq8l}Increase character's hit points by 10.", DefaultSkills.Medicine, ____tierSkillRequirements[0], ___MedicineSelfMedication, SkillEffect.PerkRole.Personal, 20f); ___ScoutingExtra1.Initialize("{=dDKOoD3e}Healty Scout", "{=ufYwLbZR} Extra 8 hitpoints.", DefaultSkills.Scouting, ____tierSkillRequirements[9], null, SkillEffect.PerkRole.PartyMember, 16f, SkillEffect.PerkRole.None, 0f, SkillEffect.EffectIncrementType.AddFactor); }
public static bool Add(this PerkObject perk, Hero hero) { if (hero != null && perk != null) { if (!perk.Exist(hero)) { hero.HeroDeveloper.AddPerk(perk); return(perk.Exist(hero)); } } return(false); }
private static void AddPerkBonusForTown(PerkObject perk, Town town, ref ExplainedNumber bonuses, float newBorn) { if (perk.PrimaryRole != SkillEffect.PerkRole.Governor && perk.SecondaryRole != SkillEffect.PerkRole.Governor) { return; } Hero governor = town.Governor; if (governor == null || !governor.GetPerkValue(perk) || (governor.CurrentSettlement == null || governor.CurrentSettlement != town.Settlement)) { return; } float number = perk.PrimaryRole == SkillEffect.PerkRole.Governor ? perk.PrimaryBonus : perk.SecondaryBonus; AddToStat(ref bonuses, perk.IncrementType, number, _textGovernor, newBorn); }
public void SetPerkValue(PerkObject perk, bool enable) { HeroAdminCharacterPerk result = this.Perks.FirstOrDefault(cp => cp.StringId.Equals(perk.StringId)); if (null != result) { result.Enable = enable; } else { this.Perks.Add(new HeroAdminCharacterPerk(perk.StringId, perk.Skill.StringId, enable)); } /* CharacterPerks heroPerks = ReflectUtils.ReflectField<CharacterPerks>("_heroPerks", this._hero); * if (null != heroPerks) * { * heroPerks.SetPropertyValue(perk, selected ? 1 : 0); * }*/ }
public HeroAdminPerkVM(PerkObject perk, bool isSelected, HeroAdminPerkVM.PerkAlternativeType alternativeType, Action <PerkObject, bool> onPerkSelectedChange) { this.AlternativeType = (int)alternativeType; this.Perk = perk; this._onPerkSelectedChange = onPerkSelectedChange; this.PerkId = "SPPerks\\" + perk.StringId; this.Level = (int)perk.RequiredSkillValue; this.LevelText = ((int)perk.RequiredSkillValue).ToString(); this.Hint = new BasicTooltipViewModel(() => CampaignUIHelper.GetPerkEffectText(perk, true)); this._perkConceptObj = Concept.All.SingleOrDefault(c => c.StringId == "str_game_objects_perks"); if (isSelected) { this.CurrentState = HeroAdminPerkVM.PerkStates.EarnedAndActive; } else { this.CurrentState = HeroAdminPerkVM.PerkStates.EarnedButNotSelected; } }
public static void FixPerkBonus(DefaultPerks dpobj, string perkID, float primaryBonus, float secondaryBonus, SkillEffect.EffectIncrementType incrementType) { bool flag = false; FieldInfo field = typeof(DefaultPerks).GetField(perkID, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (field != null) { PerkObject perkObject = field.GetValue(dpobj) as PerkObject; if (perkObject != null) { perkObject.Initialize(perkObject.Name.ToString(), perkObject.Description.ToString(), perkObject.Skill, (int)perkObject.RequiredSkillValue, perkObject.AlternativePerk, perkObject.PrimaryRole, primaryBonus, perkObject.SecondaryRole, secondaryBonus, incrementType, ""); flag = true; } } if (!flag) { InformationManager.DisplayMessage(new InformationMessage("Patch Failed:" + perkID, new Color(0.8f, 0f, 0f, 1f))); } }
private static void AddPerkBonusForTown(PerkObject perk, Town town, ref ExplainedNumber bonuses, float newBorn) { bool flag = perk.PrimaryRole == SkillEffect.PerkRole.Governor; bool flag2 = perk.SecondaryRole == SkillEffect.PerkRole.Governor; if (flag || flag2) { Hero governor = town.Governor; bool flag3 = governor == null || !governor.GetPerkValue(perk) || governor.CurrentSettlement == null || governor.CurrentSettlement != town.Settlement; if (governor != null && governor.GetPerkValue(perk) && governor.CurrentSettlement != null && governor.CurrentSettlement == town.Settlement) { float number = (perk.PrimaryRole == SkillEffect.PerkRole.Governor) ? perk.PrimaryBonus : perk.SecondaryBonus; if (flag) { LightSettlementProsperityModel.AddToStat(ref bonuses, perk.PrimaryIncrementType, number, LightSettlementProsperityModel._textGovernor, newBorn); return; } LightSettlementProsperityModel.AddToStat(ref bonuses, perk.SecondaryIncrementType, number, LightSettlementProsperityModel._textGovernor, newBorn); } } }
public static void Postfix(ref int __result, CharacterObject character, StatExplainer explanation = null) { ExplainedNumber bonuses = new ExplainedNumber(__result, explanation); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.OneHanded.ExtraHp, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.TwoHanded.ExtraHp, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Polearm.ExtraHp, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Athletics.Endurance, character, ref bonuses); //PerkHelper.AddPerkBonusForCharacter(DefaultPerks.Medicine.PreventiveMedicine, character, ref bonuses); try { var ScoutingExtra1 = PerkObject.FindFirst(a => a.Name.GetID() == "dDKOoD3e"); if (ScoutingExtra1 != null) { PerkHelper.AddPerkBonusForCharacter(ScoutingExtra1, character, ref bonuses); } __result = MBMath.Round(bonuses.ResultNumber); } catch (Exception) { } }
/// <summary> /// Postfix for disabling native party training /// </summary> public static void GetPerkExperiencesForTroopsPostfix( PerkObject perk, ref int __result) { if (!_disableNativeTrainingDisabled) { try { if (Settings.Instance.EnableTrainingPerkOverrides && (perk == DefaultPerks.Leadership.RaiseTheMeek || perk == DefaultPerks.Leadership.CombatTips)) { __result = 0; } } catch (Exception exc) { _disableNativeTrainingDisabled = true; Util.Warning( $"{Strings.DisableNativeTrainingPatchFailed}\n\n" + $"{Strings.FatalErrorDisclaimer}", exc: exc); } } }
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "WACam22Q");
private bool IsPerkSelected(PerkObject perk) { return(this._hero.GetPerkValue(perk)); }
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "EJCrymMr");
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "qaAKXRSV");
private void OnPerkSelectedChange(PerkObject perk, bool selected) { this._hero.SetPerkValue(perk, selected); }
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "KZHpJqtt");
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "R60kenU3");
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "ebiXdm5W");
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "71EyPbaE");
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "6JaeM2p2");
public override void Reset() { _bowExpert = PerkObject.FindFirst(perk => perk.Name.GetID() == "cKTeea27"); base.Reset(); }
public override void Reset() => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "XNc2NIGL");