1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-08 19:57:46 +00:00

Refactoring ongoing.

This commit is contained in:
Mordred 2023-02-20 15:25:57 +01:00
parent 188d80d2ec
commit 6bf3ac0be8
24 changed files with 117 additions and 126 deletions

View file

@ -1379,7 +1379,7 @@ namespace Sapphire::Common
REJECT_INVITE = 0x05,
};
enum PlayerStateFlag : uint8_t
enum PlayerCondition : uint8_t
{
HideUILockChar = 1, // as the name suggests, hides the ui and logs the char...
InCombat = 2, // in Combat, locks gearchange/return/teleport
@ -1839,7 +1839,7 @@ namespace Sapphire::Common
Gatherer
};
using PlayerStateFlagList = std::vector< PlayerStateFlag >;
using PlayerStateFlagList = std::vector< PlayerCondition >;
struct BNPCInstanceObject
{

View file

@ -992,7 +992,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
* Structural representation of the packet sent by the server
* to set a players state
*/
struct FFXIVIpcPlayerStateFlags : FFXIVIpcBasePacket< Condition >
struct FFXIVIpcCondition : FFXIVIpcBasePacket< Condition >
{
uint8_t flags[12];
uint32_t padding;

View file

@ -101,8 +101,8 @@ private:
void Scene00001Return( World::Quest& quest, Entity::Player& player, const Event::SceneResult& result )
{
playerMgr().onSetGc( player, OrderOfTwinAdder );
playerMgr().onSetGcRank( player, OrderOfTwinAdder, 1 );
playerMgr().setGrandCompany( player, OrderOfTwinAdder );
playerMgr().setGrandCompanyRank( player, OrderOfTwinAdder, 1 );
Scene00002( quest, player );
}

View file

@ -321,8 +321,8 @@ void Action::Action::start()
if( player )
{
player->setStateFlag( PlayerStateFlag::Casting );
Service< World::Manager::PlayerMgr >::ref().onSendStateFlags( *player, true );
player->setCondition( PlayerCondition::Casting );
Service< World::Manager::PlayerMgr >::ref().onConditionChanged( *player, true );
}
}
@ -376,7 +376,7 @@ void Action::Action::interrupt()
// reset state flag
//player->unsetStateFlag( PlayerStateFlag::Occupied1 );
pPlayer->setLastActionTick( 0 );
Service< World::Manager::PlayerMgr >::ref().onUnsetStateFlag( *pPlayer, PlayerStateFlag::Casting );
Service< World::Manager::PlayerMgr >::ref().removeCondition( *pPlayer, PlayerCondition::Casting );
}
if( hasCastTime() )
@ -423,7 +423,7 @@ void Action::Action::execute()
if( auto pPlayer = m_pSource->getAsPlayer(); pPlayer )
{
pPlayer->setLastActionTick( 0 );
Service< World::Manager::PlayerMgr >::ref().onUnsetStateFlag( *pPlayer, PlayerStateFlag::Casting );
Service< World::Manager::PlayerMgr >::ref().removeCondition( *pPlayer, PlayerCondition::Casting );
}
}

View file

@ -61,8 +61,8 @@ void Action::EventAction::start()
server().queueForPlayers( m_pSource->getInRangePlayerIds( true ), control );
if( pPlayer->hasStateFlag( PlayerStateFlag::InNpcEvent ) )
Service< World::Manager::PlayerMgr >::ref().onUnsetStateFlag( *pPlayer, PlayerStateFlag::InNpcEvent );
if( pPlayer->hasStateFlag( PlayerCondition::InNpcEvent ) )
Service< World::Manager::PlayerMgr >::ref().removeCondition( *pPlayer, PlayerCondition::InNpcEvent );
}
else
server().queueForPlayers( m_pSource->getInRangePlayerIds(), control );

View file

@ -59,7 +59,7 @@ void MountAction::start()
data.Dir = m_pSource->getRot();
server().queueForPlayers( m_pSource->getInRangePlayerIds( true ), castPacket );
Common::Service< World::Manager::PlayerMgr >::ref().onSetStateFlag( *player, Common::PlayerStateFlag::Casting );
Common::Service< World::Manager::PlayerMgr >::ref().setCondition( *player, Common::PlayerCondition::Casting );
auto actionStartPkt = makeActorControlSelf( m_pSource->getId(), ActorControlType::ActionStart, 1, getId(), m_recastTimeMs / 10 );
server().queueForPlayer( m_pSource->getAsPlayer()->getCharacterId(), actionStartPkt );
@ -69,7 +69,7 @@ void MountAction::execute()
{
assert( m_pSource );
Common::Service< World::Manager::PlayerMgr >::ref().onUnsetStateFlag( *m_pSource->getAsPlayer(), Common::PlayerStateFlag::Casting );
Common::Service< World::Manager::PlayerMgr >::ref().removeCondition( *m_pSource->getAsPlayer(), Common::PlayerCondition::Casting );
m_effectBuilder->mount( m_pSource, m_mountId );
m_effectBuilder->buildAndSendPackets( { m_pSource } );
}

View file

@ -93,7 +93,7 @@ Player::Player() :
memset( m_name, 0, sizeof( m_name ) );
memset( m_searchMessage, 0, sizeof( m_searchMessage ) );
std::fill( std::begin( m_questTracking ), std::end( m_questTracking ), 0 );
std::fill( std::begin( m_stateFlags ), std::end( m_stateFlags ), 0 );
std::fill( std::begin( m_condition ), std::end( m_condition ), 0 );
std::fill( std::begin( m_classArray ), std::end( m_classArray ), 0 );
std::fill( std::begin( m_expArray ), std::end( m_expArray ), 0 );
@ -397,7 +397,7 @@ bool Player::isAutoattackOn() const
void Player::sendStats()
{
Service< World::Manager::PlayerMgr >::ref().onSendStats( *this );
Service< World::Manager::PlayerMgr >::ref().onStatsChanged( *this );
}
bool Player::exitInstance()
@ -730,7 +730,7 @@ void Player::setClassJob( Common::ClassJob classJob )
m_tp = 0;
Service< World::Manager::PlayerMgr >::ref().onPlayerStatusUpdate( *this );
Service< World::Manager::PlayerMgr >::ref().onChangeClass( *this );
Service< World::Manager::PlayerMgr >::ref().onClassChanged( *this );
Service< World::Manager::MapMgr >::ref().updateQuests( *this );
}
@ -756,7 +756,7 @@ void Player::setLevelForClass( uint8_t level, Common::ClassJob classjob )
void Player::sendModel()
{
Service< World::Manager::PlayerMgr >::ref().onChangeGear( *this );
Service< World::Manager::PlayerMgr >::ref().onGearChanged( *this );
}
uint32_t Player::getModelForSlot( Common::GearModelSlot slot )
@ -863,10 +863,10 @@ void Player::setGcRankAt( uint8_t index, uint8_t rank )
const Player::StateFlags& Player::getStateFlags() const
{
return m_stateFlags;
return m_condition;
}
bool Player::hasStateFlag( Common::PlayerStateFlag flag ) const
bool Player::hasStateFlag( Common::PlayerCondition flag ) const
{
auto iFlag = static_cast< int32_t >( flag );
@ -874,10 +874,10 @@ bool Player::hasStateFlag( Common::PlayerStateFlag flag ) const
uint8_t value;
Util::valueToFlagByteIndexValue( iFlag, value, index );
return ( m_stateFlags[ index ] & value ) != 0;
return ( m_condition[ index ] & value ) != 0;
}
void Player::setStateFlag( Common::PlayerStateFlag flag )
void Player::setCondition( Common::PlayerCondition flag )
{
auto iFlag = static_cast< int32_t >( flag );
@ -885,10 +885,10 @@ void Player::setStateFlag( Common::PlayerStateFlag flag )
uint8_t value;
Util::valueToFlagByteIndexValue( iFlag, value, index );
m_stateFlags[ index ] |= value;
m_condition[ index ] |= value;
}
void Player::unsetStateFlag( Common::PlayerStateFlag flag )
void Player::removeCondition( Common::PlayerCondition flag )
{
if( !hasStateFlag( flag ) )
return;
@ -899,7 +899,7 @@ void Player::unsetStateFlag( Common::PlayerStateFlag flag )
uint8_t value;
Util::valueToFlagByteIndexValue( iFlag, value, index );
m_stateFlags[ index ] ^= value;
m_condition[ index ] ^= value;
}
void Player::update( uint64_t tickCount )
@ -1408,7 +1408,6 @@ void Player::teleportQuery( uint16_t aetheryteId )
cost = std::min< uint16_t >( 999, cost );
bool insufficientGil = getCurrency( Common::CurrencyType::Gil ) < cost;
// TODO: figure out what param1 really does
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), OnExecuteTelepo, insufficientGil ? 2 : 0, aetheryteId ) );
if( !insufficientGil )
@ -1466,7 +1465,7 @@ void Player::dyeItemFromDyeingInfo()
uint32_t dyeBagContainer = m_dyeingInfo.dyeBagContainer;
uint32_t dyeBagSlot = m_dyeingInfo.dyeBagSlot;
Service< World::Manager::PlayerMgr >::ref().onSendStateFlags( *this, true ); // Retail sends all 0s to unlock player after a dye? Possibly not setting a flag when the action is started in the backend..?
Service< World::Manager::PlayerMgr >::ref().onConditionChanged( *this, true ); // Retail sends all 0s to unlock player after a dye? Possibly not setting a flag when the action is started in the backend..?
auto itemToDye = getItemAt( itemToDyeContainer, itemToDyeSlot );
auto dyeToUse = getItemAt( dyeBagContainer, dyeBagSlot );
@ -1508,7 +1507,7 @@ void Player::glamourItemFromGlamouringInfo()
uint32_t glamourBagSlot = m_glamouringInfo.glamourBagSlot;
bool shouldGlamour = m_glamouringInfo.shouldGlamour;
playerMgr.onSendStateFlags( *this, true );
playerMgr.onConditionChanged( *this, true );
auto itemToGlamour = getItemAt( itemToGlamourContainer, itemToGlamourSlot );
auto glamourToUse = getItemAt( glamourBagContainer, glamourBagSlot );
@ -1905,17 +1904,6 @@ float Player::getPrevRot() const
return m_prevRot;
}
std::optional< Sapphire::World::Quest > Player::getQuest( uint32_t questId )
{
if( !hasQuest( questId ) )
return std::nullopt;
auto idx = getQuestIndex( questId );
auto quest = getQuestByIndex( idx );
return { quest };
}
bool Player::isConnected() const
{
return m_bIsConnected;

View file

@ -529,16 +529,16 @@ namespace Sapphire::Entity
const StateFlags& getStateFlags() const;
/* set a specified state flag */
void setStateFlag( Common::PlayerStateFlag flag );
void setCondition( Common::PlayerCondition flag );
/* set a specified state flag */
void setStateFlags( std::vector< Common::PlayerStateFlag > flags );
void setStateFlags( std::vector< Common::PlayerCondition > flags );
/* check if a specified flag is set */
bool hasStateFlag( Common::PlayerStateFlag flag ) const;
bool hasStateFlag( Common::PlayerCondition flag ) const;
/* reset a specified flag */
void unsetStateFlag( Common::PlayerStateFlag flag );
void removeCondition( Common::PlayerCondition flag );
/*! return the userlevel */
uint8_t getUserLevel() const;
@ -901,7 +901,7 @@ namespace Sapphire::Entity
OrchestrionList m_orchestrion{};
ClassList m_classArray{};
ExpList m_expArray{};
StateFlags m_stateFlags{};
StateFlags m_condition{};
Common::ClassJob m_firstClass{};

View file

@ -117,6 +117,17 @@ bool Sapphire::Entity::Player::addQuest( const World::Quest& quest )
return true;
}
std::optional< Sapphire::World::Quest > Sapphire::Entity::Player::getQuest( uint32_t questId )
{
if( !hasQuest( questId ) )
return std::nullopt;
auto idx = getQuestIndex( questId );
auto quest = getQuestByIndex( idx );
return { quest };
}
int8_t Sapphire::Entity::Player::getFreeQuestSlot()
{
int8_t result = -1;

View file

@ -550,13 +550,13 @@ void EventMgr::eventFinish( Sapphire::Entity::Player& player, uint32_t eventId,
}
}
if( player.hasStateFlag( Common::PlayerStateFlag::WatchingCutscene ) )
Common::Service< World::Manager::PlayerMgr >::ref().onUnsetStateFlag( player, Common::PlayerStateFlag::WatchingCutscene );
if( player.hasStateFlag( Common::PlayerCondition::WatchingCutscene ) )
Common::Service< World::Manager::PlayerMgr >::ref().removeCondition( player, Common::PlayerCondition::WatchingCutscene );
player.removeEvent( pEvent->getId() );
if( freePlayer == 1 )
Common::Service< World::Manager::PlayerMgr >::ref().onUnsetStateFlag( player, Common::PlayerStateFlag::InNpcEvent );
Common::Service< World::Manager::PlayerMgr >::ref().removeCondition( player, Common::PlayerCondition::InNpcEvent );
}
void EventMgr::eventStart( Entity::Player& player, uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventType, uint8_t eventParam1,
@ -567,7 +567,7 @@ void EventMgr::eventStart( Entity::Player& player, uint64_t actorId, uint32_t ev
newEvent->setEventFinishCallback( std::move( callback ) );
player.addEvent( newEvent );
Common::Service< World::Manager::PlayerMgr >::ref().onSetStateFlag( player, Common::PlayerStateFlag::InNpcEvent );
Common::Service< World::Manager::PlayerMgr >::ref().setCondition( player, Common::PlayerCondition::InNpcEvent );
server.queueForPlayer( player.getCharacterId(), std::make_shared< EventStartPacket >( player.getId(), actorId,
eventId, eventType, eventParam1, eventParam2 ) );
@ -838,7 +838,7 @@ Sapphire::Event::EventHandlerPtr EventMgr::bootstrapSceneEvent( Entity::Player&
}
if( flags & CONDITION_CUTSCENE )
Common::Service< World::Manager::PlayerMgr >::ref().onSetStateFlag( player, Common::PlayerStateFlag::WatchingCutscene );
Common::Service< World::Manager::PlayerMgr >::ref().setCondition( player, Common::PlayerCondition::WatchingCutscene );
return pEvent;
}

View file

@ -28,7 +28,7 @@
#include <Network/PacketWrappers/InitZonePacket.h>
#include <Network/PacketWrappers/ModelEquipPacket.h>
#include <Network/PacketWrappers/PlayerSetupPacket.h>
#include <Network/PacketWrappers/PlayerStateFlagsPacket.h>
#include <Network/PacketWrappers/ConditionPacket.h>
#include <Network/PacketWrappers/UpdateHpMpTpPacket.h>
#include <Network/PacketWrappers/ServerNoticePacket.h>
#include <Network/PacketWrappers/ChatPacket.h>
@ -74,17 +74,17 @@ void PlayerMgr::onEquipDisplayFlagsChanged( Entity::Player& player )
server().queueForPlayers( player.getInRangePlayerIds( true ), paramPacket );
}
void PlayerMgr::onSendStateFlags( Entity::Player& player, bool updateInRange )
void PlayerMgr::onConditionChanged( Entity::Player& player, bool updateInRange )
{
server().queueForPlayer( player.getCharacterId(), std::make_shared< PlayerStateFlagsPacket >( player ) );
server().queueForPlayer( player.getCharacterId(), std::make_shared< ConditionPacket >( player ) );
if( updateInRange )
server().queueForPlayers( player.getInRangePlayerIds( true ),
makeActorControl( player.getId(), SetStatusIcon, static_cast< uint8_t >( player.getOnlineStatus() ) ) );
}
void PlayerMgr::onSendAchievementList( Entity::Player& player )
void PlayerMgr::onAchievementListChanged( Entity::Player& player )
{
auto achvData = player.getAchievementData();
@ -95,7 +95,7 @@ void PlayerMgr::onSendAchievementList( Entity::Player& player )
server().queueForPlayer( player.getCharacterId(), achvPacket );
}
void PlayerMgr::onSendAchievementProgress( Entity::Player& player, uint32_t achievementId )
void PlayerMgr::onAchievementProgressChanged( Entity::Player& player, uint32_t achievementId )
{
auto& achvMgr = Common::Service< Manager::AchievementMgr >::ref();
@ -108,15 +108,15 @@ void PlayerMgr::onSendAchievementProgress( Entity::Player& player, uint32_t achi
void PlayerMgr::onUnlockAchievement( Entity::Player& player, uint32_t achievementId )
{
onSendAchievementList( player );
onAchievementListChanged( player );
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), AchievementComplete, achievementId ) );
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), AchievementObtainMsg, achievementId ) );
}
void PlayerMgr::onSendStats( Entity::Player& player )
void PlayerMgr::onStatsChanged( Entity::Player& player )
{
std::array< uint32_t, 50 > statParams;
std::array< uint32_t, 50 > statParams{};
std::fill( std::begin( statParams ), std::end( statParams ), 0 );
auto& exd = Common::Service< Data::ExdData >::ref();
@ -202,9 +202,11 @@ void PlayerMgr::onGainExp( Entity::Player& player, uint32_t exp )
{
if( exp != 0 )
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), GainExpMsg, static_cast< uint8_t >( player.getClass() ), exp ) );
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), GainExpMsg,
static_cast< uint8_t >( player.getClass() ), exp ) );
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), UpdateUiExp, static_cast< uint8_t >( player.getClass() ), player.getExp() ) );
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), UpdateUiExp,
static_cast< uint8_t >( player.getClass() ), player.getExp() ) );
}
void PlayerMgr::onUnlockOrchestrion( Entity::Player& player, uint8_t songId, uint32_t itemId )
@ -214,12 +216,12 @@ void PlayerMgr::onUnlockOrchestrion( Entity::Player& player, uint8_t songId, uin
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), ToggleOrchestrionUnlock, songId, 1, itemId ) );
}
void PlayerMgr::onChangeGear( Entity::Player& player )
void PlayerMgr::onGearChanged( Entity::Player& player )
{
server().queueForPlayers( player.getInRangePlayerIds( true ), std::make_shared< ModelEquipPacket >( player ) );
}
void PlayerMgr::onGcUpdate( Entity::Player& player )
void PlayerMgr::onGrandCompanyChanged( Entity::Player& player )
{
auto gcAffPacket = makeZonePacket< FFXIVIpcGrandCompany >( player.getId() );
gcAffPacket->data().ActiveCompanyId = player.getGc();
@ -230,18 +232,18 @@ void PlayerMgr::onGcUpdate( Entity::Player& player )
server().queueForPlayer( player.getCharacterId(), gcAffPacket );
}
void PlayerMgr::onSetGc( Entity::Player& player, uint8_t gc )
void PlayerMgr::setGrandCompany( Entity::Player& player, uint8_t gc )
{
player.setGc( gc );
onGcUpdate( player );
onGrandCompanyChanged( player );
}
void PlayerMgr::onSetGcRank( Entity::Player& player, uint8_t gc, uint8_t rank )
void PlayerMgr::setGrandCompanyRank( Entity::Player& player, uint8_t gc, uint8_t rank )
{
player.setGcRankAt( gc, rank );
onGcUpdate( player );
onGrandCompanyChanged( player );
}
void PlayerMgr::onCompanionUpdate( Entity::Player& player, uint8_t companionId )
@ -329,7 +331,7 @@ void PlayerMgr::onHateListChanged( Entity::Player& player )
server().queueForPlayer( player.getCharacterId(), { hateListPacket, hateRankPacket } );
}
void PlayerMgr::onChangeClass( Entity::Player& player )
void PlayerMgr::onClassChanged( Entity::Player& player )
{
server().queueForPlayers( player.getInRangePlayerIds( true ), makeActorControl( player.getId(), ClassJobChange, 0x04 ) );
onPlayerHpMpTpChanged( player );
@ -364,7 +366,7 @@ void PlayerMgr::onDeath( Entity::Player& player )
scriptMgr.onPlayerDeath( player );
}
void PlayerMgr::onZone( Sapphire::Entity::Player& player )
void PlayerMgr::onMoveZone( Sapphire::Entity::Player& player )
{
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto& housingMgr = Common::Service< HousingMgr >::ref();
@ -452,7 +454,7 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
auto &questMgr = Common::Service< World::Manager::QuestMgr >::ref();
questMgr.sendQuestsInfo( player );
onGcUpdate( player );
onGrandCompanyChanged( player );
}
if( player.getPartyId() != 0 )
@ -506,24 +508,24 @@ void PlayerMgr::onUpdate( Entity::Player& player, uint64_t tickCount )
}
}
void PlayerMgr::onSetStateFlag( Sapphire::Entity::Player& player, Common::PlayerStateFlag flag )
void PlayerMgr::setCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag )
{
auto prevOnlineStatus = player.getOnlineStatus();
player.setStateFlag( flag );
player.setCondition( flag );
auto newOnlineStatus = player.getOnlineStatus();
onSendStateFlags( player, prevOnlineStatus != newOnlineStatus );
onConditionChanged( player, prevOnlineStatus != newOnlineStatus );
}
void PlayerMgr::onUnsetStateFlag( Sapphire::Entity::Player& player, Common::PlayerStateFlag flag )
void PlayerMgr::removeCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag )
{
auto prevOnlineStatus = player.getOnlineStatus();
player.unsetStateFlag( flag );
player.removeCondition( flag );
auto newOnlineStatus = player.getOnlineStatus();
onSendStateFlags( player, prevOnlineStatus != newOnlineStatus );
onConditionChanged( player, prevOnlineStatus != newOnlineStatus );
}
////////// Helper ///////////

View file

@ -15,18 +15,8 @@ class PlayerMgr
void onEquipDisplayFlagsChanged( Sapphire::Entity::Player& player );
void onSendStateFlags( Sapphire::Entity::Player& player, bool updateInRange );
void onSendStats( Sapphire::Entity::Player& player );
void onPlayerStatusUpdate( Sapphire::Entity::Player& player );
void onChangeClass( Sapphire::Entity::Player& player );
void onSendAchievementList( Sapphire::Entity::Player& player );
void onSendAchievementProgress( Sapphire::Entity::Player& player, uint32_t achievementId );
void onUnlockAchievement( Sapphire::Entity::Player& player, uint32_t achievementId );
void onPlayerHpMpTpChanged( Sapphire::Entity::Player& player );
@ -41,14 +31,6 @@ class PlayerMgr
void onUnlockOrchestrion( Sapphire::Entity::Player& player, uint8_t songId, uint32_t itemId );
void onChangeGear( Sapphire::Entity::Player& player );
void onGcUpdate( Sapphire::Entity::Player& player );
void onSetGc( Sapphire::Entity::Player& player, uint8_t gc );
void onSetGcRank( Sapphire::Entity::Player& player, uint8_t gc, uint8_t rank );
void onCompanionUpdate( Entity::Player& player, uint8_t companionId );
void onMountUpdate( Sapphire::Entity::Player& player, uint32_t mountId );
@ -59,16 +41,23 @@ class PlayerMgr
void onLogin( Sapphire::Entity::Player& player );
void onLogout( Sapphire::Entity::Player& player );
void onDeath( Sapphire::Entity::Player& player );
void onZone( Sapphire::Entity::Player& player );
void onMoveZone( Sapphire::Entity::Player& player );
void onUpdate( Sapphire::Entity::Player& player, uint64_t tickCount );
void onSetStateFlag( Sapphire::Entity::Player& player, Common::PlayerStateFlag flag );
void onConditionChanged( Sapphire::Entity::Player& player, bool updateInRange );
void onStatsChanged( Sapphire::Entity::Player& player );
void onAchievementListChanged( Sapphire::Entity::Player& player );
void onAchievementProgressChanged( Sapphire::Entity::Player& player, uint32_t achievementId );
void onGearChanged( Sapphire::Entity::Player& player );
void onGrandCompanyChanged( Sapphire::Entity::Player& player );
void onClassChanged( Sapphire::Entity::Player& player );
void onUnsetStateFlag( Sapphire::Entity::Player& player, Common::PlayerStateFlag flag );
void setCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag );
void removeCondition( Sapphire::Entity::Player& player, Common::PlayerCondition flag );
void setGrandCompany( Sapphire::Entity::Player& player, uint8_t gc );
void setGrandCompanyRank( Sapphire::Entity::Player& player, uint8_t gc, uint8_t rank );
//////////// Helpers

View file

@ -592,7 +592,7 @@ bool TerritoryMgr::movePlayer( Sapphire::Territory& teri, Entity::Player& player
auto pPrevZone = getTerritoryByGuId( player.getTerritoryId() );
player.setStateFlag( Common::PlayerStateFlag::BetweenAreas );
player.setCondition( Common::PlayerCondition::BetweenAreas );
player.initSpawnIdQueue();
@ -613,7 +613,7 @@ bool TerritoryMgr::movePlayer( Sapphire::Territory& teri, Entity::Player& player
m_playerIdToInstanceMap[ player.getId() ] = teri.getGuId();
teri.onBeforePlayerZoneIn( player );
playerMgr.onZone( player );
playerMgr.onMoveZone( player );
return true;
}

View file

@ -136,7 +136,7 @@ void WarpMgr::finishWarp( Entity::Player& player )
server().queueForPlayer( player.getCharacterId(), zoneInPacket );
server().queueForPlayers( player.getInRangePlayerIds( true ), setStatusPacket );
playerMgr.onUnsetStateFlag( player, PlayerStateFlag::BetweenAreas );
playerMgr.removeCondition( player, PlayerCondition::BetweenAreas );
Common::Service< MapMgr >::ref().updateAll( player );
}

View file

@ -12,7 +12,7 @@
#include "Network/GameConnection.h"
#include "Network/PacketWrappers/ServerNoticePacket.h"
#include "Network/PacketWrappers/PlayerStateFlagsPacket.h"
#include "Network/PacketWrappers/ConditionPacket.h"
#include "ContentFinder/ContentFinder.h"

View file

@ -6,7 +6,7 @@
#include <Network/PacketDef/Zone/ClientZoneDef.h>
#include "Network/GameConnection.h"
#include "Network/PacketWrappers/PlayerStateFlagsPacket.h"
#include "Network/PacketWrappers/ConditionPacket.h"
#include "Script/ScriptMgr.h"

View file

@ -422,7 +422,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
return;
}
Service< World::Manager::PlayerMgr >::ref().onSetGc( player, static_cast< uint8_t >( param1 ) );
Service< World::Manager::PlayerMgr >::ref().setGrandCompany( player, static_cast< uint8_t >( param1 ) );
// if we're changing them to a GC, check if they have a rank and if not, set it to the lowest rank
if( param1 > 0 )
@ -447,7 +447,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
return;
}
Service< World::Manager::PlayerMgr >::ref().onSetGcRank( player, static_cast< uint8_t >( gcId ), static_cast< uint8_t >( param1 ) );
Service< World::Manager::PlayerMgr >::ref().setGrandCompanyRank( player, static_cast< uint8_t >( gcId ), static_cast< uint8_t >( param1 ) );
PlayerMgr::sendServerNotice( player, "GC Rank for {0} for GC {1} was set to {2}", targetPlayer->getName(), targetPlayer->getGc(),
targetPlayer->getGcRankArray()[ targetPlayer->getGc() - 1 ] );
break;

View file

@ -613,12 +613,12 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
}
case PacketCommand::ACHIEVEMENT_REQUEST_RATE:
{
Service< World::Manager::PlayerMgr >::ref().onSendAchievementProgress( player, param11 );
Service< World::Manager::PlayerMgr >::ref().onAchievementProgressChanged( player, param11 );
break;
}
case PacketCommand::ACHIEVEMENT_REQUEST:
{
Service< World::Manager::PlayerMgr >::ref().onSendAchievementList( player );
Service< World::Manager::PlayerMgr >::ref().onAchievementListChanged( player );
break;
}
case PacketCommand::TELEPO_INQUIRY: // Teleport

View file

@ -39,7 +39,7 @@
#include "Network/PacketWrappers/ActorControlTargetPacket.h"
#include "Network/PacketWrappers/EventStartPacket.h"
#include "Network/PacketWrappers/EventFinishPacket.h"
#include "Network/PacketWrappers/PlayerStateFlagsPacket.h"
#include "Network/PacketWrappers/ConditionPacket.h"
#include "Network/PacketWrappers/UpdateInventorySlotPacket.h"
#include "Manager/DebugCommandMgr.h"
@ -523,7 +523,7 @@ void Sapphire::Network::GameConnection::tellHandler( const Packets::FFXIVARR_PAC
auto pTargetPlayer = pSession->getPlayer();
if( pTargetPlayer->hasStateFlag( PlayerStateFlag::BetweenAreas ) )
if( pTargetPlayer->hasStateFlag( PlayerCondition::BetweenAreas ) )
{
// send error for player between areas
// TODO: implement me
@ -538,7 +538,7 @@ void Sapphire::Network::GameConnection::tellHandler( const Packets::FFXIVARR_PAC
return;
}
if( pTargetPlayer->hasStateFlag( PlayerStateFlag::BoundByDuty ) && !player.isActingAsGm() )
if( pTargetPlayer->hasStateFlag( PlayerCondition::BoundByDuty ) && !player.isActingAsGm() )
{
auto boundPacket = makeChatPacket< Packets::Server::FFXIVRecvFinderStatus >( player.getId() );
strcpy( boundPacket->data().toName, data.toName );

View file

@ -11,17 +11,17 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
/**
* @brief Packet sent to set a players state, this impacts which actions he can perform.
*/
class PlayerStateFlagsPacket : public ZoneChannelPacket< FFXIVIpcPlayerStateFlags >
class ConditionPacket : public ZoneChannelPacket< FFXIVIpcCondition >
{
public:
PlayerStateFlagsPacket( Entity::Player& player ) :
ZoneChannelPacket< FFXIVIpcPlayerStateFlags >( player.getId(), player.getId() )
ConditionPacket( Entity::Player& player ) :
ZoneChannelPacket< FFXIVIpcCondition >( player.getId(), player.getId() )
{
initialize( player.getStateFlags().data() );
}
PlayerStateFlagsPacket( Entity::Player& player, std::vector< Common::PlayerStateFlag > flags ) :
ZoneChannelPacket< FFXIVIpcPlayerStateFlags >( player.getId(), player.getId() )
ConditionPacket( Entity::Player& player, std::vector< Common::PlayerCondition > flags ) :
ZoneChannelPacket< FFXIVIpcCondition >( player.getId(), player.getId() )
{
uint8_t newFlags[ 12 ];
memset( newFlags, 0, 12 );

View file

@ -47,7 +47,7 @@ void MoveTerritoryTask::execute()
server.queueForPlayer( pPlayer->getCharacterId(), warpStart );
server.queueForPlayers( inRangePlayerIds, makeActorControl( pPlayer->getId(), ActorDespawnEffect, m_warpInfo.m_warpType, m_warpInfo.m_targetTerritoryId ) );
Common::Service< PlayerMgr >::ref().onSetStateFlag( *pPlayer, Common::PlayerStateFlag::BetweenAreas );
Common::Service< PlayerMgr >::ref().setCondition( *pPlayer, Common::PlayerCondition::BetweenAreas );
auto moveTerritoryPacket = makeZonePacket< WorldPackets::Server::FFXIVIpcMoveTerritory >( pPlayer->getId() );
moveTerritoryPacket->data().index = -1;

View file

@ -99,7 +99,7 @@ void Sapphire::InstanceContent::onPlayerZoneIn( Entity::Player& player )
}
// mark player as "bound by duty"
Common::Service< World::Manager::PlayerMgr >::ref().onSetStateFlag( player, PlayerStateFlag::BoundByDuty );
Common::Service< World::Manager::PlayerMgr >::ref().setCondition( player, PlayerCondition::BoundByDuty );
sendDirectorInit( player );
}
@ -140,7 +140,7 @@ void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )
auto player = it->second;
if( !player->isLoadingComplete() ||
!player->isDirectorInitialized() ||
player->hasStateFlag( PlayerStateFlag::WatchingCutscene ) )
player->hasStateFlag( PlayerCondition::WatchingCutscene ) )
return;
}
@ -614,7 +614,7 @@ void Sapphire::InstanceContent::clearDirector( Entity::Player& player )
player.setDirectorInitialized( false );
// remove "bound by duty" state
Service< World::Manager::PlayerMgr >::ref().onUnsetStateFlag( player, PlayerStateFlag::BoundByDuty );
Service< World::Manager::PlayerMgr >::ref().removeCondition( player, PlayerCondition::BoundByDuty );
}
uint32_t Sapphire::InstanceContent::getExpireValue()

View file

@ -80,7 +80,7 @@ void Sapphire::QuestBattle::onPlayerZoneIn( Entity::Player& player )
m_pPlayer = player.getAsPlayer();
// mark player as "bound by duty"
player.setStateFlag( PlayerStateFlag::BoundByDuty );
player.setCondition( PlayerCondition::BoundByDuty );
sendDirectorInit( player );
@ -118,7 +118,7 @@ void Sapphire::QuestBattle::onUpdate( uint64_t tickCount )
if( !m_pPlayer->isLoadingComplete() ||
!m_pPlayer->isDirectorInitialized() ||
!m_pPlayer->isOnEnterEventDone() ||
m_pPlayer->hasStateFlag( PlayerStateFlag::WatchingCutscene ) )
m_pPlayer->hasStateFlag( PlayerCondition::WatchingCutscene ) )
return;
if( m_instanceCommenceTime == 0 )
@ -301,7 +301,7 @@ void Sapphire::QuestBattle::clearDirector( Entity::Player& player )
player.setDirectorInitialized( false );
// remove "bound by duty" state
player.unsetStateFlag( PlayerStateFlag::BoundByDuty );
player.removeCondition( PlayerCondition::BoundByDuty );
}
void Sapphire::QuestBattle::success()

View file

@ -367,8 +367,6 @@ void WorldServer::mainLoop()
updateSessions( currTime );
DbKeepAlive( currTime );
}
}
@ -401,6 +399,9 @@ void WorldServer::updateSessions( uint32_t currTime )
// remove session of players marked for removal ( logoff / kick )
if( ( player.isMarkedForRemoval() && diff > 5 ) || diff > 20 )
{
player.removeOnlineStatus( Common::OnlineStatus::Online );
player.addOnlineStatus( Common::OnlineStatus::Offline );
Logger::info( "[{0}] Session removal", session->getId() );
session->close();
sessionRemovalQueue.push( session->getId() );