From 156df4777750ca3f4c8bd3d589924fb9c93cb20b Mon Sep 17 00:00:00 2001 From: DogooFalchion Date: Sun, 23 Oct 2016 18:10:30 -0400 Subject: [PATCH] Add mechanism to upload a specific PlayerData to a player. --- TShockAPI/DB/CharacterManager.cs | 102 +++++++++++++++++++++++++++++-- 1 file changed, 96 insertions(+), 6 deletions(-) diff --git a/TShockAPI/DB/CharacterManager.cs b/TShockAPI/DB/CharacterManager.cs index e2461205..57f28560 100755 --- a/TShockAPI/DB/CharacterManager.cs +++ b/TShockAPI/DB/CharacterManager.cs @@ -131,15 +131,15 @@ namespace TShockAPI.DB string initialItems = String.Join("~", items.Take(NetItem.MaxInventory)); try { - database.Query("INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8);", + database.Query("INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8);", user.ID, TShock.ServerSideCharacterConfig.StartingHealth, TShock.ServerSideCharacterConfig.StartingHealth, TShock.ServerSideCharacterConfig.StartingMana, - TShock.ServerSideCharacterConfig.StartingMana, - initialItems, - -1, - -1, + TShock.ServerSideCharacterConfig.StartingMana, + initialItems, + -1, + -1, 0); return true; } @@ -159,7 +159,7 @@ namespace TShockAPI.DB public bool InsertPlayerData(TSPlayer player) { PlayerData playerData = player.PlayerData; - + if (!player.IsLoggedIn) return false; @@ -219,5 +219,95 @@ namespace TShockAPI.DB return false; } + + /// + /// Inserts a specific PlayerData into the SSC table for a player. + /// + /// The player to store the data for. + /// The player data to store. + /// If the command succeeds. + public bool InsertSpecificPlayerData(TSPlayer player, PlayerData data) + { + PlayerData playerData = data; + + if (!player.IsLoggedIn) + return false; + + if (player.HasPermission(Permissions.bypassssc)) + { + TShock.Log.ConsoleInfo("Skipping SSC Backup for " + player.User.Name); // Debug code + return true; + } + + if (!GetPlayerData(player, player.User.ID).exists) + { + try + { + database.Query( + "INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, extraSlot, spawnX, spawnY, skinVariant, hair, hairDye, hairColor, pantsColor, shirtColor, underShirtColor, shoeColor, hideVisuals, skinColor, eyeColor, questsCompleted) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20);", + player.User.ID, + playerData.health, + playerData.maxHealth, + playerData.mana, + playerData.maxMana, + String.Join("~", playerData.inventory), + playerData.extraSlot, + playerData.spawnX, + playerData.spawnX, + playerData.skinVariant, + playerData.hair, + playerData.hairDye, + TShock.Utils.EncodeColor(playerData.hairColor), + TShock.Utils.EncodeColor(playerData.pantsColor), + TShock.Utils.EncodeColor(playerData.shirtColor), + TShock.Utils.EncodeColor(playerData.underShirtColor), + TShock.Utils.EncodeColor(playerData.shoeColor), + TShock.Utils.EncodeBoolArray(playerData.hideVisuals), + TShock.Utils.EncodeColor(playerData.skinColor), + TShock.Utils.EncodeColor(playerData.eyeColor), + playerData.questsCompleted); + return true; + } + catch (Exception ex) + { + TShock.Log.Error(ex.ToString()); + } + } + else + { + try + { + database.Query( + "UPDATE tsCharacter SET Health = @0, MaxHealth = @1, Mana = @2, MaxMana = @3, Inventory = @4, spawnX = @6, spawnY = @7, hair = @8, hairDye = @9, hairColor = @10, pantsColor = @11, shirtColor = @12, underShirtColor = @13, shoeColor = @14, hideVisuals = @15, skinColor = @16, eyeColor = @17, questsCompleted = @18, skinVariant = @19, extraSlot = @20 WHERE Account = @5;", + playerData.health, + playerData.maxHealth, + playerData.mana, + playerData.maxMana, + String.Join("~", playerData.inventory), + player.User.ID, + playerData.spawnX, + playerData.spawnX, + playerData.skinVariant, + playerData.hair, + playerData.hairDye, + TShock.Utils.EncodeColor(playerData.hairColor), + TShock.Utils.EncodeColor(playerData.pantsColor), + TShock.Utils.EncodeColor(playerData.shirtColor), + TShock.Utils.EncodeColor(playerData.underShirtColor), + TShock.Utils.EncodeColor(playerData.shoeColor), + TShock.Utils.EncodeBoolArray(playerData.hideVisuals), + TShock.Utils.EncodeColor(playerData.skinColor), + TShock.Utils.EncodeColor(playerData.eyeColor), + playerData.questsCompleted, + playerData.extraSlot ?? 0); + return true; + } + catch (Exception ex) + { + TShock.Log.Error(ex.ToString()); + } + } + return false; + } } }