1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-08 03:37:45 +00:00

warpmgr vfx; get threadcount for nav export;

This commit is contained in:
Alice Ogeda 2023-02-10 23:13:00 -03:00
parent a55e912d9f
commit 62136f66a7
5 changed files with 46 additions and 33 deletions

View file

@ -34,7 +34,7 @@ using namespace Sapphire;
// garbage to ignore models // garbage to ignore models
bool noObj = false; bool noObj = false;
std::string gamePath( "H:\\Games\\ffxiv3.05\\game\\sqpack" ); std::string gamePath( "C:\\Data\\Dev\\ffxiv3.35\\game\\sqpack" );
std::unordered_map< uint16_t, std::string > zoneNameMap; std::unordered_map< uint16_t, std::string > zoneNameMap;
std::map< std::string, std::string > exportedTeriMap; std::map< std::string, std::string > exportedTeriMap;
@ -311,7 +311,7 @@ int main( int argc, char* argv[] )
bool generateNavmesh = true; bool generateNavmesh = true;
bool dumpAllZones = true; bool dumpAllZones = true;
int nJobs = 4; int nJobs = std::thread::hardware_concurrency();
int exportFileType = 0; int exportFileType = 0;
if( !noObj ) if( !noObj )

View file

@ -474,7 +474,7 @@ void DebugCommandMgr::add( char* data, Entity::Player& player, std::shared_ptr<
actorControl->data().param2 = param2; actorControl->data().param2 = param2;
actorControl->data().param3 = param3; actorControl->data().param3 = param3;
actorControl->data().param4 = param4; actorControl->data().param4 = param4;
pSession->getZoneConnection()->queueOutPacket( actorControl ); player.sendToInRangeSet( actorControl, true );
/*sscanf(params.c_str(), "%x %x %x %x %x %x %x", &opcode, &param1, &param2, &param3, &param4, &param5, &param6, &playerId); /*sscanf(params.c_str(), "%x %x %x %x %x %x %x", &opcode, &param1, &param2, &param3, &param4, &param5, &param6, &playerId);

View file

@ -45,34 +45,18 @@ void WarpMgr::requestMoveTerritory( Entity::Player& player, Common::WarpType war
m_entityIdToWarpInfoMap[ player.getId() ] = { targetTerritoryId, warpType, targetPos, targetRot }; m_entityIdToWarpInfoMap[ player.getId() ] = { targetTerritoryId, warpType, targetPos, targetRot };
player.updatePrevTerritory(); player.updatePrevTerritory();
player.sendToInRangeSet( makeActorControl( player.getId(), WarpStart, warpType, 1, pTeri->getTerritoryTypeId() ), true );
player.sendToInRangeSet( makeActorControl( player.getId(), ActorDespawnEffect, warpType ) );
Common::Service< PlayerMgr >::ref().onSetStateFlag( player, PlayerStateFlag::BetweenAreas );
auto moveTerritoryPacket = makeZonePacket< FFXIVIpcMoveTerritory >( player.getId() );
moveTerritoryPacket->data().index = -1;
moveTerritoryPacket->data().territoryType = pTeri->getTerritoryTypeId();
moveTerritoryPacket->data().zoneId = player.getTerritoryTypeId();
moveTerritoryPacket->data().worldId = server.getWorldId();
moveTerritoryPacket->data().worldId1 = server.getWorldId();
moveTerritoryPacket->data().landId = -1;
moveTerritoryPacket->data().landSetId = -1;
moveTerritoryPacket->data().landTerritoryId = -1;
strcpy( moveTerritoryPacket->data().worldName, "Sapphire" );
server.queueForPlayer( player.getCharacterId(), moveTerritoryPacket );
// create warp task // create warp task
auto& taskMgr = Common::Service< TaskMgr >::ref(); auto& taskMgr = Common::Service< TaskMgr >::ref();
taskMgr.queueTask( makeMoveTerritoryTask( player, warpType, targetTerritoryId, targetPos, targetRot, 2000 ) ); taskMgr.queueTask( makeMoveTerritoryTask( player, warpType, targetTerritoryId, targetPos, targetRot, 1000 ) );
} }
void WarpMgr::requestWarp( Entity::Player& player, Common::WarpType warpType, Common::FFXIVARR_POSITION3 targetPos, float targetRot ) void WarpMgr::requestWarp( Entity::Player& player, Common::WarpType warpType, Common::FFXIVARR_POSITION3 targetPos, float targetRot )
{ {
m_entityIdToWarpInfoMap[ player.getId() ] = { 0, warpType, targetPos, targetRot }; m_entityIdToWarpInfoMap[ player.getId() ] = { 0, warpType, targetPos, targetRot };
player.sendToInRangeSet( makeActorControl( player.getId(), WarpStart, warpType, 1, 0, player.getTerritoryTypeId(), 1 ), true ); player.sendToInRangeSet( makeActorControlSelf( player.getId(), WarpStart, warpType, warpType, 0, player.getTerritoryTypeId(), 1 ), true );
player.sendToInRangeSet( makeActorControl( player.getId(), ActorDespawnEffect, warpType ) ); player.sendToInRangeSet( makeActorControl( player.getId(), ActorDespawnEffect, warpType, player.getTerritoryTypeId() ) );
auto& taskMgr = Common::Service< TaskMgr >::ref(); auto& taskMgr = Common::Service< TaskMgr >::ref();
taskMgr.queueTask( makeWarpTask( player, warpType, targetPos, targetRot, 1000 ) ); taskMgr.queueTask( makeWarpTask( player, warpType, targetPos, targetRot, 1000 ) );
@ -87,35 +71,37 @@ void WarpMgr::finishWarp( Entity::Player& player )
if( it != m_entityIdToWarpInfoMap.end() ) if( it != m_entityIdToWarpInfoMap.end() )
warpType = it->second.m_warpType; warpType = it->second.m_warpType;
uint32_t vfxType = 0; // seems to only be used for raise animation? bool raiseAnim = player.getStatus() == Common::ActorStatus::Dead ? 1 : 0;
switch( warpType ) switch( warpType )
{ {
case WarpType::WARP_TYPE_REISE: case WarpType::WARP_TYPE_REISE:
case WarpType::WARP_TYPE_HOME_POINT: case WarpType::WARP_TYPE_HOME_POINT:
case WarpType::WARP_TYPE_EXIT_RANGE:
{ {
if( player.getStatus() == Common::ActorStatus::Dead ) if( player.getStatus() == Common::ActorStatus::Dead )
{ {
player.resetHp(); player.resetHp();
player.resetMp(); player.resetMp();
player.setStatus( Common::ActorStatus::Idle ); player.setStatus( Common::ActorStatus::Idle );
vfxType = 1;
} }
} }
} }
auto zoneInPacket = makeActorControlSelf( player.getId(), Appear, warpType, vfxType, 0, 0 ); auto warpFinishAnim = warpType - 1;
auto zoneInPacket = makeActorControlSelf( player.getId(), Appear, warpFinishAnim, raiseAnim, 0, 0 );
auto setStatusPacket = makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) ); auto setStatusPacket = makeActorControl( player.getId(), SetStatus, static_cast< uint8_t >( Common::ActorStatus::Idle ) );
player.setZoningType( Common::ZoningType::None ); player.setZoningType( Common::ZoningType::None );
if( !player.getGmInvis() ) if( !player.getGmInvis() )
player.sendToInRangeSet( zoneInPacket ); player.sendToInRangeSet( zoneInPacket );
player.sendToInRangeSet( setStatusPacket, true );
auto& server = Common::Service< WorldServer >::ref(); auto& server = Common::Service< WorldServer >::ref();
server.queueForPlayer( player.getCharacterId(), zoneInPacket ); server.queueForPlayer( player.getCharacterId(), zoneInPacket );
player.sendToInRangeSet( setStatusPacket, true );
playerMgr.onUnsetStateFlag( player, PlayerStateFlag::BetweenAreas ); playerMgr.onUnsetStateFlag( player, PlayerStateFlag::BetweenAreas );
} }
@ -169,12 +155,12 @@ void WarpMgr::requestPlayerTeleport( Entity::Player& player, uint16_t aetheryteI
} }
else if( teleportType == 3 ) // return else if( teleportType == 3 ) // return
{ {
warpType = WarpType::WARP_TYPE_HOME_POINT; warpType = WarpType::WARP_TYPE_EXIT_RANGE;
player.setZoningType( Common::ZoningType::Return ); player.setZoningType( Common::ZoningType::Return );
} }
else if( teleportType == 4 ) // return else if( teleportType == 4 ) // return dead
{ {
warpType = WarpType::WARP_TYPE_REISE; warpType = WarpType::WARP_TYPE_EXIT_RANGE;
player.setZoningType( Common::ZoningType::ReturnDead ); player.setZoningType( Common::ZoningType::ReturnDead );
} }

View file

@ -6,9 +6,20 @@
#include <Service.h> #include <Service.h>
#include <Manager/TerritoryMgr.h> #include <Manager/TerritoryMgr.h>
#include <Manager/PlayerMgr.h>
#include <Network/PacketContainer.h>
#include <Network/PacketDef/Zone/ServerZoneDef.h>
#include <Network/CommonActorControl.h>
#include <Network/PacketWrappers/ActorControlSelfPacket.h>
#include <Network/PacketWrappers/ActorControlPacket.h>
using namespace Sapphire::World; using namespace Sapphire::World;
using namespace Sapphire::World::Manager; using namespace Sapphire::World::Manager;
using namespace Sapphire::Common;
using namespace Sapphire::Network::ActorControl;
using namespace Sapphire::Network::Packets;
using namespace Sapphire::Network::Packets::WorldPackets::Server;
MoveTerritoryTask::MoveTerritoryTask( Entity::Player& player, Common::WarpType warpType, MoveTerritoryTask::MoveTerritoryTask( Entity::Player& player, Common::WarpType warpType,
uint32_t targetTerritoryId, Common::FFXIVARR_POSITION3 targetPos, float targetRot, uint64_t delayTime ) : Task( delayTime ) uint32_t targetTerritoryId, Common::FFXIVARR_POSITION3 targetPos, float targetRot, uint64_t delayTime ) : Task( delayTime )
@ -29,6 +40,22 @@ void MoveTerritoryTask::execute()
if( !pPlayer ) if( !pPlayer )
return; 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 ) );
Common::Service< PlayerMgr >::ref().onSetStateFlag( *pPlayer, Common::PlayerStateFlag::BetweenAreas );
auto moveTerritoryPacket = makeZonePacket< WorldPackets::Server::FFXIVIpcMoveTerritory >( pPlayer->getId() );
moveTerritoryPacket->data().index = -1;
moveTerritoryPacket->data().territoryType = m_warpInfo.m_targetTerritoryId;
moveTerritoryPacket->data().zoneId = pPlayer->getTerritoryTypeId();
moveTerritoryPacket->data().worldId = server.getWorldId();
moveTerritoryPacket->data().worldId1 = server.getWorldId();
moveTerritoryPacket->data().landId = -1;
moveTerritoryPacket->data().landSetId = -1;
moveTerritoryPacket->data().landTerritoryId = -1;
strcpy( moveTerritoryPacket->data().worldName, "Sapphire" );
server.queueForPlayer( pPlayer->getCharacterId(), moveTerritoryPacket );
pPlayer->setPos( m_warpInfo.m_targetPos, false ); pPlayer->setPos( m_warpInfo.m_targetPos, false );
pPlayer->setRot( m_warpInfo.m_targetRot ); pPlayer->setRot( m_warpInfo.m_targetRot );

View file

@ -31,9 +31,9 @@ void WarpTask::execute()
auto pPlayer = server.getPlayer( m_playerId ); auto pPlayer = server.getPlayer( m_playerId );
if( !pPlayer ) if( !pPlayer )
return; return;
pPlayer->setPos( m_warpInfo.m_targetPos, false );
pPlayer->sendToInRangeSet( makeWarp( pPlayer->getId(), m_warpInfo.m_warpType, m_warpInfo.m_targetPos, m_warpInfo.m_targetRot ), true ); pPlayer->sendToInRangeSet( makeWarp( pPlayer->getId(), m_warpInfo.m_warpType, m_warpInfo.m_targetPos, m_warpInfo.m_targetRot ), true );
pPlayer->setPos( m_warpInfo.m_targetPos, false );
} }
std::string WarpTask::toString() std::string WarpTask::toString()