From 1c4392cc0af09c6f47dd3dfd279e745d467ee9b1 Mon Sep 17 00:00:00 2001 From: Maru Date: Fri, 6 Oct 2017 20:40:27 -0300 Subject: [PATCH 01/10] Basic title list handling; --- src/servers/Server_Common/Network/PacketDef/Ipcs.h | 1 + .../Network/PacketDef/Zone/ServerZoneDef.h | 10 +++++++++- .../Server_Zone/Network/Handlers/ActionHandler.cpp | 10 ++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/servers/Server_Common/Network/PacketDef/Ipcs.h b/src/servers/Server_Common/Network/PacketDef/Ipcs.h index b4ade11c..22a7ed3f 100644 --- a/src/servers/Server_Common/Network/PacketDef/Ipcs.h +++ b/src/servers/Server_Common/Network/PacketDef/Ipcs.h @@ -114,6 +114,7 @@ namespace Packets { ActorFreeSpawn = 0x0191, // unchanged for sb InitZone = 0x019A, // unchanged for sb WeatherChange = 0x01AF, // updated for sb + PlayerTitleList = 0x01B1, // updated for 4.06 Discovery = 0x01B2, // updated for sb EorzeaTimeOffset = 0x01B4, diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index a9c5905f..bfae778b 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -638,7 +638,15 @@ struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket uint32_t currentExp; uint32_t restedExp; }; - +/** + * Structural representation of the packet sent by the server + * to send the titles available to the player + */ +struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket +{ + char padding; + uint32_t bitmask; +}; /** * Structural representation of the packet sent by the server diff --git a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp index 09d76e94..c98780c5 100644 --- a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp @@ -118,6 +118,16 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in pPlayer->getCurrentAction()->setInterrupted(); break; } + case 0x12F: // Get title list + { + g_log.debug( "for real" ); + /* + GamePacketNew< FFXIVIpcPlayerTitleList, ServerZoneIpcType > titleListPacket( pPlayer->getId() ); + titleListPacket.data().bitmask = 0; + titleListPacket.data().bitmask |= 1; + pPlayer->queuePacket( titleListPacket ); + */ + } case 0x133: // Update howtos seen { uint32_t howToId = static_cast< uint32_t >( param1 ); From a6a35ab8e51b56a0dbb8af154368f80dfcf2ee57 Mon Sep 17 00:00:00 2001 From: Maru Date: Sun, 8 Oct 2017 15:53:00 -0300 Subject: [PATCH 02/10] Please don't look --- .../Server_Common/Network/PacketDef/Zone/ServerZoneDef.h | 5 +++-- src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 131ac089..c95a20ab 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -638,14 +638,15 @@ struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket uint32_t currentExp; uint32_t restedExp; }; + /** * Structural representation of the packet sent by the server * to send the titles available to the player */ struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket { - char padding; - uint32_t bitmask; + uint16_t bitmask; + //uint16_t padding; }; /** diff --git a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp index c98780c5..54bcf15c 100644 --- a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp @@ -121,12 +121,12 @@ 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().bitmask = 0; - titleListPacket.data().bitmask |= 1; pPlayer->queuePacket( titleListPacket ); - */ + } case 0x133: // Update howtos seen { From d59194899cfa85111aae931e7a88faef90207062 Mon Sep 17 00:00:00 2001 From: Maru Date: Sun, 8 Oct 2017 20:26:56 -0300 Subject: [PATCH 03/10] More titlelist stuff (broken for half of the titles); --- .../Network/PacketDef/Zone/ServerZoneDef.h | 2 +- .../Network/Handlers/ActionHandler.cpp | 33 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index c95a20ab..7c937140 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -645,7 +645,7 @@ struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket */ struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket { - uint16_t bitmask; + uint8_t titleList[0x30]; //uint16_t padding; }; diff --git a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp index 54bcf15c..1ffb3f20 100644 --- a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp @@ -121,10 +121,39 @@ 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().bitmask = 0; + /* + 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;*/ + + 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 ); } From 0b2f5c8cd1ffc8e39f9bd9a06331742958e0e681 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 9 Oct 2017 00:31:31 -0300 Subject: [PATCH 04/10] 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 ); } From 13ecfe9906867a304ce003f0ed3fd912b2696319 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 9 Oct 2017 01:56:47 -0300 Subject: [PATCH 05/10] Player title SQL; Handle set player title; --- sql/update.sql | 6 +++- .../Network/PacketDef/Zone/ServerZoneDef.h | 2 +- src/servers/Server_REST/PlayerMinimal.cpp | 5 ++++ src/servers/Server_Zone/Actor/Player.cpp | 28 +++++++++---------- src/servers/Server_Zone/Actor/Player.h | 2 +- src/servers/Server_Zone/Actor/PlayerSql.cpp | 13 ++++++++- .../Network/Handlers/ActionHandler.cpp | 7 ++++- 7 files changed, 44 insertions(+), 19 deletions(-) diff --git a/sql/update.sql b/sql/update.sql index c0f2ed69..67fdb72e 100644 --- a/sql/update.sql +++ b/sql/update.sql @@ -23,5 +23,9 @@ -- ALTER TABLE `charadetail` CHANGE `OpeningSequence` `OpeningSequence` INT(3) NULL DEFAULT '0'; -- ------------------------------------------- -- update.sql Before Merge into Other SQL's 30/08/2017 +-- ------------------------------------------- +-- ALTER TABLE `charadetail` ADD `EquipDisplayFlags` int(3) DEFAULT '0' AFTER `GMRank`; +-- ------------------------------------------- +-- update.sql before titles added 09/10/2017 -ALTER TABLE `charadetail` ADD `EquipDisplayFlags` int(3) DEFAULT '0' AFTER `GMRank`; \ No newline at end of file +ALTER TABLE `charadetail` CHANGE `TitleList` `Titlelist` BINARY(48) NULL DEFAULT NULL; \ No newline at end of file diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 82ae1aea..778f9a08 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -645,7 +645,7 @@ struct FFXIVIpcUpdateClassInfo : FFXIVIpcBasePacket */ struct FFXIVIpcPlayerTitleList : FFXIVIpcBasePacket { - uint8_t titleList[0x30]; + uint8_t titleList[48]; }; /** diff --git a/src/servers/Server_REST/PlayerMinimal.cpp b/src/servers/Server_REST/PlayerMinimal.cpp index 9643a35b..f8c7e1fe 100644 --- a/src/servers/Server_REST/PlayerMinimal.cpp +++ b/src/servers/Server_REST/PlayerMinimal.cpp @@ -175,6 +175,9 @@ namespace Core { char unlocks[64]; memset( unlocks, 0, 64 ); + char titleList[48]; + memset( titleList, 0, 48 ); + int16_t questTracking[5] = { -1, -1, -1, -1, -1 }; uint16_t size = static_cast< uint16_t >( m_lookMap.size() ); @@ -270,6 +273,7 @@ namespace Core { " unlocks, " " QuestTracking, " " Aetheryte, " + " TitleList, " " GMRank, " " UPDATE_DATE ) " " VALUES (" + std::to_string( m_iD ) + ", " @@ -285,6 +289,7 @@ namespace Core { + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)unlocks, 64 ) ) + "'), " + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)questTracking, 10 ) ) + "'), " + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)aetherytes, 12 ) ) + "')," + + "UNHEX('" + std::string( Util::binaryToHexString( (uint8_t*)titleList, 48 ) ) + "')," + std::to_string( m_gmRank ) + ", NOW());" ); diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 6bb133c2..9630f6c3 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -1427,27 +1427,27 @@ uint8_t * Core::Entity::Player::getTitleList() 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 + uint16_t index; + uint8_t value; + Util::valueToFlagByteIndexValue( titleId, value, index ); - uint8_t bitVal; - - if ( titleId < 8 ) - { - bitVal = titleId; - } - else - { - bitVal = 1 << ( titleId % ( index * 8 ) ); - } - - m_titleList[index] |= bitVal; + m_titleList[index] |= value; + setSyncFlag( PlayerSyncFlags::Title ); } void Core::Entity::Player::setTitle( uint16_t titleId ) { - // todo: add check to see if player actually has title from titlelist. packet injection n stuff + uint16_t index; + uint8_t value; + Util::valueToFlagByteIndexValue( titleId, value, index ); + + if ( ( m_titleList[index] & value ) == 0 ) // Player doesn't have title - bail + return; + m_title = titleId; + sendToInRangeSet( ActorControlPacket142( getId(), SetTitle, titleId ), true ); + setSyncFlag( PlayerSyncFlags::Title ); } void Core::Entity::Player::setEquipDisplayFlags( uint8_t state ) diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 0fcd2b0d..6c84849f 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -576,7 +576,7 @@ private: } m_retainerInfo[8]; uint16_t m_title; - uint8_t m_titleList[30]; + uint8_t m_titleList[48]; uint8_t m_achievement[16]; uint8_t m_howTo[33]; uint8_t m_homePoint; diff --git a/src/servers/Server_Zone/Actor/PlayerSql.cpp b/src/servers/Server_Zone/Actor/PlayerSql.cpp index d8cf4194..32141d70 100644 --- a/src/servers/Server_Zone/Actor/PlayerSql.cpp +++ b/src/servers/Server_Zone/Actor/PlayerSql.cpp @@ -82,7 +82,9 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession ) "cd.CFPenaltyUntil, " "cd.OpeningSequence, " "cd.GMRank, " - "cd.EquipDisplayFlags " + "cd.EquipDisplayFlags, " + "cd.ActiveTitle, " + "cd.TitleList " // 40 "FROM charabase AS c " " INNER JOIN charadetail AS cd " " ON c.CharacterId = cd.CharacterId " @@ -176,6 +178,9 @@ bool Core::Entity::Player::load( uint32_t charId, Core::SessionPtr pSession ) m_gmRank = field[37].get< uint8_t >(); m_equipDisplayFlags = field[38].get< uint8_t >(); + m_title = field[39].get< uint8_t >(); + field[40].getBinary( reinterpret_cast< char* >( m_titleList ), sizeof( m_titleList ) ); + m_pCell = nullptr; if( !loadActiveQuests() || !loadClassData() || !loadSearchInfo() ) @@ -316,6 +321,12 @@ void Core::Entity::Player::createUpdateSql() if( m_updateFlags & PlayerSyncFlags::HowTo ) charaDetailSet.insert( " HowTo = UNHEX('" + std::string( Util::binaryToHexString( static_cast< uint8_t* >( m_howTo ), sizeof( m_howTo ) ) ) + "')" ); + if ( m_updateFlags & PlayerSyncFlags::Title ) + { + charaDetailSet.insert( " ActiveTitle = " + std::to_string( m_title ) ); + charaDetailSet.insert( " TitleList = UNHEX('" + std::string( Util::binaryToHexString( reinterpret_cast< uint8_t* >( m_titleList ), sizeof( m_titleList ) ) ) + "')" ); + } + if( m_updateFlags & PlayerSyncFlags::Aetherytes ) charaDetailSet.insert( " Aetheryte = UNHEX('" + std::string( Util::binaryToHexString( reinterpret_cast< uint8_t* >( m_aetheryte ), sizeof( m_aetheryte ) ) ) + "')" ); diff --git a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp index 54b95147..9012ef65 100644 --- a/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/Server_Zone/Network/Handlers/ActionHandler.cpp @@ -118,13 +118,18 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in pPlayer->getCurrentAction()->setInterrupted(); break; } + case 0x12E: // Set player title + { + pPlayer->setTitle( param1 ); + break; + } case 0x12F: // Get title list { GamePacketNew< FFXIVIpcPlayerTitleList, ServerZoneIpcType > titleListPacket( pPlayer->getId() ); memcpy( titleListPacket.data().titleList, pPlayer->getTitleList(), sizeof( titleListPacket.data().titleList ) ); pPlayer->queuePacket( titleListPacket ); - + break; } case 0x133: // Update howtos seen { From 902cb699088bb78fa68a83b1b07aaa3083f8d842 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 9 Oct 2017 02:06:31 -0300 Subject: [PATCH 06/10] Handle title on player spawn; --- src/servers/Server_Zone/Actor/Player.cpp | 5 +++++ src/servers/Server_Zone/Actor/Player.h | 2 ++ .../Network/PacketWrappers/PlayerSpawnPacket.h | 16 +++++++++++----- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 9630f6c3..4f389007 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -1425,6 +1425,11 @@ uint8_t * Core::Entity::Player::getTitleList() return m_titleList; } +uint16_t Core::Entity::Player::getTitle() +{ + return m_title; +} + void Core::Entity::Player::addTitle( uint16_t titleId ) { uint16_t index; diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 6c84849f..ba6b7adf 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -330,6 +330,8 @@ public: 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(); + /*! get player's active title */ + uint16_t Core::Entity::Player::getTitle(); /*! add title to player title list */ void addTitle( uint16_t titleId ); /*! change player's title */ diff --git a/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h b/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h index 00540d78..a2ded446 100644 --- a/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h +++ b/src/servers/Server_Zone/Network/PacketWrappers/PlayerSpawnPacket.h @@ -36,35 +36,41 @@ namespace Server { // TODO: temporary gm rank //m_data.gmRank = 0xff; - - m_data.currentMount = 0; m_data.classJob = pPlayer->getClass(); //m_data.status = static_cast< uint8_t >( pPlayer->getStatus() ); + m_data.hPCurr = pPlayer->getHp(); m_data.mPCurr = pPlayer->getMp(); m_data.tPCurr = pPlayer->getTp(); m_data.hPMax = pPlayer->getMaxHp(); m_data.mPMax = pPlayer->getMaxMp(); - m_data.gmRank = pPlayer->getGmRank(); + //m_data.tPMax = 3000; m_data.level = pPlayer->getLevel(); + m_data.gmRank = pPlayer->getGmRank(); memcpy( m_data.look, pPlayer->getLookArray(), 26 ); + auto item = pPlayer->getInventory()->getItemAt( Inventory::GearSet0, Inventory::EquipSlot::MainHand ); if( item ) m_data.mainWeaponModel = item->getModelId1(); m_data.secWeaponModel = pPlayer->getModelSubWeapon(); + m_data.models[0] = pPlayer->getModelForSlot( Inventory::EquipSlot::Head ); m_data.models[1] = pPlayer->getModelForSlot( Inventory::EquipSlot::Body ); m_data.models[2] = pPlayer->getModelForSlot( Inventory::EquipSlot::Hands ); m_data.models[3] = pPlayer->getModelForSlot( Inventory::EquipSlot::Legs ); m_data.models[4] = pPlayer->getModelForSlot( Inventory::EquipSlot::Feet ); strcpy( m_data.name, pPlayer->getName().c_str() ); + m_data.pos.x = pPlayer->getPos().x; m_data.pos.y = pPlayer->getPos().y; m_data.pos.z = pPlayer->getPos().z; - m_data.voice = pPlayer->getVoiceId(); - m_data.rotation = Math::Util::floatToUInt16Rot( pPlayer->getRotation() ); + + + m_data.title = pPlayer->getTitle(); + m_data.voice = pPlayer->getVoiceId(); + m_data.currentMount = 0; m_data.onlineStatus = static_cast< uint8_t >( pPlayer->getOnlineStatus() ); From 27025eccb0bb33826c197797a1ec20f341c4ac07 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 9 Oct 2017 02:15:57 -0300 Subject: [PATCH 07/10] Final touches; --- .../Server_Zone/DebugCommand/DebugCommandHandler.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp index fbf455bb..1c352c61 100644 --- a/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/Server_Zone/DebugCommand/DebugCommandHandler.cpp @@ -257,13 +257,6 @@ void Core::DebugCommandHandler::set( char * data, Core::Entity::PlayerPtr pPlaye pPlayer->sendModel(); pPlayer->sendDebug( "Model updated" ); } - else if ( subCommand == "title" ) - { - uint32_t titleId; - sscanf( params.c_str(), "%d", &titleId ); - - pPlayer->setTitle( titleId ); - } else { pPlayer->sendUrgent( subCommand + " is not a valid SET command." ); @@ -317,6 +310,7 @@ void Core::DebugCommandHandler::add( char * data, Core::Entity::PlayerPtr pPlaye sscanf( params.c_str(), "%d", &titleId ); pPlayer->addTitle( titleId ); + pPlayer->sendNotice( "Added title (ID: " + std::to_string( titleId ) + ")" ); } else if( subCommand == "spawn" ) { From d22980d6be8bc3a99fff8693bbdf342e0ad12465 Mon Sep 17 00:00:00 2001 From: Maru Date: Mon, 9 Oct 2017 02:59:39 -0300 Subject: [PATCH 08/10] Retry travis build; --- src/servers/Server_Zone/Actor/Player.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index ba6b7adf..b292226e 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -334,7 +334,7 @@ public: uint16_t Core::Entity::Player::getTitle(); /*! add title to player title list */ void addTitle( uint16_t titleId ); - /*! change player's title */ + /*! change player's active title */ void setTitle( uint16_t titleId ); /*! change gear param state */ void setEquipDisplayFlags( uint8_t state ); From 41dbfaf7dada0187d02de5ce0db8d40054a12aa9 Mon Sep 17 00:00:00 2001 From: Mordred <30826167+SapphireMordred@users.noreply.github.com> Date: Mon, 9 Oct 2017 14:12:56 +0200 Subject: [PATCH 09/10] No qualifiers in headers and const method --- src/servers/Server_Zone/Actor/Player.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index b292226e..4f63533b 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -331,7 +331,7 @@ public: /*! get player's title list (available titles) */ uint8_t * getTitleList(); /*! get player's active title */ - uint16_t Core::Entity::Player::getTitle(); + uint16_t getTitle() const; /*! add title to player title list */ void addTitle( uint16_t titleId ); /*! change player's active title */ From 48309f33a9d359aa00bcbdf05702f020340f8d90 Mon Sep 17 00:00:00 2001 From: Mordred <30826167+SapphireMordred@users.noreply.github.com> Date: Mon, 9 Oct 2017 14:13:23 +0200 Subject: [PATCH 10/10] Update Player.cpp --- src/servers/Server_Zone/Actor/Player.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 4f389007..10c4cf2f 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -1425,7 +1425,7 @@ uint8_t * Core::Entity::Player::getTitleList() return m_titleList; } -uint16_t Core::Entity::Player::getTitle() +uint16_t Core::Entity::Player::getTitle() const { return m_title; }