From b0d200ef066acc1dfe2d49ea0c8d44af19915ed0 Mon Sep 17 00:00:00 2001 From: GokuWeedLord Date: Sat, 16 Dec 2017 23:00:04 +1100 Subject: [PATCH] fix !set classjob not setting up classes properly --- src/servers/Server_Zone/Actor/Player.cpp | 8 ++++++-- src/servers/Server_Zone/Actor/Player.h | 1 + src/servers/Server_Zone/Actor/PlayerSql.cpp | 10 ++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 0d12b440..ff7131e2 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -802,8 +802,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/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index c00cc37f..087cc6f0 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_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/Server_Zone/Actor/PlayerSql.cpp b/src/servers/Server_Zone/Actor/PlayerSql.cpp index d0c23880..2d92fbb9 100644 --- a/src/servers/Server_Zone/Actor/PlayerSql.cpp +++ b/src/servers/Server_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 );