From 0e23ffa1a6bf53474a9b73f561a07e7793bd98e0 Mon Sep 17 00:00:00 2001 From: Enerdy Date: Sat, 4 Jul 2015 17:17:26 +0100 Subject: [PATCH] Fixed issues with BitsByte. TShock should compile again. --- TShockAPI/DB/CharacterManager.cs | 6 +++--- TShockAPI/GetDataHandlers.cs | 9 +++++++- TShockAPI/Utils.cs | 35 ++++++++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) diff --git a/TShockAPI/DB/CharacterManager.cs b/TShockAPI/DB/CharacterManager.cs index 3118ddc3..bd416ad4 100755 --- a/TShockAPI/DB/CharacterManager.cs +++ b/TShockAPI/DB/CharacterManager.cs @@ -87,7 +87,7 @@ namespace TShockAPI.DB playerData.shirtColor = TShock.Utils.DecodeColor(reader.Get("shirtColor")); playerData.underShirtColor = TShock.Utils.DecodeColor(reader.Get("underShirtColor")); playerData.shoeColor = TShock.Utils.DecodeColor(reader.Get("shoeColor")); - playerData.hideVisuals = TShock.Utils.DecodeBitsByte(reader.Get("hideVisuals")); + playerData.hideVisuals = TShock.Utils.DecodeBoolArray(reader.Get("hideVisuals")); playerData.skinColor = TShock.Utils.DecodeColor(reader.Get("skinColor")); playerData.eyeColor = TShock.Utils.DecodeColor(reader.Get("eyeColor")); playerData.questsCompleted = reader.Get("questsCompleted"); @@ -153,7 +153,7 @@ namespace TShockAPI.DB { database.Query( "INSERT INTO tsCharacter (Account, Health, MaxHealth, Mana, MaxMana, Inventory, spawnX, spawnY, 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);", - player.User.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), 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.EncodeBitsByte(player.TPlayer.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished); + player.User.ID, playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), 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.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor),TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished); return true; } catch (Exception ex) @@ -167,7 +167,7 @@ namespace TShockAPI.DB { 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 WHERE Account = @5;", - playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), player.User.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.EncodeBitsByte(player.TPlayer.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished); + playerData.health, playerData.maxHealth, playerData.mana, playerData.maxMana, String.Join("~", playerData.inventory), player.User.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.hideVisual), TShock.Utils.EncodeColor(player.TPlayer.skinColor), TShock.Utils.EncodeColor(player.TPlayer.eyeColor), player.TPlayer.anglerQuestsFinished); return true; } catch (Exception ex) diff --git a/TShockAPI/GetDataHandlers.cs b/TShockAPI/GetDataHandlers.cs index 3431edf6..40cf2214 100755 --- a/TShockAPI/GetDataHandlers.cs +++ b/TShockAPI/GetDataHandlers.cs @@ -1379,6 +1379,8 @@ namespace TShockAPI string name = args.Data.ReadString(); byte hairDye = args.Data.ReadInt8(); BitsByte hideVisual = args.Data.ReadInt8(); + BitsByte hideVisual2 = args.Data.ReadInt8(); + BitsByte hideMisc = args.Data.ReadInt8(); Color hairColor = new Color(args.Data.ReadInt8(), args.Data.ReadInt8(), args.Data.ReadInt8()); args.Data.ReadInt8(); args.Data.ReadInt8(); args.Data.ReadInt8(); // skin color args.Data.ReadInt8(); args.Data.ReadInt8(); args.Data.ReadInt8(); // eye color @@ -1409,7 +1411,12 @@ namespace TShockAPI args.Player.TPlayer.shirtColor = shirtColor; args.Player.TPlayer.underShirtColor = underShirtColor; args.Player.TPlayer.shoeColor = shoeColor; - args.Player.TPlayer.hideVisual = hideVisual; + args.Player.TPlayer.hideVisual = new bool[10]; + for (int i = 0; i < 8; i++) + args.Player.TPlayer.hideVisual[i] = hideVisual[i]; + for (int i = 8; i < 10; i++) + args.Player.TPlayer.hideVisual[i] = hideVisual2[i]; + args.Player.TPlayer.hideMisc = hideMisc; NetMessage.SendData((int)PacketTypes.PlayerInfo, -1, args.Player.Index, args.Player.Name, args.Player.Index); return true; } diff --git a/TShockAPI/Utils.cs b/TShockAPI/Utils.cs index c3f01be3..6bab466f 100644 --- a/TShockAPI/Utils.cs +++ b/TShockAPI/Utils.cs @@ -944,6 +944,41 @@ namespace TShockAPI return new Color(data[0], data[1], data[2], data[3]); } + /// + /// Encodes a Boolean Array as an int. + /// + /// The boolean array to encode. + /// The encoded int. + public int? EncodeBoolArray(bool[] bools) + { + if (bools == null) + return null; + + int result = 0; + for (int i = 0; i < bools.Length; i++) + if (bools[i]) + result |= (1 << i); + + return result; + } + + /// + /// Decodes a Boolean Array from an int. + /// + /// The encoded Boolean Array. + /// The resulting Boolean Array. + public bool[] DecodeBoolArray(int? encodedbools) + { + if (encodedbools == null) + return null; + + bool[] result = new bool[10]; + for (int i = 0; i < result.Length; i++) + result[i] = (encodedbools & 1 << i) != 0; + + return result; + } + /// EncodeBitsByte - Encodes a BitsByte as a byte. /// bitsByte - The BitsByte object /// byte? - The converted byte