// Used to automatically re-arm turrets static void Postfix(WorkGiver_ReloadTurret __instance, ref Job __result, Pawn pawn, Thing t, bool forced) { if (__result == null) { if (t is Building_TurretGunCE turret) { if (WorldComp.HasStorages(turret.Map) && CombatExtendedUtil.HasAmmo(turret.CompAmmo.SelectedAmmo)) { var storage = GenClosest.ClosestThingReachable( turret.Position, turret.Map, ThingRequest.ForDef(WorldComp.WeaponStorageDef), Verse.AI.PathEndMode.ClosestTouch, TraverseParms.For(pawn, pawn.NormalMaxDanger(), TraverseMode.ByPawn, false), 100); if (storage != null) { // TODO - Add setting where ammo should be dropped //CombatExtendedUtil.TryDropAmmo(turret.CompAmmo.SelectedAmmo, turret.CompAmmo.Props.magazineSize, storage.Position, storage.Map); __result = new Job( DefDatabase <JobDef> .GetNamed("ReloadTurret", true), t, new StoredAmmo( Patch_WorkGiver_ReloadTurret_HasJobOnThing.WS, turret.CompAmmo.SelectedAmmo, turret.CompAmmo.Props.magazineSize, forced)); } } } } }
// used to manually re-arm turrets static void Postfix(WorkGiver_ReloadTurret __instance, ref bool __result, Pawn pawn, Thing t, bool forced) { Building_TurretGunCE turret = t as Building_TurretGunCE; if (__result == false && turret != null && !turret.def.hasInteractionCell) { if (WorldComp.HasStorages(turret.Map) && CombatExtendedUtil.HasAmmo(turret.CompAmmo.SelectedAmmo)) { WS = GenClosest.ClosestThingReachable(turret.Position, turret.Map, ThingRequest.ForDef(WorldComp.WeaponStorageDef), Verse.AI.PathEndMode.ClosestTouch, TraverseParms.For(pawn, pawn.NormalMaxDanger(), TraverseMode.ByPawn, false), 100) as Building; __result = WS != null; } } }
static bool Prefix(WorkGiver_ReloadTurret __instance, ref Job __result, Pawn pawn, Thing t, bool forced) { if (Patch_WorkGiver_ReloadTurret_HasJobOnThing.WS != null) { Building_TurretGunCE turret = t as Building_TurretGunCE; __result = new Job( DefDatabase <JobDef> .GetNamed("ReloadTurret", true), t, new StoredAmmo( Patch_WorkGiver_ReloadTurret_HasJobOnThing.WS, turret.CompAmmo.SelectedAmmo, turret.CompAmmo.Props.magazineSize, forced)); Patch_WorkGiver_ReloadTurret_HasJobOnThing.WS = null; return(false); } return(true); }