1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-25 14:07:46 +00:00

Another big batch of refactoring for readability.

This commit is contained in:
Mordred 2023-03-08 09:20:08 +01:00
parent 4bee448f4b
commit 859f2329bb
21 changed files with 509 additions and 569 deletions

View file

@ -518,7 +518,7 @@ void Action::Action::buildEffects()
return; return;
} }
Network::Util::Packet::sendHudParam( *m_pSource->getAsPlayer() ); Network::Util::Packet::sendHudParam( *m_pSource );
if( !hasLutEntry || m_hitActors.empty() ) if( !hasLutEntry || m_hitActors.empty() )
{ {

View file

@ -43,19 +43,19 @@
#include <Task/ActionIntegrityTask.h> #include <Task/ActionIntegrityTask.h>
#include <Service.h> #include <Service.h>
using namespace Sapphire;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Entity;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
Sapphire::Entity::BNpc::BNpc() : BNpc::BNpc() : Npc( ObjKind::BattleNpc )
Npc( ObjKind::BattleNpc )
{ {
} }
Sapphire::Entity::BNpc::BNpc( uint32_t id, std::shared_ptr< Common::BNPCInstanceObject > pInfo, const Territory& zone ) : BNpc::BNpc( uint32_t id, std::shared_ptr< Common::BNPCInstanceObject > pInfo, const Territory& zone ) : Npc( ObjKind::BattleNpc )
Npc( ObjKind::BattleNpc )
{ {
m_id = id; m_id = id;
m_pInfo = pInfo; m_pInfo = pInfo;
@ -167,7 +167,7 @@ Sapphire::Entity::BNpc::BNpc( uint32_t id, std::shared_ptr< Common::BNPCInstance
} }
Sapphire::Entity::BNpc::BNpc( uint32_t id, std::shared_ptr< Common::BNPCInstanceObject > pInfo, const Territory& zone, uint32_t hp, Common::BNpcType type ) : BNpc::BNpc( uint32_t id, std::shared_ptr< Common::BNPCInstanceObject > pInfo, const Territory& zone, uint32_t hp, Common::BNpcType type ) :
Npc( ObjKind::BattleNpc ) Npc( ObjKind::BattleNpc )
{ {
m_id = id; m_id = id;
@ -269,54 +269,54 @@ Sapphire::Entity::BNpc::BNpc( uint32_t id, std::shared_ptr< Common::BNPCInstance
calculateStats(); calculateStats();
} }
Sapphire::Entity::BNpc::~BNpc() = default; BNpc::~BNpc() = default;
uint8_t Sapphire::Entity::BNpc::getAggressionMode() const uint8_t BNpc::getAggressionMode() const
{ {
return m_aggressionMode; return m_aggressionMode;
} }
float Sapphire::Entity::BNpc::getNaviTargetReachedDistance() const float BNpc::getNaviTargetReachedDistance() const
{ {
return m_naviTargetReachedDistance; return m_naviTargetReachedDistance;
} }
uint8_t Sapphire::Entity::BNpc::getEnemyType() const uint8_t BNpc::getEnemyType() const
{ {
return m_enemyType; return m_enemyType;
} }
uint64_t Sapphire::Entity::BNpc::getWeaponMain() const uint64_t BNpc::getWeaponMain() const
{ {
return m_weaponMain; return m_weaponMain;
} }
uint64_t Sapphire::Entity::BNpc::getWeaponSub() const uint64_t BNpc::getWeaponSub() const
{ {
return m_weaponSub; return m_weaponSub;
} }
uint16_t Sapphire::Entity::BNpc::getModelChara() const uint16_t BNpc::getModelChara() const
{ {
return m_modelChara; return m_modelChara;
} }
uint8_t Sapphire::Entity::BNpc::getLevel() const uint8_t BNpc::getLevel() const
{ {
return m_level; return m_level;
} }
uint32_t Sapphire::Entity::BNpc::getBNpcBaseId() const uint32_t BNpc::getBNpcBaseId() const
{ {
return m_bNpcBaseId; return m_bNpcBaseId;
} }
uint32_t Sapphire::Entity::BNpc::getBNpcNameId() const uint32_t BNpc::getBNpcNameId() const
{ {
return m_bNpcNameId; return m_bNpcNameId;
} }
void Sapphire::Entity::BNpc::spawn( PlayerPtr pTarget ) void BNpc::spawn( PlayerPtr pTarget )
{ {
m_lastRoamTargetReached = Util::getTimeSeconds(); m_lastRoamTargetReached = Util::getTimeSeconds();
@ -324,26 +324,23 @@ void Sapphire::Entity::BNpc::spawn( PlayerPtr pTarget )
server.queueForPlayer( pTarget->getCharacterId(), std::make_shared< NpcSpawnPacket >( *this, *pTarget ) ); server.queueForPlayer( pTarget->getCharacterId(), std::make_shared< NpcSpawnPacket >( *this, *pTarget ) );
} }
void Sapphire::Entity::BNpc::despawn( PlayerPtr pTarget ) void BNpc::despawn( PlayerPtr pTarget )
{ {
pTarget->freePlayerSpawnId( getId() ); pTarget->freePlayerSpawnId( getId() );
Network::Util::Packet::sendActorControl( *pTarget, WarpStart, 4, getId(), 1 );
auto& server = Common::Service< World::WorldServer >::ref();
server.queueForPlayer( pTarget->getCharacterId(), makeActorControlSelf( m_id, WarpStart, 0x04, getId(), 0x01 ) );
} }
Sapphire::Entity::BNpcState Sapphire::Entity::BNpc::getState() const BNpcState BNpc::getState() const
{ {
return m_state; return m_state;
} }
void Sapphire::Entity::BNpc::setState( BNpcState state ) void BNpc::setState( BNpcState state )
{ {
m_state = state; m_state = state;
} }
bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos ) bool BNpc::moveTo( const FFXIVARR_POSITION3& pos )
{ {
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref(); auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() ); auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() );
@ -380,7 +377,7 @@ bool Sapphire::Entity::BNpc::moveTo( const FFXIVARR_POSITION3& pos )
return false; return false;
} }
bool Sapphire::Entity::BNpc::moveTo( const Entity::Chara& targetChara ) bool BNpc::moveTo( const Chara& targetChara )
{ {
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref(); auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
@ -418,7 +415,7 @@ bool Sapphire::Entity::BNpc::moveTo( const Entity::Chara& targetChara )
return false; return false;
} }
void Sapphire::Entity::BNpc::sendPositionUpdate() void BNpc::sendPositionUpdate()
{ {
uint8_t animationType = 2; uint8_t animationType = 2;
@ -429,7 +426,7 @@ void Sapphire::Entity::BNpc::sendPositionUpdate()
server().queueForPlayers( getInRangePlayerIds(), movePacket ); server().queueForPlayers( getInRangePlayerIds(), movePacket );
} }
void Sapphire::Entity::BNpc::hateListClear() void BNpc::hateListClear()
{ {
for( auto& listEntry : m_hateList ) for( auto& listEntry : m_hateList )
{ {
@ -439,7 +436,7 @@ void Sapphire::Entity::BNpc::hateListClear()
m_hateList.clear(); m_hateList.clear();
} }
uint32_t Sapphire::Entity::BNpc::hateListGetValue( const Sapphire::Entity::CharaPtr& pChara ) uint32_t BNpc::hateListGetValue( const Sapphire::Entity::CharaPtr& pChara )
{ {
for( const auto& listEntry : m_hateList ) for( const auto& listEntry : m_hateList )
{ {
@ -452,7 +449,7 @@ uint32_t Sapphire::Entity::BNpc::hateListGetValue( const Sapphire::Entity::Chara
return 0; return 0;
} }
uint32_t Sapphire::Entity::BNpc::hateListGetHighestValue() uint32_t BNpc::hateListGetHighestValue()
{ {
auto it = m_hateList.begin(); auto it = m_hateList.begin();
uint32_t maxHate = 0; uint32_t maxHate = 0;
@ -473,7 +470,7 @@ uint32_t Sapphire::Entity::BNpc::hateListGetHighestValue()
} }
Sapphire::Entity::CharaPtr Sapphire::Entity::BNpc::hateListGetHighest() CharaPtr BNpc::hateListGetHighest()
{ {
auto it = m_hateList.begin(); auto it = m_hateList.begin();
uint32_t maxHate = 0; uint32_t maxHate = 0;
@ -493,7 +490,7 @@ Sapphire::Entity::CharaPtr Sapphire::Entity::BNpc::hateListGetHighest()
return nullptr; return nullptr;
} }
void Sapphire::Entity::BNpc::hateListAdd( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount ) void BNpc::hateListAdd( const CharaPtr& pChara, int32_t hateAmount )
{ {
auto hateEntry = std::make_shared< HateListEntry >(); auto hateEntry = std::make_shared< HateListEntry >();
hateEntry->m_hateAmount = static_cast< uint32_t >( hateAmount ); hateEntry->m_hateAmount = static_cast< uint32_t >( hateAmount );
@ -507,14 +504,14 @@ void Sapphire::Entity::BNpc::hateListAdd( const Sapphire::Entity::CharaPtr& pCha
} }
} }
void Sapphire::Entity::BNpc::hateListAddDelayed( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount ) void BNpc::hateListAddDelayed( const CharaPtr& pChara, int32_t hateAmount )
{ {
auto& taskMgr = Common::Service< World::Manager::TaskMgr >::ref(); auto& taskMgr = Common::Service< World::Manager::TaskMgr >::ref();
auto delayedEmnityTask = std::make_shared< Sapphire::World::DelayedEmnityTask >( 5000, getAsBNpc(), pChara, hateAmount ); auto delayedEmnityTask = std::make_shared< World::DelayedEmnityTask >( 5000, getAsBNpc(), pChara, hateAmount );
taskMgr.queueTask( delayedEmnityTask ); taskMgr.queueTask( delayedEmnityTask );
} }
void Sapphire::Entity::BNpc::hateListUpdate( const Sapphire::Entity::CharaPtr& pChara, int32_t hateAmount ) void BNpc::hateListUpdate( const CharaPtr& pChara, int32_t hateAmount )
{ {
bool hasEntry = false; bool hasEntry = false;
@ -547,7 +544,7 @@ void Sapphire::Entity::BNpc::hateListUpdate( const Sapphire::Entity::CharaPtr& p
} }
} }
void Sapphire::Entity::BNpc::hateListRemove( const Sapphire::Entity::CharaPtr& pChara ) void BNpc::hateListRemove( const CharaPtr& pChara )
{ {
for( const auto& listEntry : m_hateList ) for( const auto& listEntry : m_hateList )
{ {
@ -565,23 +562,23 @@ void Sapphire::Entity::BNpc::hateListRemove( const Sapphire::Entity::CharaPtr& p
} }
} }
uint32_t Sapphire::Entity::BNpc::getTriggerOwnerId() const uint32_t BNpc::getTriggerOwnerId() const
{ {
return m_triggerOwnerId; return m_triggerOwnerId;
} }
void Sapphire::Entity::BNpc::setTriggerOwnerId( uint32_t triggerOwnerId ) void BNpc::setTriggerOwnerId( uint32_t triggerOwnerId )
{ {
m_triggerOwnerId = triggerOwnerId; m_triggerOwnerId = triggerOwnerId;
} }
bool Sapphire::Entity::BNpc::hateListHasActor( const Sapphire::Entity::CharaPtr& pChara ) bool BNpc::hateListHasActor( const Sapphire::Entity::CharaPtr& pChara )
{ {
return std::any_of( m_hateList.begin(), m_hateList.end(), return std::any_of( m_hateList.begin(), m_hateList.end(),
[ pChara ]( const auto& entry ) { return entry->m_pChara == pChara; } ); [ pChara ]( const auto& entry ) { return entry->m_pChara == pChara; } );
} }
void Sapphire::Entity::BNpc::aggro( const Sapphire::Entity::CharaPtr& pChara ) void BNpc::aggro( const Sapphire::Entity::CharaPtr& pChara )
{ {
auto& pRNGMgr = Common::Service< World::Manager::RNGMgr >::ref(); auto& pRNGMgr = Common::Service< World::Manager::RNGMgr >::ref();
auto variation = static_cast< uint32_t >( pRNGMgr.getRandGenerator< float >( 500, 1000 ).next() ); auto variation = static_cast< uint32_t >( pRNGMgr.getRandGenerator< float >( 500, 1000 ).next() );
@ -591,7 +588,7 @@ void Sapphire::Entity::BNpc::aggro( const Sapphire::Entity::CharaPtr& pChara )
setStance( Stance::Active ); setStance( Stance::Active );
m_state = BNpcState::Combat; m_state = BNpcState::Combat;
server().queueForPlayers( getInRangePlayerIds(), makeActorControl( getId(), ActorControlType::SetBattle, 1, 0, 0 ) ); Network::Util::Packet::sendActorControl( getInRangePlayerIds(), getId(), SetBattle, 1 );
changeTarget( pChara->getId() ); changeTarget( pChara->getId() );
@ -603,7 +600,7 @@ void Sapphire::Entity::BNpc::aggro( const Sapphire::Entity::CharaPtr& pChara )
} }
void Sapphire::Entity::BNpc::deaggro( const Sapphire::Entity::CharaPtr& pChara ) void BNpc::deaggro( const CharaPtr& pChara )
{ {
if( !hateListHasActor( pChara ) ) if( !hateListHasActor( pChara ) )
hateListRemove( pChara ); hateListRemove( pChara );
@ -611,8 +608,8 @@ void Sapphire::Entity::BNpc::deaggro( const Sapphire::Entity::CharaPtr& pChara )
if( pChara->isPlayer() ) if( pChara->isPlayer() )
{ {
PlayerPtr tmpPlayer = pChara->getAsPlayer(); PlayerPtr tmpPlayer = pChara->getAsPlayer();
server().queueForPlayers( getInRangePlayerIds(), makeActorControl( getId(), ActorControlType::ToggleWeapon, 0, 1, 1 ) ); Network::Util::Packet::sendActorControl( getInRangePlayerIds(), getId(), ToggleWeapon, 0, 1, 1 );
server().queueForPlayers( getInRangePlayerIds(), makeActorControl( getId(), ActorControlType::SetBattle, 0, 0, 0 ) ); Network::Util::Packet::sendActorControl( getInRangePlayerIds(), getId(), SetBattle );
tmpPlayer->onMobDeaggro( *this ); tmpPlayer->onMobDeaggro( *this );
if( getTriggerOwnerId() == pChara->getId() ) if( getTriggerOwnerId() == pChara->getId() )
@ -624,7 +621,7 @@ void Sapphire::Entity::BNpc::deaggro( const Sapphire::Entity::CharaPtr& pChara )
} }
} }
void Sapphire::Entity::BNpc::onTick() void BNpc::onTick()
{ {
Chara::onTick(); Chara::onTick();
if( m_state == BNpcState::Retreat ) if( m_state == BNpcState::Retreat )
@ -633,7 +630,7 @@ void Sapphire::Entity::BNpc::onTick()
} }
} }
void Sapphire::Entity::BNpc::update( uint64_t tickCount ) void BNpc::update( uint64_t tickCount )
{ {
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref(); auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() ); auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() );
@ -794,7 +791,7 @@ void Sapphire::Entity::BNpc::update( uint64_t tickCount )
Chara::update( tickCount ); Chara::update( tickCount );
} }
void Sapphire::Entity::BNpc::restHp() void BNpc::restHp()
{ {
if( m_hp < getMaxHp() ) if( m_hp < getMaxHp() )
{ {
@ -809,7 +806,7 @@ void Sapphire::Entity::BNpc::restHp()
sendHudParam(); sendHudParam();
} }
void Sapphire::Entity::BNpc::onActionHostile( Sapphire::Entity::CharaPtr pSource ) void BNpc::onActionHostile( CharaPtr pSource )
{ {
if( !hateListGetHighest() ) if( !hateListGetHighest() )
aggro( pSource ); aggro( pSource );
@ -820,7 +817,7 @@ void Sapphire::Entity::BNpc::onActionHostile( Sapphire::Entity::CharaPtr pSource
setOwner( pSource ); setOwner( pSource );
} }
void Sapphire::Entity::BNpc::onDeath() void BNpc::onDeath()
{ {
auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref(); auto& playerMgr = Common::Service< World::Manager::PlayerMgr >::ref();
auto& taskMgr = Common::Service< World::Manager::TaskMgr >::ref(); auto& taskMgr = Common::Service< World::Manager::TaskMgr >::ref();
@ -851,17 +848,17 @@ void Sapphire::Entity::BNpc::onDeath()
hateListClear(); hateListClear();
} }
uint32_t Sapphire::Entity::BNpc::getTimeOfDeath() const uint32_t BNpc::getTimeOfDeath() const
{ {
return m_timeOfDeath; return m_timeOfDeath;
} }
void Sapphire::Entity::BNpc::setTimeOfDeath( uint32_t timeOfDeath ) void BNpc::setTimeOfDeath( uint32_t timeOfDeath )
{ {
m_timeOfDeath = timeOfDeath; m_timeOfDeath = timeOfDeath;
} }
void Sapphire::Entity::BNpc::checkAggro() void BNpc::checkAggro()
{ {
// passive mobs should ignore players unless aggro'd // passive mobs should ignore players unless aggro'd
if( m_aggressionMode == 1 ) if( m_aggressionMode == 1 )
@ -925,7 +922,7 @@ void Sapphire::Entity::BNpc::checkAggro()
} }
} }
void Sapphire::Entity::BNpc::setOwner( const Sapphire::Entity::CharaPtr& m_pChara ) void BNpc::setOwner( const CharaPtr& m_pChara )
{ {
m_pOwner = m_pChara; m_pOwner = m_pChara;
auto targetId = static_cast< uint32_t >( INVALID_GAME_OBJECT_ID ); auto targetId = static_cast< uint32_t >( INVALID_GAME_OBJECT_ID );
@ -937,35 +934,32 @@ void Sapphire::Entity::BNpc::setOwner( const Sapphire::Entity::CharaPtr& m_pChar
setOwnerPacket->data().Id = targetId; setOwnerPacket->data().Id = targetId;
server().queueForPlayers( getInRangePlayerIds(), setOwnerPacket ); server().queueForPlayers( getInRangePlayerIds(), setOwnerPacket );
if( m_pChara != nullptr && m_pChara->isPlayer() ) if( m_pChara && m_pChara->isPlayer() )
{ Network::Util::Packet::sendActorControl( *m_pChara->getAsPlayer(), SetHateLetter, 1, getId(), 0 );
auto letter = makeActorControl( getId(), ActorControlType::SetHateLetter, 1, getId(), 0 );
server().queueForPlayer( m_pChara->getAsPlayer()->getCharacterId(), letter );
}
} }
void Sapphire::Entity::BNpc::setLevelId( uint32_t levelId ) void BNpc::setLevelId( uint32_t levelId )
{ {
m_levelId = levelId; m_levelId = levelId;
} }
uint32_t Sapphire::Entity::BNpc::getLevelId() const uint32_t BNpc::getLevelId() const
{ {
return m_levelId; return m_levelId;
} }
bool Sapphire::Entity::BNpc::hasFlag( uint32_t flag ) const bool BNpc::hasFlag( uint32_t flag ) const
{ {
return m_flags & flag; return m_flags & flag;
} }
void Sapphire::Entity::BNpc::setFlag( uint32_t flag ) void BNpc::setFlag( uint32_t flag )
{ {
m_flags |= flag; m_flags |= flag;
} }
void Sapphire::Entity::BNpc::autoAttack( CharaPtr pTarget ) void BNpc::autoAttack( CharaPtr pTarget )
{ {
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref(); auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() ); auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() );
@ -1001,7 +995,7 @@ void Sapphire::Entity::BNpc::autoAttack( CharaPtr pTarget )
} }
} }
void Sapphire::Entity::BNpc::calculateStats() void BNpc::calculateStats()
{ {
auto level = getLevel(); auto level = getLevel();
auto job = static_cast< uint8_t >( getClass() ); auto job = static_cast< uint8_t >( getClass() );
@ -1044,28 +1038,28 @@ void Sapphire::Entity::BNpc::calculateStats()
} }
uint32_t Sapphire::Entity::BNpc::getRank() const uint32_t BNpc::getRank() const
{ {
return m_rank; return m_rank;
} }
uint32_t Sapphire::Entity::BNpc::getBoundInstanceId() const uint32_t BNpc::getBoundInstanceId() const
{ {
return m_boundInstanceId; return m_boundInstanceId;
} }
BNpcType Sapphire::Entity::BNpc::getBNpcType() const BNpcType BNpc::getBNpcType() const
{ {
return m_bnpcType; return m_bnpcType;
} }
uint32_t Sapphire::Entity::BNpc::getLayoutId() const uint32_t BNpc::getLayoutId() const
{ {
return m_layoutId; return m_layoutId;
} }
void Sapphire::Entity::BNpc::init() void BNpc::init()
{ {
m_maxHp = Sapphire::Math::CalcStats::calculateMaxHp( *getAsChara() ); m_maxHp = Math::CalcStats::calculateMaxHp( *getAsChara() );
m_hp = m_maxHp; m_hp = m_maxHp;
} }

View file

@ -13,11 +13,10 @@
#include "Network/GameConnection.h" #include "Network/GameConnection.h"
#include "Network/PacketWrappers/ActorControlPacket.h" #include "Network/PacketWrappers/ActorControlPacket.h"
#include "Network/PacketWrappers/ActorControlTargetPacket.h" #include "Network/PacketWrappers/ActorControlTargetPacket.h"
#include "Network/PacketWrappers/RestingPacket.h"
#include "Network/PacketWrappers/EffectPacket1.h" #include "Network/PacketWrappers/EffectPacket1.h"
#include "Network/PacketWrappers/HudParamPacket.h" #include "Network/PacketWrappers/HudParamPacket.h"
#include "Network/Util/PacketUtil.h"
#include "StatusEffect/StatusEffect.h"
#include "Action/Action.h" #include "Action/Action.h"
#include "WorldServer.h" #include "WorldServer.h"
#include "Session.h" #include "Session.h"
@ -28,13 +27,16 @@
#include "Manager/MgrUtil.h" #include "Manager/MgrUtil.h"
#include "Common.h" #include "Common.h"
using namespace Sapphire;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Entity;
using namespace Sapphire::World;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
Sapphire::Entity::Chara::Chara( ObjKind type ) : Chara::Chara( ObjKind type ) :
GameObject( type ), GameObject( type ),
m_pose( 0 ), m_pose( 0 ),
m_targetId( INVALID_GAME_OBJECT_ID64 ), m_targetId( INVALID_GAME_OBJECT_ID64 ),
@ -44,7 +46,7 @@ Sapphire::Entity::Chara::Chara( ObjKind type ) :
m_lastTickTime = 0; m_lastTickTime = 0;
m_lastUpdate = 0; m_lastUpdate = 0;
m_lastAttack = Util::getTimeMs(); m_lastAttack = Common::Util::getTimeMs();
m_bonusStats.fill( 0 ); m_bonusStats.fill( 0 );
@ -55,76 +57,75 @@ Sapphire::Entity::Chara::Chara( ObjKind type ) :
} }
} }
Sapphire::Entity::Chara::~Chara() Chara::~Chara() = default;
= default;
/*! \return the actors name */ /*! \return the actors name */
std::string Sapphire::Entity::Chara::getName() const std::string Chara::getName() const
{ {
return { m_name }; return { m_name };
} }
/*! \return current stance of the actors */ /*! \return current stance of the actors */
Sapphire::Common::Stance Sapphire::Entity::Chara::getStance() const Stance Chara::getStance() const
{ {
return m_currentStance; return m_currentStance;
} }
/*! \return actor stats */ /*! \return actor stats */
const Sapphire::Entity::Chara::ActorStatsArray& Sapphire::Entity::Chara::getStats() const const Chara::ActorStatsArray& Chara::getStats() const
{ {
return m_baseStats; return m_baseStats;
} }
/*! \return current HP */ /*! \return current HP */
uint32_t Sapphire::Entity::Chara::getHp() const uint32_t Chara::getHp() const
{ {
return m_hp; return m_hp;
} }
uint32_t Sapphire::Entity::Chara::getHpPercent() const uint32_t Chara::getHpPercent() const
{ {
return ( m_hp * 100 ) / m_maxHp; return ( m_hp * 100 ) / m_maxHp;
} }
/*! \return current MP */ /*! \return current MP */
uint32_t Sapphire::Entity::Chara::getMp() const uint32_t Chara::getMp() const
{ {
return m_mp; return m_mp;
} }
/*! \return current TP */ /*! \return current TP */
uint16_t Sapphire::Entity::Chara::getTp() const uint16_t Chara::getTp() const
{ {
return m_tp; return m_tp;
} }
/*! \return current GP */ /*! \return current GP */
uint16_t Sapphire::Entity::Chara::getGp() const uint16_t Chara::getGp() const
{ {
return m_gp; return m_gp;
} }
/*! \return current invincibility type */ /*! \return current invincibility type */
InvincibilityType Sapphire::Entity::Chara::getInvincibilityType() const InvincibilityType Chara::getInvincibilityType() const
{ {
return m_invincibilityType; return m_invincibilityType;
} }
/*! \return current class or job */ /*! \return current class or job */
Sapphire::Common::ClassJob Sapphire::Entity::Chara::getClass() const ClassJob Chara::getClass() const
{ {
return m_class; return m_class;
} }
/*! \param ClassJob to set */ /*! \param ClassJob to set */
void Sapphire::Entity::Chara::setClass( Common::ClassJob classJob ) void Chara::setClass( ClassJob classJob )
{ {
m_class = classJob; m_class = classJob;
} }
Sapphire::Common::Role Sapphire::Entity::Chara::getRole() const Role Chara::getRole() const
{ {
switch( getClass() ) switch( getClass() )
{ {
@ -181,67 +182,67 @@ Sapphire::Common::Role Sapphire::Entity::Chara::getRole() const
} }
/*! \param Id of the target to set */ /*! \param Id of the target to set */
void Sapphire::Entity::Chara::setTargetId( uint64_t targetId ) void Chara::setTargetId( uint64_t targetId )
{ {
m_targetId = targetId; m_targetId = targetId;
} }
/*! \return Id of the current target */ /*! \return Id of the current target */
uint64_t Sapphire::Entity::Chara::getTargetId() const uint64_t Chara::getTargetId() const
{ {
return m_targetId; return m_targetId;
} }
/*! \return True if the actor is alive */ /*! \return True if the actor is alive */
bool Sapphire::Entity::Chara::isAlive() const bool Chara::isAlive() const
{ {
return ( m_hp > 0 ); return ( m_hp > 0 );
} }
/*! \return max hp for the actor */ /*! \return max hp for the actor */
uint32_t Sapphire::Entity::Chara::getMaxHp() const uint32_t Chara::getMaxHp() const
{ {
return m_maxHp; return m_maxHp;
} }
/*! \return max mp for the actor */ /*! \return max mp for the actor */
uint32_t Sapphire::Entity::Chara::getMaxMp() const uint32_t Chara::getMaxMp() const
{ {
return m_maxMp; return m_maxMp;
} }
/*! \return reset hp to current max hp */ /*! \return reset hp to current max hp */
void Sapphire::Entity::Chara::resetHp() void Chara::resetHp()
{ {
m_hp = getMaxHp(); m_hp = getMaxHp();
} }
/*! \return reset mp to current max mp */ /*! \return reset mp to current max mp */
void Sapphire::Entity::Chara::resetMp() void Chara::resetMp()
{ {
m_mp = getMaxMp(); m_mp = getMaxMp();
} }
/*! \param hp amount to set ( caps to maxHp ) */ /*! \param hp amount to set ( caps to maxHp ) */
void Sapphire::Entity::Chara::setHp( uint32_t hp ) void Chara::setHp( uint32_t hp )
{ {
m_hp = hp < getMaxHp() ? hp : getMaxHp(); m_hp = hp < getMaxHp() ? hp : getMaxHp();
} }
/*! \param mp amount to set ( caps to maxMp ) */ /*! \param mp amount to set ( caps to maxMp ) */
void Sapphire::Entity::Chara::setMp( uint32_t mp ) void Chara::setMp( uint32_t mp )
{ {
m_mp = mp < getMaxMp() ? mp : getMaxMp(); m_mp = mp < getMaxMp() ? mp : getMaxMp();
} }
/*! \param gp amount to set*/ /*! \param gp amount to set*/
void Sapphire::Entity::Chara::setGp( uint32_t gp ) void Chara::setGp( uint32_t gp )
{ {
m_gp = static_cast< uint16_t >( gp ); m_gp = static_cast< uint16_t >( gp );
} }
/*! \param tp amount to set*/ /*! \param tp amount to set*/
void Sapphire::Entity::Chara::setTp( uint32_t tp ) void Chara::setTp( uint32_t tp )
{ {
m_tp = static_cast< uint16_t >( tp ); m_tp = static_cast< uint16_t >( tp );
} }
@ -253,13 +254,13 @@ void Sapphire::Entity::Chara::setInvincibilityType( Common::InvincibilityType ty
} }
/*! \return current status of the actor */ /*! \return current status of the actor */
Sapphire::Common::ActorStatus Sapphire::Entity::Chara::getStatus() const ActorStatus Chara::getStatus() const
{ {
return m_status; return m_status;
} }
/*! \param status to set */ /*! \param status to set */
void Sapphire::Entity::Chara::setStatus( ActorStatus status ) void Chara::setStatus( ActorStatus status )
{ {
m_status = status; m_status = status;
} }
@ -268,7 +269,7 @@ void Sapphire::Entity::Chara::setStatus( ActorStatus status )
Performs necessary steps to mark an actor dead. Performs necessary steps to mark an actor dead.
Sets hp/mp/tp, sets status, plays animation and fires onDeath event Sets hp/mp/tp, sets status, plays animation and fires onDeath event
*/ */
void Sapphire::Entity::Chara::die() void Chara::die()
{ {
m_status = ActorStatus::Dead; m_status = ActorStatus::Dead;
m_hp = 0; m_hp = 0;
@ -280,13 +281,8 @@ void Sapphire::Entity::Chara::die()
// if the actor is a player, the update needs to be send to himself too // if the actor is a player, the update needs to be send to himself too
bool selfNeedsUpdate = isPlayer(); bool selfNeedsUpdate = isPlayer();
Network::Util::Packet::sendActorControl( getInRangePlayerIds( selfNeedsUpdate ), getId(), SetStatus, static_cast< uint8_t >( ActorStatus::Dead ) );
FFXIVPacketBasePtr packet = makeActorControl( m_id, SetStatus, static_cast< uint8_t >( ActorStatus::Dead ) ); Network::Util::Packet::sendActorControl( getInRangePlayerIds( selfNeedsUpdate ), getId(), DeathAnimation );
server().queueForPlayers( getInRangePlayerIds( selfNeedsUpdate ), packet );
FFXIVPacketBasePtr packet1 = makeActorControl( m_id, DeathAnimation, 0, 0, 0, 0 );
server().queueForPlayers( getInRangePlayerIds( selfNeedsUpdate ), packet1 );
} }
/*! /*!
@ -295,10 +291,10 @@ position
\param Position to look towards \param Position to look towards
*/ */
bool Sapphire::Entity::Chara::face( const Common::FFXIVARR_POSITION3& p ) bool Chara::face( const FFXIVARR_POSITION3& p )
{ {
float oldRot = getRot(); float oldRot = getRot();
float rot = Util::calcAngFrom( getPos().x, getPos().z, p.x, p.z ); float rot = Common::Util::calcAngFrom( getPos().x, getPos().z, p.x, p.z );
float newRot = PI - rot + ( PI / 2 ); float newRot = PI - rot + ( PI / 2 );
setRot( newRot ); setRot( newRot );
@ -312,12 +308,10 @@ Set and propagate the actor stance to in range players
\param stance to set \param stance to set
*/ */
void Sapphire::Entity::Chara::setStance( Stance stance ) void Chara::setStance( Stance stance )
{ {
m_currentStance = stance; m_currentStance = stance;
Network::Util::Packet::sendActorControl( getInRangePlayerIds(), getId(), ToggleWeapon, stance, 1 );
FFXIVPacketBasePtr packet = makeActorControl( m_id, ToggleWeapon, stance, 1 );
server().queueForPlayers( getInRangePlayerIds(), packet );
} }
/*! /*!
@ -326,7 +320,7 @@ and if fully performed, clean up again.
\return true if a queued action has been updated \return true if a queued action has been updated
*/ */
bool Sapphire::Entity::Chara::checkAction() bool Chara::checkAction()
{ {
if( m_pCurrentAction == nullptr ) if( m_pCurrentAction == nullptr )
@ -339,7 +333,7 @@ bool Sapphire::Entity::Chara::checkAction()
} }
void Sapphire::Entity::Chara::update( uint64_t tickCount ) void Chara::update( uint64_t tickCount )
{ {
updateStatusEffects(); updateStatusEffects();
@ -358,17 +352,16 @@ Change the current target and propagate to in range players
\param target actor id \param target actor id
*/ */
void Sapphire::Entity::Chara::changeTarget( uint64_t targetId ) void Chara::changeTarget( uint64_t targetId )
{ {
setTargetId( targetId ); setTargetId( targetId );
FFXIVPacketBasePtr packet = makeActorControlTarget( m_id, SetTarget, 0, 0, 0, 0, targetId ); Network::Util::Packet::sendActorControlTarget( getInRangePlayerIds(), getId(), ToggleWeapon, SetTarget, 0, 0, 0, 0, targetId );
server().queueForPlayers( getInRangePlayerIds(), packet );
} }
/*! /*!
Dummy function \return 0 Dummy function \return 0
*/ */
uint8_t Sapphire::Entity::Chara::getLevel() const uint8_t Chara::getLevel() const
{ {
return 0; return 0;
} }
@ -382,7 +375,7 @@ magical dmg and take status effects into account
\param amount of damage to be taken \param amount of damage to be taken
*/ */
void Sapphire::Entity::Chara::takeDamage( uint32_t damage ) void Chara::takeDamage( uint32_t damage )
{ {
if( damage >= m_hp ) if( damage >= m_hp )
{ {
@ -413,7 +406,7 @@ in range
\param amount of hp to be healed \param amount of hp to be healed
*/ */
void Sapphire::Entity::Chara::heal( uint32_t amount ) void Chara::heal( uint32_t amount )
{ {
if( ( m_hp + amount ) > getMaxHp() ) if( ( m_hp + amount ) > getMaxHp() )
{ {
@ -423,7 +416,7 @@ void Sapphire::Entity::Chara::heal( uint32_t amount )
m_hp += amount; m_hp += amount;
} }
void Sapphire::Entity::Chara::restoreMP( uint32_t amount ) void Chara::restoreMP( uint32_t amount )
{ {
if( ( m_mp + amount ) > getMaxMp() ) if( ( m_mp + amount ) > getMaxMp() )
{ {
@ -440,20 +433,19 @@ so players can have their own version and we can abolish the param.
\param true if the update should also be sent to the actor ( player ) himself \param true if the update should also be sent to the actor ( player ) himself
*/ */
void Sapphire::Entity::Chara::sendHudParam() void Chara::sendHudParam()
{ {
FFXIVPacketBasePtr packet = makeHudParam( *this ); Network::Util::Packet::sendHudParam( *this );
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), packet );
} }
/*! \return ActionPtr of the currently registered action, or nullptr */ /*! \return ActionPtr of the currently registered action, or nullptr */
Sapphire::World::Action::ActionPtr Sapphire::Entity::Chara::getCurrentAction() const Action::ActionPtr Chara::getCurrentAction() const
{ {
return m_pCurrentAction; return m_pCurrentAction;
} }
/*! \param ActionPtr of the action to be registered */ /*! \param ActionPtr of the action to be registered */
void Sapphire::Entity::Chara::setCurrentAction( Sapphire::World::Action::ActionPtr pAction ) void Chara::setCurrentAction( Action::ActionPtr pAction )
{ {
m_pCurrentAction = std::move( pAction ); m_pCurrentAction = std::move( pAction );
} }
@ -467,9 +459,9 @@ Will have to be extended for ranged attacks.
\param GameObjectPtr the autoAttack is performed on \param GameObjectPtr the autoAttack is performed on
*/ */
void Sapphire::Entity::Chara::autoAttack( CharaPtr pTarget ) void Chara::autoAttack( CharaPtr pTarget )
{ {
uint64_t tick = Util::getTimeMs(); uint64_t tick = Common::Util::getTimeMs();
// todo: this needs to use the auto attack delay for the equipped weapon // todo: this needs to use the auto attack delay for the equipped weapon
if( ( tick - m_lastAttack ) > 2500 ) if( ( tick - m_lastAttack ) > 2500 )
@ -481,7 +473,7 @@ void Sapphire::Entity::Chara::autoAttack( CharaPtr pTarget )
auto damage = static_cast< uint16_t >( 10 + rand() % 12 ); auto damage = static_cast< uint16_t >( 10 + rand() % 12 );
auto effectPacket = std::make_shared< EffectPacket1 >( getId(), pTarget->getId(), 7 ); auto effectPacket = std::make_shared< EffectPacket1 >( getId(), pTarget->getId(), 7 );
effectPacket->setRotation( Util::floatToUInt16Rot( getRot() ) ); effectPacket->setRotation( Common::Util::floatToUInt16Rot( getRot() ) );
Common::CalcResultParam effectEntry{}; Common::CalcResultParam effectEntry{};
effectEntry.Value = static_cast< int16_t >( damage ); effectEntry.Value = static_cast< int16_t >( damage );
@ -497,9 +489,9 @@ void Sapphire::Entity::Chara::autoAttack( CharaPtr pTarget )
} }
/*! \param StatusEffectPtr to be applied to the actor */ /*! \param StatusEffectPtr to be applied to the actor */
void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEffect ) void Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEffect )
{ {
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref(); auto& teriMgr = Common::Service< Manager::TerritoryMgr >::ref();
auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() ); auto pZone = teriMgr.getTerritoryByGuId( getTerritoryId() );
int8_t nextSlot = getStatusEffectFreeSlot(); int8_t nextSlot = getStatusEffectFreeSlot();
@ -542,7 +534,7 @@ void Sapphire::Entity::Chara::addStatusEffect( StatusEffect::StatusEffectPtr pEf
} }
/*! \param StatusEffectPtr to be applied to the actor */ /*! \param StatusEffectPtr to be applied to the actor */
void Sapphire::Entity::Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param ) void Chara::addStatusEffectById( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param )
{ {
auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 ); auto effect = StatusEffect::make_StatusEffect( id, source.getAsChara(), getAsChara(), duration, 3000 );
effect->setParam( param ); effect->setParam( param );
@ -550,8 +542,7 @@ void Sapphire::Entity::Chara::addStatusEffectById( uint32_t id, int32_t duration
} }
/*! \param StatusEffectPtr to be applied to the actor */ /*! \param StatusEffectPtr to be applied to the actor */
void Sapphire::Entity::Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, void Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_t duration, Entity::Chara& source, uint16_t param )
uint16_t param )
{ {
if( hasStatusEffect( id ) ) if( hasStatusEffect( id ) )
return; return;
@ -562,7 +553,7 @@ void Sapphire::Entity::Chara::addStatusEffectByIdIfNotExist( uint32_t id, int32_
} }
int8_t Sapphire::Entity::Chara::getStatusEffectFreeSlot() int8_t Chara::getStatusEffectFreeSlot()
{ {
int8_t freeEffectSlot = -1; int8_t freeEffectSlot = -1;
@ -575,12 +566,12 @@ int8_t Sapphire::Entity::Chara::getStatusEffectFreeSlot()
return freeEffectSlot; return freeEffectSlot;
} }
void Sapphire::Entity::Chara::statusEffectFreeSlot( uint8_t slotId ) void Chara::statusEffectFreeSlot( uint8_t slotId )
{ {
m_statusEffectFreeSlotQueue.push( slotId ); m_statusEffectFreeSlotQueue.push( slotId );
} }
void Sapphire::Entity::Chara::removeSingleStatusEffectById( uint32_t id ) void Chara::removeSingleStatusEffectById( uint32_t id )
{ {
for( const auto& effectIt : m_statusEffectMap ) for( const auto& effectIt : m_statusEffectMap )
{ {
@ -592,7 +583,7 @@ void Sapphire::Entity::Chara::removeSingleStatusEffectById( uint32_t id )
} }
} }
std::map< uint8_t, Sapphire::StatusEffect::StatusEffectPtr >::iterator Sapphire::Entity::Chara::removeStatusEffect( uint8_t effectSlotId ) std::map< uint8_t, StatusEffect::StatusEffectPtr >::iterator Chara::removeStatusEffect( uint8_t effectSlotId )
{ {
auto pEffectIt = m_statusEffectMap.find( effectSlotId ); auto pEffectIt = m_statusEffectMap.find( effectSlotId );
if( pEffectIt == m_statusEffectMap.end() ) if( pEffectIt == m_statusEffectMap.end() )
@ -603,46 +594,41 @@ std::map< uint8_t, Sapphire::StatusEffect::StatusEffectPtr >::iterator Sapphire:
auto pEffect = pEffectIt->second; auto pEffect = pEffectIt->second;
pEffect->removeStatus(); pEffect->removeStatus();
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), makeActorControl( getId(), StatusEffectLose, pEffect->getId() ) ); Network::Util::Packet::sendActorControl( getInRangePlayerIds( isPlayer() ), getId(), StatusEffectLose, pEffect->getId() );
auto it = m_statusEffectMap.erase( pEffectIt ); auto it = m_statusEffectMap.erase( pEffectIt );
Network::Util::Packet::sendHudParam( *this );
if( isPlayer() )
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), makeHudParam( *getAsPlayer() ) );
else if( isBattleNpc() )
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), makeHudParam( *getAsBNpc() ) );
return it; return it;
} }
std::map< uint8_t, Sapphire::StatusEffect::StatusEffectPtr > Sapphire::Entity::Chara::getStatusEffectMap() const std::map< uint8_t, StatusEffect::StatusEffectPtr > Chara::getStatusEffectMap() const
{ {
return m_statusEffectMap; return m_statusEffectMap;
} }
const uint8_t* Sapphire::Entity::Chara::getLookArray() const const uint8_t* Chara::getLookArray() const
{ {
return m_customize; return m_customize;
} }
const uint32_t* Sapphire::Entity::Chara::getModelArray() const const uint32_t* Chara::getModelArray() const
{ {
return m_modelEquip; return m_modelEquip;
} }
uint8_t Sapphire::Entity::Chara::getPose() const uint8_t Chara::getPose() const
{ {
return m_pose; return m_pose;
} }
void Sapphire::Entity::Chara::setPose( uint8_t pose ) void Chara::setPose( uint8_t pose )
{ {
m_pose = pose; m_pose = pose;
} }
void Sapphire::Entity::Chara::sendStatusEffectUpdate() void Chara::sendStatusEffectUpdate()
{ {
uint64_t currentTimeMs = Util::getTimeMs(); uint64_t currentTimeMs = Common::Util::getTimeMs();
auto statusEffectList = makeZonePacket< FFXIVIpcStatus >( getId() ); auto statusEffectList = makeZonePacket< FFXIVIpcStatus >( getId() );
@ -660,9 +646,9 @@ void Sapphire::Entity::Chara::sendStatusEffectUpdate()
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), statusEffectList ); server().queueForPlayers( getInRangePlayerIds( isPlayer() ), statusEffectList );
} }
void Sapphire::Entity::Chara::updateStatusEffects() void Chara::updateStatusEffects()
{ {
uint64_t currentTimeMs = Util::getTimeMs(); uint64_t currentTimeMs = Common::Util::getTimeMs();
for( auto effectIt = m_statusEffectMap.begin(); effectIt != m_statusEffectMap.end(); ) for( auto effectIt = m_statusEffectMap.begin(); effectIt != m_statusEffectMap.end(); )
{ {
@ -687,28 +673,28 @@ void Sapphire::Entity::Chara::updateStatusEffects()
} }
} }
bool Sapphire::Entity::Chara::hasStatusEffect( uint32_t id ) bool Chara::hasStatusEffect( uint32_t id )
{ {
return m_statusEffectMap.find( id ) != m_statusEffectMap.end(); return m_statusEffectMap.find( id ) != m_statusEffectMap.end();
} }
int64_t Sapphire::Entity::Chara::getLastUpdateTime() const int64_t Chara::getLastUpdateTime() const
{ {
return m_lastUpdate; return m_lastUpdate;
} }
void Sapphire::Entity::Chara::setLastComboActionId( uint32_t actionId ) void Chara::setLastComboActionId( uint32_t actionId )
{ {
m_lastComboActionId = actionId; m_lastComboActionId = actionId;
m_lastComboActionTime = Util::getTimeMs(); m_lastComboActionTime = Common::Util::getTimeMs();
} }
uint32_t Sapphire::Entity::Chara::getLastComboActionId() const uint32_t Chara::getLastComboActionId() const
{ {
// initially check for the time passed first, if it's more than the threshold just return 0 for the combo // initially check for the time passed first, if it's more than the threshold just return 0 for the combo
// we can hide the implementation detail this way and it just works:tm: for anything that uses it // we can hide the implementation detail this way and it just works:tm: for anything that uses it
if( std::difftime( static_cast< time_t >( Util::getTimeMs() ), if( std::difftime( static_cast< time_t >( Common::Util::getTimeMs() ),
static_cast< time_t >( m_lastComboActionTime ) ) > Common::MAX_COMBO_LENGTH ) static_cast< time_t >( m_lastComboActionTime ) ) > Common::MAX_COMBO_LENGTH )
{ {
return 0; return 0;
@ -717,43 +703,42 @@ uint32_t Sapphire::Entity::Chara::getLastComboActionId() const
return m_lastComboActionId; return m_lastComboActionId;
} }
uint32_t Sapphire::Entity::Chara::getDirectorId() const uint32_t Chara::getDirectorId() const
{ {
return m_directorId; return m_directorId;
} }
void Sapphire::Entity::Chara::setDirectorId( uint32_t directorId ) void Chara::setDirectorId( uint32_t directorId )
{ {
m_directorId = directorId; m_directorId = directorId;
} }
uint32_t Sapphire::Entity::Chara::getAgentId() const uint32_t Chara::getAgentId() const
{ {
return m_agentId; return m_agentId;
} }
void Sapphire::Entity::Chara::setAgentId( uint32_t agentId ) void Chara::setAgentId( uint32_t agentId )
{ {
m_agentId = agentId; m_agentId = agentId;
} }
float Chara::getRadius() const
float Sapphire::Entity::Chara::getRadius() const
{ {
return m_radius; return m_radius;
} }
Sapphire::Common::BaseParam Sapphire::Entity::Chara::getPrimaryStat() const Common::BaseParam Chara::getPrimaryStat() const
{ {
auto& exdData = Common::Service< Data::ExdData >::ref(); auto& exdData = Common::Service< Data::ExdData >::ref();
auto classJob = exdData.getRow< Excel::ClassJob >( static_cast< uint16_t >( getClass() ) ); auto classJob = exdData.getRow< Excel::ClassJob >( static_cast< uint16_t >( getClass() ) );
assert( classJob ); assert( classJob );
return static_cast< Sapphire::Common::BaseParam >( classJob->data().Role ); return static_cast< Common::BaseParam >( classJob->data().Role );
} }
uint32_t Sapphire::Entity::Chara::getStatValue( Sapphire::Common::BaseParam baseParam ) const uint32_t Chara::getStatValue( Common::BaseParam baseParam ) const
{ {
auto index = static_cast< uint32_t >( baseParam ); auto index = static_cast< uint32_t >( baseParam );
assert( index < m_baseStats.size() ); assert( index < m_baseStats.size() );
@ -761,7 +746,7 @@ uint32_t Sapphire::Entity::Chara::getStatValue( Sapphire::Common::BaseParam base
return m_baseStats[ index ] + m_bonusStats[ index ]; return m_baseStats[ index ] + m_bonusStats[ index ];
} }
float Sapphire::Entity::Chara::getStatValueFloat( Common::BaseParam baseParam ) const float Chara::getStatValueFloat( Common::BaseParam baseParam ) const
{ {
auto index = static_cast< uint32_t >( baseParam ); auto index = static_cast< uint32_t >( baseParam );
assert( index < m_baseStats.size() ); assert( index < m_baseStats.size() );
@ -769,7 +754,7 @@ float Sapphire::Entity::Chara::getStatValueFloat( Common::BaseParam baseParam )
return static_cast< float >( m_baseStats[ index ] + m_bonusStats[ index ] ); return static_cast< float >( m_baseStats[ index ] + m_bonusStats[ index ] );
} }
uint32_t Sapphire::Entity::Chara::getBonusStat( Sapphire::Common::BaseParam baseParam ) const uint32_t Chara::getBonusStat( Common::BaseParam baseParam ) const
{ {
auto index = static_cast< uint32_t >( baseParam ); auto index = static_cast< uint32_t >( baseParam );
assert( index < m_bonusStats.size() ); assert( index < m_bonusStats.size() );
@ -777,7 +762,7 @@ uint32_t Sapphire::Entity::Chara::getBonusStat( Sapphire::Common::BaseParam base
return m_bonusStats[ index ]; return m_bonusStats[ index ];
} }
void Sapphire::Entity::Chara::setStatValue( Common::BaseParam baseParam, uint32_t value ) void Chara::setStatValue( Common::BaseParam baseParam, uint32_t value )
{ {
auto index = static_cast< uint32_t >( baseParam ); auto index = static_cast< uint32_t >( baseParam );
assert( index < m_baseStats.size() ); assert( index < m_baseStats.size() );
@ -785,7 +770,7 @@ void Sapphire::Entity::Chara::setStatValue( Common::BaseParam baseParam, uint32_
m_baseStats[ index ] = value; m_baseStats[ index ] = value;
} }
void Sapphire::Entity::Chara::onTick() void Chara::onTick()
{ {
uint32_t thisTickDmg = 0; uint32_t thisTickDmg = 0;
uint32_t thisTickHeal = 0; uint32_t thisTickHeal = 0;
@ -812,16 +797,14 @@ void Sapphire::Entity::Chara::onTick()
if( thisTickDmg != 0 ) if( thisTickDmg != 0 )
{ {
takeDamage( thisTickDmg ); takeDamage( thisTickDmg );
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), makeActorControl( getId(), HPFloatingText, 0, Network::Util::Packet::sendActorControl( getInRangePlayerIds( isPlayer() ), getId(), HPFloatingText, 0,
static_cast< uint8_t >( ActionEffectType::CALC_RESULT_TYPE_DAMAGE_HP ), ActionEffectType::CALC_RESULT_TYPE_DAMAGE_HP, thisTickDmg );
thisTickDmg ) );
} }
if( thisTickHeal != 0 ) if( thisTickHeal != 0 )
{ {
heal( thisTickHeal ); heal( thisTickHeal );
server().queueForPlayers( getInRangePlayerIds( isPlayer() ), makeActorControl( getId(), HPFloatingText, 0, Network::Util::Packet::sendActorControl( getInRangePlayerIds( isPlayer() ), getId(), HPFloatingText, 0,
static_cast< uint8_t >( ActionEffectType::CALC_RESULT_TYPE_RECOVER_HP ), ActionEffectType::CALC_RESULT_TYPE_RECOVER_HP, thisTickHeal );
thisTickHeal ) );
} }
} }

View file

@ -3,12 +3,10 @@
#include "Territory/InstanceContent.h" #include "Territory/InstanceContent.h"
#include "Actor/Player.h" #include "Actor/Player.h"
#include "Network/PacketWrappers/ActorControlPacket.h"
#include "Network/PacketWrappers/ActorControlTargetPacket.h"
#include <Logging/Logger.h> #include <Logging/Logger.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h> #include <Network/PacketDef/Zone/ServerZoneDef.h>
#include <Network/CommonActorControl.h> #include <Network/CommonActorControl.h>
#include <Network/Util/PacketUtil.h>
#include <Util/UtilMath.h> #include <Util/UtilMath.h>
#include <Service.h> #include <Service.h>
@ -16,20 +14,19 @@
#include <utility> #include <utility>
#include "WorldServer.h" #include "WorldServer.h"
#include "Session.h" #include "Session.h"
#include "Network/GameConnection.h"
#include "Manager/MgrUtil.h" #include "Manager/MgrUtil.h"
using namespace Sapphire;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Entity;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
Sapphire::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint32_t instanceId, EventObject::EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint32_t instanceId, uint8_t initialState,
uint8_t initialState, Common::FFXIVARR_POSITION3 pos, FFXIVARR_POSITION3 pos, float rotation, const std::string& givenName, uint8_t permissionInv ) :
float rotation, const std::string& givenName, uint8_t permissionInv ) : GameObject( ObjKind::EventObj ),
Sapphire::Entity::GameObject( ObjKind::EventObj ),
m_gimmickId( gimmickId ), m_gimmickId( gimmickId ),
m_instanceId( instanceId ), m_instanceId( instanceId ),
m_state( initialState ), m_state( initialState ),
@ -37,7 +34,7 @@ Sapphire::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId,
m_name( givenName ), m_name( givenName ),
m_housingLink( 0 ), m_housingLink( 0 ),
m_permissionInvisibility( permissionInv ), m_permissionInvisibility( permissionInv ),
m_ownerId( Common::INVALID_GAME_OBJECT_ID ) m_ownerId( INVALID_GAME_OBJECT_ID )
{ {
m_id = actorId; m_id = actorId;
m_pos.x = pos.x; m_pos.x = pos.x;
@ -46,78 +43,77 @@ Sapphire::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId,
m_rot = rotation; m_rot = rotation;
} }
uint32_t Sapphire::Entity::EventObject::getGimmickId() const uint32_t EventObject::getGimmickId() const
{ {
return m_gimmickId; return m_gimmickId;
} }
uint32_t Sapphire::Entity::EventObject::getObjectId() const uint32_t EventObject::getObjectId() const
{ {
return m_objectId; return m_objectId;
} }
float Sapphire::Entity::EventObject::getScale() const float EventObject::getScale() const
{ {
return m_scale; return m_scale;
} }
void Sapphire::Entity::EventObject::setScale( float scale ) void EventObject::setScale( float scale )
{ {
m_scale = scale; m_scale = scale;
} }
Sapphire::Entity::EventObject::OnTalkEventHandler Sapphire::Entity::EventObject::getOnTalkHandler() const EventObject::OnTalkEventHandler EventObject::getOnTalkHandler() const
{ {
return m_onTalkEventHandler; return m_onTalkEventHandler;
} }
void Sapphire::Entity::EventObject::setOnTalkHandler( Sapphire::Entity::EventObject::OnTalkEventHandler handler ) void EventObject::setOnTalkHandler( EventObject::OnTalkEventHandler handler )
{ {
m_onTalkEventHandler = std::move( handler ); m_onTalkEventHandler = std::move( handler );
} }
void Sapphire::Entity::EventObject::setGimmickId( uint32_t gimmickId ) void EventObject::setGimmickId( uint32_t gimmickId )
{ {
m_gimmickId = gimmickId; m_gimmickId = gimmickId;
} }
uint8_t Sapphire::Entity::EventObject::getState() const uint8_t EventObject::getState() const
{ {
return m_state; return m_state;
} }
void Sapphire::Entity::EventObject::setState( uint8_t state ) void EventObject::setState( uint8_t state )
{ {
m_state = state; m_state = state;
} }
void Sapphire::Entity::EventObject::setAnimationFlag( uint32_t flag, uint32_t animationFlag ) void EventObject::setAnimationFlag( uint32_t flag, uint32_t animationFlag )
{ {
for( const auto& player : m_inRangePlayers ) Network::Util::Packet::sendActorControl( getInRangePlayerIds(), getId(), EObjAnimation, flag, animationFlag );
server().queueForPlayer( player->getCharacterId(), makeActorControl( getId(), EObjAnimation, flag, animationFlag ) );
} }
void Sapphire::Entity::EventObject::setHousingLink( uint32_t housingLink ) void EventObject::setHousingLink( uint32_t housingLink )
{ {
m_housingLink = housingLink; m_housingLink = housingLink;
} }
uint32_t Sapphire::Entity::EventObject::getHousingLink() const uint32_t EventObject::getHousingLink() const
{ {
return m_housingLink; return m_housingLink;
} }
void Sapphire::Entity::EventObject::setParentInstance( Sapphire::TerritoryPtr instance ) void EventObject::setParentInstance( Sapphire::TerritoryPtr instance )
{ {
m_parentInstance = std::move( instance ); m_parentInstance = std::move( instance );
} }
Sapphire::TerritoryPtr Sapphire::Entity::EventObject::getParentInstance() const TerritoryPtr EventObject::getParentInstance() const
{ {
return m_parentInstance; return m_parentInstance;
} }
void Sapphire::Entity::EventObject::spawn( Sapphire::Entity::PlayerPtr pTarget ) void EventObject::spawn( PlayerPtr pTarget )
{ {
auto spawnIndex = pTarget->getNextObjSpawnIndexForActorId( getId() ); auto spawnIndex = pTarget->getNextObjSpawnIndexForActorId( getId() );
if( !pTarget->isObjSpawnIndexValid( spawnIndex ) ) if( !pTarget->isObjSpawnIndexValid( spawnIndex ) )
@ -149,34 +145,31 @@ void Sapphire::Entity::EventObject::spawn( Sapphire::Entity::PlayerPtr pTarget )
} }
void Sapphire::Entity::EventObject::despawn( Sapphire::Entity::PlayerPtr pTarget ) void EventObject::despawn( PlayerPtr pTarget )
{ {
Logger::debug( "despawn eobj#{0}", getId() ); Logger::debug( "despawn eobj#{0}", getId() );
pTarget->freeObjSpawnIndexForActorId( getId() ); pTarget->freeObjSpawnIndexForActorId( getId() );
} }
const std::string& Sapphire::Entity::EventObject::getName() const const std::string& EventObject::getName() const
{ {
return m_name; return m_name;
} }
uint32_t Sapphire::Entity::EventObject::getInstanceId() const uint32_t EventObject::getInstanceId() const
{ {
return m_instanceId; return m_instanceId;
} }
uint8_t Sapphire::Entity::EventObject::getPermissionInvisibility() const uint8_t EventObject::getPermissionInvisibility() const
{ {
return m_permissionInvisibility; return m_permissionInvisibility;
} }
void Sapphire::Entity::EventObject::setPermissionInvisibility( uint8_t permissionInvisibility ) void EventObject::setPermissionInvisibility( uint8_t permissionInvisibility )
{ {
m_permissionInvisibility = permissionInvisibility; Network::Util::Packet::sendActorControl( getInRangePlayerIds(), getId(), DirectorEObjMod, permissionInvisibility );
auto& server = Common::Service< World::WorldServer >::ref();
auto inRangePlayerIds = getInRangePlayerIds();
server.queueForPlayers( inRangePlayerIds, makeActorControl( getId(), DirectorEObjMod, permissionInvisibility ) );
} }
uint32_t Sapphire::Entity::EventObject::getOwnerId() const uint32_t Sapphire::Entity::EventObject::getOwnerId() const

View file

@ -23,41 +23,42 @@
#include "StatusEffect/StatusEffect.h" #include "StatusEffect/StatusEffect.h"
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Entity;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
//using namespace Sapphire::Network::Packets::Server; //using namespace Sapphire::Network::Packets::Server;
Sapphire::Entity::GameObject::GameObject( ObjKind type ) : GameObject::GameObject( ObjKind type ) :
m_objKind( type ) m_objKind( type )
{ {
} }
uint32_t Sapphire::Entity::GameObject::getId() const uint32_t GameObject::getId() const
{ {
return m_id; return m_id;
} }
void Sapphire::Entity::GameObject::setId( uint32_t id ) void GameObject::setId( uint32_t id )
{ {
m_id = id; m_id = id;
} }
Sapphire::Common::ObjKind Sapphire::Entity::GameObject::getObjKind() const ObjKind GameObject::getObjKind() const
{ {
return m_objKind; return m_objKind;
} }
Sapphire::Common::FFXIVARR_POSITION3& Sapphire::Entity::GameObject::getPos() FFXIVARR_POSITION3& GameObject::getPos()
{ {
return m_pos; return m_pos;
} }
const Sapphire::Common::FFXIVARR_POSITION3& Sapphire::Entity::GameObject::getPos() const const FFXIVARR_POSITION3& GameObject::getPos() const
{ {
return m_pos; return m_pos;
} }
void Sapphire::Entity::GameObject::setPos( float x, float y, float z, bool broadcastUpdate ) void GameObject::setPos( float x, float y, float z, bool broadcastUpdate )
{ {
m_pos.x = x; m_pos.x = x;
m_pos.y = y; m_pos.y = y;
@ -72,7 +73,7 @@ void Sapphire::Entity::GameObject::setPos( float x, float y, float z, bool broad
} }
void Sapphire::Entity::GameObject::setPos( const Sapphire::Common::FFXIVARR_POSITION3& pos, bool broadcastUpdate ) void GameObject::setPos( const FFXIVARR_POSITION3& pos, bool broadcastUpdate )
{ {
m_pos = pos; m_pos = pos;
@ -84,92 +85,92 @@ void Sapphire::Entity::GameObject::setPos( const Sapphire::Common::FFXIVARR_POSI
} }
} }
float Sapphire::Entity::GameObject::getRot() const float GameObject::getRot() const
{ {
return m_rot; return m_rot;
} }
void Sapphire::Entity::GameObject::setRot( float rot ) void GameObject::setRot( float rot )
{ {
m_rot = rot; m_rot = rot;
} }
bool Sapphire::Entity::GameObject::isChara() const bool GameObject::isChara() const
{ {
return isPlayer() || isBattleNpc() || isEventNpc() || isRetainer() || isCompanion(); return isPlayer() || isBattleNpc() || isEventNpc() || isRetainer() || isCompanion();
} }
bool Sapphire::Entity::GameObject::isPlayer() const bool GameObject::isPlayer() const
{ {
return m_objKind == ObjKind::Player; return m_objKind == ObjKind::Player;
} }
bool Sapphire::Entity::GameObject::isEventNpc() const bool GameObject::isEventNpc() const
{ {
return m_objKind == ObjKind::EventNpc; return m_objKind == ObjKind::EventNpc;
} }
bool Sapphire::Entity::GameObject::isBattleNpc() const bool GameObject::isBattleNpc() const
{ {
return m_objKind == ObjKind::BattleNpc; return m_objKind == ObjKind::BattleNpc;
} }
bool Sapphire::Entity::GameObject::isRetainer() const bool GameObject::isRetainer() const
{ {
return m_objKind == ObjKind::Retainer; return m_objKind == ObjKind::Retainer;
} }
bool Sapphire::Entity::GameObject::isCompanion() const bool GameObject::isCompanion() const
{ {
return m_objKind == ObjKind::Companion; return m_objKind == ObjKind::Companion;
} }
bool Sapphire::Entity::GameObject::isEventObj() const bool GameObject::isEventObj() const
{ {
return m_objKind == ObjKind::EventObj; return m_objKind == ObjKind::EventObj;
} }
bool Sapphire::Entity::GameObject::isHousingEventObj() const bool GameObject::isHousingEventObj() const
{ {
return m_objKind == ObjKind::Housing; return m_objKind == ObjKind::Housing;
} }
bool Sapphire::Entity::GameObject::isAetheryte() const bool GameObject::isAetheryte() const
{ {
return m_objKind == ObjKind::Aetheryte; return m_objKind == ObjKind::Aetheryte;
} }
/*! \return pointer to this instance as GameObjectPtr */ /*! \return pointer to this instance as GameObjectPtr */
Sapphire::Entity::CharaPtr Sapphire::Entity::GameObject::getAsChara() CharaPtr GameObject::getAsChara()
{ {
if( !isChara() ) if( !isChara() )
return nullptr; return nullptr;
return std::dynamic_pointer_cast< Entity::Chara, Entity::GameObject >( shared_from_this() ); return std::dynamic_pointer_cast< Chara, GameObject >( shared_from_this() );
} }
/*! \return pointer to this instance as PlayerPtr */ /*! \return pointer to this instance as PlayerPtr */
Sapphire::Entity::PlayerPtr Sapphire::Entity::GameObject::getAsPlayer() PlayerPtr GameObject::getAsPlayer()
{ {
if( !isPlayer() ) if( !isPlayer() )
return nullptr; return nullptr;
return std::dynamic_pointer_cast< Entity::Player, Entity::GameObject >( shared_from_this() ); return std::dynamic_pointer_cast< Player, GameObject >( shared_from_this() );
} }
/*! \return pointer to this instance as EventObjPtr */ /*! \return pointer to this instance as EventObjPtr */
Sapphire::Entity::EventObjectPtr Sapphire::Entity::GameObject::getAsEventObj() EventObjectPtr GameObject::getAsEventObj()
{ {
if( !isEventObj() ) if( !isEventObj() )
return nullptr; return nullptr;
return std::dynamic_pointer_cast< Entity::EventObject, Entity::GameObject >( shared_from_this() ); return std::dynamic_pointer_cast< EventObject, GameObject >( shared_from_this() );
} }
/*! \return pointer to this instance as BNpcPtr */ /*! \return pointer to this instance as BNpcPtr */
Sapphire::Entity::BNpcPtr Sapphire::Entity::GameObject::getAsBNpc() BNpcPtr GameObject::getAsBNpc()
{ {
if( !isBattleNpc() ) if( !isBattleNpc() )
return nullptr; return nullptr;
return std::dynamic_pointer_cast< Entity::BNpc, Entity::GameObject >( shared_from_this() ); return std::dynamic_pointer_cast< BNpc, GameObject >( shared_from_this() );
} }
/*! /*!
@ -178,7 +179,7 @@ but also to the global actor map
\param GameObjectPtr to add \param GameObjectPtr to add
*/ */
void Sapphire::Entity::GameObject::addInRangeActor( GameObjectPtr pActor ) void GameObject::addInRangeActor( GameObjectPtr pActor )
{ {
// if this is null, something went wrong // if this is null, something went wrong
@ -211,7 +212,7 @@ but also to the global actor map
\param GameObjectPtr to remove \param GameObjectPtr to remove
*/ */
void Sapphire::Entity::GameObject::removeInRangeActor( GameObject& actor ) void GameObject::removeInRangeActor( GameObject& actor )
{ {
// call virtual event // call virtual event
onRemoveInRangeActor( actor ); onRemoveInRangeActor( actor );
@ -232,12 +233,12 @@ void Sapphire::Entity::GameObject::removeInRangeActor( GameObject& actor )
} }
/*! \return true if there is at least one actor in the in range set */ /*! \return true if there is at least one actor in the in range set */
bool Sapphire::Entity::GameObject::hasInRangeActor() const bool GameObject::hasInRangeActor() const
{ {
return ( !m_inRangeActor.empty() ); return ( !m_inRangeActor.empty() );
} }
void Sapphire::Entity::GameObject::removeFromInRange() void GameObject::removeFromInRange()
{ {
if( !hasInRangeActor() ) if( !hasInRangeActor() )
return; return;
@ -255,14 +256,14 @@ check if a given actor is in the actors in range set
\param GameObjectPtr to be checked for \param GameObjectPtr to be checked for
\return true if the actor was found \return true if the actor was found
*/ */
bool Sapphire::Entity::GameObject::isInRangeSet( GameObjectPtr pActor ) const bool GameObject::isInRangeSet( GameObjectPtr pActor ) const
{ {
return !( m_inRangeActor.find( pActor ) == m_inRangeActor.end() ); return !( m_inRangeActor.find( pActor ) == m_inRangeActor.end() );
} }
/*! \return GameObjectPtr of the closest actor in range, if none, nullptr */ /*! \return GameObjectPtr of the closest actor in range, if none, nullptr */
Sapphire::Entity::CharaPtr Sapphire::Entity::GameObject::getClosestChara() CharaPtr GameObject::getClosestChara()
{ {
if( m_inRangeActor.empty() ) if( m_inRangeActor.empty() )
// no actors in range, don't bother // no actors in range, don't bother
@ -275,8 +276,7 @@ Sapphire::Entity::CharaPtr Sapphire::Entity::GameObject::getClosestChara()
for( const auto& pCurAct : m_inRangeActor ) for( const auto& pCurAct : m_inRangeActor )
{ {
float distance = Util::distance( getPos().x, getPos().y, getPos().z, float distance = Util::distance( getPos().x, getPos().y, getPos().z, pCurAct->getPos().x, pCurAct->getPos().y, pCurAct->getPos().z );
pCurAct->getPos().x, pCurAct->getPos().y, pCurAct->getPos().z );
if( distance < minDistance ) if( distance < minDistance )
{ {
@ -289,7 +289,7 @@ Sapphire::Entity::CharaPtr Sapphire::Entity::GameObject::getClosestChara()
} }
/*! Clear the whole in range set, this does no cleanup */ /*! Clear the whole in range set, this does no cleanup */
void Sapphire::Entity::GameObject::clearInRangeSet() void GameObject::clearInRangeSet()
{ {
m_inRangeActor.clear(); m_inRangeActor.clear();
m_inRangePlayers.clear(); m_inRangePlayers.clear();
@ -297,7 +297,7 @@ void Sapphire::Entity::GameObject::clearInRangeSet()
} }
/*! \return list of actors currently in range */ /*! \return list of actors currently in range */
std::set< Sapphire::Entity::GameObjectPtr > Sapphire::Entity::GameObject::getInRangeActors( bool includeSelf ) std::set< GameObjectPtr > GameObject::getInRangeActors( bool includeSelf )
{ {
auto tempInRange = m_inRangeActor; auto tempInRange = m_inRangeActor;
@ -307,7 +307,7 @@ std::set< Sapphire::Entity::GameObjectPtr > Sapphire::Entity::GameObject::getInR
return tempInRange; return tempInRange;
} }
std::set< uint64_t > Sapphire::Entity::GameObject::getInRangePlayerIds( bool includeSelf ) std::set< uint64_t > GameObject::getInRangePlayerIds( bool includeSelf )
{ {
std::set< uint64_t > playerIds; std::set< uint64_t > playerIds;
for( auto& player : m_inRangePlayers ) for( auto& player : m_inRangePlayers )
@ -319,22 +319,22 @@ std::set< uint64_t > Sapphire::Entity::GameObject::getInRangePlayerIds( bool inc
return playerIds; return playerIds;
} }
uint32_t Sapphire::Entity::GameObject::getTerritoryTypeId() const uint32_t GameObject::getTerritoryTypeId() const
{ {
return m_territoryTypeId; return m_territoryTypeId;
} }
void Sapphire::Entity::GameObject::setTerritoryTypeId( uint32_t territoryTypeId ) void GameObject::setTerritoryTypeId( uint32_t territoryTypeId )
{ {
m_territoryTypeId = territoryTypeId; m_territoryTypeId = territoryTypeId;
} }
uint32_t Sapphire::Entity::GameObject::getTerritoryId() const uint32_t GameObject::getTerritoryId() const
{ {
return m_territoryId; return m_territoryId;
} }
void Sapphire::Entity::GameObject::setTerritoryId( uint32_t territoryId ) void GameObject::setTerritoryId( uint32_t territoryId )
{ {
m_territoryId = territoryId; m_territoryId = territoryId;
} }
@ -344,7 +344,7 @@ Get the current cellId of a region the actor is in
\return CellId \return CellId
*/ */
Sapphire::Common::CellId Sapphire::Entity::GameObject::getCellId() const CellId GameObject::getCellId() const
{ {
return m_cellId; return m_cellId;
} }
@ -354,7 +354,7 @@ Set the current cellId the actor is in
\param CellId for the cell to be set \param CellId for the cell to be set
*/ */
void Sapphire::Entity::GameObject::setCellId( Common::CellId cellId ) void GameObject::setCellId( CellId cellId )
{ {
m_cellId = cellId; m_cellId = cellId;
} }

View file

@ -1,20 +1,14 @@
#include <Network/PacketContainer.h>
#include "Action/Action.h"
#include "Territory/Territory.h"
#include "Player.h" #include "Player.h"
#include "Npc.h" #include "Npc.h"
#include "Common.h" #include "Common.h"
using namespace Sapphire::Entity;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server;
Sapphire::Entity::Npc::Npc( ObjKind type ) : Chara( type ) Npc::Npc( ObjKind type ) : Chara( type )
{ {
}
}
Npc::~Npc()
Sapphire::Entity::Npc::~Npc()
{ {
} }

View file

@ -642,7 +642,7 @@ void Player::levelUp()
m_mp = getMaxMp(); m_mp = getMaxMp();
setLevel( getLevel() + 1 ); setLevel( getLevel() + 1 );
Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), *this, LevelUpEffect, static_cast< uint8_t >( getClass() ), getLevel(), getLevel() - 1 ); Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), getId(), LevelUpEffect, static_cast< uint8_t >( getClass() ), getLevel(), getLevel() - 1 );
auto& achvMgr = Common::Service< World::Manager::AchievementMgr >::ref(); auto& achvMgr = Common::Service< World::Manager::AchievementMgr >::ref();
achvMgr.progressAchievementByType< Common::Achievement::Type::Classjob >( *this, static_cast< uint32_t >( getClass() ) ); achvMgr.progressAchievementByType< Common::Achievement::Type::Classjob >( *this, static_cast< uint32_t >( getClass() ) );
@ -718,7 +718,7 @@ void Player::setClassJob( Common::ClassJob classJob )
m_tp = 0; m_tp = 0;
Network::Util::Packet::sendStatusUpdate( *this ); Network::Util::Packet::sendStatusUpdate( *this );
Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), *this, ClassJobChange, 4 ); Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), getId(), ClassJobChange, 4 );
Network::Util::Packet::sendHudParam( *this ); Network::Util::Packet::sendHudParam( *this );
Service< World::Manager::MapMgr >::ref().updateQuests( *this ); Service< World::Manager::MapMgr >::ref().updateQuests( *this );
} }
@ -1193,7 +1193,7 @@ void Player::setTitle( uint16_t titleId )
return; return;
m_activeTitle = titleId; m_activeTitle = titleId;
Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), *this, SetTitle, titleId ); Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), getId(), SetTitle, titleId );
} }
const Player::AchievementData& Player::getAchievementData() const const Player::AchievementData& Player::getAchievementData() const
@ -1258,7 +1258,7 @@ void Player::setCompanion( uint8_t id )
m_companionId = id; m_companionId = id;
Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), *this, ToggleCompanion, id ); Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), getId(), ToggleCompanion, id );
} }
uint8_t Player::getCurrentCompanion() const uint8_t Player::getCurrentCompanion() const
@ -1826,7 +1826,7 @@ void Player::setFalling( bool state, const Common::FFXIVARR_POSITION3& pos, bool
// no mercy on hated players // no mercy on hated players
takeDamage( damage ); takeDamage( damage );
} }
Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), *this, SetFallDamage, damage ); Network::Util::Packet::sendActorControl( getInRangePlayerIds( true ), getId(), SetFallDamage, damage );
} }
} }
} }

View file

@ -6,31 +6,30 @@
#include "Actor/Player.h" #include "Actor/Player.h"
#include "Territory/Territory.h" #include "Territory/Territory.h"
#include "WorldServer.h"
#include "Action/EventAction.h" #include "Action/EventAction.h"
#include "Manager/PlayerMgr.h" #include "Manager/PlayerMgr.h"
#include "Service.h" #include "Service.h"
#include <Network/PacketWrappers/RestingPacket.h>
#include <Network/Util/PacketUtil.h> #include <Network/Util/PacketUtil.h>
using namespace Sapphire; using namespace Sapphire;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Entity;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
void Sapphire::Entity::Player::addEvent( Event::EventHandlerPtr pEvent ) void Player::addEvent( Event::EventHandlerPtr pEvent )
{ {
m_eventHandlerMap[ pEvent->getId() ] = pEvent; m_eventHandlerMap[ pEvent->getId() ] = pEvent;
} }
std::map< uint32_t, Sapphire::Event::EventHandlerPtr >& Sapphire::Entity::Player::getEventListRef() std::map< uint32_t, Event::EventHandlerPtr >& Player::getEventListRef()
{ {
return m_eventHandlerMap; return m_eventHandlerMap;
} }
Sapphire::Event::EventHandlerPtr Sapphire::Entity::Player::getEvent( uint32_t eventId ) const Event::EventHandlerPtr Player::getEvent( uint32_t eventId ) const
{ {
auto it = m_eventHandlerMap.find( eventId ); auto it = m_eventHandlerMap.find( eventId );
if( it != m_eventHandlerMap.end() ) if( it != m_eventHandlerMap.end() )
@ -39,12 +38,12 @@ Sapphire::Event::EventHandlerPtr Sapphire::Entity::Player::getEvent( uint32_t ev
return nullptr; return nullptr;
} }
size_t Sapphire::Entity::Player::getEventCount() size_t Player::getEventCount()
{ {
return m_eventHandlerMap.size(); return m_eventHandlerMap.size();
} }
void Sapphire::Entity::Player::removeEvent( uint32_t eventId ) void Player::removeEvent( uint32_t eventId )
{ {
auto it = m_eventHandlerMap.find( eventId ); auto it = m_eventHandlerMap.find( eventId );
if( it != m_eventHandlerMap.end() ) if( it != m_eventHandlerMap.end() )
@ -55,13 +54,13 @@ void Sapphire::Entity::Player::removeEvent( uint32_t eventId )
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void Sapphire::Entity::Player::onDeath() void Player::onDeath()
{ {
Service< World::Manager::PlayerMgr >::ref().onDeath( *this ); Service< World::Manager::PlayerMgr >::ref().onDeath( *this );
} }
// TODO: slightly ugly here and way too static. Needs too be done properly // TODO: slightly ugly here and way too static. Needs too be done properly
void Sapphire::Entity::Player::onTick() void Player::onTick()
{ {
Chara::onTick(); Chara::onTick();
// add 3 seconds to total play time // add 3 seconds to total play time
@ -76,7 +75,7 @@ void Sapphire::Entity::Player::onTick()
Network::Util::Packet::sendRestingUpdate( *this ); Network::Util::Packet::sendRestingUpdate( *this );
} }
bool Sapphire::Entity::Player::performResting() bool Player::performResting()
{ {
bool sendUpdate = false; bool sendUpdate = false;
auto addHp = static_cast< uint32_t >( static_cast< float >( getMaxHp() ) * 0.1f + 1 ); auto addHp = static_cast< uint32_t >( static_cast< float >( getMaxHp() ) * 0.1f + 1 );

View file

@ -27,6 +27,9 @@
#include <Service.h> #include <Service.h>
using namespace Sapphire;
using namespace Sapphire::Entity;
using namespace Sapphire::World;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
@ -34,7 +37,7 @@ using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::Network::ActorControl; using namespace Sapphire::Network::ActorControl;
void Sapphire::Entity::Player::initInventory() void Player::initInventory()
{ {
const uint8_t inventorySize = 25; const uint8_t inventorySize = 25;
auto setupContainer = [ this ]( InventoryType type, uint8_t maxSize, const std::string& tableName, auto setupContainer = [ this ]( InventoryType type, uint8_t maxSize, const std::string& tableName,
@ -103,9 +106,9 @@ void Sapphire::Entity::Player::initInventory()
calculateItemLevel(); calculateItemLevel();
} }
void Sapphire::Entity::Player::equipWeapon( const Item& item ) void Player::equipWeapon( const Item& item )
{ {
auto& exdData = Common::Service< Sapphire::Data::ExdData >::ref(); auto& exdData = Common::Service< Data::ExdData >::ref();
auto itemInfo = exdData.getRow< Excel::Item >( item.getId() ); auto itemInfo = exdData.getRow< Excel::Item >( item.getId() );
auto itemClassJob = itemInfo->data().Class; auto itemClassJob = itemInfo->data().Class;
@ -119,9 +122,9 @@ void Sapphire::Entity::Player::equipWeapon( const Item& item )
} }
} }
void Sapphire::Entity::Player::equipSoulCrystal( const Item& item ) void Player::equipSoulCrystal( const Item& item )
{ {
auto& exdData = Common::Service< Sapphire::Data::ExdData >::ref(); auto& exdData = Common::Service< Data::ExdData >::ref();
auto itemInfo = exdData.getRow< Excel::Item >( item.getId() ); auto itemInfo = exdData.getRow< Excel::Item >( item.getId() );
auto itemClassJob = itemInfo->data().Class; auto itemClassJob = itemInfo->data().Class;
@ -131,7 +134,7 @@ void Sapphire::Entity::Player::equipSoulCrystal( const Item& item )
setClassJob( newClassJob ); setClassJob( newClassJob );
} }
void Sapphire::Entity::Player::updateModels( GearSetSlot equipSlotId, const Sapphire::Item& item ) void Player::updateModels( GearSetSlot equipSlotId, const Sapphire::Item& item )
{ {
uint64_t model = item.getModelId1(); uint64_t model = item.getModelId1();
uint64_t model2 = item.getModelId2(); uint64_t model2 = item.getModelId2();
@ -169,7 +172,7 @@ void Sapphire::Entity::Player::updateModels( GearSetSlot equipSlotId, const Sapp
} }
} }
Sapphire::Common::GearModelSlot Sapphire::Entity::Player::equipSlotToModelSlot( Common::GearSetSlot slot ) Common::GearModelSlot Player::equipSlotToModelSlot( Common::GearSetSlot slot )
{ {
switch( slot ) switch( slot )
{ {
@ -203,7 +206,7 @@ Sapphire::Common::GearModelSlot Sapphire::Entity::Player::equipSlotToModelSlot(
} }
// equip an item // equip an item
void Sapphire::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, Item& item, bool sendUpdate ) void Player::equipItem( Common::GearSetSlot equipSlotId, Item& item, bool sendUpdate )
{ {
switch( equipSlotId ) switch( equipSlotId )
{ {
@ -233,7 +236,7 @@ void Sapphire::Entity::Player::equipItem( Common::GearSetSlot equipSlotId, Item&
} }
void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Item& item, bool sendUpdate ) void Player::unequipItem( Common::GearSetSlot equipSlotId, Item& item, bool sendUpdate )
{ {
auto modelSlot = equipSlotToModelSlot( equipSlotId ); auto modelSlot = equipSlotToModelSlot( equipSlotId );
if( modelSlot != GearModelSlot::ModelInvalid ) if( modelSlot != GearModelSlot::ModelInvalid )
@ -254,7 +257,7 @@ void Sapphire::Entity::Player::unequipItem( Common::GearSetSlot equipSlotId, Ite
} }
} }
void Sapphire::Entity::Player::unequipSoulCrystal() void Player::unequipSoulCrystal()
{ {
auto& exdData = Common::Service< Sapphire::Data::ExdData >::ref(); auto& exdData = Common::Service< Sapphire::Data::ExdData >::ref();
@ -263,7 +266,7 @@ void Sapphire::Entity::Player::unequipSoulCrystal()
setClassJob( parentClass ); setClassJob( parentClass );
} }
uint32_t Sapphire::Entity::Player::currencyTypeToItem( Common::CurrencyType type ) const uint32_t Player::currencyTypeToItem( Common::CurrencyType type ) const
{ {
switch( type ) switch( type )
{ {
@ -301,7 +304,7 @@ uint32_t Sapphire::Entity::Player::currencyTypeToItem( Common::CurrencyType type
} }
// TODO: these next functions are so similar that they could likely be simplified // TODO: these next functions are so similar that they could likely be simplified
void Sapphire::Entity::Player::addCurrency( CurrencyType type, uint32_t amount ) void Player::addCurrency( CurrencyType type, uint32_t amount )
{ {
auto slot = static_cast< uint8_t >( static_cast< uint8_t >( type ) - 1 ); auto slot = static_cast< uint8_t >( static_cast< uint8_t >( type ) - 1 );
auto currItem = m_storageMap[ Currency ]->getItem( slot ); auto currItem = m_storageMap[ Currency ]->getItem( slot );
@ -339,7 +342,7 @@ void Sapphire::Entity::Player::addCurrency( CurrencyType type, uint32_t amount )
server().queueForPlayer( getCharacterId(), invTransFinPacket ); server().queueForPlayer( getCharacterId(), invTransFinPacket );
} }
void Sapphire::Entity::Player::removeCurrency( Common::CurrencyType type, uint32_t amount ) void Player::removeCurrency( Common::CurrencyType type, uint32_t amount )
{ {
auto currItem = m_storageMap[ Currency ]->getItem( static_cast< uint8_t >( type ) - 1 ); auto currItem = m_storageMap[ Currency ]->getItem( static_cast< uint8_t >( type ) - 1 );
@ -373,7 +376,7 @@ void Sapphire::Entity::Player::removeCurrency( Common::CurrencyType type, uint32
} }
void Sapphire::Entity::Player::addCrystal( Common::CrystalType type, uint32_t amount ) void Player::addCrystal( Common::CrystalType type, uint32_t amount )
{ {
auto currItem = m_storageMap[ Crystal ]->getItem( static_cast< uint8_t >( type ) - 1 ); auto currItem = m_storageMap[ Crystal ]->getItem( static_cast< uint8_t >( type ) - 1 );
@ -412,7 +415,7 @@ void Sapphire::Entity::Player::addCrystal( Common::CrystalType type, uint32_t am
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), ItemObtainIcon, static_cast< uint8_t >( type ) + 1, amount ) ); server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), ItemObtainIcon, static_cast< uint8_t >( type ) + 1, amount ) );
} }
void Sapphire::Entity::Player::removeCrystal( Common::CrystalType type, uint32_t amount ) void Player::removeCrystal( Common::CrystalType type, uint32_t amount )
{ {
auto currItem = m_storageMap[ Crystal ]->getItem( static_cast< uint8_t >( type ) - 1 ); auto currItem = m_storageMap[ Crystal ]->getItem( static_cast< uint8_t >( type ) - 1 );
@ -446,9 +449,9 @@ void Sapphire::Entity::Player::removeCrystal( Common::CrystalType type, uint32_t
server().queueForPlayer( getCharacterId(), invTransFinPacket ); server().queueForPlayer( getCharacterId(), invTransFinPacket );
} }
void Sapphire::Entity::Player::sendInventory() void Player::sendInventory()
{ {
auto& invMgr = Common::Service< World::Manager::InventoryMgr >::ref(); auto& invMgr = Common::Service< Manager::InventoryMgr >::ref();
for( auto& it : m_storageMap ) for( auto& it : m_storageMap )
{ {
@ -456,14 +459,14 @@ void Sapphire::Entity::Player::sendInventory()
} }
} }
void Sapphire::Entity::Player::sendGearInventory() void Player::sendGearInventory()
{ {
auto& invMgr = Common::Service< World::Manager::InventoryMgr >::ref(); auto& invMgr = Common::Service< Manager::InventoryMgr >::ref();
invMgr.sendInventoryContainer( *this, m_storageMap[ GearSet0 ] ); invMgr.sendInventoryContainer( *this, m_storageMap[ GearSet0 ] );
} }
Sapphire::Entity::Player::InvSlotPairVec Sapphire::Entity::Player::getSlotsOfItemsInInventory( uint32_t catalogId ) Player::InvSlotPairVec Player::getSlotsOfItemsInInventory( uint32_t catalogId )
{ {
InvSlotPairVec outVec; InvSlotPairVec outVec;
for( auto i : { Bag0, Bag1, Bag2, Bag3 } ) for( auto i : { Bag0, Bag1, Bag2, Bag3 } )
@ -478,7 +481,7 @@ Sapphire::Entity::Player::InvSlotPairVec Sapphire::Entity::Player::getSlotsOfIte
return outVec; return outVec;
} }
Sapphire::Entity::Player::InvSlotPair Sapphire::Entity::Player::getFreeBagSlot() Player::InvSlotPair Player::getFreeBagSlot()
{ {
for( auto i : { Bag0, Bag1, Bag2, Bag3 } ) for( auto i : { Bag0, Bag1, Bag2, Bag3 } )
{ {
@ -491,7 +494,7 @@ Sapphire::Entity::Player::InvSlotPair Sapphire::Entity::Player::getFreeBagSlot()
return std::make_pair( 0, -1 ); return std::make_pair( 0, -1 );
} }
Sapphire::Entity::Player::InvSlotPair Sapphire::Entity::Player::getFreeContainerSlot( uint32_t containerId ) Player::InvSlotPair Player::getFreeContainerSlot( uint32_t containerId )
{ {
auto freeSlot = static_cast< int8_t >( m_storageMap[ containerId ]->getFreeSlot() ); auto freeSlot = static_cast< int8_t >( m_storageMap[ containerId ]->getFreeSlot() );
@ -502,13 +505,13 @@ Sapphire::Entity::Player::InvSlotPair Sapphire::Entity::Player::getFreeContainer
return std::make_pair( 0, -1 ); return std::make_pair( 0, -1 );
} }
Sapphire::ItemPtr Sapphire::Entity::Player::getItemAt( uint16_t containerId, uint16_t slotId ) ItemPtr Player::getItemAt( uint16_t containerId, uint16_t slotId )
{ {
return m_storageMap[ containerId ]->getItem( slotId ); return m_storageMap[ containerId ]->getItem( slotId );
} }
uint32_t Sapphire::Entity::Player::getCurrency( CurrencyType type ) uint32_t Player::getCurrency( CurrencyType type )
{ {
auto currItem = m_storageMap[ Currency ]->getItem( static_cast< uint8_t >( type ) - 1 ); auto currItem = m_storageMap[ Currency ]->getItem( static_cast< uint8_t >( type ) - 1 );
@ -520,7 +523,7 @@ uint32_t Sapphire::Entity::Player::getCurrency( CurrencyType type )
} }
uint32_t Sapphire::Entity::Player::getCrystal( CrystalType type ) uint32_t Player::getCrystal( CrystalType type )
{ {
auto currItem = m_storageMap[ Crystal ]->getItem( static_cast< uint8_t >( type ) - 1 ); auto currItem = m_storageMap[ Crystal ]->getItem( static_cast< uint8_t >( type ) - 1 );
@ -532,7 +535,7 @@ uint32_t Sapphire::Entity::Player::getCrystal( CrystalType type )
} }
void Sapphire::Entity::Player::writeInventory( InventoryType type ) void Player::writeInventory( InventoryType type )
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -561,7 +564,7 @@ void Sapphire::Entity::Player::writeInventory( InventoryType type )
db.execute( query ); db.execute( query );
} }
void Sapphire::Entity::Player::writeItem( Sapphire::ItemPtr pItem ) const void Player::writeItem( ItemPtr pItem ) const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::CHARA_ITEMGLOBAL_UP ); auto stmt = db.getPreparedStatement( Db::CHARA_ITEMGLOBAL_UP );
@ -577,7 +580,7 @@ void Sapphire::Entity::Player::writeItem( Sapphire::ItemPtr pItem ) const
db.directExecute( stmt ); db.directExecute( stmt );
} }
void Sapphire::Entity::Player::writeCurrencyItem( CurrencyType type ) void Player::writeCurrencyItem( CurrencyType type )
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -590,7 +593,7 @@ void Sapphire::Entity::Player::writeCurrencyItem( CurrencyType type )
db.execute( query ); db.execute( query );
} }
void Sapphire::Entity::Player::deleteItemDb( Sapphire::ItemPtr item ) const void Player::deleteItemDb( ItemPtr item ) const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::CHARA_ITEMGLOBAL_DELETE ); auto stmt = db.getPreparedStatement( Db::CHARA_ITEMGLOBAL_DELETE );
@ -601,14 +604,14 @@ void Sapphire::Entity::Player::deleteItemDb( Sapphire::ItemPtr item ) const
} }
bool Sapphire::Entity::Player::isObtainable( uint32_t catalogId, uint8_t quantity ) bool Player::isObtainable( uint32_t catalogId, uint8_t quantity )
{ {
return true; return true;
} }
Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_t quantity, bool isHq, bool silent, bool canMerge ) ItemPtr Player::addItem( uint32_t catalogId, uint32_t quantity, bool isHq, bool silent, bool canMerge )
{ {
auto& exdData = Common::Service< Data::ExdData >::ref(); auto& exdData = Common::Service< Data::ExdData >::ref();
auto itemInfo = exdData.getRow< Excel::Item >( catalogId ); auto itemInfo = exdData.getRow< Excel::Item >( catalogId );
@ -741,7 +744,7 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_
return item; return item;
} }
bool Sapphire::Entity::Player::removeItem( uint32_t catalogId, uint32_t quantity, bool isHq ) bool Player::removeItem( uint32_t catalogId, uint32_t quantity, bool isHq )
{ {
std::vector< uint16_t > bags = { Bag0, Bag1, Bag2, Bag3 }; std::vector< uint16_t > bags = { Bag0, Bag1, Bag2, Bag3 };
@ -790,7 +793,7 @@ bool Sapphire::Entity::Player::removeItem( uint32_t catalogId, uint32_t quantity
} }
void void
Sapphire::Entity::Player::moveItem( uint16_t fromInventoryId, uint16_t fromSlotId, uint16_t toInventoryId, uint16_t toSlot ) Player::moveItem( uint16_t fromInventoryId, uint16_t fromSlotId, uint16_t toInventoryId, uint16_t toSlot )
{ {
auto tmpItem = m_storageMap[ fromInventoryId ]->getItem( fromSlotId ); auto tmpItem = m_storageMap[ fromInventoryId ]->getItem( fromSlotId );
@ -819,9 +822,9 @@ Sapphire::Entity::Player::moveItem( uint16_t fromInventoryId, uint16_t fromSlotI
sendStatusEffectUpdate(); // send if any equip is changed sendStatusEffectUpdate(); // send if any equip is changed
} }
bool Sapphire::Entity::Player::updateContainer( uint16_t storageId, uint16_t slotId, ItemPtr pItem ) bool Player::updateContainer( uint16_t storageId, uint16_t slotId, ItemPtr pItem )
{ {
auto containerType = World::Manager::ItemMgr::getContainerType( storageId ); auto containerType = Manager::ItemMgr::getContainerType( storageId );
auto pOldItem = getItemAt( storageId, slotId ); auto pOldItem = getItemAt( storageId, slotId );
m_storageMap[ storageId ]->setItem( slotId, pItem ); m_storageMap[ storageId ]->setItem( slotId, pItem );
@ -857,8 +860,7 @@ bool Sapphire::Entity::Player::updateContainer( uint16_t storageId, uint16_t slo
return true; return true;
} }
void Sapphire::Entity::Player::splitItem( uint16_t fromInventoryId, uint16_t fromSlotId, void Player::splitItem( uint16_t fromInventoryId, uint16_t fromSlotId, uint16_t toInventoryId, uint16_t toSlot, uint16_t itemCount )
uint16_t toInventoryId, uint16_t toSlot, uint16_t itemCount )
{ {
if( itemCount == 0 ) if( itemCount == 0 )
return; return;
@ -890,8 +892,7 @@ void Sapphire::Entity::Player::splitItem( uint16_t fromInventoryId, uint16_t fro
writeItem( fromItem ); writeItem( fromItem );
} }
void Sapphire::Entity::Player::mergeItem( uint16_t fromInventoryId, uint16_t fromSlotId, void Player::mergeItem( uint16_t fromInventoryId, uint16_t fromSlotId, uint16_t toInventoryId, uint16_t toSlot )
uint16_t toInventoryId, uint16_t toSlot )
{ {
auto fromItem = m_storageMap[ fromInventoryId ]->getItem( fromSlotId ); auto fromItem = m_storageMap[ fromInventoryId ]->getItem( fromSlotId );
auto toItem = m_storageMap[ toInventoryId ]->getItem( toSlot ); auto toItem = m_storageMap[ toInventoryId ]->getItem( toSlot );
@ -925,8 +926,7 @@ void Sapphire::Entity::Player::mergeItem( uint16_t fromInventoryId, uint16_t fro
updateContainer( toInventoryId, toSlot, toItem ); updateContainer( toInventoryId, toSlot, toItem );
} }
void Sapphire::Entity::Player::swapItem( uint16_t fromInventoryId, uint16_t fromSlotId, void Player::swapItem( uint16_t fromInventoryId, uint16_t fromSlotId, uint16_t toInventoryId, uint16_t toSlot )
uint16_t toInventoryId, uint16_t toSlot )
{ {
auto fromItem = m_storageMap[ fromInventoryId ]->getItem( fromSlotId ); auto fromItem = m_storageMap[ fromInventoryId ]->getItem( fromSlotId );
auto toItem = m_storageMap[ toInventoryId ]->getItem( toSlot ); auto toItem = m_storageMap[ toInventoryId ]->getItem( toSlot );
@ -959,7 +959,7 @@ void Sapphire::Entity::Player::swapItem( uint16_t fromInventoryId, uint16_t from
sendStatusEffectUpdate(); // send if any equip is changed sendStatusEffectUpdate(); // send if any equip is changed
} }
void Sapphire::Entity::Player::discardItem( uint16_t fromInventoryId, uint16_t fromSlotId ) void Player::discardItem( uint16_t fromInventoryId, uint16_t fromSlotId )
{ {
// i am not entirely sure how this should be generated or if it even is important for us... // i am not entirely sure how this should be generated or if it even is important for us...
uint32_t sequence = getNextInventorySequence(); uint32_t sequence = getNextInventorySequence();
@ -988,7 +988,7 @@ void Sapphire::Entity::Player::discardItem( uint16_t fromInventoryId, uint16_t f
server().queueForPlayer( getCharacterId(), invTransFinPacket ); server().queueForPlayer( getCharacterId(), invTransFinPacket );
} }
uint16_t Sapphire::Entity::Player::calculateItemLevel() uint16_t Player::calculateItemLevel()
{ {
uint32_t iLvlResult = 0; uint32_t iLvlResult = 0;
@ -1020,7 +1020,7 @@ uint16_t Sapphire::Entity::Player::calculateItemLevel()
return ilvl; return ilvl;
} }
void Sapphire::Entity::Player::calculateBonusStats() void Player::calculateBonusStats()
{ {
m_bonusStats.fill( 0 ); m_bonusStats.fill( 0 );
@ -1052,12 +1052,12 @@ void Sapphire::Entity::Player::calculateBonusStats()
} }
Sapphire::ItemPtr Sapphire::Entity::Player::getEquippedWeapon() ItemPtr Player::getEquippedWeapon()
{ {
return m_storageMap[ GearSet0 ]->getItem( GearSetSlot::MainHand ); return m_storageMap[ GearSet0 ]->getItem( GearSetSlot::MainHand );
} }
uint16_t Sapphire::Entity::Player::getFreeSlotsInBags() uint16_t Player::getFreeSlotsInBags()
{ {
uint16_t slots = 0; uint16_t slots = 0;
for( uint8_t container : { Bag0, Bag1, Bag2, Bag3 } ) for( uint8_t container : { Bag0, Bag1, Bag2, Bag3 } )
@ -1068,7 +1068,7 @@ uint16_t Sapphire::Entity::Player::getFreeSlotsInBags()
return slots; return slots;
} }
bool Sapphire::Entity::Player::collectHandInItems( std::vector< uint32_t > itemIds ) bool Player::collectHandInItems( std::vector< uint32_t > itemIds )
{ {
// todo: figure out how the game gets the required stack count // todo: figure out how the game gets the required stack count
const auto& container = m_storageMap[ HandIn ]; const auto& container = m_storageMap[ HandIn ];
@ -1102,12 +1102,12 @@ bool Sapphire::Entity::Player::collectHandInItems( std::vector< uint32_t > itemI
return true; return true;
} }
uint32_t Sapphire::Entity::Player::getNextInventorySequence() uint32_t Player::getNextInventorySequence()
{ {
return m_inventorySequence++; return m_inventorySequence++;
} }
Sapphire::ItemPtr Sapphire::Entity::Player::dropInventoryItem( Sapphire::Common::InventoryType storageId, uint8_t slotId ) ItemPtr Player::dropInventoryItem( Sapphire::Common::InventoryType storageId, uint8_t slotId )
{ {
auto& container = m_storageMap[ storageId ]; auto& container = m_storageMap[ storageId ];
@ -1141,24 +1141,24 @@ Sapphire::ItemPtr Sapphire::Entity::Player::dropInventoryItem( Sapphire::Common:
return item; return item;
} }
void Sapphire::Entity::Player::addSoldItem( uint32_t itemId, uint8_t stackSize ) void Player::addSoldItem( uint32_t itemId, uint8_t stackSize )
{ {
if( m_soldItems.size() > 10 ) if( m_soldItems.size() > 10 )
m_soldItems.pop_back(); m_soldItems.pop_back();
m_soldItems.emplace_front( itemId, stackSize ); m_soldItems.emplace_front( itemId, stackSize );
} }
std::deque< std::pair< uint32_t, uint8_t > > *Sapphire::Entity::Player::getSoldItems() std::deque< std::pair< uint32_t, uint8_t > >* Player::getSoldItems()
{ {
return &m_soldItems; return &m_soldItems;
} }
void Sapphire::Entity::Player::clearSoldItems() void Player::clearSoldItems()
{ {
m_soldItems.clear(); m_soldItems.clear();
} }
bool Sapphire::Entity::Player::getFreeInventoryContainerSlot( Inventory::InventoryContainerPair& containerPair ) const bool Player::getFreeInventoryContainerSlot( Inventory::InventoryContainerPair& containerPair ) const
{ {
for( auto bagId : { Bag0, Bag1, Bag2, Bag3 } ) for( auto bagId : { Bag0, Bag1, Bag2, Bag3 } )
{ {
@ -1182,8 +1182,7 @@ bool Sapphire::Entity::Player::getFreeInventoryContainerSlot( Inventory::Invento
return false; return false;
} }
void Sapphire::Entity::Player::insertInventoryItem( Sapphire::Common::InventoryType type, uint16_t slot, void Player::insertInventoryItem( Common::InventoryType type, uint16_t slot, const ItemPtr item )
const Sapphire::ItemPtr item )
{ {
updateContainer( type, slot, item ); updateContainer( type, slot, item );
@ -1199,8 +1198,7 @@ void Sapphire::Entity::Player::insertInventoryItem( Sapphire::Common::InventoryT
server().queueForPlayer( getCharacterId(), invTransFinPacket ); server().queueForPlayer( getCharacterId(), invTransFinPacket );
} }
bool Sapphire::Entity::Player::findFirstItemWithId( uint32_t catalogId, bool Player::findFirstItemWithId( uint32_t catalogId, Inventory::InventoryContainerPair& location, std::initializer_list< InventoryType > bags )
Inventory::InventoryContainerPair& location, std::initializer_list< InventoryType > bags )
{ {
for( auto bagId : bags ) for( auto bagId : bags )
{ {

View file

@ -7,16 +7,18 @@
#include "Player.h" #include "Player.h"
using namespace Sapphire;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Entity;
using namespace Sapphire::World;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::Packets::WorldPackets::Server;
void Sapphire::Entity::Player::finishQuest( uint16_t questId, uint32_t optionalChoice ) void Player::finishQuest( uint16_t questId, uint32_t optionalChoice )
{ {
removeQuest( questId ); removeQuest( questId );
auto& questMgr = Common::Service< World::Manager::QuestMgr >::ref(); auto& questMgr = Common::Service< Manager::QuestMgr >::ref();
updateQuestsCompleted( questId ); updateQuestsCompleted( questId );
@ -24,14 +26,14 @@ void Sapphire::Entity::Player::finishQuest( uint16_t questId, uint32_t optionalC
questMgr.onCompleteQuest( *this, questId, optionalChoice ); questMgr.onCompleteQuest( *this, questId, optionalChoice );
} }
void Sapphire::Entity::Player::unfinishQuest( uint16_t questId ) void Player::unfinishQuest( uint16_t questId )
{ {
removeQuestsCompleted( questId ); removeQuestsCompleted( questId );
auto& questMgr = Common::Service< World::Manager::QuestMgr >::ref(); auto& questMgr = Common::Service< Manager::QuestMgr >::ref();
questMgr.sendQuestsInfo( *this ); questMgr.sendQuestsInfo( *this );
} }
void Sapphire::Entity::Player::removeQuest( uint16_t questId ) void Player::removeQuest( uint16_t questId )
{ {
int8_t idx = getQuestIndex( questId ); int8_t idx = getQuestIndex( questId );
@ -41,8 +43,8 @@ void Sapphire::Entity::Player::removeQuest( uint16_t questId )
return; return;
} }
auto& questMgr = Common::Service< World::Manager::QuestMgr >::ref(); auto& questMgr = Common::Service< Manager::QuestMgr >::ref();
auto& mapMgr = Common::Service< World::Manager::MapMgr >::ref(); auto& mapMgr = Common::Service< Manager::MapMgr >::ref();
m_quests[ idx ] = World::Quest(); m_quests[ idx ] = World::Quest();
removeQuestTracking( idx ); removeQuestTracking( idx );
@ -53,7 +55,7 @@ void Sapphire::Entity::Player::removeQuest( uint16_t questId )
} }
void Sapphire::Entity::Player::removeQuestTracking( int8_t idx ) void Player::removeQuestTracking( int8_t idx )
{ {
for( int32_t ii = 0; ii < 5; ii++ ) for( int32_t ii = 0; ii < 5; ii++ )
{ {
@ -62,12 +64,12 @@ void Sapphire::Entity::Player::removeQuestTracking( int8_t idx )
} }
} }
bool Sapphire::Entity::Player::hasQuest( uint32_t questId ) bool Player::hasQuest( uint32_t questId )
{ {
return ( getQuestIndex( static_cast< uint16_t >( questId ) ) > -1 ); return ( getQuestIndex( static_cast< uint16_t >( questId ) ) > -1 );
} }
int8_t Sapphire::Entity::Player::getQuestIndex( uint16_t questId ) int8_t Player::getQuestIndex( uint16_t questId )
{ {
for( size_t pos = 0; pos < 30; ++pos ) for( size_t pos = 0; pos < 30; ++pos )
{ {
@ -77,7 +79,7 @@ int8_t Sapphire::Entity::Player::getQuestIndex( uint16_t questId )
return -1; return -1;
} }
void Sapphire::Entity::Player::updateQuest( const World::Quest& quest ) void Player::updateQuest( const World::Quest& quest )
{ {
auto& questMgr = Common::Service< World::Manager::QuestMgr >::ref(); auto& questMgr = Common::Service< World::Manager::QuestMgr >::ref();
auto& mapMgr = Common::Service< World::Manager::MapMgr >::ref(); auto& mapMgr = Common::Service< World::Manager::MapMgr >::ref();
@ -93,7 +95,7 @@ void Sapphire::Entity::Player::updateQuest( const World::Quest& quest )
addQuest( quest ); addQuest( quest );
} }
bool Sapphire::Entity::Player::addQuest( const World::Quest& quest ) bool Player::addQuest( const World::Quest& quest )
{ {
int8_t idx = getFreeQuestSlot(); int8_t idx = getFreeQuestSlot();
@ -103,8 +105,8 @@ bool Sapphire::Entity::Player::addQuest( const World::Quest& quest )
return false; return false;
} }
auto& questMgr = Common::Service< World::Manager::QuestMgr >::ref(); auto& questMgr = Common::Service< Manager::QuestMgr >::ref();
auto& mapMgr = Common::Service< World::Manager::MapMgr >::ref(); auto& mapMgr = Common::Service< Manager::MapMgr >::ref();
m_quests[ idx ] = quest; m_quests[ idx ] = quest;
@ -117,7 +119,7 @@ bool Sapphire::Entity::Player::addQuest( const World::Quest& quest )
return true; return true;
} }
std::optional< Sapphire::World::Quest > Sapphire::Entity::Player::getQuest( uint32_t questId ) std::optional< World::Quest > Player::getQuest( uint32_t questId )
{ {
if( !hasQuest( questId ) ) if( !hasQuest( questId ) )
return std::nullopt; return std::nullopt;
@ -128,7 +130,7 @@ std::optional< Sapphire::World::Quest > Sapphire::Entity::Player::getQuest( uint
return { quest }; return { quest };
} }
int8_t Sapphire::Entity::Player::getFreeQuestSlot() int8_t Player::getFreeQuestSlot()
{ {
int8_t result = -1; int8_t result = -1;
for( int8_t idx = 0; idx < 30; idx++ ) for( int8_t idx = 0; idx < 30; idx++ )
@ -141,7 +143,7 @@ int8_t Sapphire::Entity::Player::getFreeQuestSlot()
return result; return result;
} }
void Sapphire::Entity::Player::addQuestTracking( uint8_t idx ) void Player::addQuestTracking( uint8_t idx )
{ {
for( int32_t ii = 0; ii < 5; ii++ ) for( int32_t ii = 0; ii < 5; ii++ )
{ {
@ -153,7 +155,7 @@ void Sapphire::Entity::Player::addQuestTracking( uint8_t idx )
} }
} }
void Sapphire::Entity::Player::updateQuestsCompleted( uint32_t questId ) void Player::updateQuestsCompleted( uint32_t questId )
{ {
uint8_t index = questId / 8; uint8_t index = questId / 8;
uint8_t bitIndex = ( questId ) % 8; uint8_t bitIndex = ( questId ) % 8;
@ -163,7 +165,7 @@ void Sapphire::Entity::Player::updateQuestsCompleted( uint32_t questId )
m_questCompleteFlags[ index ] |= value; m_questCompleteFlags[ index ] |= value;
} }
bool Sapphire::Entity::Player::isQuestCompleted( uint32_t questId ) bool Player::isQuestCompleted( uint32_t questId )
{ {
uint8_t index = questId / 8; uint8_t index = questId / 8;
uint8_t bitIndex = ( questId ) % 8; uint8_t bitIndex = ( questId ) % 8;
@ -173,7 +175,7 @@ bool Sapphire::Entity::Player::isQuestCompleted( uint32_t questId )
return m_questCompleteFlags[ index ] & value; return m_questCompleteFlags[ index ] & value;
} }
void Sapphire::Entity::Player::removeQuestsCompleted( uint32_t questId ) void Player::removeQuestsCompleted( uint32_t questId )
{ {
uint8_t index = questId / 8; uint8_t index = questId / 8;
uint8_t bitIndex = ( questId ) % 8; uint8_t bitIndex = ( questId ) % 8;
@ -182,27 +184,27 @@ void Sapphire::Entity::Player::removeQuestsCompleted( uint32_t questId )
m_questCompleteFlags[ index ] ^= value; m_questCompleteFlags[ index ] ^= value;
Common::Service< World::Manager::MapMgr >::ref().updateQuests( *this ); Common::Service< Manager::MapMgr >::ref().updateQuests( *this );
} }
Sapphire::World::Quest& Sapphire::Entity::Player::getQuestByIndex( uint16_t index ) World::Quest& Player::getQuestByIndex( uint16_t index )
{ {
return m_quests[ index ]; return m_quests[ index ];
} }
std::array< Sapphire::World::Quest, 30 >& Sapphire::Entity::Player::getQuestArrayRef() std::array< World::Quest, 30 >& Player::getQuestArrayRef()
{ {
return m_quests; return m_quests;
} }
int16_t Sapphire::Entity::Player::getQuestTracking( uint8_t index ) const int16_t Player::getQuestTracking( uint8_t index ) const
{ {
if( index < 0 || index >= 5 ) if( index < 0 || index >= 5 )
return -1; return -1;
return m_questTracking[ index ]; return m_questTracking[ index ];
} }
Sapphire::Entity::Player::QuestComplete& Sapphire::Entity::Player::getQuestCompleteFlags() Player::QuestComplete& Player::getQuestCompleteFlags()
{ {
return m_questCompleteFlags; return m_questCompleteFlags;
} }

View file

@ -16,12 +16,14 @@
#include "WorldServer.h" #include "WorldServer.h"
using namespace Sapphire;
using namespace Sapphire::Entity;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
bool Sapphire::Entity::Player::loadFromDb( uint64_t characterId ) bool Player::loadFromDb( uint64_t characterId )
{ {
m_characterId = characterId; m_characterId = characterId;
@ -181,7 +183,7 @@ bool Sapphire::Entity::Player::loadFromDb( uint64_t characterId )
return true; return true;
} }
bool Sapphire::Entity::Player::loadActiveQuests() bool Player::loadActiveQuests()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_QUEST ); auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_QUEST );
@ -194,7 +196,6 @@ bool Sapphire::Entity::Player::loadActiveQuests()
while( res->next() ) while( res->next() )
{ {
auto slotId = res->getUInt8( 2 ); auto slotId = res->getUInt8( 2 );
auto quest = World::Quest( res->getUInt16( 3 ), res->getUInt8( 4 ), res->getUInt8( 5 ) ); auto quest = World::Quest( res->getUInt16( 3 ), res->getUInt8( 4 ), res->getUInt8( 5 ) );
@ -205,14 +206,13 @@ bool Sapphire::Entity::Player::loadActiveQuests()
quest.setUI8E( res->getUInt8( 10 ) ); quest.setUI8E( res->getUInt8( 10 ) );
quest.setUI8F( res->getUInt8( 11 ) ); quest.setUI8F( res->getUInt8( 11 ) );
m_quests[ slotId ] = quest; m_quests[ slotId ] = quest;
} }
return true; return true;
} }
bool Sapphire::Entity::Player::loadAchievements() bool Player::loadAchievements()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_ACHIEV_SEL ); auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_ACHIEV_SEL );
@ -255,7 +255,7 @@ bool Sapphire::Entity::Player::loadAchievements()
return true; return true;
} }
bool Sapphire::Entity::Player::loadClassData() bool Player::loadClassData()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
// ClassIdx, Exp, Lvl // ClassIdx, Exp, Lvl
@ -276,7 +276,7 @@ bool Sapphire::Entity::Player::loadClassData()
return true; return true;
} }
bool Sapphire::Entity::Player::loadSearchInfo() bool Player::loadSearchInfo()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_SEARCHINFO ); auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_SEL_SEARCHINFO );
@ -301,7 +301,7 @@ bool Sapphire::Entity::Player::loadSearchInfo()
} }
bool Sapphire::Entity::Player::loadHuntingLog() bool Player::loadHuntingLog()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_MONSTERNOTE_SEL ); auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_MONSTERNOTE_SEL );
@ -324,7 +324,7 @@ bool Sapphire::Entity::Player::loadHuntingLog()
return true; return true;
} }
void Sapphire::Entity::Player::updateSql() void Player::updateSql()
{ {
////// Update player data ////// Update player data
updateDbChara(); updateDbChara();
@ -354,7 +354,7 @@ void Sapphire::Entity::Player::updateSql()
syncLastDBWrite(); syncLastDBWrite();
} }
void Sapphire::Entity::Player::updateDbChara() const void Player::updateDbChara() const
{ {
auto& db = Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
/*"Hp 1, Mp 2, Tp 3, Gp 4, Mode 5, Mount 6, InvincibleGM 7, Voice 8, " /*"Hp 1, Mp 2, Tp 3, Gp 4, Mode 5, Mount 6, InvincibleGM 7, Voice 8, "
@ -482,7 +482,7 @@ void Sapphire::Entity::Player::updateDbChara() const
db.execute( stmt ); db.execute( stmt );
} }
void Sapphire::Entity::Player::updateDbClass() const void Player::updateDbClass() const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto& exdData = Common::Service< Data::ExdData >::ref(); auto& exdData = Common::Service< Data::ExdData >::ref();
@ -497,7 +497,7 @@ void Sapphire::Entity::Player::updateDbClass() const
db.execute( stmtS ); db.execute( stmtS );
} }
void Sapphire::Entity::Player::updateDbMonsterNote() void Player::updateDbMonsterNote()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
// Category_0-11 // Category_0-11
@ -515,7 +515,7 @@ void Sapphire::Entity::Player::updateDbMonsterNote()
db.execute( stmt ); db.execute( stmt );
} }
void Sapphire::Entity::Player::updateDbFriendList() void Player::updateDbFriendList()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -533,7 +533,7 @@ void Sapphire::Entity::Player::updateDbFriendList()
} }
void Sapphire::Entity::Player::updateDbBlacklist() void Player::updateDbBlacklist()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -547,7 +547,7 @@ void Sapphire::Entity::Player::updateDbBlacklist()
db.execute( stmt ); db.execute( stmt );
} }
void Sapphire::Entity::Player::updateDbAchievement() void Player::updateDbAchievement()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -577,7 +577,7 @@ void Sapphire::Entity::Player::updateDbAchievement()
} }
void Sapphire::Entity::Player::insertDbClass( const uint8_t classJobIndex, uint8_t level ) const void Player::insertDbClass( const uint8_t classJobIndex, uint8_t level ) const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmtClass = db.getPreparedStatement( Db::CHARA_CLASS_INS ); auto stmtClass = db.getPreparedStatement( Db::CHARA_CLASS_INS );
@ -588,7 +588,7 @@ void Sapphire::Entity::Player::insertDbClass( const uint8_t classJobIndex, uint8
db.directExecute( stmtClass ); db.directExecute( stmtClass );
} }
void Sapphire::Entity::Player::updateDbSearchInfo() const void Player::updateDbSearchInfo() const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmtS = db.getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTCLASS ); auto stmtS = db.getPreparedStatement( Db::CHARA_SEARCHINFO_UP_SELECTCLASS );
@ -607,7 +607,7 @@ void Sapphire::Entity::Player::updateDbSearchInfo() const
db.execute( stmtS2 ); db.execute( stmtS2 );
} }
void Sapphire::Entity::Player::updateDbAllQuests() const void Player::updateDbAllQuests() const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
for( int32_t i = 0; i < 30; i++ ) for( int32_t i = 0; i < 30; i++ )
@ -633,7 +633,7 @@ void Sapphire::Entity::Player::updateDbAllQuests() const
} }
} }
void Sapphire::Entity::Player::deleteDbQuest( uint16_t questId ) const void Player::deleteDbQuest( uint16_t questId ) const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::CHARA_QUEST_DEL ); auto stmt = db.getPreparedStatement( Db::CHARA_QUEST_DEL );
@ -642,7 +642,7 @@ void Sapphire::Entity::Player::deleteDbQuest( uint16_t questId ) const
db.execute( stmt ); db.execute( stmt );
} }
void Sapphire::Entity::Player::insertDbQuest( uint16_t questId, uint8_t index, uint8_t seq ) const void Player::insertDbQuest( uint16_t questId, uint8_t index, uint8_t seq ) const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::CHARA_QUEST_INS ); auto stmt = db.getPreparedStatement( Db::CHARA_QUEST_INS );
@ -661,7 +661,7 @@ void Sapphire::Entity::Player::insertDbQuest( uint16_t questId, uint8_t index, u
db.execute( stmt ); db.execute( stmt );
} }
void Sapphire::Entity::Player::insertDbQuest( const World::Quest& quest, uint8_t index ) const void Player::insertDbQuest( const World::Quest& quest, uint8_t index ) const
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::CHARA_QUEST_INS ); auto stmt = db.getPreparedStatement( Db::CHARA_QUEST_INS );
@ -680,7 +680,7 @@ void Sapphire::Entity::Player::insertDbQuest( const World::Quest& quest, uint8_t
db.execute( stmt ); db.execute( stmt );
} }
Sapphire::ItemPtr Sapphire::Entity::Player::createItem( uint32_t catalogId, uint32_t quantity ) ItemPtr Player::createItem( uint32_t catalogId, uint32_t quantity )
{ {
auto& exdData = Common::Service< Data::ExdData >::ref(); auto& exdData = Common::Service< Data::ExdData >::ref();
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -707,7 +707,7 @@ Sapphire::ItemPtr Sapphire::Entity::Player::createItem( uint32_t catalogId, uint
return pItem; return pItem;
} }
bool Sapphire::Entity::Player::loadInventory() bool Player::loadInventory()
{ {
auto& itemMgr = Common::Service< World::Manager::ItemMgr >::ref(); auto& itemMgr = Common::Service< World::Manager::ItemMgr >::ref();
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
@ -806,7 +806,7 @@ bool Sapphire::Entity::Player::loadInventory()
return true; return true;
} }
bool Sapphire::Entity::Player::loadFriendList() bool Player::loadFriendList()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_FRIENDLIST_SEL ); auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_FRIENDLIST_SEL );
@ -831,7 +831,7 @@ bool Sapphire::Entity::Player::loadFriendList()
return true; return true;
} }
bool Sapphire::Entity::Player::loadBlacklist() bool Player::loadBlacklist()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_BLACKLIST_SEL ); auto stmt = db.getPreparedStatement( Db::ZoneDbStatements::CHARA_BLACKLIST_SEL );
@ -853,7 +853,7 @@ bool Sapphire::Entity::Player::loadBlacklist()
} }
bool Sapphire::Entity::Player::syncLastDBWrite() bool Player::syncLastDBWrite()
{ {
auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref(); auto& db = Common::Service< Db::DbWorkerPool< Db::ZoneDbConnection > >::ref();
auto res = db.query( "SELECT UNIX_TIMESTAMP(UPDATE_DATE) FROM charainfo WHERE characterid = " + std::to_string( m_characterId ) ); auto res = db.query( "SELECT UNIX_TIMESTAMP(UPDATE_DATE) FROM charainfo WHERE characterid = " + std::to_string( m_characterId ) );

View file

@ -18,13 +18,15 @@
#include <WorldServer.h> #include <WorldServer.h>
using namespace Sapphire;
using namespace Sapphire::World;
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets; using namespace Sapphire::Network::Packets::WorldPackets;
using namespace Sapphire::Network::Packets::WorldPackets::Server; using namespace Sapphire::Network::Packets::WorldPackets::Server;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
void Sapphire::World::ContentFinder::update() void World::ContentFinder::update()
{ {
auto& exdData = Service< Data::ExdData >::ref(); auto& exdData = Service< Data::ExdData >::ref();
auto& server = Service< WorldServer >::ref(); auto& server = Service< WorldServer >::ref();
@ -114,19 +116,19 @@ void Sapphire::World::ContentFinder::update()
} }
void Sapphire::World::ContentFinder::registerContentsRequest( Sapphire::Entity::Player &player, const std::vector< uint32_t >& contentIds ) void World::ContentFinder::registerContentsRequest( Entity::Player &player, const std::vector< uint32_t >& contentIds )
{ {
queueForContent( player, contentIds ); queueForContent( player, contentIds );
completeRegistration( player ); completeRegistration( player );
} }
void Sapphire::World::ContentFinder::registerContentRequest( Sapphire::Entity::Player &player, uint32_t contentId, uint8_t flags ) void World::ContentFinder::registerContentRequest( Entity::Player &player, uint32_t contentId, uint8_t flags )
{ {
queueForContent( player, { contentId } ); queueForContent( player, { contentId } );
completeRegistration( player, flags ); completeRegistration( player, flags );
} }
void Sapphire::World::ContentFinder::registerRandomContentRequest( Sapphire::Entity::Player &player, uint32_t randomContentTypeId ) void World::ContentFinder::registerRandomContentRequest( Entity::Player &player, uint32_t randomContentTypeId )
{ {
auto& exdData = Service< Data::ExdData >::ref(); auto& exdData = Service< Data::ExdData >::ref();
auto contentListIds = exdData.getIdList< Excel::ContentFinderCondition >(); auto contentListIds = exdData.getIdList< Excel::ContentFinderCondition >();
@ -146,9 +148,8 @@ void Sapphire::World::ContentFinder::registerRandomContentRequest( Sapphire::Ent
completeRegistration( player ); completeRegistration( player );
} }
void Sapphire::World::ContentFinder::completeRegistration( const Sapphire::Entity::Player &player, uint8_t flags ) void World::ContentFinder::completeRegistration( const Entity::Player &player, uint8_t flags )
{ {
auto& server = Service< WorldServer >::ref(); auto& server = Service< WorldServer >::ref();
auto queuedContent = m_queuedContent[ m_queuedPlayer[ player.getId() ]->getActiveRegisterId() ]; auto queuedContent = m_queuedContent[ m_queuedPlayer[ player.getId() ]->getActiveRegisterId() ];
@ -182,7 +183,7 @@ void Sapphire::World::ContentFinder::completeRegistration( const Sapphire::Entit
} }
} }
void Sapphire::World::ContentFinder::queueForContent( Sapphire::Entity::Player &player, const std::vector< uint32_t >& contentIds ) void World::ContentFinder::queueForContent( Entity::Player &player, const std::vector< uint32_t >& contentIds )
{ {
for( auto contentId : contentIds ) for( auto contentId : contentIds )
{ {
@ -215,7 +216,7 @@ void Sapphire::World::ContentFinder::queueForContent( Sapphire::Entity::Player &
} }
} }
void Sapphire::World::QueuedContent::queuePlayer( const std::shared_ptr< QueuedPlayer >& pQPlayer ) void World::QueuedContent::queuePlayer( const std::shared_ptr< QueuedPlayer >& pQPlayer )
{ {
m_players.push_back( pQPlayer ); m_players.push_back( pQPlayer );
m_partyMemberCount++; m_partyMemberCount++;
@ -241,7 +242,7 @@ void Sapphire::World::QueuedContent::queuePlayer( const std::shared_ptr< QueuedP
} }
} }
bool Sapphire::World::QueuedContent::withdrawPlayer( const std::shared_ptr< QueuedPlayer >& pQPlayer ) bool World::QueuedContent::withdrawPlayer( const std::shared_ptr< QueuedPlayer >& pQPlayer )
{ {
auto preSize = m_players.size(); auto preSize = m_players.size();
auto it = m_players.begin(); auto it = m_players.begin();
@ -282,12 +283,12 @@ bool Sapphire::World::QueuedContent::withdrawPlayer( const std::shared_ptr< Queu
return true; return true;
} }
uint32_t Sapphire::World::ContentFinder::getNextRegisterId() uint32_t World::ContentFinder::getNextRegisterId()
{ {
return ++m_nextRegisterId; return ++m_nextRegisterId;
} }
Sapphire::World::ContentFinder::QueuedContentPtrList Sapphire::World::ContentFinder::getMatchingContentList( Sapphire::Entity::Player &player, uint32_t contentFinderId ) World::ContentFinder::QueuedContentPtrList World::ContentFinder::getMatchingContentList( Entity::Player &player, uint32_t contentFinderId )
{ {
QueuedContentPtrList outVec; QueuedContentPtrList outVec;
for( auto& it : m_queuedContent ) for( auto& it : m_queuedContent )
@ -361,7 +362,7 @@ Sapphire::World::ContentFinder::QueuedContentPtrList Sapphire::World::ContentFin
return outVec; return outVec;
} }
void Sapphire::World::ContentFinder::accept( Entity::Player& player ) void World::ContentFinder::accept( Entity::Player& player )
{ {
auto& server = Service< WorldServer >::ref(); auto& server = Service< WorldServer >::ref();
auto& exdData = Service< Data::ExdData >::ref(); auto& exdData = Service< Data::ExdData >::ref();
@ -408,7 +409,7 @@ void Sapphire::World::ContentFinder::accept( Entity::Player& player )
queuedContent->setState( Accepted ); queuedContent->setState( Accepted );
} }
void Sapphire::World::ContentFinder::withdraw( Entity::Player& player ) void World::ContentFinder::withdraw( Entity::Player& player )
{ {
auto& server = Service< WorldServer >::ref(); auto& server = Service< WorldServer >::ref();
auto& exdData = Service< Data::ExdData >::ref(); auto& exdData = Service< Data::ExdData >::ref();
@ -471,7 +472,7 @@ void Sapphire::World::ContentFinder::withdraw( Entity::Player& player )
} }
std::shared_ptr< Sapphire::World::QueuedContent > Sapphire::World::ContentFinder::findContentByRegisterId( uint32_t registerId ) std::shared_ptr< World::QueuedContent > World::ContentFinder::findContentByRegisterId( uint32_t registerId )
{ {
auto it = m_queuedContent.find( registerId ); auto it = m_queuedContent.find( registerId );
if( it != m_queuedContent.end() ) if( it != m_queuedContent.end() )
@ -479,7 +480,7 @@ std::shared_ptr< Sapphire::World::QueuedContent > Sapphire::World::ContentFinder
return nullptr; return nullptr;
} }
bool Sapphire::World::ContentFinder::removeContentByRegisterId( uint32_t registerId ) bool World::ContentFinder::removeContentByRegisterId( uint32_t registerId )
{ {
auto it = m_queuedContent.find( registerId ); auto it = m_queuedContent.find( registerId );
if( it == m_queuedContent.end() ) if( it == m_queuedContent.end() )
@ -490,17 +491,17 @@ bool Sapphire::World::ContentFinder::removeContentByRegisterId( uint32_t registe
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
uint32_t Sapphire::World::QueuedContent::getInstanceId() const uint32_t World::QueuedContent::getInstanceId() const
{ {
return m_contentFinderId; return m_contentFinderId;
} }
uint32_t Sapphire::World::QueuedContent::getRegisterId() const uint32_t World::QueuedContent::getRegisterId() const
{ {
return m_registerId; return m_registerId;
} }
Sapphire::World::QueuedContent::QueuedContent( uint32_t registerId, uint32_t contentId ) : World::QueuedContent::QueuedContent( uint32_t registerId, uint32_t contentId ) :
m_registerId( registerId ), m_registerId( registerId ),
m_contentFinderId( contentId ), m_contentFinderId( contentId ),
m_state( QueuedContentState::MatchingInProgress ), m_state( QueuedContentState::MatchingInProgress ),
@ -512,7 +513,7 @@ Sapphire::World::QueuedContent::QueuedContent( uint32_t registerId, uint32_t con
} }
uint8_t Sapphire::World::QueuedContent::getRoleCount( Sapphire::Common::Role role ) const uint8_t World::QueuedContent::getRoleCount( Common::Role role ) const
{ {
switch( role ) switch( role )
{ {
@ -533,12 +534,12 @@ uint8_t Sapphire::World::QueuedContent::getRoleCount( Sapphire::Common::Role rol
return 0; return 0;
} }
Sapphire::World::QueuedContentState Sapphire::World::QueuedContent::getState() const World::QueuedContentState World::QueuedContent::getState() const
{ {
return m_state; return m_state;
} }
void Sapphire::World::QueuedContent::setState( Sapphire::World::QueuedContentState state ) void World::QueuedContent::setState( World::QueuedContentState state )
{ {
m_state = state; m_state = state;
} }
@ -546,7 +547,7 @@ void Sapphire::World::QueuedContent::setState( Sapphire::World::QueuedContentSta
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
Sapphire::World::QueuedPlayer::QueuedPlayer( const Entity::Player &player, uint8_t registerId ) World::QueuedPlayer::QueuedPlayer( const Entity::Player &player, uint8_t registerId )
{ {
m_characterId = player.getCharacterId(); m_characterId = player.getCharacterId();
m_classJob = static_cast< uint32_t >( player.getClass() ); m_classJob = static_cast< uint32_t >( player.getClass() );
@ -556,27 +557,27 @@ Sapphire::World::QueuedPlayer::QueuedPlayer( const Entity::Player &player, uint8
m_entityId = player.getId(); m_entityId = player.getId();
} }
Sapphire::Common::Role Sapphire::World::QueuedPlayer::getRole() const Common::Role World::QueuedPlayer::getRole() const
{ {
return m_role; return m_role;
} }
void Sapphire::World::QueuedPlayer::setActiveRegisterId( uint8_t registerId ) void World::QueuedPlayer::setActiveRegisterId( uint8_t registerId )
{ {
m_activeRegisterId = registerId; m_activeRegisterId = registerId;
} }
uint8_t Sapphire::World::QueuedPlayer::getActiveRegisterId() const uint8_t World::QueuedPlayer::getActiveRegisterId() const
{ {
return m_activeRegisterId; return m_activeRegisterId;
} }
uint64_t Sapphire::World::QueuedPlayer::getCharacterId() const uint64_t World::QueuedPlayer::getCharacterId() const
{ {
return m_characterId; return m_characterId;
} }
uint32_t Sapphire::World::QueuedPlayer::getEntityId() const uint32_t World::QueuedPlayer::getEntityId() const
{ {
return m_entityId; return m_entityId;
} }

View file

@ -5,17 +5,19 @@
#include <Network/PacketWrappers/EventLogMessagePacket.h> #include <Network/PacketWrappers/EventLogMessagePacket.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h> #include <Network/PacketDef/Zone/ServerZoneDef.h>
#include <Network/CommonActorControl.h> #include <Network/CommonActorControl.h>
#include "Network/PacketWrappers/ActorControlPacket.h"
#include "Network/PacketWrappers/ActorControlSelfPacket.h"
#include "Network/GameConnection.h"
#include "Network/Util/PacketUtil.h"
#include "Actor/Player.h" #include "Actor/Player.h"
#include "Network/PacketWrappers/ActorControlPacket.h"
#include "Network/PacketWrappers/ActorControlSelfPacket.h"
#include <Logging/Logger.h> #include <Logging/Logger.h>
#include <Service.h> #include <Service.h>
#include "WorldServer.h" #include "WorldServer.h"
#include "Session.h" #include "Session.h"
#include "Network/GameConnection.h"
using namespace Sapphire::Common; using namespace Sapphire::Common;
using namespace Sapphire::Network::Packets; using namespace Sapphire::Network::Packets;
@ -83,8 +85,7 @@ void Sapphire::Event::Director::sendEventLogMessage( Sapphire::Entity::Player& p
void Sapphire::Event::Director::sendDirectorClear( Sapphire::Entity::Player& player ) const void Sapphire::Event::Director::sendDirectorClear( Sapphire::Entity::Player& player ) const
{ {
auto& server = Common::Service< World::WorldServer >::ref(); Network::Util::Packet::sendActorControlSelf( player, DirectorClear, m_directorId );
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), DirectorClear, m_directorId ) );
} }
void Sapphire::Event::Director::sendDirectorVars( Sapphire::Entity::Player& player ) const void Sapphire::Event::Director::sendDirectorVars( Sapphire::Entity::Player& player ) const
@ -102,8 +103,7 @@ void Sapphire::Event::Director::sendDirectorVars( Sapphire::Entity::Player& play
void Sapphire::Event::Director::sendDirectorInit( Sapphire::Entity::Player& player ) const void Sapphire::Event::Director::sendDirectorInit( Sapphire::Entity::Player& player ) const
{ {
Logger::debug( "[{}] directorInit: directorId#{}, contextId#{}", player.getId(), m_directorId, m_contextId ); Logger::debug( "[{}] directorInit: directorId#{}, contextId#{}", player.getId(), m_directorId, m_contextId );
auto& server = Common::Service< World::WorldServer >::ref(); Network::Util::Packet::sendActorControlSelf( player, DirectorInit, m_directorId, m_contextId );
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), DirectorInit, m_directorId, m_contextId ) );
} }
Sapphire::Event::Director::DirectorType Sapphire::Event::Director::getType() const Sapphire::Event::Director::DirectorType Sapphire::Event::Director::getType() const

View file

@ -2,8 +2,9 @@
#include <utility> #include <utility>
Sapphire::Event::EventHandler::EventHandler( uint64_t actorId, uint32_t eventId, using namespace Sapphire;
EventType eventType, uint32_t eventParam ) :
Event::EventHandler::EventHandler( uint64_t actorId, uint32_t eventId, EventType eventType, uint32_t eventParam ) :
m_actorId( actorId ), m_actorId( actorId ),
m_eventId( eventId ), m_eventId( eventId ),
m_eventType( eventType ), m_eventType( eventType ),
@ -15,107 +16,107 @@ Sapphire::Event::EventHandler::EventHandler( uint64_t actorId, uint32_t eventId,
m_returnCallback = nullptr; m_returnCallback = nullptr;
} }
uint64_t Sapphire::Event::EventHandler::getActorId() const uint64_t Event::EventHandler::getActorId() const
{ {
return m_actorId; return m_actorId;
} }
uint32_t Sapphire::Event::EventHandler::getId() const uint32_t Event::EventHandler::getId() const
{ {
return m_eventId; return m_eventId;
} }
uint8_t Sapphire::Event::EventHandler::getEventType() const uint8_t Event::EventHandler::getEventType() const
{ {
return m_eventType; return m_eventType;
} }
uint16_t Sapphire::Event::EventHandler::getType() const uint16_t Event::EventHandler::getType() const
{ {
return m_type; return m_type;
} }
uint16_t Sapphire::Event::EventHandler::getEntryId() const uint16_t Event::EventHandler::getEntryId() const
{ {
return m_entryId; return m_entryId;
} }
uint32_t Sapphire::Event::EventHandler::getEventParam() const uint32_t Event::EventHandler::getEventParam() const
{ {
return m_eventParam; return m_eventParam;
} }
Sapphire::Event::EventHandler::SceneReturnCallback Sapphire::Event::EventHandler::getEventReturnCallback() const Event::EventHandler::SceneReturnCallback Event::EventHandler::getEventReturnCallback() const
{ {
return m_returnCallback; return m_returnCallback;
} }
void Sapphire::Event::EventHandler::setEventReturnCallback( SceneReturnCallback callback ) void Event::EventHandler::setEventReturnCallback( SceneReturnCallback callback )
{ {
m_returnCallback = std::move( callback ); m_returnCallback = std::move( callback );
} }
Sapphire::Event::EventHandler::QuestSceneReturnCallback Sapphire::Event::EventHandler::getQuestEventReturnCallback() const Event::EventHandler::QuestSceneReturnCallback Event::EventHandler::getQuestEventReturnCallback() const
{ {
return m_questReturnCallback; return m_questReturnCallback;
} }
void Sapphire::Event::EventHandler::setQuestEventReturnCallback( QuestSceneReturnCallback callback ) void Event::EventHandler::setQuestEventReturnCallback( QuestSceneReturnCallback callback )
{ {
m_questReturnCallback = std::move( callback ); m_questReturnCallback = std::move( callback );
} }
Sapphire::Event::EventHandler::SceneChainCallback Sapphire::Event::EventHandler::getSceneChainCallback() const Event::EventHandler::SceneChainCallback Event::EventHandler::getSceneChainCallback() const
{ {
return m_chainCallback; return m_chainCallback;
} }
void Sapphire::Event::EventHandler::setSceneChainCallback( Sapphire::Event::EventHandler::SceneChainCallback callback ) void Event::EventHandler::setSceneChainCallback( Event::EventHandler::SceneChainCallback callback )
{ {
m_chainCallback = std::move( callback ); m_chainCallback = std::move( callback );
} }
Sapphire::Event::EventHandler::QuestSceneChainCallback Sapphire::Event::EventHandler::getQuestSceneChainCallback() const Event::EventHandler::QuestSceneChainCallback Event::EventHandler::getQuestSceneChainCallback() const
{ {
return m_questChainCallback; return m_questChainCallback;
} }
void Sapphire::Event::EventHandler::setQuestSceneChainCallback( Sapphire::Event::EventHandler::QuestSceneChainCallback callback ) void Event::EventHandler::setQuestSceneChainCallback( Event::EventHandler::QuestSceneChainCallback callback )
{ {
m_questChainCallback = std::move( callback ); m_questChainCallback = std::move( callback );
} }
Sapphire::Event::EventHandler::EventFinishCallback Sapphire::Event::EventHandler::getEventFinishCallback() const Event::EventHandler::EventFinishCallback Event::EventHandler::getEventFinishCallback() const
{ {
return m_finishCallback; return m_finishCallback;
} }
void Sapphire::Event::EventHandler::setEventFinishCallback( EventFinishCallback callback ) void Event::EventHandler::setEventFinishCallback( EventFinishCallback callback )
{ {
m_finishCallback = std::move( callback ); m_finishCallback = std::move( callback );
} }
bool Sapphire::Event::EventHandler::hasPlayedScene() const bool Event::EventHandler::hasPlayedScene() const
{ {
return m_playedScene; return m_playedScene;
} }
void Sapphire::Event::EventHandler::setPlayedScene( bool playedScene ) void Event::EventHandler::setPlayedScene( bool playedScene )
{ {
m_playedScene = playedScene; m_playedScene = playedScene;
} }
bool Sapphire::Event::EventHandler::hasNestedEvent() const bool Event::EventHandler::hasNestedEvent() const
{ {
return m_pNestedEvent != nullptr; return m_pNestedEvent != nullptr;
} }
void Sapphire::Event::EventHandler::removeNestedEvent() void Event::EventHandler::removeNestedEvent()
{ {
m_pNestedEvent.reset(); m_pNestedEvent.reset();
} }
Sapphire::Event::ScenePlayParam *Sapphire::Event::EventHandler::getScenePlayParams() Event::ScenePlayParam* Event::EventHandler::getScenePlayParams()
{ {
return &m_scenePlayParams; return &m_scenePlayParams;
} }

View file

@ -2,7 +2,9 @@
#include <utility> #include <utility>
Sapphire::FreeCompany::FreeCompany( uint64_t id, std::string name, std::string tag, uint64_t masterId, uint64_t chatChannelId ) : using namespace Sapphire;
FreeCompany::FreeCompany( uint64_t id, std::string name, std::string tag, uint64_t masterId, uint64_t chatChannelId ) :
m_id( id ), m_id( id ),
m_name( std::move( name ) ), m_name( std::move( name ) ),
m_tag( std::move( tag ) ), m_tag( std::move( tag ) ),
@ -12,211 +14,211 @@ Sapphire::FreeCompany::FreeCompany( uint64_t id, std::string name, std::string t
} }
uint64_t Sapphire::FreeCompany::getId() const uint64_t FreeCompany::getId() const
{ {
return m_id; return m_id;
} }
const std::string& Sapphire::FreeCompany::getName() const const std::string& FreeCompany::getName() const
{ {
return m_name; return m_name;
} }
void Sapphire::FreeCompany::setName( std::string name ) void FreeCompany::setName( std::string name )
{ {
m_name = std::move( name ); m_name = std::move( name );
} }
const std::string& Sapphire::FreeCompany::getTag() const const std::string& FreeCompany::getTag() const
{ {
return m_tag; return m_tag;
} }
void Sapphire::FreeCompany::setTag( std::string tag ) void FreeCompany::setTag( std::string tag )
{ {
m_tag = std::move( tag ); m_tag = std::move( tag );
} }
uint64_t Sapphire::FreeCompany::getMasterId() const uint64_t FreeCompany::getMasterId() const
{ {
return m_masterCharacterId; return m_masterCharacterId;
} }
void Sapphire::FreeCompany::setMasterId( uint64_t masterId ) void FreeCompany::setMasterId( uint64_t masterId )
{ {
m_masterCharacterId = masterId; m_masterCharacterId = masterId;
} }
uint64_t Sapphire::FreeCompany::getCredit() const uint64_t FreeCompany::getCredit() const
{ {
return m_credit; return m_credit;
} }
void Sapphire::FreeCompany::setCredit( uint64_t credit ) void FreeCompany::setCredit( uint64_t credit )
{ {
m_credit = credit; m_credit = credit;
} }
uint64_t Sapphire::FreeCompany::getCreditAccumulated() const uint64_t FreeCompany::getCreditAccumulated() const
{ {
return m_creditAccumulated; return m_creditAccumulated;
} }
void Sapphire::FreeCompany::setCreditAccumulated( uint64_t credit ) void FreeCompany::setCreditAccumulated( uint64_t credit )
{ {
m_creditAccumulated = credit; m_creditAccumulated = credit;
} }
uint8_t Sapphire::FreeCompany::getRank() const uint8_t FreeCompany::getRank() const
{ {
return m_rank; return m_rank;
} }
void Sapphire::FreeCompany::setRank( uint8_t rank ) void FreeCompany::setRank( uint8_t rank )
{ {
m_rank = rank; m_rank = rank;
} }
uint64_t Sapphire::FreeCompany::getPoints() const uint64_t FreeCompany::getPoints() const
{ {
return m_points; return m_points;
} }
void Sapphire::FreeCompany::setPoints( uint64_t points ) void FreeCompany::setPoints( uint64_t points )
{ {
m_points = points; m_points = points;
} }
uint64_t Sapphire::FreeCompany::getCrest() const uint64_t FreeCompany::getCrest() const
{ {
return m_crest; return m_crest;
} }
void Sapphire::FreeCompany::setCrest( uint64_t crest ) void FreeCompany::setCrest( uint64_t crest )
{ {
m_crest = crest; m_crest = crest;
} }
uint32_t Sapphire::FreeCompany::getCreateDate() const uint32_t FreeCompany::getCreateDate() const
{ {
return m_createDate; return m_createDate;
} }
void Sapphire::FreeCompany::setCreateDate( uint32_t createDate ) void FreeCompany::setCreateDate( uint32_t createDate )
{ {
m_createDate = createDate; m_createDate = createDate;
} }
uint8_t Sapphire::FreeCompany::getGrandCompany() const uint8_t FreeCompany::getGrandCompany() const
{ {
return m_gc; return m_gc;
} }
void Sapphire::FreeCompany::setGrandCompany( uint8_t gcIndex ) void FreeCompany::setGrandCompany( uint8_t gcIndex )
{ {
if( gcIndex > 2 ) if( gcIndex > 2 )
return; return;
m_gc = gcIndex; m_gc = gcIndex;
} }
uint64_t Sapphire::FreeCompany::getGcReputation( uint8_t gcIndex ) const uint64_t FreeCompany::getGcReputation( uint8_t gcIndex ) const
{ {
if( gcIndex > 2 ) if( gcIndex > 2 )
return 0; return 0;
return m_gcReputation[ gcIndex ]; return m_gcReputation[ gcIndex ];
} }
void Sapphire::FreeCompany::setGcReputation( uint8_t gcIndex, uint64_t reputation ) void FreeCompany::setGcReputation( uint8_t gcIndex, uint64_t reputation )
{ {
if( gcIndex > 2 ) if( gcIndex > 2 )
return; return;
m_gcReputation[ gcIndex ] = reputation; m_gcReputation[ gcIndex ] = reputation;
} }
Sapphire::Common::FreeCompanyStatus Sapphire::FreeCompany::getFcStatus() const Common::FreeCompanyStatus FreeCompany::getFcStatus() const
{ {
return m_status; return m_status;
} }
void Sapphire::FreeCompany::setFcStatus( Sapphire::Common::FreeCompanyStatus status ) void FreeCompany::setFcStatus( Common::FreeCompanyStatus status )
{ {
m_status = status; m_status = status;
} }
const std::string& Sapphire::FreeCompany::getFcBoard() const const std::string& FreeCompany::getFcBoard() const
{ {
return m_fcBoard; return m_fcBoard;
} }
void Sapphire::FreeCompany::setFcBoard( const std::string& board ) void FreeCompany::setFcBoard( const std::string& board )
{ {
m_fcBoard = board; m_fcBoard = board;
} }
const std::string& Sapphire::FreeCompany::getFcMotto() const const std::string& FreeCompany::getFcMotto() const
{ {
return m_fcMotto; return m_fcMotto;
} }
void Sapphire::FreeCompany::setFcMotto( const std::string& motto ) void FreeCompany::setFcMotto( const std::string& motto )
{ {
m_fcMotto = motto; m_fcMotto = motto;
} }
uint32_t Sapphire::FreeCompany::getFcVersion() const uint32_t FreeCompany::getFcVersion() const
{ {
return m_fcVersion; return m_fcVersion;
} }
void Sapphire::FreeCompany::setFcVersion( uint32_t version ) void FreeCompany::setFcVersion( uint32_t version )
{ {
m_fcVersion = version; m_fcVersion = version;
} }
const std::array< uint64_t, 3 >& Sapphire::FreeCompany::getActiveActionIdArr() const const std::array< uint64_t, 3 >& FreeCompany::getActiveActionIdArr() const
{ {
return m_activeActionId; return m_activeActionId;
} }
const std::array< uint64_t, 3 >& Sapphire::FreeCompany::getActiveActionTimeLeftArr() const const std::array< uint64_t, 3 >& FreeCompany::getActiveActionTimeLeftArr() const
{ {
return m_activeActionTimeLeft; return m_activeActionTimeLeft;
} }
const std::array< uint64_t, 15 >& Sapphire::FreeCompany::getActionStockArr() const const std::array< uint64_t, 15 >& FreeCompany::getActionStockArr() const
{ {
return m_actionStock; return m_actionStock;
} }
uint64_t Sapphire::FreeCompany::getChatChannel() const uint64_t FreeCompany::getChatChannel() const
{ {
return m_chatChannelId; return m_chatChannelId;
} }
const std::set< uint64_t >& Sapphire::FreeCompany::getMemberIdList() const const std::set< uint64_t >& FreeCompany::getMemberIdList() const
{ {
return m_memberIds; return m_memberIds;
} }
std::set< uint64_t >& Sapphire::FreeCompany::getMemberIdList() std::set< uint64_t >& FreeCompany::getMemberIdList()
{ {
return m_memberIds; return m_memberIds;
} }
void Sapphire::FreeCompany::addMember( uint64_t memberId, uint8_t hierarchyId, uint32_t lastLogout ) void FreeCompany::addMember( uint64_t memberId, uint8_t hierarchyId, uint32_t lastLogout )
{ {
FcMember member{ memberId, hierarchyId, lastLogout }; FcMember member{ memberId, hierarchyId, lastLogout };
m_memberDetails[ memberId ] = member; m_memberDetails[ memberId ] = member;
m_memberIds.insert( memberId ); m_memberIds.insert( memberId );
} }
void Sapphire::FreeCompany::removeMember( uint64_t memberId ) void FreeCompany::removeMember( uint64_t memberId )
{ {
m_memberDetails.erase( memberId ); m_memberDetails.erase( memberId );
m_memberIds.erase( memberId ); m_memberIds.erase( memberId );
} }
void Sapphire::FreeCompany::setChatChannel( uint64_t chatChannelId ) void FreeCompany::setChatChannel( uint64_t chatChannelId )
{ {
m_chatChannelId = chatChannelId; m_chatChannelId = chatChannelId;
} }

View file

@ -289,7 +289,6 @@ uint32_t HousingMgr::toLandSetId( int16_t territoryTypeId, int16_t wardId ) cons
return ( static_cast< uint32_t >( territoryTypeId ) << 16 ) | wardId; return ( static_cast< uint32_t >( territoryTypeId ) << 16 ) | wardId;
} }
LandPtr HousingMgr::getLandByOwnerId( uint64_t id ) LandPtr HousingMgr::getLandByOwnerId( uint64_t id )
{ {
@ -405,7 +404,7 @@ LandPurchaseResult HousingMgr::purchaseLand( Entity::Player& player, HousingZone
pLand->setStatus( Common::HouseStatus::Sold ); pLand->setStatus( Common::HouseStatus::Sold );
pLand->setLandType( Common::LandType::Private ); pLand->setLandType( Common::LandType::Private );
player.setLandFlags( Common::LandFlagsSlot::Private, 0x00, pLand->getLandIdent() ); player.setLandFlags( Common::LandFlagsSlot::Private, 0, pLand->getLandIdent() );
sendLandFlagsSlot( player, Common::LandFlagsSlot::Private ); sendLandFlagsSlot( player, Common::LandFlagsSlot::Private );
@ -433,7 +432,7 @@ bool HousingMgr::relinquishLand( Entity::Player& player, HousingZone& zone, uint
// can't relinquish when you are not the owner // can't relinquish when you are not the owner
// TODO: actually use permissions here for FC houses // TODO: actually use permissions here for FC houses
if( !hasPermission( player, *pLand, 0 ) ) if( !pLand || !hasPermission( player, *pLand, 0 ) )
{ {
Network::Util::Packet::sendActorControlSelf( player, ActorControl::LogMsg, 3304 ); Network::Util::Packet::sendActorControlSelf( player, ActorControl::LogMsg, 3304 );
return false; return false;
@ -455,7 +454,7 @@ bool HousingMgr::relinquishLand( Entity::Player& player, HousingZone& zone, uint
Common::LandIdent ident { 0xFF, 0xFF, 0xFF, 0xFF }; Common::LandIdent ident { 0xFF, 0xFF, 0xFF, 0xFF };
player.setLandFlags( Common::LandFlagsSlot::Private, 0x00, ident ); player.setLandFlags( Common::LandFlagsSlot::Private, 0, ident );
sendLandFlagsSlot( player, Common::LandFlagsSlot::Private ); sendLandFlagsSlot( player, Common::LandFlagsSlot::Private );
@ -676,10 +675,7 @@ void HousingMgr::buildPresetEstate( Entity::Player& player, HousingZone& zone, u
auto& server = Common::Service< World::WorldServer >::ref(); auto& server = Common::Service< World::WorldServer >::ref();
auto pLand = zone.getLand( plotNum ); auto pLand = zone.getLand( plotNum );
if( !pLand ) if( !pLand || !hasPermission( player, *pLand, 0 ) )
return;
if( !hasPermission( player, *pLand, 0 ) )
return; return;
// create house // create house
@ -784,10 +780,7 @@ void HousingMgr::updateEstateGreeting( Entity::Player& player, const Common::Lan
return; return;
auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
if( !land ) if( !land || !hasPermission( player, *land, 0 ) )
return;
if( !hasPermission( player, *land, 0 ) )
return; return;
auto house = land->getHouse(); auto house = land->getHouse();
@ -813,10 +806,7 @@ void HousingMgr::requestEstateEditGuestAccess( Entity::Player& player, const Com
return; return;
auto land = hZone->getLand( ident.landId ); auto land = hZone->getLand( ident.landId );
if( !land ) if( !land || !hasPermission( player, *land, 0 ) )
return;
if( !hasPermission( player, *land, 0 ) )
return; return;
auto packet = makeZonePacket< FFXIVIpcHousingWelcome >( player.getId() ); auto packet = makeZonePacket< FFXIVIpcHousingWelcome >( player.getId() );
@ -880,10 +870,7 @@ void HousingMgr::sendEstateInventory( Entity::Player& player, uint16_t inventory
targetLand = zone->getLand( plotNum ); targetLand = zone->getLand( plotNum );
} }
if( !targetLand ) if( !targetLand || !hasPermission( player, *targetLand, 0 ) )
return;
if( !hasPermission( player, *targetLand, 0 ) )
return; return;
auto& containers = getEstateInventory( targetLand->getLandIdent() ); auto& containers = getEstateInventory( targetLand->getLandIdent() );
@ -1018,10 +1005,7 @@ void HousingMgr::reqPlaceHousingItem( Entity::Player& player, uint16_t landId, u
else else
return; return;
if( !land ) if( !land || !hasPermission( player, *land, 0 ) )
return;
if( !hasPermission( player, *land, 0 ) )
return; return;
// todo: check item position and make sure it's not outside the plot // todo: check item position and make sure it's not outside the plot
@ -1275,10 +1259,7 @@ void HousingMgr::reqMoveHousingItem( Entity::Player& player, Common::LandIdent i
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri ); auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
if( !land ) if( !land || !hasPermission( player, *land, 0 ) )
return;
if( !hasPermission( player, *land, 0 ) )
return; return;
auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() ); auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
@ -1347,8 +1328,7 @@ bool HousingMgr::moveExternalItem( Entity::Player& player, Common::LandIdent ide
auto& server = Common::Service< World::WorldServer >::ref(); auto& server = Common::Service< World::WorldServer >::ref();
auto land = terri.getLand( static_cast< uint8_t >( ident.landId ) ); auto land = terri.getLand( static_cast< uint8_t >( ident.landId ) );
if( !land || !hasPermission( player, *land, 0 ) )
if( !hasPermission( player, *land, 0 ) )
return false; return false;
auto& containers = getEstateInventory( ident ); auto& containers = getEstateInventory( ident );
@ -1390,11 +1370,7 @@ void HousingMgr::reqRemoveHousingItem( Entity::Player& player, uint16_t plot, ui
auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri ); auto hZone = std::dynamic_pointer_cast< HousingZone >( pTeri );
auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) ); auto land = hZone->getLand( static_cast< uint8_t >( ident.landId ) );
if( !land || !hasPermission( player, *land, 0 ) )
if( !land )
return;
if( !hasPermission( player, *land, 0 ) )
return; return;
removeInternalItem( player, *terri, containerId, slot, sendToStoreroom ); removeInternalItem( player, *terri, containerId, slot, sendToStoreroom );
@ -1402,10 +1378,7 @@ void HousingMgr::reqRemoveHousingItem( Entity::Player& player, uint16_t plot, ui
else if( auto terri = std::dynamic_pointer_cast< HousingZone >( pZone ) ) else if( auto terri = std::dynamic_pointer_cast< HousingZone >( pZone ) )
{ {
auto land = terri->getLand( static_cast< uint8_t >( plot ) ); auto land = terri->getLand( static_cast< uint8_t >( plot ) );
if( !land ) if( !land || !hasPermission( player, *land, 0 ) )
return;
if( !hasPermission( player, *land, 0 ) )
return; return;
auto containerType = static_cast< Common::InventoryType >( containerId ); auto containerType = static_cast< Common::InventoryType >( containerId );

View file

@ -91,8 +91,8 @@ void WarpMgr::requestWarp( Entity::Player& player, Common::WarpType warpType, Co
{ {
m_entityIdToWarpInfoMap[ player.getId() ] = { 0, warpType, targetPos, targetRot }; m_entityIdToWarpInfoMap[ player.getId() ] = { 0, warpType, targetPos, targetRot };
Network::Util::Packet::sendActorControlSelf( player.getInRangePlayerIds( true ), player, WarpStart, warpType, warpType, 0, player.getTerritoryTypeId(), 1 ); Network::Util::Packet::sendActorControlSelf( player.getInRangePlayerIds( true ), player.getId(), WarpStart, warpType, warpType, 0, player.getTerritoryTypeId(), 1 );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player, ActorDespawnEffect, warpType, player.getTerritoryTypeId() ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player.getId(), ActorDespawnEffect, warpType, player.getTerritoryTypeId() );
auto& taskMgr = Common::Service< TaskMgr >::ref(); auto& taskMgr = Common::Service< TaskMgr >::ref();
taskMgr.queueTask( makeWarpTask( player, warpType, targetPos, targetRot, 1000 ) ); taskMgr.queueTask( makeWarpTask( player, warpType, targetPos, targetRot, 1000 ) );
@ -127,10 +127,10 @@ void WarpMgr::finishWarp( Entity::Player& player )
auto warpFinishAnim = warpType - 1; auto warpFinishAnim = warpType - 1;
if( !player.getGmInvis() ) if( !player.getGmInvis() )
Network::Util::Packet::sendActorControlSelf( player.getInRangePlayerIds(), player, Appear, warpFinishAnim, raiseAnim ); Network::Util::Packet::sendActorControlSelf( player.getInRangePlayerIds(), player.getId(), Appear, warpFinishAnim, raiseAnim );
Network::Util::Packet::sendActorControlSelf( player, Appear, warpFinishAnim, raiseAnim ); Network::Util::Packet::sendActorControlSelf( player, Appear, warpFinishAnim, raiseAnim );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player, SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player.getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) );
player.removeCondition( PlayerCondition::BetweenAreas ); player.removeCondition( PlayerCondition::BetweenAreas );

View file

@ -418,7 +418,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
player.setStance( Stance::Passive ); player.setStance( Stance::Passive );
player.setAutoattack( false ); player.setAutoattack( false );
} }
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player, ToggleWeapon, data.Arg0, 1 ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player.getId(), ToggleWeapon, data.Arg0, 1 );
break; break;
} }
case PacketCommand::AUTO_ATTACK: // Toggle auto-attack case PacketCommand::AUTO_ATTACK: // Toggle auto-attack
@ -431,7 +431,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
else else
player.setAutoattack( false ); player.setAutoattack( false );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player, AutoAttack, data.Arg0, 1 ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player.getId(), AutoAttack, data.Arg0, 1 );
break; break;
} }
@ -513,7 +513,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
if( !emoteData ) if( !emoteData )
return; return;
Network::Util::Packet::sendActorControlTarget( player.getInRangePlayerIds(), player, Emote, emoteId, 0, isSilent ? 1 : 0, 0, targetId ); Network::Util::Packet::sendActorControlTarget( player.getInRangePlayerIds(), player.getId(), Emote, emoteId, 0, isSilent ? 1 : 0, 0, targetId );
bool isPersistent = emoteData->data().Mode != 0; bool isPersistent = emoteData->data().Mode != 0;
@ -524,7 +524,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
player.setPersistentEmote( emoteData->data().Mode ); player.setPersistentEmote( emoteData->data().Mode );
player.setStatus( ActorStatus::EmoteMode ); player.setStatus( ActorStatus::EmoteMode );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player, SetStatus, static_cast< uint8_t >( ActorStatus::EmoteMode ), Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player.getId(), SetStatus, static_cast< uint8_t >( ActorStatus::EmoteMode ),
emoteData->data().IsEndEmoteMode ? 1 : 0 ); emoteData->data().IsEndEmoteMode ? 1 : 0 );
} }
@ -537,7 +537,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
} }
case PacketCommand::EMOTE_CANCEL: // emote case PacketCommand::EMOTE_CANCEL: // emote
{ {
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player, EmoteModeInterrupt ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player.getId(), EmoteModeInterrupt );
break; break;
} }
case PacketCommand::EMOTE_MODE_CANCEL: case PacketCommand::EMOTE_MODE_CANCEL:
@ -549,8 +549,8 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
server().queueForPlayers( player.getInRangePlayerIds(), std::make_shared< MoveActorPacket >( player, player.getRot(), 2, 0, 0, 0x5A / 4 ) ); server().queueForPlayers( player.getInRangePlayerIds(), std::make_shared< MoveActorPacket >( player, player.getRot(), 2, 0, 0, 0x5A / 4 ) );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player, EmoteModeInterrupt ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player.getId(), EmoteModeInterrupt );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player, SetStatus, static_cast< uint8_t >( ActorStatus::Idle ) ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds(), player.getId(), SetStatus, static_cast< uint8_t >( ActorStatus::Idle ) );
} }
break; break;
} }
@ -558,7 +558,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
case PacketCommand::POSE_EMOTE_WORK: // reapply pose case PacketCommand::POSE_EMOTE_WORK: // reapply pose
{ {
player.setPose( static_cast< uint8_t >( data.Arg1 ) ); player.setPose( static_cast< uint8_t >( data.Arg1 ) );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player, SetPose, data.Arg0, data.Arg1 ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player.getId(), SetPose, data.Arg0, data.Arg1 );
break; break;
} }
case PacketCommand::POSE_EMOTE_CANCEL: // cancel pose case PacketCommand::POSE_EMOTE_CANCEL: // cancel pose

View file

@ -84,7 +84,7 @@ void Sapphire::Network::GameConnection::setProfileHandler( const Packets::FFXIVA
strcpy( searchInfoPacket->data().SearchComment, player.getSearchMessage() ); strcpy( searchInfoPacket->data().SearchComment, player.getSearchMessage() );
queueOutPacket( searchInfoPacket ); queueOutPacket( searchInfoPacket );
Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player, SetStatusIcon, static_cast< uint8_t >( player.getOnlineStatus() ) ); Network::Util::Packet::sendActorControl( player.getInRangePlayerIds( true ), player.getId(), SetStatusIcon, static_cast< uint8_t >( player.getOnlineStatus() ) );
} }
void Sapphire::Network::GameConnection::getProfileHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player ) void Sapphire::Network::GameConnection::getProfileHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )

View file

@ -69,10 +69,10 @@ void Util::Packet::sendBaseParams( Entity::Player& player )
server().queueForPlayer( player.getCharacterId(), statPacket ); server().queueForPlayer( player.getCharacterId(), statPacket );
} }
void Util::Packet::sendHudParam( Entity::Player& player ) void Util::Packet::sendHudParam( Entity::Chara& source )
{ {
auto hudParamPacket = makeHudParam( player ); auto hudParamPacket = makeHudParam( source );
server().queueForPlayer( player.getCharacterId(), hudParamPacket ); server().queueForPlayers( source.getInRangePlayerIds( source.isPlayer() ), hudParamPacket );
} }
void Util::Packet::sendStatusUpdate( Entity::Player& player ) void Util::Packet::sendStatusUpdate( Entity::Player& player )
@ -136,10 +136,10 @@ void Util::Packet::sendActorControlSelf( Entity::Player& player, uint16_t catego
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), category, param1, param2, param3, param4, param5 ) ); server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), category, param1, param2, param3, param4, param5 ) );
} }
void Util::Packet::sendActorControlSelf( const std::set< uint64_t >& characterIds, Entity::Player& player, uint16_t category, uint32_t param1, void Util::Packet::sendActorControlSelf( const std::set< uint64_t >& characterIds, uint32_t srcId, uint16_t category, uint32_t param1,
uint32_t param2, uint32_t param3, uint32_t param4, uint32_t param5 ) uint32_t param2, uint32_t param3, uint32_t param4, uint32_t param5 )
{ {
server().queueForPlayers( characterIds, makeActorControlSelf( player.getId(), category, param1, param2, param3, param4, param5 ) ); server().queueForPlayers( characterIds, makeActorControlSelf( srcId, category, param1, param2, param3, param4, param5 ) );
} }
void Util::Packet::sendActorControl( Entity::Player& player, uint16_t category, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4 ) void Util::Packet::sendActorControl( Entity::Player& player, uint16_t category, uint32_t param1, uint32_t param2, uint32_t param3, uint32_t param4 )
@ -147,10 +147,10 @@ void Util::Packet::sendActorControl( Entity::Player& player, uint16_t category,
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), category, param1, param2, param3, param4 ) ); server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), category, param1, param2, param3, param4 ) );
} }
void Util::Packet::sendActorControl( const std::set< uint64_t >& characterIds, Entity::Player& player, uint16_t category, uint32_t param1, void Util::Packet::sendActorControl( const std::set< uint64_t >& characterIds, uint32_t srcId, uint16_t category, uint32_t param1,
uint32_t param2, uint32_t param3, uint32_t param4 ) uint32_t param2, uint32_t param3, uint32_t param4 )
{ {
server().queueForPlayers( characterIds, makeActorControl( player.getId(), category, param1, param2, param3, param4 ) ); server().queueForPlayers( characterIds, makeActorControl( srcId, category, param1, param2, param3, param4 ) );
} }
void Util::Packet::sendActorControlTarget( Entity::Player& player, uint16_t category, uint32_t param1, uint32_t param2, uint32_t param3, void Util::Packet::sendActorControlTarget( Entity::Player& player, uint16_t category, uint32_t param1, uint32_t param2, uint32_t param3,
@ -159,10 +159,10 @@ void Util::Packet::sendActorControlTarget( Entity::Player& player, uint16_t cate
server().queueForPlayer( player.getCharacterId(), makeActorControlTarget( player.getId(), category, param1, param2, param3, param4, param5, param6 ) ); server().queueForPlayer( player.getCharacterId(), makeActorControlTarget( player.getId(), category, param1, param2, param3, param4, param5, param6 ) );
} }
void Util::Packet::sendActorControlTarget( const std::set< uint64_t >& characterIds, Entity::Player& player, uint16_t category, uint32_t param1, void Util::Packet::sendActorControlTarget( const std::set< uint64_t >& characterIds, uint32_t srcId, uint16_t category, uint32_t param1,
uint32_t param2, uint32_t param3, uint32_t param4, uint32_t param5, uint32_t param6 ) uint32_t param2, uint32_t param3, uint32_t param4, uint32_t param5, uint32_t param6 )
{ {
server().queueForPlayers( characterIds, makeActorControlTarget( player.getId(), category, param1, param2, param3, param4, param5, param6 ) ); server().queueForPlayers( characterIds, makeActorControlTarget( srcId, category, param1, param2, param3, param4, param5, param6 ) );
} }
void Util::Packet::sendTitleList( Entity::Player& player ) void Util::Packet::sendTitleList( Entity::Player& player )
@ -243,13 +243,13 @@ void Util::Packet::sendMount( Entity::Player& player )
auto inRangePlayerIds = player.getInRangePlayerIds( true ); auto inRangePlayerIds = player.getInRangePlayerIds( true );
if( mountId != 0 ) if( mountId != 0 )
{ {
Network::Util::Packet::sendActorControl( inRangePlayerIds, player, SetStatus, static_cast< uint8_t >( Common::ActorStatus::Mounted ) ); Network::Util::Packet::sendActorControl( inRangePlayerIds, player.getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Mounted ) );
Network::Util::Packet::sendActorControlSelf( inRangePlayerIds, player, 0x39e, 12 ); Network::Util::Packet::sendActorControlSelf( inRangePlayerIds, player.getId(), 0x39e, 12 );
} }
else else
{ {
Network::Util::Packet::sendActorControl( inRangePlayerIds, player, SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) ); Network::Util::Packet::sendActorControl( inRangePlayerIds, player.getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) );
Network::Util::Packet::sendActorControlSelf( inRangePlayerIds, player, Dismount, 1 ); Network::Util::Packet::sendActorControlSelf( inRangePlayerIds, player.getId(), Dismount, 1 );
} }
auto mountPacket = makeZonePacket< FFXIVIpcMount >( player.getId() ); auto mountPacket = makeZonePacket< FFXIVIpcMount >( player.getId() );
mountPacket->data().id = mountId; mountPacket->data().id = mountId;

View file

@ -10,7 +10,7 @@ namespace Sapphire::Network::Util::Packet
void sendConfigFlags( Entity::Player& player ); void sendConfigFlags( Entity::Player& player );
void sendOnlineStatus( Entity::Player& player ); void sendOnlineStatus( Entity::Player& player );
void sendBaseParams( Entity::Player& player ); void sendBaseParams( Entity::Player& player );
void sendHudParam( Entity::Player& player ); void sendHudParam( Entity::Chara& player );
void sendStatusUpdate( Entity::Player& player ); void sendStatusUpdate( Entity::Player& player );
void sendHuntingLog( Entity::Player& player ); void sendHuntingLog( Entity::Player& player );
@ -55,17 +55,17 @@ namespace Sapphire::Network::Util::Packet
void sendActorControlSelf( Entity::Player& player, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0, uint32_t param3 = 0, void sendActorControlSelf( Entity::Player& player, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0, uint32_t param3 = 0,
uint32_t param4 = 0, uint32_t param5 = 0 ); uint32_t param4 = 0, uint32_t param5 = 0 );
void sendActorControlSelf( const std::set< uint64_t >& characterIds, Entity::Player& player, uint16_t category, uint32_t param1 = 0, void sendActorControlSelf( const std::set< uint64_t >& characterIds, uint32_t srcId, uint16_t category, uint32_t param1 = 0,
uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, uint32_t param5 = 0 ); uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, uint32_t param5 = 0 );
void sendActorControl( Entity::Player& player, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0 ); void sendActorControl( Entity::Player& player, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0 );
void sendActorControl( const std::set< uint64_t >& characterIds, Entity::Player& player, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0, void sendActorControl( const std::set< uint64_t >& characterIds, uint32_t srcId, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0,
uint32_t param3 = 0, uint32_t param4 = 0 ); uint32_t param3 = 0, uint32_t param4 = 0 );
void sendActorControlTarget( Entity::Player& player, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0, uint32_t param3 = 0, void sendActorControlTarget( Entity::Player& player, uint16_t category, uint32_t param1 = 0, uint32_t param2 = 0, uint32_t param3 = 0,
uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0 ); uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0 );
void sendActorControlTarget( const std::set< uint64_t >& characterIds, Entity::Player& player, uint16_t category, uint32_t param1 = 0, void sendActorControlTarget( const std::set< uint64_t >& characterIds, uint32_t srcId, uint16_t category, uint32_t param1 = 0,
uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0 ); uint32_t param2 = 0, uint32_t param3 = 0, uint32_t param4 = 0, uint32_t param5 = 0, uint32_t param6 = 0 );
} }