public override IEnumerable <Thing> PotentialWorkThingsGlobal(Pawn pawn) { foreach (Designation des in pawn.Map.designationManager.SpawnedDesignationsOfDef(DesignationDefOf.Mine)) { bool mayBeAccessible = false; for (int j = 0; j < 8; j++) { IntVec3 c = des.target.Cell + GenAdj.AdjacentCells[j]; if (c.InBounds(pawn.Map) && c.Walkable(pawn.Map)) { mayBeAccessible = true; break; } } if (mayBeAccessible) { Mineable i = des.target.Cell.GetFirstMineable(pawn.Map); if (i != null) { yield return(i); } } } yield break; }
public override AcceptanceReport CanDesignateCell(IntVec3 c) { if (!c.InBounds(base.Map)) { return(false); } if (base.Map.designationManager.DesignationAt(c, this.Designation) != null) { return(AcceptanceReport.WasRejected); } if (c.Fogged(base.Map)) { return(true); } Mineable firstMineable = c.GetFirstMineable(base.Map); if (firstMineable == null) { return("MessageMustDesignateMineable".Translate()); } AcceptanceReport result = this.CanDesignateThing(firstMineable); if (!result.Accepted) { return(result); } return(AcceptanceReport.WasAccepted); }
public override IEnumerable <Thing> PotentialWorkThingsGlobal(Pawn pawn) { foreach (Designation item in pawn.Map.designationManager.SpawnedDesignationsOfDef(DesignationDefOf.Mine)) { bool mayBeAccessible = false; for (int j = 0; j < 8; j++) { IntVec3 c = item.target.Cell + GenAdj.AdjacentCells[j]; if (c.InBounds(pawn.Map) && c.Walkable(pawn.Map)) { mayBeAccessible = true; break; } } if (mayBeAccessible) { Mineable i = item.target.Cell.GetFirstMineable(pawn.Map); if (i != null) { yield return((Thing)i); /*Error: Unable to find new state assignment for yield return*/; } } } yield break; IL_0180: /*Error near IL_0181: Unexpected return in MoveNext()*/; }
public override void DesignateSingleCell(IntVec3 loc) { base.Map.designationManager.AddDesignation(new Designation(loc, this.Designation)); base.Map.designationManager.TryRemoveDesignation(loc, DesignationDefOf.SmoothWall); if (DebugSettings.godMode) { Mineable firstMineable = loc.GetFirstMineable(base.Map); if (firstMineable != null) { firstMineable.DestroyMined(null); } } }
public override AcceptanceReport CanDesignateCell(IntVec3 c) { AcceptanceReport result; if (!c.InBounds(base.Map)) { result = false; } else if (base.Map.designationManager.DesignationAt(c, this.Designation) != null) { result = AcceptanceReport.WasRejected; } else if (c.Fogged(base.Map)) { result = true; } else { Mineable firstMineable = c.GetFirstMineable(base.Map); if (firstMineable == null) { result = "MessageMustDesignateMineable".Translate(); } else { AcceptanceReport acceptanceReport = this.CanDesignateThing(firstMineable); if (!acceptanceReport.Accepted) { result = acceptanceReport; } else { result = AcceptanceReport.WasAccepted; } } } return(result); }
public override IEnumerable <Thing> PotentialWorkThingsGlobal(Pawn pawn) { foreach (Designation item in pawn.Map.designationManager.SpawnedDesignationsOfDef(DesignationDefOf.Mine)) { bool flag = false; for (int i = 0; i < 8; i++) { IntVec3 c = item.target.Cell + GenAdj.AdjacentCells[i]; if (c.InBounds(pawn.Map) && c.Walkable(pawn.Map)) { flag = true; break; } } if (flag) { Mineable firstMineable = item.target.Cell.GetFirstMineable(pawn.Map); if (firstMineable != null) { yield return(firstMineable); } } } }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOnCellMissingDesignation(TargetIndex.A, DesignationDefOf.Mine); yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch)); Toil mine = new Toil(); mine.tickAction = delegate { Pawn actor = mine.actor; Thing mineTarget = this.$this.MineTarget; if (this.$this.ticksToPickHit < -100) { this.$this.ResetTicksToPickHit(); } if (actor.skills != null) { actor.skills.Learn(SkillDefOf.Mining, 0.11f, false); } this.$this.ticksToPickHit--; if (this.$this.ticksToPickHit <= 0) { IntVec3 position = mineTarget.Position; if (this.$this.effecter == null) { this.$this.effecter = EffecterDefOf.Mine.Spawn(); } this.$this.effecter.Trigger(actor, mineTarget); int num = 80; Mineable mineable = mineTarget as Mineable; if (mineable == null || mineTarget.HitPoints > num) { DamageDef mining = DamageDefOf.Mining; int amount = num; Pawn actor2 = mine.actor; DamageInfo dinfo = new DamageInfo(mining, amount, -1f, actor2, null, null, DamageInfo.SourceCategory.ThingOrUnknown); mineTarget.TakeDamage(dinfo); } else { mineable.Notify_TookMiningDamage(mineTarget.HitPoints, mine.actor); mineable.HitPoints = 0; mineable.DestroyMined(actor); } if (mineTarget.Destroyed) { actor.Map.mineStrikeManager.CheckStruckOre(position, mineTarget.def, actor); actor.records.Increment(RecordDefOf.CellsMined); if (this.$this.pawn.Faction != Faction.OfPlayer) { List <Thing> thingList = position.GetThingList(this.$this.Map); for (int i = 0; i < thingList.Count; i++) { thingList[i].SetForbidden(true, false); } } if (this.$this.pawn.Faction == Faction.OfPlayer && MineStrikeManager.MineableIsVeryValuable(mineTarget.def)) { TaleRecorder.RecordTale(TaleDefOf.MinedValuable, new object[] { this.$this.pawn, mineTarget.def.building.mineableThing }); } if (this.$this.pawn.Faction == Faction.OfPlayer && MineStrikeManager.MineableIsValuable(mineTarget.def) && !this.$this.pawn.Map.IsPlayerHome) { TaleRecorder.RecordTale(TaleDefOf.CaravanRemoteMining, new object[] { this.$this.pawn, mineTarget.def.building.mineableThing }); } this.$this.ReadyForNextToil(); return; } this.$this.ResetTicksToPickHit(); } }; mine.defaultCompleteMode = ToilCompleteMode.Never; mine.WithProgressBar(TargetIndex.A, () => 1f - (float)this.$this.MineTarget.HitPoints / (float)this.$this.MineTarget.MaxHitPoints, false, -0.5f); mine.FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); yield return(mine); }
protected override IEnumerable <Toil> MakeNewToils() { this.FailOnDespawnedNullOrForbidden(TargetIndex.A); this.FailOnCellMissingDesignation(TargetIndex.A, DesignationDefOf.Mine); yield return(Toils_Goto.GotoThing(TargetIndex.A, PathEndMode.Touch)); Toil mine = new Toil(); mine.tickAction = delegate { Pawn actor = mine.actor; Thing mineTarget = MineTarget; if (ticksToPickHit < -100) { ResetTicksToPickHit(); } if (actor.skills != null && (mineTarget.Faction != actor.Faction || actor.Faction == null)) { actor.skills.Learn(SkillDefOf.Mining, 0.07f); } ticksToPickHit--; if (ticksToPickHit <= 0) { IntVec3 position = mineTarget.Position; if (effecter == null) { effecter = EffecterDefOf.Mine.Spawn(); } effecter.Trigger(actor, mineTarget); int num = (mineTarget.def.building.isNaturalRock ? 80 : 40); Mineable mineable = mineTarget as Mineable; if (mineable == null || mineTarget.HitPoints > num) { DamageInfo dinfo = new DamageInfo(DamageDefOf.Mining, num, 0f, -1f, mine.actor); mineTarget.TakeDamage(dinfo); } else { mineable.Notify_TookMiningDamage(mineTarget.HitPoints, mine.actor); mineable.HitPoints = 0; mineable.DestroyMined(actor); } if (mineTarget.Destroyed) { actor.Map.mineStrikeManager.CheckStruckOre(position, mineTarget.def, actor); actor.records.Increment(RecordDefOf.CellsMined); if (pawn.Faction != Faction.OfPlayer) { List <Thing> thingList = position.GetThingList(base.Map); for (int i = 0; i < thingList.Count; i++) { thingList[i].SetForbidden(value: true, warnOnFail: false); } } if (pawn.Faction == Faction.OfPlayer && MineStrikeManager.MineableIsVeryValuable(mineTarget.def)) { TaleRecorder.RecordTale(TaleDefOf.MinedValuable, pawn, mineTarget.def.building.mineableThing); } if (pawn.Faction == Faction.OfPlayer && MineStrikeManager.MineableIsValuable(mineTarget.def) && !pawn.Map.IsPlayerHome) { TaleRecorder.RecordTale(TaleDefOf.CaravanRemoteMining, pawn, mineTarget.def.building.mineableThing); } ReadyForNextToil(); } else { ResetTicksToPickHit(); } } }; mine.defaultCompleteMode = ToilCompleteMode.Never; mine.WithProgressBar(TargetIndex.A, () => 1f - (float)MineTarget.HitPoints / (float)MineTarget.MaxHitPoints); mine.FailOnCannotTouch(TargetIndex.A, PathEndMode.Touch); mine.activeSkill = () => SkillDefOf.Mining; yield return(mine); }