コード例 #1
0
ファイル: Ores.cs プロジェクト: Pathoschild/smapi-mod-dump
        public static bool Prefix(StardewValley.Object __instance, Item dropInItem, bool probe, Farmer who, ref bool __result)
        {
            if (__instance.name == "Furnace")
            {
                if (who.IsLocalPlayer && __instance.GetTallyOfObject(who, 382, false) > 0 && __instance.heldObject.Value == null && dropInItem is IDGAItem ditem && ditem.FullId == ItemIds.MythiciteOre && dropInItem.Stack >= 5)
                {
                    __instance.heldObject.Value        = (StardewValley.Object)Mod.dga.SpawnDGAItem(ItemIds.MythiciteBar);
                    __instance.minutesUntilReady.Value = 720;

                    if (probe)
                    {
                        __result = true;
                    }
                    else
                    {
                        who.currentLocation.playSound("furnace");
                        __instance.initializeLightSource(__instance.tileLocation);
                        __instance.showNextIndex.Value = true;
                        // TODO: Don't be lazy and actually do this when Game1.multiplayer is public

                        /*Game1.multiplayer.broadcastSprites(who.currentLocation, new TemporaryAnimatedSprite(30, this.tileLocation.Value * 64f + new Vector2(0f, -16f), Color.White, 4, flipped: false, 50f, 10, 64, (this.tileLocation.Y + 1f) * 64f / 10000f + 0.0001f)
                         * {
                         *  alphaFade = 0.005f
                         * });*/
                        __instance.ConsumeInventoryItem(who, 382, 1);
                        dropInItem.Stack -= 5;
                        if (dropInItem.Stack <= 0)
                        {
                            __result = true;
                        }
                        __result = false;
                        return(false);
                    }
                    return(false);
                }
            }

            return(true);
        }
コード例 #2
0
ファイル: Patcher.cs プロジェクト: Pathoschild/smapi-mod-dump
        public static bool UpdateCharcoalKilnInput(ref StardewObject __instance, ref bool __result, ref Item dropInItem, ref bool probe, ref Farmer who)
        {
            try
            {
                if (__instance.name.Equals("Charcoal Kiln"))
                {
                    if (__instance.isTemporarilyInvisible)
                    {
                        __result = false;
                        return(false);
                    }

                    if (dropInItem is not StardewObject)
                    {
                        __result = false;
                        return(false);
                    }

                    StardewObject dropIn = dropInItem as StardewObject;

                    if (dropInItem is Wallpaper)
                    {
                        __result = false;
                        return(false);
                    }

                    if (__instance.heldObject.Value != null)
                    {
                        __result = false;
                        return(false);
                    }

                    if (dropIn != null && dropIn.bigCraftable.Value)
                    {
                        __result = false;
                        return(false);
                    }

                    if (__instance.bigCraftable.Value && !probe && dropIn != null && __instance.heldObject.Value == null)
                    {
                        __instance.scale.X = 5f;
                    }

                    if (probe && __instance.MinutesUntilReady > 0)
                    {
                        __result = false;
                        return(false);
                    }

                    int consumeCount = -1;

                    switch (dropIn.ParentSheetIndex)
                    {
                    case DriftwoodID:
                        if (mod.Config.DriftwoodMultiplier > 0 && dropIn.Stack >= CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.DriftwoodMultiplier))
                        {
                            consumeCount = CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.DriftwoodMultiplier);
                        }

                        break;

                    case WoodID:
                        if (dropIn.Stack >= mod.Config.CharcoalKilnWoodNeeded)
                        {
                            consumeCount = mod.Config.CharcoalKilnWoodNeeded;
                        }

                        break;

                    case HardwoodID:
                        if (mod.Config.HardwoodMultiplier > 0 && dropIn.Stack >= CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.HardwoodMultiplier))
                        {
                            consumeCount = CountWithMultiplier(mod.Config.CharcoalKilnWoodNeeded, mod.Config.HardwoodMultiplier);
                        }

                        break;

                    default:
                        break;
                    }

                    if (who.IsLocalPlayer && consumeCount == -1)
                    {
                        if (!probe && who.IsLocalPlayer && StardewObject.autoLoadChest == null)
                        {
                            Game1.showRedMessage(Game1.content.LoadString("Strings\\StringsFromCSFiles:Object.cs.12783"));
                        }

                        __result = false;
                        return(false);
                    }

                    if (__instance.heldObject.Value == null && consumeCount != -1)
                    {
                        if (!probe)
                        {
                            __instance.ConsumeInventoryItem(who, dropIn, consumeCount);
                            who.currentLocation.playSound("openBox", NetAudio.SoundContext.Default);
                            DelayedAction.playSoundAfterDelay("fireball", 50, null, -1);
                            __instance.showNextIndex.Value = true;

                            var multiplayer = (Multiplayer)AccessTools.Field(typeof(Game1), "multiplayer").GetValue(null);

                            var tempSprite = new TemporaryAnimatedSprite(27, (__instance.TileLocation * 64f) + new Vector2(-16f, -128f), Color.White, 4, false, 50f, 10, 64, ((__instance.TileLocation.Y + 1f) * 64f / 10000f) + 0.0001f, -1, 0)
                            {
                                alphaFade = 0.005f
                            };

                            multiplayer.broadcastSprites(who.currentLocation, new TemporaryAnimatedSprite[] { tempSprite });

                            __instance.heldObject.Value  = new StardewObject(CoalID, 1, false, -1, 0);
                            __instance.MinutesUntilReady = mod.Config.CharcoalKilnTimeNeeded;
                        }
                        else
                        {
                            __instance.heldObject.Value = new StardewObject();

                            __result = true;
                            return(false);
                        }
                    }

                    __result = false;
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            catch (Exception e)
            {
                mod.ErrorLog("There was an exception in a patch", e);
                return(true);
            }
        }