From 33429a02848f993381a642ea1cf5f693446272d9 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 5 Mar 2018 22:40:11 +1100 Subject: [PATCH] better handling of EventStart IPC for instances --- src/common/Network/PacketDef/Zone/ServerZoneDef.h | 2 +- src/servers/sapphire_zone/Actor/Player.h | 2 +- src/servers/sapphire_zone/Actor/PlayerEvent.cpp | 4 ++-- .../sapphire_zone/Network/Handlers/EventHandlers.cpp | 12 +++++++++++- .../Network/PacketWrappers/EventStartPacket.h | 9 ++++++--- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/common/Network/PacketDef/Zone/ServerZoneDef.h b/src/common/Network/PacketDef/Zone/ServerZoneDef.h index 071ebc50..4cd5349b 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 padding1; + /* 0014 */ uint32_t contentId; }; diff --git a/src/servers/sapphire_zone/Actor/Player.h b/src/servers/sapphire_zone/Actor/Player.h index 0bf3bf15..39806a55 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 ); + void eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventParam, uint8_t eventParam1, uint32_t eventParam2, uint32_t contentId = 0 ); /*! play a subevent */ void eventPlay( uint32_t eventId, uint32_t scene, uint32_t flags, uint32_t eventParam2, uint32_t eventParam3 ); /*! play a subevent */ diff --git a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp index b0ba4679..c9f25c82 100644 --- a/src/servers/sapphire_zone/Actor/PlayerEvent.cpp +++ b/src/servers/sapphire_zone/Actor/PlayerEvent.cpp @@ -77,7 +77,7 @@ void Core::Entity::Player::checkEvent( uint32_t eventId ) void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId, Event::EventHandler::EventType eventType, uint8_t eventParam1, - uint32_t eventParam2 ) + uint32_t eventParam2, uint32_t contentId ) { auto newEvent = Event::make_EventHandler( this, actorId, eventId, eventType, eventParam2 ); @@ -86,7 +86,7 @@ void Core::Entity::Player::eventStart( uint64_t actorId, uint32_t eventId, setStateFlag( PlayerStateFlag::InNpcEvent ); - EventStartPacket eventStart( getId(), actorId, eventId, eventType, eventParam1, eventParam2 ); + EventStartPacket eventStart( getId(), actorId, eventId, eventType, eventParam1, eventParam2, contentId ); queuePacket( eventStart ); diff --git a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp index 59fb2e3a..a04288b9 100644 --- a/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp +++ b/src/servers/sapphire_zone/Network/Handlers/EventHandlers.cpp @@ -158,12 +158,22 @@ void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::G player.sendDebug( "Calling: " + objName + "." + eventName + " - " + std::to_string( eventId ) ); - player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId() ); + player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId(), 0 ); if( auto instance = player.getCurrentInstance() ) + { + // param2 of eventStart + // 0 = default state? + // 1 = restore state? + + player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId(), instance->getDirectorId() & 0xFFFF ); instance->onEnterTerritory( player, eventId, param1, param2 ); + } else + { + player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId() ); g_scriptMgr.onEnterTerritory( player, eventId, param1, param2 ); + } player.checkEvent( eventId ); } diff --git a/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h b/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h index 2109c856..963c138f 100644 --- a/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h +++ b/src/servers/sapphire_zone/Network/PacketWrappers/EventStartPacket.h @@ -20,10 +20,11 @@ public: uint32_t eventId, uint8_t param1 = 0, uint8_t param2 = 0, - uint32_t param3 = 0 ) : + uint32_t param3 = 0, + uint32_t contentId = 0 ) : ZoneChannelPacket< FFXIVIpcEventStart >( playerId, playerId ) { - initialize( actorId, eventId, param1, param2, param3 ); + initialize( actorId, eventId, param1, param2, param3, contentId ); }; private: @@ -31,13 +32,15 @@ private: uint32_t eventId, uint8_t param1, uint8_t param2, - uint32_t param3 ) + uint32_t param3, + uint32_t contentId ) { m_data.actorId = actorId; m_data.eventId = eventId; m_data.param1 = param1; m_data.param2 = param2; m_data.param3 = param3; + m_data.contentId = contentId; }; };