mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-27 22:57:45 +00:00
Changing various packet sending functions to clean up the project.
This commit is contained in:
parent
fbbd599969
commit
9b46b89c65
37 changed files with 326 additions and 393 deletions
|
@ -159,7 +159,7 @@ private:
|
|||
quest.setUI8CH( 1 ); // receive key item
|
||||
|
||||
// teleport to real gridania
|
||||
player.forceZoneing( TERRITORYTYPE0 );
|
||||
warpMgr().requestMoveTerritory( player, Common::WarpType::WARP_TYPE_NORMAL, TERRITORYTYPE0 );
|
||||
}
|
||||
|
||||
void Scene00051( World::Quest& quest, Entity::Player& player )
|
||||
|
|
|
@ -229,7 +229,7 @@ private:
|
|||
{
|
||||
quest.setSeq( Seq1 );
|
||||
quest.setUI8CH( 1 );
|
||||
player.forceZoneing( 132 );
|
||||
warpMgr().requestMoveTerritory( player, Common::WarpType::WARP_TYPE_NORMAL, 132 );
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -230,7 +230,7 @@ private:
|
|||
quest.setSeq( Seq1 );
|
||||
quest.setUI8CH( 1 ); // receive key item
|
||||
// event is done, need to teleport to real zone.
|
||||
player.forceZoneing( Territorytype0 );
|
||||
warpMgr().requestMoveTerritory( player, Common::WarpType::WARP_TYPE_NORMAL, Territorytype0 );
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
|
|
@ -229,7 +229,7 @@ private:
|
|||
quest.setUI8CH( 1 ); // Receive key item
|
||||
|
||||
// Teleport to real ul'dah
|
||||
player.forceZoneing( 130 );
|
||||
warpMgr().requestMoveTerritory( player, Common::WarpType::WARP_TYPE_NORMAL, 130 );
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -244,7 +244,7 @@ private:
|
|||
pQuest->setUI8CH( 1 ); // receive key item
|
||||
|
||||
// teleport to real ul'dah
|
||||
player.forceZoneing( 130 );
|
||||
warpMgr().requestMoveTerritory( player, Common::WarpType::WARP_TYPE_NORMAL, 130 );
|
||||
} );
|
||||
}
|
||||
};
|
||||
|
|
|
@ -233,7 +233,7 @@ private:
|
|||
quest.setUI8CH( 1 );// receive key item
|
||||
|
||||
// teleport to real Uldah
|
||||
player.forceZoneing( Territorytype0 );
|
||||
warpMgr().requestMoveTerritory( player, Common::WarpType::WARP_TYPE_NORMAL, Territorytype0 );
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -218,7 +218,7 @@ private:
|
|||
{
|
||||
quest.setSeq( Seq2 );
|
||||
player.changePosition( 10, 21, 13, -2 );
|
||||
player.forceZoneing( Territorytype0 ); //Teleport to real Limsa
|
||||
warpMgr().requestMoveTerritory( player, Common::WarpType::WARP_TYPE_NORMAL, Territorytype0 );
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "Territory/Territory.h"
|
||||
|
||||
#include "Manager/PlayerMgr.h"
|
||||
#include "Manager/MgrUtil.h"
|
||||
|
||||
#include "Session.h"
|
||||
#include "Network/GameConnection.h"
|
||||
|
@ -37,6 +38,7 @@ using namespace Sapphire::Network::Packets::WorldPackets;
|
|||
using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
using namespace Sapphire::Network::ActorControl;
|
||||
using namespace Sapphire::World;
|
||||
using namespace Sapphire::World::Manager;
|
||||
|
||||
|
||||
Action::Action::Action() = default;
|
||||
|
@ -295,7 +297,6 @@ bool Action::Action::update()
|
|||
void Action::Action::start()
|
||||
{
|
||||
assert( m_pSource );
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
m_startTime = Common::Util::getTimeMs();
|
||||
|
||||
auto player = m_pSource->getAsPlayer();
|
||||
|
@ -316,21 +317,21 @@ void Action::Action::start()
|
|||
data.TargetPos[ 2 ] = Common::Util::floatToUInt16( m_pSource->getPos().z );
|
||||
data.Dir = m_pSource->getRot();
|
||||
|
||||
m_pSource->sendToInRangeSet( castPacket, true );
|
||||
server().queueForPlayers( m_pSource->getInRangePlayerIds( true ), castPacket );
|
||||
|
||||
if( player )
|
||||
{
|
||||
Service< World::Manager::PlayerMgr >::ref().onSendStateFlags( *player, PlayerStateFlag::Casting );
|
||||
player->setStateFlag( PlayerStateFlag::Casting );
|
||||
Service< World::Manager::PlayerMgr >::ref().onSendStateFlags( *player, true );
|
||||
}
|
||||
}
|
||||
|
||||
// todo: m_recastTimeMs needs to be adjusted for player sks/sps
|
||||
auto actionStartPkt = makeActorControlSelf( m_pSource->getId(), ActorControlType::ActionStart, m_cooldownGroup, getId(),
|
||||
m_recastTimeMs / 10 );
|
||||
auto actionStartPkt = makeActorControlSelf( m_pSource->getId(), ActorControlType::ActionStart, m_cooldownGroup, getId(), m_recastTimeMs / 10 );
|
||||
|
||||
player->setRecastGroup( m_cooldownGroup, static_cast< float >( m_castTimeMs ) / 1000.f );
|
||||
|
||||
server.queueForPlayer( player->getCharacterId(), actionStartPkt );
|
||||
server().queueForPlayer( player->getCharacterId(), actionStartPkt );
|
||||
|
||||
onStart();
|
||||
|
||||
|
@ -389,7 +390,7 @@ void Action::Action::interrupt()
|
|||
auto control = makeActorControl( m_pSource->getId(), ActorControlType::CastInterrupt,
|
||||
0x219, 1, m_id, interruptEffect );
|
||||
|
||||
m_pSource->sendToInRangeSet( control, true );
|
||||
server().queueForPlayers( m_pSource->getInRangePlayerIds( true ), control );
|
||||
}
|
||||
|
||||
onInterrupt();
|
||||
|
@ -419,11 +420,6 @@ void Action::Action::execute()
|
|||
|
||||
if( hasCastTime() )
|
||||
{
|
||||
// todo: what's this?
|
||||
/*auto control = ActorControlSelfPacket( m_pTarget->getId(), ActorControlType::Unk7,
|
||||
0x219, m_id, m_id, m_id, m_id );
|
||||
m_pSource->sendToInRangeSet( control, true );*/
|
||||
|
||||
if( auto pPlayer = m_pSource->getAsPlayer(); pPlayer )
|
||||
{
|
||||
pPlayer->setLastActionTick( 0 );
|
||||
|
|
|
@ -7,9 +7,11 @@
|
|||
#include <Network/PacketWrappers/EffectPacket.h>
|
||||
|
||||
#include "Manager/PlayerMgr.h"
|
||||
#include "Manager/MgrUtil.h"
|
||||
|
||||
using namespace Sapphire;
|
||||
using namespace Sapphire::World::Action;
|
||||
using namespace Sapphire::World::Manager;
|
||||
using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
|
||||
ItemAction::ItemAction( Sapphire::Entity::CharaPtr source, uint32_t itemId,
|
||||
|
@ -84,8 +86,7 @@ void ItemAction::handleVFXItem()
|
|||
effectPacket->setAnimationId( Common::ItemActionType::ItemActionVFX );
|
||||
effectPacket->setDisplayType( Common::ActionEffectDisplayType::ShowItemName );
|
||||
effectPacket->addTargetEffect( effect, static_cast< uint64_t >( getSourceChara()->getId() ) );
|
||||
|
||||
m_pSource->sendToInRangeSet( effectPacket, true );
|
||||
server().queueForPlayers( m_pSource->getInRangePlayerIds( true ), effectPacket );
|
||||
}
|
||||
|
||||
void ItemAction::handleCompanionItem()
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
#include "MountAction.h"
|
||||
|
||||
#include <Exd/ExdData.h>
|
||||
|
||||
#include <Actor/Player.h>
|
||||
|
||||
#include <Manager/PlayerMgr.h>
|
||||
#include <Manager/MgrUtil.h>
|
||||
|
||||
#include <Network/GameConnection.h>
|
||||
#include <Network/CommonActorControl.h>
|
||||
|
@ -21,6 +19,7 @@ using namespace Sapphire::Network::Packets;
|
|||
using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
using namespace Sapphire::Network::ActorControl;
|
||||
using namespace Sapphire::World::Action;
|
||||
using namespace Sapphire::World::Manager;
|
||||
|
||||
MountAction::MountAction( Sapphire::Entity::CharaPtr source, uint16_t mountId, uint16_t sequence,
|
||||
std::shared_ptr< Excel::ExcelStruct< Excel::Action > > actionData ) :
|
||||
|
@ -58,15 +57,12 @@ void MountAction::start()
|
|||
data.TargetPos[ 1 ] = Common::Util::floatToUInt16( pos.y );
|
||||
data.TargetPos[ 2 ] = Common::Util::floatToUInt16( pos.z );
|
||||
data.Dir = m_pSource->getRot();
|
||||
|
||||
m_pSource->sendToInRangeSet( castPacket, true );
|
||||
server().queueForPlayers( m_pSource->getInRangePlayerIds( true ), castPacket );
|
||||
|
||||
Common::Service< World::Manager::PlayerMgr >::ref().onSetStateFlag( *player, Common::PlayerStateFlag::Casting );
|
||||
|
||||
auto actionStartPkt = makeActorControlSelf( m_pSource->getId(), ActorControlType::ActionStart, 1, getId(), m_recastTimeMs / 10 );
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( m_pSource->getAsPlayer()->getCharacterId(), actionStartPkt );
|
||||
server().queueForPlayer( m_pSource->getAsPlayer()->getCharacterId(), actionStartPkt );
|
||||
}
|
||||
|
||||
void MountAction::execute()
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
#include <Manager/RNGMgr.h>
|
||||
#include <Manager/PlayerMgr.h>
|
||||
#include <Manager/TaskMgr.h>
|
||||
#include <Manager/MgrUtil.h>
|
||||
#include <Script/ScriptMgr.h>
|
||||
#include <Task/RemoveBNpcTask.h>
|
||||
#include <Task/FadeBNpcTask.h>
|
||||
|
@ -44,6 +45,7 @@ using namespace Sapphire::Common;
|
|||
using namespace Sapphire::Network::Packets;
|
||||
using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
using namespace Sapphire::Network::ActorControl;
|
||||
using namespace Sapphire::World::Manager;
|
||||
|
||||
Sapphire::Entity::BNpc::BNpc() :
|
||||
Npc( ObjKind::BattleNpc )
|
||||
|
@ -430,7 +432,7 @@ void Sapphire::Entity::BNpc::sendPositionUpdate()
|
|||
animationType = 0;
|
||||
|
||||
auto movePacket = std::make_shared< MoveActorPacket >( *getAsChara(), 0x3A, animationType, 0, 0x5A / 4 );
|
||||
sendToInRangeSet( movePacket );
|
||||
server().queueForPlayers( getInRangePlayerIds(), movePacket );
|
||||
}
|
||||
|
||||
void Sapphire::Entity::BNpc::hateListClear()
|
||||
|
@ -595,7 +597,7 @@ void Sapphire::Entity::BNpc::aggro( const Sapphire::Entity::CharaPtr& pChara )
|
|||
setStance( Stance::Active );
|
||||
m_state = BNpcState::Combat;
|
||||
|
||||
sendToInRangeSet( makeActorControl( getId(), ActorControlType::SetBattle, 1, 0, 0 ) );
|
||||
server().queueForPlayers( getInRangePlayerIds(), makeActorControl( getId(), ActorControlType::SetBattle, 1, 0, 0 ) );
|
||||
|
||||
changeTarget( pChara->getId() );
|
||||
|
||||
|
@ -615,8 +617,8 @@ void Sapphire::Entity::BNpc::deaggro( const Sapphire::Entity::CharaPtr& pChara )
|
|||
if( pChara->isPlayer() )
|
||||
{
|
||||
PlayerPtr tmpPlayer = pChara->getAsPlayer();
|
||||
sendToInRangeSet( makeActorControl( getId(), ActorControlType::ToggleWeapon, 0, 1, 1 ) );
|
||||
sendToInRangeSet( makeActorControl( getId(), ActorControlType::SetBattle, 0, 0, 0 ) );
|
||||
server().queueForPlayers( getInRangePlayerIds(), makeActorControl( getId(), ActorControlType::ToggleWeapon, 0, 1, 1 ) );
|
||||
server().queueForPlayers( getInRangePlayerIds(), makeActorControl( getId(), ActorControlType::SetBattle, 0, 0, 0 ) );
|
||||
tmpPlayer->onMobDeaggro( *this );
|
||||
|
||||
if( getTriggerOwnerId() == pChara->getId() )
|
||||
|
@ -939,13 +941,12 @@ void Sapphire::Entity::BNpc::setOwner( const Sapphire::Entity::CharaPtr& m_pChar
|
|||
auto setOwnerPacket = makeZonePacket< FFXIVIpcFirstAttack >( getId() );
|
||||
setOwnerPacket->data().Type = 0x01;
|
||||
setOwnerPacket->data().Id = targetId;
|
||||
sendToInRangeSet( setOwnerPacket );
|
||||
server().queueForPlayers( getInRangePlayerIds(), setOwnerPacket );
|
||||
|
||||
if( m_pChara != nullptr && m_pChara->isPlayer() )
|
||||
{
|
||||
auto letter = makeActorControl( getId(), ActorControlType::SetHateLetter, 1, getId(), 0 );
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( m_pChara->getAsPlayer()->getCharacterId(), letter );
|
||||
server().queueForPlayer( m_pChara->getAsPlayer()->getCharacterId(), letter );
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -999,14 +1000,12 @@ void Sapphire::Entity::BNpc::autoAttack( CharaPtr pTarget )
|
|||
auto resultId = pZone->getNextEffectResultId();
|
||||
effectPacket->setSequence( resultId );
|
||||
effectPacket->addTargetEffect( effectEntry );
|
||||
|
||||
sendToInRangeSet( effectPacket );
|
||||
server().queueForPlayers( getInRangePlayerIds(), effectPacket );
|
||||
|
||||
pTarget->takeDamage( static_cast< uint16_t >( damage.first ) );
|
||||
|
||||
auto& taskMgr = Common::Service< World::Manager::TaskMgr >::ref();
|
||||
taskMgr.queueTask( Sapphire::World::makeActionIntegrityTask( resultId, pTarget, 500 ) );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -148,8 +148,7 @@ void Sapphire::Entity::EventObject::spawn( Sapphire::Entity::PlayerPtr pTarget )
|
|||
eobjStatePacket->data().Args2 = 0; // initial animation state
|
||||
eobjStatePacket->data().Args3 = getHousingLink();
|
||||
|
||||
auto pSession = server.getSession( pTarget->getCharacterId() );
|
||||
pSession->getZoneConnection()->queueOutPacket( eobjStatePacket );
|
||||
server.queueForPlayer( pTarget->getCharacterId(), eobjStatePacket );
|
||||
}
|
||||
|
||||
|
||||
|
@ -178,8 +177,9 @@ uint8_t Sapphire::Entity::EventObject::getPermissionInvisibility() const
|
|||
void Sapphire::Entity::EventObject::setPermissionInvisibility( uint8_t permissionInvisibility )
|
||||
{
|
||||
m_permissionInvisibility = permissionInvisibility;
|
||||
|
||||
sendToInRangeSet( makeActorControl( 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
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "Manager/WarpMgr.h"
|
||||
#include "Manager/FreeCompanyMgr.h"
|
||||
#include "Manager/MapMgr.h"
|
||||
#include "Manager/MgrUtil.h"
|
||||
|
||||
#include "Territory/Territory.h"
|
||||
#include "Territory/InstanceContent.h"
|
||||
|
@ -406,16 +407,6 @@ void Player::sendStats()
|
|||
Service< World::Manager::PlayerMgr >::ref().onSendStats( *this );
|
||||
}
|
||||
|
||||
void Player::forceZoneing( uint32_t zoneId )
|
||||
{
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto& warpMgr = Common::Service< WarpMgr >::ref();
|
||||
auto pTeri = teriMgr.getZoneByTerritoryTypeId( zoneId );
|
||||
if( !pTeri )
|
||||
return;
|
||||
warpMgr.requestMoveTerritory( *this, WarpType::WARP_TYPE_NORMAL, pTeri->getGuId(), getPos(), getRot() );
|
||||
}
|
||||
|
||||
bool Player::exitInstance()
|
||||
{
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
|
@ -482,7 +473,7 @@ void Player::registerAetheryte( uint8_t aetheryteId )
|
|||
Util::valueToFlagByteIndexValue( aetheryteId, value, index );
|
||||
|
||||
m_aetheryte[ index ] |= value;
|
||||
queuePacket( makeActorControlSelf( getId(), LearnTeleport, aetheryteId, 1 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), LearnTeleport, aetheryteId, 1 ) );
|
||||
}
|
||||
|
||||
bool Player::isAetheryteRegistered( uint8_t aetheryteId ) const
|
||||
|
@ -597,7 +588,7 @@ void Player::setRewardFlag( Common::UnlockEntry unlockId )
|
|||
|
||||
m_unlocks[ index ] |= value;
|
||||
|
||||
queuePacket( makeActorControlSelf( getId(), SetRewardFlag, unlock, 1 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), SetRewardFlag, unlock, 1 ) );
|
||||
}
|
||||
|
||||
void Player::learnSong( uint8_t songId, uint32_t itemId )
|
||||
|
@ -845,7 +836,7 @@ void Player::spawn( Entity::PlayerPtr pTarget )
|
|||
{
|
||||
Logger::debug( "Spawning {0} for {1}", getName(), pTarget->getName() );
|
||||
auto spawnPacket = std::make_shared< PlayerSpawnPacket >( *this, *pTarget );
|
||||
pTarget->queuePacket( spawnPacket );
|
||||
server().queueForPlayer( pTarget->getCharacterId(), spawnPacket );
|
||||
}
|
||||
|
||||
// despawn
|
||||
|
@ -855,8 +846,7 @@ void Player::despawn( Entity::PlayerPtr pTarget )
|
|||
Logger::debug( "Despawning {0} for {1}", getName(), pTarget->getName() );
|
||||
|
||||
pPlayer->freePlayerSpawnId( getId() );
|
||||
|
||||
pPlayer->queuePacket( makeActorControlSelf( getId(), WarpStart, 0x04, getId(), 0x01 ) );
|
||||
server().queueForPlayer( pTarget->getCharacterId(), makeActorControlSelf( getId(), WarpStart, 0x04, getId(), 0x01 ) );
|
||||
}
|
||||
|
||||
GameObjectPtr Player::lookupTargetById( uint64_t targetId )
|
||||
|
@ -961,7 +951,7 @@ void Player::freePlayerSpawnId( uint32_t actorId )
|
|||
auto freeActorSpawnPacket = makeZonePacket< FFXIVIpcActorFreeSpawn >( getId() );
|
||||
freeActorSpawnPacket->data().actorId = actorId;
|
||||
freeActorSpawnPacket->data().spawnId = spawnId;
|
||||
queuePacket( freeActorSpawnPacket );
|
||||
server().queueForPlayer( getCharacterId(), freeActorSpawnPacket );
|
||||
}
|
||||
|
||||
Player::AetheryteList& Player::getAetheryteArray()
|
||||
|
@ -973,8 +963,7 @@ Player::AetheryteList& Player::getAetheryteArray()
|
|||
void Player::setHomepoint( uint8_t aetheryteId )
|
||||
{
|
||||
m_homePoint = aetheryteId;
|
||||
|
||||
queuePacket( makeActorControlSelf( getId(), SetHomepoint, aetheryteId ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), SetHomepoint, aetheryteId ) );
|
||||
}
|
||||
|
||||
/*! get homepoint */
|
||||
|
@ -1023,7 +1012,7 @@ void Player::unlockMount( uint32_t mountId )
|
|||
|
||||
m_mountGuide[ mount->data().MountOrder / 8 ] |= ( 1 << ( mount->data().MountOrder % 8 ) );
|
||||
|
||||
queuePacket( makeActorControlSelf( getId(), Network::ActorControl::SetMountBitmask, mount->data().MountOrder, 1 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), Network::ActorControl::SetMountBitmask, mount->data().MountOrder, 1 ) );
|
||||
}
|
||||
|
||||
void Player::unlockCompanion( uint32_t companionId )
|
||||
|
@ -1040,7 +1029,7 @@ void Player::unlockCompanion( uint32_t companionId )
|
|||
|
||||
m_minionGuide[ index ] |= value;
|
||||
|
||||
queuePacket( makeActorControlSelf( getId(), Network::ActorControl::LearnCompanion, companionId, 1 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), Network::ActorControl::LearnCompanion, companionId, 1 ) );
|
||||
}
|
||||
|
||||
Player::MinionList& Player::getMinionGuideBitmask()
|
||||
|
@ -1073,13 +1062,6 @@ const std::array< uint8_t, 3 >& Player::getGcRankArray() const
|
|||
return m_gcRank;
|
||||
}
|
||||
|
||||
void Player::queuePacket( Network::Packets::FFXIVPacketBasePtr pPacket )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
server.queueForPlayer( getCharacterId(), std::move( pPacket ) );
|
||||
}
|
||||
|
||||
bool Player::isLoadingComplete() const
|
||||
{
|
||||
return m_bLoadingComplete;
|
||||
|
@ -1183,14 +1165,14 @@ const std::map< uint32_t, uint8_t >& Player::getActorIdToHateSlotMap()
|
|||
void Player::onMobAggro( const BNpc& bnpc )
|
||||
{
|
||||
hateListAdd( bnpc );
|
||||
queuePacket( makeActorControl( getId(), SetBattle, 1, 0, 0 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControl( getId(), SetBattle, 1, 0, 0 ) );
|
||||
}
|
||||
|
||||
void Player::onMobDeaggro( const BNpc& bnpc )
|
||||
{
|
||||
hateListRemove( bnpc );
|
||||
if( m_actorIdTohateSlotMap.empty() )
|
||||
queuePacket( makeActorControl( getId(), SetBattle, 0, 0, 0 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControl( getId(), SetBattle, 0, 0, 0 ) );
|
||||
}
|
||||
|
||||
bool Player::isLogin() const
|
||||
|
@ -1232,8 +1214,7 @@ void Player::setTitle( uint16_t titleId )
|
|||
return;
|
||||
|
||||
m_activeTitle = titleId;
|
||||
|
||||
sendToInRangeSet( makeActorControl( getId(), SetTitle, titleId ), true );
|
||||
server().queueForPlayers( getInRangePlayerIds( true ), makeActorControl( getId(), SetTitle, titleId ) );
|
||||
}
|
||||
|
||||
const Player::AchievementData& Player::getAchievementData() const
|
||||
|
@ -1250,7 +1231,7 @@ void Player::setMaxGearSets( uint8_t amount )
|
|||
{
|
||||
m_equippedMannequin = amount;
|
||||
|
||||
queuePacket( makeActorControlSelf( getId(), SetMaxGearSets, m_equippedMannequin ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), SetMaxGearSets, m_equippedMannequin ) );
|
||||
}
|
||||
|
||||
void Player::addGearSet()
|
||||
|
@ -1338,23 +1319,14 @@ void Player::autoAttack( CharaPtr pTarget )
|
|||
entry.Arg1 = 7;
|
||||
|
||||
if( getClass() == ClassJob::Machinist || getClass() == ClassJob::Bard || getClass() == ClassJob::Archer )
|
||||
{
|
||||
// effectPacket->setAnimationId( 8 );
|
||||
//entry.Arg2 = 0x72;
|
||||
}
|
||||
else
|
||||
{
|
||||
//effectPacket->setAnimationId( 7 );
|
||||
//entry.Arg2 = 0x73;
|
||||
}
|
||||
effectPacket->setActionId( 8 );
|
||||
|
||||
auto resultId = pZone->getNextEffectResultId();
|
||||
effectPacket->setResultId( resultId );
|
||||
|
||||
effectPacket->setRotation( Util::floatToUInt16Rot( getRot() ) );
|
||||
effectPacket->addTargetEffect( entry );
|
||||
|
||||
sendToInRangeSet( effectPacket, true );
|
||||
server().queueForPlayers( getInRangePlayerIds( true ), effectPacket );
|
||||
|
||||
pTarget->takeDamage( static_cast< uint32_t >( damage.first ) );
|
||||
|
||||
|
@ -1418,7 +1390,7 @@ void Player::setEorzeaTimeOffset( uint64_t timestamp )
|
|||
packet->data().timestamp = timestamp;
|
||||
|
||||
// Send to single player
|
||||
queuePacket( packet );
|
||||
server().queueForPlayer( getCharacterId(), packet );
|
||||
}
|
||||
|
||||
uint32_t Player::getPrevTerritoryTypeId() const
|
||||
|
@ -1441,7 +1413,7 @@ void Player::sendTitleList()
|
|||
auto titleListPacket = makeZonePacket< FFXIVIpcTitleList >( getId() );
|
||||
memcpy( titleListPacket->data().TitleFlagsArray, getTitleList().data(), sizeof( titleListPacket->data().TitleFlagsArray ) );
|
||||
|
||||
queuePacket( titleListPacket );
|
||||
server().queueForPlayer( getCharacterId(), titleListPacket );
|
||||
}
|
||||
|
||||
void Player::teleportQuery( uint16_t aetheryteId )
|
||||
|
@ -1465,7 +1437,7 @@ void Player::teleportQuery( uint16_t aetheryteId )
|
|||
|
||||
bool insufficientGil = getCurrency( Common::CurrencyType::Gil ) < cost;
|
||||
// TODO: figure out what param1 really does
|
||||
queuePacket( makeActorControlSelf( getId(), OnExecuteTelepo, insufficientGil ? 2 : 0, aetheryteId ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), OnExecuteTelepo, insufficientGil ? 2 : 0, aetheryteId ) );
|
||||
|
||||
if( !insufficientGil )
|
||||
{
|
||||
|
@ -1542,7 +1514,7 @@ void Player::dyeItemFromDyeingInfo()
|
|||
writeItem( itemToDye );
|
||||
|
||||
auto dyePkt = makeActorControlSelf( getId(), DyeMsg, itemToDye->getId(), shouldDye, invalidateGearSet );
|
||||
queuePacket( dyePkt );
|
||||
server().queueForPlayer( getCharacterId(), dyePkt );
|
||||
}
|
||||
|
||||
void Player::setGlamouringInfo( uint32_t itemToGlamourContainer, uint32_t itemToGlamourSlot, uint32_t glamourBagContainer, uint32_t glamourBagSlot, bool shouldGlamour )
|
||||
|
@ -1598,12 +1570,12 @@ void Player::glamourItemFromGlamouringInfo()
|
|||
if( shouldGlamour )
|
||||
{
|
||||
auto castGlamPkt = makeActorControlSelf( getId(), GlamourCastMsg, itemToGlamour->getId(), glamourToUse->getId(), invalidateGearSet );
|
||||
queuePacket( castGlamPkt );
|
||||
server().queueForPlayer( getCharacterId(), castGlamPkt );
|
||||
}
|
||||
else
|
||||
{
|
||||
auto dispelGlamPkt = makeActorControlSelf( getId(), GlamourRemoveMsg, itemToGlamour->getId(), invalidateGearSet );
|
||||
queuePacket( dispelGlamPkt );
|
||||
server().queueForPlayer( getCharacterId(), dispelGlamPkt );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1622,7 +1594,7 @@ void Player::freeObjSpawnIndexForActorId( uint32_t actorId )
|
|||
|
||||
auto freeObjectSpawnPacket = makeZonePacket< FFXIVIpcDeleteObject >( getId() );
|
||||
freeObjectSpawnPacket->data().Index = spawnId;
|
||||
queuePacket( freeObjectSpawnPacket );
|
||||
server().queueForPlayer( getCharacterId(), freeObjectSpawnPacket );
|
||||
}
|
||||
|
||||
bool Player::isObjSpawnIndexValid( uint8_t index )
|
||||
|
@ -1695,7 +1667,7 @@ void Player::sendHuntingLog()
|
|||
memcpy( huntPacket->data().killCount, entry.entries, sizeof( entry.entries ) );
|
||||
huntPacket->data().completeFlags = completionFlag;
|
||||
++count;
|
||||
queuePacket( huntPacket );
|
||||
server().queueForPlayer( getCharacterId(), huntPacket );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1735,7 +1707,7 @@ void Player::updateHuntingLog( uint16_t id )
|
|||
if( note1->data().Monster == id && logEntry.entries[ i - 1 ][ x ] < note->data().NeededKills[ x ] )
|
||||
{
|
||||
logEntry.entries[ i - 1 ][ x ]++;
|
||||
queuePacket( makeActorControlSelf( getId(), HuntingLogEntryUpdate, monsterNoteId, x, logEntry.entries[ i - 1 ][ x ] ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), HuntingLogEntryUpdate, monsterNoteId, x, logEntry.entries[ i - 1 ][ x ] ) );
|
||||
logChanged = true;
|
||||
sectionChanged = true;
|
||||
}
|
||||
|
@ -1744,7 +1716,7 @@ void Player::updateHuntingLog( uint16_t id )
|
|||
}
|
||||
if( logChanged && sectionComplete && sectionChanged )
|
||||
{
|
||||
queuePacket( makeActorControlSelf( getId(), HuntingLogSectionFinish, monsterNoteId, i, 0 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), HuntingLogSectionFinish, monsterNoteId, i, 0 ) );
|
||||
gainExp( note->data().RewardExp );
|
||||
}
|
||||
if( !sectionComplete )
|
||||
|
@ -1754,13 +1726,13 @@ void Player::updateHuntingLog( uint16_t id )
|
|||
}
|
||||
if( logChanged && allSectionsComplete )
|
||||
{
|
||||
queuePacket( makeActorControlSelf( getId(), HuntingLogRankFinish, 4, 0, 0 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), HuntingLogRankFinish, 4, 0, 0 ) );
|
||||
gainExp( rankRewards[ logEntry.rank ] );
|
||||
if( logEntry.rank < 4 )
|
||||
{
|
||||
logEntry.rank++;
|
||||
memset( logEntry.entries, 0, 40 );
|
||||
queuePacket( makeActorControlSelf( getId(), HuntingLogRankUnlock, currentClassId, logEntry.rank + 1, 0 ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), HuntingLogRankUnlock, currentClassId, logEntry.rank + 1, 0 ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1816,7 +1788,7 @@ void Player::sendRecastGroups()
|
|||
auto recastGroupPaket = makeZonePacket< FFXIVIpcRecastGroup >( getId() );
|
||||
memcpy( &recastGroupPaket->data().Recast, &m_recast, sizeof( m_recast ) );
|
||||
memcpy( &recastGroupPaket->data().RecastMax, &m_recastMax, sizeof( m_recastMax ) );
|
||||
queuePacket( recastGroupPaket );
|
||||
server().queueForPlayer( getCharacterId(), recastGroupPaket );
|
||||
}
|
||||
|
||||
void Player::resetRecastGroups()
|
||||
|
@ -1931,7 +1903,7 @@ void Player::setFalling( bool state, const Common::FFXIVARR_POSITION3& pos, bool
|
|||
takeDamage( damage );
|
||||
}
|
||||
|
||||
sendToInRangeSet( makeActorControl( getId(), SetFallDamage, damage ), true );
|
||||
server().queueForPlayers( getInRangePlayerIds( true ), makeActorControl( getId(), SetFallDamage, damage ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -310,8 +310,6 @@ namespace Sapphire::Entity
|
|||
|
||||
void updatePrevTerritory();
|
||||
|
||||
void forceZoneing( uint32_t zoneId );
|
||||
|
||||
/*! change position, sends update too */
|
||||
void changePosition( float x, float y, float z, float o );
|
||||
|
||||
|
@ -838,9 +836,6 @@ namespace Sapphire::Entity
|
|||
const Common::CharaLandData& getCharaLandData( Common::LandFlagsSlot slot ) const;
|
||||
|
||||
private:
|
||||
/*! queue a packet for the player */
|
||||
void queuePacket( Network::Packets::FFXIVPacketBasePtr pPacket );
|
||||
|
||||
using InventoryMap = std::map< uint16_t, ItemContainerPtr >;
|
||||
|
||||
uint64_t m_lastDBWrite;
|
||||
|
|
|
@ -22,10 +22,12 @@
|
|||
#include "Manager/InventoryMgr.h"
|
||||
#include "Manager/ItemMgr.h"
|
||||
#include "Manager/PlayerMgr.h"
|
||||
#include "Manager/MgrUtil.h"
|
||||
|
||||
#include <Service.h>
|
||||
|
||||
using namespace Sapphire::Common;
|
||||
using namespace Sapphire::World::Manager;
|
||||
using namespace Sapphire::Network::Packets;
|
||||
using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
using namespace Sapphire::Network::ActorControl;
|
||||
|
@ -330,14 +332,14 @@ void Sapphire::Entity::Player::addCurrency( CurrencyType type, uint32_t amount )
|
|||
invUpdate->data().srcCatalogId = currItem->getId();
|
||||
invUpdate->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
|
||||
queuePacket( invUpdate );
|
||||
server().queueForPlayer( getCharacterId(), invUpdate );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
|
||||
queuePacket( invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
}
|
||||
|
||||
void Sapphire::Entity::Player::removeCurrency( Common::CurrencyType type, uint32_t amount )
|
||||
|
@ -364,13 +366,13 @@ void Sapphire::Entity::Player::removeCurrency( Common::CurrencyType type, uint32
|
|||
invUpdate->data().srcContainerIndex = static_cast< int16_t >( type ) - 1;
|
||||
invUpdate->data().srcCatalogId = currItem->getId();
|
||||
invUpdate->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invUpdate );
|
||||
server().queueForPlayer( getCharacterId(), invUpdate );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
}
|
||||
|
||||
|
||||
|
@ -403,15 +405,14 @@ void Sapphire::Entity::Player::addCrystal( Common::CrystalType type, uint32_t am
|
|||
invUpdate->data().srcEntity = getId();
|
||||
invUpdate->data().srcCatalogId = currItem->getId();
|
||||
invUpdate->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invUpdate );
|
||||
server().queueForPlayer( getCharacterId(), invUpdate );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
|
||||
queuePacket( makeActorControlSelf( getId(), ItemObtainIcon, static_cast< uint8_t >( type ) + 1, amount ) );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), ItemObtainIcon, static_cast< uint8_t >( type ) + 1, amount ) );
|
||||
}
|
||||
|
||||
void Sapphire::Entity::Player::removeCrystal( Common::CrystalType type, uint32_t amount )
|
||||
|
@ -439,13 +440,13 @@ void Sapphire::Entity::Player::removeCrystal( Common::CrystalType type, uint32_t
|
|||
invUpdate->data().srcEntity = getId();
|
||||
invUpdate->data().srcCatalogId = currItem->getId();
|
||||
invUpdate->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invUpdate );
|
||||
server().queueForPlayer( getCharacterId(), invUpdate );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
}
|
||||
|
||||
void Sapphire::Entity::Player::sendInventory()
|
||||
|
@ -681,18 +682,18 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_
|
|||
auto seq = getNextInventorySequence();
|
||||
|
||||
auto slotUpdate = std::make_shared< UpdateInventorySlotPacket >( getId(), slot, bag, *item, seq );
|
||||
queuePacket( slotUpdate );
|
||||
server().queueForPlayer( getCharacterId(), slotUpdate );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
|
||||
// return existing stack if we have no overflow - items fit into a preexisting stack
|
||||
if( quantity == 0 )
|
||||
{
|
||||
queuePacket( makeActorControlSelf( getId(), ItemObtainIcon, catalogId, originalQuantity ) );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), ItemObtainIcon, catalogId, originalQuantity ) );
|
||||
return item;
|
||||
}
|
||||
|
||||
|
@ -730,15 +731,14 @@ Sapphire::ItemPtr Sapphire::Entity::Player::addItem( uint32_t catalogId, uint32_
|
|||
invTransPacket->data().dstStack = item->getStackSize();
|
||||
invTransPacket->data().dstContainerIndex = freeBagSlot.second;
|
||||
invTransPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_CREATEITEM;
|
||||
queuePacket( invTransPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransPacket );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_CREATEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
|
||||
queuePacket( makeActorControlSelf( getId(), ItemObtainIcon, catalogId, originalQuantity ) );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), makeActorControlSelf( getId(), ItemObtainIcon, catalogId, originalQuantity ) );
|
||||
}
|
||||
|
||||
return item;
|
||||
|
@ -982,13 +982,13 @@ void Sapphire::Entity::Player::discardItem( uint16_t fromInventoryId, uint16_t f
|
|||
invTransPacket->data().srcStack = fromItem->getStackSize();
|
||||
invTransPacket->data().srcContainerIndex = fromSlotId;
|
||||
invTransPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_DELETEITEM;
|
||||
queuePacket( invTransPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransPacket );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = sequence;
|
||||
invTransFinPacket->data().operationId = sequence;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_DELETEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
}
|
||||
|
||||
uint16_t Sapphire::Entity::Player::calculateEquippedGearItemLevel()
|
||||
|
@ -1133,13 +1133,13 @@ Sapphire::ItemPtr Sapphire::Entity::Player::dropInventoryItem( Sapphire::Common:
|
|||
invTransPacket->data().dstStack = item->getStackSize();
|
||||
invTransPacket->data().dstContainerIndex = slotId;
|
||||
invTransPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_DELETEITEM;
|
||||
queuePacket( invTransPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransPacket );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_DELETEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
|
||||
return item;
|
||||
}
|
||||
|
@ -1193,14 +1193,13 @@ void Sapphire::Entity::Player::insertInventoryItem( Sapphire::Common::InventoryT
|
|||
auto seq = getNextInventorySequence();
|
||||
|
||||
auto slotUpdate = std::make_shared< UpdateInventorySlotPacket >( getId(), slot, type, *item, seq );
|
||||
queuePacket( slotUpdate );
|
||||
server().queueForPlayer( getCharacterId(), slotUpdate );
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( getId() );
|
||||
invTransFinPacket->data().contextId = seq;
|
||||
invTransFinPacket->data().operationId = seq;
|
||||
invTransFinPacket->data().operationType = Common::ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
queuePacket( invTransFinPacket );
|
||||
|
||||
server().queueForPlayer( getCharacterId(), invTransFinPacket );
|
||||
}
|
||||
|
||||
bool Sapphire::Entity::Player::findFirstItemWithId( uint32_t catalogId,
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
#pragma once
|
||||
|
||||
#include "ForwardsZone.h"
|
||||
|
||||
namespace Sapphire::World::Manager
|
||||
{
|
||||
|
||||
class BaseManager
|
||||
{
|
||||
public:
|
||||
explicit BaseManager( FrameworkPtr pFw ) : m_pFw( std::move( pFw ) ) {};
|
||||
virtual ~BaseManager() = default;
|
||||
|
||||
FrameworkPtr framework() const
|
||||
{ return m_pFw; }
|
||||
void setFw( FrameworkPtr pFw )
|
||||
{ m_pFw = pFw; }
|
||||
|
||||
private:
|
||||
FrameworkPtr m_pFw;
|
||||
};
|
||||
|
||||
}
|
|
@ -369,7 +369,7 @@ void HousingMgr::sendLandSignFree( Entity::Player& player, const Common::LandIde
|
|||
server.queueForPlayer( player.getCharacterId(), plotPricePacket );
|
||||
}
|
||||
|
||||
LandPurchaseResult HousingMgr::purchaseLand( Entity::Player& player, HousingZone& zone, uint8_t plot, uint8_t state )
|
||||
LandPurchaseResult HousingMgr::purchaseLand( Entity::Player& player, HousingZone& zone, uint16_t plot, uint8_t state )
|
||||
{
|
||||
|
||||
auto plotPrice = zone.getLand( plot )->getCurrentPrice();
|
||||
|
@ -1182,7 +1182,7 @@ bool HousingMgr::placeExternalItem( Entity::Player& player, Inventory::HousingIt
|
|||
auto zone = std::dynamic_pointer_cast< HousingZone >( pZone );
|
||||
assert( zone );
|
||||
|
||||
zone->spawnYardObject( static_cast< uint8_t >( ident.landId ), static_cast< uint16_t >( freeSlot ), *item );
|
||||
zone->spawnYardObject( ident.landId, static_cast< uint16_t >( freeSlot ), *item );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1567,7 +1567,7 @@ bool HousingMgr::removeExternalItem( Entity::Player& player, HousingZone& terri,
|
|||
}
|
||||
|
||||
if( shouldDespawnItem )
|
||||
terri.despawnYardObject( static_cast< uint16_t >( land.getLandIdent().landId ), slotId );
|
||||
terri.despawnYardObject( land.getLandIdent().landId, slotId );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -76,7 +76,7 @@ namespace Sapphire::World::Manager
|
|||
|
||||
void sendLandSignOwned( Entity::Player& player, const Common::LandIdent ident );
|
||||
void sendLandSignFree( Entity::Player& player, const Common::LandIdent ident );
|
||||
LandPurchaseResult purchaseLand( Entity::Player& player, HousingZone& zone, uint8_t plot, uint8_t state );
|
||||
LandPurchaseResult purchaseLand( Entity::Player& player, HousingZone& zone, uint16_t plot, uint8_t state );
|
||||
|
||||
/*!
|
||||
* @brief Converts param1 of a client trigger into a Common::LandIndent
|
||||
|
|
18
src/world/Manager/MgrUtil.cpp
Normal file
18
src/world/Manager/MgrUtil.cpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "ForwardsZone.h"
|
||||
#include <Service.h>
|
||||
#include "WorldServer.h"
|
||||
#include "MgrUtil.h"
|
||||
#include "PlayerMgr.h"
|
||||
|
||||
using namespace Sapphire;
|
||||
using namespace Sapphire::World::Manager;
|
||||
|
||||
World::Manager::PlayerMgr& Sapphire::World::Manager::playerMgr()
|
||||
{
|
||||
return Common::Service< World::Manager::PlayerMgr >::ref();
|
||||
}
|
||||
|
||||
World::WorldServer& Sapphire::World::Manager::server()
|
||||
{
|
||||
return Common::Service< World::WorldServer >::ref();
|
||||
}
|
13
src/world/Manager/MgrUtil.h
Normal file
13
src/world/Manager/MgrUtil.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include "ForwardsZone.h"
|
||||
#include <Service.h>
|
||||
#include "WorldServer.h"
|
||||
|
||||
namespace Sapphire::World::Manager
|
||||
{
|
||||
class PlayerMgr;
|
||||
|
||||
World::Manager::PlayerMgr& playerMgr();
|
||||
World::WorldServer& server();
|
||||
}
|
|
@ -14,7 +14,7 @@
|
|||
#include <Manager/FreeCompanyMgr.h>
|
||||
|
||||
#include <Script/ScriptMgr.h>
|
||||
#include <WorldServer.h>
|
||||
#include <Worldserver.h>
|
||||
#include <Common.h>
|
||||
|
||||
#include <Network/PacketContainer.h>
|
||||
|
@ -49,11 +49,9 @@ using namespace Sapphire::Network::ActorControl;
|
|||
|
||||
void PlayerMgr::onOnlineStatusChanged( Entity::Player& player, bool updateProfile )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto statusPacket = makeZonePacket< FFXIVIpcSetOnlineStatus >( player.getId() );
|
||||
statusPacket->data().onlineStatusFlags = player.getFullOnlineStatusMask();
|
||||
server.queueForPlayer( player.getCharacterId(), statusPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), statusPacket );
|
||||
|
||||
if( updateProfile )
|
||||
{
|
||||
|
@ -61,61 +59,58 @@ void PlayerMgr::onOnlineStatusChanged( Entity::Player& player, bool updateProfil
|
|||
searchInfoPacket->data().OnlineStatus = player.getFullOnlineStatusMask();
|
||||
searchInfoPacket->data().Region = player.getSearchSelectRegion();
|
||||
strcpy( searchInfoPacket->data().SearchComment, player.getSearchMessage());
|
||||
server.queueForPlayer( player.getCharacterId(), searchInfoPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), searchInfoPacket );
|
||||
}
|
||||
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), SetStatusIcon, static_cast< uint8_t >( player.getOnlineStatus() ) ), true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ),
|
||||
makeActorControl( player.getId(), SetStatusIcon, static_cast< uint8_t >( player.getOnlineStatus() ) ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onEquipDisplayFlagsChanged( Entity::Player& player )
|
||||
{
|
||||
auto paramPacket = makeZonePacket< FFXIVIpcConfig >( player.getId() );
|
||||
paramPacket->data().flag = player.getEquipDisplayFlags();
|
||||
player.sendToInRangeSet( paramPacket, true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ), paramPacket );
|
||||
}
|
||||
|
||||
void PlayerMgr::onSendStateFlags( Entity::Player& player, bool updateInRange )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< PlayerStateFlagsPacket >( player ) );
|
||||
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< PlayerStateFlagsPacket >( player ) );
|
||||
|
||||
if( updateInRange )
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), SetStatusIcon,
|
||||
static_cast< uint8_t >( player.getOnlineStatus() ) ), true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ),
|
||||
makeActorControl( player.getId(), SetStatusIcon, static_cast< uint8_t >( player.getOnlineStatus() ) ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onSendAchievementList( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto achvData = player.getAchievementData();
|
||||
|
||||
auto achvPacket = makeZonePacket< FFXIVIpcAchievement >( player.getId() );
|
||||
std::memcpy( &achvPacket->data().complete[ 0 ], &achvData.unlockList[ 0 ], sizeof( achvPacket->data().complete ) );
|
||||
std::memcpy( &achvPacket->data().history[ 0 ], &achvData.history[ 0 ], sizeof( achvPacket->data().history ) );
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), achvPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), achvPacket );
|
||||
}
|
||||
|
||||
void PlayerMgr::onSendAchievementProgress( Entity::Player& player, uint32_t achievementId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto& achvMgr = Common::Service< Manager::AchievementMgr >::ref();
|
||||
|
||||
auto achvProgress = achvMgr.getAchievementDataById( player, achievementId );
|
||||
|
||||
auto pAchvProgressPacket = makeActorControl( player.getId(), AchievementSetRate, achievementId, achvProgress.first, achvProgress.second );
|
||||
server.queueForPlayer( player.getCharacterId(), pAchvProgressPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), pAchvProgressPacket );
|
||||
}
|
||||
|
||||
void PlayerMgr::onUnlockAchievement( Entity::Player& player, uint32_t achievementId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
onSendAchievementList( player );
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), AchievementComplete, achievementId ) );
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), AchievementObtainMsg, achievementId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), AchievementComplete, achievementId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), AchievementObtainMsg, achievementId ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onSendStats( Entity::Player& player )
|
||||
|
@ -146,15 +141,11 @@ void PlayerMgr::onSendStats( Entity::Player& player )
|
|||
|
||||
auto statPacket = makeZonePacket< FFXIVIpcBaseParam >( player.getId() );
|
||||
memcpy( statPacket->data().Param, statParams.data(), sizeof( uint32_t ) * statParams.size() );
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), statPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), statPacket );
|
||||
}
|
||||
|
||||
void PlayerMgr::onPlayerStatusUpdate( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto playerStatusUpdate = makeZonePacket< FFXIVIpcPlayerStatusUpdate >( player.getId() );
|
||||
playerStatusUpdate->data().ClassJob = static_cast< uint8_t >( player.getClass() );
|
||||
playerStatusUpdate->data().Lv = player.getLevel();
|
||||
|
@ -162,22 +153,19 @@ void PlayerMgr::onPlayerStatusUpdate( Entity::Player& player )
|
|||
playerStatusUpdate->data().LvSync = 0; //player.getLevelSync();
|
||||
playerStatusUpdate->data().Exp = player.getExp();
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), playerStatusUpdate );
|
||||
server().queueForPlayer( player.getCharacterId(), playerStatusUpdate );
|
||||
}
|
||||
|
||||
void PlayerMgr::onPlayerHpMpTpChanged( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
player.sendToInRangeSet( std::make_shared< UpdateHpMpTpPacket >( player ), true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ), std::make_shared< UpdateHpMpTpPacket >( player ) );
|
||||
auto hudParamPacket = makeHudParam( player );
|
||||
server.queueForPlayer( player.getCharacterId(), hudParamPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), hudParamPacket );
|
||||
}
|
||||
|
||||
void PlayerMgr::onPlayerItemLevelUpdate( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), SetItemLevel, player.getItemLevel(), 0 ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), SetItemLevel, player.getItemLevel(), 0 ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onLevelUp( Entity::Player& player )
|
||||
|
@ -186,10 +174,11 @@ void PlayerMgr::onLevelUp( Entity::Player& player )
|
|||
player.sendStats();
|
||||
onPlayerHpMpTpChanged( player );
|
||||
|
||||
player.sendToInRangeSet( makeHudParam( player ), true );
|
||||
auto inRangePlayerIds = player.getInRangePlayerIds( true );
|
||||
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), LevelUpEffect, static_cast< uint8_t >( player.getClass() ),
|
||||
player.getLevel(), player.getLevel() - 1 ), true );
|
||||
server().queueForPlayers( inRangePlayerIds, makeHudParam( player ) );
|
||||
server().queueForPlayers( inRangePlayerIds, makeActorControl( player.getId(), LevelUpEffect, static_cast< uint8_t >( player.getClass() ),
|
||||
player.getLevel(), player.getLevel() - 1 ) );
|
||||
|
||||
onPlayerStatusUpdate( player );
|
||||
|
||||
|
@ -199,11 +188,10 @@ void PlayerMgr::onLevelUp( Entity::Player& player )
|
|||
|
||||
void PlayerMgr::onSetLevelForClass( Entity::Player& player, Common::ClassJob classJob )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& achvMgr = Common::Service< World::Manager::AchievementMgr >::ref();
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), Network::ActorControl::ClassJobUpdate,
|
||||
static_cast< uint8_t >( classJob ), player.getLevelForClass( classJob ) ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), Network::ActorControl::ClassJobUpdate,
|
||||
static_cast< uint8_t >( classJob ), player.getLevelForClass( classJob ) ) );
|
||||
|
||||
achvMgr.progressAchievementByType< Common::Achievement::Type::Classjob >( player, static_cast< uint32_t >( classJob ) );
|
||||
}
|
||||
|
@ -211,38 +199,34 @@ void PlayerMgr::onSetLevelForClass( Entity::Player& player, Common::ClassJob cla
|
|||
|
||||
void PlayerMgr::onGainExp( Entity::Player& player, uint32_t exp )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
if( exp != 0 )
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), GainExpMsg, static_cast< uint8_t >( player.getClass() ), exp ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), GainExpMsg, static_cast< uint8_t >( player.getClass() ), exp ) );
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), UpdateUiExp, static_cast< uint8_t >( player.getClass() ), player.getExp() ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), UpdateUiExp, static_cast< uint8_t >( player.getClass() ), player.getExp() ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onUnlockOrchestrion( Entity::Player& player, uint8_t songId, uint32_t itemId )
|
||||
{
|
||||
player.learnSong( songId, itemId );
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), ToggleOrchestrionUnlock, songId, 1, itemId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), ToggleOrchestrionUnlock, songId, 1, itemId ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onChangeGear( Entity::Player& player )
|
||||
{
|
||||
player.sendToInRangeSet( std::make_shared< ModelEquipPacket >( player ), true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ), std::make_shared< ModelEquipPacket >( player ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onGcUpdate( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto gcAffPacket = makeZonePacket< FFXIVIpcGrandCompany >( player.getId() );
|
||||
gcAffPacket->data().ActiveCompanyId = player.getGc();
|
||||
gcAffPacket->data().MaelstromRank = player.getGcRankArray()[ 0 ];
|
||||
gcAffPacket->data().TwinAdderRank = player.getGcRankArray()[ 1 ];
|
||||
gcAffPacket->data().ImmortalFlamesRank = player.getGcRankArray()[ 2 ];
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), gcAffPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), gcAffPacket );
|
||||
}
|
||||
|
||||
void PlayerMgr::onSetGc( Entity::Player& player, uint8_t gc )
|
||||
|
@ -268,28 +252,29 @@ void PlayerMgr::onCompanionUpdate( Entity::Player& player, uint8_t companionId )
|
|||
return;
|
||||
|
||||
player.setCompanion( companionId );
|
||||
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), ActorControlType::ToggleCompanion, companionId ), true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ), makeActorControl( player.getId(), ActorControlType::ToggleCompanion, companionId ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::onMountUpdate( Entity::Player& player, uint32_t mountId )
|
||||
{
|
||||
|
||||
auto inRangePlayerIds = player.getInRangePlayerIds( true );
|
||||
if( mountId != 0 )
|
||||
{
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), ActorControlType::SetStatus,
|
||||
static_cast< uint8_t >( Common::ActorStatus::Mounted ) ), true );
|
||||
player.sendToInRangeSet( makeActorControlSelf( player.getId(), 0x39e, 12 ), true ); //?
|
||||
server().queueForPlayers( inRangePlayerIds,
|
||||
makeActorControl( player.getId(), ActorControlType::SetStatus, static_cast< uint8_t >( Common::ActorStatus::Mounted ) ) );
|
||||
server().queueForPlayers( inRangePlayerIds, makeActorControlSelf( player.getId(), 0x39e, 12 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), ActorControlType::SetStatus,
|
||||
static_cast< uint8_t >( Common::ActorStatus::Idle ) ), true );
|
||||
player.sendToInRangeSet( makeActorControlSelf( player.getId(), ActorControlType::Dismount, 1 ), true );
|
||||
server().queueForPlayers( inRangePlayerIds,
|
||||
makeActorControl( player.getId(), ActorControlType::SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) ) );
|
||||
server().queueForPlayers( inRangePlayerIds, makeActorControlSelf( player.getId(), ActorControlType::Dismount, 1 ) );
|
||||
}
|
||||
|
||||
auto mountPacket = makeZonePacket< FFXIVIpcMount >( player.getId() );
|
||||
mountPacket->data().id = mountId;
|
||||
player.sendToInRangeSet( mountPacket, true );
|
||||
server().queueForPlayers( inRangePlayerIds, mountPacket );
|
||||
}
|
||||
|
||||
void PlayerMgr::onMobKill( Entity::Player& player, Entity::BNpc& bnpc )
|
||||
|
@ -305,7 +290,6 @@ void PlayerMgr::onMobKill( Entity::Player& player, Entity::BNpc& bnpc )
|
|||
|
||||
void PlayerMgr::onHateListChanged( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
|
||||
|
||||
auto hateListPacket = makeZonePacket< FFXIVIpcHateList >( player.getId() );
|
||||
|
@ -341,20 +325,18 @@ void PlayerMgr::onHateListChanged( Entity::Player& player )
|
|||
hateRankPacket->data().List[ i ].Rate = static_cast< uint8_t >( hatePercent );
|
||||
}
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), { hateListPacket, hateRankPacket } );
|
||||
server().queueForPlayer( player.getCharacterId(), { hateListPacket, hateRankPacket } );
|
||||
}
|
||||
|
||||
void PlayerMgr::onChangeClass( Entity::Player& player )
|
||||
{
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), ClassJobChange, 0x04 ), true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ), makeActorControl( player.getId(), ClassJobChange, 0x04 ) );
|
||||
onPlayerHpMpTpChanged( player );
|
||||
}
|
||||
|
||||
void PlayerMgr::onLogin( Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto motd = server.getConfig().motd;
|
||||
auto motd = server().getConfig().motd;
|
||||
|
||||
std::istringstream ss( motd );
|
||||
std::string msg;
|
||||
|
@ -386,8 +368,6 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
|
|||
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
|
||||
auto& housingMgr = Common::Service< HousingMgr >::ref();
|
||||
auto& partyMgr = Common::Service< World::Manager::PartyMgr >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
|
||||
auto pZone = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
if( !pZone )
|
||||
|
@ -400,25 +380,14 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
|
|||
auto initPacket = makeZonePacket< FFXIVIpcLogin >( player.getId() );
|
||||
initPacket->data().playerActorId = player.getId();
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), initPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), initPacket );
|
||||
|
||||
player.sendInventory();
|
||||
|
||||
if( player.isLogin() )
|
||||
{
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x169, 0 ) ); // unknown
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x54, 0 ) ); // something treasure map related?
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x23D, 0 ) ); // unknown
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 0 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 1 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 2 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 3 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 4 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 5 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 6 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), 0x16F, 7 ) ); // SalvageSkill
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), SetConfigFlags, player.getEquipDisplayFlags(), 1 ) );
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), SetMaxGearSets, player.getMaxGearSets() ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), SetConfigFlags, player.getEquipDisplayFlags(), 1 ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), SetMaxGearSets, player.getMaxGearSets() ) );
|
||||
}
|
||||
|
||||
// set flags, will be reset automatically by zoning ( only on client side though )
|
||||
|
@ -430,7 +399,7 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
|
|||
if( player.isLogin() )
|
||||
{
|
||||
player.sendItemLevel();
|
||||
server.queueForPlayer( player.getCharacterId(), makePlayerSetup( player ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makePlayerSetup( player ) );
|
||||
}
|
||||
|
||||
player.sendStats();
|
||||
|
@ -442,16 +411,16 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
|
|||
classInfo->data().Lv1 = player.getLevel();
|
||||
if( player.isLogin() )
|
||||
classInfo->data().Login = 1;
|
||||
server.queueForPlayer( player.getCharacterId(), classInfo );
|
||||
server().queueForPlayer( player.getCharacterId(), classInfo );
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), 0x112, 0x24 ) ); // unknown
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControl( player.getId(), 0x112, 0x24 ) ); // unknown
|
||||
// only initialize the UI if the player in fact just logged in.
|
||||
if( player.isLogin() )
|
||||
{
|
||||
auto contentFinderList = makeZonePacket< FFXIVIpcContentAttainFlags >( player.getId() );
|
||||
std::memset( &contentFinderList->data(), 0xFF, sizeof( contentFinderList->data() ) );
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), contentFinderList );
|
||||
server().queueForPlayer( player.getCharacterId(), contentFinderList );
|
||||
|
||||
player.clearSoldItems();
|
||||
}
|
||||
|
@ -472,17 +441,17 @@ void PlayerMgr::onZone( Sapphire::Entity::Player& player )
|
|||
|
||||
housingMgr.sendLandFlags( player );
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), makeInitZone( player, teri ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeInitZone( player, teri ) );
|
||||
|
||||
teri.onPlayerZoneIn( player );
|
||||
|
||||
if( player.isLogin() )
|
||||
{
|
||||
server.queueForPlayer( player.getCharacterId(),
|
||||
{
|
||||
makeZonePacket< FFXIVIpcQuestRepeatFlags >( player.getId() ),
|
||||
makeZonePacket< FFXIVIpcDailyQuests >( player.getId() )
|
||||
} );
|
||||
server().queueForPlayer( player.getCharacterId(),
|
||||
{
|
||||
makeZonePacket< FFXIVIpcQuestRepeatFlags >( player.getId() ),
|
||||
makeZonePacket< FFXIVIpcDailyQuests >( player.getId() )
|
||||
} );
|
||||
}
|
||||
|
||||
if( player.getPartyId() != 0 )
|
||||
|
@ -503,35 +472,32 @@ void PlayerMgr::onUpdate( Entity::Player& player, uint64_t tickCount )
|
|||
if( !player.isAlive() )
|
||||
return;
|
||||
|
||||
if( !player.checkAction() )
|
||||
if( !player.checkAction() && ( player.getTargetId() && player.getStance() == Common::Stance::Active && player.isAutoattackOn() ) )
|
||||
{
|
||||
if( player.getTargetId() && player.getStance() == Common::Stance::Active && player.isAutoattackOn() )
|
||||
auto mainWeap = player.getItemAt( Common::GearSet0, Common::GearSetSlot::MainHand );
|
||||
|
||||
// @TODO i dislike this, iterating over all in range actors when you already know the id of the actor you need...
|
||||
for( const auto& actor : player.getInRangeActors() )
|
||||
{
|
||||
auto mainWeap = player.getItemAt( Common::GearSet0, Common::GearSetSlot::MainHand );
|
||||
|
||||
// @TODO i dislike this, iterating over all in range actors when you already know the id of the actor you need...
|
||||
for( const auto& actor : player.getInRangeActors() )
|
||||
if( actor->getId() == player.getTargetId() && actor->getAsChara()->isAlive() && mainWeap )
|
||||
{
|
||||
if( actor->getId() == player.getTargetId() && actor->getAsChara()->isAlive() && mainWeap )
|
||||
auto chara = actor->getAsChara();
|
||||
|
||||
// default autoattack range
|
||||
float range = 3.f + chara->getRadius() + player.getRadius() * 0.5f;
|
||||
|
||||
// default autoattack range for ranged classes
|
||||
auto classJob = player.getClass();
|
||||
|
||||
if( classJob == Common::ClassJob::Machinist || classJob == Common::ClassJob::Bard || classJob == Common::ClassJob::Archer )
|
||||
range = 25.f + chara->getRadius() + player.getRadius() * 0.5f;
|
||||
|
||||
if( Common::Util::distance( player.getPos(), actor->getPos() ) <= range )
|
||||
{
|
||||
auto chara = actor->getAsChara();
|
||||
|
||||
// default autoattack range
|
||||
float range = 3.f + chara->getRadius() + player.getRadius() * 0.5f;
|
||||
|
||||
// default autoattack range for ranged classes
|
||||
auto classJob = player.getClass();
|
||||
|
||||
if( classJob == Common::ClassJob::Machinist || classJob == Common::ClassJob::Bard || classJob == Common::ClassJob::Archer )
|
||||
range = 25.f + chara->getRadius() + player.getRadius() * 0.5f;
|
||||
|
||||
if( Common::Util::distance( player.getPos(), actor->getPos() ) <= range )
|
||||
if( ( tickCount - player.getLastAttack() ) > mainWeap->getDelay() )
|
||||
{
|
||||
if( ( tickCount - player.getLastAttack() ) > mainWeap->getDelay() )
|
||||
{
|
||||
player.setLastAttack( tickCount );
|
||||
player.autoAttack( actor->getAsChara() );
|
||||
}
|
||||
player.setLastAttack( tickCount );
|
||||
player.autoAttack( actor->getAsChara() );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -561,31 +527,24 @@ void PlayerMgr::onUnsetStateFlag( Sapphire::Entity::Player& player, Common::Play
|
|||
|
||||
////////// Helper ///////////
|
||||
|
||||
|
||||
|
||||
void PlayerMgr::sendServerNotice( Entity::Player& player, const std::string& message ) //Purple Text
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< ServerNoticePacket >( player.getId(), message ) );
|
||||
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< ServerNoticePacket >( player.getId(), message ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::sendUrgent( Entity::Player& player, const std::string& message ) //Red Text
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< ChatPacket >( player, Common::ChatType::ServerUrgent, message ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< ChatPacket >( player, Common::ChatType::ServerUrgent, message ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::sendDebug( Entity::Player& player, const std::string& message ) //Grey Text
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< ChatPacket >( player, Common::ChatType::SystemMessage, message ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< ChatPacket >( player, Common::ChatType::SystemMessage, message ) );
|
||||
}
|
||||
|
||||
void PlayerMgr::sendLogMessage( Entity::Player& player, uint32_t messageId, uint32_t param2, uint32_t param3,
|
||||
uint32_t param4, uint32_t param5, uint32_t param6 )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlTarget( player.getId(), ActorControlType::LogMsg, messageId,
|
||||
param2, param3, param4, param5, param6 ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlTarget( player.getId(), ActorControlType::LogMsg, messageId,
|
||||
param2, param3, param4, param5, param6 ) );
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "ForwardsZone.h"
|
||||
#include <spdlog/fmt/fmt.h>
|
||||
#include "MgrUtil.h"
|
||||
|
||||
namespace Sapphire::World::Manager
|
||||
{
|
||||
|
|
|
@ -17,8 +17,9 @@
|
|||
|
||||
#include <Manager/PlayerMgr.h>
|
||||
#include <Manager/MapMgr.h>
|
||||
#include <Manager/MgrUtil.h>
|
||||
#include "WorldServer.h"
|
||||
|
||||
#include "Territory/Territory.h"
|
||||
#include "Actor/Player.h"
|
||||
#include <Territory/InstanceObjectCache.h>
|
||||
|
||||
|
@ -34,7 +35,6 @@ void WarpMgr::requestMoveTerritory( Entity::Player& player, Common::WarpType war
|
|||
uint32_t targetTerritoryId, Common::FFXIVARR_POSITION3 targetPos, float targetRot )
|
||||
{
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto& server = Common::Service< WorldServer >::ref();
|
||||
|
||||
auto pTeri = teriMgr.getTerritoryByGuId( targetTerritoryId );
|
||||
if( !pTeri )
|
||||
|
@ -52,12 +52,19 @@ void WarpMgr::requestMoveTerritory( Entity::Player& player, Common::WarpType war
|
|||
taskMgr.queueTask( makeMoveTerritoryTask( player, warpType, targetTerritoryId, targetPos, targetRot, 1000 ) );
|
||||
}
|
||||
|
||||
void WarpMgr::requestMoveTerritory( Entity::Player& player, Common::WarpType warpType, uint32_t targetTerritoryId )
|
||||
{
|
||||
requestMoveTerritory( player, warpType, targetTerritoryId, player.getPos(), player.getRot() );
|
||||
}
|
||||
|
||||
void WarpMgr::requestWarp( Entity::Player& player, Common::WarpType warpType, Common::FFXIVARR_POSITION3 targetPos, float targetRot )
|
||||
{
|
||||
m_entityIdToWarpInfoMap[ player.getId() ] = { 0, warpType, targetPos, targetRot };
|
||||
|
||||
player.sendToInRangeSet( makeActorControlSelf( player.getId(), WarpStart, warpType, warpType, 0, player.getTerritoryTypeId(), 1 ), true );
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), ActorDespawnEffect, warpType, player.getTerritoryTypeId() ) );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ),
|
||||
makeActorControlSelf( player.getId(), WarpStart, warpType, warpType, 0, player.getTerritoryTypeId(), 1 ) );
|
||||
server().queueForPlayers( player.getInRangePlayerIds(),
|
||||
makeActorControl( player.getId(), ActorDespawnEffect, warpType, player.getTerritoryTypeId() ) );
|
||||
|
||||
auto& taskMgr = Common::Service< TaskMgr >::ref();
|
||||
taskMgr.queueTask( makeWarpTask( player, warpType, targetPos, targetRot, 1000 ) );
|
||||
|
@ -96,12 +103,10 @@ void WarpMgr::finishWarp( Entity::Player& player )
|
|||
player.setZoningType( Common::ZoningType::None );
|
||||
|
||||
if( !player.getGmInvis() )
|
||||
player.sendToInRangeSet( zoneInPacket );
|
||||
server().queueForPlayers( player.getInRangePlayerIds(), zoneInPacket );
|
||||
|
||||
auto& server = Common::Service< WorldServer >::ref();
|
||||
server.queueForPlayer( player.getCharacterId(), zoneInPacket );
|
||||
|
||||
player.sendToInRangeSet( setStatusPacket, true );
|
||||
server().queueForPlayer( player.getCharacterId(), zoneInPacket );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ), setStatusPacket );
|
||||
|
||||
playerMgr.onUnsetStateFlag( player, PlayerStateFlag::BetweenAreas );
|
||||
|
||||
|
@ -142,9 +147,9 @@ void WarpMgr::requestPlayerTeleport( Entity::Player& player, uint16_t aetheryteI
|
|||
auto aetherytePlace = exdData.getRow< Excel::PlaceName >( data.TransferName );
|
||||
|
||||
PlayerMgr::sendDebug( player, "Teleport: {0} - {1} ({2})",
|
||||
townPlace->getString( townPlace->data().Text.SGL ),
|
||||
aetherytePlace->getString( aetherytePlace->data().Text.SGL ),
|
||||
data.TerritoryType );
|
||||
townPlace->getString( townPlace->data().Text.SGL ),
|
||||
aetherytePlace->getString( aetherytePlace->data().Text.SGL ),
|
||||
data.TerritoryType );
|
||||
|
||||
// if it is a teleport in the same zone, we want to do warp instead of moveTerri
|
||||
bool sameTerritory = player.getTerritoryTypeId() == data.TerritoryType;
|
||||
|
|
|
@ -32,6 +32,15 @@ namespace Sapphire::World::Manager
|
|||
/// <param name="targetRot"></param>
|
||||
void requestMoveTerritory( Entity::Player& player, Common::WarpType warpType, uint32_t targetTerritoryId, Common::FFXIVARR_POSITION3 targetPos, float targetRot );
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// request to move a player to specified territorytype with given WarpType, position will be the same as before
|
||||
/// </summary>
|
||||
/// <param name="player"></param>
|
||||
/// <param name="warpType"></param>
|
||||
/// <param name="targetTerritoryId"></param>
|
||||
void requestMoveTerritory( Entity::Player& player, Common::WarpType warpType, uint32_t targetTerritoryId );
|
||||
|
||||
/// <summary>
|
||||
/// handle player state pre-warp and tells client to warp player
|
||||
/// </summary>
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include "Manager/TerritoryMgr.h"
|
||||
#include "Manager/PlayerMgr.h"
|
||||
#include "Manager/WarpMgr.h"
|
||||
#include "Manager/MgrUtil.h"
|
||||
#include "Territory/Territory.h"
|
||||
#include "Territory/InstanceContent.h"
|
||||
|
||||
|
@ -86,7 +87,6 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
|||
if( player.getGmRank() <= 0 )
|
||||
return;
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
|
||||
auto& exdData = Common::Service< Data::ExdData >::ref();
|
||||
|
||||
|
@ -233,7 +233,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
|||
}
|
||||
case GmCommand::Speed:
|
||||
{
|
||||
server.queueForPlayer( targetPlayer->getCharacterId(), makeActorControlSelf( player.getId(), Flee, param1 ) );
|
||||
server().queueForPlayer( targetPlayer->getCharacterId(), makeActorControlSelf( player.getId(), Flee, param1 ) );
|
||||
PlayerMgr::sendServerNotice( player, "Speed for {0} was set to {1}", targetPlayer->getName(), param1 );
|
||||
break;
|
||||
}
|
||||
|
@ -270,11 +270,10 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
|||
searchInfoPacket->data().OnlineStatus = param1;
|
||||
searchInfoPacket->data().Region = targetPlayer->getSearchSelectRegion();
|
||||
strcpy( searchInfoPacket->data().SearchComment, targetPlayer->getSearchMessage() );
|
||||
server.queueForPlayer( targetPlayer->getCharacterId(), searchInfoPacket );
|
||||
server().queueForPlayer( targetPlayer->getCharacterId(), searchInfoPacket );
|
||||
|
||||
targetPlayer->sendToInRangeSet( makeActorControl( player.getId(), SetStatusIcon,
|
||||
static_cast< uint8_t >( player.getOnlineStatus() ) ),
|
||||
true );
|
||||
server().queueForPlayers( targetPlayer->getInRangePlayerIds( true ), makeActorControl( player.getId(), SetStatusIcon,
|
||||
static_cast< uint8_t >( player.getOnlineStatus() ) ) );
|
||||
PlayerMgr::sendServerNotice( player, "Icon for {0} was set to {1}", targetPlayer->getName(), param1 );
|
||||
break;
|
||||
}
|
||||
|
@ -449,7 +448,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
|||
|
||||
Service< World::Manager::PlayerMgr >::ref().onSetGcRank( player, static_cast< uint8_t >( gcId ), static_cast< uint8_t >( param1 ) );
|
||||
PlayerMgr::sendServerNotice( player, "GC Rank for {0} for GC {1} was set to {2}", targetPlayer->getName(), targetPlayer->getGc(),
|
||||
targetPlayer->getGcRankArray()[ targetPlayer->getGc() - 1 ] );
|
||||
targetPlayer->getGcRankArray()[ targetPlayer->getGc() - 1 ] );
|
||||
break;
|
||||
}
|
||||
case GmCommand::Aetheryte:
|
||||
|
@ -474,7 +473,7 @@ void Sapphire::Network::GameConnection::gmCommandHandler( const Packets::FFXIVAR
|
|||
}
|
||||
case GmCommand::Wireframe:
|
||||
{
|
||||
server.queueForPlayer( player.getCharacterId(),
|
||||
server().queueForPlayer( player.getCharacterId(),
|
||||
std::make_shared< ActorControlSelfPacket >( player.getId(), ActorControlType::ToggleWireframeRendering ) );
|
||||
PlayerMgr::sendServerNotice( player, "Wireframe Rendering for {0} was toggled", player.getName() );
|
||||
break;
|
||||
|
@ -601,7 +600,6 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
|
|||
if( player.getGmRank() <= 0 )
|
||||
return;
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
|
||||
|
||||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcGmCommandName >( inPacket );
|
||||
|
@ -616,7 +614,7 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
|
|||
Logger::debug( "{0} used GM2 commandId: {1}, params: {2}, {3}, {4}, {5}, target: {6}",
|
||||
player.getName(), commandId, param1, param2, param3, param4, target );
|
||||
|
||||
auto targetSession = server.getSession( target );
|
||||
auto targetSession = server().getSession( target );
|
||||
Sapphire::Entity::CharaPtr targetActor;
|
||||
|
||||
if( targetSession != nullptr )
|
||||
|
@ -652,10 +650,10 @@ void Sapphire::Network::GameConnection::gmCommandNameHandler( const Packets::FFX
|
|||
targetPlayer->resetMp();
|
||||
targetPlayer->setStatus( Common::ActorStatus::Idle );
|
||||
|
||||
targetPlayer->sendToInRangeSet( makeActorControlSelf( player.getId(), Appear, 0x01, 0x01, 0, 113 ), true );
|
||||
targetPlayer->sendToInRangeSet( makeActorControl( player.getId(), SetStatus,
|
||||
static_cast< uint8_t >( Common::ActorStatus::Idle ) ),
|
||||
true );
|
||||
server().queueForPlayers( targetPlayer->getInRangePlayerIds( true ), makeActorControlSelf( player.getId(), Appear, 0x01, 0x01, 0, 113 ) );
|
||||
server().queueForPlayers( targetPlayer->getInRangePlayerIds( true ), makeActorControl( player.getId(), SetStatus,
|
||||
static_cast< uint8_t >( Common::ActorStatus::Idle ) ) );
|
||||
|
||||
PlayerMgr::sendServerNotice( player, "Raised {0}", targetPlayer->getName());
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -666,7 +666,7 @@ void Sapphire::Network::GameConnection::commandHandler( const Packets::FFXIVARR_
|
|||
}*/
|
||||
case PacketCommand::EVENT_HANDLER:
|
||||
{
|
||||
pZone->onEventHandlerOrder( player, param11, param12, param2, param3, param4 );
|
||||
pZone->onEventHandlerOrder( player, param11, param12, param2, static_cast< uint32_t >( param3 ), param4 );
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -56,6 +56,7 @@
|
|||
#include "Manager/WarpMgr.h"
|
||||
#include "Manager/ItemMgr.h"
|
||||
#include "Manager/FreeCompanyMgr.h"
|
||||
#include "Manager/MgrUtil.h"
|
||||
|
||||
#include "Action/Action.h"
|
||||
|
||||
|
@ -100,8 +101,8 @@ void Sapphire::Network::GameConnection::setProfileHandler( const Packets::FFXIVA
|
|||
strcpy( searchInfoPacket->data().SearchComment, player.getSearchMessage() );
|
||||
queueOutPacket( searchInfoPacket );
|
||||
|
||||
player.sendToInRangeSet( makeActorControl( player.getId(), SetStatusIcon,
|
||||
static_cast< uint8_t >( player.getOnlineStatus() ) ), true );
|
||||
server().queueForPlayers( player.getInRangePlayerIds( true ), makeActorControl( player.getId(), SetStatusIcon,
|
||||
static_cast< uint8_t >( player.getOnlineStatus() ) ) );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::getProfileHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
@ -115,10 +116,8 @@ void Sapphire::Network::GameConnection::getProfileHandler( const Packets::FFXIVA
|
|||
|
||||
void Sapphire::Network::GameConnection::getSearchCommentHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
|
||||
auto targetId = *reinterpret_cast< const uint32_t* >( &inPacket.data[ 0x10 ] );
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pPlayer = server.getPlayer( targetId );
|
||||
auto pPlayer = server().getPlayer( targetId );
|
||||
|
||||
Logger::debug( "getSearchCommentHandler: {0}", targetId );
|
||||
|
||||
|
@ -131,33 +130,26 @@ void Sapphire::Network::GameConnection::getSearchCommentHandler( const Packets::
|
|||
auto searchInfoPacket = makeZonePacket< FFXIVIpcGetSearchCommentResult >( player.getId() );
|
||||
searchInfoPacket->data().TargetEntityID = targetId;
|
||||
strcpy( searchInfoPacket->data().SearchComment, pPlayer->getSearchMessage() );
|
||||
server.queueForPlayer( player.getCharacterId(), searchInfoPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), searchInfoPacket );
|
||||
}
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::reqExamineFcInfo( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
|
||||
auto targetId = *reinterpret_cast< const uint32_t* >( &inPacket.data[ 0x18 ] );
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pPlayer = server.getPlayer( targetId );
|
||||
auto pPlayer = server().getPlayer( targetId );
|
||||
|
||||
Logger::debug( "reqExamineFcInfo: {0}", targetId );
|
||||
|
||||
if( pPlayer )
|
||||
{
|
||||
if( pPlayer->isActingAsGm() || pPlayer->getTerritoryTypeId() != player.getTerritoryTypeId() )
|
||||
return;
|
||||
if( !pPlayer || pPlayer->isActingAsGm() || pPlayer->getTerritoryTypeId() != player.getTerritoryTypeId() )
|
||||
return;
|
||||
|
||||
// retail sends the requester's id as both (isForSelf)
|
||||
auto examineFcInfoPacket = makeZonePacket< FFXIVIpcGetFcProfileResult >( player.getId() );
|
||||
examineFcInfoPacket->data().TargetEntityID = targetId;
|
||||
// todo: populate with fc info
|
||||
|
||||
server.queueForPlayer( player.getCharacterId(), examineFcInfoPacket );
|
||||
}
|
||||
// retail sends the requester's id as both (isForSelf)
|
||||
auto examineFcInfoPacket = makeZonePacket< FFXIVIpcGetFcProfileResult >( player.getId() );
|
||||
examineFcInfoPacket->data().TargetEntityID = targetId;
|
||||
// todo: populate with fc info
|
||||
|
||||
server().queueForPlayer( player.getCharacterId(), examineFcInfoPacket );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::joinChatChannelHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
@ -173,31 +165,18 @@ void Sapphire::Network::GameConnection::joinChatChannelHandler( const Packets::F
|
|||
chatChannelMgr.addToChannel( joinChannelPacket.data().ChannelID, player );
|
||||
|
||||
auto chatChannelResultPacket = makeZonePacket< FFXIVIpcChatChannelResult >( player.getId() );
|
||||
|
||||
chatChannelResultPacket->data().ChannelID = channelIdReq;
|
||||
chatChannelResultPacket->data().TargetCharacterID = player.getId();
|
||||
chatChannelResultPacket->data().CommunityID = player.getCharacterId();
|
||||
chatChannelResultPacket->data().UpPacketNo = 0; // todo: define behavior
|
||||
chatChannelResultPacket->data().Result = 0; // todo: define behavior
|
||||
|
||||
queueOutPacket( chatChannelResultPacket );
|
||||
|
||||
auto joinChannelResultPacket = makeChatPacket< Packets::Server::FFXIVJoinChannelResult >( player.getId() );
|
||||
|
||||
joinChannelResultPacket->data().channelID = channelIdReq;
|
||||
joinChannelResultPacket->data().characterID = player.getId();
|
||||
joinChannelResultPacket->data().result = 0;
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
|
||||
if( !pSession )
|
||||
{
|
||||
Logger::error( std::string( __FUNCTION__ ) + ": Session not found for player#{}", player.getCharacterId() );
|
||||
return;
|
||||
}
|
||||
|
||||
pSession->getChatConnection()->queueOutPacket( joinChannelResultPacket );
|
||||
queueOutPacket( joinChannelResultPacket );
|
||||
}
|
||||
|
||||
|
||||
|
@ -286,7 +265,7 @@ void Sapphire::Network::GameConnection::moveHandler( const Packets::FFXIVARR_PAC
|
|||
|
||||
//auto movePacket = std::make_shared< MoveActorPacket >( player, headRotation, animationType, animationState, animationSpeed, unknownRotation );
|
||||
auto movePacket = std::make_shared< MoveActorPacket >( player, headRotation, data.flag, data.flag2, animationSpeed, unknownRotation );
|
||||
player.sendToInRangeSet( movePacket );
|
||||
server().queueForPlayers( player.getInRangePlayerIds(), movePacket );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::configHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
@ -305,7 +284,6 @@ void Sapphire::Network::GameConnection::zoneJumpHandler( const Packets::FFXIVARR
|
|||
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto& instanceObjectCache = Common::Service< InstanceObjectCache >::ref();
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
|
||||
auto pTeri = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
auto tInfo = pTeri->getTerritoryTypeInfo();
|
||||
|
@ -342,7 +320,6 @@ void Sapphire::Network::GameConnection::zoneJumpHandler( const Packets::FFXIVARR
|
|||
|
||||
void Sapphire::Network::GameConnection::newDiscoveryHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& teriMgr = Common::Service< TerritoryMgr >::ref();
|
||||
auto& instanceObjectCache = Common::Service< InstanceObjectCache >::ref();
|
||||
auto pTeri = teriMgr.getTerritoryByGuId( player.getTerritoryId() );
|
||||
|
@ -359,7 +336,7 @@ void Sapphire::Network::GameConnection::newDiscoveryHandler( const Packets::FFXI
|
|||
auto discoveryPacket = makeZonePacket< FFXIVIpcDiscoveryReply >( player.getId() );
|
||||
discoveryPacket->data().mapId = tInfo->data().Map;
|
||||
discoveryPacket->data().mapPartId = pRefInfo->data.discoveryIndex;
|
||||
server.queueForPlayer( player.getCharacterId(), discoveryPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), discoveryPacket );
|
||||
player.discover( tInfo->data().Map, pRefInfo->data.discoveryIndex );
|
||||
}
|
||||
|
||||
|
@ -378,13 +355,12 @@ void Sapphire::Network::GameConnection::loginHandler( const Packets::FFXIVARR_PA
|
|||
|
||||
void Sapphire::Network::GameConnection::syncHandler( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcPingHandler >( inPacket );
|
||||
auto& data = packet.data();
|
||||
|
||||
queueOutPacket( std::make_shared< WorldPackets::Server::PingPacket >( player, data.clientTimeValue ) );
|
||||
|
||||
auto pSession = server.getSession( player.getCharacterId() );
|
||||
auto pSession = server().getSession( player.getCharacterId() );
|
||||
if( !pSession )
|
||||
return;
|
||||
|
||||
|
@ -633,9 +609,6 @@ void Sapphire::Network::GameConnection::gearSetEquip( const Packets::FFXIVARR_PA
|
|||
const auto packet = ZoneChannelPacket< Client::FFXIVIpcGearSetEquip >( inPacket );
|
||||
const auto contextId = packet.data().contextId;
|
||||
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto& playerMgr = Common::Service< PlayerMgr >::ref();
|
||||
|
||||
// Loop over all slots
|
||||
for( int slot = 0; slot < 14; ++slot )
|
||||
{
|
||||
|
@ -651,14 +624,14 @@ void Sapphire::Network::GameConnection::gearSetEquip( const Packets::FFXIVARR_PA
|
|||
if( fromItem && equippedItem )
|
||||
{
|
||||
player.swapItem( fromContainer, fromSlot, Common::GearSet0, slot );
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), fromSlot, fromContainer, *equippedItem, contextId ) );
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), slot, Common::GearSet0, *fromItem, contextId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), fromSlot, fromContainer, *equippedItem, contextId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), slot, Common::GearSet0, *fromItem, contextId ) );
|
||||
}
|
||||
else if( fromItem && !equippedItem )
|
||||
{
|
||||
player.moveItem( fromContainer, fromSlot, Common::GearSet0, slot );
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), fromSlot, fromContainer, contextId ) );
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), slot, Common::GearSet0, *fromItem, contextId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), fromSlot, fromContainer, contextId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), slot, Common::GearSet0, *fromItem, contextId ) );
|
||||
}
|
||||
else if( !fromItem && equippedItem )
|
||||
{
|
||||
|
@ -672,8 +645,8 @@ void Sapphire::Network::GameConnection::gearSetEquip( const Packets::FFXIVARR_PA
|
|||
// TODO: the gearset handler shouldn't equip -anything- if there's ever too little inventory space
|
||||
continue;
|
||||
}
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), freeContainerSlot.second, freeContainerSlot.first, *equippedItem, contextId ) );
|
||||
server.queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), slot, Common::GearSet0, contextId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), freeContainerSlot.second, freeContainerSlot.first, *equippedItem, contextId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), std::make_shared< UpdateInventorySlotPacket >( player.getId(), slot, Common::GearSet0, contextId ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -682,14 +655,14 @@ void Sapphire::Network::GameConnection::gearSetEquip( const Packets::FFXIVARR_PA
|
|||
|
||||
if( packet.data().contextId < 0xFE )
|
||||
{
|
||||
server.queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), Network::ActorControl::GearSetEquipMsg, packet.data().contextId ) );
|
||||
server().queueForPlayer( player.getCharacterId(), makeActorControlSelf( player.getId(), Network::ActorControl::GearSetEquipMsg, packet.data().contextId ) );
|
||||
}
|
||||
|
||||
auto invTransFinPacket = makeZonePacket< FFXIVIpcItemOperationBatch >( player.getId() );
|
||||
invTransFinPacket->data().contextId = contextId;
|
||||
invTransFinPacket->data().operationId = contextId;
|
||||
invTransFinPacket->data().operationType = ITEM_OPERATION_TYPE::ITEM_OPERATION_TYPE_UPDATEITEM;
|
||||
server.queueForPlayer( player.getCharacterId(), invTransFinPacket );
|
||||
server().queueForPlayer( player.getCharacterId(), invTransFinPacket );
|
||||
}
|
||||
|
||||
void Sapphire::Network::GameConnection::marketBoardRequestItemInfo( const Packets::FFXIVARR_PACKET_RAW& inPacket, Entity::Player& player )
|
||||
|
|
|
@ -41,9 +41,9 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
|||
std::memcpy( &m_data.CalcResult.CalcResultCt[ m_sourceEffectCount++ ], &effect, sizeof( Common::CalcResultParam ) );
|
||||
}
|
||||
|
||||
void setAnimationId( uint16_t animationId )
|
||||
void setActionId( uint16_t actionId )
|
||||
{
|
||||
m_data.Action = animationId;
|
||||
m_data.Action = actionId;
|
||||
}
|
||||
|
||||
void setDisplayType( Common::ActionEffectDisplayType displayType )
|
||||
|
|
|
@ -46,7 +46,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
|||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
m_data.numOfArgs = static_cast< uint8_t >( args.size() );
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
|
@ -64,7 +64,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
|||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
m_data.numOfArgs = static_cast< uint8_t >( args.size() );
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
|
@ -82,7 +82,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
|||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
m_data.numOfArgs = static_cast< uint8_t >( args.size() );
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
|
@ -100,7 +100,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
|||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
m_data.numOfArgs = static_cast< uint8_t >( args.size() );
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
|
@ -118,7 +118,7 @@ namespace Sapphire::Network::Packets::WorldPackets::Server
|
|||
{
|
||||
m_data.handlerId = directorId;
|
||||
m_data.messageId = msgId;
|
||||
m_data.numOfArgs = args.size();
|
||||
m_data.numOfArgs = static_cast< uint8_t >( args.size() );
|
||||
std::copy( args.begin(), args.end(), m_data.args );
|
||||
};
|
||||
};
|
||||
|
|
|
@ -45,15 +45,7 @@ void ActionIntegrityTask::execute()
|
|||
data.ResultId = m_resultId;
|
||||
data.Target = m_pTarget->getId();
|
||||
|
||||
|
||||
for( auto& charId : inRangePlayers )
|
||||
{
|
||||
auto pPlayer = server.getPlayer( charId );
|
||||
Logger::debug( "Sending to {}", charId );
|
||||
integrityPacket->setTargetActor( pPlayer->getId() );
|
||||
|
||||
server.queueForPlayer( charId, integrityPacket );
|
||||
}
|
||||
server.queueForPlayers( inRangePlayers, integrityPacket );
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
#include <Logging/Logger.h>
|
||||
#include <Actor/BNpc.h>
|
||||
#include <Manager/TerritoryMgr.h>
|
||||
#include <Manager/MgrUtil.h>
|
||||
#include "WorldServer.h"
|
||||
#include <Service.h>
|
||||
|
||||
#include <Territory/Territory.h>
|
||||
|
@ -12,6 +14,7 @@
|
|||
#include <Network/PacketWrappers/ActorControlPacket.h>
|
||||
|
||||
using namespace Sapphire::World;
|
||||
using namespace Sapphire::World::Manager;
|
||||
using namespace Sapphire::Network::ActorControl;
|
||||
using namespace Sapphire::Network::Packets::WorldPackets::Server;
|
||||
|
||||
|
@ -28,15 +31,14 @@ void FadeBNpcTask::onQueue()
|
|||
|
||||
void FadeBNpcTask::execute()
|
||||
{
|
||||
|
||||
auto& teriMgr = Common::Service< World::Manager::TerritoryMgr >::ref();
|
||||
auto pZone = teriMgr.getTerritoryByGuId( m_pBNpc->getTerritoryId() );
|
||||
|
||||
if( !pZone )
|
||||
return;
|
||||
|
||||
m_pBNpc->sendToInRangeSet( makeActorControl( m_pBNpc->getId(), ActorControlType::DeadFadeOut, 0, 0, 0 ) );
|
||||
|
||||
auto inRangePlayerIds = m_pBNpc->getInRangePlayerIds();
|
||||
server().queueForPlayers( inRangePlayerIds, makeActorControl( m_pBNpc->getId(), ActorControlType::DeadFadeOut, 0, 0, 0 ) );
|
||||
}
|
||||
|
||||
std::string FadeBNpcTask::toString()
|
||||
|
|
|
@ -40,8 +40,13 @@ void MoveTerritoryTask::execute()
|
|||
if( !pPlayer )
|
||||
return;
|
||||
|
||||
pPlayer->sendToInRangeSet( makeActorControlSelf( pPlayer->getId(), WarpStart, m_warpInfo.m_warpType, 1, 0, m_warpInfo.m_targetTerritoryId, 1 ), true );
|
||||
pPlayer->sendToInRangeSet( makeActorControl( pPlayer->getId(), ActorDespawnEffect, m_warpInfo.m_warpType, m_warpInfo.m_targetTerritoryId ) );
|
||||
auto inRangePlayerIds = pPlayer->getInRangePlayerIds();
|
||||
|
||||
auto warpStart = makeActorControlSelf( pPlayer->getId(), WarpStart, m_warpInfo.m_warpType, 1, 0, m_warpInfo.m_targetTerritoryId, 1 );
|
||||
server.queueForPlayers( inRangePlayerIds, warpStart );
|
||||
server.queueForPlayer( pPlayer->getCharacterId(), warpStart );
|
||||
server.queueForPlayers( inRangePlayerIds, makeActorControl( pPlayer->getId(), ActorDespawnEffect, m_warpInfo.m_warpType, m_warpInfo.m_targetTerritoryId ) );
|
||||
|
||||
Common::Service< PlayerMgr >::ref().onSetStateFlag( *pPlayer, Common::PlayerStateFlag::BetweenAreas );
|
||||
|
||||
auto moveTerritoryPacket = makeZonePacket< WorldPackets::Server::FFXIVIpcMoveTerritory >( pPlayer->getId() );
|
||||
|
|
|
@ -31,8 +31,12 @@ void WarpTask::execute()
|
|||
auto pPlayer = server.getPlayer( m_playerId );
|
||||
if( !pPlayer )
|
||||
return;
|
||||
|
||||
pPlayer->sendToInRangeSet( makeWarp( pPlayer->getId(), m_warpInfo.m_warpType, m_warpInfo.m_targetPos, m_warpInfo.m_targetRot ), true );
|
||||
|
||||
auto inRangePlayerIds = pPlayer->getInRangePlayerIds();
|
||||
auto warpPacket = makeWarp( pPlayer->getId(), m_warpInfo.m_warpType, m_warpInfo.m_targetPos, m_warpInfo.m_targetRot );
|
||||
server.queueForPlayers( inRangePlayerIds, warpPacket );
|
||||
server.queueForPlayer( pPlayer->getCharacterId(), warpPacket );
|
||||
|
||||
pPlayer->setPos( m_warpInfo.m_targetPos, false );
|
||||
}
|
||||
|
||||
|
|
|
@ -225,7 +225,7 @@ void Sapphire::HousingZone::sendLandSet( Entity::Player& player )
|
|||
server.queueForPlayer( player.getCharacterId(), landsetInitializePacket );
|
||||
}
|
||||
|
||||
void Sapphire::HousingZone::sendLandUpdate( uint8_t landId )
|
||||
void Sapphire::HousingZone::sendLandUpdate( uint16_t landId )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto pLand = getLand( landId );
|
||||
|
@ -282,7 +282,7 @@ uint32_t Sapphire::HousingZone::getLandSetId() const
|
|||
return m_landSetId;
|
||||
}
|
||||
|
||||
Sapphire::LandPtr Sapphire::HousingZone::getLand( uint8_t id )
|
||||
Sapphire::LandPtr Sapphire::HousingZone::getLand( uint16_t id )
|
||||
{
|
||||
auto it = m_landPtrMap.find( id );
|
||||
if( it == m_landPtrMap.end() )
|
||||
|
@ -291,7 +291,7 @@ Sapphire::LandPtr Sapphire::HousingZone::getLand( uint8_t id )
|
|||
return it->second;
|
||||
}
|
||||
|
||||
Sapphire::Entity::EventObjectPtr Sapphire::HousingZone::registerEstateEntranceEObj( uint8_t landId )
|
||||
Sapphire::Entity::EventObjectPtr Sapphire::HousingZone::registerEstateEntranceEObj( uint16_t landId )
|
||||
{
|
||||
auto land = getLand( landId );
|
||||
assert( land );
|
||||
|
@ -332,7 +332,7 @@ Sapphire::Entity::EventObjectPtr Sapphire::HousingZone::registerEstateEntranceEO
|
|||
return eObj;
|
||||
}
|
||||
|
||||
void Sapphire::HousingZone::removeEstateEntranceEObj( uint8_t landId )
|
||||
void Sapphire::HousingZone::removeEstateEntranceEObj( uint16_t landId )
|
||||
{
|
||||
auto land = getLand( landId );
|
||||
assert( land );
|
||||
|
@ -369,7 +369,7 @@ void Sapphire::HousingZone::updateYardObjects( Sapphire::Common::LandIdent ident
|
|||
}
|
||||
}
|
||||
|
||||
void Sapphire::HousingZone::spawnYardObject( uint8_t landId, uint16_t slotId, Inventory::HousingItem& item )
|
||||
void Sapphire::HousingZone::spawnYardObject( uint16_t landId, uint16_t slotId, Inventory::HousingItem& item )
|
||||
{
|
||||
auto& server = Common::Service< World::WorldServer >::ref();
|
||||
auto bounds = m_yardObjectArrayBounds[ landId ];
|
||||
|
|
|
@ -39,7 +39,7 @@ namespace Sapphire
|
|||
void onUpdate( uint64_t tickCount ) override;
|
||||
|
||||
void sendLandSet( Entity::Player& player );
|
||||
void sendLandUpdate( uint8_t landId );
|
||||
void sendLandUpdate( uint16_t landId );
|
||||
bool isPlayerSubInstance( Entity::Player& player );
|
||||
|
||||
bool onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId );
|
||||
|
@ -48,19 +48,19 @@ namespace Sapphire
|
|||
uint8_t getWardNum() const;
|
||||
|
||||
uint32_t getLandSetId() const;
|
||||
Sapphire::LandPtr getLand( uint8_t id );
|
||||
Sapphire::LandPtr getLand( uint16_t id );
|
||||
|
||||
Entity::EventObjectPtr registerEstateEntranceEObj( uint8_t landId );
|
||||
void removeEstateEntranceEObj( uint8_t landId );
|
||||
Entity::EventObjectPtr registerEstateEntranceEObj( uint16_t landId );
|
||||
void removeEstateEntranceEObj( uint16_t landId );
|
||||
|
||||
void updateYardObjects( Common::LandIdent ident );
|
||||
void spawnYardObject( uint8_t landId, uint16_t slotId, Sapphire::Inventory::HousingItem& item );
|
||||
void spawnYardObject( uint16_t landId, uint16_t slotId, Sapphire::Inventory::HousingItem& item );
|
||||
void updateYardObjectPos( Entity::Player& sourcePlayer, uint16_t slot, uint16_t landId,
|
||||
Inventory::HousingItem& item );
|
||||
void despawnYardObject( uint16_t landId, uint16_t slot );
|
||||
|
||||
private:
|
||||
using LandPtrMap = std::unordered_map< uint8_t, Sapphire::LandPtr >;
|
||||
using LandPtrMap = std::unordered_map< uint16_t, Sapphire::LandPtr >;
|
||||
|
||||
/*! @brief global storage for all yard items in the ward */
|
||||
using YardObjectArray = std::array< Common::Furniture, 1200 >;
|
||||
|
|
|
@ -688,7 +688,15 @@ void WorldServer::queueForPlayer( uint64_t characterId, Sapphire::Network::Packe
|
|||
auto pZoneCon = pSession->getZoneConnection();
|
||||
if( pZoneCon )
|
||||
pZoneCon->queueOutPacket( pPacket );
|
||||
}
|
||||
|
||||
void WorldServer::queueForPlayers( const std::set< uint64_t >& characterIds, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket )
|
||||
{
|
||||
if( characterIds.empty() )
|
||||
return;
|
||||
|
||||
for( auto& characterId : characterIds )
|
||||
queueForPlayer( characterId, pPacket );
|
||||
}
|
||||
|
||||
void WorldServer::queueForPlayer( uint64_t characterId, std::vector< Sapphire::Network::Packets::FFXIVPacketBasePtr > packets )
|
||||
|
@ -705,6 +713,15 @@ void WorldServer::queueForPlayer( uint64_t characterId, std::vector< Sapphire::N
|
|||
}
|
||||
}
|
||||
|
||||
void WorldServer::queueForPlayers( const std::set< uint64_t >& characterIds, std::vector< Sapphire::Network::Packets::FFXIVPacketBasePtr > packets )
|
||||
{
|
||||
for( auto& characterId : characterIds )
|
||||
for( auto& packet : packets )
|
||||
{
|
||||
queueForPlayer( characterId, packet );
|
||||
}
|
||||
}
|
||||
|
||||
void WorldServer::queueForLinkshell( uint64_t lsId, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket, std::set< uint64_t > exceptionCharIdList )
|
||||
{
|
||||
auto lsMgr = Common::Service< Manager::LinkshellMgr >::ref();
|
||||
|
|
|
@ -52,7 +52,9 @@ namespace Sapphire::World
|
|||
std::string getPlayerNameFromDb( uint64_t characterId, bool forceDbLoad = false );
|
||||
|
||||
void queueForPlayer( uint64_t characterId, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket );
|
||||
void queueForPlayers( const std::set< uint64_t >& characterIds, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket );
|
||||
void queueForPlayer( uint64_t characterId, std::vector< Sapphire::Network::Packets::FFXIVPacketBasePtr > packets );
|
||||
void queueForPlayers( const std::set< uint64_t >& characterIds, std::vector< Sapphire::Network::Packets::FFXIVPacketBasePtr > packets );
|
||||
|
||||
void queueForLinkshell( uint64_t lsId, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket, std::set< uint64_t > exceptionCharIdList = {} );
|
||||
void queueForFreeCompany( uint64_t fcId, Sapphire::Network::Packets::FFXIVPacketBasePtr pPacket, std::set< uint64_t > exceptionCharIdList = {} );
|
||||
|
|
Loading…
Add table
Reference in a new issue