1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 14:37:44 +00:00

EObjects are now given a name and can be retrieved using it

This commit is contained in:
Mordred 2018-02-24 00:07:07 +01:00
parent f9722b5e2e
commit acee4d4b51
5 changed files with 33 additions and 7 deletions

View file

@ -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() ) );
}
}
const std::string &Core::Entity::EventObject::getName() const
{
return m_name;
}

View file

@ -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;
};
}

View file

@ -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 );
}

View file

@ -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;
}

View file

@ -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;
};
}