2018-02-20 23:42:09 +01:00
|
|
|
#include "EventObject.h"
|
2018-02-23 23:47:21 +01:00
|
|
|
|
2018-02-20 23:42:09 +01:00
|
|
|
#include "Zone/InstanceContent.h"
|
2018-02-23 23:47:21 +01:00
|
|
|
#include "Actor/Player.h"
|
|
|
|
|
|
|
|
#include <common/Logging/Logger.h>
|
|
|
|
#include <common/Network/GamePacket.h>
|
|
|
|
#include <common/Network/GamePacketNew.h>
|
|
|
|
#include <common/Network/CommonNetwork.h>
|
|
|
|
#include <common/Network/PacketDef/Zone/ServerZoneDef.h>
|
|
|
|
#include <common/Network/PacketContainer.h>
|
|
|
|
|
|
|
|
using namespace Core::Common;
|
|
|
|
using namespace Core::Network::Packets;
|
|
|
|
using namespace Core::Network::Packets::Server;
|
|
|
|
|
|
|
|
extern Core::Logger g_log;
|
|
|
|
|
2018-02-20 23:42:09 +01:00
|
|
|
|
2018-02-28 00:03:26 +01:00
|
|
|
Core::Entity::EventObject::EventObject( uint32_t actorId, uint32_t objectId, uint32_t mapLinkId,
|
2018-02-24 00:07:07 +01:00
|
|
|
uint8_t initialState, Common::FFXIVARR_POSITION3 pos,
|
2018-02-24 15:19:32 +01:00
|
|
|
const std::string& givenName ) :
|
2018-02-20 23:42:09 +01:00
|
|
|
Core::Entity::Actor( ObjKind::EventObj ),
|
|
|
|
m_mapLinkId( mapLinkId ),
|
2018-02-23 23:47:21 +01:00
|
|
|
m_state( initialState ),
|
2018-02-24 00:07:07 +01:00
|
|
|
m_objectId( objectId ),
|
|
|
|
m_name( givenName )
|
2018-02-20 23:42:09 +01:00
|
|
|
{
|
2018-02-28 00:03:26 +01:00
|
|
|
m_id = actorId;
|
2018-02-23 23:47:21 +01:00
|
|
|
m_pos.x = pos.x;
|
|
|
|
m_pos.y = pos.y;
|
|
|
|
m_pos.z = pos.z;
|
2018-02-20 23:42:09 +01:00
|
|
|
}
|
|
|
|
|
2018-02-23 23:47:21 +01:00
|
|
|
uint32_t Core::Entity::EventObject::getMapLinkId() const
|
2018-02-20 23:42:09 +01:00
|
|
|
{
|
2018-02-23 23:47:21 +01:00
|
|
|
return m_mapLinkId;
|
2018-02-20 23:42:09 +01:00
|
|
|
}
|
|
|
|
|
2018-02-23 23:47:21 +01:00
|
|
|
uint32_t Core::Entity::EventObject::getObjectId() const
|
2018-02-20 23:42:09 +01:00
|
|
|
{
|
2018-02-23 23:47:21 +01:00
|
|
|
return m_objectId;
|
2018-02-20 23:42:09 +01:00
|
|
|
}
|
|
|
|
|
2018-02-27 02:13:01 +11:00
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2018-02-22 18:12:36 +01:00
|
|
|
void Core::Entity::EventObject::setMapLinkId( uint32_t mapLinkId )
|
2018-02-20 23:42:09 +01:00
|
|
|
{
|
2018-02-22 18:12:36 +01:00
|
|
|
m_mapLinkId = mapLinkId;
|
2018-02-20 23:42:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
uint8_t Core::Entity::EventObject::getState() const
|
|
|
|
{
|
|
|
|
return m_state;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::EventObject::setState( uint8_t state )
|
|
|
|
{
|
|
|
|
m_state = state;
|
|
|
|
|
2018-02-25 21:46:34 +11:00
|
|
|
for( const auto& player : m_inRangePlayers )
|
|
|
|
{
|
|
|
|
ZoneChannelPacket< FFXIVIpcActorControl142 > eobjUpdatePacket( getId(), player->getId() );
|
|
|
|
eobjUpdatePacket.data().category = Common::ActorControlType::DirectorEObjMod;
|
|
|
|
eobjUpdatePacket.data().param1 = state;
|
|
|
|
|
|
|
|
player->queuePacket( eobjUpdatePacket );
|
|
|
|
}
|
2018-02-20 23:42:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::EventObject::setParentInstance( Core::InstanceContentPtr instance )
|
|
|
|
{
|
|
|
|
m_parentInstance = instance;
|
|
|
|
}
|
|
|
|
|
|
|
|
Core::InstanceContentPtr Core::Entity::EventObject::getParentInstance() const
|
|
|
|
{
|
|
|
|
return m_parentInstance;
|
2018-02-23 23:47:21 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
void Core::Entity::EventObject::spawn( Core::Entity::PlayerPtr pTarget )
|
|
|
|
{
|
2018-02-24 00:07:07 +01:00
|
|
|
g_log.debug( "Spawning EObj: id:" + std::to_string( getId() ) + " name:" + getName() );
|
2018-02-23 23:47:21 +01:00
|
|
|
ZoneChannelPacket< FFXIVIpcObjectSpawn > eobjStatePacket( getId(), pTarget->getId() );
|
|
|
|
eobjStatePacket.data().count = pTarget->getNextObjCount();
|
|
|
|
eobjStatePacket.data().objKind = getObjKind();
|
|
|
|
eobjStatePacket.data().state = getState();
|
2018-02-24 15:21:18 +01:00
|
|
|
eobjStatePacket.data().objId = getObjectId();
|
2018-02-23 23:47:21 +01:00
|
|
|
eobjStatePacket.data().hierachyId = getMapLinkId();
|
|
|
|
eobjStatePacket.data().position = getPos();
|
2018-02-27 02:13:01 +11:00
|
|
|
eobjStatePacket.data().scale = getScale();
|
|
|
|
eobjStatePacket.data().actorId = getId();
|
2018-02-23 23:47:21 +01:00
|
|
|
pTarget->queuePacket( eobjStatePacket );
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Core::Entity::EventObject::despawn( Core::Entity::PlayerPtr pTarget )
|
|
|
|
{
|
|
|
|
g_log.debug( "despawn eobj: " + std::to_string( getId() ) );
|
2018-02-24 00:07:07 +01:00
|
|
|
}
|
|
|
|
|
2018-02-24 15:19:32 +01:00
|
|
|
const std::string& Core::Entity::EventObject::getName() const
|
2018-02-24 00:07:07 +01:00
|
|
|
{
|
|
|
|
return m_name;
|
|
|
|
}
|