Пример #1
0
 public override float ValuePerUnitOf(ThingDef t)
 {
     if (!t.IsNutritionGivingIngestible)
     {
         return(0f);
     }
     return(t.GetStatValueAbstract(StatDefOf.Nutrition, null));
 }
        public static FloatRange ComfortableTemperatureRange(ThingDef raceDef, List <ThingStuffPair> apparel = null)
        {
            FloatRange result = new FloatRange(raceDef.GetStatValueAbstract(StatDefOf.ComfyTemperatureMin, null), raceDef.GetStatValueAbstract(StatDefOf.ComfyTemperatureMax, null));

            if (apparel != null)
            {
                result.min += apparel.Sum((ThingStuffPair x) => x.InsulationCold);
                result.max += apparel.Sum((ThingStuffPair x) => x.InsulationHeat);
            }
            return(result);
        }
Пример #3
0
 public float AdjustedCooldown_NewTmp(Tool tool, Pawn attacker, ThingDef equipment, ThingDef equipmentStuff)
 {
     if (tool != null)
     {
         return(tool.AdjustedCooldown_NewTmp(equipment, equipmentStuff));
     }
     if (equipment != null && !IsMeleeAttack)
     {
         return(equipment.GetStatValueAbstract(StatDefOf.RangedWeapon_Cooldown, equipmentStuff));
     }
     return(defaultCooldownTime);
 }
Пример #4
0
        public static void WeaponsMelee()
        {
            List <FloatMenuOption> list = new List <FloatMenuOption>();

            list.Add(new FloatMenuOption("Stuffless", delegate
            {
                DebugOutputsGeneral.DoTablesInternalMelee(null, false);
            }, MenuOptionPriority.Default, null, null, 0f, null, null));
            IEnumerable <ThingDef> source = from st in DefDatabase <ThingDef> .AllDefs
                                            where st.IsStuff
                                            where DefDatabase <ThingDef> .AllDefs.Any((ThingDef wd) => wd.IsMeleeWeapon && st.stuffProps.CanMake(wd))
                                            select st;

            foreach (ThingDef current in from td in source
                     orderby td.GetStatValueAbstract(StatDefOf.SharpDamageMultiplier, null) descending
                     select td)
            {
                ThingDef localStuff         = current;
                float    statValueAbstract  = localStuff.GetStatValueAbstract(StatDefOf.SharpDamageMultiplier, null);
                float    statValueAbstract2 = localStuff.GetStatValueAbstract(StatDefOf.BluntDamageMultiplier, null);
                float    statFactorFromList = localStuff.stuffProps.statFactors.GetStatFactorFromList(StatDefOf.MeleeWeapon_CooldownMultiplier);
                list.Add(new FloatMenuOption(string.Concat(new object[]
                {
                    localStuff.defName,
                    " (sharp ",
                    statValueAbstract,
                    ", blunt ",
                    statValueAbstract2,
                    ", cooldown ",
                    statFactorFromList,
                    ")"
                }), delegate
                {
                    DebugOutputsGeneral.DoTablesInternalMelee(localStuff, false);
                }, MenuOptionPriority.Default, null, null, 0f, null, null));
            }
            Find.WindowStack.Add(new FloatMenu(list));
        }
        public override float ValuePerUnitOf(ThingDef t)
        {
            float result;

            if (!t.IsNutritionGivingIngestible)
            {
                result = 0f;
            }
            else
            {
                result = t.GetStatValueAbstract(StatDefOf.Nutrition, null);
            }
            return(result);
        }
Пример #6
0
        public float AdjustedBaseMeleeDamageAmount_NewTmp(ThingDef ownerEquipment, ThingDef ownerEquipmentStuff, DamageDef damageDef)
        {
            float num = power;

            if (ownerEquipmentStuff != null)
            {
                num *= ownerEquipment.GetStatValueAbstract(StatDefOf.MeleeWeapon_DamageMultiplier, ownerEquipmentStuff);
                if (ownerEquipmentStuff != null && damageDef != null)
                {
                    num *= ownerEquipmentStuff.GetStatValueAbstract(damageDef.armorCategory.multStat);
                }
            }
            return(num);
        }
Пример #7
0
        public float AdjustedArmorPenetration_NewTmp(Tool tool, Pawn attacker, ThingDef equipment, ThingDef equipmentStuff, HediffComp_VerbGiver hediffCompSource)
        {
            float num = tool?.armorPenetration ?? meleeArmorPenetrationBase;

            if (num < 0f)
            {
                num = AdjustedMeleeDamageAmount_NewTmp(tool, attacker, equipment, equipmentStuff, hediffCompSource) * 0.015f;
            }
            else if (equipment != null)
            {
                float statValueAbstract = equipment.GetStatValueAbstract(StatDefOf.MeleeWeapon_DamageMultiplier, equipmentStuff);
                num *= statValueAbstract;
            }
            return(num);
        }
Пример #8
0
 private static float RaceMeleeDpsEstimate(ThingDef race)
 {
     return(race.GetStatValueAbstract(StatDefOf.MeleeDPS));
 }
 private static string <PlantsBasics> m__5(ThingDef d)
 {
     return((d.ingestible == null) ? "-" : (d.GetStatValueAbstract(StatDefOf.Nutrition, null) / d.plant.growDays).ToString("F4"));
 }
 private static string <PlantsBasics> m__4(ThingDef d)
 {
     return((d.ingestible == null) ? "-" : d.GetStatValueAbstract(StatDefOf.Nutrition, null).ToString("F2"));
 }
Пример #11
0
 public float AdjustedCooldown_NewTmp(ThingDef ownerEquipment, ThingDef ownerEquipmentStuff)
 {
     return(cooldownTime * (ownerEquipment?.GetStatValueAbstract(StatDefOf.MeleeWeapon_CooldownMultiplier, ownerEquipmentStuff) ?? 1f));
 }
Пример #12
0
        private static void DoTablesInternalMelee(ThingDef stuff, bool doRaces = false)
        {
            Func <Def, float> meleeDamageGetter = delegate(Def d)
            {
                List <Verb> concreteExampleVerbs5 = VerbUtility.GetConcreteExampleVerbs(d, stuff);
                if (concreteExampleVerbs5.OfType <Verb_MeleeAttack>().Any())
                {
                    return(concreteExampleVerbs5.OfType <Verb_MeleeAttack>().AverageWeighted((Verb_MeleeAttack v) => v.verbProps.AdjustedMeleeSelectionWeight(v, null), (Verb_MeleeAttack v) => v.verbProps.AdjustedMeleeDamageAmount(v, null)));
                }
                return(-1f);
            };
            Func <Def, float> rangedDamageGetter = delegate(Def d)
            {
                List <Verb>           concreteExampleVerbs4 = VerbUtility.GetConcreteExampleVerbs(d, stuff);
                Verb_LaunchProjectile verb_LaunchProjectile = concreteExampleVerbs4.OfType <Verb_LaunchProjectile>().FirstOrDefault();
                if (verb_LaunchProjectile != null && verb_LaunchProjectile.GetProjectile() != null)
                {
                    return((float)verb_LaunchProjectile.GetProjectile().projectile.GetDamageAmount(null));
                }
                return(-1f);
            };
            Func <Def, float> rangedWarmupGetter = delegate(Def d)
            {
                List <Verb> concreteExampleVerbs3 = VerbUtility.GetConcreteExampleVerbs(d, stuff);
                return(concreteExampleVerbs3.OfType <Verb_LaunchProjectile>().FirstOrDefault()?.verbProps.warmupTime ?? (-1f));
            };
            Func <Def, float> meleeCooldownGetter = delegate(Def d)
            {
                List <Verb> concreteExampleVerbs2 = VerbUtility.GetConcreteExampleVerbs(d, stuff);
                if (concreteExampleVerbs2.OfType <Verb_MeleeAttack>().Any())
                {
                    return(concreteExampleVerbs2.OfType <Verb_MeleeAttack>().AverageWeighted((Verb_MeleeAttack v) => v.verbProps.AdjustedMeleeSelectionWeight(v, null), (Verb_MeleeAttack v) => v.verbProps.AdjustedCooldown(v, null)));
                }
                return(-1f);
            };
            Func <Def, float> rangedCooldownGetter = delegate(Def d)
            {
                List <Verb> concreteExampleVerbs = VerbUtility.GetConcreteExampleVerbs(d, stuff);
                return(concreteExampleVerbs.OfType <Verb_LaunchProjectile>().FirstOrDefault()?.verbProps.defaultCooldownTime ?? (-1f));
            };
            Func <Def, float> meleeDpsGetter    = (Def d) => meleeDamageGetter(d) * 0.82f / meleeCooldownGetter(d);
            Func <Def, float> marketValueGetter = delegate(Def d)
            {
                ThingDef thingDef3 = d as ThingDef;
                if (thingDef3 != null)
                {
                    return(thingDef3.GetStatValueAbstract(StatDefOf.MarketValue, stuff));
                }
                HediffDef hediffDef = d as HediffDef;
                if (hediffDef != null)
                {
                    if (hediffDef.spawnThingOnRemoved == null)
                    {
                        return(0f);
                    }
                    return(hediffDef.spawnThingOnRemoved.GetStatValueAbstract(StatDefOf.MarketValue));
                }
                return(-1f);
            };
            IEnumerable <Def> enumerable = (from d in DefDatabase <ThingDef> .AllDefs
                                            where d.IsWeapon
                                            select d).Cast <Def>().Concat((from h in DefDatabase <HediffDef> .AllDefs
                                                                           where h.CompProps <HediffCompProperties_VerbGiver>() != null
                                                                           select h).Cast <Def>());

            if (doRaces)
            {
                enumerable = enumerable.Concat((from d in DefDatabase <ThingDef> .AllDefs
                                                where d.race != null
                                                select d).Cast <Def>());
            }
            enumerable = from h in enumerable
                         orderby meleeDpsGetter(h) descending
                         select h;

            DebugTables.MakeTablesDialog(enumerable, new TableDataGetter <Def>("defName", (Def d) => d.defName), new TableDataGetter <Def>("melee\ndamage\naverage", (Def d) => meleeDamageGetter(d).ToString("F2")), new TableDataGetter <Def>("melee\ncooldown\naverage", (Def d) => meleeCooldownGetter(d).ToString("F2")), new TableDataGetter <Def>("melee\nDPS", (Def d) => meleeDpsGetter(d).ToString("F2")), new TableDataGetter <Def>("ranged\ndamage", (Def d) => rangedDamageGetter(d).ToString()), new TableDataGetter <Def>("ranged\nwarmup", (Def d) => rangedWarmupGetter(d).ToString("F2")), new TableDataGetter <Def>("ranged\ncooldown", (Def d) => rangedCooldownGetter(d).ToString("F2")), new TableDataGetter <Def>("market value", (Def d) => marketValueGetter(d).ToStringMoney()), new TableDataGetter <Def>("work to make", delegate(Def d)
            {
                ThingDef thingDef2 = d as ThingDef;
                if (thingDef2 == null)
                {
                    return("-");
                }
                return(thingDef2.GetStatValueAbstract(StatDefOf.WorkToMake, stuff).ToString("F0"));
            }), new TableDataGetter <Def>((stuff == null) ? "CanMake" : (stuff.defName + " CanMake"), delegate(Def d)
            {
                if (stuff == null)
                {
                    return("n/a");
                }
                ThingDef thingDef = d as ThingDef;
                if (thingDef == null)
                {
                    return("-");
                }
                return(stuff.stuffProps.CanMake(thingDef).ToStringCheckBlank());
            }), new TableDataGetter <Def>("assumed\nmelee\nhit chance", (Def d) => 0.82f.ToStringPercent()));
        }
Пример #13
0
        public int GetDamageAmount_NewTmp(ThingDef weapon, ThingDef weaponStuff, StringBuilder explanation = null)
        {
            float weaponDamageMultiplier = weapon?.GetStatValueAbstract(StatDefOf.RangedWeapon_DamageMultiplier, weaponStuff) ?? 1f;

            return(GetDamageAmount(weaponDamageMultiplier, explanation));
        }
Пример #14
0
 private static float accLong(ThingDef d)
 {
     return(d.GetStatValueAbstract(StatDefOf.AccuracyLong));
 }
Пример #15
0
 private static float accMed(ThingDef d)
 {
     return(d.GetStatValueAbstract(StatDefOf.AccuracyMedium));
 }
Пример #16
0
 private static float accShort(ThingDef d)
 {
     return(d.GetStatValueAbstract(StatDefOf.AccuracyShort));
 }
Пример #17
0
 private static float accTouch(ThingDef d)
 {
     return(d.GetStatValueAbstract(StatDefOf.AccuracyTouch));
 }
Пример #18
0
 private static float cooldown(ThingDef d)
 {
     return(d.GetStatValueAbstract(StatDefOf.RangedWeapon_Cooldown));
 }