예제 #1
0
 static void Postfix(JobDriver_PlantHarvest __instance, Toil __result)
 {
     __result.initAction = delegate
     {
         Thing thing = __result.actor.jobs.curJob.GetTarget(TargetIndex.A).Thing;
         Map   map   = __result.actor.Map;
         map.designationManager.RemoveAllDesignationsOn(thing, false);
         if (!tw_YAAM.ConvertSoilAfterHarvest)
         {
             return;
         }
         IntVec3    pos        = thing.Position;
         TerrainDef terrainDef = map.terrainGrid.TerrainAt(pos);
         if (!terrainDef.defName.StartsWith("twSoil"))
         {
             return;
         }
         map.terrainGrid.SetTerrain(__result.actor.jobs.curJob.targetA.Cell, RimWorld.TerrainDefOf.Soil);
         if (map.terrainGrid.TerrainAt(pos).defName != RimWorld.TerrainDefOf.Soil.defName)
         {
             Verse.Log.Warning("tw_YAMM.ConvertSoilAfterHarvest failed at " + pos.ToString());
         }
         List <Zone> zonesList = map.zoneManager.AllZones;
         for (int j = 0; j < zonesList.Count; j++)
         {
             Zone_Growing growingZone = zonesList[j] as Zone_Growing;
             if (growingZone == null)
             {
                 continue;
             }
             if (growingZone.cells.Count == 0)
             {
                 continue;
             }
             if (!growingZone.Cells.Contains(pos))
             {
                 continue;
             }
             if (tw_YAAM.WorldObject.GrowingZonesPlaceBlueprint.Contains(growingZone.label))
             {
                 Blueprint_Build blueprint_Build = GenConstruct.PlaceBlueprintForBuild(terrainDef, pos, map, Rot4.North, Faction.OfPlayer, null);
                 if (blueprint_Build == null)
                 {
                     Verse.Log.Warning("tw_YAMM.PlaceBlueprint failed for " + terrainDef.defName + " in " + growingZone.label);
                 }
                 return;
             }
         }
     };
 }
예제 #2
0
        private static void Postfix(ref JobDriver_PlantHarvest __instance, ref Toil __result)
        {
            Toil toil = __result;

            toil.initAction += () =>
            {
                IntVec3 c = toil.actor.jobs.curJob.GetTarget(TargetIndex.A).Cell;
                if (toil.actor.Map.terrainGrid.TerrainAt(c).GetModExtension <TerrainExtension>() != null &&
                    toil.actor.Map.terrainGrid.TerrainAt(c).GetModExtension <TerrainExtension>().tilledFrom != null)
                {
                    TerrainDef terrainTo = toil.actor.Map.terrainGrid.TerrainAt(c).GetModExtension <TerrainExtension>().tilledFrom;
                    toil.actor.Map.terrainGrid.SetTerrain(c, terrainTo);
                }
            };
        }
        // Token: 0x06000064 RID: 100 RVA: 0x000049AC File Offset: 0x00002BAC
        private static void Postfix(ref Toil __result, ref JobDriver_PlantHarvest __instance)
        {
            var unused = __instance.pawn.Map;
            var actor  = __instance.pawn;

            __result.initAction = (Action)Delegate.Combine(__result.initAction, new Action(delegate
            {
                var plant = (Plant)actor.jobs.curJob.GetTarget(TargetIndex.A).Thing;
                AYPlantUtility.AddYield(actor, plant);
                if (plant.def.defName == "Plant_AYGinkgoBiloba")
                {
                    var skillRatio = 0.5f;
                    if (actor.skills != null)
                    {
                        skillRatio = (actor.skills.GetSkill(SkillDefOf.Plants).levelInt + 5) / (float)20;
                        if (skillRatio > 1f)
                        {
                            skillRatio = 1f;
                        }

                        if (skillRatio < 0.5f)
                        {
                            skillRatio = 0.5f;
                        }
                    }

                    var thing        = ThingMaker.MakeThing(ThingDef.Named("AYGinkgoLeaves"));
                    var num          = plant.def.plant.harvestYield * 2f * plant.Growth * skillRatio;
                    num              = AdjustYield(num);
                    thing.stackCount = checked ((int)num);
                    if (thing.stackCount > 0)
                    {
                        GenPlace.TryPlaceThing(thing, actor.Position, actor.Map, ThingPlaceMode.Near);
                    }
                }
                else if (plant.def.defName == "BurnedTree")
                {
                    var skillRatio2 = 0.5f;
                    var actor2      = actor;
                    if (actor2.skills != null)
                    {
                        skillRatio2 = (actor.skills.GetSkill(SkillDefOf.Plants).levelInt + 5) / (float)20;
                        if (skillRatio2 > 1f)
                        {
                            skillRatio2 = 1f;
                        }

                        if (skillRatio2 < 0.5f)
                        {
                            skillRatio2 = 0.5f;
                        }
                    }

                    var def      = ThingDef.Named("AYCharcoal");
                    var defTwo   = ThingDef.Named("AYWoodAshes");
                    var thingOne = ThingMaker.MakeThing(def);
                    var thingTwo = ThingMaker.MakeThing(defTwo);
                    var numOne   = 10f * skillRatio2;
                    var numTwo   = 20f * skillRatio2;
                    numOne       = AdjustYield(numOne);
                    numTwo       = AdjustYield(numTwo);
                    checked
                    {
                        thingOne.stackCount = (int)numOne;
                        thingTwo.stackCount = (int)numTwo;
                        if (thingOne.stackCount > 0)
                        {
                            GenPlace.TryPlaceThing(thingOne, actor.Position, actor.Map, ThingPlaceMode.Near);
                        }

                        if (thingTwo.stackCount > 0)
                        {
                            GenPlace.TryPlaceThing(thingTwo, actor.Position, actor.Map, ThingPlaceMode.Near);
                        }
                    }
                }
            }));
        }