Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 45 additions & 9 deletions TShockAPI/DB/CharacterManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,16 @@ public CharacterManager(IDbConnection db)
new SqlColumn("usingBiomeTorches", MySqlDbType.Int32),
new SqlColumn("happyFunTorchTime", MySqlDbType.Int32),
new SqlColumn("unlockedBiomeTorches", MySqlDbType.Int32),
new SqlColumn("currentLoadoutIndex", MySqlDbType.Int32)
new SqlColumn("currentLoadoutIndex", MySqlDbType.Int32),
new SqlColumn("ateArtisanBread", MySqlDbType.Int32),
new SqlColumn("usedAegisCrystal", MySqlDbType.Int32),
new SqlColumn("usedAegisFruit", MySqlDbType.Int32),
new SqlColumn("usedArcaneCrystal", MySqlDbType.Int32),
new SqlColumn("usedGalaxyPearl", MySqlDbType.Int32),
new SqlColumn("usedGummyWorm", MySqlDbType.Int32),
new SqlColumn("usedAmbrosia", MySqlDbType.Int32),
new SqlColumn("unlockedSuperCart", MySqlDbType.Int32),
new SqlColumn("enabledSuperCart", MySqlDbType.Int32)
);
var creator = new SqlTableCreator(db,
db.GetSqlType() == SqlType.Sqlite
Expand Down Expand Up @@ -116,6 +125,15 @@ public PlayerData GetPlayerData(TSPlayer player, int acctid)
playerData.happyFunTorchTime = reader.Get<int>("happyFunTorchTime");
playerData.unlockedBiomeTorches = reader.Get<int>("unlockedBiomeTorches");
playerData.currentLoadoutIndex = reader.Get<int>("currentLoadoutIndex");
playerData.ateArtisanBread = reader.Get<int>("ateArtisanBread");
playerData.usedAegisCrystal = reader.Get<int>("usedAegisCrystal");
playerData.usedAegisFruit = reader.Get<int>("usedAegisFruit");
playerData.usedArcaneCrystal = reader.Get<int>("usedArcaneCrystal");
playerData.usedGalaxyPearl = reader.Get<int>("usedGalaxyPearl");
playerData.usedGummyWorm = reader.Get<int>("usedGummyWorm");
playerData.usedAmbrosia = reader.Get<int>("usedAmbrosia");
playerData.unlockedSuperCart = reader.Get<int>("unlockedSuperCart");
playerData.enabledSuperCart = reader.Get<int>("enabledSuperCart");
return playerData;
}
}
Expand Down Expand Up @@ -182,8 +200,8 @@ public bool InsertPlayerData(TSPlayer player, bool fromCommand = false)
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, usingBiomeTorches, happyFunTorchTime, unlockedBiomeTorches, currentLoadoutIndex) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20, @21, @22, @23, @24);",
player.Account.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), playerData.extraSlot, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.skinVariant, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor),TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex);
"INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, extraSlot, spawnX, spawnY, skinVariant, hair, hairDye, hairColor, pantsColor, shirtColor, underShirtColor, shoeColor, hideVisuals, skinColor, eyeColor, questsCompleted, usingBiomeTorches, happyFunTorchTime, unlockedBiomeTorches, currentLoadoutIndex,ateArtisanBread, usedAegisCrystal, usedAegisFruit, usedArcaneCrystal, usedGalaxyPearl, usedGummyWorm, usedAmbrosia, unlockedSuperCart, enabledSuperCart) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20, @21, @22, @23, @24, @25, @26, @27, @28, @29, @30, @31, @32, @33);",
player.Account.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), playerData.extraSlot, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.skinVariant, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor),TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex, player.TPlayer.ateArtisanBread ? 1 : 0, player.TPlayer.usedAegisCrystal ? 1 : 0, player.TPlayer.usedAegisFruit ? 1 : 0, player.TPlayer.usedArcaneCrystal ? 1 : 0, player.TPlayer.usedGalaxyPearl ? 1 : 0, player.TPlayer.usedGummyWorm ? 1 : 0, player.TPlayer.usedAmbrosia ? 1 : 0, player.TPlayer.unlockedSuperCart ? 1 : 0, player.TPlayer.enabledSuperCart ? 1 : 0);
return true;
}
catch (Exception ex)
Expand All @@ -196,8 +214,8 @@ public bool InsertPlayerData(TSPlayer player, bool fromCommand = false)
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, usingBiomeTorches = @21, happyFunTorchTime = @22, unlockedBiomeTorches = @23, currentLoadoutIndex = @24 WHERE Account = @5;",
playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), player.Account.ID, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor), TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.skinVariant, player.TPlayer.extraAccessory ? 1 : 0, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex);
"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, usingBiomeTorches = @21, happyFunTorchTime = @22, unlockedBiomeTorches = @23, currentLoadoutIndex = @24, ateArtisanBread = @25, usedAegisCrystal = @26, usedAegisFruit = @27, usedArcaneCrystal = @28, usedGalaxyPearl = @29, usedGummyWorm = @30, usedAmbrosia = @31, unlockedSuperCart = @32, enabledSuperCart = @33 WHERE Account = @5;",
playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), player.Account.ID, player.TPlayer.SpawnX, player.TPlayer.SpawnY, player.TPlayer.hair, player.TPlayer.hairDye, TShock.Utils.EncodeColor(player.TPlayer.hairColor), TShock.Utils.EncodeColor(player.TPlayer.pantsColor), TShock.Utils.EncodeColor(player.TPlayer.shirtColor), TShock.Utils.EncodeColor(player.TPlayer.underShirtColor), TShock.Utils.EncodeColor(player.TPlayer.shoeColor), TShock.Utils.EncodeBoolArray(player.TPlayer.hideVisibleAccessory), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished, player.TPlayer.skinVariant, player.TPlayer.extraAccessory ? 1 : 0, player.TPlayer.UsingBiomeTorches ? 1 : 0, player.TPlayer.happyFunTorchTime ? 1 : 0, player.TPlayer.unlockedBiomeTorches ? 1 : 0, player.TPlayer.CurrentLoadoutIndex, player.TPlayer.ateArtisanBread ? 1 : 0, player.TPlayer.usedAegisCrystal ? 1 : 0, player.TPlayer.usedAegisFruit ? 1 : 0, player.TPlayer.usedArcaneCrystal ? 1 : 0, player.TPlayer.usedGalaxyPearl ? 1 : 0, player.TPlayer.usedGummyWorm ? 1 : 0, player.TPlayer.usedAmbrosia ? 1 : 0, player.TPlayer.unlockedSuperCart ? 1 : 0, player.TPlayer.enabledSuperCart ? 1 : 0);
return true;
}
catch (Exception ex)
Expand Down Expand Up @@ -252,7 +270,7 @@ public bool InsertSpecificPlayerData(TSPlayer player, PlayerData data)
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, usingBiomeTorches, happyFunTorchTime, unlockedBiomeTorches, currentLoadoutIndex) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20, @21, @22, @23, @24);",
"INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, extraSlot, spawnX, spawnY, skinVariant, hair, hairDye, hairColor, pantsColor, shirtColor, underShirtColor, shoeColor, hideVisuals, skinColor, eyeColor, questsCompleted, usingBiomeTorches, happyFunTorchTime, unlockedBiomeTorches, currentLoadoutIndex, ateArtisanBread, usedAegisCrystal, usedAegisFruit, usedArcaneCrystal, usedGalaxyPearl, usedGummyWorm, usedAmbrosia, unlockedSuperCart, enabledSuperCart) VALUES (@0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18, @19, @20, @21, @22, @23, @24, @25, @26, @27, @28, @29, @30, @31, @32, @33);",
player.Account.ID,
playerData.health,
playerData.maxHealth,
Expand All @@ -277,7 +295,16 @@ public bool InsertSpecificPlayerData(TSPlayer player, PlayerData data)
playerData.usingBiomeTorches,
playerData.happyFunTorchTime,
playerData.unlockedBiomeTorches,
playerData.currentLoadoutIndex);
playerData.currentLoadoutIndex,
playerData.ateArtisanBread,
playerData.usedAegisCrystal,
playerData.usedAegisFruit,
playerData.usedArcaneCrystal,
playerData.usedGalaxyPearl,
playerData.usedGummyWorm,
playerData.usedAmbrosia,
playerData.unlockedSuperCart,
playerData.enabledSuperCart);
return true;
}
catch (Exception ex)
Expand All @@ -290,7 +317,7 @@ public bool InsertSpecificPlayerData(TSPlayer player, PlayerData data)
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, usingBiomeTorches = @21, happyFunTorchTime = @22, unlockedBiomeTorches = @23, currentLoadoutIndex = @24 WHERE Account = @5;",
"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, usingBiomeTorches = @21, happyFunTorchTime = @22, unlockedBiomeTorches = @23, currentLoadoutIndex = @24, ateArtisanBread = @25, usedAegisCrystal = @26, usedAegisFruit = @27, usedArcaneCrystal = @28, usedGalaxyPearl = @29, usedGummyWorm = @30, usedAmbrosia = @31, unlockedSuperCart = @32, enabledSuperCart = @33 WHERE Account = @5;",
playerData.health,
playerData.maxHealth,
playerData.mana,
Expand All @@ -315,7 +342,16 @@ public bool InsertSpecificPlayerData(TSPlayer player, PlayerData data)
playerData.usingBiomeTorches,
playerData.happyFunTorchTime,
playerData.unlockedBiomeTorches,
playerData.currentLoadoutIndex);
playerData.currentLoadoutIndex,
playerData.ateArtisanBread,
playerData.usedAegisCrystal,
playerData.usedAegisFruit,
playerData.usedArcaneCrystal,
playerData.usedGalaxyPearl,
playerData.usedGummyWorm,
playerData.usedAmbrosia,
playerData.unlockedSuperCart,
playerData.enabledSuperCart);
return true;
}
catch (Exception ex)
Expand Down
19 changes: 19 additions & 0 deletions TShockAPI/GetDataHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2434,6 +2434,16 @@ private static bool HandlePlayerInfo(GetDataHandlerArgs args)
bool usingBiomeTorches = torchFlags[0];
bool happyFunTorchTime = torchFlags[1];
bool unlockedBiomeTorches = torchFlags[2];
bool unlockedSuperCart = torchFlags[3];
bool enabledSuperCart = torchFlags[4];
BitsByte bitsByte10 = args.Data.ReadInt8();
bool usedAegisCrystal = bitsByte10[0];
bool usedAegisFruit = bitsByte10[1];
bool usedArcaneCrystal = bitsByte10[2];
bool usedGalaxyPearl = bitsByte10[3];
bool usedGummyWorm = bitsByte10[4];
bool usedAmbrosia = bitsByte10[5];
bool ateArtisanBread = bitsByte10[6];

if (OnPlayerInfo(args.Player, args.Data, playerid, hair, skinVariant, difficulty, name))
{
Expand Down Expand Up @@ -2482,6 +2492,15 @@ private static bool HandlePlayerInfo(GetDataHandlerArgs args)
args.Player.TPlayer.UsingBiomeTorches = usingBiomeTorches;
args.Player.TPlayer.happyFunTorchTime = happyFunTorchTime;
args.Player.TPlayer.unlockedBiomeTorches = unlockedBiomeTorches;
args.Player.TPlayer.ateArtisanBread = ateArtisanBread;
args.Player.TPlayer.usedAegisCrystal = usedAegisCrystal;
args.Player.TPlayer.usedAegisFruit = usedAegisFruit;
args.Player.TPlayer.usedArcaneCrystal = usedArcaneCrystal;
args.Player.TPlayer.usedGalaxyPearl = usedGalaxyPearl;
args.Player.TPlayer.usedGummyWorm = usedGummyWorm;
args.Player.TPlayer.usedAmbrosia = usedAmbrosia;
args.Player.TPlayer.unlockedSuperCart = unlockedSuperCart;
args.Player.TPlayer.enabledSuperCart = enabledSuperCart;

NetMessage.SendData((int)PacketTypes.PlayerInfo, -1, args.Player.Index, NetworkText.FromLiteral(args.Player.Name), args.Player.Index);
return true;
Expand Down
27 changes: 27 additions & 0 deletions TShockAPI/PlayerData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,15 @@ public class PlayerData
public int happyFunTorchTime;
public int unlockedBiomeTorches;
public int currentLoadoutIndex;
public int ateArtisanBread;
public int usedAegisCrystal;
public int usedAegisFruit;
public int usedArcaneCrystal;
public int usedGalaxyPearl;
public int usedGummyWorm;
public int usedAmbrosia;
public int unlockedSuperCart;
public int enabledSuperCart;

public PlayerData(TSPlayer player)
{
Expand Down Expand Up @@ -122,6 +131,15 @@ public void CopyCharacter(TSPlayer player)
this.happyFunTorchTime = player.TPlayer.happyFunTorchTime ? 1 : 0;
this.unlockedBiomeTorches = player.TPlayer.unlockedBiomeTorches ? 1 : 0;
this.currentLoadoutIndex = player.TPlayer.CurrentLoadoutIndex;
this.ateArtisanBread = player.TPlayer.ateArtisanBread ? 1 : 0;
this.usedAegisCrystal = player.TPlayer.usedAegisCrystal ? 1 : 0;
this.usedAegisFruit = player.TPlayer.usedAegisFruit ? 1 : 0;
this.usedArcaneCrystal = player.TPlayer.usedArcaneCrystal ? 1 : 0;
this.usedGalaxyPearl = player.TPlayer.usedGalaxyPearl ? 1 : 0;
this.usedGummyWorm = player.TPlayer.usedGummyWorm ? 1 : 0;
this.usedAmbrosia = player.TPlayer.usedAmbrosia ? 1 : 0;
this.unlockedSuperCart = player.TPlayer.unlockedSuperCart ? 1 : 0;
this.enabledSuperCart = player.TPlayer.enabledSuperCart ? 1 : 0;

Item[] inventory = player.TPlayer.inventory;
Item[] armor = player.TPlayer.armor;
Expand Down Expand Up @@ -256,6 +274,15 @@ public void RestoreCharacter(TSPlayer player)
player.TPlayer.happyFunTorchTime = this.happyFunTorchTime == 1;
player.TPlayer.unlockedBiomeTorches = this.unlockedBiomeTorches == 1;
player.TPlayer.CurrentLoadoutIndex = this.currentLoadoutIndex;
player.TPlayer.ateArtisanBread = this.ateArtisanBread == 1;
player.TPlayer.usedAegisCrystal = this.usedAegisCrystal == 1;
player.TPlayer.usedAegisFruit = this.usedAegisFruit == 1;
player.TPlayer.usedArcaneCrystal = this.usedArcaneCrystal == 1;
player.TPlayer.usedGalaxyPearl = this.usedGalaxyPearl == 1;
player.TPlayer.usedGummyWorm = this.usedGummyWorm == 1;
player.TPlayer.usedAmbrosia = this.usedAmbrosia == 1;
player.TPlayer.unlockedSuperCart = this.unlockedSuperCart == 1;
player.TPlayer.enabledSuperCart = this.enabledSuperCart == 1;

if (extraSlot != null)
player.TPlayer.extraAccessory = extraSlot.Value == 1 ? true : false;
Expand Down
1 change: 1 addition & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ Use past tense when adding new entries; sign your name off when you add or chang
* Check loadout slots for hacked item stacks. (@drunderscore)
* Fix players being kicked after using the Flamethrower to apply the `OnFire3` debuff for `1200` ticks. (@BashGuy10)
* Fix being kicked for using the new sponge types on liquid. (@BashGuy10)
* Fixed SSC not save `ateArtisanBread`, `usedAegisCrystal`, `usedAegisFruit`, `usedArcaneCrystal`, `usedGalaxyPearl`, `usedGummyWorm`, `usedAmbrosia`, `unlockedSuperCart`, `enabledSuperCart` flags, and Server will correct read them. (@hufang360)
* Allow flask buffs to be applied on town npc due to the Flymeal. Add a permission could skip the buff detection. (@KawaiiYuyu)

## TShock 4.5.18
Expand Down