mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-05 18:27:47 +00:00
Emancipation from the GamePacket class, step 1
This commit is contained in:
parent
5c7b8e31e6
commit
972cd05e48
10 changed files with 273 additions and 227 deletions
|
@ -483,7 +483,7 @@ void Core::Network::GameConnection::generateEncryptionKey( uint32_t key, const s
|
|||
}
|
||||
|
||||
void Core::Network::GameConnection::handlePackets( const Core::Network::Packets::FFXIVARR_PACKET_HEADER& ipcHeader,
|
||||
const std::vector<Core::Network::Packets::FFXIVARR_PACKET_RAW>& packetData )
|
||||
const std::vector< Core::Network::Packets::FFXIVARR_PACKET_RAW >& packetData )
|
||||
{
|
||||
|
||||
for( auto inPacket : packetData )
|
||||
|
|
|
@ -174,7 +174,7 @@ void Core::Network::GameConnection::OnError( const boost::system::error_code & e
|
|||
pLog->debug( "GameConnection ERROR: " + error.message() );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::queueInPacket( Core::Network::Packets::GamePacketPtr inPacket )
|
||||
void Core::Network::GameConnection::queueInPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW inPacket )
|
||||
{
|
||||
m_inQueue.push( inPacket );
|
||||
}
|
||||
|
@ -184,24 +184,25 @@ void Core::Network::GameConnection::queueOutPacket( Core::Network::Packets::Game
|
|||
m_outQueue.push( outPacket );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::handleZonePacket( const Packets::GamePacket& pPacket )
|
||||
void Core::Network::GameConnection::handleZonePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket )
|
||||
{
|
||||
auto pLog = g_fw.get< Logger >();
|
||||
auto it = m_zoneHandlerMap.find( pPacket.getSubType() );
|
||||
uint16_t opcode = *reinterpret_cast< uint16_t* >( &pPacket.data[0x02] );
|
||||
auto it = m_zoneHandlerMap.find( opcode );
|
||||
|
||||
std::string sessionStr = "[" + std::to_string( m_pSession->getId() ) + "]";
|
||||
|
||||
if( it != m_zoneHandlerMap.end() )
|
||||
{
|
||||
auto itStr = m_zoneHandlerStrMap.find( pPacket.getSubType() );
|
||||
auto itStr = m_zoneHandlerStrMap.find( opcode );
|
||||
std::string name = itStr != m_zoneHandlerStrMap.end() ? itStr->second : "unknown";
|
||||
// dont display packet notification if it is a ping or pos update, don't want the spam
|
||||
if( pPacket.getSubType() != PingHandler &&
|
||||
pPacket.getSubType() != UpdatePositionHandler )
|
||||
if( opcode != PingHandler &&
|
||||
opcode != UpdatePositionHandler )
|
||||
|
||||
pLog->debug( sessionStr + " Handling Zone IPC : " + name + "( " +
|
||||
boost::str( boost::format( "%|04X|" ) %
|
||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||
static_cast< uint32_t >( opcode ) ) + " )" );
|
||||
|
||||
( this->*( it->second ) )( pPacket, *m_pSession->getPlayer() );
|
||||
}
|
||||
|
@ -209,28 +210,29 @@ void Core::Network::GameConnection::handleZonePacket( const Packets::GamePacket&
|
|||
{
|
||||
pLog->debug( sessionStr + " Undefined Zone IPC : Unknown ( " +
|
||||
boost::str( boost::format( "%|04X|" ) %
|
||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||
pLog->debug( "\n" + pPacket.toString() );
|
||||
static_cast< uint32_t >( opcode ) ) + " )" );
|
||||
//pLog->debug( "\n" + pPacket.toString() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::handleChatPacket( const Packets::GamePacket& pPacket )
|
||||
void Core::Network::GameConnection::handleChatPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket )
|
||||
{
|
||||
auto pLog = g_fw.get< Logger >();
|
||||
auto it = m_chatHandlerMap.find( pPacket.getSubType() );
|
||||
uint16_t opcode = *reinterpret_cast< uint16_t* >( &pPacket.data[0x02] );
|
||||
auto it = m_chatHandlerMap.find( opcode );
|
||||
|
||||
std::string sessionStr = "[" + std::to_string( m_pSession->getId() ) + "]";
|
||||
|
||||
if( it != m_chatHandlerMap.end() )
|
||||
{
|
||||
auto itStr = m_chatHandlerStrMap.find( pPacket.getSubType() );
|
||||
auto itStr = m_chatHandlerStrMap.find( opcode );
|
||||
std::string name = itStr != m_chatHandlerStrMap.end() ? itStr->second : "unknown";
|
||||
// dont display packet notification if it is a ping or pos update, don't want the spam
|
||||
|
||||
pLog->debug( sessionStr + " Handling Chat IPC : " + name + "( " +
|
||||
boost::str( boost::format( "%|04X|" ) %
|
||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||
static_cast< uint32_t >( opcode ) ) + " )" );
|
||||
|
||||
( this->*( it->second ) )( pPacket, *m_pSession->getPlayer() );
|
||||
}
|
||||
|
@ -238,12 +240,12 @@ void Core::Network::GameConnection::handleChatPacket( const Packets::GamePacket&
|
|||
{
|
||||
pLog->debug( sessionStr + " Undefined Chat IPC : Unknown ( " +
|
||||
boost::str( boost::format( "%|04X|" ) %
|
||||
static_cast< uint32_t >( pPacket.getSubType() & 0xFFFF ) ) + " )" );
|
||||
pLog->debug( pPacket.toString() );
|
||||
static_cast< uint32_t >( opcode ) ) + " )" );
|
||||
//pLog->debug( pPacket.toString() );
|
||||
}
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::handlePacket( Core::Network::Packets::GamePacketPtr pPacket )
|
||||
void Core::Network::GameConnection::handlePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket )
|
||||
{
|
||||
if( !m_pSession )
|
||||
return;
|
||||
|
@ -251,11 +253,11 @@ void Core::Network::GameConnection::handlePacket( Core::Network::Packets::GamePa
|
|||
switch( m_conType )
|
||||
{
|
||||
case Network::ConnectionType::Zone:
|
||||
handleZonePacket( *pPacket );
|
||||
handleZonePacket( pPacket );
|
||||
break;
|
||||
|
||||
case Network::ConnectionType::Chat:
|
||||
handleChatPacket( *pPacket );
|
||||
handleChatPacket( pPacket );
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -273,8 +275,9 @@ void Core::Network::GameConnection::sendPackets( Packets::PacketContainer* pPack
|
|||
void Core::Network::GameConnection::processInQueue()
|
||||
{
|
||||
// handle the incoming game packets
|
||||
while( auto pPacket = m_inQueue.pop() )
|
||||
while( m_inQueue.size() )
|
||||
{
|
||||
auto pPacket = m_inQueue.pop();
|
||||
handlePacket( pPacket );
|
||||
}
|
||||
}
|
||||
|
@ -442,8 +445,7 @@ void Core::Network::GameConnection::handlePackets( const Core::Network::Packets:
|
|||
}
|
||||
case 3: // game packet
|
||||
{
|
||||
auto pPacket = new GamePacket( inPacket );
|
||||
queueInPacket( Packets::GamePacketPtr( pPacket ) );
|
||||
queueInPacket( inPacket );
|
||||
break;
|
||||
}
|
||||
case 7: // keep alive
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
#include "Forwards.h"
|
||||
|
||||
#define DECLARE_HANDLER( x ) void x( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||
#define DECLARE_HANDLER( x ) void x( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
||||
namespace Core {
|
||||
namespace Network {
|
||||
|
@ -28,7 +28,7 @@ class GameConnection : public Connection
|
|||
{
|
||||
|
||||
private:
|
||||
typedef void ( GameConnection::* Handler )( const Packets::GamePacket& inPacket, Entity::Player& player );
|
||||
typedef void ( GameConnection::* Handler )( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player );
|
||||
|
||||
using HandlerMap = std::map< uint16_t, Handler >;
|
||||
using HandlerStrMap = std::map< uint16_t, std::string >;
|
||||
|
@ -45,7 +45,7 @@ private:
|
|||
|
||||
SessionPtr m_pSession;
|
||||
|
||||
LockedQueue< Packets::GamePacketPtr > m_inQueue;
|
||||
LockedQueue< Core::Network::Packets::FFXIVARR_PACKET_RAW > m_inQueue;
|
||||
LockedQueue< Packets::GamePacketPtr > m_outQueue;
|
||||
|
||||
public:
|
||||
|
@ -67,17 +67,17 @@ public:
|
|||
void handlePackets( const Packets::FFXIVARR_PACKET_HEADER& ipcHeader,
|
||||
const std::vector< Packets::FFXIVARR_PACKET_RAW >& packetData );
|
||||
|
||||
void queueInPacket( Packets::GamePacketPtr inPacket );
|
||||
void queueInPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW inPacket );
|
||||
void queueOutPacket( Packets::GamePacketPtr outPacket );
|
||||
|
||||
void processInQueue();
|
||||
void processOutQueue();
|
||||
|
||||
void handlePacket( Packets::GamePacketPtr pPacket );
|
||||
void handlePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
||||
|
||||
void handleZonePacket( const Packets::GamePacket& pPacket );
|
||||
void handleZonePacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
||||
|
||||
void handleChatPacket( const Packets::GamePacket& pPacket );
|
||||
void handleChatPacket( Core::Network::Packets::FFXIVARR_PACKET_RAW& pPacket );
|
||||
|
||||
void sendPackets( Packets::PacketContainer* pPacket );
|
||||
|
||||
|
|
|
@ -108,16 +108,18 @@ enum ClientTrigger
|
|||
|
||||
};
|
||||
|
||||
void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::actionHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto pLog = g_fw.get< Logger >();
|
||||
uint16_t commandId = inPacket.getValAt< uint16_t >( 0x20 );
|
||||
uint64_t param1 = inPacket.getValAt< uint64_t >( 0x24 );
|
||||
uint32_t param11 = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
uint32_t param12 = inPacket.getValAt< uint32_t >( 0x28 );
|
||||
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x2C );
|
||||
uint64_t param3 = inPacket.getValAt< uint64_t >( 0x38 );
|
||||
uint16_t commandId = *reinterpret_cast< uint16_t* >( ©.data[0x10] );
|
||||
uint64_t param1 = *reinterpret_cast< uint64_t* >( ©.data[0x14] );
|
||||
uint32_t param11 = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
uint32_t param12 = *reinterpret_cast< uint32_t* >( ©.data[0x18] );
|
||||
uint32_t param2 = *reinterpret_cast< uint32_t* >( ©.data[0x1C] );
|
||||
uint64_t param3 = *reinterpret_cast< uint64_t* >( ©.data[0x28] );
|
||||
|
||||
pLog->debug( "[" + std::to_string( m_pSession->getId() ) + "] Incoming action: " +
|
||||
boost::str( boost::format( "%|04X|" ) % ( uint32_t ) ( commandId & 0xFFFF ) ) +
|
||||
|
@ -162,7 +164,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
|||
case ClientTrigger::ChangeTarget: // Change target
|
||||
{
|
||||
|
||||
uint64_t targetId = inPacket.getValAt< uint64_t >( 0x24 );
|
||||
uint64_t targetId = param1;
|
||||
player.changeTarget( targetId );
|
||||
break;
|
||||
}
|
||||
|
@ -206,7 +208,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
|||
case ClientTrigger::Emote: // emote
|
||||
{
|
||||
uint64_t targetId = player.getTargetId();
|
||||
uint32_t emoteId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
uint32_t emoteId = param11;
|
||||
|
||||
player.emote( emoteId, targetId );
|
||||
break;
|
||||
|
|
|
@ -26,7 +26,7 @@ using namespace Core::Network::Packets;
|
|||
using namespace Core::Network::Packets::Server;
|
||||
|
||||
|
||||
void Core::Network::GameConnection::cfDutyInfoRequest( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::cfDutyInfoRequest( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
ZoneChannelPacket< FFXIVIpcCFDutyInfo > dutyInfoPacket( player.getId() );
|
||||
|
@ -46,17 +46,18 @@ void Core::Network::GameConnection::cfDutyInfoRequest( const Packets::GamePacket
|
|||
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::cfRegisterDuty( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player)
|
||||
{
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||
|
||||
std::vector< uint16_t > selectedContent;
|
||||
|
||||
for( uint32_t offset = 0x2E; offset <= 0x36; offset += 0x2 )
|
||||
for( uint32_t offset = 0x1E; offset <= 0x26; offset += 0x2 )
|
||||
{
|
||||
auto id = inPacket.getValAt< uint16_t >( offset );
|
||||
auto id = *reinterpret_cast< uint16_t* >( ©.data[offset] );
|
||||
if( id == 0 )
|
||||
break;
|
||||
|
||||
|
@ -93,7 +94,7 @@ void Core::Network::GameConnection::cfRegisterDuty( const Packets::GamePacket& i
|
|||
player.setInstance( instance );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::cfRegisterRoulette( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::cfRegisterRoulette( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player)
|
||||
{
|
||||
ZoneChannelPacket< FFXIVIpcCFNotify > cfCancelPacket( player.getId() );
|
||||
|
@ -104,7 +105,7 @@ void Core::Network::GameConnection::cfRegisterRoulette( const Packets::GamePacke
|
|||
player.sendDebug( "Roulette register" );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::cfDutyAccepted( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::cfDutyAccepted( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player)
|
||||
{
|
||||
player.sendDebug( "TODO: Duty accept" );
|
||||
|
|
|
@ -33,12 +33,15 @@ using namespace Core::Common;
|
|||
using namespace Core::Network::Packets;
|
||||
using namespace Core::Network::Packets::Server;
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||
void Core::Network::GameConnection::eventHandlerTalk( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||
auto actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto actorId = *reinterpret_cast< uint64_t* >( ©.data[0x10] );
|
||||
auto eventId = *reinterpret_cast< uint32_t* >( ©.data[0x18] );
|
||||
auto eventType = static_cast< uint16_t >( eventId >> 16 );
|
||||
|
||||
std::string eventName = "onTalk";
|
||||
|
@ -56,7 +59,6 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
|
|||
player.sendDebug( "Calling: " + objName + "." + eventName );
|
||||
player.eventStart( actorId, eventId, Event::EventHandler::Talk, 0, 0 );
|
||||
|
||||
|
||||
if( auto instance = player.getCurrentInstance() )
|
||||
{
|
||||
instance->onTalk( player, eventId, actorId );
|
||||
|
@ -73,14 +75,17 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
|
|||
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerEmote( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||
void Core::Network::GameConnection::eventHandlerEmote( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
|
||||
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||
auto pExdData = g_fw.get< Data::ExdDataGenerated >();
|
||||
auto actorId = inPacket.getValAt< uint64_t >( 0x20 );
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x28 );
|
||||
auto emoteId = inPacket.getValAt< uint16_t >( 0x2C );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto actorId = *reinterpret_cast< uint64_t* >( ©.data[0x10] );
|
||||
auto eventId = *reinterpret_cast< uint32_t* >( ©.data[0x18] );
|
||||
auto emoteId = *reinterpret_cast< uint16_t* >( ©.data[0x1C] );
|
||||
auto eventType = static_cast< uint16_t >( eventId >> 16 );
|
||||
|
||||
std::string eventName = "onEmote";
|
||||
|
@ -109,15 +114,18 @@ void Core::Network::GameConnection::eventHandlerEmote( const Packets::GamePacket
|
|||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto x = inPacket.getValAt< float >( 0x28 );
|
||||
auto y = inPacket.getValAt< float >( 0x2C );
|
||||
auto z = inPacket.getValAt< float >( 0x30 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto eventId = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
auto param1 = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
|
||||
auto x = *reinterpret_cast< float* >( ©.data[0x18] );
|
||||
auto y = *reinterpret_cast< float* >( ©.data[0x1C] );
|
||||
auto z = *reinterpret_cast< float* >( ©.data[0x20] );
|
||||
|
||||
std::string eventName = "onWithinRange";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
|
@ -131,15 +139,18 @@ void Core::Network::GameConnection::eventHandlerWithinRange( const Packets::Game
|
|||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
auto param1 = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto x = inPacket.getValAt< float >( 0x28 );
|
||||
auto y = inPacket.getValAt< float >( 0x2C );
|
||||
auto z = inPacket.getValAt< float >( 0x30 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto eventId = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
auto param1 = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
|
||||
auto x = *reinterpret_cast< float* >( ©.data[0x18] );
|
||||
auto y = *reinterpret_cast< float* >( ©.data[0x1C] );
|
||||
auto z = *reinterpret_cast< float* >( ©.data[0x20] );
|
||||
|
||||
std::string eventName = "onOutsideRange";
|
||||
std::string objName = Event::getEventName( eventId );
|
||||
|
@ -153,13 +164,15 @@ void Core::Network::GameConnection::eventHandlerOutsideRange( const Packets::Gam
|
|||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::GamePacket &inPacket,
|
||||
Entity::Player &player )
|
||||
void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
auto pScriptMgr = g_fw.get< Scripting::ScriptMgr >();
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto param1 = inPacket.getValAt< uint16_t >( 0x24 );
|
||||
auto param2 = inPacket.getValAt< uint16_t >( 0x26 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto eventId = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
auto param1 = *reinterpret_cast< uint16_t* >( ©.data[0x10] );
|
||||
auto param2 = *reinterpret_cast< uint16_t* >( ©.data[0x16] );
|
||||
|
||||
std::string eventName = "onEnterTerritory";
|
||||
|
||||
|
@ -181,14 +194,16 @@ void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::G
|
|||
player.checkEvent( eventId );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerReturn( const Packets::GamePacket &inPacket,
|
||||
Entity::Player &player )
|
||||
void Core::Network::GameConnection::eventHandlerReturn( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto scene = inPacket.getValAt< uint16_t >( 0x24 );
|
||||
auto param1 = inPacket.getValAt< uint16_t >( 0x26 );
|
||||
auto param2 = inPacket.getValAt< uint16_t >( 0x28 );
|
||||
auto param3 = inPacket.getValAt< uint16_t >( 0x2C );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto eventId = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
auto scene = *reinterpret_cast< uint16_t* >( ©.data[0x14] );
|
||||
auto param1 = *reinterpret_cast< uint16_t* >( ©.data[0x16] );
|
||||
auto param2 = *reinterpret_cast< uint16_t* >( ©.data[0x18] );
|
||||
auto param3 = *reinterpret_cast< uint16_t* >( ©.data[0x1C] );
|
||||
|
||||
std::string eventName = Event::getEventName( eventId );
|
||||
|
||||
|
@ -226,12 +241,14 @@ void Core::Network::GameConnection::eventHandlerReturn( const Packets::GamePacke
|
|||
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::eventHandlerLinkshell( const Packets::GamePacket &inPacket,
|
||||
Entity::Player &player )
|
||||
void Core::Network::GameConnection::eventHandlerLinkshell( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
auto eventId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
auto scene = inPacket.getValAt< uint16_t >( 0x24 );
|
||||
auto lsName = inPacket.getStringAt( 0x27 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto eventId = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
auto scene = *reinterpret_cast< uint16_t* >( ©.data[0x14] );
|
||||
auto lsName = std::string( reinterpret_cast< char* >( ©.data[0x17] ) );
|
||||
|
||||
ZoneChannelPacket< FFXIVIpcEventLinkshell > linkshellEvent( player.getId() );
|
||||
linkshellEvent.data().eventId = eventId;
|
||||
|
|
|
@ -84,15 +84,17 @@ enum GmCommand
|
|||
JumpNpc = 0x025F,
|
||||
};
|
||||
|
||||
void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||
void Core::Network::GameConnection::gm1Handler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
if( player.getGmRank() <= 0 )
|
||||
return;
|
||||
|
||||
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
uint32_t param1 = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
uint32_t param2 = inPacket.getValAt< uint32_t >( 0x28 );
|
||||
uint32_t param3 = inPacket.getValAt< uint32_t >( 0x38 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
auto commandId = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
|
||||
uint32_t param1 = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
uint32_t param2 = *reinterpret_cast< uint32_t* >( ©.data[0x18] );
|
||||
uint32_t param3 = *reinterpret_cast< uint32_t* >( ©.data[0x28] );
|
||||
|
||||
auto pLog = g_fw.get< Logger >();
|
||||
pLog->debug( player.getName() + " used GM1 commandId: " + std::to_string( commandId ) +
|
||||
|
@ -476,7 +478,7 @@ void Core::Network::GameConnection::gm1Handler( const Packets::GamePacket& inPac
|
|||
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPacket, Entity::Player& player )
|
||||
void Core::Network::GameConnection::gm2Handler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
if( player.getGmRank() <= 0 )
|
||||
return;
|
||||
|
@ -484,8 +486,10 @@ void Core::Network::GameConnection::gm2Handler( const Packets::GamePacket& inPac
|
|||
auto pLog = g_fw.get< Logger >();
|
||||
auto pServerZone = g_fw.get< ServerZone >();
|
||||
|
||||
uint32_t commandId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
std::string param1 = inPacket.getStringAt( 0x34 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
auto commandId = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
|
||||
auto param1 = std::string( reinterpret_cast< char* >( ©.data[0x24] ) );
|
||||
|
||||
pLog->debug( player.getName() + " used GM2 commandId: " + std::to_string( commandId ) + ", params: " + param1 );
|
||||
|
||||
|
|
|
@ -38,17 +38,20 @@ enum InventoryOperation
|
|||
Split = 0x0A
|
||||
};
|
||||
|
||||
void Core::Network::GameConnection::inventoryModifyHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::inventoryModifyHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
uint32_t seq = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
uint8_t action = inPacket.getValAt< uint8_t >( 0x24 );
|
||||
uint8_t fromSlot = inPacket.getValAt< uint8_t >( 0x30 );
|
||||
uint8_t toSlot = inPacket.getValAt< uint8_t >( 0x44 );
|
||||
uint16_t fromContainer = inPacket.getValAt< uint16_t >( 0x2C );
|
||||
uint16_t toContainer = inPacket.getValAt< uint16_t >( 0x40 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
auto seq = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
auto action = *reinterpret_cast< uint8_t* >( ©.data[0x14] );
|
||||
auto fromSlot = *reinterpret_cast< uint8_t* >( ©.data[0x20] );
|
||||
auto toSlot = *reinterpret_cast< uint8_t* >( ©.data[0x34] );
|
||||
|
||||
auto fromContainer = *reinterpret_cast< uint16_t* >( ©.data[0x1C] );
|
||||
auto toContainer = *reinterpret_cast< uint16_t* >( ©.data[0x30] );
|
||||
|
||||
// todo: check packet handler in game and see if this is sent as a u16 or u32
|
||||
uint16_t splitCount = inPacket.getValAt< uint16_t >( 0x48 );
|
||||
auto splitCount = *reinterpret_cast< uint16_t* >( ©.data[0x38] );
|
||||
|
||||
ZoneChannelPacket< FFXIVIpcInventoryActionAck > ackPacket( player.getId() );
|
||||
ackPacket.data().sequence = seq;
|
||||
|
@ -58,7 +61,7 @@ void Core::Network::GameConnection::inventoryModifyHandler( const Packets::GameP
|
|||
auto pLog = g_fw.get< Logger >();
|
||||
|
||||
|
||||
pLog->debug( inPacket.toString() );
|
||||
//pLog->debug( inPacket.toString() );
|
||||
pLog->debug( "InventoryAction: " + std::to_string( action ) );
|
||||
|
||||
// TODO: other inventory operations need to be implemented
|
||||
|
|
|
@ -45,7 +45,7 @@ using namespace Core::Common;
|
|||
using namespace Core::Network::Packets;
|
||||
using namespace Core::Network::Packets::Server;
|
||||
|
||||
void Core::Network::GameConnection::fcInfoReqHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::fcInfoReqHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
// TODO: use new packet struct for this
|
||||
|
@ -54,16 +54,18 @@ void Core::Network::GameConnection::fcInfoReqHandler( const Packets::GamePacket&
|
|||
//queueOutPacket( pPe );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::setSearchInfoHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::setSearchInfoHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
uint32_t inval = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
uint32_t inval1 = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
uint64_t status = inPacket.getValAt< uint64_t >( 0x20 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
uint8_t selectRegion = inPacket.getValAt< uint8_t >( 0x31 );
|
||||
auto inval = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
auto inval1 = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
auto status = *reinterpret_cast< uint64_t* >( ©.data[0x10] );
|
||||
|
||||
player.setSearchInfo( selectRegion, 0, inPacket.getStringAt( 0x32 ) );
|
||||
auto selectRegion = copy.data[0x21];
|
||||
|
||||
player.setSearchInfo( selectRegion, 0, reinterpret_cast< char* >( ©.data[0x22] ) );
|
||||
|
||||
player.setOnlineStatusMask( status );
|
||||
|
||||
|
@ -88,7 +90,7 @@ void Core::Network::GameConnection::setSearchInfoHandler( const Packets::GamePac
|
|||
static_cast< uint8_t >( player.getOnlineStatus() ) ), true );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::reqSearchInfoHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::reqSearchInfoHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
ZoneChannelPacket< FFXIVIpcInitSearchInfo > searchInfoPacket( player.getId() );
|
||||
|
@ -98,20 +100,22 @@ void Core::Network::GameConnection::reqSearchInfoHandler( const Packets::GamePac
|
|||
queueOutPacket( searchInfoPacket );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::linkshellListHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::linkshellListHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
ZoneChannelPacket< FFXIVIpcLinkshellList > linkshellListPacket( player.getId() );
|
||||
queueOutPacket( linkshellListPacket );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::updatePositionHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
// if the player is marked for zoning we no longer want to update his pos
|
||||
if( player.isMarkedForZoning() )
|
||||
return;
|
||||
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
struct testMov
|
||||
{
|
||||
uint32_t specialMovement : 23; // 0x00490FDA
|
||||
|
@ -140,10 +144,10 @@ void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePa
|
|||
uint16_t bit16 : 1;
|
||||
} IPC_OP_019AB;
|
||||
|
||||
uint16_t flags = inPacket.getValAt<uint16_t>( 0x28 );
|
||||
auto flags = *reinterpret_cast< uint16_t* >( ©.data[0x18] );
|
||||
memcpy( &IPC_OP_019AB, &flags, 2 );
|
||||
|
||||
uint32_t flags1 = inPacket.getValAt<uint32_t>( 0x24 );
|
||||
auto flags1 = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
memcpy( &IPC_OP_019A, &flags1, 4 );
|
||||
|
||||
//g_log.Log(LoggingSeverity::debug, "" + boost::lexical_cast<std::string>((int)IPC_OP_019AB.bit1)
|
||||
|
@ -173,18 +177,19 @@ void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePa
|
|||
|
||||
//pInPacket->debugPrint();
|
||||
|
||||
;
|
||||
bool bPosChanged = false;
|
||||
if( ( player.getPos().x != inPacket.getValAt< float >( 0x2c ) ) ||
|
||||
( player.getPos().y != inPacket.getValAt< float >( 0x30 ) ) ||
|
||||
( player.getPos().z != inPacket.getValAt< float >( 0x34 ) ) )
|
||||
if( ( player.getPos().x != *reinterpret_cast< float* >( ©.data[0x1C] ) ) ||
|
||||
( player.getPos().y != *reinterpret_cast< float* >( ©.data[0x20] ) ) ||
|
||||
( player.getPos().z != *reinterpret_cast< float* >( ©.data[0x24] ) ) )
|
||||
bPosChanged = true;
|
||||
if( !bPosChanged && player.getRot() == inPacket.getValAt< float >( 0x20 ) )
|
||||
if( !bPosChanged && player.getRot() == *reinterpret_cast< float* >( ©.data[0x10] ) )
|
||||
return;
|
||||
|
||||
player.setRot( inPacket.getValAt< float >( 0x20 ) );
|
||||
player.setPos( inPacket.getValAt< float >( 0x2c ),
|
||||
inPacket.getValAt< float >( 0x30 ),
|
||||
inPacket.getValAt< float >( 0x34 ) );
|
||||
player.setRot( *reinterpret_cast< float* >( ©.data[0x10] ) );
|
||||
player.setPos( *reinterpret_cast< float* >( ©.data[0x1C] ),
|
||||
*reinterpret_cast< float* >( ©.data[0x20] ),
|
||||
*reinterpret_cast< float* >( ©.data[0x24] ) );
|
||||
|
||||
if( ( player.getCurrentAction() != nullptr ) && bPosChanged )
|
||||
player.getCurrentAction()->setInterrupted();
|
||||
|
@ -193,9 +198,9 @@ void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePa
|
|||
if( !player.hasInRangeActor() )
|
||||
return;
|
||||
|
||||
uint8_t unk = inPacket.getValAt< uint8_t >( 0x29 );
|
||||
auto unk = *reinterpret_cast< uint8_t* >( ©.data[0x19] );
|
||||
|
||||
uint16_t moveType = inPacket.getValAt< uint16_t >( 0x28 );
|
||||
auto moveType = *reinterpret_cast< uint16_t* >( ©.data[0x18] );
|
||||
|
||||
uint8_t unk1 = 0;
|
||||
uint8_t unk2 = 0;
|
||||
|
@ -279,19 +284,21 @@ void Core::Network::GameConnection::updatePositionHandler( const Packets::GamePa
|
|||
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::reqEquipDisplayFlagsHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::reqEquipDisplayFlagsHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
player.setEquipDisplayFlags( inPacket.getValAt< uint8_t >( 0x20 ) );
|
||||
player.setEquipDisplayFlags( inPacket.data[0x10] );
|
||||
|
||||
player.sendDebug( "EquipDisplayFlag CHANGE: " + std::to_string( player.getEquipDisplayFlags() ) );
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::zoneLineHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::zoneLineHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
auto pTeriMgr = g_fw.get< TerritoryMgr >();
|
||||
uint32_t zoneLineId = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
auto zoneLineId = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
|
||||
player.sendDebug( "Walking ZoneLine " + std::to_string( zoneLineId ) );
|
||||
|
||||
|
@ -331,10 +338,13 @@ void Core::Network::GameConnection::zoneLineHandler( const Packets::GamePacket&
|
|||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::discoveryHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::discoveryHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
uint32_t ref_position_id = inPacket.getValAt< uint32_t >( 0x20 );
|
||||
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
auto ref_position_id = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
|
||||
auto pDb = g_fw.get< Db::DbWorkerPool< Db::CharaDbConnection > >();
|
||||
|
||||
|
@ -360,7 +370,7 @@ void Core::Network::GameConnection::discoveryHandler( const Packets::GamePacket&
|
|||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::playTimeHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::playTimeHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
ZoneChannelPacket< FFXIVIpcPlayTime > playTimePacket( player.getId() );
|
||||
|
@ -369,7 +379,7 @@ void Core::Network::GameConnection::playTimeHandler( const Packets::GamePacket&
|
|||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::initHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::initHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
// init handler means this is a login procedure
|
||||
|
@ -379,10 +389,10 @@ void Core::Network::GameConnection::initHandler( const Packets::GamePacket& inPa
|
|||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::blackListHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::blackListHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
uint8_t count = inPacket.getValAt< uint8_t >( 0x21 );
|
||||
uint8_t count = inPacket.data[0x11];
|
||||
|
||||
ZoneChannelPacket< FFXIVIpcBlackList > blackListPacket( player.getId() );
|
||||
blackListPacket.data().sequence = count;
|
||||
|
@ -394,10 +404,12 @@ void Core::Network::GameConnection::blackListHandler( const Packets::GamePacket&
|
|||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::pingHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::pingHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
int32_t inVal = inPacket.getValAt< int32_t >( 0x20 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
auto inVal = *reinterpret_cast< uint32_t* >( ©.data[0x10] );
|
||||
|
||||
PingPacket pingPacket( player, inVal );
|
||||
queueOutPacket( pingPacket );
|
||||
|
||||
|
@ -405,7 +417,7 @@ void Core::Network::GameConnection::pingHandler( const Packets::GamePacket& inPa
|
|||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::finishLoadingHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::finishLoadingHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
player.getCurrentZone()->onFinishLoading( player );
|
||||
|
@ -428,12 +440,12 @@ void Core::Network::GameConnection::finishLoadingHandler( const Packets::GamePac
|
|||
player.getCurrentZone()->updateActorPosition(player);
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::socialListHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
|
||||
uint8_t type = inPacket.getValAt< uint8_t >( 0x2A );
|
||||
uint8_t count = inPacket.getValAt< uint8_t >( 0x2B );
|
||||
uint8_t type = inPacket.data[0x1A];
|
||||
uint8_t count = inPacket.data[0x1B];
|
||||
|
||||
if( type == 0x02 )
|
||||
{ // party list
|
||||
|
@ -486,14 +498,16 @@ void Core::Network::GameConnection::socialListHandler( const Packets::GamePacket
|
|||
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::chatHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
|
||||
auto pDebugCom = g_fw.get< DebugCommandHandler >();
|
||||
std::string chatString( inPacket.getStringAt( 0x3a ) );
|
||||
|
||||
uint32_t sourceId = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
std::string chatString( reinterpret_cast< char* >( ©.data[0x2a] ) );
|
||||
|
||||
auto sourceId = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
|
||||
if( chatString.at( 0 ) == '!' )
|
||||
{
|
||||
|
@ -502,7 +516,7 @@ void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPa
|
|||
return;
|
||||
}
|
||||
|
||||
ChatType chatType = static_cast< ChatType >( inPacket.getValAt< uint8_t >( 0x38 ) );
|
||||
ChatType chatType = static_cast< ChatType >( inPacket.data[0x28] );
|
||||
|
||||
//ToDo, need to implement sending GM chat types.
|
||||
ChatPacket chatPacket( player, chatType, chatString );
|
||||
|
@ -546,7 +560,7 @@ void Core::Network::GameConnection::chatHandler( const Packets::GamePacket& inPa
|
|||
// currently we wait for the session to just time out after logout, this can be a problem is the user tries to
|
||||
// log right back in.
|
||||
// Also the packet needs to be converted to an ipc structure
|
||||
void Core::Network::GameConnection::logoutHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::logoutHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
ZoneChannelPacket< FFXIVIpcLogout > logoutPacket( player.getId() );
|
||||
|
@ -558,11 +572,13 @@ void Core::Network::GameConnection::logoutHandler( const Packets::GamePacket& in
|
|||
}
|
||||
|
||||
|
||||
void Core::Network::GameConnection::tellHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::tellHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
std::string targetPcName = inPacket.getStringAt( 0x21 );
|
||||
std::string msg = inPacket.getStringAt( 0x41 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
std::string targetPcName( reinterpret_cast< char* >( ©.data[0x11] ) );
|
||||
std::string msg( reinterpret_cast< char* >( ©.data[0x31] ) );
|
||||
|
||||
auto pZoneServer = g_fw.get< ServerZone >();
|
||||
|
||||
|
@ -610,13 +626,12 @@ void Core::Network::GameConnection::tellHandler( const Packets::GamePacket& inPa
|
|||
|
||||
}
|
||||
|
||||
void Core::Network::GameConnection::performNoteHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::performNoteHandler( const Core::Network::Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
ZoneChannelPacket< FFXIVIpcPerformNote > performPacket( player.getId() );
|
||||
|
||||
auto inVal = inPacket.getDataAt( 0x20 );
|
||||
memcpy( &performPacket.data().data[0], inVal, 32 );
|
||||
memcpy( &performPacket.data().data[0], &inPacket.data[0x10], 32 );
|
||||
|
||||
player.sendToInRangeSet( performPacket );
|
||||
}
|
||||
|
|
|
@ -33,15 +33,17 @@ using namespace Core::Common;
|
|||
using namespace Core::Network::Packets;
|
||||
using namespace Core::Network::Packets::Server;
|
||||
|
||||
void Core::Network::GameConnection::skillHandler( const Packets::GamePacket& inPacket,
|
||||
void Core::Network::GameConnection::skillHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket,
|
||||
Entity::Player& player )
|
||||
{
|
||||
uint8_t type = inPacket.getValAt< uint32_t >( 0x21 );
|
||||
Packets::FFXIVARR_PACKET_RAW copy = inPacket;
|
||||
|
||||
uint32_t action = inPacket.getValAt< uint32_t >( 0x24 );
|
||||
uint32_t useCount = inPacket.getValAt< uint32_t >( 0x28 );
|
||||
uint8_t type = inPacket.data[0x11];
|
||||
|
||||
uint64_t targetId = inPacket.getValAt< uint64_t >( 0x30 );
|
||||
auto action = *reinterpret_cast< uint32_t* >( ©.data[0x14] );
|
||||
auto useCount = *reinterpret_cast< uint32_t* >( ©.data[0x18] );
|
||||
|
||||
auto targetId = *reinterpret_cast< uint64_t* >( ©.data[0x20] );
|
||||
|
||||
player.sendDebug( "Skill type:" + std::to_string( type ) );
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue