Example #1
0
        // 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));
                        }
                    }
                }
            }
        }
Example #2
0
        // 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;
                }
            }
        }
Example #3
0
 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);
 }