From acee4d4b51b168d87fdbd09e49bb1cc617b9ef5c Mon Sep 17 00:00:00 2001 From: Mordred Date: Sat, 24 Feb 2018 00:07:07 +0100 Subject: [PATCH] EObjects are now given a name and can be retrieved using it --- src/servers/sapphire_zone/Actor/EventObject.cpp | 15 +++++++++++---- src/servers/sapphire_zone/Actor/EventObject.h | 6 +++++- .../Script/Scripts/instances/trials/TheNavel.cpp | 4 ++-- .../sapphire_zone/Zone/InstanceContent.cpp | 11 +++++++++++ src/servers/sapphire_zone/Zone/InstanceContent.h | 4 ++++ 5 files changed, 33 insertions(+), 7 deletions(-) diff --git a/src/servers/sapphire_zone/Actor/EventObject.cpp b/src/servers/sapphire_zone/Actor/EventObject.cpp index 1162e9c1..6a4c4d56 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.cpp +++ b/src/servers/sapphire_zone/Actor/EventObject.cpp @@ -18,11 +18,13 @@ extern Core::Logger g_log; Core::Entity::EventObject::EventObject( uint32_t objectId, uint32_t mapLinkId, - uint8_t initialState, Common::FFXIVARR_POSITION3 pos ) : + uint8_t initialState, Common::FFXIVARR_POSITION3 pos, + const std::string givenName ) : Core::Entity::Actor( ObjKind::EventObj ), m_mapLinkId( mapLinkId ), m_state( initialState ), - m_objectId( objectId ) + m_objectId( objectId ), + m_name( givenName ) { m_id = objectId; m_pos.x = pos.x; @@ -69,7 +71,7 @@ Core::InstanceContentPtr Core::Entity::EventObject::getParentInstance() const void Core::Entity::EventObject::spawn( Core::Entity::PlayerPtr pTarget ) { - g_log.debug( "spawn eobj: " + std::to_string( getId() ) ); + g_log.debug( "Spawning EObj: id:" + std::to_string( getId() ) + " name:" + getName() ); ZoneChannelPacket< FFXIVIpcObjectSpawn > eobjStatePacket( getId(), pTarget->getId() ); eobjStatePacket.data().count = pTarget->getNextObjCount(); eobjStatePacket.data().objKind = getObjKind(); @@ -84,4 +86,9 @@ void Core::Entity::EventObject::spawn( Core::Entity::PlayerPtr pTarget ) void Core::Entity::EventObject::despawn( Core::Entity::PlayerPtr pTarget ) { g_log.debug( "despawn eobj: " + std::to_string( getId() ) ); -} \ No newline at end of file +} + +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 1c48b72d..5a9d1da8 100644 --- a/src/servers/sapphire_zone/Actor/EventObject.h +++ b/src/servers/sapphire_zone/Actor/EventObject.h @@ -10,7 +10,8 @@ namespace Entity class EventObject : public Actor { public: - EventObject( uint32_t objectId, uint32_t mapLinkId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos ); + EventObject( uint32_t objectId, uint32_t mapLinkId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, + const std::string givenName = "none" ); uint32_t getMapLinkId() const; void setMapLinkId( uint32_t mapLinkId ); @@ -20,6 +21,8 @@ namespace Entity uint32_t getObjectId() const; + const std::string& getName() const; + InstanceContentPtr getParentInstance() const; void setParentInstance( InstanceContentPtr instance ); @@ -30,6 +33,7 @@ namespace Entity uint32_t m_mapLinkId; uint32_t m_objectId; uint8_t m_state; + std::string m_name; InstanceContentPtr m_parentInstance; }; } 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 1a04204d..14f6a813 100644 --- a/src/servers/sapphire_zone/Script/Scripts/instances/trials/TheNavel.cpp +++ b/src/servers/sapphire_zone/Script/Scripts/instances/trials/TheNavel.cpp @@ -9,10 +9,10 @@ public: void onInit( InstanceContentPtr instance ) override { - auto exit = Entity::EventObjectPtr( new Entity::EventObject( EXIT_OBJECT, 0, 4, { 0, 0, -10 } ) ); + auto exit = Entity::EventObjectPtr( new Entity::EventObject( EXIT_OBJECT, 0, 4, { 0, 0, -10 }, "Entrance" ) ); instance->registerEObj( exit ); - auto start = Entity::EventObjectPtr( new Entity::EventObject( START_CIRCLE, 4236868, 5, { 0, 0, 24 } ) ); + auto start = Entity::EventObjectPtr( new Entity::EventObject( START_CIRCLE, 4236868, 5, { 0, 0, 24 }, "Exit" ) ); instance->registerEObj( start ); } diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.cpp b/src/servers/sapphire_zone/Zone/InstanceContent.cpp index b7572a9a..d2f553a4 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.cpp +++ b/src/servers/sapphire_zone/Zone/InstanceContent.cpp @@ -223,6 +223,8 @@ void Core::InstanceContent::setVar( uint8_t index, uint8_t value ) void Core::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object ) { + if( object->getName() != "none" ) + m_eventObjectMap[object->getName()] = object; if( object->getObjectId() == 2000182 ) // start m_pEntranceEObj = object; } @@ -235,4 +237,13 @@ void Core::InstanceContent::onBeforeEnterTerritory( Core::Entity::Player &player player.setPos( { 0.f, 0.f, 0.f } ); } +Core::Entity::EventObjectPtr Core::InstanceContent::getEObjByName( const std::string &name ) +{ + auto it = m_eventObjectMap.find( name ); + if( it == m_eventObjectMap.end() ) + return nullptr; + + return it->second; +} + diff --git a/src/servers/sapphire_zone/Zone/InstanceContent.h b/src/servers/sapphire_zone/Zone/InstanceContent.h index 1b150800..184dde51 100644 --- a/src/servers/sapphire_zone/Zone/InstanceContent.h +++ b/src/servers/sapphire_zone/Zone/InstanceContent.h @@ -43,6 +43,8 @@ public: uint32_t getInstanceContentId() const; + Entity::EventObjectPtr getEObjByName( const std::string& name ); + private: Event::DirectorPtr m_pDirector; Core::Data::ExdDataGenerated::InstanceContentPtr m_instanceContentInfo; @@ -52,6 +54,8 @@ private: int64_t m_instanceExpireTime; Entity::EventObjectPtr m_pEntranceEObj; + + std::map< std::string, Entity::EventObjectPtr > m_eventObjectMap; }; }