From a1fb3bd41955c0c6a2f1065d2478243e9094490c Mon Sep 17 00:00:00 2001 From: Mordred Date: Wed, 23 Aug 2017 17:39:59 +0200 Subject: [PATCH] Error message now displayed properly when /tell ing unknown char --- .../Server_Common/Network/GamePacket.cpp | 2 +- .../Server_Common/Network/PacketContainer.cpp | 2 ++ src/servers/Server_Zone/Actor/Player.cpp | 3 ++- .../Server_Zone/Network/GameConnection.cpp | 24 +++++++++++++------ .../Network/Handlers/PacketHandlers.cpp | 3 ++- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/src/servers/Server_Common/Network/GamePacket.cpp b/src/servers/Server_Common/Network/GamePacket.cpp index 5ddebcf4..f468e90d 100644 --- a/src/servers/Server_Common/Network/GamePacket.cpp +++ b/src/servers/Server_Common/Network/GamePacket.cpp @@ -50,7 +50,7 @@ Core::Network::Packets::GamePacket::GamePacket( char * pData, uint16_t size, boo *reinterpret_cast< uint32_t* >( &m_dataBuf[0] + 0x18 ) = m_timeStamp; } - m_segHdr._reserved_E = 0; + //m_segHdr._reserved_E = 0; m_segHdr.size = *reinterpret_cast< uint32_t* >( &m_dataBuf[0] ); m_segHdr.type = *reinterpret_cast< uint16_t* >( &m_dataBuf[0] + 0x0C ); m_subType = *reinterpret_cast< uint16_t* >( &m_dataBuf[0] + 0x12 ); diff --git a/src/servers/Server_Common/Network/PacketContainer.cpp b/src/servers/Server_Common/Network/PacketContainer.cpp index 17ebc817..906d3de4 100644 --- a/src/servers/Server_Common/Network/PacketContainer.cpp +++ b/src/servers/Server_Common/Network/PacketContainer.cpp @@ -35,6 +35,8 @@ void Core::Network::Packets::PacketContainer::fillSendBuffer( std::vector< uint8 using namespace std::chrono; auto ms = duration_cast< milliseconds >( system_clock::now().time_since_epoch() ); uint64_t tick = ms.count(); + m_ipcHdr.unknown_0 = 0xE2465DFF41a05252; + m_ipcHdr.unknown_8 = 0x75C4997B4D642A7F; m_ipcHdr.timestamp = tick; m_ipcHdr.unknown_20 = 1; diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 6a7af224..f4899997 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -413,7 +413,8 @@ void Core::Entity::Player::setZone( uint32_t zoneId ) GamePacketNew< FFXIVIpcInitZone, ServerZoneIpcType > initZonePacket( getId() ); initZonePacket.data().zoneId = getCurrentZone()->getLayoutId(); initZonePacket.data().weatherId = static_cast< uint8_t >( getCurrentZone()->getCurrentWeather() ); - initZonePacket.data().bitmask = 0x2A; + initZonePacket.data().bitmask = 0x1; + initZonePacket.data().unknown5 = 0x2A; initZonePacket.data().pos.x = getPos().x; initZonePacket.data().pos.y = getPos().y; initZonePacket.data().pos.z = getPos().z; diff --git a/src/servers/Server_Zone/Network/GameConnection.cpp b/src/servers/Server_Zone/Network/GameConnection.cpp index 62e0fdc7..a56f5c34 100644 --- a/src/servers/Server_Zone/Network/GameConnection.cpp +++ b/src/servers/Server_Zone/Network/GameConnection.cpp @@ -351,27 +351,37 @@ void Core::Network::GameConnection::handlePackets( const Core::Network::Packets: if( !m_pSession && session ) m_pSession = session; + GamePacket pPe( 0x00, 0x18, 0, 0, 0x07 ); + //pPe.setValAt< uint32_t >( 0x10, 0xE0000005 ); + pPe.setValAt< uint32_t >( 0x10, 0xE0037603 ); + pPe.setValAt< uint32_t >( 0x14, static_cast< uint32_t >( time( nullptr ) ) ); + sendSinglePacket( &pPe ); + + + // main connection, assinging it to the session if( ipcHeader.connectionType == ConnectionType::Zone ) { + pPe = GamePacket( 0x00, 0x38, 0, 0, 0x02 ); + pPe.setValAt< uint32_t >( 0x10, playerId ); + sendSinglePacket( &pPe ); g_log.info( "[" + std::string( id ) + "] Setting session for zone connection" ); session->setZoneConnection( pCon ); } // chat connection, assinging it to the session else if( ipcHeader.connectionType == ConnectionType::Chat ) { + pPe = GamePacket( 0x00, 0x38, 0, 0, 0x02 ); + pPe.setValAt< uint32_t >( 0x10, playerId ); + sendSinglePacket( &pPe ); + g_log.info( "[" + std::string( id ) + "] Setting session for chat connection" ); session->setChatConnection( pCon ); + pPe = GamePacket( 0x02, 0x28, playerId, playerId, 0x03 ); + sendSinglePacket( &pPe ); } - GamePacket pPe( 0x00, 0x18, 0, 0, 0x07 ); - pPe.setValAt< uint32_t >( 0x10, 0xE0000005 ); - pPe.setValAt< uint32_t >( 0x14, static_cast< uint32_t >( time( nullptr ) ) ); - sendSinglePacket( &pPe ); - pPe = GamePacket( 0x00, 0x38, 0, 0, 0x02 ); - pPe.setValAt< uint32_t >( 0x10, playerId ); - sendSinglePacket( &pPe ); break; diff --git a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp index 336dded2..907837a7 100644 --- a/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp +++ b/src/servers/Server_Zone/Network/Handlers/PacketHandlers.cpp @@ -557,7 +557,8 @@ void Core::Network::GameConnection::tellHandler( const Packets::GamePacket& inPa { GamePacketNew< FFXIVIpcTellErrNotFound, ServerChatIpcType > tellErrPacket( pPlayer->getId() ); strcpy( tellErrPacket.data().receipientName, targetPcName.c_str() ); - pPlayer->queueChatPacket( tellErrPacket ); + sendSinglePacket( tellErrPacket ); + g_log.debug( "TargetPc not found" ); return; }