public IEnumerable <YieldResult> New_TendToFields() { Furniture furniture = InteractionTarget.GetPrimaryHolder <Furniture>(); SoilModule soilModule = furniture.GetModule <SoilModule>(); foreach (var interaction in soilModule.GetInteractions(human, InteractionInfo.issuedByAI, false)) { if (interaction.interaction == Interaction.RemoveInfestedPlants || interaction.interaction == Interaction.RemovePlant || interaction.interaction == Specialization.TendToFieldsInteraction) { continue; } if (interaction.interaction == Interaction.WaterPlant) { if (!soilModule.GetSeasons().Contains(SeasonManager.GetCurrentSeason())) { continue; } //InteractionRestrictionCanTakeResourceNearby cheat. we don't check the distance if (!WorldScripts.Instance.furnitureFactory.GetModules <InventoryReplenishmentModule>().Any(x => x.GetResource() == Resource.Water)) { continue; } //InteractionRestrictionEquipmentEffect cheat. we don't check the distance if (!human.equipmentSet.GetEffects().Any(x => x.first == EquipmentEffect.WateringPlants)) { continue; } } else if (!WorkInteractionControllerPatch.CheckInteraction(InteractionTarget, interaction, human)) { continue; } subTask = new YieldMicroInteraction(new InteractionInfo( interaction.interaction, InteractionTarget, interaction.restrictions, InteractionInfo.issuedByAI, InteractionInfo.priority, isContinuationOrSubtask: true), human); while (subTask != null) // WHILEPROTECTED { subTask = subTask.Handle(); yield return(YieldResult.WaitFrame); } StopCurrentSubtask(); } yield return(YieldResult.Completed); }
public YieldMicroInteraction New_Handle() { YieldResult result; YieldMicroInteraction resultHandle = y.Handle(out result) as YieldMicroInteraction; if (result == YieldResult.Failed && this.Interaction == Interaction.Bury && this.InteractionInfo.restrictions != null && this.InteractionInfo.restrictions.OfType <InteractionRestrictionFaction>().Any()) { AbsoluteProfessionPrioritiesMod.Instance.buryColonistFailCooldown = 5; } return(resultHandle); }
public IEnumerable <YieldResult> New_WaterPlantCustom() { if (human.inventory.GetCount(Resource.Water) == 0) { List <InteractionRestriction> restrictions = new List <InteractionRestriction>() { new InteractionRestrictionResource(Resource.Water) }; Interactable well = human.SearchForInteractableWithInteraction(Interaction.TakeIntoInventory, -1f, restrictions); subTask = new YieldMicroInteraction(new InteractionInfo(Interaction.TakeIntoInventory, well, restrictions, InteractionInfo.issuedByAI, InteractionInfo.priority, false, false, true), human); while (subTask != null) // WHILEPROTECTED { subTask = subTask.Handle(); yield return(YieldResult.WaitFrame); } StopCurrentSubtask(); if (human.inventory.GetCount(Resource.Water) == 0) { yield return(YieldResult.Failed); } } foreach (var x in Walk(InteractionTarget, 0.1f)) { yield return(x); } TurnToTransform(); yield return(LockInteraction()); human.SetAnimationParameter("isWatering", true); foreach (var x in Wait(5 * human.GetWorkTimeFactor())) { yield return(x); } yield return(Interact()); human.inventory.Remove(Resource.Water, 1); yield return(YieldResult.Completed); }