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:
parent
1235ce264b
commit
3cf0a233b1
9 changed files with 25 additions and 34 deletions
|
@ -313,6 +313,12 @@ void Core::Entity::Actor::setCurrentZone( ZonePtr currZone )
|
||||||
m_pCurrentZone = 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
|
Get the current cell of a region the actor is in
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,8 @@ namespace Entity {
|
||||||
ZonePtr getCurrentZone() const;
|
ZonePtr getCurrentZone() const;
|
||||||
void setCurrentZone( ZonePtr currZone );
|
void setCurrentZone( ZonePtr currZone );
|
||||||
|
|
||||||
|
InstanceContentPtr getCurrentInstance() const;
|
||||||
|
|
||||||
// get the current cell of a region the actor is in
|
// get the current cell of a region the actor is in
|
||||||
Cell* getCellPtr();
|
Cell* getCellPtr();
|
||||||
// set the current cell
|
// set the current cell
|
||||||
|
|
|
@ -734,7 +734,7 @@ void Core::DebugCommandHandler::instance( char* data, Entity::Player &player, bo
|
||||||
if( !obj )
|
if( !obj )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
instance->updateEObj(obj);
|
//instance->updateEObj(obj);
|
||||||
}
|
}
|
||||||
else if( subCommand == "objstate" )
|
else if( subCommand == "objstate" )
|
||||||
{
|
{
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "Actor/Player.h"
|
#include "Actor/Player.h"
|
||||||
#include "Forwards.h"
|
#include "Forwards.h"
|
||||||
#include "Event/EventHelper.h"
|
#include "Event/EventHelper.h"
|
||||||
|
#include "Zone/InstanceContent.h"
|
||||||
|
|
||||||
extern Core::Data::ExdDataGenerated g_exdDataGen;
|
extern Core::Data::ExdDataGenerated g_exdDataGen;
|
||||||
extern Core::Scripting::ScriptManager g_scriptMgr;
|
extern Core::Scripting::ScriptManager g_scriptMgr;
|
||||||
|
@ -49,7 +50,12 @@ void Core::Network::GameConnection::eventHandlerTalk( const Packets::GamePacket&
|
||||||
player.sendDebug( "Calling: " + objName + "." + eventName );
|
player.sendDebug( "Calling: " + objName + "." + eventName );
|
||||||
player.eventStart( actorId, eventId, Event::EventHandler::Talk, 0, 0 );
|
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 )
|
eventType == Event::EventHandler::EventHandlerType::Quest )
|
||||||
{
|
{
|
||||||
auto questInfo = g_exdDataGen.get< Core::Data::Quest >( eventId );
|
auto questInfo = g_exdDataGen.get< Core::Data::Quest >( eventId );
|
||||||
|
|
|
@ -87,7 +87,7 @@ public:
|
||||||
virtual void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) { }
|
virtual void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) { }
|
||||||
virtual void onNpcKill( uint32_t npcId, Entity::Player& player ) { }
|
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 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 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 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 ) { }
|
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 onInit( InstanceContentPtr instance ) { }
|
||||||
virtual void onUpdate( InstanceContentPtr instance, uint32_t currTime ) { }
|
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
|
#endif
|
|
@ -13,6 +13,8 @@
|
||||||
#include "Network/PacketWrappers/ActorControlPacket142.h"
|
#include "Network/PacketWrappers/ActorControlPacket142.h"
|
||||||
#include "Network/PacketWrappers/ActorControlPacket143.h"
|
#include "Network/PacketWrappers/ActorControlPacket143.h"
|
||||||
|
|
||||||
|
#include "Event/EventHandler.h"
|
||||||
|
|
||||||
extern Core::Logger g_log;
|
extern Core::Logger g_log;
|
||||||
extern Core::Scripting::ScriptManager g_scriptMgr;
|
extern Core::Scripting::ScriptManager g_scriptMgr;
|
||||||
|
|
||||||
|
@ -253,4 +255,7 @@ Core::Entity::EventObjectPtr Core::InstanceContent::getEObjByName( const std::st
|
||||||
return it->second;
|
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 );
|
||||||
|
}
|
||||||
|
|
|
@ -34,6 +34,7 @@ public:
|
||||||
void onFinishLoading( Entity::Player& player ) override;
|
void onFinishLoading( Entity::Player& player ) override;
|
||||||
void onInitDirector( Entity::Player& player ) override;
|
void onInitDirector( Entity::Player& player ) override;
|
||||||
void onUpdate( uint32_t currTime ) override;
|
void onUpdate( uint32_t currTime ) override;
|
||||||
|
void onTalk( Entity::Player& player, uint32_t eventId, uint64_t actorId );
|
||||||
|
|
||||||
void onRegisterEObj( Entity::EventObjectPtr object ) override;
|
void onRegisterEObj( Entity::EventObjectPtr object ) override;
|
||||||
|
|
||||||
|
|
|
@ -679,34 +679,6 @@ Core::Entity::EventObjectPtr Core::Zone::getEObj( uint32_t objId )
|
||||||
return obj->second;
|
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()
|
Core::InstanceContentPtr Core::Zone::getAsInstanceContent()
|
||||||
{
|
{
|
||||||
return boost::dynamic_pointer_cast< InstanceContent, Zone >( shared_from_this() );
|
return boost::dynamic_pointer_cast< InstanceContent, Zone >( shared_from_this() );
|
||||||
|
|
|
@ -113,7 +113,6 @@ public:
|
||||||
|
|
||||||
void registerEObj( Entity::EventObjectPtr object );
|
void registerEObj( Entity::EventObjectPtr object );
|
||||||
Entity::EventObjectPtr getEObj( uint32_t objId );
|
Entity::EventObjectPtr getEObj( uint32_t objId );
|
||||||
void updateEObj( Entity::EventObjectPtr object );
|
|
||||||
|
|
||||||
InstanceContentPtr getAsInstanceContent();
|
InstanceContentPtr getAsInstanceContent();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue