Ejemplo n.º 1
0
 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);
        }
Ejemplo n.º 3
0
        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);
         }
     }
 }
Ejemplo n.º 5
0
        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);
             }
         }
     }
 }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        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);
        }