コード例 #1
0
        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
                    );
            }
        }
コード例 #2
0
        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;
                }
            }
        }
コード例 #3
0
        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
                    );
            }
        }
コード例 #4
0
        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
                    );
            }
        }
コード例 #5
0
 public static void Postfix(SkillVM __instance, PerkObject perk, ref bool __result)
 {
     if (Settings.Instance.Enabled && Settings.Instance.CharacterUpgrades)
     {
         __result = perk.RequiredSkillValue <= __instance.Level;
     }
 }
コード例 #6
0
        /*** 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);
        }
コード例 #7
0
 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);
     }
 }
コード例 #8
0
        /*************/
        /*** PERKS ***/
        /*************/

        /*** Has Perk ***/
        public static bool HasPerk(CharacterObject character, PerkObject perk)
        {
            if (character != null && perk != null)
            {
                return(character.GetPerkValue(perk));
            }
            else
            {
                return(false);
            }
        }
コード例 #9
0
        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);
        }
コード例 #10
0
 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);
 }
コード例 #11
0
 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);
 }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
             * }*/
        }
コード例 #14
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;
     }
 }
コード例 #15
0
        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);
                }
            }
        }
コード例 #17
0
        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)
            {
            }
        }
コード例 #18
0
ファイル: Patches.cs プロジェクト: mgemperl/TrainingTweak
 /// <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);
         }
     }
 }
コード例 #19
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "WACam22Q");
コード例 #20
0
 private bool IsPerkSelected(PerkObject perk)
 {
     return(this._hero.GetPerkValue(perk));
 }
コード例 #21
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "EJCrymMr");
コード例 #22
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "qaAKXRSV");
コード例 #23
0
 private void OnPerkSelectedChange(PerkObject perk, bool selected)
 {
     this._hero.SetPerkValue(perk, selected);
 }
コード例 #24
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "KZHpJqtt");
コード例 #25
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "R60kenU3");
コード例 #26
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "ebiXdm5W");
コード例 #27
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "71EyPbaE");
コード例 #28
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "6JaeM2p2");
コード例 #29
0
 public override void Reset()
 {
     _bowExpert = PerkObject.FindFirst(perk => perk.Name.GetID() == "cKTeea27");
     base.Reset();
 }
コード例 #30
0
 public override void Reset()
 => _perk = PerkObject.FindFirst(x => x.Name.GetID() == "XNc2NIGL");