protected override bool CanApplyOn(Pawn pawn) { bool hasRequiredHediff = true; if (recipe.HasModExtension <DefModExtension_Recipe>()) { DefModExtension_Recipe ext = recipe.GetModExtension <DefModExtension_Recipe>(); if (ext.requiredHediff != null && !pawn.health.hediffSet.HasHediff(ext.requiredHediff)) { hasRequiredHediff = false; } } bool isArtillery = recipe.ingredients.FirstOrDefault((IngredientCount ic) => ic.FixedIngredient is ThingDef td && td.placeWorkers != null && td.placeWorkers.FirstOrDefault((Type t) => t == typeof(PlaceWorker_NotUnderRoof)) != null) != null; bool mortarResearchCompleted = DefDatabase <ResearchProjectDef> .AllDefs.FirstOrDefault((ResearchProjectDef rp) => rp == WTH_DefOf.WTH_TurretModule_Mortars && rp.IsFinished) != null; bool isTurretGun = !isArtillery; bool turretGunResearchCompleted = DefDatabase <ResearchProjectDef> .AllDefs.FirstOrDefault((ResearchProjectDef rp) => rp == WTH_DefOf.WTH_TurretModule_GunTurrets && rp.IsFinished) != null; if (isArtillery && !mortarResearchCompleted) { return(false); } if (isTurretGun && !turretGunResearchCompleted) { return(false); } return(pawn.IsHacked() && !pawn.health.hediffSet.HasHediff(recipe.addsHediff) && hasRequiredHediff); }
public override bool CanApplyOn(Pawn pawn, out string reason) { reason = ""; if (recipe.HasModExtension <DefModExtension_Recipe>()) { DefModExtension_Recipe ext = recipe.GetModExtension <DefModExtension_Recipe>(); if (ext.requiredHediff != null && !pawn.health.hediffSet.HasHediff(ext.requiredHediff)) { reason = "WTH_Reason_MissingHediff".Translate(ext.requiredHediff.label); return(false); } } bool isArtillery = recipe.ingredients.FirstOrDefault((IngredientCount ic) => ic.FixedIngredient is ThingDef td && td.placeWorkers != null && td.placeWorkers.FirstOrDefault((Type t) => t == typeof(PlaceWorker_NotUnderRoof)) != null) != null; bool mortarResearchCompleted = DefDatabase <ResearchProjectDef> .AllDefs.FirstOrDefault((ResearchProjectDef rp) => rp == WTH_DefOf.WTH_TurretModule_Mortars && rp.IsFinished) != null; bool isTurretGun = !isArtillery; bool turretGunResearchCompleted = DefDatabase <ResearchProjectDef> .AllDefs.FirstOrDefault((ResearchProjectDef rp) => rp == WTH_DefOf.WTH_TurretModule_GunTurrets && rp.IsFinished) != null; if (isArtillery && !mortarResearchCompleted) { reason = "WTH_Reason_MortarResearch".Translate(); return(false); } if (isTurretGun && !turretGunResearchCompleted) { reason = "WTH_Reason_TurretResearch".Translate(); return(false); } return(true); }
protected override bool CanApplyOn(Pawn pawn) { bool hasRequiredHediff = true; bool hasRequiredBodySize = true; if (recipe.HasModExtension <DefModExtension_Recipe>()) { DefModExtension_Recipe ext = recipe.GetModExtension <DefModExtension_Recipe>(); if (ext.requiredHediff != null && !pawn.health.hediffSet.HasHediff(ext.requiredHediff)) { hasRequiredHediff = false; } if (pawn.BodySize < ext.minBodySize) { hasRequiredBodySize = false; } } return(pawn.IsHacked() && !pawn.health.hediffSet.HasHediff(recipe.addsHediff) && hasRequiredHediff && hasRequiredBodySize); }
public override bool CanApplyOn(Pawn pawn, out string reason) { reason = ""; if (recipe.HasModExtension <DefModExtension_Recipe>()) { DefModExtension_Recipe ext = recipe.GetModExtension <DefModExtension_Recipe>(); if (ext.requiredHediff != null && !pawn.health.hediffSet.HasHediff(ext.requiredHediff)) { reason = "WTH_Reason_MissingHediff".Translate(ext.requiredHediff.label); return(false); } bool ignoreBodySize = recipe.addsHediff == WTH_DefOf.WTH_TurretModule && pawn.def.GetModExtension <DefModExtension_TurretModule>() is DefModExtension_TurretModule modExt && modExt.ignoreMinBodySize; if (!ignoreBodySize && pawn.BodySize < ext.minBodySize) { reason = "WTH_Reason_BodySize".Translate(ext.minBodySize); return(false); } } return(true); }