From eb7b76ca2c4b6440f1ac56a4ee9aaa9a69d186e3 Mon Sep 17 00:00:00 2001 From: collett Date: Wed, 26 Feb 2020 08:10:42 +0900 Subject: [PATCH 1/2] Solve the mystery of second quest now showing in gridania or limsa. --- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index d8b90a7c..daf50c8a 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -973,6 +973,7 @@ namespace Sapphire::Network::Packets::Server unsigned char expansion; unsigned char unknown76; unsigned char unknown77; + unsigned char very_unknown; unsigned char race; unsigned char tribe; unsigned char gender; @@ -999,7 +1000,7 @@ namespace Sapphire::Network::Packets::Server unsigned char craftingMasterMask; unsigned char unknown95[9]; unsigned char unknown9F[2]; - unsigned char unknownA1[3]; + unsigned char unknownA1[6]; unsigned int exp[Common::CLASSJOB_SLOTS]; unsigned int unknown108; unsigned int pvpTotalExp; @@ -1020,7 +1021,7 @@ namespace Sapphire::Network::Packets::Server unsigned char companionDefRank; unsigned char companionAttRank; unsigned char companionHealRank; - unsigned char u19[13]; + unsigned char u19[9]; unsigned char mountGuideMask[22]; char name[32]; unsigned char unknownOword[16]; From 474ae240dc07ecc41ad281c22bcd95e61d0944b7 Mon Sep 17 00:00:00 2001 From: collett Date: Thu, 27 Feb 2020 00:59:28 +0900 Subject: [PATCH 2/2] Should not gain any exp past max level. --- src/world/Actor/Player.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/world/Actor/Player.cpp b/src/world/Actor/Player.cpp index 2e18b010..8677d001 100644 --- a/src/world/Actor/Player.cpp +++ b/src/world/Actor/Player.cpp @@ -693,30 +693,34 @@ bool Sapphire::Entity::Player::isActionLearned( uint8_t actionId ) const void Sapphire::Entity::Player::gainExp( uint32_t amount ) { - auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); - uint32_t currentExp = getExp(); uint16_t level = getLevel(); + if( level >= Common::MAX_PLAYER_LEVEL ) + { + setExp( 0 ); + if( currentExp != 0 ) + queuePacket( makeActorControlSelf( getId(), UpdateUiExp, static_cast< uint8_t >( getClass() ), 0 ) ); + return; + } + + auto pExdData = m_pFw->get< Data::ExdDataGenerated >(); + uint32_t neededExpToLevel = pExdData->get< Sapphire::Data::ParamGrow >( level )->expToNext; uint32_t neededExpToLevelplus1 = pExdData->get< Sapphire::Data::ParamGrow >( level + 1 )->expToNext; queuePacket( makeActorControlSelf( getId(), GainExpMsg, static_cast< uint8_t >( getClass() ), amount ) ); - if( level >= Common::MAX_PLAYER_LEVEL ) // temporary fix for leveling over levelcap - { - queuePacket( makeActorControlSelf( getId(), UpdateUiExp, static_cast< uint8_t >( getClass() ), amount ) ); - return; - } - if( ( currentExp + amount ) >= neededExpToLevel ) { // levelup amount = ( currentExp + amount - neededExpToLevel ) > neededExpToLevelplus1 ? neededExpToLevelplus1 - 1 : ( currentExp + amount - neededExpToLevel ); + if( level + 1 >= Common::MAX_PLAYER_LEVEL ) + amount = 0; setExp( amount ); gainLevel(); queuePacket( makeActorControlSelf( getId(), UpdateUiExp, static_cast< uint8_t >( getClass() ), amount ) );