1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 14:37:44 +00:00

Login packet flow further adjusted to be closer to retail

This commit is contained in:
Mordred 2023-02-18 23:05:15 +01:00
parent d34d93a7dd
commit 00cb4ade45
3 changed files with 24 additions and 24 deletions

View file

@ -1444,6 +1444,11 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
uint8_t unknownCompleteMask[32];
};
struct FFXIVIpcLegacyQuestCompleteList : FFXIVIpcBasePacket< LegacyQuestCompleteFlags >
{
uint8_t completeFlagArray[40];
};
/**
* Structural representation of the packet sent by the server
* to finish a quest

View file

@ -12,6 +12,7 @@
#include <Manager/PartyMgr.h>
#include <Manager/HousingMgr.h>
#include <Manager/FreeCompanyMgr.h>
#include <Manager/QuestMgr.h>
#include <Script/ScriptMgr.h>
#include <WorldServer.h>
@ -397,29 +398,25 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
player.sendHuntingLog();
if( player.isLogin() )
{
player.sendItemLevel();
server().queueForPlayer( player.getCharacterId(), makePlayerSetup( player ) );
}
player.sendStats();
player.sendRecastGroups();
auto classInfo = makeZonePacket< FFXIVIpcChangeClass >( player.getId() );
classInfo->data().ClassJob = static_cast< uint8_t >( player.getClass() );
classInfo->data().Lv = player.getLevel();
classInfo->data().Lv1 = player.getLevel();
if( player.isLogin() )
classInfo->data().Login = 1;
server().queueForPlayer( player.getCharacterId(), classInfo );
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), 0x112, 0x24 ) ); // unknown
// only initialize the UI if the player in fact just logged in.
player.sendStats();
player.sendItemLevel();
if( player.isLogin() )
{
auto classInfo = makeZonePacket< FFXIVIpcChangeClass >( player.getId() );
classInfo->data().ClassJob = static_cast< uint8_t >( player.getClass() );
classInfo->data().Lv = player.getLevel();
classInfo->data().Lv1 = player.getLevel();
if( player.isLogin() )
classInfo->data().Login = 1;
server().queueForPlayer( player.getCharacterId(), classInfo );
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), 0x112, 0x24 ) ); // unknown
auto contentFinderList = makeZonePacket< FFXIVIpcContentAttainFlags >( player.getId() );
std::memset( &contentFinderList->data(), 0xFF, sizeof( contentFinderList->data() ) );
server().queueForPlayer( player.getCharacterId(), contentFinderList );
player.clearSoldItems();
@ -449,9 +446,13 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
{
server().queueForPlayer( player.getCharacterId(),
{
makeZonePacket< FFXIVIpcQuestRepeatFlags >( player.getId() ),
makeZonePacket< FFXIVIpcDailyQuests >( player.getId() )
makeZonePacket< FFXIVIpcDailyQuests >( player.getId() ),
makeZonePacket< FFXIVIpcQuestRepeatFlags >( player.getId() )
} );
auto &questMgr = Common::Service< World::Manager::QuestMgr >::ref();
questMgr.sendQuestsInfo( player );
onGcUpdate( player );
}
if( player.getPartyId() != 0 )

View file

@ -370,12 +370,6 @@ void Sapphire::Network::GameConnection::syncHandler( const Packets::FFXIVARR_PAC
void Sapphire::Network::GameConnection::setLanguageHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
{
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
if( player.isLogin() )
{
auto &questMgr = Common::Service< World::Manager::QuestMgr >::ref();
questMgr.sendQuestsInfo( player );
playerMgr.onGcUpdate( player );
}
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
auto pCurrentZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );