2017-08-08 13:53:47 +02:00
|
|
|
#ifndef _CORE_NETWORK_PACKETS_INITUIPACKET_H
|
|
|
|
#define _CORE_NETWORK_PACKETS_INITUIPACKET_H
|
|
|
|
|
2017-08-19 00:18:40 +02:00
|
|
|
#include <src/servers/Server_Common/Network/GamePacketNew.h>
|
2017-08-21 00:02:41 +02:00
|
|
|
#include <src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h>
|
2017-08-18 17:16:15 +02:00
|
|
|
#include "Server_Zone/Actor/Player.h"
|
|
|
|
#include "Server_Zone/Forwards.h"
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
namespace Core {
|
|
|
|
namespace Network {
|
|
|
|
namespace Packets {
|
|
|
|
namespace Server {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @brief The Client UI Initialization packet. This must be sent to the client
|
|
|
|
* once upon connection to configure the UI.
|
|
|
|
*/
|
2017-08-20 22:31:23 +02:00
|
|
|
class InitUIPacket : public GamePacketNew< FFXIVIpcInitUI, ServerZoneIpcType >
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
InitUIPacket( Entity::PlayerPtr player ) :
|
2017-08-20 22:31:23 +02:00
|
|
|
GamePacketNew< FFXIVIpcInitUI, ServerZoneIpcType >( player->getId(), player->getId() )
|
2017-08-08 13:53:47 +02:00
|
|
|
{
|
|
|
|
initialize( player );
|
|
|
|
};
|
|
|
|
|
|
|
|
private:
|
|
|
|
void initialize( Entity::PlayerPtr player )
|
|
|
|
{
|
|
|
|
m_data.contentId = player->getContentId();
|
|
|
|
|
|
|
|
// TODO: Support rested experience.
|
|
|
|
m_data.restedExp = 0;
|
|
|
|
//m_data.padding = 0x100;
|
|
|
|
m_data.charId = player->getId();
|
|
|
|
m_data.race = player->getLookAt( Common::CharaLook::Race );
|
|
|
|
m_data.tribe = player->getLookAt( Common::CharaLook::Tribe );
|
|
|
|
m_data.gender = player->getLookAt( Common::CharaLook::Gender );
|
2017-11-18 01:25:55 +01:00
|
|
|
m_data.currentClass = static_cast< uint8_t >( player->getClass() );
|
|
|
|
m_data.currentJob = static_cast< uint8_t >( player->getClass() );
|
|
|
|
m_data.deity = static_cast< uint8_t >( player->getGuardianDeity() );
|
2017-08-08 13:53:47 +02:00
|
|
|
m_data.namedayMonth = player->getBirthMonth();
|
|
|
|
m_data.namedayDay = player->getBirthDay();
|
|
|
|
// TODO: Support grand company status.
|
2017-10-09 20:09:49 +02:00
|
|
|
m_data.grandCompany = static_cast< Common::GrandCompany >( player->getGc() );
|
2017-08-08 13:53:47 +02:00
|
|
|
//m_data.gcRank = GCRank::None;
|
|
|
|
|
|
|
|
// TODO: Support starting city.
|
|
|
|
//m_data.startCity = Town::Gridania;
|
|
|
|
m_data.homepoint = player->getHomepoint();
|
|
|
|
|
|
|
|
memset( &m_data.name[0], 0, sizeof( m_data.name ) );
|
|
|
|
|
2017-11-01 22:24:50 -07:00
|
|
|
strcpy( &m_data.name[0], player->getName().c_str() );
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
memcpy( m_data.aetheryte, player->getAetheryteArray(), sizeof ( m_data.aetheryte ) );
|
|
|
|
|
|
|
|
// Set the class levels and exp.
|
|
|
|
for( uint8_t i = 0; i < 25; i++ )
|
|
|
|
{
|
|
|
|
m_data.levels[i] = player->getClassArray()[i];
|
|
|
|
m_data.exp[i] = player->getExpArray()[i];
|
|
|
|
}
|
|
|
|
|
2017-10-09 20:09:49 +02:00
|
|
|
memcpy( m_data.orchestrionMask, player->getOrchestrionBitmask(), sizeof( m_data.orchestrionMask ) );
|
|
|
|
|
2017-10-17 21:31:00 +02:00
|
|
|
memset( m_data.mountGuideMask, 0xFF, sizeof( m_data.mountGuideMask) );
|
2017-10-18 18:08:51 +02:00
|
|
|
memset( m_data.fishingGuideMask, 0xFF, sizeof( m_data.fishingGuideMask ) );
|
2017-10-17 21:31:00 +02:00
|
|
|
|
2017-08-08 13:53:47 +02:00
|
|
|
memcpy( m_data.unlockBitmask, player->getUnlockBitmask(), sizeof( m_data.unlockBitmask ) );
|
|
|
|
|
|
|
|
memcpy( m_data.discovery, player->getDiscoveryBitmask(), sizeof( m_data.discovery ) );
|
|
|
|
|
|
|
|
memcpy( m_data.howto, player->getHowToArray(), sizeof( m_data.howto ) );
|
|
|
|
|
2017-08-09 23:13:27 +02:00
|
|
|
m_data.unknown_13 = 0x46;
|
|
|
|
m_data.expansion = 2;
|
2017-08-08 13:53:47 +02:00
|
|
|
|
|
|
|
//memset( m_data.unlockBitmask, 0xFF, sizeof( m_data.unlockBitmask ) );
|
|
|
|
//memset( m_data.unknown_0344, 0xFF, sizeof( m_data.unknown_0344 ) );
|
|
|
|
//memset( m_data.unknown_F4, 0xFF, sizeof( m_data.unknown_F4 ) );
|
|
|
|
//m_data.pos.x = player->getPos().getX();
|
|
|
|
//m_data.pos.y = player->getPos().getY();
|
|
|
|
//m_data.pos.z = player->getPos().getZ();
|
|
|
|
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /*_CORE_NETWORK_PACKETS_CINITUIPACKET_H*/
|