예제 #1
0
        /// <summary>
        /// Place a core object into a game location.
        /// </summary>
        /// <param name="cObj"></param>
        /// <param name="location"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="s"></param>
        /// <param name="who"></param>
        /// <param name="playSound"></param>
        /// <returns></returns>
        public static bool placementAction(CoreObject cObj, GameLocation location, int x, int y, Serialization.SerializationManager s, StardewValley.Farmer who = null, bool playSound = true)
        {
            Vector2 vector = new Vector2((float)(x / Game1.tileSize), (float)(y / Game1.tileSize));

            //  cObj.health = 10;
            if (who != null)
            {
                cObj.owner.Value = who.UniqueMultiplayerID;
            }
            else
            {
                cObj.owner.Value = Game1.player.UniqueMultiplayerID;
            }

            int num = cObj.ParentSheetIndex;

            if (num <= 130)
            {
                if (num == 71)
                {
                    if (location is MineShaft)
                    {
                        if ((location as MineShaft).mineLevel != 120 && (location as MineShaft).recursiveTryToCreateLadderDown(vector, "hoeHit", 16))
                        {
                            return(true);
                        }
                        Game1.showRedMessage("Unsuitable Location");
                    }
                    return(false);
                }
                if (num == 130)
                {
                    if (location.objects.ContainsKey(vector) || Game1.currentLocation is MineShaft)
                    {
                        Game1.showRedMessage("Unsuitable Location");
                        return(false);
                    }
                    location.objects.Add(vector, new Chest(true)
                    {
                        shakeTimer = 50
                    });
                    Game1.playSound("axe");
                    return(true);
                }
            }
            else
            {
                switch (num)
                {
                case 143:
                case 144:
                case 145:
                case 146:
                case 147:
                case 148:
                case 149:
                case 150:
                case 151:
                    if (location.objects.ContainsKey(vector))
                    {
                        return(false);
                    }
                    new Torch(vector, cObj.ParentSheetIndex, true)
                    {
                        shakeTimer = 25
                    }.placementAction(location, x, y, who);
                    return(true);

                default:
                    if (num == 163)
                    {
                        location.objects.Add(vector, new Cask(vector));
                        Game1.playSound("hammer");
                    }
                    break;
                }
            }

            if (cObj.name.Equals("Tapper"))
            {
                if (location.terrainFeatures.ContainsKey(vector) && location.terrainFeatures[vector] is Tree && (location.terrainFeatures[vector] as Tree).growthStage.Value >= 5 && !(location.terrainFeatures[vector] as Tree).stump.Value && !location.objects.ContainsKey(vector))
                {
                    cObj.TileLocation = vector;
                    location.objects.Add(vector, cObj);
                    int treeType = (location.terrainFeatures[vector] as Tree).treeType.Value;
                    (location.terrainFeatures[vector] as Tree).tapped.Value = true;
                    switch (treeType)
                    {
                    case 1:
                        cObj.heldObject.Value  = new StardewValley.Object(725, 1, false, -1, 0);
                        cObj.MinutesUntilReady = 13000 - Game1.timeOfDay;
                        break;

                    case 2:
                        cObj.heldObject.Value  = new StardewValley.Object(724, 1, false, -1, 0);
                        cObj.MinutesUntilReady = 16000 - Game1.timeOfDay;
                        break;

                    case 3:
                        cObj.heldObject.Value  = new StardewValley.Object(726, 1, false, -1, 0);
                        cObj.MinutesUntilReady = 10000 - Game1.timeOfDay;
                        break;

                    case 7:
                        cObj.heldObject.Value  = new StardewValley.Object(420, 1, false, -1, 0);
                        cObj.MinutesUntilReady = 3000 - Game1.timeOfDay;
                        if (!Game1.currentSeason.Equals("fall"))
                        {
                            cObj.heldObject.Value  = new StardewValley.Object(404, 1, false, -1, 0);
                            cObj.MinutesUntilReady = 6000 - Game1.timeOfDay;
                        }
                        break;
                    }
                    Game1.playSound("axe");
                    return(true);
                }
                return(false);
            }
            else if (cObj.name.Contains("Sapling"))
            {
                Vector2 key = default(Vector2);
                for (int i = x / Game1.tileSize - 2; i <= x / Game1.tileSize + 2; i++)
                {
                    for (int j = y / Game1.tileSize - 2; j <= y / Game1.tileSize + 2; j++)
                    {
                        key.X = (float)i;
                        key.Y = (float)j;
                        if (location.terrainFeatures.ContainsKey(key) && (location.terrainFeatures[key] is Tree || location.terrainFeatures[key] is FruitTree))
                        {
                            Game1.showRedMessage("Too close to another tree");
                            return(false);
                        }
                    }
                }
                if (location.terrainFeatures.ContainsKey(vector))
                {
                    if (!(location.terrainFeatures[vector] is HoeDirt) || (location.terrainFeatures[vector] as HoeDirt).crop != null)
                    {
                        return(false);
                    }
                    location.terrainFeatures.Remove(vector);
                }
                if (location is Farm && (location.doesTileHaveProperty((int)vector.X, (int)vector.Y, "Diggable", "Back") != null || location.doesTileHavePropertyNoNull((int)vector.X, (int)vector.Y, "Type", "Back").Equals("Grass")))
                {
                    Game1.playSound("dirtyHit");
                    DelayedAction.playSoundAfterDelay("coin", 100);
                    location.terrainFeatures.Add(vector, new FruitTree(cObj.ParentSheetIndex));
                    return(true);
                }
                Game1.showRedMessage("Can't be planted here.");
                return(false);
            }
            else
            {
                //Game1.showRedMessage("STEP 1");

                if (cObj.Category == -74)
                {
                    return(true);
                }
                if (!cObj.performDropDownAction(who))
                {
                    CoreObject @object = (CoreObject)cObj.getOne();
                    @object.shakeTimer   = 50;
                    @object.TileLocation = vector;
                    @object.performDropDownAction(who);
                    if (location.objects.ContainsKey(vector))
                    {
                        if (location.objects[vector].ParentSheetIndex != cObj.ParentSheetIndex)
                        {
                            Game1.createItemDebris(location.objects[vector], vector * (float)Game1.tileSize, Game1.random.Next(4));
                            location.objects[vector] = @object;
                        }
                    }

                    else
                    {
                        //   Game1.showRedMessage("STEP 2");
                        //ModCore.ModMonitor.Log(vector.ToString());

                        Vector2 newVec = new Vector2(vector.X, vector.Y);
                        // cObj.boundingBox.Inflate(32, 32);
                        location.objects.Add(newVec, cObj);
                    }
                    @object.initializeLightSource(vector);
                }
                if (playSound == true)
                {
                    Game1.playSound("woodyStep");
                }
                else
                {
                    ModCore.ModMonitor.Log("restoring item from file");
                }
                //Log.AsyncM("Placed and object");
                cObj.locationsName = location.Name;
                s.trackedObjectList.Add(cObj);
                return(true);
            }
        }
예제 #2
0
        public static bool placementAction(CoreObject cObj, GameLocation location, int x, int y, StardewValley.Farmer who = null, bool playSound = true)
        {
            Vector2 vector = new Vector2((float)(x / Game1.tileSize), (float)(y / Game1.tileSize));

            //  cObj.health = 10;
            if (who != null)
            {
                cObj.owner = who.uniqueMultiplayerID;
            }
            else
            {
                cObj.owner = Game1.player.uniqueMultiplayerID;
            }

            if (!cObj.bigCraftable && !(cObj is Furniture))
            {
                int num = cObj.ParentSheetIndex;
                if (num <= 298)
                {
                    if (num > 94)
                    {
                        bool result;
                        switch (num)
                        {
                        case 286:
                        {
                            using (List <TemporaryAnimatedSprite> .Enumerator enumerator = Game1.currentLocation.temporarySprites.GetEnumerator())
                            {
                                while (enumerator.MoveNext())
                                {
                                    if (enumerator.Current.position.Equals(vector * (float)Game1.tileSize))
                                    {
                                        result = false;
                                        return(result);
                                    }
                                }
                            }
                            int num2 = Game1.random.Next();
                            Game1.playSound("thudStep");
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(cObj.parentSheetIndex, 100f, 1, 24, vector * (float)Game1.tileSize, true, false, Game1.currentLocation, who)
                                {
                                    shakeIntensity          = 0.5f,
                                    shakeIntensityChange    = 0.002f,
                                    extraInfoForEndBehavior = num2,
                                    endFunction             = new TemporaryAnimatedSprite.endBehavior(Game1.currentLocation.removeTemporarySpritesWithID)
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize + new Vector2(5f, 3f) * (float)Game1.pixelZoom, true, false, (float)(y + 7) / 10000f, 0f, Color.Yellow, (float)Game1.pixelZoom, 0f, 0f, 0f, false)
                                {
                                    id = (float)num2
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize + new Vector2(5f, 3f) * (float)Game1.pixelZoom, true, true, (float)(y + 7) / 10000f, 0f, Color.Orange, (float)Game1.pixelZoom, 0f, 0f, 0f, false)
                                {
                                    delayBeforeAnimationStart = 100,
                                    id = (float)num2
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize + new Vector2(5f, 3f) * (float)Game1.pixelZoom, true, false, (float)(y + 7) / 10000f, 0f, Color.White, (float)Game1.pixelZoom * 0.75f, 0f, 0f, 0f, false)
                                {
                                    delayBeforeAnimationStart = 200,
                                    id = (float)num2
                                });
                            if (Game1.fuseSound != null && !Game1.fuseSound.IsPlaying)
                            {
                                Game1.fuseSound = Game1.soundBank.GetCue("fuse");
                                Game1.fuseSound.Play();
                            }
                            return(true);
                        }

                        case 287:
                        {
                            using (List <TemporaryAnimatedSprite> .Enumerator enumerator = Game1.currentLocation.temporarySprites.GetEnumerator())
                            {
                                while (enumerator.MoveNext())
                                {
                                    if (enumerator.Current.position.Equals(vector * (float)Game1.tileSize))
                                    {
                                        result = false;
                                        return(result);
                                    }
                                }
                            }
                            int num2 = Game1.random.Next();
                            Game1.playSound("thudStep");
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(cObj.parentSheetIndex, 100f, 1, 24, vector * (float)Game1.tileSize, true, false, Game1.currentLocation, who)
                                {
                                    shakeIntensity          = 0.5f,
                                    shakeIntensityChange    = 0.002f,
                                    extraInfoForEndBehavior = num2,
                                    endFunction             = new TemporaryAnimatedSprite.endBehavior(Game1.currentLocation.removeTemporarySpritesWithID)
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize, true, false, (float)(y + 7) / 10000f, 0f, Color.Yellow, (float)Game1.pixelZoom, 0f, 0f, 0f, false)
                                {
                                    id = (float)num2
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize, true, false, (float)(y + 7) / 10000f, 0f, Color.Orange, (float)Game1.pixelZoom, 0f, 0f, 0f, false)
                                {
                                    delayBeforeAnimationStart = 100,
                                    id = (float)num2
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize, true, false, (float)(y + 7) / 10000f, 0f, Color.White, (float)Game1.pixelZoom * 0.75f, 0f, 0f, 0f, false)
                                {
                                    delayBeforeAnimationStart = 200,
                                    id = (float)num2
                                });
                            if (Game1.fuseSound != null && !Game1.fuseSound.IsPlaying)
                            {
                                Game1.fuseSound = Game1.soundBank.GetCue("fuse");
                                Game1.fuseSound.Play();
                            }
                            return(true);
                        }

                        case 288:
                        {
                            using (List <TemporaryAnimatedSprite> .Enumerator enumerator = Game1.currentLocation.temporarySprites.GetEnumerator())
                            {
                                while (enumerator.MoveNext())
                                {
                                    if (enumerator.Current.position.Equals(vector * (float)Game1.tileSize))
                                    {
                                        result = false;
                                        return(result);
                                    }
                                }
                            }
                            int num2 = Game1.random.Next();
                            Game1.playSound("thudStep");
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(cObj.parentSheetIndex, 100f, 1, 24, vector * (float)Game1.tileSize, true, false, Game1.currentLocation, who)
                                {
                                    shakeIntensity          = 0.5f,
                                    shakeIntensityChange    = 0.002f,
                                    extraInfoForEndBehavior = num2,
                                    endFunction             = new TemporaryAnimatedSprite.endBehavior(Game1.currentLocation.removeTemporarySpritesWithID)
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize + new Vector2(5f, 0f) * (float)Game1.pixelZoom, true, false, (float)(y + 7) / 10000f, 0f, Color.Yellow, (float)Game1.pixelZoom, 0f, 0f, 0f, false)
                                {
                                    id = (float)num2
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize + new Vector2(5f, 0f) * (float)Game1.pixelZoom, true, true, (float)(y + 7) / 10000f, 0f, Color.Orange, (float)Game1.pixelZoom, 0f, 0f, 0f, false)
                                {
                                    delayBeforeAnimationStart = 100,
                                    id = (float)num2
                                });
                            Game1.currentLocation.TemporarySprites.Add(new TemporaryAnimatedSprite(Game1.mouseCursors, new Microsoft.Xna.Framework.Rectangle(598, 1279, 3, 4), 53f, 5, 9, vector * (float)Game1.tileSize + new Vector2(5f, 0f) * (float)Game1.pixelZoom, true, false, (float)(y + 7) / 10000f, 0f, Color.White, (float)Game1.pixelZoom * 0.75f, 0f, 0f, 0f, false)
                                {
                                    delayBeforeAnimationStart = 200,
                                    id = (float)num2
                                });
                            if (Game1.fuseSound != null && !Game1.fuseSound.IsPlaying)
                            {
                                Game1.fuseSound = Game1.soundBank.GetCue("fuse");
                                Game1.fuseSound.Play();
                            }
                            return(true);
                        }

                        default:
                            if (num != 297)
                            {
                                if (num != 298)
                                {
                                    goto IL_FD7;
                                }
                                if (location.objects.ContainsKey(vector))
                                {
                                    return(false);
                                }
                                location.objects.Add(vector, new Fence(vector, 5, false));
                                Game1.playSound("axe");
                                return(true);
                            }
                            else
                            {
                                if (location.objects.ContainsKey(vector) || location.terrainFeatures.ContainsKey(vector))
                                {
                                    return(false);
                                }
                                location.terrainFeatures.Add(vector, new Grass(1, 4));
                                Game1.playSound("dirtyHit");
                                return(true);
                            }
                            break;
                        }
                        return(result);
                    }
                    if (num != 93)
                    {
                        if (num == 94)
                        {
                            if (location.objects.ContainsKey(vector))
                            {
                                return(false);
                            }
                            new Torch(vector, 1, 94).placementAction(location, x, y, who);
                            return(true);
                        }
                    }
                    else
                    {
                        if (location.objects.ContainsKey(vector))
                        {
                            return(false);
                        }
                        Utility.removeLightSource((int)(cObj.tileLocation.X * 2000f + cObj.tileLocation.Y));
                        Utility.removeLightSource((int)Game1.player.uniqueMultiplayerID);
                        new Torch(vector, 1).placementAction(location, x, y, (who == null) ? Game1.player : who);
                        return(true);
                    }
                }
                else if (num <= 401)
                {
                    switch (num)
                    {
                    case 309:
                    case 310:
                    case 311:
                    {
                        bool flag = location.terrainFeatures.ContainsKey(vector) && location.terrainFeatures[vector] is HoeDirt && (location.terrainFeatures[vector] as HoeDirt).crop == null;
                        if (!flag && (location.objects.ContainsKey(vector) || location.terrainFeatures.ContainsKey(vector) || (!(location is Farm) && !location.name.Contains("Greenhouse"))))
                        {
                            Game1.showRedMessage("Invalid Position");
                            return(false);
                        }
                        string text = location.doesTileHaveProperty(x, y, "NoSpawn", "Back");
                        if ((text == null || (!text.Equals("Tree") && !text.Equals("All"))) && (flag || (location.isTileLocationOpen(new Location(x * Game1.tileSize, y * Game1.tileSize)) && !location.isTileOccupied(new Vector2((float)x, (float)y), "") && location.doesTileHaveProperty(x, y, "Water", "Back") == null)))
                        {
                            int which = 1;
                            num = cObj.parentSheetIndex;
                            if (num != 310)
                            {
                                if (num == 311)
                                {
                                    which = 3;
                                }
                            }
                            else
                            {
                                which = 2;
                            }
                            location.terrainFeatures.Remove(vector);
                            location.terrainFeatures.Add(vector, new Tree(which, 0));
                            Game1.playSound("dirtyHit");
                            return(true);
                        }
                        break;
                    }

                    default:
                        switch (num)
                        {
                        case 322:
                            if (location.objects.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.objects.Add(vector, new Fence(vector, 1, false));
                            Game1.playSound("axe");
                            return(true);

                        case 323:
                            if (location.objects.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.objects.Add(vector, new Fence(vector, 2, false));
                            Game1.playSound("stoneStep");
                            return(true);

                        case 324:
                            if (location.objects.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.objects.Add(vector, new Fence(vector, 3, false));
                            Game1.playSound("hammer");
                            return(true);

                        case 325:
                            if (location.objects.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.objects.Add(vector, new Fence(vector, 4, true));
                            Game1.playSound("axe");
                            return(true);

                        case 326:
                        case 327:
                        case 330:
                        case 332:
                            break;

                        case 328:
                            if (location.terrainFeatures.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.terrainFeatures.Add(vector, new Flooring(0));
                            Game1.playSound("axchop");
                            return(true);

                        case 329:
                            if (location.terrainFeatures.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.terrainFeatures.Add(vector, new Flooring(1));
                            Game1.playSound("thudStep");
                            return(true);

                        case 331:
                            if (location.terrainFeatures.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.terrainFeatures.Add(vector, new Flooring(2));
                            Game1.playSound("axchop");
                            return(true);

                        case 333:
                            if (location.terrainFeatures.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.terrainFeatures.Add(vector, new Flooring(3));
                            Game1.playSound("thudStep");
                            return(true);

                        default:
                            if (num == 401)
                            {
                                if (location.terrainFeatures.ContainsKey(vector))
                                {
                                    return(false);
                                }
                                location.terrainFeatures.Add(vector, new Flooring(4));
                                Game1.playSound("thudStep");
                                return(true);
                            }
                            break;
                        }
                        break;
                    }
                }
                else
                {
                    switch (num)
                    {
                    case 405:
                        if (location.terrainFeatures.ContainsKey(vector))
                        {
                            return(false);
                        }
                        location.terrainFeatures.Add(vector, new Flooring(6));
                        Game1.playSound("woodyStep");
                        return(true);

                    case 406:
                    case 408:
                    case 410:
                        break;

                    case 407:
                        if (location.terrainFeatures.ContainsKey(vector))
                        {
                            return(false);
                        }
                        location.terrainFeatures.Add(vector, new Flooring(5));
                        Game1.playSound("dirtyHit");
                        return(true);

                    case 409:
                        if (location.terrainFeatures.ContainsKey(vector))
                        {
                            return(false);
                        }
                        location.terrainFeatures.Add(vector, new Flooring(7));
                        Game1.playSound("stoneStep");
                        return(true);

                    case 411:
                        if (location.terrainFeatures.ContainsKey(vector))
                        {
                            return(false);
                        }
                        location.terrainFeatures.Add(vector, new Flooring(8));
                        Game1.playSound("stoneStep");
                        return(true);

                    default:
                        if (num != 415)
                        {
                            if (num == 710)
                            {
                                if (location.objects.ContainsKey(vector) || location.doesTileHaveProperty((int)vector.X, (int)vector.Y, "Water", "Back") == null)
                                {
                                    return(false);
                                }
                                new CrabPot(vector, 1).placementAction(location, x, y, who);
                                return(true);
                            }
                        }
                        else
                        {
                            if (location.terrainFeatures.ContainsKey(vector))
                            {
                                return(false);
                            }
                            location.terrainFeatures.Add(vector, new Flooring(9));
                            Game1.playSound("stoneStep");
                            return(true);
                        }
                        break;
                    }
                }
            }
            else
            {
                int num = cObj.ParentSheetIndex;
                if (num <= 130)
                {
                    if (num == 71)
                    {
                        if (location is MineShaft)
                        {
                            if ((location as MineShaft).mineLevel != 120 && (location as MineShaft).recursiveTryToCreateLadderDown(vector, "hoeHit", 16))
                            {
                                return(true);
                            }
                            Game1.showRedMessage("Unsuitable Location");
                        }
                        return(false);
                    }
                    if (num == 130)
                    {
                        if (location.objects.ContainsKey(vector) || Game1.currentLocation is MineShaft)
                        {
                            Game1.showRedMessage("Unsuitable Location");
                            return(false);
                        }
                        location.objects.Add(vector, new Chest(true)
                        {
                            shakeTimer = 50
                        });
                        Game1.playSound("axe");
                        return(true);
                    }
                }
                else
                {
                    switch (num)
                    {
                    case 143:
                    case 144:
                    case 145:
                    case 146:
                    case 147:
                    case 148:
                    case 149:
                    case 150:
                    case 151:
                        if (location.objects.ContainsKey(vector))
                        {
                            return(false);
                        }
                        new Torch(vector, cObj.parentSheetIndex, true)
                        {
                            shakeTimer = 25
                        }.placementAction(location, x, y, who);
                        return(true);

                    default:
                        if (num == 163)
                        {
                            location.objects.Add(vector, new Cask(vector));
                            Game1.playSound("hammer");
                        }
                        break;
                    }
                }
            }
IL_FD7:
            if (cObj.name.Equals("Tapper"))
            {
                if (location.terrainFeatures.ContainsKey(vector) && location.terrainFeatures[vector] is Tree && (location.terrainFeatures[vector] as Tree).growthStage >= 5 && !(location.terrainFeatures[vector] as Tree).stump && !location.objects.ContainsKey(vector))
                {
                    cObj.tileLocation = vector;
                    location.objects.Add(vector, cObj);
                    int treeType = (location.terrainFeatures[vector] as Tree).treeType;
                    (location.terrainFeatures[vector] as Tree).tapped = true;
                    switch (treeType)
                    {
                    case 1:
                        cObj.heldObject        = new StardewValley.Object(725, 1, false, -1, 0);
                        cObj.minutesUntilReady = 13000 - Game1.timeOfDay;
                        break;

                    case 2:
                        cObj.heldObject        = new StardewValley.Object(724, 1, false, -1, 0);
                        cObj.minutesUntilReady = 16000 - Game1.timeOfDay;
                        break;

                    case 3:
                        cObj.heldObject        = new StardewValley.Object(726, 1, false, -1, 0);
                        cObj.minutesUntilReady = 10000 - Game1.timeOfDay;
                        break;

                    case 7:
                        cObj.heldObject        = new StardewValley.Object(420, 1, false, -1, 0);
                        cObj.minutesUntilReady = 3000 - Game1.timeOfDay;
                        if (!Game1.currentSeason.Equals("fall"))
                        {
                            cObj.heldObject        = new StardewValley.Object(404, 1, false, -1, 0);
                            cObj.minutesUntilReady = 6000 - Game1.timeOfDay;
                        }
                        break;
                    }
                    Game1.playSound("axe");
                    return(true);
                }
                return(false);
            }
            else if (cObj.name.Contains("Sapling"))
            {
                Vector2 key = default(Vector2);
                for (int i = x / Game1.tileSize - 2; i <= x / Game1.tileSize + 2; i++)
                {
                    for (int j = y / Game1.tileSize - 2; j <= y / Game1.tileSize + 2; j++)
                    {
                        key.X = (float)i;
                        key.Y = (float)j;
                        if (location.terrainFeatures.ContainsKey(key) && (location.terrainFeatures[key] is Tree || location.terrainFeatures[key] is FruitTree))
                        {
                            Game1.showRedMessage("Too close to another tree");
                            return(false);
                        }
                    }
                }
                if (location.terrainFeatures.ContainsKey(vector))
                {
                    if (!(location.terrainFeatures[vector] is HoeDirt) || (location.terrainFeatures[vector] as HoeDirt).crop != null)
                    {
                        return(false);
                    }
                    location.terrainFeatures.Remove(vector);
                }
                if (location is Farm && (location.doesTileHaveProperty((int)vector.X, (int)vector.Y, "Diggable", "Back") != null || location.doesTileHavePropertyNoNull((int)vector.X, (int)vector.Y, "Type", "Back").Equals("Grass")))
                {
                    Game1.playSound("dirtyHit");
                    DelayedAction.playSoundAfterDelay("coin", 100);
                    location.terrainFeatures.Add(vector, new FruitTree(cObj.parentSheetIndex));
                    return(true);
                }
                Game1.showRedMessage("Can't be planted here.");
                return(false);
            }
            else
            {
                //Game1.showRedMessage("STEP 1");

                if (cObj.category == -74)
                {
                    return(true);
                }
                if (!cObj.performDropDownAction(who))
                {
                    CoreObject @object = (CoreObject)cObj.getOne();
                    @object.shakeTimer   = 50;
                    @object.tileLocation = vector;
                    @object.performDropDownAction(who);
                    if (location.objects.ContainsKey(vector))
                    {
                        if (location.objects[vector].ParentSheetIndex != cObj.parentSheetIndex)
                        {
                            Game1.createItemDebris(location.objects[vector], vector * (float)Game1.tileSize, Game1.random.Next(4));
                            location.objects[vector] = @object;
                        }
                    }

                    else
                    {
                        //   Game1.showRedMessage("STEP 2");
                        Log.Info(vector);

                        Vector2 newVec = new Vector2(vector.X, vector.Y);
                        // cObj.boundingBox.Inflate(32, 32);
                        location.objects.Add(newVec, cObj);
                    }
                    @object.initializeLightSource(vector);
                }
                if (playSound == true)
                {
                    Game1.playSound("woodyStep");
                }
                else
                {
                    Log.AsyncG("restoring item from file");
                }
                //Log.AsyncM("Placed and object");
                cObj.locationsName = location.name;
                Lists.trackedObjectList.Add(cObj);
                return(true);
            }
        }
예제 #3
0
        /*
         * public static void plantModdedCropHere(ModularSeeds seeds)
         * {
         *  /*
         *  if (Lists.saplingNames.Contains(Game1.player.ActiveObject.name))
         *  {
         *      bool f = plantSappling();
         *      if (f == true) return;
         *  }
         *
         *  //Log.AsyncC("HELLO");
         *  try
         *  {
         *      HoeDirt t;
         *      TerrainFeature r;
         *      bool plant = Game1.player.currentLocation.terrainFeatures.TryGetValue(Game1.currentCursorTile, out r);
         *      t = (r as HoeDirt);
         *      if (t is HoeDirt)
         *      {
         *          if ((t as HoeDirt).crop == null)
         *          {
         *              //    Log.AsyncG("BOOP");
         *             (t as HoeDirt).crop = new ModularCrop(seeds.parentSheetIndex, (int)Game1.currentCursorTile.X, (int)Game1.currentCursorTile.Y, seeds.cropDataFilePath, seeds.cropTextureFilePath, seeds.cropObjectTextureFilePath, seeds.cropObjectDataFilePath);
         *              //Game1.player.reduceActiveItemByOne();
         *              Game1.playSound("dirtyHit");
         *              trackedTerrainFeatures.Add(new TerrainDataNode(Game1.player.currentLocation, (int)Game1.currentCursorTile.X, (int)Game1.currentCursorTile.Y, t));
         *          }
         *      }
         *  }catch(Exception err)
         *  {
         *      Log.AsyncG("BUBBLES");
         *  }
         * }
         *
         * public static void plantRegularCropHere()
         * {
         *  HoeDirt t;
         *  TerrainFeature r;
         *  bool plant = Game1.player.currentLocation.terrainFeatures.TryGetValue(Game1.currentCursorTile, out r);
         *  t = (r as HoeDirt);
         *  if (t is HoeDirt)
         *  {
         *      if ((t as HoeDirt).crop == null)
         *      {
         *          (t as HoeDirt).crop = new Crop(Game1.player.ActiveObject.parentSheetIndex, (int)Game1.currentCursorTile.X, (int)Game1.currentCursorTile.Y);
         *          Game1.player.reduceActiveItemByOne();
         *          Game1.playSound("dirtyHit");
         *         trackedTerrainFeatures.Add(new TerrainDataNode(Game1.player.currentLocation, (int)Game1.currentCursorTile.X, (int)Game1.currentCursorTile.Y,t));
         *      }
         *  }
         * }
         */


        public static bool placementAction(CoreObject cObj, GameLocation location, int x, int y, StardewValley.Farmer who = null, bool playSound = true)
        {
            Vector2 vector = new Vector2((float)(x / Game1.tileSize), (float)(y / Game1.tileSize));

            //  cObj.health = 10;
            if (who != null)
            {
                cObj.owner.Value = who.UniqueMultiplayerID;
            }
            else
            {
                cObj.owner.Value = Game1.player.UniqueMultiplayerID;
            }


            int num = cObj.ParentSheetIndex;

            if (num <= 130)
            {
                if (num == 71)
                {
                    if (location is MineShaft)
                    {
                        if ((location as MineShaft).mineLevel != 120 && (location as MineShaft).recursiveTryToCreateLadderDown(vector, "hoeHit", 16))
                        {
                            return(true);
                        }
                        Game1.showRedMessage("Unsuitable Location");
                    }
                    return(false);
                }
                if (num == 130)
                {
                    if (location.objects.ContainsKey(vector) || Game1.currentLocation is MineShaft)
                    {
                        Game1.showRedMessage("Unsuitable Location");
                        return(false);
                    }
                    location.objects.Add(vector, new Chest(true)
                    {
                        shakeTimer = 50
                    });
                    Game1.playSound("axe");
                    return(true);
                }
            }
            else
            {
                switch (num)
                {
                case 143:
                case 144:
                case 145:
                case 146:
                case 147:
                case 148:
                case 149:
                case 150:
                case 151:
                    if (location.objects.ContainsKey(vector))
                    {
                        return(false);
                    }
                    new Torch(vector, cObj.ParentSheetIndex, true)
                    {
                        shakeTimer = 25
                    }.placementAction(location, x, y, who);
                    return(true);

                default:
                    if (num == 163)
                    {
                        location.objects.Add(vector, new Cask(vector));
                        Game1.playSound("hammer");
                    }
                    break;
                }
            }

            if (1 == 2)
            {
            }
            else
            {
                //Game1.showRedMessage("STEP 1");

                if (cObj.Category == -74)
                {
                    return(true);
                }
                if (!cObj.performDropDownAction(who))
                {
                    CoreObject @object = (CoreObject)cObj.getOne();
                    @object.shakeTimer   = 50;
                    @object.TileLocation = vector;
                    @object.performDropDownAction(who);
                    if (location.objects.ContainsKey(vector))
                    {
                        if (location.objects[vector].ParentSheetIndex != cObj.ParentSheetIndex)
                        {
                            Game1.createItemDebris(location.objects[vector], vector * (float)Game1.tileSize, Game1.random.Next(4));
                            location.objects[vector] = @object;
                        }
                    }

                    else
                    {
                        //   Game1.showRedMessage("STEP 2");
                        // Log.Info(vector);

                        Vector2 newVec = new Vector2(vector.X, vector.Y);
                        // cObj.boundingBox.Inflate(32, 32);
                        location.objects.Add(newVec, cObj);
                    }
                    @object.initializeLightSource(vector);
                }
                if (playSound == true)
                {
                    Game1.playSound("woodyStep");
                }
                else
                {
                    //  Log.AsyncG("restoring item from file");
                }
                //Log.AsyncM("Placed and object");
                cObj.locationsName = location.Name;
                StardustCore.ModCore.SerializationManager.trackedObjectList.Add(cObj);
                return(true);
            }
        }