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); } }
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); } } } } }
//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 :; } } }
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); }
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); }
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); }
public override bool Drop(int i, int j) { Liquid.AddWater(i, j); Liquid.AddWater(i, j); return(true); }
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); }
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; } } } }