1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-24 13:47:46 +00:00

redirect ontalk events inside instances to instancecontent ptr

This commit is contained in:
Adam 2018-02-25 17:23:52 +11:00
parent 1235ce264b
commit 3cf0a233b1
9 changed files with 25 additions and 34 deletions

View file

@ -313,6 +313,12 @@ void Core::Entity::Actor::setCurrentZone( ZonePtr currZone )
m_pCurrentZone = currZone;
}
/*! \return InstanceContentPtr to the current instance, null if not an instance or not set */
Core::InstanceContentPtr Core::Entity::Actor::getCurrentInstance() const
{
return getCurrentZone()->getAsInstanceContent();
}
/*!
Get the current cell of a region the actor is in

View file

@ -124,6 +124,8 @@ namespace Entity {
ZonePtr getCurrentZone() const;
void setCurrentZone( ZonePtr currZone );
InstanceContentPtr getCurrentInstance() const;
// get the current cell of a region the actor is in
Cell* getCellPtr();
// set the current cell

View file

@ -734,7 +734,7 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo
if( !obj )
return;
instance->updateEObj(obj);
//instance->updateEObj(obj);
}
else if( subCommand == "objstate" )
{

View file

@ -20,6 +20,7 @@
#include "Actor/Player.h"
#include "Forwards.h"
#include "Event/EventHelper.h"
#include "Zone/InstanceContent.h"
extern Core::Data::ExdDataGenerated g_exdDataGen;
extern Core::Scripting::ScriptManager g_scriptMgr;
@ -49,7 +50,12 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
player.sendDebug( "Calling: " + objName + "." + eventName );
player.eventStart( actorId, eventId, Event::EventHandler::Talk, 0, 0 );
if( !g_scriptMgr.onTalk( player, actorId, eventId ) &&
if( auto instance = player.getCurrentInstance() )
{
instance->onTalk( player, eventId, actorId );
}
else if( !g_scriptMgr.onTalk( player, actorId, eventId ) &&
eventType == Event::EventHandler::EventHandlerType::Quest )
{
auto questInfo = g_exdDataGen.get< Core::Data::Quest >( eventId );

View file

@ -87,7 +87,7 @@ public:
virtual void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) { }
virtual void onNpcKill( uint32_t npcId, Entity::Player& player ) { }
virtual void onEmote( uint64_t actorId, uint32_t eventId, uint32_t emoteId, Entity::Player& player ) { }
virtual void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
virtual void onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
virtual void onWithinRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z ) { }
virtual void onOutsideRange( Entity::Player& player, uint32_t eventId, uint32_t param1, float x, float y, float z ) { }
virtual void onEventItem( Entity::Player& player, uint32_t eventItemId, uint32_t eventId, uint32_t castTime, uint64_t targetId ) { }
@ -122,7 +122,7 @@ public:
virtual void onInit( InstanceContentPtr instance ) { }
virtual void onUpdate( InstanceContentPtr instance, uint32_t currTime ) { }
virtual void onEnterTerritory( Entity::Player &player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
virtual void onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) { }
};
#endif

View file

@ -13,6 +13,8 @@
#include "Network/PacketWrappers/ActorControlPacket142.h"
#include "Network/PacketWrappers/ActorControlPacket143.h"
#include "Event/EventHandler.h"
extern Core::Logger g_log;
extern Core::Scripting::ScriptManager g_scriptMgr;
@ -253,4 +255,7 @@ Core::Entity::EventObjectPtr Core::InstanceContent::getEObjByName( const std::st
return it->second;
}
void Core::InstanceContent::onTalk( Core::Entity::Player& player, uint32_t eventId, uint64_t actorId )
{
auto type = static_cast< Core::Event::EventHandler::EventType >( eventId >> 16 );
}

View file

@ -34,6 +34,7 @@ public:
void onFinishLoading( Entity::Player& player ) override;
void onInitDirector( Entity::Player& player ) override;
void onUpdate( uint32_t currTime ) override;
void onTalk( Entity::Player& player, uint32_t eventId, uint64_t actorId );
void onRegisterEObj( Entity::EventObjectPtr object ) override;

View file

@ -679,34 +679,6 @@ Core::Entity::EventObjectPtr Core::Zone::getEObj( uint32_t objId )
return obj->second;
}
// TODO: this is located wrong. state change should happen in the object and it should send to his in range set.
void Core::Zone::updateEObj( Entity::EventObjectPtr object )
{
if( !object )
return;
for( const auto& playerIt : m_playerMap )
{
// send that packet with le data
ZoneChannelPacket< FFXIVIpcObjectSpawn > eobjStatePacket( playerIt.second->getId() );
eobjStatePacket.data().objKind = object->getObjKind();
eobjStatePacket.data().state = object->getState();
eobjStatePacket.data().objId = object->getId();
eobjStatePacket.data().hierachyId = object->getMapLinkId();
eobjStatePacket.data().position = object->getPos();
// ????
//eobjStatePacket.data().levelId = 4236873;
//eobjStatePacket.data().unknown2 = 5;
//eobjStatePacket.data().unknown1C = 1065353216;
//eobjStatePacket.data().unknown20 = 2147423605;
//eobjStatePacket.data().actorId = 1074105831;
//eobjStatePacket.data().unknown = 1;
playerIt.second->queuePacket( eobjStatePacket );
}
}
Core::InstanceContentPtr Core::Zone::getAsInstanceContent()
{
return boost::dynamic_pointer_cast< InstanceContent, Zone >( shared_from_this() );

View file

@ -113,7 +113,6 @@ public:
void registerEObj( Entity::EventObjectPtr object );
Entity::EventObjectPtr getEObj( uint32_t objId );
void updateEObj( Entity::EventObjectPtr object );
InstanceContentPtr getAsInstanceContent();