1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-29 07:37:45 +00:00
sapphire/src/servers/Server_Zone/PlayerStateFlagsPacket.h

58 lines
1.2 KiB
C
Raw Normal View History

2017-08-08 13:53:47 +02:00
#ifndef _PLAYERSTATE_H
#define _PLAYERSTATE_H
#include <Server_Common/GamePacketNew.h>
#include "Player.h"
#include "Forwards.h"
namespace Core {
namespace Network {
namespace Packets {
namespace Server {
/**
* @brief The Ping response packet.
*/
class PlayerStateFlagsPacket :
public GamePacketNew< FFXIVIpcPlayerStateFlags >
{
public:
PlayerStateFlagsPacket( Entity::PlayerPtr pActor ) :
GamePacketNew< FFXIVIpcPlayerStateFlags >( pActor->getId(), pActor->getId() )
{
initialize( pActor->getStateFlags() );
}
PlayerStateFlagsPacket( Entity::PlayerPtr pActor, std::vector< Common::PlayerStateFlag > flags ) :
GamePacketNew< FFXIVIpcPlayerStateFlags >( pActor->getId(), pActor->getId() )
{
uint8_t newFlags[7];
memset( newFlags, 0, 7 );
for( auto& flag : flags )
{
int iFlag = static_cast< uint32_t >( flag );
uint8_t index = iFlag / 8;
uint8_t bitIndex = iFlag % 8;
uint8_t value = 1 << bitIndex;
newFlags[index] |= value;
}
initialize( newFlags );
}
private:
void initialize( const uint8_t* flags )
{
memcpy( m_data.flags, flags, 7 );
};
};
}
}
}
}
#endif /*_PLAYERSTATE_H*/