From e5cbee82e9a06d798bfe0d696eed25a606f8c994 Mon Sep 17 00:00:00 2001 From: White Date: Fri, 10 Jul 2015 14:34:42 +0930 Subject: [PATCH] Backwards compatibility for databases with pre-existing SSC entries --- TShockAPI/DB/CharacterManager.cs | 7 ++++++- TShockAPI/TSPlayer.cs | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/TShockAPI/DB/CharacterManager.cs b/TShockAPI/DB/CharacterManager.cs index bd416ad4..c6f68cff 100755 --- a/TShockAPI/DB/CharacterManager.cs +++ b/TShockAPI/DB/CharacterManager.cs @@ -77,7 +77,12 @@ namespace TShockAPI.DB playerData.maxHealth = reader.Get("MaxHealth"); playerData.mana = reader.Get("Mana"); playerData.maxMana = reader.Get("MaxMana"); - playerData.inventory = reader.Get("Inventory").Split('~').Select(NetItem.Parse).ToArray(); + List inventory = reader.Get("Inventory").Split('~').Select(NetItem.Parse).ToList(); + if (inventory.Count < NetItem.MaxInventory) + { + inventory.AddRange(new NetItem[NetItem.MaxInventory - inventory.Count]); + } + playerData.inventory = inventory.ToArray(); playerData.spawnX = reader.Get("spawnX"); playerData.spawnY = reader.Get("spawnY"); playerData.hair = reader.Get("hair"); diff --git a/TShockAPI/TSPlayer.cs b/TShockAPI/TSPlayer.cs index 96fba189..69f5e604 100755 --- a/TShockAPI/TSPlayer.cs +++ b/TShockAPI/TSPlayer.cs @@ -1106,6 +1106,13 @@ namespace TShockAPI } } + /// + /// Stores an item at the specific storage slot + /// + /// + /// + /// + /// public void StoreSlot(int slot, int netID, byte prefix, int stack) { if (slot > (this.inventory.Length - 1)) //if the slot is out of range then dont save @@ -1116,6 +1123,10 @@ namespace TShockAPI this.inventory[slot] = new NetItem(netID, stack, prefix); } + /// + /// Copies a characters data to this object + /// + /// public void CopyCharacter(TSPlayer player) { this.health = player.TPlayer.statLife > 0 ? player.TPlayer.statLife : 1; @@ -1192,6 +1203,7 @@ namespace TShockAPI NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots) { + //98-138 var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots); this.inventory[i] = (NetItem)piggy[index]; @@ -1200,17 +1212,23 @@ namespace TShockAPI NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots + NetItem.SafeSlots) { + //138-178 var index = i - (NetItem.InventorySlots + NetItem.ArmorSlots + NetItem.DyeSlots + NetItem.MiscEquipSlots + NetItem.MiscDyeSlots + NetItem.PiggySlots); this.inventory[i] = (NetItem)safe[index]; } else { + //179 this.inventory[i] = (NetItem)trash; } } } + /// + /// Restores a player's character to the state stored in the database + /// + /// public void RestoreCharacter(TSPlayer player) { // Start ignoring SSC-related packets! This is critical so that we don't send or receive dirty data!