public void DailyHeroTick(Hero hero) { if (!hero.IsPrisoner || hero.PartyBelongedToAsPrisoner == null || hero == Hero.MainHero) { return; } if (CESettings.Instance.EscapeAutoRansom.SelectedIndex == 1 && hero.Clan != null && hero.PartyBelongedToAsPrisoner.MapFaction != null && MBRandom.RandomFloat < 0.1f) { // DiplomaticBartersBehavior IFaction mapFaction = hero.PartyBelongedToAsPrisoner.MapFaction; SetPrisonerFreeBarterable setPrisonerFreeBarterable = new SetPrisonerFreeBarterable(hero, mapFaction.Leader, hero.PartyBelongedToAsPrisoner, hero.Clan.Leader); if (setPrisonerFreeBarterable.GetValueForFaction(mapFaction) + setPrisonerFreeBarterable.GetValueForFaction(hero.Clan) > 0) { IEnumerable <Barterable> baseBarterables = new Barterable[] { setPrisonerFreeBarterable }; BarterData barterData = new BarterData(mapFaction.Leader, hero.Clan.Leader, null, null, null, 0, true); barterData.AddBarterGroup(new DefaultsBarterGroup()); foreach (Barterable barterable in baseBarterables) { barterable.SetIsOffered(true); barterData.AddBarterable <DefaultsBarterGroup>(barterable, true); } Campaign.Current.BarterManager.ExecuteAIBarter(barterData, mapFaction, hero.Clan, mapFaction.Leader, hero.Clan.Leader); return; } } if (CEApplyHeroChanceToEscape(hero)) { return; } float num = 0.075f; if (hero.PartyBelongedToAsPrisoner.IsMobile) { num *= 6f - (float)Math.Pow(Math.Min(81, hero.PartyBelongedToAsPrisoner.NumberOfHealthyMembers), 0.25); } if (hero.PartyBelongedToAsPrisoner == PartyBase.MainParty || hero.PartyBelongedToAsPrisoner.IsSettlement && hero.PartyBelongedToAsPrisoner.Settlement.OwnerClan == Clan.PlayerClan) { num *= hero.PartyBelongedToAsPrisoner.IsSettlement ? 0.5f : 0.33f; } if (MBRandom.RandomFloat < num) { EndCaptivityAction.ApplyByEscape(hero); return; } }
public void CheckForBarters(BarterData args) { PartyBase offererParty = args.OffererParty; PartyBase otherParty = args.OtherParty; if (offererParty == null || otherParty == null) { return; } #if BETA foreach (CharacterObject characterObject in offererParty.PrisonerHeroes) #else foreach (CharacterObject characterObject in offererParty.PrisonerHeroes()) #endif { if (characterObject.IsHero && !FactionManager.IsAtWarAgainstFaction(characterObject.HeroObject.MapFaction, otherParty.MapFaction)) { if (CESettings.Instance != null && ((CESettings.Instance.EscapeAutoRansom.SelectedIndex != 0) || !(CESettings.Instance.EscapeAutoRansom.SelectedIndex == 1) && (!characterObject.IsPlayerCharacter || offererParty != PartyBase.MainParty))) { Barterable barterable = new SetPrisonerFreeBarterable(characterObject.HeroObject, args.OffererHero, args.OffererParty, args.OtherHero); args.AddBarterable <PrisonerBarterGroup>(barterable); } } } #if BETA foreach (CharacterObject characterObject2 in otherParty.PrisonerHeroes) #else foreach (CharacterObject characterObject2 in otherParty.PrisonerHeroes()) #endif { if (characterObject2.IsHero && !FactionManager.IsAtWarAgainstFaction(characterObject2.HeroObject.MapFaction, offererParty.MapFaction)) { if (CESettings.Instance != null && ((CESettings.Instance.EscapeAutoRansom.SelectedIndex != 0) || !(CESettings.Instance.EscapeAutoRansom.SelectedIndex == 1) && (!characterObject2.IsPlayerCharacter || otherParty != PartyBase.MainParty))) { Barterable barterable2 = new SetPrisonerFreeBarterable(characterObject2.HeroObject, args.OtherHero, args.OtherParty, args.OffererHero); args.AddBarterable <PrisonerBarterGroup>(barterable2); } } } }