diff --git a/Defs/Stats/Stats_NightVision.xml b/Defs/Stats/Stats_NightVision.xml
index 00fb193594..64675dba1d 100644
--- a/Defs/Stats/Stats_NightVision.xml
+++ b/Defs/Stats/Stats_NightVision.xml
@@ -66,7 +66,7 @@
NightVisionEfficiency_Weapon
-
+
The effect of a weapon's optics on the wielder's ability to overcome the effects of darkness for the purpose of firing accurately.
Weapon
@@ -76,7 +76,7 @@
NightVisionEfficiency_Apparel
-
+
The effect of apparel items on a creature's ability to overcome the effects of darkness for the purpose of making ranged attacks.
Apparel
diff --git a/Defs/Stats/Stats_Weapons_Ranged.xml b/Defs/Stats/Stats_Weapons_Ranged.xml
index 9379e7e4fe..959602c357 100644
--- a/Defs/Stats/Stats_Weapons_Ranged.xml
+++ b/Defs/Stats/Stats_Weapons_Ranged.xml
@@ -152,6 +152,7 @@
+ True
@@ -165,6 +166,7 @@
+ True
diff --git a/Languages/English/Keyed/Stats.xml b/Languages/English/Keyed/Stats.xml
index 0fe035aee1..f609818007 100644
--- a/Languages/English/Keyed/Stats.xml
+++ b/Languages/English/Keyed/Stats.xml
@@ -9,5 +9,7 @@
Additional material toughness multiplier:
Wielder skill effect:
Long range radio
+ Picks the lowest value of available
+ Picks the highest value of available
\ No newline at end of file
diff --git a/Source/CombatExtended/CombatExtended/StatParts/Base/StatPart_StatSelect.cs b/Source/CombatExtended/CombatExtended/StatParts/Base/StatPart_StatSelect.cs
index 4d3f9c60a7..d378bcf61c 100644
--- a/Source/CombatExtended/CombatExtended/StatParts/Base/StatPart_StatSelect.cs
+++ b/Source/CombatExtended/CombatExtended/StatParts/Base/StatPart_StatSelect.cs
@@ -103,9 +103,40 @@ public override void TransformValue(StatRequest req, ref float result)
public override string ExplanationPart(StatRequest req)
{
- if (req.HasThing && req.Pawn != null)
+ if (req.HasThing && req.Thing is Pawn pawn)
{
- return "";
+ string result = "";
+ if (apparelStat != null)
+ {
+ float value = 0;
+ ThingOwner wornApparel = pawn.apparel.wornApparel;
+ if (sumApparelsStat)
+ {
+ for (int i = 0; i < wornApparel.Count; i++)
+ {
+ value += GetEquipmentStat(wornApparel[i], apparelStat);
+ }
+ }
+ else
+ {
+ for (int i = 0; i < wornApparel.Count; i++)
+ {
+ value = Select(value, GetEquipmentStat(wornApparel[i], apparelStat));
+ }
+ }
+ result += apparelStat.LabelCap + ": " + value.ToStringPercent() + "\n";
+ }
+ if (weaponStat != null)
+ {
+ result += weaponStat.LabelCap + ": " + (pawn.equipment.Primary != null
+ ? GetEquipmentStat(pawn.equipment.Primary, weaponStat).ToStringPercent()
+ : "0%") + "\n";
+ }
+ if (implantStat != null)
+ {
+ result += implantStat.LabelCap + ": " + pawn.GetStatValue(implantStat).ToStringPercent() + "\n";
+ }
+ return result;
}
return null;
}
diff --git a/Source/CombatExtended/CombatExtended/StatParts/StatPart_Bipod.cs b/Source/CombatExtended/CombatExtended/StatParts/StatPart_Bipod.cs
index bc09134cc8..43cea93ecc 100644
--- a/Source/CombatExtended/CombatExtended/StatParts/StatPart_Bipod.cs
+++ b/Source/CombatExtended/CombatExtended/StatParts/StatPart_Bipod.cs
@@ -17,42 +17,57 @@ public class Bipod_Recoil_StatPart : StatPart
{
public override void TransformValue(StatRequest req, ref float val)
{
- var varA = req.Thing.TryGetComp();
if (Controller.settings.BipodMechanics)
{
- if (varA != null)
+ if (req.HasThing)
{
- if (varA.IsSetUpRn == true)
+ var varA = req.Thing.TryGetComp();
+ if (varA != null)
{
- val *= varA.Props.recoilMulton;
- }
- else
- {
- val *= varA.Props.recoilMultoff;
+ if (varA.IsSetUpRn)
+ {
+ val *= varA.Props.recoilMulton;
+ }
+ else
+ {
+ val *= varA.Props.recoilMultoff;
+ }
}
}
+ else if (req.Def is ThingDef reqDef)
+ {
+ var bipodProps = reqDef.GetCompProperties();
+ val *= bipodProps?.recoilMulton ?? 1f;
+ }
}
-
}
public override string ExplanationPart(StatRequest req)
{
- var varA = req.Thing.TryGetComp();
- if (varA != null)
+ if (Controller.settings.BipodMechanics)
{
- if (varA.IsSetUpRn == true)
+ if (req.HasThing)
{
- return "Bipod IS set up -" + " x".Colorize(Color.green) + varA.Props.recoilMulton.ToString().Colorize(Color.green);
+ var varA = req.Thing.TryGetComp();
+ if (varA != null)
+ {
+ if (varA.IsSetUpRn)
+ {
+ return "Bipod IS set up -" + " x".Colorize(ColorLibrary.Green) + varA.Props.recoilMulton.ToString().Colorize(ColorLibrary.Green);
+ }
+ else
+ {
+ return "Bipod is NOT set up -" + " x".Colorize(ColorLibrary.LogError) + varA.Props.recoilMultoff.ToString().Colorize(ColorLibrary.LogError);
+ }
+ }
}
- else
+ else if (req.Def is ThingDef reqDef)
{
- return "Bipod is NOT set up -" + " x".Colorize(Color.red) + varA.Props.recoilMultoff.ToString().Colorize(Color.red);
+ var bipodProps = reqDef.GetCompProperties();
+ if (bipodProps != null) { return "Bipod IS set up -" + " x".Colorize(ColorLibrary.Green) + bipodProps.recoilMulton.ToString().Colorize(ColorLibrary.Green); }
}
}
- else
- {
- return "";
- }
+ return null;
}
}
@@ -61,42 +76,58 @@ public class Bipod_Sway_StatPart : StatPart
{
public override void TransformValue(StatRequest req, ref float val)
{
- var varA = req.Thing.TryGetComp();
if (Controller.settings.BipodMechanics)
{
- if (varA != null)
+ if (req.HasThing)
{
- if (varA.IsSetUpRn == true)
+ var varA = req.Thing.TryGetComp();
+ if (varA != null)
{
- val *= varA.Props.swayMult;
- }
- else
- {
- val *= varA.Props.swayPenalty;
+ if (varA.IsSetUpRn)
+ {
+ val *= varA.Props.swayMult;
+ }
+ else
+ {
+ val *= varA.Props.swayPenalty;
+ }
}
}
+ else if (req.Def is ThingDef reqDef)
+ {
+ var bipodProps = reqDef.GetCompProperties();
+ val *= bipodProps?.swayMult ?? 1f;
+ }
}
}
public override string ExplanationPart(StatRequest req)
{
- var varA = req.Thing.TryGetComp();
- if (varA != null)
+ if (Controller.settings.BipodMechanics)
{
- if (varA.IsSetUpRn == true)
+ if (req.HasThing)
{
- return "Bipod IS set up -" + " x".Colorize(Color.green) + varA.Props.swayMult.ToString().Colorize(Color.green);
+ var varA = req.Thing.TryGetComp();
+ if (varA != null)
+ {
+ if (varA.IsSetUpRn)
+ {
+ return "Bipod IS set up -" + " x".Colorize(ColorLibrary.Green) + varA.Props.swayMult.ToString().Colorize(ColorLibrary.Green);
+ }
+ else
+ {
+ return "Bipod is NOT set up -" + " x".Colorize(ColorLibrary.LogError) + varA.Props.swayPenalty.ToString().Colorize(ColorLibrary.LogError);
+ }
+ }
}
- else
+ else if (req.Def is ThingDef reqDef)
{
- return "Bipod is NOT set up - " + "x".Colorize(Color.red) + varA.Props.swayPenalty.ToString().Colorize(Color.red);
+ var bipodProps = reqDef.GetCompProperties();
+ if (bipodProps != null) { return "Bipod IS set up -" + " x".Colorize(ColorLibrary.Green) + bipodProps.swayPenalty.ToString().Colorize(ColorLibrary.Green); }
}
}
- else
- {
- return "";
- }
+ return null;
}
}
}
diff --git a/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMaxima.cs b/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMaxima.cs
index a23789636f..7c2aaf45cc 100644
--- a/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMaxima.cs
+++ b/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMaxima.cs
@@ -15,5 +15,10 @@ protected override float Select(float first, float second)
{
return Mathf.Max(first, second);
}
+
+ public override string ExplanationPart(StatRequest req)
+ {
+ return "CE_StatPart_MaximaExplanation".Translate() + ": \n\n" + base.ExplanationPart(req);
+ }
}
}
diff --git a/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMinima.cs b/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMinima.cs
index b1db060246..bed60969f7 100644
--- a/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMinima.cs
+++ b/Source/CombatExtended/CombatExtended/StatParts/StatPart_StatMinima.cs
@@ -2,6 +2,7 @@
using System.Runtime.CompilerServices;
using RimWorld;
using UnityEngine;
+using Verse;
namespace CombatExtended
{
@@ -12,5 +13,10 @@ protected override float Select(float first, float second)
{
return Mathf.Min(first, second);
}
+
+ public override string ExplanationPart(StatRequest req)
+ {
+ return "CE_StatPart_MinimaExplanation".Translate() + ": \n\n" + base.ExplanationPart(req);
+ }
}
}
diff --git a/Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_BipodDisplay.cs b/Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_BipodDisplay.cs
index 2e77bf605f..06ce191b1e 100644
--- a/Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_BipodDisplay.cs
+++ b/Source/CombatExtended/CombatExtended/StatWorkers/StatWorker_BipodDisplay.cs
@@ -89,7 +89,7 @@ public override string GetExplanationFinalizePart(StatRequest req, ToStringNumbe
}
- result += "\n" + "CE_BipodStatWhenSetUp".Translate().Colorize(Color.green) + "\n";
+ result += "\n" + "CE_BipodStatWhenSetUp".Translate().Colorize(ColorLibrary.Green) + "\n";
result += CE_StatDefOf.Recoil.label + ": " + Math.Round((VerbPropsCE.recoilAmount * BipodCompProps.recoilMulton), 2);
result += "\n";
@@ -103,7 +103,7 @@ public override string GetExplanationFinalizePart(StatRequest req, ToStringNumbe
result += "CE_BipodStatWarmUp".Translate() + ": " + (BipodCompProps.warmupMult * VerbPropsCE.warmupTime);
result += "\n" + "\n";
- result += "CE_BipodStatWhenNotSetUp".Translate().Colorize(Color.red) + "\n";
+ result += "CE_BipodStatWhenNotSetUp".Translate().Colorize(ColorLibrary.LogError) + "\n";
result += CE_StatDefOf.Recoil.label + ": " + Math.Round((VerbPropsCE.recoilAmount * BipodCompProps.recoilMultoff), 2);
@@ -132,13 +132,13 @@ public override string GetExplanationFinalizePart(StatRequest req, ToStringNumbe
return base.GetExplanationFinalizePart(req, numberSense, finalVal);
}
- string result = "CE_BipodSetupTime".Translate() + BipodCompProps.ticksToSetUp + " ticks (" + (BipodCompProps.ticksToSetUp / 60) + "s)" + "\n" + "Stats when set up: ".Colorize(Color.green) + "\n";
+ string result = "CE_BipodSetupTime".Translate() + BipodCompProps.ticksToSetUp + " ticks (" + (BipodCompProps.ticksToSetUp / 60) + "s)" + "\n" + "Stats when set up: ".Colorize(ColorLibrary.Green) + "\n";
- result += CE_StatDefOf.Recoil.label + ": " + (VerbPropsCE.recoilAmount * BipodCompProps.recoilMulton);
+ result += CE_StatDefOf.Recoil.label + ": " + Math.Round((VerbPropsCE.recoilAmount * BipodCompProps.recoilMulton), 2);
result += "\n";
- result += CE_StatDefOf.SwayFactor.label + ": " + (((ThingDef)(req.Def)).statBases.Find(x => x.stat == CE_StatDefOf.SwayFactor).value * BipodCompProps.swayPenalty);
+ result += CE_StatDefOf.SwayFactor.label + ": " + Math.Round((((ThingDef)(req.Def)).statBases.Find(x => x.stat == CE_StatDefOf.SwayFactor).value * BipodCompProps.swayMult), 2);
result += "\n";
@@ -150,13 +150,13 @@ public override string GetExplanationFinalizePart(StatRequest req, ToStringNumbe
result += "\n" + "\n";
- result += "CE_BipodStatWhenNotSetUp".Translate().Colorize(Color.red) + "\n";
+ result += "CE_BipodStatWhenNotSetUp".Translate().Colorize(ColorLibrary.LogError) + "\n";
- result += CE_StatDefOf.Recoil.label + ": " + (VerbPropsCE.recoilAmount * BipodCompProps.recoilMultoff);
+ result += CE_StatDefOf.Recoil.label + ": " + Math.Round((VerbPropsCE.recoilAmount * BipodCompProps.recoilMultoff), 2);
result += "\n";
- result += CE_StatDefOf.SwayFactor.label + ": " + (((ThingDef)(req.Def)).statBases.Find(x => x.stat == CE_StatDefOf.SwayFactor).value * BipodCompProps.swayPenalty);
+ result += CE_StatDefOf.SwayFactor.label + ": " + Math.Round((((ThingDef)(req.Def)).statBases.Find(x => x.stat == CE_StatDefOf.SwayFactor).value * BipodCompProps.swayPenalty), 2);
result += "\n";