From 0eeeb020eb5adaf426a9e9f05134cba3b97de7ea Mon Sep 17 00:00:00 2001 From: Mordred Date: Wed, 30 Aug 2017 23:08:10 +0200 Subject: [PATCH] Fixed teleports instantly fading out without showing any animation on finish --- scripts/chai/quest/ManSea001.chai | 2 +- .../Network/PacketDef/Zone/ServerZoneDef.h | 6 ++++-- src/servers/Server_Zone/Actor/Player.cpp | 14 ++++++++------ src/servers/Server_Zone/Actor/Player.h | 2 +- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/scripts/chai/quest/ManSea001.chai b/scripts/chai/quest/ManSea001.chai index 75f742d9..c3af3b76 100644 --- a/scripts/chai/quest/ManSea001.chai +++ b/scripts/chai/quest/ManSea001.chai @@ -113,7 +113,7 @@ class ManSea001Def if( param2 == 1 ) { player.questUpdate( ManSea001.id, ManSea001.SEQ_FINISH ); - player.prepareZoning( player.getZoneId(), true ); + player.prepareZoning( player.getZoneId(), true, 1, 0 ); player.changePos( 9, 40, 14, 2 ); } }); diff --git a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h index 0eb965ce..67e7b4bf 100644 --- a/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/servers/Server_Common/Network/PacketDef/Zone/ServerZoneDef.h @@ -1192,12 +1192,14 @@ struct FFXIVIpcPrepareZoning : FFXIVIpcBasePacket { uint32_t logMessage; uint16_t targetZone; - uint16_t param3; + uint16_t animation; uint8_t param4; uint8_t hideChar; uint8_t fadeOut; uint8_t param7; - uint32_t padding; + uint8_t fadeOutTime; + uint8_t unknown; + uint16_t padding; }; /** diff --git a/src/servers/Server_Zone/Actor/Player.cpp b/src/servers/Server_Zone/Actor/Player.cpp index 82ce786a..07db8ed7 100644 --- a/src/servers/Server_Zone/Actor/Player.cpp +++ b/src/servers/Server_Zone/Actor/Player.cpp @@ -176,10 +176,12 @@ uint64_t Core::Entity::Player::getOnlineStatusMask() const return m_onlineStatus; } -void Core::Entity::Player::prepareZoning( uint16_t targetZone, bool fadeOut ) +void Core::Entity::Player::prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadeOutTime, uint16_t animation ) { GamePacketNew< FFXIVIpcPrepareZoning, ServerZoneIpcType > preparePacket( getId() ); preparePacket.data().targetZone = targetZone; + preparePacket.data().fadeOutTime = fadeOutTime; + preparePacket.data().animation = animation; preparePacket.data().fadeOut = fadeOut == true ? 1 : 0; queuePacket( preparePacket ); } @@ -307,31 +309,31 @@ void Core::Entity::Player::teleport( uint16_t aetheryteId, uint8_t type ) // TODO: this should be simplified and a type created in server_common/common.h. if( type == 1 ) // teleport { - prepareZoning( data->target_zone, true ); + prepareZoning( data->target_zone, true, 1, 112 ); sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x04 ) ); setZoningType( Common::ZoneingType::Teleport ); } else if( type == 2 ) // aethernet { - prepareZoning( data->target_zone, true ); + prepareZoning( data->target_zone, true, 1, 112 ); sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x04 ) ); setZoningType( Common::ZoneingType::Teleport ); } else if( type == 3 ) // return { - prepareZoning( data->target_zone, true ); + prepareZoning( data->target_zone, true, 1, 111 ); sendToInRangeSet( ActorControlPacket142( getId(), ActorDespawnEffect, 0x03 ) ); setZoningType( Common::ZoneingType::Return ); } - m_queuedZoneing = boost::make_shared( data->target_zone, pos, Util::getTimeMs(), rot ); + m_queuedZoneing = boost::make_shared< QueuedZoning >( data->target_zone, pos, Util::getTimeMs(), rot ); } } void Core::Entity::Player::forceZoneing( uint32_t zoneId ) { - m_queuedZoneing = boost::make_shared( zoneId, getPos(), Util::getTimeMs(), 0 ); + m_queuedZoneing = boost::make_shared< QueuedZoning >( zoneId, getPos(), Util::getTimeMs(), 0 ); //performZoning( zoneId, Common::ZoneingType::None, getPos() ); } diff --git a/src/servers/Server_Zone/Actor/Player.h b/src/servers/Server_Zone/Actor/Player.h index 1d788213..7b90d726 100644 --- a/src/servers/Server_Zone/Actor/Player.h +++ b/src/servers/Server_Zone/Actor/Player.h @@ -325,7 +325,7 @@ public: /*! perform a teleport of a specified type ( teleport,return,aethernet ) */ void teleport( uint16_t aetheryteId, uint8_t type = 1 ); /*! prepares zoning / fades out the screen */ - void prepareZoning( uint16_t targetZone, bool fadeOut ); + void prepareZoning( uint16_t targetZone, bool fadeOut, uint8_t fadoutTime = 0, uint16_t animation = 0 ); void calculateStats() override; void sendStats();