public static bool IsSingleAllowed(ThingDef td) { ResearchProjectDef rpd; if (!thingDic.TryGetValue(td, out rpd)) { Log.Error("IsSingleAllowed tried to get td not in dic"); } return(td.BaseMarketValue >= ShardMaker.RequiredValueForOneShard(rpd) || td.BaseMarketValue >= ShardMaker.forceSingleThreshold); }
public static float GetShardRatio(ResearchProjectDef shardProj, ResearchProjectDef appliedProj) { if (!Base.researchDic.ContainsKey(appliedProj)) { return(1f); } float shardValue = ShardMaker.RequiredValueForOneShard(shardProj); float appliedValue = ShardMaker.RequiredValueForOneShard(appliedProj); return(shardValue / appliedValue); }
public static bool IsStackAllowed(ThingDef td, int size) { if (td.stackLimit < size) { return(false); } ResearchProjectDef rpd; if (!thingDic.TryGetValue(td, out rpd)) { Log.Error("IsSingleAllowed tried to get td not in dic"); } float shardValue = ShardMaker.RequiredValueForOneShard(rpd); return (((td.BaseMarketValue < shardValue) && (td.BaseMarketValue < ShardMaker.forceSingleThreshold) && (td.BaseMarketValue * size >= shardValue) ) || (td.BaseMarketValue * size < shardValue * 100)); // 1 item not allowed, but stack is OR stack is under 100 shards }
public override string GetExplanationUnfinalized(StatRequest req, ToStringNumberSense numberSense) { if (!req.HasThing || !Base.thingDic.ContainsKey(req.Thing.def)) { return(""); } ResearchProjectDef rpd = Base.thingDic[req.Thing.def]; float baseVal = Mathf.RoundToInt(ShardMaker.GetAverageValue(req.Thing.def) / ShardMaker.RequiredValueForOneShard(rpd)); string s = "Base item yield: " + baseVal; if (TechprintingSettings.shardYieldRatio != 1f) { s += "\nShard yield multiplier (from settings): " + TechprintingSettings.shardYieldRatio.ToString("p1"); } QualityCategory q; if (req.Thing.TryGetQuality(out q)) { float rawValue = (float)ShardMaker.CalcNumShardsForRaw(req.Thing, rpd); float multiplier = rawValue / baseVal; s += "\nQuality and condition multiplier: " + multiplier.ToString("p1"); s += "\nAdjusted value: " + rawValue; if (rawValue > 100) { int maxShards; if (q == QualityCategory.Legendary || q == QualityCategory.Masterwork) { maxShards = TechprintingSettings.printAllItems ? Mathf.RoundToInt(Mathf.Max(rpd.techprintCount, 100)) : Mathf.RoundToInt(rpd.techprintCount); } else { maxShards = 100; } s += "\n\nMax shards for quality: " + maxShards; } } return(s); }