diff --git a/sql/update.sql b/sql/update.sql index 38c3fe04..331b0598 100644 --- a/sql/update.sql +++ b/sql/update.sql @@ -47,3 +47,4 @@ ALTER TABLE `charainfo` CHANGE `Mounts` `Mounts` BINARY(15) NULL DEFAULT NULL; ALTER TABLE `charainfo` CHANGE `Orchestrion` `Orchestrion` BINARY(40) NULL DEFAULT NULL; ALTER TABLE `charainfo` CHANGE `Minions` `Minions` BINARY(37) NULL DEFAULT NULL; ALTER TABLE `charainfo` CHANGE `QuestCompleteFlags` `QuestCompleteFlags` VARBINARY(396) NULL DEFAULT NULL; +ALTER TABLE `charainfo` ADD COLUMN `EquipDisplayFlags` INT(3) NULL DEFAULT '0' AFTER `GMRank`; \ No newline at end of file diff --git a/src/common/Common.h b/src/common/Common.h index 08eb1392..a1214d01 100644 --- a/src/common/Common.h +++ b/src/common/Common.h @@ -715,7 +715,7 @@ namespace Common { HideNothing = 0x0, HideHead = 0x1, HideWeapon = 0x2, - LegacyMark = 0x4, + HideLegacyMark = 0x4, Visor = 0x40, }; diff --git a/src/common/Database/CharaDbConnection.cpp b/src/common/Database/CharaDbConnection.cpp index 5dfcd831..215f347c 100644 --- a/src/common/Database/CharaDbConnection.cpp +++ b/src/common/Database/CharaDbConnection.cpp @@ -29,7 +29,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements() "FavoritePoint, RestPoint, StartTown, ActiveTitle, TitleList, Achievement, " "Aetheryte, HowTo, Minions, Mounts, Orchestrion, EquippedMannequin, ConfigFlags, " "QuestCompleteFlags, OpeningSequence, QuestTracking, GrandCompany, " - "GrandCompanyRank, Discovery, GMRank, Unlocks, CFPenaltyUntil " + "GrandCompanyRank, Discovery, GMRank, EquipDisplayFlags, Unlocks, CFPenaltyUntil " "FROM charainfo WHERE CharacterId = ?;", CONNECTION_SYNC ); @@ -43,7 +43,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements() "Class = ?, Status = ?, TotalPlayTime = ?, HomePoint = ?, FavoritePoint = ?, RestPoint = ?, " "ActiveTitle = ?, TitleList = ?, Achievement = ?, Aetheryte = ?, HowTo = ?, Minions = ?, Mounts = ?, Orchestrion = ?, " "EquippedMannequin = ?, ConfigFlags = ?, QuestCompleteFlags = ?, OpeningSequence = ?, " - "QuestTracking = ?, GrandCompany = ?, GrandCompanyRank = ?, Discovery = ?, GMRank = ?, Unlocks = ?, " + "QuestTracking = ?, GrandCompany = ?, GrandCompanyRank = ?, Discovery = ?, GMRank = ?, EquipDisplayFlags = ?, Unlocks = ?, " "CFPenaltyUntil = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); @@ -97,6 +97,7 @@ void Core::Db::CharaDbConnection::doPrepareStatements() prepareStatement( CHARA_UP_GRANDCOMPANYRANKS, "UPDATE charainfo SET GrandCompanyRank = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_DISCOVERY, "UPDATE charainfo SET Discovery = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_GMRANK, "UPDATE charainfo SET GMRank = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); + prepareStatement( CHARA_UP_EQUIPDISPLAYFLAGS, "UPDATE charainfo SET EquipDisplayFlags = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_UNLOCKS, "UPDATE charainfo SET Unlocks = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); prepareStatement( CHARA_UP_CFPENATLY, "UPDATE charainfo SET CFPenaltyUntil = ? WHERE CharacterId = ?;", CONNECTION_ASYNC ); diff --git a/src/common/Database/CharaDbConnection.h b/src/common/Database/CharaDbConnection.h index 420bc7f7..e747a0c2 100644 --- a/src/common/Database/CharaDbConnection.h +++ b/src/common/Database/CharaDbConnection.h @@ -55,6 +55,7 @@ enum CharaDbStatements : uint32_t CHARA_UP_GRANDCOMPANYRANKS, CHARA_UP_DISCOVERY, CHARA_UP_GMRANK, + CHARA_UP_EQUIPDISPLAYFLAGS, CHARA_UP_UNLOCKS, CHARA_UP_CFPENATLY, CHARA_SEARCHINFO_INS, diff --git a/src/servers/sapphire_zone/Actor/PlayerSql.cpp b/src/servers/sapphire_zone/Actor/PlayerSql.cpp index 745bb49c..2cb73926 100644 --- a/src/servers/sapphire_zone/Actor/PlayerSql.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerSql.cpp @@ -153,6 +153,8 @@ bool Core::Entity::Player::load( uint32_t charId, SessionPtr pSession ) m_gmRank = res->getUInt8( "GMRank" ); + m_equipDisplayFlags = res->getUInt8( "EquipDisplayFlags" ); + // Blobs auto howTo = res->getBlobVector( "HowTo" ); @@ -432,13 +434,15 @@ void Core::Entity::Player::updateSql() stmt->setInt( 52, m_gmRank ); + stmt->setInt( 53, m_equipDisplayFlags ); + std::vector< uint8_t > unlockVec( sizeof( m_unlocks ) ); memcpy( unlockVec.data(), m_unlocks, sizeof( m_unlocks ) ); - stmt->setBinary( 53, unlockVec ); + stmt->setBinary( 54, unlockVec ); - stmt->setInt( 54, m_cfPenaltyUntil ); + stmt->setInt( 55, m_cfPenaltyUntil ); - stmt->setInt( 55, m_id ); + stmt->setInt( 56, m_id ); pDb->execute( stmt ); diff --git a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp index 76fb6a99..1e23fd3a 100644 --- a/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/PacketHandlers.cpp @@ -289,6 +289,8 @@ void Core::Network::GameConnection::reqEquipDisplayFlagsHandler( const Packets:: Entity::Player& player ) { player.setEquipDisplayFlags( inPacket.getValAt< uint8_t >( 0x20 ) ); + + player.sendDebug( "EquipDisplayFlag CHANGE: " + std::to_string( player.getEquipDisplayFlags() ) ); } void Core::Network::GameConnection::zoneLineHandler( const Packets::GamePacket& inPacket, diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h index e35524b4..a9b4359c 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/PlayerSpawnPacket.h @@ -111,6 +111,11 @@ namespace Server { m_data.displayFlags |= Entity::Chara::DisplayFlags::Visor; } + if( !( player.getEquipDisplayFlags() & Core::Common::EquipDisplayFlags::HideLegacyMark ) ) + { + m_data.look[0xC] = m_data.look[0xC] | 1 << 7; + } + m_data.currentMount = player.getCurrentMount(); m_data.targetId = player.getTargetId();