示例#1
0
        internal static void ReHome()
        {
            var tempList = PartyMilitiaMap.Values.Where(x => x?.Hero?.HomeSettlement == null).Select(x => x.Hero).ToList();

            Mod.Log($"Fixing {tempList.Count} null HomeSettlement heroes");
            tempList.Do(x => Traverse.Create(x).Field("_homeSettlement").SetValue(Hideouts.GetRandomElement()));
        }
示例#2
0
        // modified from 1.5.8 copy
        public static Hero CreateBanditHero(Clan mostPrevalent, MobileParty mobileParty)
        {
            var settlement = Hideouts.GetRandomElement();
            var num1       = 0;

            foreach (var characterObject in Source)
            {
                var num2 = characterObject.GetTraitLevel(DefaultTraits.Frequency) * 10;
                num1 += num2 > 0 ? num2 : 100;
            }

            if (!Source.Any())
            {
                return(null);
            }
            CharacterObject characterObject1 = null;
            var             num3             = 1 + (int)(settlement.Random.GetValueNormalized(settlement.Notables.Count) * (double)(num1 - 1));

            foreach (var characterObject2 in Source)
            {
                var num2 = characterObject2.GetTraitLevel(DefaultTraits.Frequency) * 10;
                num3 -= num2 > 0 ? num2 : 100;
                if (num3 < 0)
                {
                    characterObject1 = characterObject2;
                    break;
                }
            }

            var specialHero = HeroCreator.CreateSpecialHero(characterObject1, settlement);

            specialHero.SupporterOf = Clan.BanditFactions.ToList().GetRandomElement();
            Traverse.Create(typeof(HeroCreator)).Method("AddRandomVarianceToTraits", specialHero).GetValue();
            // 1.4.3b doesn't have these wired up really, but I patched prisoners with it... kinda
            specialHero.NeverBecomePrisoner = true;
            specialHero.AlwaysDie           = true;
            var partyStrength = Traverse.Create(mobileParty.Party).Method("CalculateStrength").GetValue <float>();

            specialHero.Gold = Convert.ToInt32(partyStrength * GoldMap[Globals.Settings.GoldReward]);
            //var hideout = Hideouts.Where(x => x.MapFaction != CampaignData.NeutralFaction).GetRandomElement();
            // home has to be set to a hideout to make party aggressive (see PartyBase.MapFaction)
            // 1.4.3b changed this now we also have to set ActualClan
            specialHero.Clan = mostPrevalent;
            // why is this not accessed?
            // ReSharper disable once NotAccessedVariable
            var lastSeenPlace = Traverse.Create(specialHero).Field <Hero.HeroLastSeenInformation>("_lastSeenInformationKnownToPlayer").Value;

            lastSeenPlace.LastSeenPlace = settlement;
            EquipmentHelper.AssignHeroEquipmentFromEquipment(specialHero, BanditEquipment.GetRandomElement());
            Traverse.Create(specialHero).Field("_homeSettlement").SetValue(settlement);
            Traverse.Create(specialHero.Clan).Field("_warParties").Method("Add", mobileParty).GetValue();
            mobileParty.MemberRoster.AddToCounts(specialHero.CharacterObject, 1, false, 0, 0, true, 0);
            if (Globals.Settings.CanTrain)
            {
                specialHero.SetSkillValue(Leadership, 150);
                specialHero.SetPerkValue(VeteransRespect, true);
            }

            MBObjectManager.Instance.RegisterObject(specialHero);
            return(specialHero);
        }