From 4c2339ccfa20b387915d5077d963c316f4cdfa12 Mon Sep 17 00:00:00 2001 From: amibu Date: Wed, 9 Aug 2017 14:38:46 +0200 Subject: [PATCH] Add "@set classjob" command --- src/servers/Server_Zone/GameCommandHandler.cpp | 16 ++++++++++++++++ src/servers/Server_Zone/Player.cpp | 14 ++++++++++++++ src/servers/Server_Zone/Player.h | 4 ++++ 3 files changed, 34 insertions(+) diff --git a/src/servers/Server_Zone/GameCommandHandler.cpp b/src/servers/Server_Zone/GameCommandHandler.cpp index 9d449372..1a567b95 100644 --- a/src/servers/Server_Zone/GameCommandHandler.cpp +++ b/src/servers/Server_Zone/GameCommandHandler.cpp @@ -243,6 +243,22 @@ void Core::GameCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlayer pPlayer->resetDiscovery(); pPlayer->queuePacket( Network::Packets::Server::InitUIPacket( pPlayer ) ); } + else if( subCommand == "classjob" ) + { + int32_t id; + + sscanf( params.c_str(), "%d", &id ); + + g_log.debug( std::to_string( pPlayer->getLevelForClass( static_cast ( id ) ) ) ); + + if( pPlayer->getLevelForClass( static_cast ( id ) ) == 0 ) + { + pPlayer->setLevelForClass( 1, static_cast ( id ) ); + pPlayer->setClassJob( static_cast ( id ) ); + } + else + pPlayer->setClassJob( static_cast ( id ) ); + } } diff --git a/src/servers/Server_Zone/Player.cpp b/src/servers/Server_Zone/Player.cpp index 66872071..e607be79 100644 --- a/src/servers/Server_Zone/Player.cpp +++ b/src/servers/Server_Zone/Player.cpp @@ -700,6 +700,12 @@ uint8_t Core::Entity::Player::getLevel() const return static_cast< uint8_t >( m_classArray[classJobIndex] ); } +uint8_t Core::Entity::Player::getLevelForClass( Core::Common::ClassJob pClass ) const +{ + uint8_t classJobIndex = g_exdData.m_classJobInfoMap[static_cast< uint8_t >( pClass )].exp_idx; + return static_cast< uint8_t >( m_classArray[classJobIndex] ); +} + uint32_t Core::Entity::Player::getExp() const { uint8_t classJobIndex = g_exdData.m_classJobInfoMap[static_cast< uint8_t >( getClass() )].exp_idx; @@ -755,6 +761,14 @@ void Core::Entity::Player::setLevel( uint8_t level ) setSyncFlag( PlayerSyncFlags::ExpLevel ); } +void Core::Entity::Player::setLevelForClass( uint8_t level, Core::Common::ClassJob classjob ) +{ + uint8_t classJobIndex = g_exdData.m_classJobInfoMap[static_cast< uint8_t >( classjob )].exp_idx; + m_classArray[classJobIndex] = level; + + setSyncFlag( PlayerSyncFlags::ExpLevel ); +} + uint8_t Core::Entity::Player::getUserLevel() const { return m_userLevel; diff --git a/src/servers/Server_Zone/Player.h b/src/servers/Server_Zone/Player.h index 4f2ae69d..1d7b8d22 100644 --- a/src/servers/Server_Zone/Player.h +++ b/src/servers/Server_Zone/Player.h @@ -231,6 +231,8 @@ public: ////////////////////////////////////////////////////////////////////////////////////////////////////// /*! returns the level of the currently active class / job */ uint8_t getLevel() const override; + /*! returns the level of the provided class / job */ + uint8_t getLevelForClass( Core::Common::ClassJob pClass ) const; /*! returns the exp of the currently active class / job */ uint32_t getExp() const; /*! sets the exp of the currently active class / job */ @@ -241,6 +243,8 @@ public: void gainLevel(); /*! set level on the currently active class / job to given level */ void setLevel( uint8_t level ); + /*! set level on the provided class / job to given level */ + void setLevelForClass( uint8_t level, Core::Common::ClassJob classjob ); /*! change class or job to given class / job */ void setClassJob( Core::Common::ClassJob classJob ); /*! returns a pointer to the class array */