From bd1130fe73054c3fe0453b2b2d7a9b6d2f4b5896 Mon Sep 17 00:00:00 2001 From: NotAdam Date: Sat, 6 Jul 2019 15:00:13 +1000 Subject: [PATCH] switch from binary to blobs, fix known array sizes in player obj --- ...0706035254_ConvertFixedSizeDataToBlobs.sql | 15 ++++++ src/common/Database/ZoneDbConnection.cpp | 50 +++++++++++-------- src/common/Network/PacketDef/Ipcs.h | 4 +- src/world/Actor/Player.h | 12 ++--- .../PacketWrappers/PlayerSetupPacket.h | 1 - 5 files changed, 51 insertions(+), 31 deletions(-) create mode 100644 sql/migrations/20190706035254_ConvertFixedSizeDataToBlobs.sql diff --git a/sql/migrations/20190706035254_ConvertFixedSizeDataToBlobs.sql b/sql/migrations/20190706035254_ConvertFixedSizeDataToBlobs.sql new file mode 100644 index 00000000..97b617b5 --- /dev/null +++ b/sql/migrations/20190706035254_ConvertFixedSizeDataToBlobs.sql @@ -0,0 +1,15 @@ +-- Migration generated at 2019/07/06 03:52:54 +-- 20190706035254_ConvertFixedSizeDataToBlobs.sql + +ALTER TABLE `charainfo` + CHANGE COLUMN `TitleList` `TitleList` BLOB NULL DEFAULT NULL AFTER `ActiveTitle`, + CHANGE COLUMN `Achievement` `Achievement` BLOB NULL DEFAULT NULL AFTER `TitleList`, + CHANGE COLUMN `Aetheryte` `Aetheryte` BLOB NULL DEFAULT NULL AFTER `Achievement`, + CHANGE COLUMN `HowTo` `HowTo` BLOB NULL DEFAULT NULL AFTER `Aetheryte`, + CHANGE COLUMN `Minions` `Minions` BLOB NULL DEFAULT NULL AFTER `HowTo`, + CHANGE COLUMN `Mounts` `Mounts` BLOB NULL DEFAULT NULL AFTER `Minions`, + CHANGE COLUMN `Orchestrion` `Orchestrion` BLOB NULL DEFAULT NULL AFTER `Mounts`, + CHANGE COLUMN `QuestCompleteFlags` `QuestCompleteFlags` BLOB NULL DEFAULT NULL AFTER `ConfigFlags`, + CHANGE COLUMN `QuestTracking` `QuestTracking` BLOB NULL DEFAULT NULL AFTER `OpeningSequence`, + CHANGE COLUMN `Discovery` `Discovery` BLOB NULL DEFAULT NULL AFTER `GrandCompanyRank`, + CHANGE COLUMN `Unlocks` `Unlocks` BLOB NULL DEFAULT NULL AFTER `Pose`; diff --git a/src/common/Database/ZoneDbConnection.cpp b/src/common/Database/ZoneDbConnection.cpp index 1c4c5a82..a6ecb50c 100644 --- a/src/common/Database/ZoneDbConnection.cpp +++ b/src/common/Database/ZoneDbConnection.cpp @@ -22,18 +22,20 @@ void Sapphire::Db::ZoneDbConnection::doPrepareStatements() m_stmts.resize( MAX_STATEMENTS ); /// CHARA - prepareStatement( CHARA_SEL, "SELECT ContentId, Name, Hp, Mp, Tp, Gp, Mode, Mount, InvincibleGM, Voice, " - "Customize, ModelMainWeapon, ModelSubWeapon, ModelSystemWeapon, " - "ModelEquip, EmoteModeType, FirstLoginTime, Language, IsNewGame, " - "IsNewAdventurer, TerritoryType, TerritoryId, PosX, PosY, PosZ, PosR, " - "OTerritoryType, OTerritoryId, OPosX, OPosY, OPosZ, OPosR, GuardianDeity, " - "BirthDay, BirthMonth, Class, Status, TotalPlayTime, FirstClass, HomePoint, " - "FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, " - "Aetheryte, HowTo, Minions, Mounts, Orchestrion, EquippedMannequin, ConfigFlags, " - "QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, " - "GrandCompanyRank, Discovery, GMRank, EquipDisplayFlags, Unlocks, CFPenaltyUntil, " - "Pose " - "FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC ); + prepareStatement( CHARA_SEL, + "SELECT ContentId, Name, Hp, Mp, Tp, Gp, Mode, Mount, InvincibleGM, Voice, " + "Customize, ModelMainWeapon, ModelSubWeapon, ModelSystemWeapon, " + "ModelEquip, EmoteModeType, FirstLoginTime, Language, IsNewGame, " + "IsNewAdventurer, TerritoryType, TerritoryId, PosX, PosY, PosZ, PosR, " + "OTerritoryType, OTerritoryId, OPosX, OPosY, OPosZ, OPosR, GuardianDeity, " + "BirthDay, BirthMonth, Class, Status, TotalPlayTime, FirstClass, HomePoint, " + "FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, " + "Aetheryte, HowTo, Minions, Mounts, Orchestrion, EquippedMannequin, ConfigFlags, " + "QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, " + "GrandCompanyRank, Discovery, GMRank, EquipDisplayFlags, Unlocks, CFPenaltyUntil, " + "Pose " + "FROM charainfo WHERE CharacterId = ?;", + CONNECTION_SYNC ); prepareStatement( CHARA_UP, @@ -47,19 +49,23 @@ void Sapphire::Db::ZoneDbConnection::doPrepareStatements() "ActiveTitle = ?, TitleList = ?, Achievement = ?, Aetheryte = ?, HowTo = ?, Minions = ?, Mounts = ?, Orchestrion = ?, " "EquippedMannequin = ?, ConfigFlags = ?, QuestCompleteFlags = ?, OpeningSequence = ?, " "QuestTracking = ?, GrandCompany = ?, GrandCompanyRank = ?, Discovery = ?, GMRank = ?, EquipDisplayFlags = ?, Unlocks = ?, " - "CFPenaltyUntil = ?, Pose = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); + "CFPenaltyUntil = ?, Pose = ? WHERE CharacterId = ?;", + CONNECTION_ASYNC ); - prepareStatement( CHARA_SEL_MINIMAL, "SELECT Name, Customize, ModelMainWeapon, ModelSubWeapon, ModelEquip, TerritoryType, GuardianDeity, " - "Class, ContentId, BirthDay, BirthMonth, EquipDisplayFlags " - "FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC ); + prepareStatement( CHARA_SEL_MINIMAL, + "SELECT Name, Customize, ModelMainWeapon, ModelSubWeapon, ModelEquip, TerritoryType, GuardianDeity, " + "Class, ContentId, BirthDay, BirthMonth, EquipDisplayFlags " + "FROM charainfo WHERE CharacterId = ?;", + CONNECTION_SYNC ); - prepareStatement( CHARA_INS, "INSERT INTO charainfo (AccountId, CharacterId, ContentId, Name, Hp, Mp, " - "Customize, Voice, IsNewGame, TerritoryType, PosX, PosY, PosZ, PosR, ModelEquip, " - "IsNewAdventurer, GuardianDeity, Birthday, BirthMonth, Class, Status, FirstClass, " - "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " - "Aetheryte, GMRank, Mounts, Orchestrion, UPDATE_DATE ) " - "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );", + prepareStatement( CHARA_INS, + "INSERT INTO charainfo (AccountId, CharacterId, ContentId, Name, Hp, Mp, " + "Customize, Voice, IsNewGame, TerritoryType, PosX, PosY, PosZ, PosR, ModelEquip, " + "IsNewAdventurer, GuardianDeity, Birthday, BirthMonth, Class, Status, FirstClass, " + "HomePoint, StartTown, Discovery, HowTo, QuestCompleteFlags, Unlocks, QuestTracking, " + "Aetheryte, GMRank, Mounts, Orchestrion, UPDATE_DATE ) " + "VALUES ( ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,NOW() );", CONNECTION_SYNC ); prepareStatement( CHARA_UP_NAME, "UPDATE charainfo SET Name = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); diff --git a/src/common/Network/PacketDef/Ipcs.h b/src/common/Network/PacketDef/Ipcs.h index 196c747c..f1c5918b 100644 --- a/src/common/Network/PacketDef/Ipcs.h +++ b/src/common/Network/PacketDef/Ipcs.h @@ -95,7 +95,7 @@ namespace Sapphire::Network::Packets PlayerAddedToBlacklist = 0x0120, // updated 5.0 PlayerRemovedFromBlacklist = 0x0121, // updated 5.0 BlackList = 0x0123, // updated 5.0 - + LinkshellList = 0x012A, // updated 5.0 MailDeleteRequest = 0x012B, // updated 5.0 @@ -152,7 +152,7 @@ namespace Sapphire::Network::Packets CharaNameReq = 0x0198, // updated 5.0 // nb: see #565 on github - UpdateRetainerItemSalePrice = 0x019D, // updated 5.0 + UpdateRetainerItemSalePrice = 0x019F, // updated 5.0 SetLevelSync = 0x1186, // not updated for 4.4, not sure what it is anymore diff --git a/src/world/Actor/Player.h b/src/world/Actor/Player.h index e277738a..08caf559 100644 --- a/src/world/Actor/Player.h +++ b/src/world/Actor/Player.h @@ -1036,19 +1036,19 @@ namespace Sapphire::Entity uint16_t m_activeTitle; uint8_t m_titleList[48]; - uint8_t m_howTo[33]; + uint8_t m_howTo[34]; uint8_t m_minions[40]; - uint8_t m_mountGuide[17]; + uint8_t m_mountGuide[19]; uint8_t m_homePoint; uint8_t m_startTown; uint16_t m_townWarpFstFlags; uint8_t m_questCompleteFlags[476]; - uint8_t m_discovery[421]; + uint8_t m_discovery[445]; uint32_t m_playTime; - uint16_t m_classArray[26]; - uint32_t m_expArray[26]; - uint8_t m_aetheryte[17]; + uint16_t m_classArray[28]; + uint32_t m_expArray[28]; + uint8_t m_aetheryte[21]; uint8_t m_unlocks[64]; uint8_t m_orchestrion[40]; diff --git a/src/world/Network/PacketWrappers/PlayerSetupPacket.h b/src/world/Network/PacketWrappers/PlayerSetupPacket.h index 2424e651..4cd52a8a 100644 --- a/src/world/Network/PacketWrappers/PlayerSetupPacket.h +++ b/src/world/Network/PacketWrappers/PlayerSetupPacket.h @@ -48,7 +48,6 @@ namespace Sapphire::Network::Packets::Server m_data.pose = player.getPose(); memset( &m_data.name[ 0 ], 0, sizeof( m_data.name ) ); - strcpy( &m_data.name[ 0 ], player.getName().c_str() ); memcpy( m_data.aetheryte, player.getAetheryteArray(), sizeof( m_data.aetheryte ) );