From add84d65167f287d7b28be510ab027fa5ae479e3 Mon Sep 17 00:00:00 2001 From: Mordred Admin Date: Thu, 11 Jan 2018 14:59:39 +0100 Subject: [PATCH] Simplified handling of state flags --- .../sapphire_zone/Action/ActionCast.cpp | 3 --- .../sapphire_zone/Action/ActionMount.cpp | 3 --- .../sapphire_zone/Action/ActionTeleport.cpp | 3 --- .../sapphire_zone/Action/EventAction.cpp | 3 --- .../sapphire_zone/Action/EventItemAction.cpp | 3 --- src/servers/sapphire_zone/Actor/Player.cpp | 27 ++++++++++++------- .../sapphire_zone/Actor/PlayerEvent.cpp | 16 ----------- .../Network/Handlers/ActionHandler.cpp | 1 - 8 files changed, 17 insertions(+), 42 deletions(-) diff --git a/src/servers/sapphire_zone/Action/ActionCast.cpp b/src/servers/sapphire_zone/Action/ActionCast.cpp index 002504fd..b9289b30 100644 --- a/src/servers/sapphire_zone/Action/ActionCast.cpp +++ b/src/servers/sapphire_zone/Action/ActionCast.cpp @@ -58,7 +58,6 @@ void Core::Action::ActionCast::onStart() m_pSource->sendToInRangeSet( castPacket, true ); m_pSource->getAsPlayer()->setStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); } @@ -71,7 +70,6 @@ void Core::Action::ActionCast::onFinish() pPlayer->sendDebug( "onFinish()" ); pPlayer->unsetStateFlag( PlayerStateFlag::Casting ); - pPlayer->sendStateFlags(); /*auto control = ActorControlPacket143( m_pTarget->getId(), ActorControlType::Unk7, 0x219, m_id, m_id, m_id, m_id ); @@ -87,7 +85,6 @@ void Core::Action::ActionCast::onInterrupt() m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 ); m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); auto control = ActorControlPacket142( m_pSource->getId(), ActorControlType::CastInterrupt, 0x219, 1, m_id, 0 ); diff --git a/src/servers/sapphire_zone/Action/ActionMount.cpp b/src/servers/sapphire_zone/Action/ActionMount.cpp index 6ff6c8b9..5e5a4846 100644 --- a/src/servers/sapphire_zone/Action/ActionMount.cpp +++ b/src/servers/sapphire_zone/Action/ActionMount.cpp @@ -60,7 +60,6 @@ void Core::Action::ActionMount::onStart() m_pSource->sendToInRangeSet( castPacket, true ); m_pSource->getAsPlayer()->setStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); } @@ -73,7 +72,6 @@ void Core::Action::ActionMount::onFinish() pPlayer->sendDebug( "ActionMount::onFinish()" ); pPlayer->unsetStateFlag( PlayerStateFlag::Casting ); - pPlayer->sendStateFlags(); ZoneChannelPacket< FFXIVIpcEffect > effectPacket( pPlayer->getId() ); effectPacket.data().targetId = pPlayer->getId(); @@ -100,7 +98,6 @@ void Core::Action::ActionMount::onInterrupt() m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 ); m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); auto control = ActorControlPacket142( m_pSource->getId(), ActorControlType::CastInterrupt, 0x219, 1, m_id, 0 ); diff --git a/src/servers/sapphire_zone/Action/ActionTeleport.cpp b/src/servers/sapphire_zone/Action/ActionTeleport.cpp index 7e8cec18..bb53e522 100644 --- a/src/servers/sapphire_zone/Action/ActionTeleport.cpp +++ b/src/servers/sapphire_zone/Action/ActionTeleport.cpp @@ -54,7 +54,6 @@ void Core::Action::ActionTeleport::onStart() m_pSource->sendToInRangeSet( castPacket, true ); m_pSource->getAsPlayer()->setStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); } @@ -75,7 +74,6 @@ void Core::Action::ActionTeleport::onFinish() pPlayer->removeCurrency( Inventory::CurrencyType::Gil, m_cost ); pPlayer->unsetStateFlag( PlayerStateFlag::Casting ); - pPlayer->sendStateFlags(); // TODO: not sure if this ever gets sent //auto control = Network::Packets::Server::ActorControlPacket142( m_pSource->getId(), Common::ActorControlType::TeleportDone ); @@ -105,7 +103,6 @@ void Core::Action::ActionTeleport::onInterrupt() return; m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); auto control = ActorControlPacket142( m_pSource->getId(), ActorControlType::CastInterrupt, 0x219, 0x04, m_id, 0 ); diff --git a/src/servers/sapphire_zone/Action/EventAction.cpp b/src/servers/sapphire_zone/Action/EventAction.cpp index 0aa85bfc..869fa089 100644 --- a/src/servers/sapphire_zone/Action/EventAction.cpp +++ b/src/servers/sapphire_zone/Action/EventAction.cpp @@ -54,7 +54,6 @@ void Core::Action::EventAction::onStart() { m_pSource->sendToInRangeSet( control, true ); m_pSource->getAsPlayer()->setStateFlag( PlayerStateFlag::SomeFlag ); - m_pSource->getAsPlayer()->sendStateFlags(); } else m_pSource->sendToInRangeSet( control ); @@ -84,7 +83,6 @@ void Core::Action::EventAction::onFinish() if( m_pSource->isPlayer() ) { m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::SomeFlag ); - m_pSource->getAsPlayer()->sendStateFlags(); m_pSource->sendToInRangeSet( control, true ); } else @@ -114,7 +112,6 @@ void Core::Action::EventAction::onInterrupt() m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::NoCombat ); m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Occupied1 ); - m_pSource->getAsPlayer()->sendStateFlags(); m_pSource->sendToInRangeSet( control ); m_pSource->sendToInRangeSet( control1 ); diff --git a/src/servers/sapphire_zone/Action/EventItemAction.cpp b/src/servers/sapphire_zone/Action/EventItemAction.cpp index 3a8c3f78..28ddd8fb 100644 --- a/src/servers/sapphire_zone/Action/EventItemAction.cpp +++ b/src/servers/sapphire_zone/Action/EventItemAction.cpp @@ -56,7 +56,6 @@ void Core::Action::EventItemAction::onStart() m_pSource->sendToInRangeSet( castPacket, true ); m_pSource->getAsPlayer()->setStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); } @@ -78,7 +77,6 @@ void Core::Action::EventItemAction::onFinish() effectPacket.data().effectTarget = static_cast< uint32_t >( m_additional ); m_pSource->getAsPlayer()->unsetStateFlag( Common::PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); m_pSource->sendToInRangeSet( effectPacket, true ); if( m_onActionFinishClb ) @@ -104,7 +102,6 @@ void Core::Action::EventItemAction::onInterrupt() if( m_pSource->isPlayer() ) { m_pSource->getAsPlayer()->unsetStateFlag( PlayerStateFlag::Casting ); - m_pSource->getAsPlayer()->sendStateFlags(); m_pSource->sendToInRangeSet( control, true ); } else diff --git a/src/servers/sapphire_zone/Actor/Player.cpp b/src/servers/sapphire_zone/Actor/Player.cpp index eecd4f2c..b2438051 100644 --- a/src/servers/sapphire_zone/Actor/Player.cpp +++ b/src/servers/sapphire_zone/Actor/Player.cpp @@ -308,7 +308,6 @@ void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) } setStateFlag( PlayerStateFlag::BetweenAreas ); - sendStateFlags(); auto z_pos = g_zoneMgr.getZonePosition( data->levelId ); @@ -402,7 +401,6 @@ void Core::Entity::Player::setZone( uint32_t zoneId ) // set flags, will be reset automatically by zoning ( only on client side though ) pPlayer->setStateFlag( PlayerStateFlag::BetweenAreas ); pPlayer->setStateFlag( PlayerStateFlag::BetweenAreas1 ); - pPlayer->sendStateFlags(); pPlayer->sendStats(); @@ -580,7 +578,6 @@ void Core::Entity::Player::setNewAdventurer( bool state ) //{ // setStateFlag( PlayerStateFlag::NewAdventurer ); //} - sendStateFlags(); m_bNewAdventurer = state; } @@ -972,6 +969,7 @@ bool Core::Entity::Player::hasStateFlag( Common::PlayerStateFlag flag ) const void Core::Entity::Player::setStateFlag( Common::PlayerStateFlag flag ) { + auto prevOnlineStatus = getOnlineStatus(); int32_t iFlag = static_cast< uint32_t >( flag ); uint16_t index; @@ -979,6 +977,13 @@ void Core::Entity::Player::setStateFlag( Common::PlayerStateFlag flag ) Util::valueToFlagByteIndexValue( iFlag, value, index ); m_stateFlags[index] |= value; + sendStateFlags(); + + auto newOnlineStatus = getOnlineStatus(); + + if( prevOnlineStatus != newOnlineStatus ) + sendToInRangeSet( ActorControlPacket142( getId(), SetStatusIcon, + static_cast< uint8_t >( getOnlineStatus() ) ), true ); } @@ -986,13 +991,7 @@ void Core::Entity::Player::setStateFlags( std::vector< Common::PlayerStateFlag > { for( const auto& flag : flags ) { - int iFlag = static_cast< uint32_t >( flag ); - - uint16_t index; - uint8_t value; - Util::valueToFlagByteIndexValue( iFlag, value, index ); - - m_stateFlags[index] |= value; + setStateFlag( flag ); } } @@ -1006,6 +1005,8 @@ void Core::Entity::Player::unsetStateFlag( Common::PlayerStateFlag flag ) if( !hasStateFlag( flag ) ) return; + auto prevOnlineStatus = getOnlineStatus(); + int32_t iFlag = static_cast< uint32_t >( flag ); uint16_t index; @@ -1013,7 +1014,13 @@ void Core::Entity::Player::unsetStateFlag( Common::PlayerStateFlag flag ) Util::valueToFlagByteIndexValue( iFlag, value, index ); m_stateFlags[index] ^= value; + sendStateFlags(); + auto newOnlineStatus = getOnlineStatus(); + + if( prevOnlineStatus != newOnlineStatus ) + sendToInRangeSet( ActorControlPacket142( getId(), SetStatusIcon, + static_cast< uint8_t >( getOnlineStatus() ) ), true ); } void Core::Entity::Player::update( int64_t currTime ) diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index b1ec4f57..c5bae3e2 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -83,7 +83,6 @@ void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId, addEvent( newEvent ); setStateFlag( PlayerStateFlag::Occupied2 ); - sendStateFlags(); EventStartPacket eventStart( getId(), actorId, eventId, eventType, eventParam1, eventParam2 ); @@ -114,11 +113,7 @@ void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, uint32_t eventParam3, Event::EventHandler::SceneReturnCallback eventCallback ) { if( flags & 0x02 ) - { setStateFlag( PlayerStateFlag::WatchingCutscene ); - sendToInRangeSet( ActorControlPacket142( getId(), SetStatusIcon, - static_cast< uint8_t >( getOnlineStatus() ) ), true ); - } auto pEvent = getEvent( eventId ); if( !pEvent && getEventCount() ) @@ -146,11 +141,7 @@ void Core::Entity::Player::eventPlay( uint32_t eventId, uint32_t scene, uint32_t eventParam3, uint32_t eventParam4, Event::EventHandler::SceneReturnCallback eventCallback ) { if( flags & 0x02 ) - { setStateFlag( PlayerStateFlag::WatchingCutscene ); - sendToInRangeSet( ActorControlPacket142( getId(), SetStatusIcon, - static_cast< uint8_t >( getOnlineStatus() ) ), true ); - } auto pEvent = getEvent( eventId ); if( !pEvent && getEventCount() ) @@ -219,19 +210,12 @@ void Core::Entity::Player::eventFinish( uint32_t eventId, uint32_t freePlayer ) } if( hasStateFlag( PlayerStateFlag::WatchingCutscene ) ) - { unsetStateFlag( PlayerStateFlag::WatchingCutscene ); - sendToInRangeSet( ActorControlPacket142( getId(), SetStatusIcon, - static_cast< uint8_t >( getOnlineStatus() ) ), true ); - } removeEvent( pEvent->getId() ); if( freePlayer == 1 ) - { unsetStateFlag( PlayerStateFlag::Occupied2 ); - sendStateFlags(); - } } void Core::Entity::Player::eventActionStart( uint32_t eventId, diff --git a/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp b/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp index b1494413..79e5e8ea 100644 --- a/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/ActionHandler.cpp @@ -196,7 +196,6 @@ void Core::Network::GameConnection::actionHandler( const Packets::GamePacket& in player.unsetStateFlag( PlayerStateFlag::BetweenAreas ); player.unsetStateFlag( PlayerStateFlag::BetweenAreas1 ); - player.sendStateFlags(); break; }