Exemplo n.º 1
0
        // Token: 0x0600000A RID: 10 RVA: 0x000022B0 File Offset: 0x000004B0
        public static void PawnWeaponGenerator_TryGenerateWeaponFor_PostFix(Pawn pawn)
        {
            HugsLib.Settings.SettingHandle <int> chance = Traverse.Create(typeof(DualWield.Base)).Field("NPCDualWieldChance").GetValue <HugsLib.Settings.SettingHandle <int> >();
            bool alwaysDW = (pawn.kindDef.weaponTags != null && pawn.kindDef.weaponTags.Contains("AlwaysDualWield"));

            Rand.PushState();
            bool flag = !pawn.RaceProps.Humanlike && pawn.RaceProps.ToolUser && pawn.RaceProps.FleshType != FleshTypeDefOf.Mechanoid && pawn.equipment != null && (Rand.Chance((float)chance / 100f) || alwaysDW);

            Rand.PopState();
            if (flag)
            {
                float randomInRange = pawn.kindDef.weaponMoney.RandomInRange;
                List <ThingStuffPair> allWeaponPairs = Traverse.Create(typeof(PawnWeaponGenerator)).Field("allWeaponPairs").GetValue <List <ThingStuffPair> >();
                List <ThingStuffPair> workingWeapons = Traverse.Create(typeof(PawnWeaponGenerator)).Field("workingWeapons").GetValue <List <ThingStuffPair> >();
                if (pawn.equipment != null && pawn.equipment.Primary != null && pawn.equipment.Primary.def.IsTwoHand())
                {
                    return;
                }
                if (pawn.equipment == null || pawn.equipment.Primary == null)
                {
                    return;
                }
                for (int i = 0; i < allWeaponPairs.Count; i++)
                {
                    ThingStuffPair w = allWeaponPairs[i];
                    if (w.Price <= randomInRange)
                    {
                        if (pawn.kindDef.weaponTags == null || pawn.kindDef.weaponTags.Any((string tag) => w.thing.weaponTags.Contains(tag)))
                        {
                            Rand.PushState();
                            if (w.thing.generateAllowChance >= 1f || Rand.ChanceSeeded(w.thing.generateAllowChance, pawn.thingIDNumber ^ (int)w.thing.shortHash ^ 28554824))
                            {
                                workingWeapons.Add(w);
                            }
                            Rand.PopState();
                        }
                    }
                }
                if (workingWeapons.Count == 0)
                {
                    return;
                }
                IEnumerable <ThingStuffPair> matchingWeapons = workingWeapons.Where((ThingStuffPair tsp) =>
                                                                                    tsp.thing.CanBeOffHand() &&
                                                                                    !tsp.thing.IsTwoHand());
                if (matchingWeapons != null && matchingWeapons.TryRandomElementByWeight((ThingStuffPair w) => w.Commonality * w.Price, out ThingStuffPair thingStuffPair))
                {
                    ThingWithComps thingWithComps = (ThingWithComps)ThingMaker.MakeThing(thingStuffPair.thing, thingStuffPair.stuff);
                    PawnGenerator.PostProcessGeneratedGear(thingWithComps, pawn);
                    AddOffHandEquipment(pawn.equipment, thingWithComps);
                }
            }
        }
Exemplo n.º 2
0
        public override void DefsLoaded()
        {
            multiplier = Settings.GetHandle <float>(
                "tioao_multipl",
                "Active power usage multiplier",
                "Active power usage multiplier",
                1.0f);
            minvalue = Settings.GetHandle <int>(
                "tioao_minval",
                "Idle power usage value",
                "Idle power usage value",
                1);


            whitelist.Add("DeepDrill");
            whitelist.Add("ElectricCrematorium");
            whitelist.Add("HiTechResearchBench");
            whitelist.Add("FabricationBench");
            whitelist.Add("BiofuelRefinery");
            whitelist.Add("ElectricSmelter");
            whitelist.Add("ElectricStove");
            whitelist.Add("TableMachining");
            whitelist.Add("ElectricSmithy");
            whitelist.Add("ElectricTailoringBench");
            whitelist.Add("VitalsMonitor");
            whitelist.Add("MultiAnalyzer");
            whitelist.Add("MegascreenTelevision");
            whitelist.Add("FlatscreenTelevision");
            whitelist.Add("TubeTelevision");
            whitelist.Add("GroundPenetratingScanner");
            whitelist.Add("LongRangeMineralScanner");


            buildingDefsReservable.Add(ThingDef.Named("LongRangeMineralScanner"));
            buildingDefsReservable.Add(ThingDef.Named("GroundPenetratingScanner"));
            buildingDefsReservable.Add(ThingDef.Named("DeepDrill"));

            medicalBedDef          = ThingDef.Named("HospitalBed");
            HiTechResearchBenchDef = ThingDef.Named("HiTechResearchBench");
            AutodoorDef            = ThingDef.Named("Autodoor");
            DeepDrillDef           = ThingDef.Named("DeepDrill");

            initPowerValues();
        }