Keen Sight + Mounted patrols = The mobile Prison that holds entire factions (in1.5.10)

Users who are viewing this thread



Now that we can refuse ransoms in 1.5.10, the perks Keen sight and Mounted patrols make a really strong combo! If you're a lone clan and don't have to worry about peace declarations, you can just round up an entire faction and hold them forever. You can casually take over what ever you want and stabilize the fiefs without raids, which is really good since the food/loyalty situations are pretty ****ed in 1.5.10. I've had the Khuzaits prisoner for a long time now and as far as I can tell, they really do have 0% escape chance with my perks. I always hope that combo would work, but never could see before since prisoners would always give useless money to get free. But no more!

sorry there's no shoobies in the music, can't figure out how to do it

I was worried TW would just nerf this nice combo if I showed it, but I'd rather people get chance to play with it since if TW gonna break my toys they gonna break em :xf-cry:
 
Shouldn't the probability of escaping be 25% and not 0% after the two perks? It says that it reduces the escape chance by 50% so it should be 50% of the already halved. Am I reading it wrong?
 
Shouldn't the probability of escaping be 25% and not 0% after the two perks? It says that it reduces the escape chance by 50% so it should be 50% of the already halved. Am I reading it wrong?
This, does anything indicate that the two 50%'s would stack to 100%? I would just assume ((Current Escape Chance*50%)*50%) = New Escape Chance?
 
Shouldn't the probability of escaping be 25% and not 0% after the two perks? It says that it reduces the escape chance by 50% so it should be 50% of the already halved. Am I reading it wrong?
This, does anything indicate that the two 50%'s would stack to 100%? I would just assume ((Current Escape Chance*50%)*50%) = New Escape Chance?
Idunno but these ****ers aren't getting out lol
 
Shouldn't the probability of escaping be 25% and not 0% after the two perks? It says that it reduces the escape chance by 50% so it should be 50% of the already halved. Am I reading it wrong?
This, does anything indicate that the two 50%'s would stack to 100%? I would just assume ((Current Escape Chance*50%)*50%) = New Escape Chance?
Someone better than I with C# would have to explain it fully/clearly, but it does appear to be a, uh, subtractive (?) bonus.
OceTucL.png
 
Someone better than I with C# would have to explain it fully/clearly, but it does appear to be a, uh, subtractive (?) bonus.
OceTucL.png
in short:
if (MBRandom.RandomFloat < explainedNumber.ResultNumber) is the condition for End Captivity, if it is true the prisoner will escape


RandomFloat = A random number between 0 and 1 (always different per day)

ResultNumber = chance per day a prisoner can escape(as a fix number of course)

So to sum it up, the magical ResultNumber has this code: num+num*sumoffactors.
In our case the ResultNumber would be always =0. (Better to say it is nearly 0, cause of an MaxLimit and a MinLimit)

Here an example: 0,8+0,8*(-1)=0
-1 is the sum of the KeenSight and MountedPatrols, each has a value of -0.5f

The if condition cant be met because the result number is always lower than the Randomfloat => No escape man
 
Last edited:
I was worried TW would just nerf this nice combo if I showed it, but I'd rather people get chance to play with it since if TW gonna break my toys they gonna break em :xf-cry:
Live and let die. I kinda dropped the game when they scrapped the bandit horde idea permanently, back in whatever version it was there was a non-functioning perk where bandits would never leave our party. Someone fixed the non-functioning aspect through a mod. It wasn't OP because of diminishing returns and still they decided to throw it in the bin. Fun isn't allowed around here
 
@Apocal can you also post method AddPerkBonusForParty?
Yeah, as soon as I'm home.

in short:
if (MBRandom.RandomFloat < explainedNumber.ResultNumber) is the condition for End Captivity, if it is true the prisoner will escape


RandomFloat = A random number between 0 and 1 (always different per day)

ResultNumber = chance per day a prisoner can escape(as a fix number of course)

So to sum it up, the magical ResultNumber has this code: num+num*sumoffactors.
In our case the ResultNumber would be always =0. (Better to say it is nearly 0, cause of an MaxLimit and a MinLimit)

Here an example: 0,8+0,8*(-1)=0
-1 is the sum of the KeenSight and MountedPatrols, each has a value of -0.5f

The if condition cant be met because the result number is always lower than the Randomfloat => No escape man
Thanks, I really appreciate you talking this through in more detail.
 
I mean if I spent all that time grinding to get 225 in both riding and scouting I would expect something as powerful as this. Especially when my character is mortal and can die of age or battle.

But no doubt this will be changed making it feel like an absolute waste of time when prisoners escape 3 times in a row with 5% chance or something, especially if it happens at a key moment in a campaign.
 
Now train governor with both perks and stock whole Calradia nobles in single town :grin:
Won't work, Keen sight is only for your party prisoners, so you have to keep them in your party.

I mean if I spent all that time grinding to get 225 in both riding and scouting I would expect something as powerful as this. Especially when my character is mortal and can die of age or battle.

But no doubt this will be changed making it feel like an absolute waste of time when prisoners escape 3 times in a row with 5% chance or something, especially if it happens at a key moment in a campaign.
Yeah I agree, it's good a combo and I hope they don't nerft it. It's has drawbacks and requirements most player won't meet.
1 Only really benefits a solo clan, if vassals are involved they'll just make peace every 2 days and bye bye prisoners, bye bye plans.
2 You still have to take down the entire faction alone.... if you can do that you might as well have some good perk combos to help you out.
3 They have to be in your party, slowing you down and requiring you to have a large enough party at all times.
4 You can't exactly rush the scouting perk so it's not a super early game thing

It's not as easily obtainable as most exploits they still leave in the game, however the same could be said for changing "spring of gold" and the "everything has a price" being move to 300 trade skill. I mean that's a lot of trading to get those perks, it probably didn't need to be nerfed, but they did.
 
Won't work, Keen sight is only for your party prisoners, so you have to keep them in your party.
Isn't there some perk with prison escape from towns for engineering or steward?
I also picked some rougery perk which lowers prisoner escape chance by 30% or smth like that so my prisoners now have -130% chance for escape :grin:
 
@Apocal can you also post method AddPerkBonusForParty?
C#:
{
    // Token: 0x02000015 RID: 21
    public static class PerkHelper
    {
        // Token: 0x060000A2 RID: 162 RVA: 0x00009178 File Offset: 0x00007378
        public static void AddPerkBonusForParty(PerkObject perk, MobileParty party, bool isPrimaryBonus, ref ExplainedNumber stat)
        {
            Hero hero = (party != null) ? party.LeaderHero : null;
            if (hero != null)
            {
                bool flag = isPrimaryBonus && perk.PrimaryRole == SkillEffect.PerkRole.PartyLeader;
                bool flag2 = !isPrimaryBonus && perk.SecondaryRole == SkillEffect.PerkRole.PartyLeader;
                if ((flag || flag2) && hero.GetPerkValue(perk))
                {
                    float num = flag ? perk.PrimaryBonus : perk.SecondaryBonus;
                    if (hero.Clan != Clan.PlayerClan)
                    {
                        num *= 1.8f;
                    }
                    if (flag)
                    {
                        PerkHelper.AddToStat(ref stat, perk.PrimaryIncrementType, num, PerkHelper._textLeader);
                    }
                    else
                    {
                        PerkHelper.AddToStat(ref stat, perk.SecondaryIncrementType, num, PerkHelper._textLeader);
                    }
                }
                flag = (isPrimaryBonus && perk.PrimaryRole == SkillEffect.PerkRole.ClanLeader);
                flag2 = (!isPrimaryBonus && perk.SecondaryRole == SkillEffect.PerkRole.ClanLeader);
                if ((flag || flag2) && hero.Clan.Leader != null && hero.Clan.Leader.GetPerkValue(perk))
                {
                    if (flag)
                    {
                        PerkHelper.AddToStat(ref stat, perk.PrimaryIncrementType, perk.PrimaryBonus, PerkHelper._textLeader);
                    }
                    else
                    {
                        PerkHelper.AddToStat(ref stat, perk.SecondaryIncrementType, perk.SecondaryBonus, PerkHelper._textLeader);
                    }
                }
                flag = (isPrimaryBonus && perk.PrimaryRole == SkillEffect.PerkRole.PartyMember);
                flag2 = (!isPrimaryBonus && perk.SecondaryRole == SkillEffect.PerkRole.PartyMember);
                if (flag || flag2)
                {
                    if (hero.Clan != Clan.PlayerClan)
                    {
                        if (hero.GetPerkValue(perk))
                        {
                            PerkHelper.AddToStat(ref stat, flag ? perk.PrimaryIncrementType : perk.SecondaryIncrementType, flag ? perk.PrimaryBonus : perk.SecondaryBonus, PerkHelper._textMember);
                        }
                    }
                    else
                    {
                        foreach (TroopRosterElement troopRosterElement in party.MemberRoster.GetTroopRoster())
                        {
                            if (troopRosterElement.Character.IsHero && troopRosterElement.Character.GetPerkValue(perk))
                            {
                                PerkHelper.AddToStat(ref stat, flag ? perk.PrimaryIncrementType : perk.SecondaryIncrementType, flag ? perk.PrimaryBonus : perk.SecondaryBonus, PerkHelper._textMember);
                            }
                        }
                    }
                }
                if (hero.Clan == Clan.PlayerClan)
                {
                    flag = (isPrimaryBonus && perk.PrimaryRole == SkillEffect.PerkRole.Engineer);
                    flag2 = (!isPrimaryBonus && perk.SecondaryRole == SkillEffect.PerkRole.Engineer);
                    if (flag || flag2)
                    {
                        Hero engineer = party.Engineer;
                        Hero hero2 = (((engineer != null) ? engineer.PartyBelongedTo : null) == party) ? party.Engineer : party.LeaderHero;
                        if (hero2 != null && hero2.GetPerkValue(perk))
                        {
                            if (flag)
                            {
                                PerkHelper.AddToStat(ref stat, perk.PrimaryIncrementType, perk.PrimaryBonus, PerkHelper._textEngineer);
                            }
                            else
                            {
                                PerkHelper.AddToStat(ref stat, perk.SecondaryIncrementType, perk.SecondaryBonus, PerkHelper._textEngineer);
                            }
                        }
                    }
                    flag = (isPrimaryBonus && perk.PrimaryRole == SkillEffect.PerkRole.Scout);
                    flag2 = (!isPrimaryBonus && perk.SecondaryRole == SkillEffect.PerkRole.Scout);
                    if (flag || flag2)
                    {
                        Hero scout = party.Scout;
                        Hero hero3 = (((scout != null) ? scout.PartyBelongedTo : null) == party) ? party.Scout : party.LeaderHero;
                        if (hero3 != null && hero3.GetPerkValue(perk))
                        {
                            if (flag)
                            {
                                PerkHelper.AddToStat(ref stat, perk.PrimaryIncrementType, perk.PrimaryBonus, PerkHelper._textScout);
                            }
                            else
                            {
                                PerkHelper.AddToStat(ref stat, perk.SecondaryIncrementType, perk.SecondaryBonus, PerkHelper._textScout);
                            }
                        }
                    }
                    flag = (isPrimaryBonus && perk.PrimaryRole == SkillEffect.PerkRole.Surgeon);
                    flag2 = (!isPrimaryBonus && perk.SecondaryRole == SkillEffect.PerkRole.Surgeon);
                    if (flag || flag2)
                    {
                        Hero surgeon = party.Surgeon;
                        Hero hero4 = (((surgeon != null) ? surgeon.PartyBelongedTo : null) == party) ? party.Surgeon : party.LeaderHero;
                        if (hero4 != null && hero4.GetPerkValue(perk))
                        {
                            if (flag)
                            {
                                PerkHelper.AddToStat(ref stat, perk.PrimaryIncrementType, perk.PrimaryBonus, PerkHelper._textSurgeon);
                            }
                            else
                            {
                                PerkHelper.AddToStat(ref stat, perk.SecondaryIncrementType, perk.SecondaryBonus, PerkHelper._textSurgeon);
                            }
                        }
                    }
                    flag = (isPrimaryBonus && perk.PrimaryRole == SkillEffect.PerkRole.Quartermaster);
                    flag2 = (!isPrimaryBonus && perk.SecondaryRole == SkillEffect.PerkRole.Quartermaster);
                    if (flag || flag2)
                    {
                        Hero quartermaster = party.Quartermaster;
                        Hero hero5 = (((quartermaster != null) ? quartermaster.PartyBelongedTo : null) == party) ? party.Quartermaster : party.LeaderHero;
                        if (hero5 != null && hero5.GetPerkValue(perk))
                        {
                            if (flag)
                            {
                                PerkHelper.AddToStat(ref stat, perk.PrimaryIncrementType, perk.PrimaryBonus, PerkHelper._textQuartermaster);
                                return;
                            }
                            PerkHelper.AddToStat(ref stat, perk.SecondaryIncrementType, perk.SecondaryBonus, PerkHelper._textQuartermaster);
                        }
                    }
                }
            }
        }
 
Back
Top Bottom