#include "EventObject.h" #include "Zone/InstanceContent.h" #include "Actor/Player.h" #include "Network/PacketWrappers/ActorControlPacket142.h" #include "Network/PacketWrappers/ActorControlPacket143.h" #include "Network/PacketWrappers/ActorControlPacket144.h" #include #include #include #include #include using namespace Core::Common; using namespace Core::Network::Packets; using namespace Core::Network::Packets::Server; #include "Framework.h" extern Core::Framework g_fw; Core::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, uint32_t gimmickId, uint8_t initialState, Common::FFXIVARR_POSITION3 pos, float rotation, const std::string& givenName ) : Core::Entity::Actor( ObjKind::EventObj ), m_gimmickId( gimmickId ), m_state( initialState ), m_objectId( objectId ), m_name( givenName ) { m_id = actorId; m_pos.x = pos.x; m_pos.y = pos.y; m_pos.z = pos.z; m_rot = rotation; } uint32_t Core::Entity::EventObject::getGimmickId() const { return m_gimmickId; } uint32_t Core::Entity::EventObject::getObjectId() const { return m_objectId; } float Core::Entity::EventObject::getScale() const { return m_scale; } void Core::Entity::EventObject::setScale( float scale ) { m_scale = scale; } Core::Entity::EventObject::OnTalkEventHandler Core::Entity::EventObject::getOnTalkHandler() const { return m_onTalkEventHandler; } void Core::Entity::EventObject::setOnTalkHandler( Core::Entity::EventObject::OnTalkEventHandler handler ) { m_onTalkEventHandler = handler; } void Core::Entity::EventObject::setGimmickId( uint32_t gimmickId ) { m_gimmickId = gimmickId; } uint8_t Core::Entity::EventObject::getState() const { return m_state; } void Core::Entity::EventObject::setState( uint8_t state ) { m_state = state; for( const auto& player : m_inRangePlayers ) { player->queuePacket( boost::make_shared< ActorControlPacket142 >( getId(), DirectorEObjMod, state ) ); } } void Core::Entity::EventObject::setAnimationFlag( uint32_t flag, uint32_t animationFlag ) { for( const auto& player : m_inRangePlayers ) { player->queuePacket( boost::make_shared< ActorControlPacket142 >( getId(), EObjAnimation, flag, animationFlag ) ); } } void Core::Entity::EventObject::setParentInstance( Core::InstanceContentPtr instance ) { m_parentInstance = instance; } Core::InstanceContentPtr Core::Entity::EventObject::getParentInstance() const { return m_parentInstance; } void Core::Entity::EventObject::spawn( Core::Entity::PlayerPtr pTarget ) { auto spawnIndex = pTarget->getNextObjSpawnIndexForActorId( getId( ) ); if( !pTarget->isObjSpawnIndexValid( spawnIndex ) ) return; auto pLog = g_fw.get< Logger >(); pLog->debug( "Spawning EObj: id:" + std::to_string( getId() ) + " name:" + getName() ); auto eobjStatePacket = makeZonePacket< FFXIVIpcObjectSpawn >( getId(), pTarget->getId() ); eobjStatePacket->data().spawnIndex = spawnIndex; eobjStatePacket->data().objKind = getObjKind(); eobjStatePacket->data().state = getState(); eobjStatePacket->data().objId = getObjectId(); eobjStatePacket->data().gimmickId = getGimmickId(); eobjStatePacket->data().position = getPos(); eobjStatePacket->data().scale = getScale(); eobjStatePacket->data().actorId = getId(); eobjStatePacket->data().rotation = Math::Util::floatToUInt16Rot( getRot() ); pTarget->queuePacket( eobjStatePacket ); } void Core::Entity::EventObject::despawn( Core::Entity::PlayerPtr pTarget ) { auto pLog = g_fw.get< Logger >(); pLog->debug( "despawn eobj: " + std::to_string( getId() ) ); pTarget->freeObjSpawnIndexForActorId( getId( ) ); } const std::string& Core::Entity::EventObject::getName() const { return m_name; }