mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-01 08:27:46 +00:00
Actionhandler cleaned up a bit
This commit is contained in:
parent
b9a78b72fd
commit
1f37416202
3 changed files with 92 additions and 30 deletions
|
@ -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 );
|
||||||
|
}
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Reference in a new issue