internal static bool performDropDownAction(Object __instance, Farmer who, bool __result) { if (ProducerController.GetProducerConfig(__instance.Name) is ProducerConfig producerConfig) { if (producerConfig.NoInputStartMode != null) { try { if (!producerConfig.CheckLocationCondition(who.currentLocation)) { throw new RestrictionException(DataLoader.Helper.Translation.Get("Message.Condition.Location")); } else if (producerConfig.CheckSeasonCondition() && NoInputStartMode.Placement == producerConfig.NoInputStartMode) { if (ProducerController.GetProducerItem(__instance.Name, null) is ProducerRule producerRule) { ProducerRuleController.ProduceOutput(producerRule, __instance, (i, q) => who.hasItemInInventory(i, q), who, who.currentLocation, producerConfig); } } } catch (RestrictionException e) { if (e.Message != null && who.IsLocalPlayer) { Game1.showRedMessage(e.Message); } } return(__result = false); } } return(true); }
public static bool DayUpdate(Object __instance, GameLocation location) { if (__instance.bigCraftable.Value) { if (ProducerController.GetProducerConfig(__instance.Name) is ProducerConfig producerConfig) { if (ProducerController.GetProducerItem(__instance.Name, null) is ProducerRule producerRule) { if (!producerConfig.CheckSeasonCondition() || !producerConfig.CheckLocationCondition(location)) { ProducerRuleController.ClearProduction(__instance); return(false); } else if (producerConfig.NoInputStartMode != null) { if (producerConfig.NoInputStartMode == NoInputStartMode.DayUpdate || (producerConfig.NoInputStartMode == NoInputStartMode.Placement)) { if (__instance.heldObject.Value == null) { try { Farmer who = Game1.getFarmer((long)__instance.owner); ProducerRuleController.ProduceOutput(producerRule, __instance, (i, q) => who.hasItemInInventory(i, q), who, who.currentLocation, producerConfig); } catch (RestrictionException) { //Does not show the restriction error since the machine is auto-starting. } } } return(false); } } } } return(true); }
internal static bool PerformObjectDropInAction(Object __instance, Item dropInItem, bool probe, Farmer who, ref bool __result) { if (__instance.isTemporarilyInvisible || !(dropInItem is Object)) { return(false); } Object input = (Object)dropInItem; bool failLocationCondition = false; bool failSeasonCondition = false; if (__instance.heldObject.Value != null && !__instance.name.Equals("Crystalarium") || input.bigCraftable.Value) { return(true); } ProducerConfig producerConfig = ProducerController.GetProducerConfig(__instance.Name); GameLocation location = who.currentLocation; if (producerConfig != null) { if (!producerConfig.CheckLocationCondition(location)) { failLocationCondition = true; } if (!producerConfig.CheckSeasonCondition()) { failSeasonCondition = true; } if (producerConfig.NoInputStartMode != null) { return(false); } } if (ProducerController.GetProducerItem(__instance.name, input) is ProducerRule producerRule) { if (ProducerRuleController.IsInputExcluded(producerRule, input)) { return(true); } if (__instance.bigCraftable.Value && !probe && __instance.heldObject.Value == null) { __instance.scale.X = 5f; } try { if (failLocationCondition) { throw new RestrictionException(DataLoader.Helper.Translation.Get("Message.Condition.Location")); } if (failSeasonCondition) { throw new RestrictionException(DataLoader.Helper.Translation.Get("Message.Condition.Season")); } ProducerRuleController.ValidateIfInputStackLessThanRequired(producerRule, input); ProducerRuleController.ValidateIfAnyFuelStackLessThanRequired(producerRule, who); OutputConfig outputConfig = ProducerRuleController.ProduceOutput(producerRule, __instance, (i, q) => who.hasItemInInventory(i, q), who, location, producerConfig, input, probe); if (outputConfig != null) { if (!probe) { foreach (var fuel in producerRule.FuelList) { RemoveItemsFromInventory(who, fuel.Item1, fuel.Item2); } foreach (var fuel in outputConfig.FuelList) { RemoveItemsFromInventory(who, fuel.Item1, fuel.Item2); } input.Stack -= producerRule.InputStack; __result = input.Stack <= 0; } else { __result = true; } } } catch (RestrictionException e) { __result = false; if (e.Message != null && !probe && who.IsLocalPlayer) { Game1.showRedMessage(e.Message); } } return(false); } return(!failLocationCondition && !failSeasonCondition); }
internal static bool checkForActionPrefix(Object __instance, Farmer who, bool justCheckingForActivity, ref bool __result) { if (__instance.isTemporarilyInvisible || !__instance.readyForHarvest.Value || justCheckingForActivity) { return(true); } if (ProducerController.GetProducerConfig(__instance.Name) is ProducerConfig producerConfig) { if (producerConfig.NoInputStartMode != null || producerConfig.IncrementStatsOnOutput.Count > 0) { Object previousObject = __instance.heldObject.Value; if (who.isMoving()) { Game1.haltAfterCheck = false; } __instance.heldObject.Value = (Object)null; if (who.IsLocalPlayer) { if (!who.addItemToInventoryBool((Item)previousObject, false)) { __instance.heldObject.Value = previousObject; Game1.showRedMessage(Game1.content.LoadString("Strings\\StringsFromCSFiles:Crop.cs.588")); return(__result = false); } Game1.playSound("coin"); foreach (KeyValuePair <StardewStats, string> keyValuePair in producerConfig.IncrementStatsOnOutput) { if (keyValuePair.Value == null || keyValuePair.Value == previousObject.Name || keyValuePair.Value == previousObject.ParentSheetIndex.ToString() || keyValuePair.Value == previousObject.Category.ToString() || previousObject.HasContextTag(keyValuePair.Value)) { StatsController.IncrementStardewStats(keyValuePair.Key, previousObject.Stack); if (!producerConfig.MultipleStatsIncrement) { break; } } } } __instance.readyForHarvest.Value = false; __instance.showNextIndex.Value = false; __result = true; if (producerConfig.NoInputStartMode == NoInputStartMode.Placement) { if (ProducerController.GetProducerItem(__instance.Name, null) is ProducerRule producerRule) { try { if (!producerConfig.CheckLocationCondition(who.currentLocation)) { throw new RestrictionException(DataLoader.Helper.Translation.Get("Message.Condition.Location")); } else if (producerConfig.CheckSeasonCondition()) { __result = ProducerRuleController.ProduceOutput(producerRule, __instance, (i, q) => who.hasItemInInventory(i, q), who, who.currentLocation, producerConfig) != null; } } catch (RestrictionException e) { __result = false; if (e.Message != null && who.IsLocalPlayer) { Game1.showRedMessage(e.Message); } } } } return(false); } } return(true); }
internal static bool PerformObjectDropInAction(Object __instance, Item dropInItem, bool probe, Farmer who, ref bool __result) { if (__instance.isTemporarilyInvisible || !(dropInItem is Object)) { return(false); } Object input = (Object)dropInItem; if (ProducerController.GetProducerItem(__instance.name, input) is ProducerRule producerRule) { if (__instance.heldObject.Value != null && !__instance.name.Equals("Crystalarium") || (bool)((NetFieldBase <bool, NetBool>)input.bigCraftable)) { return(true); } if (ProducerRuleController.IsInputExcluded(producerRule, input)) { return(true); } if ((bool)((NetFieldBase <bool, NetBool>)__instance.bigCraftable) && !probe && (__instance.heldObject.Value == null)) { __instance.scale.X = 5f; } bool shouldDisplayMessages = !probe && who.IsLocalPlayer; if (ProducerRuleController.IsInputStackLessThanRequired(producerRule, input, shouldDisplayMessages)) { return(false); } if (ProducerRuleController.IsAnyFuelStackLessThanRequired(producerRule, who, shouldDisplayMessages)) { return(false); } Vector2 tileLocation = __instance.tileLocation.Value; Random random = ProducerRuleController.GetRandomForProducing(tileLocation); OutputConfig outputConfig = OutputConfigController.ChooseOutput(producerRule.OutputConfigs, random); Object output = OutputConfigController.CreateOutput(outputConfig, input, random); __instance.heldObject.Value = output; if (!probe) { OutputConfigController.LoadOutputName(outputConfig, __instance.heldObject.Value, input, who); GameLocation currentLocation = who.currentLocation; PlaySound(producerRule.Sounds, currentLocation); PlayDelayedSound(producerRule.DelayedSounds, currentLocation); __instance.minutesUntilReady.Value = producerRule.MinutesUntilReady; if (ProducerController.GetProducerConfig(__instance.Name) is ProducerConfig producerConfig) { __instance.showNextIndex.Value = producerConfig.AlternateFrameProducing; } if (producerRule.PlacingAnimation.HasValue) { AnimationController.DisplayAnimation(producerRule.PlacingAnimation.Value, producerRule.PlacingAnimationColor, currentLocation, tileLocation, new Vector2(producerRule.PlacingAnimationOffsetX, producerRule.PlacingAnimationOffsetY)); } __instance.initializeLightSource(tileLocation, false); foreach (var fuel in producerRule.FuelList) { RemoveItemsFromInventory(who, fuel.Item1, fuel.Item2); } producerRule.IncrementStatsOnInput.ForEach(s => StatsController.IncrementStardewStats(s, producerRule.InputStack)); input.Stack -= producerRule.InputStack; __result = input.Stack <= 0; } else { __result = true; } return(false); } return(true); }