diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index c9fdd3f2..6365098b 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -801,8 +801,12 @@ void Core::Entity::Player::setLevel( uint8_t level ) void Core::Entity::Player::setLevelForClass( uint8_t level, Common::ClassJob classjob ) { - uint8_t classJobIndex = g_exdData.m_classJobInfoMap[static_cast< uint8_t >( classjob )].exp_idx; - m_classArray[classJobIndex] = level; + uint8_t classJobIndex = g_exdData.m_classJobInfoMap[static_cast< uint8_t >( classjob )].exp_idx; + + if( m_classArray[classJobIndex] == 0 ) + insertDbClass( classJobIndex ); + + m_classArray[classJobIndex] = level; } void Core::Entity::Player::sendModel() diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index 6bc4c30d..ea7b7027 100644 --- a/src/servers/sapphire_zone/Actor/Player.h +++ b/src/servers/sapphire_zone/Actor/Player.h @@ -534,6 +534,7 @@ public: void insertQuest( uint16_t questId, uint8_t index, uint8_t seq ) const; void updateDbSearchInfo() const; void updateDbClass() const; + void insertDbClass( const uint8_t classJobIndex ) const; void setMarkedForRemoval(); bool isMarkedForRemoval() const; diff --git a/src/servers/sapphire_zone/Actor/PlayerSql.cpp b/src/servers/sapphire_zone/Actor/PlayerSql.cpp index 1e337fd2..5a242c52 100644 --- a/src/servers/sapphire_zone/Actor/PlayerSql.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerSql.cpp @@ -437,6 +437,16 @@ void Core::Entity::Player::updateDbClass() const g_charaDb.execute( stmtS ); } +void Core::Entity::Player::insertDbClass( const uint8_t classJobIndex ) const +{ + auto stmtClass = g_charaDb.getPreparedStatement( Db::CHARA_CLASS_INS ); + stmtClass->setInt( 1, getId() ); + stmtClass->setInt( 2, classJobIndex ); + stmtClass->setInt( 3, 0 ); + stmtClass->setInt( 4, 1 ); + g_charaDb.directExecute( stmtClass ); +} + void Core::Entity::Player::updateDbSearchInfo() const { auto stmtS = g_charaDb.getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTCLASS );