1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 06:27:45 +00:00

Merge pull request #46 from Minoost/matchmaking

Implement basic duty finder window response
This commit is contained in:
SapphireMordred 2017-08-12 17:04:39 +02:00 committed by GitHub
commit db1832aeef
4 changed files with 66 additions and 10 deletions

View file

@ -1309,17 +1309,13 @@ struct FFXIVIpcPrepareZoning : FFXIVIpcBasePacket<PrepareZoning>
struct FFXIVIpcCFNotify : FFXIVIpcBasePacket<CFNotify>
{
uint32_t state1; // 3 = cancelled, 4 = duty ready
uint32_t param; // if state1 == 3, state2 is cancelled reason
uint32_t state2; // if state1 == 3, state2 is cancelled reason
uint8_t classJob; // classJobId you registered
uint8_t unknown0[3];
uint32_t unknown1; // unknown, just used 0x20442 from the dumped packet
uint8_t languages;
uint8_t unknown2[3];
uint16_t unknown3;
uint32_t param1; // usually classJobId
uint32_t param2; // usually flag
uint32_t param3; // usually languages, sometimes join in progress timestamp
uint16_t param4; // usually roulette id
uint16_t contents[5];
};

View file

@ -83,6 +83,12 @@ Core::Network::GameConnection::GameConnection( Core::Network::HivePtr pHive,
setHandler( ClientIpcType::ReturnEventHandler, "EventHandlerReturn", &GameConnection::eventHandler );
setHandler( ClientIpcType::TradeReturnEventHandler, "EventHandlerReturn", &GameConnection::eventHandler );
setHandler(ClientIpcType::CFDutyInfoHandler, "CFDutyInfoRequest", &GameConnection::cfDutyInfoRequest );
setHandler(ClientIpcType::CFRegisterDuty, "CFRegisterDuty", &GameConnection::cfRegisterDuty );
setHandler(ClientIpcType::CFRegisterRoulette, "CFRegisterRoulette", &GameConnection::cfRegisterRoulette );
setHandler(ClientIpcType::CFCommenceHandler, "CFDutyAccepted", &GameConnection::cfDutyAccepted);
}
Core::Network::GameConnection::~GameConnection()

View file

@ -95,6 +95,13 @@ public:
DECLARE_HANDLER( discoveryHandler );
DECLARE_HANDLER( eventHandler );
DECLARE_HANDLER( logoutHandler );
DECLARE_HANDLER( cfDutyInfoRequest );
DECLARE_HANDLER( cfRegisterDuty );
DECLARE_HANDLER( cfRegisterRoulette );
DECLARE_HANDLER( cfDutyAccepted );
DECLARE_HANDLER( skillHandler );
DECLARE_HANDLER( gm1Handler );

View file

@ -1139,3 +1139,50 @@ void Core::Network::GameConnection::logoutHandler( Core::Network::Packets::GameP
logoutPacket.data().flags2 = 0x2000;
queueOutPacket( logoutPacket );
}
void Core::Network::GameConnection::cfDutyInfoRequest(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
{
GamePacketNew< FFXIVIpcCFDutyInfo > dutyInfoPacket( pPlayer->getId() );
queueOutPacket( dutyInfoPacket );
GamePacketNew< FFXIVIpcCFPlayerInNeed > inNeedsPacket( pPlayer->getId() );
queueOutPacket( inNeedsPacket );
}
void Core::Network::GameConnection::cfRegisterDuty(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
{
// TODO use for loop for this
auto contentId1 = pInPacket->getValAt< uint16_t >( 46 );
auto contentId2 = pInPacket->getValAt< uint16_t >( 48 );
auto contentId3 = pInPacket->getValAt< uint16_t >( 50 );
auto contentId4 = pInPacket->getValAt< uint16_t >( 52 );
auto contentId5 = pInPacket->getValAt< uint16_t >( 54 );
pPlayer->sendDebug("Duty register request");
pPlayer->sendDebug("ContentId1" + std::to_string(contentId1));
pPlayer->sendDebug("ContentId2" + std::to_string(contentId2));
pPlayer->sendDebug("ContentId3" + std::to_string(contentId3));
pPlayer->sendDebug("ContentId4" + std::to_string(contentId4));
pPlayer->sendDebug("ContentId5" + std::to_string(contentId5));
// let's cancel it because otherwise you can't register it again
GamePacketNew< FFXIVIpcCFNotify > cfCancelPacket( pPlayer->getId() );
cfCancelPacket.data().state1 = 3;
cfCancelPacket.data().state2 = 1; // Your registration is withdrawn.
queueOutPacket( cfCancelPacket );
}
void Core::Network::GameConnection::cfRegisterRoulette(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
{
pPlayer->sendDebug("Roulette register");
}
void Core::Network::GameConnection::cfDutyAccepted(Core::Network::Packets::GamePacketPtr pInPacket,
Core::Entity::PlayerPtr pPlayer)
{
pPlayer->sendDebug("TODO: Duty accept");
}