From eb445fcdc35613f21cd382f35e19f20f88b15250 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 9 Oct 2017 00:31:31 -0300 Subject: [PATCH] Title list SQL work; Clean-up; --- src/servers/Server_Common/Common.h | 1 + .../Network/PacketDef/Zone/ServerZoneDef.h | 1 - src/servers/Server_Zone/Actor/Player.cpp | 24 ++++++++++++++ src/servers/Server_Zone/Actor/Player.h | 6 +++- .../DebugCommand/DebugCommandHandler.cpp | 8 ++++- .../Network/Handlers/ActionHandler.cpp | 33 +------------------ 6 files changed, 38 insertions(+), 35 deletions(-) diff --git a/src/servers/Server_Common/Common.h b/src/servers/Server_Common/Common.h index 12b97937..07889117 100644 --- a/src/servers/Server_Common/Common.h +++ b/src/servers/Server_Common/Common.h @@ -288,6 +288,7 @@ namespace Core { Aetherytes = 0x00000080, // Attuned aetherytes HomePoint = 0x00000100, // Current homepoint HowTo = 0x00000200, + Title = 0x00000400, HpMp = 0x00000800, QuestTracker = 0x00001000, diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 7c937140..82ae1aea 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -646,7 +646,6 @@ struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket { uint8_t titleList[0x30]; - //uint16_t padding; }; /** diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index e407b214..6bb133c2 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -1420,8 +1420,32 @@ void Core::Entity::Player::setIsLogin( bool bIsLogin ) m_bIsLogin = bIsLogin; } +uint8_t * Core::Entity::Player::getTitleList() +{ + return m_titleList; +} + +void Core::Entity::Player::addTitle( uint16_t titleId ) +{ + uint8_t index = titleId / 8; // Find what index of uint8_t array this title will fit in + + uint8_t bitVal; + + if ( titleId < 8 ) + { + bitVal = titleId; + } + else + { + bitVal = 1 << ( titleId % ( index * 8 ) ); + } + + m_titleList[index] |= bitVal; +} + void Core::Entity::Player::setTitle( uint16_t titleId ) { + // todo: add check to see if player actually has title from titlelist. packet injection n stuff m_title = titleId; sendToInRangeSet( ActorControlPacket142( getId(), SetTitle, titleId ), true ); } diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 3f0a3451..0fcd2b0d 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -328,6 +328,10 @@ public: void teleport( uint16_t aetheryteId, uint8_t type = 1 ); /*! prepares zoning / fades out the screen */ void prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadoutTime = 0, uint16_t animation = 0 ); + /*! get player's title list (available titles) */ + uint8_t * getTitleList(); + /*! add title to player title list */ + void addTitle( uint16_t titleId ); /*! change player's title */ void setTitle( uint16_t titleId ); /*! change gear param state */ @@ -572,7 +576,7 @@ private: } m_retainerInfo[8]; uint16_t m_title; - uint16_t m_titleList[32]; + uint8_t m_titleList[30]; uint8_t m_achievement[16]; uint8_t m_howTo[33]; uint8_t m_homePoint; diff --git a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp index acfbad2c..fbf455bb 100644 --- a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp @@ -311,6 +311,13 @@ void Core::DebugCommandHandler::add( char * data, Core::Entity::PlayerPtr pPlaye pPlayer->addStatusEffect( effect ); } + else if ( subCommand == "title" ) + { + uint32_t titleId; + sscanf( params.c_str(), "%d", &titleId ); + + pPlayer->addTitle( titleId ); + } else if( subCommand == "spawn" ) { int32_t model, name; @@ -333,7 +340,6 @@ void Core::DebugCommandHandler::add( char * data, Core::Entity::PlayerPtr pPlaye pPlayer->queuePacket( pPe ); } else if( subCommand == "actrl" ) - { // temporary research packet diff --git a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp index 1ffb3f20..54b95147 100644 --- a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp @@ -120,40 +120,9 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in } case 0x12F: // Get title list { - g_log.debug( "for real" ); - GamePacketNew< FFXIVIpcPlayerTitleList, ServerZoneIpcType > titleListPacket( pPlayer->getId() ); - //titleListPacket.data().padding = 3; - /* - titleListPacket.data().titleList[0] |= (1 << 1); - titleListPacket.data().titleList[0] |= ( 1 << 2 ); - titleListPacket.data().titleList[0] |= ( 1 << 4 ); - titleListPacket.data().titleList[0] |= ( 1 << 8 ); - titleListPacket.data().titleList[16] |= ( 1 << 2 ); - titleListPacket.data().titleList[20] |= ( 1 << 2 ); - titleListPacket.data().titleList[0x2F] = 0xFF;*/ + memcpy( titleListPacket.data().titleList, pPlayer->getTitleList(), sizeof( titleListPacket.data().titleList ) ); - uint32_t titleId = 182; - uint32_t arrayAcc = titleId / 8; - - uint32_t maskVal; - - if ( titleId < 8 ) - { - maskVal = titleId; - } - else if ( titleId < 16 ) - { - maskVal = ( (titleId) % 8 ); - } - else - { - maskVal = ( titleId % arrayAcc ) + 1; - } - - titleListPacket.data().titleList[arrayAcc] |= ( maskVal ); - - //titleListPacket.data().titleList[6] |= (1 << 1); pPlayer->queuePacket( titleListPacket ); }