public override bool UseItem(Player player)                   // allows us to change what happens when we use an item
 {
     if (player.whoAmI != Main.myPlayer && !player.noBuilding) // Checks if the player is the right one, and not another player etc in multiplayer
     {
         return(false);
     }
     {
         int     range       = 2; // extra tool range after default range
         Vector2 adjustedPos = player.position / 16;
         float   xDist       = Math.Abs(Player.tileTargetX - adjustedPos.X);
         float   yDist       = Math.Abs(Player.tileTargetY - adjustedPos.Y);
         if (xDist > Player.tileRangeX + range || yDist > Player.tileRangeY + range)
         {
             return(false);
         }
     }
     // Thanks to mariothedog, Champion Mod for this range check^
     {
         Point16 tilepos = Main.MouseWorld.ToTileCoordinates16();                                   // grabs the x & y cooordinates from where the mouse is currently at
         // thanks to absoluteAquarian for telling me about point16 for easy mouse pos checking
         Main.PlaySound(SoundID.Splash, (int)player.position.X, (int)player.position.Y, 1, 1f, 0f); // plays soundid 19(splash) when using the item at the player
         Main.tile[tilepos.X, tilepos.Y].liquidType(2);                                             // decides what type of liquid to should be at x & y
         Main.tile[tilepos.X, tilepos.Y].liquid = byte.MaxValue;                                    // decides what amount of liquid should be at x & y
         if (Main.netMode == NetmodeID.MultiplayerClient)                                           // checks if its singleplayer or multiplayer
         {
             NetMessage.sendWater(tilepos.X, tilepos.Y);                                            // if its multiplayer send a message to the server that we are sending liquid
         }
         else
         {
             Liquid.AddWater(tilepos.X, tilepos.Y); // if its singleplayer just add the liquid
         }
         return(true);
     }
 }
        public static void AddLiquidToCursor(bool isWater)
        {
            int x = tileTargetX, y = tileTargetY;

            if (Main.tile[x, y] == null)
            {
                Main.tile[x, y] = new Tile();
            }

            Main.PlaySound(19, (int)me.position.X, (int)me.position.Y, 1);
            Main.tile[x, y].lava   = !isWater;
            Main.tile[x, y].liquid = 255;

            if (Main.netMode == 1)
            {
                NetMessage.sendWater(x, y);
            }
            else
            {
                Liquid.AddWater(x, y);
            }
        }
Beispiel #3
0
        public override void HitWire(int i, int j)
        {
            int x = i - (Main.tile[i, j].frameX / 18) % 3;
            int y = j - (Main.tile[i, j].frameY / 18) % 3;

            Wiring.SkipWire(x, y);
            Wiring.SkipWire(x, y + 1);
            Wiring.SkipWire(x, y + 2);
            Wiring.SkipWire(x + 1, y);
            Wiring.SkipWire(x + 1, y + 1);
            Wiring.SkipWire(x + 1, y + 2);
            Wiring.SkipWire(x + 2, y);
            Wiring.SkipWire(x + 2, y + 1);
            Wiring.SkipWire(x + 2, y + 2);
            for (int l = x; l < x + 3; l++)
            {
                for (int m = y; m < y + 3; m++)
                {
                    if (Main.tile[l, m].liquid > 0)
                    {
                        Main.PlaySound(19, x * 16, y * 16, 1);
                        Main.tile[l, m].liquid = 0;
                        Main.tile[l, m].lava(false);
                        Main.tile[l, m].honey(false);
                        WorldGen.SquareTileFrame(l, m, false);
                        if (Main.netMode == 1)
                        {
                            NetMessage.sendWater(l, m);
                        }
                        else
                        {
                            Liquid.AddWater(l, m);
                        }
                    }
                }
            }
        }
Beispiel #4
0
            //Made a new method for this because I felt like it :P
            public static void CircleOfLiquid(int x, int y, int radius, LiquidType liquidType, bool chanceEdges = true, int chanceEdgeChance = 3)
            {
                int yStart = y - radius;

                for (int i = x - radius; i < x + radius; i++)
                {
                    for (int j = yStart; j < y + radius; j++)
                    {
                        float distance = Math.Abs(Vector2.Distance(new Vector2(i, j), new Vector2(x, y)));
                        if (distance > radius - 1.1f)
                        {
                            if (Main.rand.Next(chanceEdgeChance) == 0)
                            {
                                goto Fin;
                            }
                        }
                        if (distance < radius)
                        {
                            if (Main.tile[i, j] == null)
                            {
                                Main.tile[i, j] = new Tile();
                            }
                            Main.tile[i, j].active(false);
                            if (liquidType == LiquidType.Lava)
                            {
                                Main.tile[i, j].lava(true);
                            }
                            else
                            {
                                Liquid.AddWater(i, j);
                            }
                            Main.tile[i, j].liquid = 255;
                        }
                        Fin :;
                    }
                }
            }
Beispiel #5
0
        internal static bool PlaceLiquids(Player player, int x, int y, Liquids liquid)
        {
            if (Main.netMode != NetmodeID.Server)
            {
                Tile tileSafely = Framing.GetTileSafely(x, y);
                if (player.whoAmI == Main.myPlayer && (!tileSafely.nactive() || !Main.tileSolid[tileSafely.type] || Main.tileSolidTop[tileSafely.type]))
                {
                    tileSafely.liquidType((int)liquid);
                    tileSafely.liquid = 255;
                    WorldGen.SquareTileFrame(x, y, true);
                    if (Main.netMode == NetmodeID.MultiplayerClient)
                    {
                        NetMessage.sendWater(x, y);
                    }
                    else
                    {
                        Liquid.AddWater(x, y);
                    }

                    return(true);
                }
            }
            return(false);
        }
Beispiel #6
0
        public override bool UseItem(Player player)
        {
            if (player.whoAmI == Main.myPlayer)
            {
                if (player.wet)
                {
                    int num522 = Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType();
                    int num521 = 0;
                    for (int num520 = Player.tileTargetX - 1; num520 <= Player.tileTargetX + 1; num520++)
                    {
                        for (int num515 = Player.tileTargetY - 1; num515 <= Player.tileTargetY + 1; num515++)
                        {
                            if (Main.tile[num520, num515].liquidType() == num522)
                            {
                                num521 += Main.tile[num520, num515].liquid;
                            }
                        }
                    }
                    if (Main.tile[Player.tileTargetX, Player.tileTargetY].liquid > 0 && (num521 > 100 || item.type == 3032))
                    {
                        int liquidType = Main.tile[Player.tileTargetX, Player.tileTargetY].liquidType();

                        Main.PlaySound(19, (int)item.position.X, (int)item.position.Y, 1, 1f, 0f);
                        player.itemTime = PlayerHooks.TotalUseTime(item.useTime, player, item);
                        int num519 = Main.tile[Player.tileTargetX, Player.tileTargetY].liquid;
                        Main.tile[Player.tileTargetX, Player.tileTargetY].liquid = 0;
                        if (Main.rand.NextFloat() < .0450f)
                        { //4.5%
                            Item.NewItem(player.getRect(), ItemID.CopperOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0450f)
                        { //7%
                            Item.NewItem(player.getRect(), ItemID.TinOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0250f)
                        { //5%
                            Item.NewItem(player.getRect(), ItemID.IronOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0250f)
                        { //5%
                            Item.NewItem(player.getRect(), ItemID.LeadOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0200f)
                        { //4%
                            Item.NewItem(player.getRect(), ItemID.SilverOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0200f)
                        { //4%
                            Item.NewItem(player.getRect(), ItemID.TungstenOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0100f)
                        { //2%
                            Item.NewItem(player.getRect(), ItemID.GoldOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0100f)
                        { //2%
                            Item.NewItem(player.getRect(), ItemID.PlatinumOre, 1);
                        }
                        if (Main.rand.NextFloat() < .0050f)
                        { //1%
                            Item.NewItem(player.getRect(), ItemID.Obsidian, 1);
                        }
                        Main.tile[Player.tileTargetX, Player.tileTargetY].lava(false);
                        Main.tile[Player.tileTargetX, Player.tileTargetY].honey(false);
                        WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY, false);
                        if (Main.netMode == 1)
                        {
                            NetMessage.sendWater(Player.tileTargetX, Player.tileTargetY);
                        }
                        else
                        {
                            Liquid.AddWater(Player.tileTargetX, Player.tileTargetY);
                        }
                        for (int num518 = Player.tileTargetX - 1; num518 <= Player.tileTargetX + 1; num518++)
                        {
                            for (int num517 = Player.tileTargetY - 1; num517 <= Player.tileTargetY + 1; num517++)
                            {
                                if (num519 < 256 && Main.tile[num518, num517].liquidType() == num522)
                                {
                                    int num516 = Main.tile[num518, num517].liquid;
                                    if (num516 + num519 > 255)
                                    {
                                        num516 = 255 - num519;
                                    }
                                    num519 += num516;
                                    Main.tile[num518, num517].liquid -= (byte)num516;
                                    Main.tile[num518, num517].liquidType(liquidType);
                                    if (Main.tile[num518, num517].liquid == 0)
                                    {
                                        Main.tile[num518, num517].lava(false);
                                        Main.tile[num518, num517].honey(false);
                                    }
                                    WorldGen.SquareTileFrame(num518, num517, false);
                                    if (Main.netMode == 1)
                                    {
                                        NetMessage.sendWater(num518, num517);
                                    }
                                    else
                                    {
                                        Liquid.AddWater(num518, num517);
                                    }
                                }
                            }
                        }
                    }
                }
            } //Thx Dark;Light and Direwolf
            return(true);
        }
Beispiel #7
0
        public override bool UseItem(Player player)
        {
            ModFluid fluid = GetFluid();

            if (player.altFunctionUse == 2)
            {
                if (fluid != null)
                {
                    Tile tile = Main.tile[Player.tileTargetX, Player.tileTargetY];
                    if ((!tile.nactive() || !Main.tileSolid[tile.type] || Main.tileSolidTop[tile.type]) && TileLoader.GetTile(tile.type)?.GetType().GetAttribute <BucketDisablePlacement>() == null)
                    {
                        if (tile.liquid == 0 || tile.liquidType() == fluid.type)
                        {
                            Main.PlaySound(19, (int)player.position.X, (int)player.position.Y);

                            if (tile.liquid == 0)
                            {
                                tile.liquidType(fluid.type);
                            }

                            int volume = Math.Min(fluid.volume, 255 - tile.liquid);
                            tile.liquid  += (byte)volume;
                            fluid.volume -= volume;
                            if (fluid.volume == 0)
                            {
                                fluid = null;
                            }

                            WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY);

                            if (Main.netMode == 1)
                            {
                                NetMessage.sendWater(Player.tileTargetX, Player.tileTargetY);
                            }
                        }
                    }
                }
            }
            else
            {
                if (!Main.GamepadDisableCursorItemIcon)
                {
                    player.showItemIcon = true;
                    Main.ItemIconCacheUpdate(item.type);
                }

                Tile tile = Main.tile[Player.tileTargetX, Player.tileTargetY];
                if ((fluid == null || fluid.type == tile.liquidType()) && tile.liquid > 0 && TileLoader.GetTile(tile.type)?.GetType().GetAttribute <BucketDisablePickup>() == null)
                {
                    Main.PlaySound(19, (int)player.position.X, (int)player.position.Y);

                    if (fluid == null)
                    {
                        fluid = TheOneLibrary.Utility.Utility.SetDefaults(tile.liquidType());
                    }

                    int drain = Math.Min(tile.liquid, TEQETank.MaxVolume - fluid.volume);
                    fluid.volume += drain;

                    tile.liquid -= (byte)drain;

                    if (tile.liquid <= 0)
                    {
                        tile.lava(false);
                        tile.honey(false);
                    }

                    WorldGen.SquareTileFrame(Player.tileTargetX, Player.tileTargetY, false);
                    if (Main.netMode == 1)
                    {
                        NetMessage.sendWater(Player.tileTargetX, Player.tileTargetY);
                    }
                    else
                    {
                        Liquid.AddWater(Player.tileTargetX, Player.tileTargetY);
                    }
                }
            }

            SetFluid(fluid);

            return(true);
        }
Beispiel #8
0
 public override bool Drop(int i, int j)
 {
     Liquid.AddWater(i, j);
     Liquid.AddWater(i, j);
     return(true);
 }
Beispiel #9
0
        public static bool DrainLiquid(int x, int y, byte type)
        {
            int targettedLiquid = Main.tile[x, y].liquidType();
            int nearbyLiquid    = 0;

            for (int i = x - 1; i <= x + 1; i++)
            {
                for (int j = y - 1; j <= y + 1; j++)
                {
                    if (Main.tile[i, j].liquidType() == targettedLiquid)
                    {
                        nearbyLiquid += Main.tile[i, j].liquid;
                    }
                }
            }

            if (Main.tile[x, y].liquid <= 0)
            {
                return(false);
            }

            int liquidType   = Main.tile[x, y].liquidType();
            int liquidAmount = Main.tile[x, y].liquid;

            if (liquidType != type)
            {
                return(false);
            }

            Main.tile[x, y].liquid = 0;

            Main.tile[x, y].lava(lava: false);
            Main.tile[x, y].honey(honey: false);

            WorldGen.SquareTileFrame(x, y, resetFrame: false);

            if (Main.netMode == NetmodeID.MultiplayerClient)
            {
                NetMessage.sendWater(x, y);
            }
            else
            {
                Liquid.AddWater(x, y);
            }

            for (int k = x - 1; k <= x + 1; k++)
            {
                for (int l = y - 1; l <= y + 1; l++)
                {
                    if (liquidAmount < 256 && Main.tile[k, l].liquidType() == targettedLiquid)
                    {
                        int removeAmount = Main.tile[k, l].liquid;
                        if (removeAmount + liquidAmount > 255)
                        {
                            removeAmount = 255 - liquidAmount;
                        }

                        liquidAmount           += removeAmount;
                        Main.tile[k, l].liquid -= (byte)removeAmount;
                        Main.tile[k, l].liquidType(liquidType);
                        if (Main.tile[k, l].liquid == 0)
                        {
                            Main.tile[k, l].lava(lava: false);
                            Main.tile[k, l].honey(honey: false);
                        }

                        WorldGen.SquareTileFrame(k, l, resetFrame: false);
                        if (Main.netMode == NetmodeID.MultiplayerClient)
                        {
                            NetMessage.sendWater(k, l);
                        }
                        else
                        {
                            Liquid.AddWater(k, l);
                        }
                    }
                }
            }

            return(true);
        }
Beispiel #10
0
        internal static bool Sponge(int x, int y, byte amount = 1)
        {
            Tile tileSafely = Framing.GetTileSafely(x, y);

            if (tileSafely.liquidType() == 0)
            {
                int num  = (int)tileSafely.liquidType();
                int num2 = 0;
                for (int i = x - 1; i <= x + 1; i++)
                {
                    for (int j = y - 1; j <= y + 1; j++)
                    {
                        if (WorldGen.InWorld(i, j))
                        {
                            TileSafe(i, j);
                            if ((int)Main.tile[i, j].liquidType() == num)
                            {
                                num2 += (int)Main.tile[i, j].liquid;
                            }
                        }
                    }
                }
                if (tileSafely.liquid >= amount)
                {
                    if (Main.rand.NextBool(6))
                    {
                        int liquidType = (int)tileSafely.liquidType();
                        int num3       = (int)tileSafely.liquid;
                        tileSafely.liquid -= amount;
                        tileSafely.lava(false);
                        tileSafely.honey(false);
                        WorldGen.SquareTileFrame(x, y, false);
                        if (Main.netMode != NetmodeID.SinglePlayer)
                        {
                            NetMessage.sendWater(x, y);
                        }
                        else
                        {
                            Liquid.AddWater(x, y);
                        }
                        for (int k = x - 1; k <= x + 1; k++)
                        {
                            for (int l = y - 1; l <= y + 1; l++)
                            {
                                Tile tileSafely2 = Framing.GetTileSafely(k, l);
                                if (num3 < 256 && (int)tileSafely2.liquidType() == num)
                                {
                                    int num4 = (int)tileSafely2.liquid;
                                    if (num4 + num3 > 255)
                                    {
                                        num4 = 255 - num3;
                                    }
                                    num3 += num4;
                                    Tile tile = tileSafely2;
                                    tile.liquid -= (byte)num4;
                                    tileSafely2.liquidType(liquidType);
                                    if (tileSafely2.liquid == 0)
                                    {
                                        tileSafely2.lava(false);
                                        tileSafely2.honey(false);
                                    }
                                    WorldGen.SquareTileFrame(k, l, false);
                                    if (Main.netMode != NetmodeID.SinglePlayer)
                                    {
                                        NetMessage.sendWater(k, l);
                                    }
                                    else
                                    {
                                        Liquid.AddWater(k, l);
                                    }
                                }
                            }
                        }
                    }
                    return(true);
                }
            }
            return(false);
        }
        internal void Apply(Player player = null)
        {
            foreach (var kv in changedTiles)
            {
                var k = kv.Key;
                var x = k >> 16;
                var y = k & 0xffff;
                var t = kv.Value;

                if (t >= 0)
                {
                    Main.tile.data[x, y] = tiles[t];
                }
            }

            foreach (var eff in sideEffects)
            {
                if (eff == null || eff.Cancel)
                {
                    continue;
                }

                switch (eff.EffectType)
                {
                case SideEffectType.ADD_WATER:
                {
                    Liquid.AddWater(eff.X, eff.Y);
                    break;
                }

                case SideEffectType.SMASH_SHADOW_ORB:
                {
                    WorldModify.shadowOrbSmashed = true;
                    WorldModify.shadowOrbCount++;

                    if (WorldModify.shadowOrbCount >= 3)
                    {
                        WorldModify.shadowOrbCount = 0;

                        var ctx = new HookContext
                        {
                            Connection = player.Connection,
                            Sender     = player,
                            Player     = player,
                        };

                        var args = new HookArgs.PlayerTriggeredEvent
                        {
                            X    = (int)(player.Position.X / 16),
                            Y    = (int)(player.Position.Y / 16),
                            Type = WorldEventType.BOSS,
                            Name = "Eater of Worlds",
                        };

                        HookPoints.PlayerTriggeredEvent.Invoke(ref ctx, ref args);

                        if (!ctx.CheckForKick() && ctx.Result != HookResult.IGNORE)
                        {
                            ProgramLog.Users.Log("{0} @ {1}: Eater of Worlds summoned by {2}.", player.IPAddress, player.whoAmi, player.Name);
                            NetMessage.SendData(Packet.PLAYER_CHAT, -1, -1, string.Concat(player.Name, " has summoned the Eater of Worlds!"), 255, 255, 128, 150);
                            NPC.SpawnOnPlayer(player, player.whoAmi, 13);
                        }
                    }
                    else
                    {
                        string text = "A horrible chill goes down your spine...";
                        if (WorldModify.shadowOrbCount == 2)
                        {
                            text = "Screams echo around you...";
                        }
                        NetMessage.SendData(25, -1, -1, text, 255, 50f, 255f, 130f, 0);
                    }
                    break;
                }

                case SideEffectType.NEW_ITEM:
                {
                    Item.NewItem(eff.X, eff.Y, eff.Width, eff.Height, eff.Type, eff.Stack, eff.NoBroadcast);
                    break;
                }

                case SideEffectType.KILL_SIGN:
                {
                    Sign.KillSign(eff.X, eff.Y);
                    break;
                }

                case SideEffectType.DESTROY_CHEST:
                {
                    Chest.DestroyChest(eff.X, eff.Y);
                    break;
                }

                case SideEffectType.FALLING_BLOCK_PROJECTILE:
                {
                    int p    = Projectile.NewProjectile((float)(eff.X * 16 + 8), (float)(eff.Y * 16 + 8), 0f, 0.41f, eff.Type, 10, 0f, 255);
                    var proj = Main.projectile[p];
                    proj.Creator     = player;
                    proj.Velocity.Y  = 0.5f;
                    proj.Position.Y += 2f;
                    proj.ai[0]       = 1f;
                    NetMessage.SendTileSquare(-1, eff.X, eff.Y, 1);
                    break;
                }
                }
            }
        }