1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-28 15:17:46 +00:00
sapphire/src/servers/sapphire_zone/Network/PacketWrappers/InitUIPacket.h

99 lines
3.2 KiB
C
Raw Normal View History

2017-08-08 13:53:47 +02:00
#ifndef _CORE_NETWORK_PACKETS_INITUIPACKET_H
#define _CORE_NETWORK_PACKETS_INITUIPACKET_H
2018-03-06 22:22:19 +01:00
#include <Network/GamePacketNew.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
#include "Actor/Player.h"
#include "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-11-21 18:43:09 +01:00
class InitUIPacket : public ZoneChannelPacket< FFXIVIpcInitUI >
2017-08-08 13:53:47 +02:00
{
public:
InitUIPacket( Entity::Player& player ) :
ZoneChannelPacket< FFXIVIpcInitUI >( player.getId(), player.getId() )
2017-08-08 13:53:47 +02:00
{
initialize( player );
};
private:
void initialize( Entity::Player& player )
2017-08-08 13:53:47 +02:00
{
m_data.contentId = player.getContentId();
2017-08-08 13:53:47 +02:00
// 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 );
m_data.currentClass = static_cast< uint8_t >( player.getClass() );
m_data.currentJob = static_cast< uint8_t >( player.getClass() );
m_data.maxLevel = player.getLevel();
m_data.deity = static_cast< uint8_t >( player.getGuardianDeity() );
m_data.namedayMonth = player.getBirthMonth();
m_data.namedayDay = player.getBirthDay();
2017-08-08 13:53:47 +02:00
// TODO: Support grand company status.
m_data.cityState = player.getStartTown();
2017-08-08 13:53:47 +02:00
//m_data.gcRank = GCRank::None;
m_data.homepoint = player.getHomepoint();
2018-07-14 19:32:50 -03:00
m_data.pose = player.getPose();
2017-08-08 13:53:47 +02:00
memset( &m_data.name[0], 0, sizeof( m_data.name ) );
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 ) );
2017-08-08 13:53:47 +02:00
// 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-08-08 13:53:47 +02:00
}
memcpy( m_data.orchestrionMask, player.getOrchestrionBitmask(), sizeof( m_data.orchestrionMask ) );
2017-10-09 20:09:49 +02:00
memcpy( m_data.mountGuideMask, player.getMountGuideBitmask(), sizeof( m_data.mountGuideMask) );
memcpy( m_data.unlockBitmask, player.getUnlockBitmask(), sizeof( m_data.unlockBitmask ) );
2017-08-08 13:53:47 +02:00
memcpy( m_data.discovery, player.getDiscoveryBitmask(), sizeof( m_data.discovery ) );
2017-08-08 13:53:47 +02:00
memcpy( m_data.howto, player.getHowToArray(), sizeof( m_data.howto ) );
2017-08-08 13:53:47 +02:00
// possibly max level or current level
2017-12-16 00:57:52 +01:00
m_data.maxLevel = 0x46;
2017-08-09 23:13:27 +02:00
m_data.expansion = 2;
2017-08-08 13:53:47 +02:00
2018-03-16 20:53:48 +11:00
// df stuff
// todo: actually do this properly
2018-05-27 16:21:52 +02:00
// m_data.unknown70[4] = 1; // enable df
2018-03-16 20:53:48 +11:00
// enable all raids/guildhests/dungeons
memset( m_data.unlockedDungeons, 0xFF, sizeof( m_data.unlockedDungeons ) );
memset( m_data.unlockedGuildhests, 0xFF, sizeof( m_data.unlockedGuildhests ) );
memset( m_data.unlockedPvp, 0xFF, sizeof( m_data.unlockedPvp ) );
memset( m_data.unlockedRaids, 0xFF, sizeof( m_data.unlockedRaids ) );
memset( m_data.unlockedTrials, 0xFF, sizeof( m_data.unlockedTrials ) );
2017-08-08 13:53:47 +02:00
};
};
}
}
}
}
#endif /*_CORE_NETWORK_PACKETS_CINITUIPACKET_H*/