mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-05-01 00:27:44 +00:00
removed all unused state flags, mapped more client actions
This commit is contained in:
parent
50f90d960b
commit
5d8b5786d6
11 changed files with 48 additions and 86 deletions
|
@ -380,73 +380,21 @@ namespace Common {
|
|||
InvincibilityStayAlive,
|
||||
};
|
||||
|
||||
enum struct PlayerStateFlag : uint8_t
|
||||
enum PlayerStateFlag : uint8_t
|
||||
{
|
||||
NoCombat,
|
||||
Combat,
|
||||
Casting,
|
||||
StatusAffliction,
|
||||
StatusAffliction1,
|
||||
Occupied,
|
||||
Occupied1,
|
||||
Occupied2,
|
||||
Occupied3,
|
||||
HideUILockChar = 0, // as the name suggests, hides the ui and logs the char...
|
||||
InCombat = 1, // in Combat, locks gearchange/return/teleport
|
||||
Casting = 2,
|
||||
InNpcEvent = 7, // when talking to an npc, locks ui giving "occupied" message
|
||||
|
||||
BoundByDuty,
|
||||
Occupied4,
|
||||
DuelingArea,
|
||||
TradeOpen,
|
||||
Occupied5,
|
||||
HandlingItems,
|
||||
Crafting,
|
||||
PreparingToCraft,
|
||||
Gathering,
|
||||
Fishing,
|
||||
InNpcEvent1 = 10, // Sent together with InNpcEvent, when waiting for input? just a guess...
|
||||
|
||||
BeingRaised,
|
||||
BetweenAreas,
|
||||
Stealthed,
|
||||
InnRoom,
|
||||
Jumping,
|
||||
AutoRun,
|
||||
Occupied6,
|
||||
BetweenAreas1,
|
||||
SystemError,
|
||||
LoggingOut,
|
||||
BoundByDuty = 11,
|
||||
|
||||
InvalidLocation,
|
||||
WaitingForDuty,
|
||||
BoundByDuty1,
|
||||
Mounting,
|
||||
WatchingCutscene,
|
||||
WaitingForDutyFinder,
|
||||
CreatingCharacter,
|
||||
Jumping1,
|
||||
PvpDisplay,
|
||||
StatusAfflication2,
|
||||
BetweenAreas = 24,
|
||||
|
||||
Mounting1,
|
||||
CarryingItem,
|
||||
UsingPartyFinder,
|
||||
HousingFunctions,
|
||||
Transformed,
|
||||
FreeTrail,
|
||||
BeingMoved,
|
||||
Mounting2,
|
||||
StatusAffliction3,
|
||||
StatusAffliction4,
|
||||
WatchingCutscene = 50, // this is actually just a dummy, this id is different
|
||||
|
||||
RegisteringRaceOrMatch,
|
||||
WaitingForRaceOrMatch,
|
||||
WaitingForTripleTriadMatch,
|
||||
InFlight,
|
||||
WatchingCutscene1,
|
||||
DeepDungeon,
|
||||
Swimming,
|
||||
Diving,
|
||||
RegisteringTripleTriad,
|
||||
WaitingTripleTriad,
|
||||
InCrossWorldParty
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -826,10 +826,8 @@ struct FFXIVIpcActorOwner : FFXIVIpcBasePacket<ActorOwner>
|
|||
*/
|
||||
struct FFXIVIpcPlayerStateFlags : FFXIVIpcBasePacket<PlayerStateFlags>
|
||||
{
|
||||
uint8_t flags[7];
|
||||
uint8_t padding1[3];
|
||||
uint32_t padding2;
|
||||
uint16_t padding;
|
||||
uint8_t flags[12];
|
||||
uint32_t padding;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -83,7 +83,7 @@ void Core::Action::ActionCast::onInterrupt()
|
|||
if( !m_pSource )
|
||||
return;
|
||||
|
||||
m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 );
|
||||
//m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 );
|
||||
m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Casting );
|
||||
|
||||
auto control = ActorControlPacket142( m_pSource->getId(), ActorControlType::CastInterrupt,
|
||||
|
|
|
@ -94,7 +94,7 @@ void Core::Action::ActionMount::onInterrupt()
|
|||
if( !m_pSource )
|
||||
return;
|
||||
|
||||
m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 );
|
||||
//m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 );
|
||||
m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Casting );
|
||||
|
||||
auto control = ActorControlPacket142( m_pSource->getId(), ActorControlType::CastInterrupt,
|
||||
|
|
|
@ -53,7 +53,7 @@ void Core::Action::EventAction::onStart()
|
|||
if( m_pSource->isPlayer() )
|
||||
{
|
||||
m_pSource->sendToInRangeSet( control, true );
|
||||
m_pSource->getAsPlayer()->setStateFlag( PlayerStateFlag::Occupied2 );
|
||||
//m_pSource->getAsPlayer()->setStateFlag( PlayerStateFlag::Occupied2 );
|
||||
}
|
||||
else
|
||||
m_pSource->sendToInRangeSet( control );
|
||||
|
@ -82,7 +82,7 @@ void Core::Action::EventAction::onFinish()
|
|||
|
||||
if( m_pSource->isPlayer() )
|
||||
{
|
||||
m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied2 );
|
||||
//m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied2 );
|
||||
m_pSource->sendToInRangeSet( control, true );
|
||||
}
|
||||
else
|
||||
|
@ -110,8 +110,8 @@ void Core::Action::EventAction::onInterrupt()
|
|||
{
|
||||
auto control1 = ActorControlPacket143( m_pSource->getId(), ActorControlType::FreeEventPos, m_eventId );
|
||||
|
||||
m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::NoCombat );
|
||||
m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 );
|
||||
//m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::NoCombat );
|
||||
//m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 );
|
||||
m_pSource->sendToInRangeSet( control );
|
||||
m_pSource->sendToInRangeSet( control1 );
|
||||
|
||||
|
|
|
@ -177,7 +177,7 @@ Core::Common::OnlineStatus Core::Entity::Player::getOnlineStatus()
|
|||
if( m_onlineStatus & rpMask )
|
||||
status = OnlineStatus::Roleplaying;
|
||||
|
||||
if( hasStateFlag( PlayerStateFlag::WatchingCutscene ) || hasStateFlag( PlayerStateFlag::WatchingCutscene1 ) )
|
||||
if( hasStateFlag( PlayerStateFlag::WatchingCutscene ) )
|
||||
status = OnlineStatus::ViewingCutscene;
|
||||
|
||||
// TODO: add all the logic for returning the proper online status, there probably is a better way for this alltogether
|
||||
|
|
|
@ -637,7 +637,7 @@ private:
|
|||
boost::shared_ptr< Common::QuestActive > m_activeQuests[30];
|
||||
int16_t m_questTracking[5];
|
||||
|
||||
uint8_t m_stateFlags[7];
|
||||
uint8_t m_stateFlags[12];
|
||||
uint8_t m_gmRank;
|
||||
uint16_t zoneId;
|
||||
|
||||
|
|
|
@ -84,7 +84,7 @@ void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId,
|
|||
|
||||
addEvent( newEvent );
|
||||
|
||||
setStateFlag( PlayerStateFlag::Occupied2 );
|
||||
setStateFlag( PlayerStateFlag::InNpcEvent );
|
||||
|
||||
EventStartPacket eventStart( getId(), actorId, eventId, eventType, eventParam1, eventParam2 );
|
||||
|
||||
|
@ -218,7 +218,7 @@ void Core::Entity::Player::eventFinish( uint32_t eventId, uint32_t freePlayer )
|
|||
removeEvent( pEvent->getId() );
|
||||
|
||||
if( freePlayer == 1 )
|
||||
unsetStateFlag( PlayerStateFlag::Occupied2 );
|
||||
unsetStateFlag( PlayerStateFlag::InNpcEvent );
|
||||
}
|
||||
|
||||
void Core::Entity::Player::eventActionStart( uint32_t eventId,
|
||||
|
@ -290,7 +290,6 @@ void Core::Entity::Player::onDeath()
|
|||
|
||||
}
|
||||
|
||||
|
||||
// TODO: slightly ugly here and way too static. Needs too be done properly
|
||||
void Core::Entity::Player::onTick()
|
||||
{
|
||||
|
|
|
@ -117,6 +117,10 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
|||
player.getCurrentAction()->setInterrupted();
|
||||
break;
|
||||
}
|
||||
case 0x12D: // Mark player
|
||||
{
|
||||
break;
|
||||
}
|
||||
case 0x12E: // Set player title
|
||||
{
|
||||
player.setTitle( static_cast< uint16_t >( param1 ) );
|
||||
|
@ -132,7 +136,7 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
|||
}
|
||||
case 0x133: // Update howtos seen
|
||||
{
|
||||
uint32_t howToId = static_cast< uint32_t >( param1 );
|
||||
uint32_t howToId = param11;
|
||||
player.updateHowtosSeen( howToId );
|
||||
break;
|
||||
}
|
||||
|
@ -144,7 +148,23 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
|||
player.sendToInRangeSet( ActorControlPacket144( player.getId(), Emote, emoteId, 0, 0, 0, targetId ) );
|
||||
break;
|
||||
}
|
||||
case 0xC8: // return dead
|
||||
case 0x1F7: // cancel persistant emote
|
||||
{
|
||||
break;
|
||||
}
|
||||
case 0x1F9: // change pose
|
||||
{
|
||||
break;
|
||||
}
|
||||
case 0x1FA: // reapply pose
|
||||
{
|
||||
break;
|
||||
}
|
||||
case 0x1FB: // cancel pose
|
||||
{
|
||||
break;
|
||||
}
|
||||
case 0xC8: // return dead / accept raise
|
||||
{
|
||||
switch ( static_cast < ResurrectType >( param1 ) )
|
||||
{
|
||||
|
@ -193,7 +213,6 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in
|
|||
player.setZoningType( Common::ZoneingType::None );
|
||||
|
||||
player.unsetStateFlag( PlayerStateFlag::BetweenAreas );
|
||||
player.unsetStateFlag( PlayerStateFlag::BetweenAreas1 );
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -564,16 +564,14 @@ void Core::Network::GameConnection::tellHandler( const Packets::GamePacket& inPa
|
|||
|
||||
auto pTargetPlayer = pSession->getPlayer();
|
||||
|
||||
if( pTargetPlayer->hasStateFlag( PlayerStateFlag::BetweenAreas ) ||
|
||||
pTargetPlayer->hasStateFlag( PlayerStateFlag::BetweenAreas1 ) )
|
||||
if( pTargetPlayer->hasStateFlag( PlayerStateFlag::BetweenAreas ) )
|
||||
{
|
||||
// send error for player between areas
|
||||
// TODO: implement me
|
||||
return;
|
||||
}
|
||||
|
||||
if( pTargetPlayer->hasStateFlag( PlayerStateFlag::BoundByDuty ) ||
|
||||
pTargetPlayer->hasStateFlag( PlayerStateFlag::BoundByDuty1 ) )
|
||||
if( pTargetPlayer->hasStateFlag( PlayerStateFlag::BoundByDuty ) )
|
||||
{
|
||||
// send error for player bound by duty
|
||||
// TODO: implement me
|
||||
|
|
|
@ -26,8 +26,8 @@ public:
|
|||
PlayerStateFlagsPacket( Entity::Player& player, std::vector< Common::PlayerStateFlag > flags ) :
|
||||
ZoneChannelPacket< FFXIVIpcPlayerStateFlags >( player.getId(), player.getId() )
|
||||
{
|
||||
uint8_t newFlags[7];
|
||||
memset( newFlags, 0, 7 );
|
||||
uint8_t newFlags[12];
|
||||
memset( newFlags, 0, 12 );
|
||||
|
||||
for( auto& flag : flags )
|
||||
{
|
||||
|
@ -46,7 +46,7 @@ public:
|
|||
private:
|
||||
void initialize( const uint8_t* flags )
|
||||
{
|
||||
memcpy( m_data.flags, flags, 7 );
|
||||
memcpy( m_data.flags, flags, 12 );
|
||||
};
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue