Beispiel #1
0
        // Token: 0x06000122 RID: 290 RVA: 0x00003BB8 File Offset: 0x00001DB8
        public MiscSizes(PartyTemplateObject pt)
        {
            this._partyTemplate = pt;
            bool flag = this._partyTemplate.StringId.Contains("mercenary") && ModSettings.Instance.mercenaryFactionsMultiplierEnabled;

            if (flag)
            {
                base.processParties(ModSettings.Instance.mercenaryFactionsMinMultiplier, ModSettings.Instance.mercenaryFactionsMaxMultiplier);
            }
            else
            {
                bool flag2 = this._partyTemplate.StringId.Contains("outlaw") && ModSettings.Instance.outlawFactionsMultiplierEnabled;
                if (flag2)
                {
                    base.processParties(ModSettings.Instance.outlawFactionsMinMultiplier, ModSettings.Instance.outlawFactionsMaxMultiplier);
                }
                else
                {
                    bool flag3 = this._partyTemplate.StringId.Contains("villager") && ModSettings.Instance.villagersPesantsMultiplierEnabled;
                    if (flag3)
                    {
                        base.processParties(ModSettings.Instance.villagersPesantsMinMultiplier, ModSettings.Instance.villagersPesantsMaxMultiplier);
                    }
                }
            }
        }
Beispiel #2
0
        public static bool Prefix(MobileParty __instance, PartyTemplateObject pt, int troopNumberLimit)
        {
            if (__instance.IsBandit) // TaleWorlds hardcoding strikes again
            {
                double num1 = 0.4 + 0.8 * MiscHelper.GetGameProcess();
                int    num2 = MBRandom.RandomInt(2);
                double num3 = num2 == 0 ? MBRandom.RandomFloat : (MBRandom.RandomFloat * MBRandom.RandomFloat * MBRandom.RandomFloat * 4.0);
                double num4 = num2 == 0 ? (num3 * 0.8 + 0.2) : 1 + num3;

                foreach (PartyTemplateStack stack in pt.Stacks)
                {
                    int numTroopsToAdd = MBRandom.RoundRandomized((float)(stack.MinValue + num1 * num4 * MBRandom.RandomFloat * (stack.MaxValue - stack.MinValue)));
                    __instance.AddElementToMemberRoster(stack.Character, numTroopsToAdd);
                }
            }
            else if (__instance.IsVillager)
            {
                int index = MBRandom.RandomInt(pt.Stacks.Count);
                for (int troopCount = 0; troopCount < troopNumberLimit; troopCount++)
                {
                    __instance.AddElementToMemberRoster(pt.Stacks[index].Character, 1);
                    index = MBRandom.RandomInt(pt.Stacks.Count);
                }
            }
            else // everything else looks fine; hand stack filling to original method
            {
                return(true);
            }

            return(false);
        }
        // Token: 0x06000004 RID: 4 RVA: 0x0000215C File Offset: 0x0000035C
        public override void OnGameInitializationFinished(Game game)
        {
            base.OnGameInitializationFinished(game);
            bool flag = !(game.GameType is Campaign);

            if (!flag)
            {
                Campaign campaign = game.GameType as Campaign;
                bool     flag2    = campaign != null;
                if (flag2)
                {
                    bool flag3 = MBObjectManager.Instance.GetObjectTypeList <PartyTemplateObject>() != null;
                    if (flag3)
                    {
                        MBReadOnlyList <PartyTemplateObject> partyTemplateList = MBObjectManager.Instance.GetObjectTypeList <PartyTemplateObject>();
                        for (int index = 0; index < partyTemplateList.Count; index++)
                        {
                            PartyTemplateObject pt = partyTemplateList[index];
                            new PartyTemplateSizes(pt);
                        }
                    }
                    bool bPrintTroopLimits = ModSettings.Instance.bPrintTroopLimits;
                    if (bPrintTroopLimits)
                    {
                        bool flag4 = MBObjectManager.Instance.GetObjectTypeList <PartyTemplateObject>() != null;
                        if (flag4)
                        {
                            MBReadOnlyList <PartyTemplateObject> partyTemplateList2 = MBObjectManager.Instance.GetObjectTypeList <PartyTemplateObject>();
                            Logging.lm("-------------------------------------------");
                            Logging.lm("Printing Party Template Troop Limits ");
                            for (int index2 = 0; index2 < partyTemplateList2.Count; index2++)
                            {
                                Logging.lm("");
                                PartyTemplateObject pt2 = partyTemplateList2[index2];
                                Logging.lm("Party String Id: " + pt2.StringId.ToString());
                                foreach (PartyTemplateStack ps in pt2.Stacks)
                                {
                                    string[] array = new string[6];
                                    array[0] = "Character: ";
                                    array[1] = ps.Character.StringId.ToString();
                                    array[2] = " Min: ";
                                    int num  = 3;
                                    int num2 = ps.MinValue;
                                    array[num] = num2.ToString();
                                    array[4]   = " Max: ";
                                    int num3 = 5;
                                    num2        = ps.MaxValue;
                                    array[num3] = num2.ToString();
                                    Logging.lm(string.Concat(array));
                                }
                                Logging.lm("");
                            }
                        }
                    }
                }
            }
        }
        public PartyTemplateSizes(PartyTemplateObject pt)
        {
            bool flag = pt.StringId.Contains("looter") || pt.StringId.Contains("bandit") || pt.StringId.Contains("raider");

            if (flag)
            {
                new BanditSizes(pt);
            }
            else
            {
                bool flag2 = pt.StringId.Contains("mercenary") || pt.StringId.Contains("outlaw") || pt.StringId.Contains("villager");
                if (flag2)
                {
                    new MiscSizes(pt);
                }
                else
                {
                    bool flag3 = pt.StringId.Contains("caravan") && !pt.StringId.Contains("char_");
                    if (flag3)
                    {
                        new Caravan(pt);
                    }
                    else
                    {
                        bool flag4 = pt.StringId.Contains("kingdom_hero") && this.isNotRestrictedParty(pt);
                        if (flag4)
                        {
                            new KingdomSizes(pt);
                        }
                        else
                        {
                            bool flag5 = pt.StringId.Contains("char_") || (pt.StringId.Contains("gamescom_player") && !pt.StringId.Contains("caravan"));
                            if (flag5)
                            {
                                new PlayerSizes(pt);
                            }
                            else
                            {
                                bool flag6 = pt.StringId.Contains("kingdom_hero_ai") || pt.StringId.Contains("kingdom_hero_minor");
                                if (flag6)
                                {
                                    new KingdomOtherSizes(pt);
                                }
                                else
                                {
                                    bool flag7 = pt.StringId.Contains("cs_");
                                    if (flag7)
                                    {
                                        new csSizes(pt);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #5
0
        public csSizes(PartyTemplateObject pt)
        {
            this._partyTemplate = pt;
            bool csFactionsMultiplierEnabled = ModSettings.Instance.csFactionsMultiplierEnabled;

            if (csFactionsMultiplierEnabled)
            {
                base.processParties(ModSettings.Instance.csFactionsMinMultiplier, ModSettings.Instance.csFactionsMaxMultiplier);
            }
        }
        public bool isNotRestrictedParty(PartyTemplateObject pt)
        {
            bool isRestricted = true;
            bool flag         = pt.StringId.Contains("militia") && pt.StringId.Contains("quest") && pt.StringId.Contains("rebels");

            if (flag)
            {
                isRestricted = false;
            }
            return(isRestricted);
        }
Beispiel #7
0
            private static bool Prefix(PartyTemplateObject pt)
            {
                if (pt == null)
                {
                    Mod.Log("BROKEN");
                    Debug.PrintError("Bandit Militias is broken please notify @gnivler via Nexus");
                    return(false);
                }

                return(true);
            }
Beispiel #8
0
        public static TroopRoster ConstructTroopRoster(PartyTemplateObject template, PartyBase party)
        {
            TroopRoster roster = new TroopRoster(party);

            foreach (PartyTemplateStack stack in template.Stacks)
            {
                int num = MBRandom.RandomInt(stack.MinValue, stack.MaxValue);
                roster.AddToCounts(stack.Character, num);
            }
            return(roster);
        }
        public PlayerSizes(PartyTemplateObject pt)
        {
            this._partyTemplate = pt;
            bool flag = this._partyTemplate.StringId.Contains("char_") && ModSettings.Instance.charKingdomMultiplierEnabled;

            if (flag)
            {
                base.processParties(ModSettings.Instance.charKingdomMinMultiplier, ModSettings.Instance.charKingdomMaxMultiplier);
            }
            else
            {
                bool flag2 = this._partyTemplate.StringId.Contains("gamescom_player") && ModSettings.Instance.gamescomMultiplierEnabled;
                if (flag2)
                {
                    base.processParties(ModSettings.Instance.gamescomMinMultiplier, ModSettings.Instance.gamescomMaxMultiplier);
                }
            }
        }
Beispiel #10
0
        // Token: 0x0600011E RID: 286 RVA: 0x000037EC File Offset: 0x000019EC
        public Caravan(PartyTemplateObject pt)
        {
            this._partyTemplate = pt;
            bool flag = this._partyTemplate.StringId.Contains("elite") && ModSettings.Instance.eliteCaravansMultiplierEnabled;

            if (flag)
            {
                base.processParties(ModSettings.Instance.eliteCaravansMinMultiplier, ModSettings.Instance.eliteCaravansMaxMultiplier);
            }
            else
            {
                bool caravansMultiplierEnabled = ModSettings.Instance.caravansMultiplierEnabled;
                if (caravansMultiplierEnabled)
                {
                    base.processParties(ModSettings.Instance.caravansMinMultiplier, ModSettings.Instance.caravansMaxMultiplier);
                }
            }
        }
Beispiel #11
0
        public MobileParty spawnPatrol(Settlement settlement, Clan clan, int amount)
        {
            PartyTemplateObject partyTemplate = clan.Culture.DefaultPartyTemplate;
            int numberOfCreated = partyTemplate.NumberOfCreated;

            partyTemplate.IncrementNumberOfCreated();
            MobileParty mobileParty = MBObjectManager.Instance.CreateObject <MobileParty>(clan.StringId + "_" + numberOfCreated);

            TextObject textObject;

            textObject = new TextObject("{BASILPATROL_SETTLEMENT_NAME} Patrol", null);
            textObject.SetTextVariable("BASILPATROL_SETTLEMENT_NAME", settlement.Name);
            mobileParty.InitializeMobileParty(textObject, partyTemplate, settlement.GatePosition, 0, 0, 0, rand.Next((int)(amount * 0.9), (int)Math.Ceiling((amount + 1) * 1.1)));
            InitPatrolParty(mobileParty, textObject, clan, settlement);
            mobileParty.Aggressiveness = 1f;
            mobileParty.SetMovePatrolAroundSettlement(settlement);
            return(mobileParty);
        }
        // Token: 0x06000120 RID: 288 RVA: 0x000038C4 File Offset: 0x00001AC4
        public KingdomOtherSizes(PartyTemplateObject pt)
        {
            this._partyTemplate = pt;
            bool flag = this._partyTemplate.StringId.Contains("kingdom_hero_ai") && ModSettings.Instance.otherKingdomMultiplierEnabled;

            if (flag)
            {
                base.processParties(ModSettings.Instance.otherKingdomMinMultiplier, ModSettings.Instance.otherKingdomMaxMultiplier);
            }
            else
            {
                bool flag2 = this._partyTemplate.StringId.Contains("kingdom_hero_minor") && ModSettings.Instance.otherMinorFactionsMultiplierEnabled;
                if (flag2)
                {
                    base.processParties(ModSettings.Instance.otherMinorFactionsMinMultiplier, ModSettings.Instance.otherMinorFactionsMaxMultiplier);
                }
            }
        }
        public static bool Prefix(ref MobileParty __instance, PartyTemplateObject pt, MobileParty.PartyTypeEnum partyType, int troopNumberLimit = -1)
        {
            bool result = true;

            if (partyType == MobileParty.PartyTypeEnum.Bandit)
            {
                int num = 0;
                for (int i = 0; i < pt.Stacks.Count; i++)
                {
                    num = Support.Random(pt.Stacks[i].MinValue, pt.Stacks[i].MaxValue);
                    if (num > 0 && pt.Stacks[i].Character != null)
                    {
                        __instance.AddElementToMemberRoster(pt.Stacks[i].Character, num);
                    }
                }
                result = false;
            }
            return(result);
        }
Beispiel #14
0
        public MobileParty spawnRecruiter(Settlement settlement, int cash, RecruiterProperties props)
        {
            PartyTemplateObject defaultPartyTemplate = settlement.Culture.DefaultPartyTemplate;
            int numberOfCreated = defaultPartyTemplate.NumberOfCreated;

            defaultPartyTemplate.IncrementNumberOfCreated();
            MobileParty mobileParty = MBObjectManager.Instance.CreateObject <MobileParty>(settlement.OwnerClan.StringId + "_" + numberOfCreated);
            TextObject  textObject  = new TextObject("{RECRUITER_SETTLEMENT_NAME} Recruiter", null);

            textObject.SetTextVariable("RECRUITER_SETTLEMENT_NAME", settlement.Name);
            mobileParty.InitializeMobileParty(textObject, defaultPartyTemplate, settlement.GatePosition, 0f, 0f, MobileParty.PartyTypeEnum.Default, 1);
            mobileParty.PartyTradeGold = cash;
            this.InitRecruiterParty(mobileParty, textObject, settlement.OwnerClan, settlement);
            mobileParty.Aggressiveness = 0f;
            props.party = mobileParty;
            recruiterProperties.Add(props);
            mobileParty.SetMoveGoToSettlement(findNearestSettlementWithRecruitableRecruits(mobileParty));
            return(mobileParty);
        }
Beispiel #15
0
        private static TroopRoster ConstructTroopRoster(PartyTemplateObject pt, int troopNumberLimit = -1) //TODO implement troop number limit.
        {
            TroopRoster returned     = new TroopRoster();
            float       gameProcess  = MiscHelper.GetGameProcess();
            float       num          = 0.25f + 0.75f * gameProcess;
            int         num2         = MBRandom.RandomInt(2);
            float       num3         = (num2 == 0) ? MBRandom.RandomFloat : (MBRandom.RandomFloat * MBRandom.RandomFloat * MBRandom.RandomFloat * 4f);
            float       num4         = (num2 == 0) ? (num3 * 0.8f + 0.2f) : (1f + num3);
            float       randomFloat  = MBRandom.RandomFloat;
            float       randomFloat2 = MBRandom.RandomFloat;
            float       randomFloat3 = MBRandom.RandomFloat;

            for (int i = 0; i < pt.Stacks.Count; i++)
            {
                float f = (pt.Stacks.Count > 0) ? ((float)pt.Stacks[i].MinValue + num * num4 * randomFloat * (float)(pt.Stacks[i].MaxValue - pt.Stacks[i].MinValue)) : 0f;
                returned.AddToCounts(pt.Stacks[i].Character, MBRandom.RoundRandomized(f), false);
            }
            return(returned);
        }
Beispiel #16
0
        public static MobileParty CreateBanditParty(string cultureObjectID = null, string partyName = null)
        {
            MobileParty banditParty = null;

            try
            {
                List <Settlement> hideouts       = Settlement.FindAll((s) => { return(s.IsHideout()); }).ToList();
                Settlement        closestHideout = hideouts.MinBy((s) => { return(MobileParty.MainParty.GetPosition().DistanceSquared(s.GetPosition())); });

                CultureObject banditCultureObject = null;
                if (cultureObjectID != null)
                {
                    banditCultureObject = MBObjectManager.Instance.GetObject <CultureObject>(cultureObjectID);
                }
                else
                {
                    banditCultureObject = closestHideout.Culture;
                }

                if (partyName == null)
                {
                    partyName = $"{banditCultureObject.Name} (Random Event)";
                }

                PartyTemplateObject partyTemplate = MBObjectManager.Instance.GetObject <PartyTemplateObject>($"{banditCultureObject.StringId}_template");
                banditParty = MBObjectManager.Instance.CreateObject <MobileParty>($"randomevent_{banditCultureObject.StringId}_{MBRandom.RandomInt(int.MaxValue)}");
                TextObject partyNameTextObject = new TextObject(partyName, null);
                Clan       banditClan          = Clan.BanditFactions.FirstOrDefault(clan => clan.StringId == banditCultureObject.StringId);
                banditParty.InitializeMobileParty(partyTemplate, MobileParty.MainParty.Position2D, 0.2f, 0.1f);
                banditParty.SetCustomName(partyNameTextObject);

                banditParty.HomeSettlement = closestHideout;
            }
            catch (Exception ex)
            {
                MessageBox.Show($"Error while trying to create a mobile bandit party :\n\n {ex.Message} \n\n { ex.StackTrace}");
            }

            return(banditParty);
        }
        private static TownPatrolData SpawnTownPatrol(string name, string size, PatrolData dat, bool isPlayerSpawn, Settlement spawnSettlement = null)
        {
            MBObjectManager objManager = Game.Current.ObjectManager;
            TextObject      pName      = new TextObject(name);

            PartyTemplateObject templateObject = (PartyTemplateObject)objManager.GetObject <PartyTemplateObject>(dat.templateName + "_" + size);

            spawnSettlement = isPlayerSpawn ? Settlement.CurrentSettlement : spawnSettlement;

            MobileParty patrol = objManager.CreateObject <MobileParty>(dat.templateName + "_" + size + "_" + 1);

            patrol.InitializeMobileParty(MenuUtils.ConstructTroopRoster(templateObject, patrol.Party), new TroopRoster(patrol.Party), isPlayerSpawn ? Settlement.CurrentSettlement.GatePosition : spawnSettlement.GatePosition, 0);

            patrol.SetCustomName(pName);
            patrol.Party.Owner = spawnSettlement.MapFaction.Leader == null?spawnSettlement.OwnerClan.Heroes.ToList().First() : spawnSettlement.OwnerClan.Leader;

            patrol.Party.Visuals.SetMapIconAsDirty();
            patrol.ActualClan     = spawnSettlement.OwnerClan;
            patrol.HomeSettlement = spawnSettlement;
            MenuUtils.CreatePartyTrade(patrol);

            foreach (ItemObject obj in ItemObject.All)
            {
                if (obj.IsFood)
                {
                    int num = MBRandom.RandomInt(patrol.MemberRoster.TotalManCount / 3, patrol.MemberRoster.TotalManCount);
                    if (num > 0)
                    {
                        patrol.ItemRoster.AddToCounts(obj, num);
                    }
                }
            }

            patrol.SetMovePatrolAroundSettlement(spawnSettlement);

            return(new TownPatrolData(pName.ToString(), size, patrol));
        }
Beispiel #18
0
        public static MobileParty SpawnParty(Settlement spawnedSettlement, Clan clan, PartyTemplateObject templateObject, MobileParty.PartyTypeEnum partyType, TextObject partyName = null)
        {
            //get name and show message.
            TextObject textObject = partyName ?? clan.Name;

            ModDebug.ShowMessage("CustomSpawns: Spawning " + textObject.ToString() + " at " + spawnedSettlement.GatePosition + " in settlement " + spawnedSettlement.Name.ToString());

            //create.
            MobileParty mobileParty = MBObjectManager.Instance.CreateObject <MobileParty>(templateObject.StringId + "_" + 1);

            mobileParty.InitializeMobileParty(textObject, ConstructTroopRoster(templateObject), new TroopRoster(), spawnedSettlement.GatePosition, 0);

            //initialize
            Spawner.InitParty(mobileParty, textObject, clan, spawnedSettlement);

            return(mobileParty);
        }
Beispiel #19
0
        // Token: 0x0600011D RID: 285 RVA: 0x00003420 File Offset: 0x00001620
        public BanditSizes(PartyTemplateObject pt)
        {
            this._partyTemplate = pt;
            bool flag = this._partyTemplate.StringId.Contains("looter");

            if (flag)
            {
                bool lootersMultiplierEnabled = ModSettings.Instance.lootersMultiplierEnabled;
                if (lootersMultiplierEnabled)
                {
                    base.processParties(ModSettings.Instance.lootersMinMultiplier, ModSettings.Instance.lootersMaxMultiplier);
                }
            }
            else
            {
                bool flag2 = this._partyTemplate.StringId.Contains("sea");
                if (flag2)
                {
                    bool flag3 = base.isBossParty() && ModSettings.Instance.seaBossBanditsMultiplierEnabled;
                    if (flag3)
                    {
                        base.processBanditBoss(ModSettings.Instance.seaBossBanditMinMultiplier, ModSettings.Instance.seaBossBanditMaxMultiplier);
                    }
                    else
                    {
                        bool flag4 = ModSettings.Instance.seaBanditsMultiplierEnabled && !base.isBossParty();
                        if (flag4)
                        {
                            base.processParties(ModSettings.Instance.seaBanditMinMultiplier, ModSettings.Instance.seaBanditMaxMultiplier);
                        }
                    }
                }
                else
                {
                    bool flag5 = this._partyTemplate.StringId.Contains("forest");
                    if (flag5)
                    {
                        bool flag6 = base.isBossParty() && ModSettings.Instance.forestBossBanditMultiplierEnabled;
                        if (flag6)
                        {
                            base.processBanditBoss(ModSettings.Instance.forestBossBanditMinMultiplier, ModSettings.Instance.forestBossBanditMaxMultiplier);
                        }
                        else
                        {
                            bool flag7 = ModSettings.Instance.forestBanditMultiplierEnabled && !base.isBossParty();
                            if (flag7)
                            {
                                base.processParties(ModSettings.Instance.forestBanditMinMultiplier, ModSettings.Instance.forestBanditMaxMultiplier);
                            }
                        }
                    }
                    else
                    {
                        bool flag8 = this._partyTemplate.StringId.Contains("mountain");
                        if (flag8)
                        {
                            bool flag9 = base.isBossParty() && ModSettings.Instance.mountainBossBanditsMultiplierEnabled;
                            if (flag9)
                            {
                                base.processBanditBoss(ModSettings.Instance.mountainBossBanditMinMultiplier, ModSettings.Instance.mountainBossBanditMaxMultiplier);
                            }
                            else
                            {
                                bool flag10 = ModSettings.Instance.mountainBanditsMultiplierEnabled && !base.isBossParty();
                                if (flag10)
                                {
                                    base.processParties(ModSettings.Instance.mountainBanditMinMultiplier, ModSettings.Instance.mountainBanditMaxMultiplier);
                                }
                            }
                        }
                        else
                        {
                            bool flag11 = this._partyTemplate.StringId.Contains("desert");
                            if (flag11)
                            {
                                bool flag12 = base.isBossParty() && ModSettings.Instance.desertBossBanditsMultiplierEnabled;
                                if (flag12)
                                {
                                    base.processBanditBoss(ModSettings.Instance.desertBossBanditMinMultiplier, ModSettings.Instance.desertBossBanditMaxMultiplier);
                                }
                                else
                                {
                                    bool flag13 = ModSettings.Instance.desertBanditsMultiplierEnabled && !base.isBossParty();
                                    if (flag13)
                                    {
                                        base.processParties(ModSettings.Instance.desertBanditMinMultiplier, ModSettings.Instance.desertBanditMaxMultiplier);
                                    }
                                }
                            }
                            else
                            {
                                bool flag14 = this._partyTemplate.StringId.Contains("steppe");
                                if (flag14)
                                {
                                    bool flag15 = base.isBossParty() && ModSettings.Instance.steppeBossBanditsMultiplierEnabled;
                                    if (flag15)
                                    {
                                        base.processBanditBoss(ModSettings.Instance.steppeBossBanditMinMultiplier, ModSettings.Instance.steppeBossBanditMaxMultiplier);
                                    }
                                    else
                                    {
                                        bool flag16 = ModSettings.Instance.steppeBanditsMultiplierEnabled && !base.isBossParty();
                                        if (flag16)
                                        {
                                            base.processParties(ModSettings.Instance.steppeBanditMinMultiplier, ModSettings.Instance.steppeBanditMaxMultiplier);
                                        }
                                    }
                                }
                                else
                                {
                                    bool flag17 = base.isBossParty() && ModSettings.Instance.otherBanditsBossMultiplierEnabled;
                                    if (flag17)
                                    {
                                        base.processBanditBoss(ModSettings.Instance.otherBanditsBossMinMultiplier, ModSettings.Instance.otherBanditsBossMaxMultiplier);
                                    }
                                    else
                                    {
                                        bool flag18 = ModSettings.Instance.otherBanditsMultiplierEnabled && !base.isBossParty();
                                        if (flag18)
                                        {
                                            base.processParties(ModSettings.Instance.otherBanditsMinMultiplier, ModSettings.Instance.otherBanditsMaxMultiplier);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #20
0
        public static MobileParty SpawnParty(Settlement spawnedSettlement, Clan clan, PartyTemplateObject templateObject, Track.PartyTypeEnum partyType, TextObject partyName = null)
        {
            try
            {
                //get name and show message.
                TextObject textObject = partyName ?? clan.Name;
                ModDebug.ShowMessage("CustomSpawns: Spawning " + textObject.ToString() + " at " + spawnedSettlement.GatePosition + " in settlement " + spawnedSettlement.Name.ToString(), DebugMessageType.Spawn);

                //create.
                MobileParty mobileParty = MBObjectManager.Instance.CreateObject <MobileParty>(templateObject.StringId + "_" + 1);
                mobileParty.InitializeMobileParty(textObject, ConstructTroopRoster(templateObject, mobileParty.Party), new TroopRoster(mobileParty.Party), spawnedSettlement.GatePosition, 0);

                //initialize
                Spawner.InitParty(mobileParty, textObject, clan, spawnedSettlement);

                return(mobileParty);
            }
            catch (Exception e) {
                ErrorHandler.ShowPureErrorMessage("Possible invalid spawn data. Spawning of party terminated.");
                ErrorHandler.HandleException(e, "party spawning");
                return(null);
            }
        }
        internal void CECaptorHuntPrisoners(MenuCallbackArgs args, int amount = 20)
        {
            CEPersistence.animationPlayEvent = false;

            TroopRoster releasedPrisoners = TroopRoster.CreateDummyTroopRoster();

            if (CESettings.Instance != null)
            {
                amount = CESettings.Instance.AmountOfTroopsForHunt;
            }

            try
            {
                for (int i = 0; i < amount; i++)
                {
                    TroopRosterElement test = MobileParty.MainParty.PrisonRoster.GetTroopRoster().Where(troop => !troop.Character.IsHero).GetRandomElementInefficiently();

                    if (test.Character == null)
                    {
                        continue;
                    }

                    MobileParty.MainParty.PrisonRoster.RemoveTroop(test.Character);
                    releasedPrisoners.AddToCounts(test.Character, 1, true);
                }
            }
            catch (Exception)
            {
                CECustomHandler.LogToFile("Couldn't find anymore prisoners.");
            }

            if (!releasedPrisoners.GetTroopRoster().IsEmpty())
            {
                CECaptorContinue(args);

                try
                {
                    Clan clan = Clan.BanditFactions.First(clanLooters => clanLooters.StringId == "looters");
                    clan.Banner.SetBannerVisual(Banner.CreateRandomBanner().BannerVisual);

                    Settlement nearest = SettlementHelper.FindNearestSettlement(settlement => { return(true); });

                    MobileParty prisonerParty = BanditPartyComponent.CreateBanditParty("CustomPartyCE_Hunt_" + MBRandom.RandomInt(int.MaxValue), clan, nearest.Hideout, false);

                    PartyTemplateObject defaultPartyTemplate = clan.DefaultPartyTemplate;

                    prisonerParty.InitializeMobileParty(defaultPartyTemplate, MobileParty.MainParty.Position2D, 0.5f, 0.1f, -1);
                    prisonerParty.SetCustomName(new TextObject("{=CEEVENTS1107}Escaped Captives"));

                    prisonerParty.MemberRoster.Clear();
                    prisonerParty.MemberRoster.Add(releasedPrisoners.ToFlattenedRoster());

                    prisonerParty.RecentEventsMorale = -100;
                    prisonerParty.IsActive           = true;
                    prisonerParty.ActualClan         = clan;
                    prisonerParty.Party.Owner        = clan.Leader;
                    prisonerParty.Party.Visuals.SetMapIconAsDirty();

                    prisonerParty.HomeSettlement = nearest;
                    prisonerParty.InitializePartyTrade(0);

                    Hero.MainHero.HitPoints += 40;


                    CECustomHandler.LogToFile(prisonerParty.Leader.Name.ToString());
                    PlayerEncounter.RestartPlayerEncounter(prisonerParty.Party, MobileParty.MainParty.Party, true);
                    StartBattleAction.Apply(MobileParty.MainParty.Party, prisonerParty.Party);
                    PlayerEncounter.Update();

                    CEPersistence.huntState = CEPersistence.HuntState.StartHunt;
                    CampaignMission.OpenBattleMission(PlayerEncounter.GetBattleSceneForMapPosition(MobileParty.MainParty.Position2D));
                }
                catch (Exception)
                {
                    CECaptorKillPrisoners(args, amount);
                }
            }
            else
            {
                CECaptorContinue(args);
            }
        }
        // Token: 0x06000121 RID: 289 RVA: 0x0000396C File Offset: 0x00001B6C
        public KingdomSizes(PartyTemplateObject pt)
        {
            this._partyTemplate = pt;
            bool flag = this._partyTemplate.StringId.Contains("empire") && ModSettings.Instance.empireKingdomMultiplierEnabled;

            if (flag)
            {
                base.processParties(ModSettings.Instance.empireKingdomMinMultiplier, ModSettings.Instance.empireKingdomMaxMultiplier);
            }
            else
            {
                bool flag2 = this._partyTemplate.StringId.Contains("aserai") && ModSettings.Instance.aseraiKingdomMultiplierEnabled;
                if (flag2)
                {
                    base.processParties(ModSettings.Instance.aseraiKingdomMinMultiplier, ModSettings.Instance.aseraiKingdomMaxMultiplier);
                }
                else
                {
                    bool flag3 = this._partyTemplate.StringId.Contains("sturgia") && ModSettings.Instance.sturgiaKingdomMultiplierEnabled;
                    if (flag3)
                    {
                        base.processParties(ModSettings.Instance.sturgiaKingdomMinMultiplier, ModSettings.Instance.sturgiaKingdomMaxMultiplier);
                    }
                    else
                    {
                        bool flag4 = this._partyTemplate.StringId.Contains("vlandia") && ModSettings.Instance.vlandiaKingdomMultiplierEnabled;
                        if (flag4)
                        {
                            base.processParties(ModSettings.Instance.vlandiaKingdomMinMultiplier, ModSettings.Instance.vlandiaKingdomMaxMultiplier);
                        }
                        else
                        {
                            bool flag5 = this._partyTemplate.StringId.Contains("battania") && ModSettings.Instance.battaniaKingdomMultiplierEnabled;
                            if (flag5)
                            {
                                base.processParties(ModSettings.Instance.battaniaKingdomMinMultiplier, ModSettings.Instance.battaniaKingdomMaxMultiplier);
                            }
                            else
                            {
                                bool flag6 = this._partyTemplate.StringId.Contains("khuzait") && ModSettings.Instance.khuzaitKingdomMultiplierEnabled;
                                if (flag6)
                                {
                                    base.processParties(ModSettings.Instance.khuzaitKingdomMinMultiplier, ModSettings.Instance.khuzaitKingdomMaxMultiplier);
                                }
                                else
                                {
                                    bool flag7 = ModSettings.Instance.minorFactionsMultiplierEnabled && !this._partyTemplate.StringId.Contains("cs_");
                                    if (flag7)
                                    {
                                        base.processParties(ModSettings.Instance.minorFactionsMinMultiplier, ModSettings.Instance.minorFactionsMaxMultiplier);
                                    }
                                    else
                                    {
                                        bool flag8 = this._partyTemplate.StringId.Contains("cs_");
                                        if (flag8)
                                        {
                                            new csSizes(pt);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Beispiel #23
0
        private static MobileParty CreatePartyInstance(Settlement spawnedSettlement, Clan clan, PartyTemplateObject templateObject,
                                                       Track.PartyTypeEnum partyType, TextObject partyName = null)
        {
            if (clan.IsBanditFaction)
            {
                return(BanditPartyComponent.CreateBanditParty(templateObject.StringId + "_" + 1, clan,
                                                              spawnedSettlement.Hideout, false));
            }

            return(MobileParty.CreateParty(templateObject.StringId + "_" + 1, null));
        }
Beispiel #24
0
        public static MobileParty SpawnParty(Settlement spawnedSettlement, Clan clan, PartyTemplateObject templateObject, Track.PartyTypeEnum partyType, TextObject partyName = null)
        {
            try
            {
                if (templateObject == null)
                {
                    ErrorHandler.ShowPureErrorMessage(
                        "Party Template with ID " + templateObject.StringId + " possibly does not exist. It was tried to be assigned to "
                        + templateObject.StringId);
                    return(null);
                }

                //get name and show message.
                TextObject textObject = partyName ?? clan.Name;
                ModDebug.ShowMessage("CustomSpawns: Spawning " + textObject.ToString() + " at " + spawnedSettlement.GatePosition + " in settlement " + spawnedSettlement.Name.ToString(), DebugMessageType.Spawn);

                //create.
                MobileParty mobileParty = CreatePartyInstance(spawnedSettlement, clan, templateObject, partyType, partyName);

                if (mobileParty == null)
                {
                    return(null); //must have had some issue. or maybe it was just the wind.
                }

                mobileParty.InitializeMobilePartyAroundPosition(ConstructTroopRoster(templateObject, mobileParty.Party),
                                                                new TroopRoster(mobileParty.Party), spawnedSettlement.GatePosition, 0);

                //initialize
                InitParty(mobileParty, textObject, clan, spawnedSettlement);

                return(mobileParty);
            }
            catch (Exception e) {
                ErrorHandler.ShowPureErrorMessage("Possible invalid spawn data. Spawning of party terminated.");
                ErrorHandler.HandleException(e, "party spawning");
                return(null);
            }
        }
Beispiel #25
0
        private void ConstructListFromXML(string filePath)
        {
            XmlDocument doc = new XmlDocument();

            doc.Load(filePath);
            try
            {
                foreach (XmlNode node in doc.DocumentElement)
                {
                    if (node.NodeType == XmlNodeType.Comment)
                    {
                        continue;
                    }

                    SpawnData dat = new SpawnData();

                    dat.PartyTemplate = (PartyTemplateObject)MBObjectManager.Instance.ReadObjectReferenceFromXml("party_template", typeof(PartyTemplateObject), node);
                    if (node.Attributes["spawn_clan"] == null)
                    {
                        dat.SpawnClan = (Clan)MBObjectManager.Instance.ReadObjectReferenceFromXml("bandit_clan", typeof(Clan), node);
                    }
                    else
                    {
                        dat.SpawnClan = (Clan)MBObjectManager.Instance.ReadObjectReferenceFromXml("spawn_clan", typeof(Clan), node);
                    }

                    //have bannerlord read attributes

                    int    i = 0;
                    string s = "overriden_spawn_clan";
                    while (true)
                    {
                        string s1 = s + "_" + i.ToString();
                        if (node.Attributes[s1] == null || node.Attributes[s1].InnerText == "")
                        {
                            break;
                        }
                        else
                        {
                            dat.OverridenSpawnClan.Add((Clan)MBObjectManager.Instance.ReadObjectReferenceFromXml(s1, typeof(Clan), node));
                        }
                        i++;
                    }

                    int    j  = 0;
                    string st = "overriden_spawn_culture";
                    while (true)
                    {
                        string s1 = st + "_" + j.ToString();
                        if (node.Attributes[s1] == null || node.Attributes[s1].InnerText == "")
                        {
                            break;
                        }
                        else
                        {
                            dat.OverridenSpawnCultures.Add(((CultureObject)MBObjectManager.Instance.ReadObjectReferenceFromXml(s1, typeof(CultureObject), node)).GetCultureCode());
                        }
                        j++;
                    }

                    j  = 0;
                    st = "overriden_spawn_settlement";
                    while (true)
                    {
                        string s1 = st + "_" + j.ToString();
                        if (node.Attributes[s1] == null || node.Attributes[s1].InnerText == "")
                        {
                            break;
                        }
                        else
                        {
                            dat.OverridenSpawnSettlements.Add(((Settlement)MBObjectManager.Instance.ReadObjectReferenceFromXml(s1, typeof(Settlement), node)));
                        }
                        j++;
                    }

                    //get elements
                    dat.MaximumOnMap = node["MaximumOnMap"] == null? 0 : int.Parse(node["MaximumOnMap"].InnerText);
                    if (dat.MaximumOnMap < 1)
                    {
                        throw new Exception("the node 'MaximumOnMap' cannot be less than 1!");
                    }

                    dat.PartyType             = node["PartyType"] == null ? MobileParty.PartyTypeEnum.Bandit : StringToPartyTypeEnumIfInvalidBandit(node["PartyType"].InnerText);
                    dat.ChanceOfSpawn         = node["ChanceOfSpawn"] == null? 1 : float.Parse(node["ChanceOfSpawn"].InnerText);
                    dat.Name                  = node["Name"] == null ? "Unnamed" : node["Name"].InnerText;
                    dat.ChanceInverseConstant = node["ChanceInverseConstant"] == null? 0 : float.Parse(node["ChanceInverseConstant"].InnerText);
                    dat.RepeatSpawnRolls      = node["RepeatSpawnRolls"] == null? 1 : int.Parse(node["RepeatSpawnRolls"].InnerText);

                    dat.PatrolAroundSpawn             = node["PatrolAroundSpawn"] == null ? false : bool.Parse(node["PatrolAroundSpawn"].InnerText);
                    dat.MinimumNumberOfDaysUntilSpawn = node["MinimumNumberOfDaysUntilSpawn"] == null ? -1 : int.Parse(node["MinimumNumberOfDaysUntilSpawn"].InnerText);

                    dat.AttackClosestIfIdleForADay = node["AttackClosestIfIdleForADay"] == null ? true : bool.Parse(node["AttackClosestIfIdleForADay"].InnerText);

                    //try spawn at list creation
                    if (node["TrySpawnAt"] != null && node["TrySpawnAt"].InnerText != "")
                    {
                        dat.TrySpawnAtList = ConstructTrySettlementList(node["TrySpawnAt"].InnerText);
                    }

                    //message
                    string msg   = node["SpawnMessage"] == null? "" : node["SpawnMessage"].InnerText;
                    string color = node["SpawnMessageColor"] == null ? "" : node["SpawnMessageColor"].InnerText;

                    if (msg != "")
                    {
                        if (color == "")
                        {
                            dat.spawnMessage = new InformationMessage(msg, Color.Black);
                        }
                        else
                        {
                            Color c = UX.GetMessageColour(color) == "" ? (color[0] == '#'? Color.ConvertStringToColor(color) : Color.Black) : Color.ConvertStringToColor(UX.GetMessageColour(color));
                            dat.spawnMessage = new InformationMessage(msg, c);
                        }
                    }
                    //handle extra linear speed.
                    float extraSpeed = float.MinValue;
                    if (node["ExtraLinearSpeed"] != null)
                    {
                        if (!float.TryParse(node["ExtraLinearSpeed"].InnerText, out extraSpeed))
                        {
                            throw new Exception("ExtraLinearSpeed must be a float value! ");
                        }
                        Main.customSpeedModel.RegisterPartyExtraSpeed(dat.PartyTemplate.StringId, extraSpeed);
                    }

                    //handle base speed override
                    float baseSpeedOverride = float.MinValue;
                    if (node["BaseSpeedOverride"] != null)
                    {
                        if (!float.TryParse(node["BaseSpeedOverride"].InnerText, out baseSpeedOverride))
                        {
                            throw new Exception("BaseSpeedOverride must be a float value! ");
                        }
                        Main.customSpeedModel.RegisterPartyBaseSpeed(dat.PartyTemplate.StringId, baseSpeedOverride);
                    }
                    else
                    {
                        Main.customSpeedModel.RegisterPartyBaseSpeed(dat.PartyTemplate.StringId, float.MinValue);
                    }

                    //patrol around closest lest interrupted and switch
                    if (node["PatrolAroundClosestLestInterruptedAndSwitch"] != null)
                    {
                        bool val = false;
                        if (!bool.TryParse(node["PatrolAroundClosestLestInterruptedAndSwitch"].InnerText, out val))
                        {
                            break;
                        }
                        if (!val)
                        {
                            break;
                        }
                        XmlNode innerNode = node["PatrolAroundClosestLestInterruptedAndSwitch"];
                        float   minDays   = 0;
                        float   maxDays   = 10;
                        List <SpawnSettlementType> TryPatrolAround = new List <SpawnSettlementType>();
                        try
                        {
                            if (!float.TryParse(innerNode.Attributes["min_stable_days"].InnerText, out minDays))
                            {
                                throw new Exception("min_stable_days must be a float value!");
                            }
                            if (!float.TryParse(innerNode.Attributes["max_stable_days"].InnerText, out maxDays))
                            {
                                throw new Exception("max_stable_days must be a float value!");
                            }
                            if (innerNode.Attributes["try_patrol_around"] != null && innerNode.Attributes["try_patrol_around"].InnerText != "")
                            {
                                TryPatrolAround = ConstructTrySettlementList(innerNode.Attributes["try_patrol_around"].InnerText);
                            }
                        }catch
                        {
                            throw new Exception("not all attributes in PatrolAroundClosestLestInterruptedAndSwitch were filled properly!");
                        }
                        dat.PatrolAroundClosestLestInterruptedAndSwitch =
                            new AI.PatrolAroundClosestLestInterruptedAndSwitchBehaviour.PatrolAroundClosestLestInterruptedAndSwitchBehaviourData(null, minDays, maxDays, TryPatrolAround);
                    }

                    //min max party speed modifiers
                    float minSpeed = float.MinValue;
                    if (node["MinimumFinalSpeed"] != null)
                    {
                        if (!float.TryParse(node["MinimumFinalSpeed"].InnerText, out minSpeed))
                        {
                            throw new Exception("MinimumFinalSpeed must be a float value! ");
                        }
                        Main.customSpeedModel.RegisterPartyMinimumSpeed(dat.PartyTemplate.StringId, minSpeed);
                    }

                    float maxSpeed = float.MinValue;
                    if (node["MaximumFinalSpeed"] != null)
                    {
                        if (!float.TryParse(node["MaximumFinalSpeed"].InnerText, out maxSpeed))
                        {
                            throw new Exception("MaximumFinalSpeed must be a float value! ");
                        }
                        Main.customSpeedModel.RegisterPartyMaximumSpeed(dat.PartyTemplate.StringId, maxSpeed);
                    }

                    //Spawn along with
                    int    k   = 0;
                    string str = "spawn_along_with";
                    while (true)
                    {
                        string s1 = str + "_" + k.ToString();
                        if (node.Attributes[s1] == null || node.Attributes[s1].InnerText == "")
                        {
                            break;
                        }
                        else
                        {
                            PartyTemplateObject pt = (PartyTemplateObject)MBObjectManager.Instance.ReadObjectReferenceFromXml(s1, typeof(PartyTemplateObject), node);
                            dat.SpawnAlongWith.Add(new AccompanyingParty(pt, NameSignifierData.Instance.GetPartyNameFromID(pt.StringId),
                                                                         NameSignifierData.Instance.GetPartyFollowBehaviourFlagFromID(pt.StringId)));
                            Main.customSpeedModel.RegisterPartyExtraSpeed(pt.StringId, NameSignifierData.Instance.GetSpeedModifierFromID(pt.StringId));
                            Main.customSpeedModel.RegisterPartyBaseSpeed(pt.StringId, NameSignifierData.Instance.GetBaseSpeedModifierOverrideFromID(pt.StringId));
                            if (minSpeed != float.MinValue)
                            {
                                Main.customSpeedModel.RegisterPartyMinimumSpeed(pt.StringId, minSpeed);
                            }
                            if (maxSpeed != float.MinValue)
                            {
                                Main.customSpeedModel.RegisterPartyMaximumSpeed(pt.StringId, maxSpeed);
                            }
                        }
                        k++;
                    }

                    data.Add(dat);
                    if (!partyIDtoData.ContainsKey(dat.PartyTemplate.StringId)) //TODO add way to alert modder that he should use one party template for one AI
                    {
                        partyIDtoData.Add(dat.PartyTemplate.StringId, dat);
                    }
                }
            }
            catch (Exception e)
            {
                ErrorHandler.HandleException(e, "Spawn Data Parsing of " + filePath);
            }
        }
Beispiel #26
0
        public static MobileParty SpawnParty(Settlement spawnedSettlement, Clan clan, PartyTemplateObject templateObject, MobileParty.PartyTypeEnum partyType, TextObject partyName = null, PartyTemplateObject templatePrisoners = null, bool IsInheritClan = false)
        {
            //get name and show message.
            TextObject textObject = partyName ?? clan.Name;

            ModDebug.ShowMessage("CustomSpawns: Spawning " + textObject.ToString() + " at " + spawnedSettlement.GatePosition + " in settlement " + spawnedSettlement.Name.ToString(), DebugMessageType.Spawn);

            //create.
            MobileParty mobileParty = MBObjectManager.Instance.CreateObject <MobileParty>(templateObject.StringId + "_" + 1);

            if (templatePrisoners != null)
            {
                mobileParty.InitializeMobileParty(textObject, ConstructTroopRoster(templateObject, mobileParty.Party), ConstructTroopRoster(templatePrisoners, mobileParty.Party), spawnedSettlement.GatePosition, 0);
            }
            else
            {
                mobileParty.InitializeMobileParty(textObject, ConstructTroopRoster(templateObject, mobileParty.Party), new TroopRoster(mobileParty.Party), spawnedSettlement.GatePosition, 0);
            }

            //initialize
            Clan settlementClan = spawnedSettlement.OwnerClan;

            if (IsInheritClan == true)
            {
                Spawner.InitParty(mobileParty, textObject, settlementClan, spawnedSettlement);
            }
            else
            {
                Spawner.InitParty(mobileParty, textObject, clan, spawnedSettlement);
            }

            return(mobileParty);
        }
Beispiel #27
0
        public bool                accompanyMainParty; //TODO implement this!!

        public AccompanyingParty(PartyTemplateObject pt, string n, bool accompanyMainParty)
        {
            templateObject          = pt;
            name                    = n;
            this.accompanyMainParty = accompanyMainParty;
        }
        internal void CECaptorPrisonerRebel(MenuCallbackArgs args)
        {
            CEPersistence.animationPlayEvent = false;

            TroopRoster releasedPrisoners = TroopRoster.CreateDummyTroopRoster();

            try
            {
                foreach (TroopRosterElement element in MobileParty.MainParty.PrisonRoster.GetTroopRoster())
                {
                    if (element.Character.IsHero)
                    {
                        element.Character.HeroObject.ChangeState(Hero.CharacterStates.Active);
                    }
                }
                releasedPrisoners.Add(MobileParty.MainParty.PrisonRoster.ToFlattenedRoster());
                MobileParty.MainParty.PrisonRoster.Clear();
            }
            catch (Exception)
            {
                CECustomHandler.LogToFile("Couldn't find anymore prisoners.");
            }

            if (!releasedPrisoners.GetTroopRoster().IsEmpty())
            {
                try
                {
                    TroopRosterElement leader = releasedPrisoners.GetTroopRoster().FirstOrDefault(hasHero => hasHero.Character.IsHero);

                    Clan        clan          = null;
                    Settlement  nearest       = null;
                    MobileParty prisonerParty = null;

                    if (leader.Character != null)
                    {
                        clan          = leader.Character.HeroObject.Clan;
                        nearest       = SettlementHelper.FindNearestSettlement(settlement => settlement.OwnerClan == clan) ?? SettlementHelper.FindNearestSettlement(settlement => true);
                        prisonerParty = LordPartyComponent.CreateLordParty("CustomPartyCE_" + MBRandom.RandomInt(int.MaxValue), leader.Character.HeroObject, MobileParty.MainParty.Position2D, 0.5f, nearest);
                    }
                    else
                    {
                        clan = Clan.BanditFactions.First(clanLooters => clanLooters.StringId == "looters");
                        clan.Banner.SetBannerVisual(Banner.CreateRandomBanner().BannerVisual);
                        nearest       = SettlementHelper.FindNearestSettlement(settlement => true);
                        prisonerParty = BanditPartyComponent.CreateBanditParty("CustomPartyCE_" + MBRandom.RandomInt(int.MaxValue), clan, nearest.Hideout, false);
                    }

                    PartyTemplateObject defaultPartyTemplate = clan.DefaultPartyTemplate;

                    prisonerParty.InitializeMobileParty(defaultPartyTemplate, MobileParty.MainParty.Position2D, 0.5f, 0.1f, -1);
                    prisonerParty.SetCustomName(new TextObject("{=CEEVENTS1107}Escaped Captives"));

                    prisonerParty.MemberRoster.Clear();
                    prisonerParty.ActualClan = clan;
                    prisonerParty.MemberRoster.Add(releasedPrisoners.ToFlattenedRoster());
                    prisonerParty.IsActive = true;

                    prisonerParty.HomeSettlement = nearest;
                    prisonerParty.SetMovePatrolAroundPoint(nearest.IsTown
                                       ? nearest.GatePosition
                                       : nearest.Position2D);

                    if (leader.Character != null)
                    {
                        prisonerParty.Party.Owner = leader.Character.HeroObject;
#if BETA
                        prisonerParty.ChangePartyLeader(leader.Character);
#else
                        prisonerParty.ChangePartyLeader(leader.Character, true);
#endif
                    }
                    else
                    {
                        prisonerParty.Party.Owner = clan.Leader;
                    }



                    prisonerParty.RecentEventsMorale = -100;
                    prisonerParty.Aggressiveness     = 0.2f;
                    prisonerParty.InitializePartyTrade(0);

                    Hero.MainHero.HitPoints += 40;

                    CECustomHandler.LogToFile(prisonerParty.Leader.Name.ToString());
                    PlayerEncounter.RestartPlayerEncounter(MobileParty.MainParty.Party, prisonerParty.Party);
                    GameMenu.SwitchToMenu("encounter");
                }
                catch (Exception)
                {
                    CECaptorContinue(args);
                }
            }
            else
            {
                CECaptorContinue(args);
            }
        }