diff --git a/TShockAPI/NetItem.cs b/TShockAPI/NetItem.cs index 45cc2a31..8ae60e62 100644 --- a/TShockAPI/NetItem.cs +++ b/TShockAPI/NetItem.cs @@ -41,6 +41,11 @@ namespace TShockAPI /// public static readonly int SafeSlots = PiggySlots; + /// + /// 40 - The number of slots in a forge + /// + public static readonly int ForgeSlots = SafeSlots; + /// /// 59 - The size of the player's inventory (inventory, coins, ammo, held item) /// @@ -69,7 +74,7 @@ namespace TShockAPI /// /// 180 - The inventory size (inventory, held item, armour, dies, coins, ammo, piggy, safe, and trash) /// - public static readonly int MaxInventory = InventorySlots + ArmorSlots + DyeSlots + MiscEquipSlots + MiscDyeSlots + PiggySlots + SafeSlots + 1; + public static readonly int MaxInventory = InventorySlots + ArmorSlots + DyeSlots + MiscEquipSlots + MiscDyeSlots + PiggySlots + SafeSlots + ForgeSlots + 1; [JsonProperty("netID")] private int _netId; diff --git a/TShockAPI/PlayerData.cs b/TShockAPI/PlayerData.cs index eff5baaa..7422bc80 100644 --- a/TShockAPI/PlayerData.cs +++ b/TShockAPI/PlayerData.cs @@ -117,6 +117,7 @@ namespace TShockAPI Item[] miscDyes = player.TPlayer.miscDyes; Item[] piggy = player.TPlayer.bank.item; Item[] safe = player.TPlayer.bank2.item; + Item[] forge = player.TPlayer.bank3.item; Item trash = player.TPlayer.trashItem; for (int i = 0; i < NetItem.MaxInventory; i++) @@ -172,9 +173,18 @@ namespace TShockAPI + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots); this.inventory[i] = (NetItem)safe[index]; } + else if (i < + NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots + + NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots + NetItem.ForgeSlots) + { + //179-219 + var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.ForgeSlots); + this.inventory[i] = (NetItem)forge[index]; + } else { - //179 + //220 this.inventory[i] = (NetItem)trash; } } @@ -320,6 +330,20 @@ namespace TShockAPI player.TPlayer.bank2.item[index].prefix = (byte)this.inventory[i].PrefixId; } } + else if (i < + NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots + + NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots + NetItem.ForgeSlots) + { + var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots); + player.TPlayer.bank3.item[index].netDefaults(this.inventory[i].NetId); + + if (player.TPlayer.bank3.item[index].netID != 0) + { + player.TPlayer.bank3.item[index].stack = this.inventory[i].Stack; + player.TPlayer.bank3.item[index].prefix = (byte)this.inventory[i].PrefixId; + } + } else { player.TPlayer.trashItem.netDefaults(this.inventory[i].NetId); @@ -368,6 +392,11 @@ namespace TShockAPI NetMessage.SendData(5, -1, -1, Main.player[player.Index].bank2.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix); slot++; } + for (int k = 0; k < NetItem.ForgeSlots; k++) + { + NetMessage.SendData(5, -1, -1, Main.player[player.Index].bank3.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix); + slot++; + } NetMessage.SendData(5, -1, -1, Main.player[player.Index].trashItem.name, player.Index, slot, (float)Main.player[player.Index].trashItem.prefix); @@ -411,6 +440,11 @@ namespace TShockAPI NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].bank2.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank2.item[k].prefix); slot++; } + for (int k = 0; k < NetItem.ForgeSlots; k++) + { + NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].bank3.item[k].name, player.Index, slot, (float)Main.player[player.Index].bank3.item[k].prefix); + slot++; + } NetMessage.SendData(5, player.Index, -1, Main.player[player.Index].trashItem.name, player.Index, slot, (float)Main.player[player.Index].trashItem.prefix); diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index 36ae9ac3..c4d06606 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -1926,6 +1926,7 @@ namespace TShockAPI Item[] miscDyes = player.TPlayer.miscDyes; Item[] piggy = player.TPlayer.bank.item; Item[] safe = player.TPlayer.bank2.item; + Item[] forge = player.TPlayer.bank3.item; Item trash = player.TPlayer.trashItem; for (int i = 0; i < NetItem.MaxInventory; i++) @@ -2074,6 +2075,29 @@ namespace TShockAPI } } } + else if (i < + NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots + + NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots + NetItem.ForgeSlots) + { + //179-219 + Item item = new Item(); + var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots); + if (forge[index] != null && forge[index].netID != 0) + { + item.netDefaults(forge[index].netID); + item.Prefix(forge[index].prefix); + item.AffixName(); + + if (forge[index].stack > item.maxStack) + { + check = true; + player.SendMessage( + String.Format("Stack cheat detected. Remove Defender's Forge item {0} ({1}) and then rejoin", item.name, forge[index].stack), + Color.Cyan); + } + } + } else { Item item = new Item(); diff --git a/TerrariaServerAPI b/TerrariaServerAPI index e0eb82d1..9050642f 160000 --- a/TerrariaServerAPI +++ b/TerrariaServerAPI @@ -1 +1 @@ -Subproject commit e0eb82d1f30c18bd954cee215a86367bd2d8b4af +Subproject commit 9050642fb6a98d4f50d97db34f837aaf485d3bf7