diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 903a245d..f80190ff 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -80,7 +80,7 @@ namespace TShockAPI /// /// The Tile ID being edited. /// - public ushort EditData { get; set; } + public short EditData { get; set; } /// /// The EditType. /// (KillTile = 0, PlaceTile = 1, KillWall = 2, PlaceWall = 3, KillTileNoItem = 4, PlaceWire = 5, KillWire = 6) @@ -102,7 +102,7 @@ namespace TShockAPI /// TileEdit - called when a tile is placed or destroyed /// public static HandlerList TileEdit; - private static bool OnTileEdit(TSPlayer ply, int x, int y, EditAction action, EditType editDetail, ushort editData, byte style) + private static bool OnTileEdit(TSPlayer ply, int x, int y, EditAction action, EditType editDetail, short editData, byte style) { if (TileEdit == null) return false; @@ -1227,7 +1227,7 @@ namespace TShockAPI {PacketTypes.PlayerSlot, HandlePlayerSlot}, {PacketTypes.TileGetSection, HandleGetSection}, {PacketTypes.UpdateNPCHome, UpdateNPCHome}, - {PacketTypes.PlayerAddBuff, HandlePlayerBuff}, + {PacketTypes.PlayerAddBuff, HandlePlayerAddBuff}, {PacketTypes.ItemDrop, HandleItemDrop}, {PacketTypes.PlayerHp, HandlePlayerHp}, {PacketTypes.PlayerMana, HandlePlayerMana}, @@ -1235,7 +1235,7 @@ namespace TShockAPI {PacketTypes.NpcStrike, HandleNpcStrike}, {PacketTypes.NpcSpecial, HandleSpecial}, {PacketTypes.PlayerAnimation, HandlePlayerAnimation}, - {PacketTypes.PlayerBuff, HandlePlayerBuffUpdate}, + {PacketTypes.PlayerBuff, HandlePlayerBuffList}, {PacketTypes.PasswordSend, HandlePassword}, {PacketTypes.ContinueConnecting2, HandleConnecting}, {PacketTypes.ProjectileDestroy, HandleProjectileKill}, @@ -1779,6 +1779,10 @@ namespace TShockAPI /// These projectiles create tiles on death. /// private static Dictionary projectileCreatesTile = new Dictionary {{42, 53}, {65, 112}, {68, 116}}; + /// + /// Extra place style limits for strange hardcoded values in Terraria + /// + private static Dictionary ExtraneousPlaceStyles = new Dictionary{{TileID.MinecartTrack, 3}}; private static bool HandleTile(GetDataHandlerArgs args) { @@ -1788,7 +1792,7 @@ namespace TShockAPI try { - var editData = args.Data.ReadUInt16(); + var editData = args.Data.ReadInt16(); EditType type = (action == EditAction.KillTile || action == EditAction.KillWall || action == EditAction.KillTileNoItem) ? EditType.Fail @@ -1914,8 +1918,9 @@ namespace TShockAPI } else if (action == EditAction.PlaceTile || action == EditAction.PlaceWall) { - if (action == EditAction.PlaceTile && TShock.Config.PreventInvalidPlaceStyle && - MaxPlaceStyles.ContainsKey(editData) && style > MaxPlaceStyles[editData]) + if ((action == EditAction.PlaceTile && TShock.Config.PreventInvalidPlaceStyle) && + (MaxPlaceStyles.ContainsKey(editData) && style > MaxPlaceStyles[editData]) && + (ExtraneousPlaceStyles.ContainsKey(editData) && style > ExtraneousPlaceStyles[editData])) { args.Player.SendTileSquare(tileX, tileY, 4); return true; @@ -2946,7 +2951,7 @@ namespace TShockAPI return false; } - private static bool HandlePlayerBuff(GetDataHandlerArgs args) + private static bool HandlePlayerAddBuff(GetDataHandlerArgs args) { var id = args.Data.ReadInt8(); var type = args.Data.ReadInt8(); @@ -2957,28 +2962,29 @@ namespace TShockAPI if (TShock.CheckIgnores(args.Player)) { - args.Player.SendData(PacketTypes.PlayerBuff, "", id); + args.Player.SendData(PacketTypes.PlayerAddBuff, "", id); return true; } if (id >= Main.maxPlayers) { + args.Player.SendData(PacketTypes.PlayerAddBuff, "", id); return true; } - if (!TShock.Players[id].TPlayer.hostile) + if (!TShock.Players[id].TPlayer.hostile || !Main.pvpBuff[type]) { - args.Player.SendData(PacketTypes.PlayerBuff, "", id); + args.Player.SendData(PacketTypes.PlayerAddBuff, "", id); return true; } if (TShock.CheckRangePermission(args.Player, TShock.Players[id].TileX, TShock.Players[id].TileY, 50)) { - args.Player.SendData(PacketTypes.PlayerBuff, "", id); + args.Player.SendData(PacketTypes.PlayerAddBuff, "", id); return true; } if ((DateTime.UtcNow - args.Player.LastThreat).TotalMilliseconds < 5000) { - args.Player.SendData(PacketTypes.PlayerBuff, "", id); + args.Player.SendData(PacketTypes.PlayerAddBuff, "", id); return true; } @@ -2987,7 +2993,7 @@ namespace TShockAPI return false; } - args.Player.SendData(PacketTypes.PlayerBuff, "", id); + args.Player.SendData(PacketTypes.PlayerAddBuff, "", id); return true; } @@ -3222,7 +3228,7 @@ namespace TShockAPI return false; } - private static bool HandlePlayerBuffUpdate(GetDataHandlerArgs args) + private static bool HandlePlayerBuffList(GetDataHandlerArgs args) { var id = args.Data.ReadInt8(); @@ -3233,11 +3239,20 @@ namespace TShockAPI { var buff = args.Data.ReadInt8(); + if (TShock.Itembans.ItemBans.Any(s => + { + Item item = new Item(); + item.SetDefaults(s.Name); + return item.buffType == buff; + })) + { + args.Player.SetBuff(buff, 1, true); + continue; + } + if (buff == 10) { - if (TShock.Itembans.ItemIsBanned("Invisibility Potion", args.Player)) - buff = 0; - else if (TShock.Config.DisableInvisPvP && args.TPlayer.hostile) + if (TShock.Config.DisableInvisPvP && args.TPlayer.hostile) buff = 0; } diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 41f4c87c..6306e719 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1536,7 +1536,7 @@ namespace TShockAPI return false; } - public static bool CheckTilePermission(TSPlayer player, int tileX, int tileY, ushort tileType, GetDataHandlers.EditAction actionType) + public static bool CheckTilePermission(TSPlayer player, int tileX, int tileY, short tileType, GetDataHandlers.EditAction actionType) { if (!player.Group.HasPermission(Permissions.canbuild)) { diff --git a/TerrariaServerAPI b/TerrariaServerAPI index e3a885b1..92376508 160000 --- a/TerrariaServerAPI +++ b/TerrariaServerAPI @@ -1 +1 @@ -Subproject commit e3a885b1bda4ce369ba58ec1cd7f5dd10fcd3444 +Subproject commit 9237650872605044f07886ba43c887949ff283e1