// Token: 0x0600048F RID: 1167 RVA: 0x0002F174 File Offset: 0x0002D574 protected override Job TryGiveJob(Pawn pawn) { Map map = pawn.Map; if (!pawn.HostileTo(Faction.OfPlayer)) { return(null); } bool flag = pawn.HostileTo(Faction.OfPlayer); CellRect cellRect = CellRect.CenteredOn(pawn.Position, 5); List <Building> list = map.listerBuildings.allBuildingsColonist.FindAll(x => x.TryGetComp <CompPowerBattery>() != null); List <Building> listPlants = list.FindAll(x => x.TryGetComp <CompPowerPlant>() != null); List <Building> listBatteries = list.FindAll(x => x.TryGetComp <CompPowerBattery>() != null); List <Building> listConduit = list.FindAll(x => x.TryGetComp <CompPowerTransmitter>() != null); for (int i = 0; i < 35; i++) { IntVec3 randomCell = cellRect.RandomCell; if (randomCell.InBounds(pawn.Map)) { Building edifice = randomCell.GetEdifice(pawn.Map); if (flag) { if (edifice != null && TrashUtility.ShouldTrashBuilding(pawn, edifice, false) && GenSight.LineOfSight(pawn.Position, randomCell, pawn.Map, false, null, 0, 0) && (edifice.TryGetComp <CompPowerPlant>() != null || edifice.TryGetComp <CompPowerBattery>() != null || edifice.TryGetComp <CompPowerTransmitter>() != null)) { if (DebugViewSettings.drawDestSearch && Find.CurrentMap == pawn.Map) { Find.CurrentMap.debugDrawer.FlashCell(randomCell, 1f, "trash bld", 50); } Job job; Building building = edifice as Building; bool flagb = building != null && building.def.building.isInert; if (flagb) { return(null); } // job = TrashUtility.TrashJob(pawn, building, true); job = new Job(RimWorld.JobDefOf.AttackMelee, edifice); if (job != null) { return(job); } } } if (DebugViewSettings.drawDestSearch && Find.CurrentMap == pawn.Map) { Find.CurrentMap.debugDrawer.FlashCell(randomCell, 0f, "trash no", 50); } } } return(null); }
protected override Job TryGiveJob(Pawn pawn) { //Log.Message(pawn + " - " + pawn.mindState.duty); if (!pawn.HostileTo(Faction.OfPlayer)) { //Log.Message("0 - " + pawn + " - null", true); return(null); } if (RCellFinder.TryFindBestExitSpot(pawn, out IntVec3 spot)) { //Log.Message(pawn + " found spot: " + spot, true); if (TryFindBestItemToSteal(pawn.Position, pawn.Map, 50f, out Thing item, pawn)) // && !GenAI.InDangerousCombat(pawn)) { Job job = JobMaker.MakeJob(JobDefOf.Steal); job.targetA = item; job.targetB = spot; job.canBashDoors = true; job.canBashFences = true; job.count = Mathf.Min(item.stackCount, (int)(pawn.GetStatValue(StatDefOf.CarryingCapacity) / item.def.VolumePerUnit)); //Log.Message("3 - " + pawn + " - " + job, true); return(job); } //Log.Message(pawn + " cant find item to steal", true); } bool flag = pawn.natives.IgniteVerb != null && pawn.natives.IgniteVerb.IsStillUsableBy(pawn) && pawn.HostileTo(Faction.OfPlayer); CellRect cellRect = CellRect.CenteredOn(pawn.Position, 5); for (int i = 0; i < 35; i++) { IntVec3 randomCell = cellRect.RandomCell; if (!randomCell.InBounds(pawn.Map)) { continue; } Building edifice = randomCell.GetEdifice(pawn.Map); if (edifice != null && TrashUtility.ShouldTrashBuilding(pawn, edifice) && GenSight.LineOfSight(pawn.Position, randomCell, pawn.Map)) { Job job = TrashJob(pawn, edifice); if (job != null) { //Log.Message("1 - " + pawn + " - " + job, true); return(job); } } if (flag) { Plant plant = randomCell.GetPlant(pawn.Map); if (plant != null && TrashUtility.ShouldTrashPlant(pawn, plant) && GenSight.LineOfSight(pawn.Position, randomCell, pawn.Map)) { Job job2 = TrashJob(pawn, plant); if (job2 != null) { //Log.Message("2 - " + pawn + " - " + job2, true); return(job2); } } } } List <Building> allBuildingsColonist = pawn.Map.listerBuildings.allBuildingsColonist; if (allBuildingsColonist.Count == 0) { //Log.Message("4 - " + pawn + " - null", true); return(null); } foreach (var building in allBuildingsColonist.OrderBy(x => IntVec3Utility.DistanceTo(x.Position, pawn.Position)).Take(10).InRandomOrder()) { if (TrashUtility.ShouldTrashBuilding(pawn, building, true) && pawn.CanReach(building, PathEndMode.Touch, Danger.None)) { Job job = TrashJob(pawn, building, true); if (job != null) { //Log.Message("5 - " + pawn + " - " + job, true); return(job); } } } if (RCellFinder.TryFindBestExitSpot(pawn, out IntVec3 spot2)) { //Log.Message(pawn + " found spot: " + spot2, true); if (TryFindBestItemToSteal(pawn.Position, pawn.Map, 100f, out Thing item, pawn, danger: Danger.None)) // && !GenAI.InDangerousCombat(pawn)) { Job job = JobMaker.MakeJob(JobDefOf.Steal); job.targetA = item; job.targetB = spot2; job.canBashDoors = true; job.canBashFences = true; job.count = Mathf.Min(item.stackCount, (int)(pawn.GetStatValue(StatDefOf.CarryingCapacity) / item.def.VolumePerUnit)); //Log.Message("6 - " + pawn + " - " + job, true); return(job); } //Log.Message(pawn + " cant find item to steal", true); } //Log.Message("7 - " + pawn + " - null", true); return(null); }