Beispiel #1
0
        private static bool LockInteraction_Prefix(YieldMicroInteraction __instance, ref YieldResult __result)
        {
            YieldMicroInteractionHelper helper = new YieldMicroInteractionHelper(__instance);

            __result = helper.New_LockInteraction(false);
            return(false);
        }
        public IEnumerable <YieldResult> New_SowAndCareForTrees()
        {
            GrowingSpotModule module = this.InteractionTarget.GetPrimaryHolder <Furniture>().GetModule <GrowingSpotModule>();

            if (module.GetFieldValue <int>("currentPhase") < 0)
            {
                subTask = new YieldMicroInteraction(new InteractionInfo(Interaction.Sow,
                                                                        this.InteractionTarget, this.InteractionInfo.restrictions, this.InteractionInfo.issuedByAI,
                                                                        this.InteractionInfo.priority, this.InteractionInfo.urgent,
                                                                        this.InteractionInfo.shouldBeFinished, true), this.human);
            }
            else
            {
                subTask = new YieldMicroInteraction(new InteractionInfo(Interaction.Care,
                                                                        this.InteractionTarget, this.InteractionInfo.restrictions, this.InteractionInfo.issuedByAI,
                                                                        this.InteractionInfo.priority, this.InteractionInfo.urgent,
                                                                        this.InteractionInfo.shouldBeFinished, true), this.human);
            }

            subTask = subTask.Handle();
            yield return(YieldResult.WaitFrame);

            StopCurrentSubtask();
            yield return(YieldResult.Completed);
        }
Beispiel #3
0
        private static bool Handle_Prefix(YieldMicroInteraction __instance, ref YieldMicroInteraction __result)
        {
            YieldMicroInteractionHelper helper = new YieldMicroInteractionHelper(__instance);

            __result = helper.New_Handle();
            return(false);
        }
Beispiel #4
0
        private static bool GetInteractionEnumerable_Prefix(Interaction interaction, YieldMicroInteraction __instance, ref IEnumerable <YieldResult> __result)
        {
            YieldMicroInteractionHelper helper = new YieldMicroInteractionHelper(__instance);

            __result = helper.StartGetInteractionEnumerable(interaction);

            return(__result == null);
        }
 public static void Postfix(YieldMicroInteraction __instance, ref YieldResult yieldResult)
 {
     if (__instance.Interaction == Interaction.Butcher && (yieldResult == YieldResult.Completed || yieldResult == YieldResult.Failed))
     {
         Interactable target = (Interactable)AccessTools.Property(typeof(YieldMicroInteraction), "InteractionTarget").GetValue(__instance);
         AnimalAlertsMod.Instance.animalsMarkedForButchering.Remove(target.GetPrimaryHolder <HumanAI>());
     }
 }
        public static void Butcher_Prefix(YieldMicroInteraction __instance)
        {
            Interactable target = (Interactable)AccessTools.Property(typeof(YieldMicroInteraction), "InteractionTarget").GetValue(__instance);

            if (target is HumanInteractable && target.GetPrimaryHolder <HumanAI>().animal != null)
            {
                AnimalAlertsMod.Instance.animalsMarkedForButchering.Add(target.GetPrimaryHolder <HumanAI>());
            }
        }
        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);
        }
 public YieldMicroInteractionHelper(YieldMicroInteraction instance)
 {
     y = instance;
 }