diff --git a/CMakeLists.txt b/CMakeLists.txt index 561d4790..61e3273e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,5 +67,5 @@ add_subdirectory("src/tools/exd_common_gen") add_subdirectory("src/tools/exd_struct_gen") add_subdirectory("src/tools/exd_struct_test") add_subdirectory("src/tools/quest_parser") -add_subdirectory("src/tools/pcb_reader") -add_subdirectory("src/tools/event_object_parser") +#add_subdirectory("src/tools/pcb_reader") +#add_subdirectory("src/tools/event_object_parser") diff --git a/src/servers/sapphire_zone/Actor/EventObject.h b/src/servers/sapphire_zone/Actor/EventObject.h index 85dd329d..42318787 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.h +++ b/src/servers/sapphire_zone/Actor/EventObject.h @@ -13,7 +13,7 @@ namespace Entity EventObject( uint32_t objectId, uint32_t mapLinkId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, const std::string& givenName = "none" ); - using OnTalkEventHandler = std::function< void( Entity::Player&, uint64_t ) >; + using OnTalkEventHandler = std::function< void( Entity::Player&, Entity::EventObjectPtr, InstanceContentPtr, uint64_t ) >; uint32_t getMapLinkId() const; void setMapLinkId( uint32_t mapLinkId ); diff --git a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp index 46241c87..6e989623 100644 --- a/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp +++ b/src/servers/sapphire_zone/DebugCommand/DebugCommandHandler.cpp @@ -720,34 +720,18 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo instance->setVar( static_cast< uint8_t >( index ), static_cast< uint8_t >( value ) ); } - else if( subCommand == "objupdate" ) - { - uint32_t objId; - - sscanf( params.c_str(), "%d", &objId ); - - auto instance = boost::dynamic_pointer_cast< InstanceContent >( player.getCurrentZone() ); - if( !instance ) - return; - - auto obj = instance->getEObj(objId); - if( !obj ) - return; - - //instance->updateEObj(obj); - } else if( subCommand == "objstate" ) { - uint32_t objId; + char objName[128]; uint8_t state; - sscanf( params.c_str(), "%d %hhu", &objId, &state ); + sscanf( params.c_str(), "%s %hhu", objName, &state ); auto instance = boost::dynamic_pointer_cast< InstanceContent >( player.getCurrentZone() ); if( !instance ) return; - auto obj = instance->getEObj(objId); + auto obj = instance->getEObjByName( objName ); if( !obj ) return; diff --git a/src/servers/sapphire_zone/Script/Scripts/instances/dungeons/Sastasha.cpp b/src/servers/sapphire_zone/Script/Scripts/instances/dungeons/Sastasha.cpp index 20186ef2..0256b651 100644 --- a/src/servers/sapphire_zone/Script/Scripts/instances/dungeons/Sastasha.cpp +++ b/src/servers/sapphire_zone/Script/Scripts/instances/dungeons/Sastasha.cpp @@ -3,6 +3,19 @@ class Sastasha : public InstanceContentScript { +private: + static void memoOnTalk( Entity::Player& player, Entity::EventObjectPtr object, InstanceContentPtr instance, uint64_t actorId ) + { + + } + + static void switchOnTalk( Entity::Player& player, Entity::EventObjectPtr object, InstanceContentPtr instance, uint64_t actorId ) + { + object->setState( 7 ); + + instance->getEObjByName( "Hiddendoor" )->setState( 7 ); + } + public: Sastasha() : InstanceContentScript( 4 ) { } @@ -25,17 +38,23 @@ public: instance->registerEObj( "Bluecoralformation", 2000213, 3668215, 4, { 75.869797f, 35.101421f, -32.537209f }, 0.930753f ); instance->registerEObj( "Redcoralformation", 2000214, 3668214, 4, { 88.769371f, 31.135691f, -40.869640f }, 0.930753f ); instance->registerEObj( "Greencoralformation", 2000215, 3668216, 4, { 64.988159f, 33.672821f, -56.690559f }, 0.991789f ); - instance->registerEObj( "Inconspicuousswitch", 2000216, 3653858, 4, { 62.907951f, 33.969521f, -31.172279f }, 1.000000f ); - instance->registerEObj( "Hiddendoor", 2000217, 3653517, 4, { 59.000000f, 32.000000f, -35.000000f }, 1.000000f ); + + auto switchObj = instance->registerEObj( "Inconspicuousswitch", 2000216, 3653858, 4, { 62.907951f, 33.969521f, -31.172279f }, 1.000000f ); + switchObj->setOnTalkHandler( switchOnTalk ); + + instance->registerEObj( "Hiddendoor", 2000217, 3653517, 5, { 59.000000f, 32.000000f, -35.000000f }, 1.000000f ); instance->registerEObj( "Giantclam", 2000222, 4208408, 4, { 181.170303f, 32.104599f, -128.069000f }, 0.991789f ); instance->registerEObj( "Unknown10", 2000260, 4208409, 4, { 166.318695f, 30.735420f, -128.312103f }, 0.991789f ); instance->registerEObj( "Unknown11", 2000261, 4208410, 4, { 158.800598f, 28.586321f, -76.340927f }, 0.991789f ); instance->registerEObj( "Unknown12", 2000262, 4208411, 4, { 125.463402f, 29.260550f, -51.934608f }, 0.991789f ); instance->registerEObj( "Unknown13", 2000263, 4208412, 4, { 126.070198f, 28.913260f, -99.908722f }, 1.000000f ); instance->registerEObj( "Unknown14", 2000264, 4208413, 4, { 97.055313f, 27.081551f, -70.264381f }, 0.991789f ); - instance->registerEObj( "Bloodymemo", 2000212, 0, 4, { 320.812988f, 47.862450f, -130.776306f }, 0.600000f ); - instance->registerEObj( "Bloodymemo", 2001548, 0, 4, { 320.812988f, 47.862450f, -130.776306f }, 0.600000f ); - instance->registerEObj( "Bloodymemo", 2001549, 0, 4, { 320.812988f, 47.862450f, -130.776306f }, 0.600000f ); + + auto memo = instance->registerEObj( "Bloodymemo", 2000212, 0, 4, { 320.812988f, 47.862450f, -130.776306f }, 0.600000f ); + memo->setOnTalkHandler( memoOnTalk ); + //instance->registerEObj( "Bloodymemo", 2001548, 0, 4, { 320.812988f, 47.862450f, -130.776306f }, 0.600000f ); + //instance->registerEObj( "Bloodymemo", 2001549, 0, 4, { 320.812988f, 47.862450f, -130.776306f }, 0.600000f ); + instance->registerEObj( "Rambadedoor", 2000225, 3653865, 4, { -35.299999f, 24.000000f, 60.799999f }, 1.000000f ); instance->registerEObj( "Captainsquarters", 2000227, 3687697, 4, { -95.044670f, 20.513069f, 172.039597f }, 0.991789f ); instance->registerEObj( "WaveriderGate", 2000231, 3655909, 4, { -130.600006f, 16.000000f, 156.800003f }, 1.000000f ); diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index 48457c84..0c7f1d38 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -273,7 +273,7 @@ void Core::InstanceContent::onTalk( Core::Entity::Player& player, uint32_t event return; if( auto onTalk = it->second->getOnTalkHandler() ) - onTalk( player, actorId ); + onTalk( player, it->second, getAsInstanceContent(), actorId ); else player.sendDebug( "No onTalk handler found for interactable eobj with EObjID: " + std::to_string( it->second->getObjectId() ) + ", eventId: " + std::to_string( eventId ) );