From c6c22104711d45601a2509d9ef180682581dd642 Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 24 Feb 2018 15:19:32 +0100 Subject: [PATCH] Added onEnterTerritory for IC, also changed the way IC is called --- src/servers/sapphire_zone/Actor/EventObject.cpp | 4 ++-- src/servers/sapphire_zone/Actor/EventObject.h | 2 +- src/servers/sapphire_zone/Event/EventHandler.h | 1 + src/servers/sapphire_zone/Event/EventHelper.cpp | 11 +++++++++++ src/servers/sapphire_zone/Script/NativeScriptApi.h | 4 ++-- src/servers/sapphire_zone/Script/ScriptManager.cpp | 6 +++--- .../Script/Scripts/common/CmnDefInnBed.cpp | 2 +- .../Script/Scripts/instances/trials/TheNavel.cpp | 10 +++++++--- .../Script/Scripts/quest/opening/OpeningGridania.cpp | 2 +- .../Script/Scripts/quest/opening/OpeningLimsa.cpp | 2 +- .../Script/Scripts/quest/opening/OpeningUldah.cpp | 2 +- 11 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/EventObject.cpp b/src/servers/sapphire_zone/Actor/EventObject.cpp index 6a4c4d56..ec901c45 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -19,7 +19,7 @@ extern Core::Logger g_log; Core::Entity::EventObject::EventObject( uint32_t objectId, uint32_t mapLinkId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, - const std::string givenName ) : + const std::string& givenName ) : Core::Entity::Actor( ObjKind::EventObj ), m_mapLinkId( mapLinkId ), m_state( initialState ), @@ -88,7 +88,7 @@ void Core::Entity::EventObject::despawn( Core::Entity::PlayerPtr pTarget ) g_log.debug( "despawn eobj: " + std::to_string( getId() ) ); } -const std::string &Core::Entity::EventObject::getName() const +const std::string& Core::Entity::EventObject::getName() const { return m_name; } diff --git a/src/servers/sapphire_zone/Actor/EventObject.h b/src/servers/sapphire_zone/Actor/EventObject.h index 5a9d1da8..076a8a85 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.h +++ b/src/servers/sapphire_zone/Actor/EventObject.h @@ -11,7 +11,7 @@ namespace Entity { public: EventObject( uint32_t objectId, uint32_t mapLinkId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, - const std::string givenName = "none" ); + const std::string& givenName = "none" ); uint32_t getMapLinkId() const; void setMapLinkId( uint32_t mapLinkId ); diff --git a/src/servers/sapphire_zone/Event/EventHandler.h b/src/servers/sapphire_zone/Event/EventHandler.h index e02434c6..42490462 100644 --- a/src/servers/sapphire_zone/Event/EventHandler.h +++ b/src/servers/sapphire_zone/Event/EventHandler.h @@ -61,6 +61,7 @@ namespace Core { SpecialShop = 0x001B, BahamutGuide = 0x001C, FcTalk = 0x001F, + ICDirector = 0x8003, }; using SceneReturnCallback = std::function< void( Entity::Player&, uint32_t, uint16_t, uint16_t, uint16_t ) > ; diff --git a/src/servers/sapphire_zone/Event/EventHelper.cpp b/src/servers/sapphire_zone/Event/EventHelper.cpp index 90ac6d26..54dd0750 100644 --- a/src/servers/sapphire_zone/Event/EventHelper.cpp +++ b/src/servers/sapphire_zone/Event/EventHelper.cpp @@ -3,6 +3,9 @@ #include #include +#include +#include + extern Core::Data::ExdDataGenerated g_exdDataGen; using namespace Core::Common; @@ -51,6 +54,14 @@ std::string Core::Event::getEventName( uint32_t eventId ) return "Aetheryte"; return "Aethernet"; } + case Event::EventHandler::EventHandlerType::ICDirector: + { + auto contentInfo = g_exdDataGen.get< Core::Data::InstanceContent >( eventId & 0xFFFF ); + std::string name = contentInfo->name; + + name.erase( boost::remove_if( name, boost::is_any_of( "_ '()[]" ) ), name.end() ); + return name; + } case Event::EventHandler::EventHandlerType::Warp: { diff --git a/src/servers/sapphire_zone/Script/NativeScriptApi.h b/src/servers/sapphire_zone/Script/NativeScriptApi.h index 045d734f..22c5485b 100644 --- a/src/servers/sapphire_zone/Script/NativeScriptApi.h +++ b/src/servers/sapphire_zone/Script/NativeScriptApi.h @@ -87,7 +87,7 @@ public: virtual void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) { } virtual void onNpcKill( uint32_t npcId, Entity::Player& player ) { } virtual void onEmote( uint64_t actorId, uint32_t eventId, uint32_t emoteId, Entity::Player& player ) { } - virtual void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { } + virtual void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { } virtual void onWithinRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z ) { } virtual void onOutsideRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z ) { } virtual void onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, uint64_t targetId ) { } @@ -117,7 +117,7 @@ class InstanceContentScript : public ScriptObject { public: explicit InstanceContentScript( uint32_t instanceContentId ) : - ScriptObject( instanceContentId, typeid( InstanceContentScript ).hash_code() ) + ScriptObject( uint32_t{ 0x8003 } << 16 | instanceContentId, typeid( InstanceContentScript ).hash_code() ) { } virtual void onInit( InstanceContentPtr instance ) { } diff --git a/src/servers/sapphire_zone/Script/ScriptManager.cpp b/src/servers/sapphire_zone/Script/ScriptManager.cpp index 4e96a2a8..1106535a 100644 --- a/src/servers/sapphire_zone/Script/ScriptManager.cpp +++ b/src/servers/sapphire_zone/Script/ScriptManager.cpp @@ -166,7 +166,7 @@ bool Core::Scripting::ScriptManager::onEnterTerritory( Entity::Player& player, u auto script = m_nativeScriptManager->getScript< EventScript >( eventId ); if( !script ) return false; - script->onEnterZone( player, eventId, param1, param2 ); + script->onEnterTerritory( player, eventId, param1, param2 ); return true; } @@ -337,7 +337,7 @@ bool Core::Scripting::ScriptManager::onZoneInit( ZonePtr pZone ) bool Core::Scripting::ScriptManager::onInstanceInit( InstanceContentPtr instance ) { - auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance->getInstanceContentId() ); + auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance->getDirectorId() ); if( script ) { script->onInit( instance ); @@ -349,7 +349,7 @@ bool Core::Scripting::ScriptManager::onInstanceInit( InstanceContentPtr instance bool Core::Scripting::ScriptManager::onInstanceUpdate( InstanceContentPtr instance, uint32_t currTime ) { - auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance->getInstanceContentId() ); + auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance->getDirectorId() ); if( script ) { script->onUpdate( instance, currTime ); diff --git a/src/servers/sapphire_zone/Script/Scripts/common/CmnDefInnBed.cpp b/src/servers/sapphire_zone/Script/Scripts/common/CmnDefInnBed.cpp index ac8a0a68..714f9e55 100644 --- a/src/servers/sapphire_zone/Script/Scripts/common/CmnDefInnBed.cpp +++ b/src/servers/sapphire_zone/Script/Scripts/common/CmnDefInnBed.cpp @@ -49,7 +49,7 @@ public: Scene00000( player ); } - void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override + void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { Scene00100( player ); } diff --git a/src/servers/sapphire_zone/Script/Scripts/instances/trials/TheNavel.cpp b/src/servers/sapphire_zone/Script/Scripts/instances/trials/TheNavel.cpp index 5692e719..f57654b5 100644 --- a/src/servers/sapphire_zone/Script/Scripts/instances/trials/TheNavel.cpp +++ b/src/servers/sapphire_zone/Script/Scripts/instances/trials/TheNavel.cpp @@ -1,6 +1,6 @@ #include #include -#include + class TheNavel : public InstanceContentScript { public: @@ -10,11 +10,11 @@ public: void onInit( InstanceContentPtr instance ) override { Common::FFXIVARR_POSITION3 pos = { 0, 0, -10 }; - auto exit = Entity::make_EventObject( EXIT_OBJECT, 0, 4, pos, "Entrance" ); + auto exit = Entity::make_EventObject( EXIT_OBJECT, 0, EXIT_OBJECT_STATE, pos, "Exit" ); instance->registerEObj( exit ); Common::FFXIVARR_POSITION3 pos1 = { 0, 0, 24 }; - auto start = Entity::make_EventObject( START_CIRCLE, 4236868, 5, pos1, "Exit" ); + auto start = Entity::make_EventObject( START_CIRCLE, START_CIRCLE_MAPLINK, START_CIRCLE_STATE, pos1, "Entrance" ); instance->registerEObj( start ); } @@ -25,5 +25,9 @@ public: private: static constexpr auto EXIT_OBJECT = 2000139; + static constexpr auto EXIT_OBJECT_STATE = 4; + static constexpr auto START_CIRCLE = 2000182; + static constexpr auto START_CIRCLE_MAPLINK = 4236868; + static constexpr auto START_CIRCLE_STATE = 5; }; \ No newline at end of file diff --git a/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningGridania.cpp b/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningGridania.cpp index 1541561c..3fab8186 100644 --- a/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningGridania.cpp +++ b/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningGridania.cpp @@ -68,7 +68,7 @@ public: OpeningGridania() : EventScript( 1245186 ) {} - void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override + void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { if( player.getOpeningSequence() == 0 ) { diff --git a/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningLimsa.cpp b/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningLimsa.cpp index f30a2aed..3aba580e 100644 --- a/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningLimsa.cpp +++ b/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningLimsa.cpp @@ -83,7 +83,7 @@ private: public: OpeningLimsa() : EventScript( 1245185 ) {} - void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override + void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { if( player.getOpeningSequence() == 0 ) Scene00000( player ); diff --git a/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningUldah.cpp b/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningUldah.cpp index c780782e..97374f2c 100644 --- a/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningUldah.cpp +++ b/src/servers/sapphire_zone/Script/Scripts/quest/opening/OpeningUldah.cpp @@ -67,7 +67,7 @@ private: public: OpeningUldah() : EventScript( 1245187 ) {} - void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override + void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override { if( player.getOpeningSequence() == 0 ) Scene00000( player );