1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-01 16:37:45 +00:00

Actionhandler cleaned up a bit

This commit is contained in:
Mordred 2018-02-17 01:20:40 +01:00
parent 8c1835437f
commit c09ec03921
3 changed files with 92 additions and 30 deletions

View file

@ -1357,6 +1357,11 @@ uint8_t* Core::Entity::Player::getTitleList()
return m_titleList; return m_titleList;
} }
const uint8_t* Core::Entity::Player::getTitleList() const
{
return m_titleList;
}
uint16_t Core::Entity::Player::getTitle() const uint16_t Core::Entity::Player::getTitle() const
{ {
return m_activeTitle; return m_activeTitle;
@ -1541,17 +1546,17 @@ void Core::Entity::Player::setEorzeaTimeOffset( uint64_t timestamp )
queuePacket( packet ); queuePacket( packet );
} }
void Player::setTerritoryId( uint32_t territoryId ) void Core::Entity::Player::setTerritoryId( uint32_t territoryId )
{ {
m_zoneId = territoryId; m_zoneId = territoryId;
} }
uint32_t Player::getTerritoryId() const uint32_t Core::Entity::Player::getTerritoryId() const
{ {
return m_zoneId; return m_zoneId;
} }
void Player::sendZonePackets() void Core::Entity::Player::sendZonePackets()
{ {
ZoneChannelPacket< FFXIVIpcInit > initPacket( getId() ); ZoneChannelPacket< FFXIVIpcInit > initPacket( getId() );
initPacket.data().charId = getId(); initPacket.data().charId = getId();
@ -1623,12 +1628,20 @@ void Player::sendZonePackets()
m_bMarkedForZoning = false; m_bMarkedForZoning = false;
} }
void Player::setDirectorInitialized( bool isInitialized ) void Core::Entity::Player::setDirectorInitialized( bool isInitialized )
{ {
m_directorInitialized = isInitialized; m_directorInitialized = isInitialized;
} }
bool Player::isDirectorInitialized() const bool Core::Entity::Player::isDirectorInitialized() const
{ {
return m_directorInitialized; return m_directorInitialized;
} }
void Core::Entity::Player::sendTitleList()
{
ZoneChannelPacket< FFXIVIpcPlayerTitleList > titleListPacket( getId() );
memcpy( titleListPacket.data().titleList, getTitleList(), sizeof( titleListPacket.data().titleList ) );
queuePacket( titleListPacket );
}

View file

@ -347,12 +347,15 @@ public:
void prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadoutTime = 0, uint16_t animation = 0 ); void prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadoutTime = 0, uint16_t animation = 0 );
/*! get player's title list (available titles) */ /*! get player's title list (available titles) */
uint8_t* getTitleList(); uint8_t* getTitleList();
const uint8_t* getTitleList() const;
/*! get player's active title */ /*! get player's active title */
uint16_t getTitle() const; uint16_t getTitle() const;
/*! add title to player title list */ /*! add title to player title list */
void addTitle( uint16_t titleId ); void addTitle( uint16_t titleId );
/*! change player's active title */ /*! change player's active title */
void setTitle( uint16_t titleId ); void setTitle( uint16_t titleId );
/*! send the players title list */
void sendTitleList();
/*! change gear param state */ /*! change gear param state */
void setEquipDisplayFlags( uint8_t state ); void setEquipDisplayFlags( uint8_t state );
/*! get gear param state */ /*! get gear param state */

View file

@ -43,6 +43,55 @@ using namespace Core::Common;
using namespace Core::Network::Packets; using namespace Core::Network::Packets;
using namespace Core::Network::Packets::Server; using namespace Core::Network::Packets::Server;
enum ClientTrigger
{
ToggleSeathe = 0x01,
ToggleAutoAttack = 0x02,
ChangeTarget = 0x03,
Dismount = 0x65,
RemoveStatusEffect = 0x68,
CastCancel = 0x69,
Return = 0xC8, // return dead / accept raise
FinishZoning = 0xC9,
Teleport = 0xCA,
MarkPlayer = 0x12D, // Mark player, visible to party only
SetTitle = 0x12E,
TitleList = 0x12F,
UpdatedSeenHowTos = 0x133,
AllotAttribute = 0x135,
HuntingLogDetails = 0x194,
EstateTimers = 0x1AB,
DyeItem = 0x1B5,
Emote = 0x1F4,
PersistantEmoteCancel = 0x1F7,
PoseChange = 0x1F9,
PoseReapply = 0x1FA,
PoseCancel = 0x1FB,
AchievementCrit = 0x202,
AchievementComp = 0x203,
AchievementCatChat = 0x206,
AchievementCritReq = 0x3E8,
AchievementList = 0x3E9,
DirectorInitFinish = 0x321,
CompanionAction = 0x6A4,
CompanionSetBarding = 0x6A5,
CompanionActionUnlock = 0x6A6,
};
void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& inPacket, void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& inPacket,
Entity::Player& player ) Entity::Player& player )
{ {
@ -65,7 +114,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
switch( commandId ) switch( commandId )
{ {
case 0x01: // Toggle sheathe case ClientTrigger::ToggleSeathe: // Toggle sheathe
{ {
if ( param11 == 1 ) if ( param11 == 1 )
player.setStance( Entity::Actor::Stance::Active ); player.setStance( Entity::Actor::Stance::Active );
@ -79,7 +128,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
break; break;
} }
case 0x02: // Toggle auto-attack case ClientTrigger::ToggleAutoAttack: // Toggle auto-attack
{ {
if ( param11 == 1 ) if ( param11 == 1 )
{ {
@ -93,78 +142,75 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
break; break;
} }
case 0x03: // Change target case ClientTrigger::ChangeTarget: // Change target
{ {
uint64_t targetId = inPacket.getValAt< uint64_t >( 0x24 ); uint64_t targetId = inPacket.getValAt< uint64_t >( 0x24 );
player.changeTarget( targetId ); player.changeTarget( targetId );
break; break;
} }
case 0x65: case ClientTrigger::Dismount:
{ {
player.dismount(); player.dismount();
break; break;
} }
case 0x68: // Remove status (clicking it off) case ClientTrigger::RemoveStatusEffect: // Remove status (clicking it off)
{ {
// todo: check if status can be removed by client from exd // todo: check if status can be removed by client from exd
player.removeSingleStatusEffectById( static_cast< uint32_t >( param1 ) ); player.removeSingleStatusEffectById( static_cast< uint32_t >( param1 ) );
break; break;
} }
case 0x69: // Cancel cast case ClientTrigger::CastCancel: // Cancel cast
{ {
if( player.getCurrentAction() ) if( player.getCurrentAction() )
player.getCurrentAction()->setInterrupted(); player.getCurrentAction()->setInterrupted();
break; break;
} }
case 0x12D: // Mark player case ClientTrigger::MarkPlayer: // Mark player
{ {
break; break;
} }
case 0x12E: // Set player title case ClientTrigger::SetTitle: // Set player title
{ {
player.setTitle( static_cast< uint16_t >( param1 ) ); player.setTitle( static_cast< uint16_t >( param1 ) );
break; break;
} }
case 0x12F: // Get title list case ClientTrigger::TitleList: // Get title list
{ {
ZoneChannelPacket< FFXIVIpcPlayerTitleList > titleListPacket( player.getId() ); player.sendTitleList();
memcpy( titleListPacket.data().titleList, player.getTitleList(), sizeof( titleListPacket.data().titleList ) );
player.queuePacket( titleListPacket );
break; break;
} }
case 0x133: // Update howtos seen case ClientTrigger::UpdatedSeenHowTos: // Update howtos seen
{ {
uint32_t howToId = param11; uint32_t howToId = param11;
player.updateHowtosSeen( howToId ); player.updateHowtosSeen( howToId );
break; break;
} }
case 0x1F4: // emote case ClientTrigger::Emote: // emote
{ {
uint64_t targetId = player.getTargetId(); uint64_t targetId = player.getTargetId();
uint32_t emoteId = inPacket.getValAt< uint32_t >( 0x24 ); uint32_t emoteId = inPacket.getValAt< uint32_t >( 0x24 );
player.sendToInRangeSet( ActorControlPacket144( player.getId(), Emote, emoteId, 0, 0, 0, targetId ) ); player.sendToInRangeSet( ActorControlPacket144( player.getId(), ActorControlType::Emote, emoteId, 0, 0, 0, targetId ) );
break; break;
} }
case 0x1F7: // cancel persistant emote case ClientTrigger::PersistantEmoteCancel: // cancel persistant emote
{ {
break; break;
} }
case 0x1F9: // change pose case ClientTrigger::PoseChange: // change pose
{ {
break; break;
} }
case 0x1FA: // reapply pose case ClientTrigger::PoseReapply: // reapply pose
{ {
break; break;
} }
case 0x1FB: // cancel pose case ClientTrigger::PoseCancel: // cancel pose
{ {
break; break;
} }
case 0xC8: // return dead / accept raise case ClientTrigger::Return: // return dead / accept raise
{ {
switch ( static_cast < ResurrectType >( param1 ) ) switch ( static_cast < ResurrectType >( param1 ) )
{ {
@ -180,7 +226,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
} }
} }
case 0xC9: // Finish zoning case ClientTrigger::FinishZoning: // Finish zoning
{ {
switch( player.getZoningType() ) switch( player.getZoningType() )
{ {
@ -216,7 +262,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
break; break;
} }
case 0xCA: // Teleport case ClientTrigger::Teleport: // Teleport
{ {
// TODO: only register this action if enough gil is in possession // TODO: only register this action if enough gil is in possession
auto targetAetheryte = g_exdDataGen.get< Core::Data::Aetheryte >( param11 ); auto targetAetheryte = g_exdDataGen.get< Core::Data::Aetheryte >( param11 );
@ -244,11 +290,11 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
} }
break; break;
} }
case 0x1B5: // Dye item case ClientTrigger::DyeItem: // Dye item
{ {
break; break;
} }
case 0x321: // Director init finish case ClientTrigger::DirectorInitFinish: // Director init finish
{ {
player.getCurrentZone()->onInitDirector( player ); player.getCurrentZone()->onInitDirector( player );
break; break;