From 855ae3e9616a1ba0c02186c20dfbbf5cde8fb68c Mon Sep 17 00:00:00 2001 From: Mordred Date: Mon, 12 Mar 2018 23:51:17 +0100 Subject: [PATCH] Instance join cutscene will no longer mess up the player, removed wrong field from event start, cotire server_zone only when using linux --- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 5 +++-- src/servers/Scripts/instances/dungeons/Sastasha.cpp | 2 +- src/servers/sapphire_zone/Actor/Player.h | 2 +- src/servers/sapphire_zone/Actor/PlayerEvent.cpp | 4 ++-- src/servers/sapphire_zone/CMakeLists.txt | 4 +++- .../Network/Handlers/EventHandlers.cpp | 2 +- .../PacketWrappers/DirectorPlayScenePacket.h | 13 +++++++++++++ .../Network/PacketWrappers/EventStartPacket.h | 9 +++------ 8 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index a5ffa9b5..b6b2bcd8 100644 --- a/src/common/Network/PacketDef/Zone/ServerZoneDef.h +++ b/src/common/Network/PacketDef/Zone/ServerZoneDef.h @@ -999,7 +999,7 @@ struct FFXIVIpcEventStart : FFXIVIpcBasePacket /* 000D */ uint8_t param2; /* 000E */ uint16_t padding; /* 0010 */ uint32_t param3; - /* 0014 */ uint32_t contentId; + /* 0014 */ uint32_t padding1; }; @@ -1036,7 +1036,8 @@ struct FFXIVIpcDirectorPlayScene : FFXIVIpcBasePacket uint8_t param4; uint8_t padding1[3]; uint32_t param5; - uint8_t unknown[0x40]; + uint8_t unknown8[0x08]; + uint8_t unknown[0x38]; }; /** diff --git a/src/servers/Scripts/instances/dungeons/Sastasha.cpp b/src/servers/Scripts/instances/dungeons/Sastasha.cpp index 9a2d1377..63ef7181 100644 --- a/src/servers/Scripts/instances/dungeons/Sastasha.cpp +++ b/src/servers/Scripts/instances/dungeons/Sastasha.cpp @@ -71,7 +71,7 @@ public: void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { - player.directorPlayScene( getId(), 1, NO_DEFAULT_CAMERA | HIDE_HOTBAR, 0, 0xA ); + player.directorPlayScene( getId(), 1, NO_DEFAULT_CAMERA | HIDE_HOTBAR | CONDITION_CUTSCENE, 0, 0xA ); } }; \ No newline at end of file diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index 7ae38c98..df59c2a9 100644 --- a/src/servers/sapphire_zone/Actor/Player.h +++ b/src/servers/sapphire_zone/Actor/Player.h @@ -54,7 +54,7 @@ public: /*! start an event item action */ void eventItemActionStart( uint32_t eventId, uint32_t action, ActionCallback finishCallback, ActionCallback interruptCallback, uint64_t additional ); /*! start/register a normal event */ - void eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventParam, uint8_t eventParam1, uint32_t eventParam2, uint32_t contentId = 0 ); + void eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventParam, uint8_t eventParam1, uint32_t eventParam2 ); /*! play a subevent */ void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3 ); diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index 9ebdbcd2..411430a3 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -99,7 +99,7 @@ void Core::Entity::Player::directorPlayScene( uint32_t eventId, uint32_t scene, void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventType, uint8_t eventParam1, - uint32_t eventParam2, uint32_t contentId ) + uint32_t eventParam2 ) { auto newEvent = Event::make_EventHandler( this, actorId, eventId, eventType, eventParam2 ); @@ -108,7 +108,7 @@ void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId, setStateFlag( PlayerStateFlag::InNpcEvent ); - EventStartPacket eventStart( getId(), actorId, eventId, eventType, eventParam1, eventParam2, contentId ); + EventStartPacket eventStart( getId(), actorId, eventId, eventType, eventParam1, eventParam2 ); queuePacket( eventStart ); diff --git a/src/servers/sapphire_zone/CMakeLists.txt b/src/servers/sapphire_zone/CMakeLists.txt index bf1f2ea6..9e4e7c0c 100644 --- a/src/servers/sapphire_zone/CMakeLists.txt +++ b/src/servers/sapphire_zone/CMakeLists.txt @@ -67,4 +67,6 @@ target_link_libraries( sapphire_zone ${Boost_LIBRARIES} ) target_include_directories( sapphire_zone PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}" ) target_include_directories( sapphire_zone PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/Script" ) target_include_directories( sapphire_zone PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../../libraries/external" ) -#cotire( sapphire_zone ) +if (UNIX) + cotire( sapphire_zone ) +endif() diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index 32dfaba5..77ead826 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -170,7 +170,7 @@ void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::G if( auto instance = player.getCurrentInstance() ) { - player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId(), instance->getDirectorId() & 0xFFFF ); + player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 1, player.getZoneId() ); instance->onEnterTerritory( player, eventId, param1, param2 ); } else diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/DirectorPlayScenePacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/DirectorPlayScenePacket.h index 05e2773e..6b61050b 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/DirectorPlayScenePacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/DirectorPlayScenePacket.h @@ -44,6 +44,19 @@ private: m_data.param3 = param3; m_data.param4 = param4; m_data.param5 = param5; + m_data.unknown[0] = 0x05; + m_data.unknown[4] = 0x22; + m_data.unknown[5] = 0xD6; + m_data.unknown[6] = 0x62; + m_data.unknown[7] = 0x59; + m_data.unknown[0x14] = 0x08; + m_data.unknown[0x15] = 0x02; + + m_data.unknown[0x18] = 0x19; + m_data.unknown[0x19] = 0x14; + m_data.unknown[0x1C] = 0x23; + m_data.unknown[0x20] = 0x40; + m_data.unknown[0x24] = 0x80; }; }; diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h index 5b5b282e..2058a593 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h @@ -20,11 +20,10 @@ public: uint32_t eventId, uint8_t param1 = 0, uint8_t param2 = 0, - uint32_t param3 = 0, - uint32_t contentId = 0 ) : + uint32_t param3 = 0 ) : ZoneChannelPacket< FFXIVIpcEventStart >( playerId, playerId ) { - initialize( actorId, eventId, param1, param2, param3, contentId ); + initialize( actorId, eventId, param1, param2, param3 ); }; private: @@ -32,15 +31,13 @@ private: uint32_t eventId, uint8_t param1, uint8_t param2, - uint32_t param3, - uint32_t contentId ) + uint32_t param3 ) { m_data.actorId = actorId; m_data.eventId = eventId; m_data.param1 = param1; m_data.param2 = param2; m_data.param3 = param3; - m_data.contentId = contentId; }; };