mirror of
https://github.com/SapphireServer/Sapphire.git
synced 2025-04-30 08:07:46 +00:00
fix onEnterTerritory events
This commit is contained in:
parent
b26a6f3317
commit
8fd1a2e3df
9 changed files with 49 additions and 12 deletions
|
@ -98,6 +98,13 @@ Core::Entity::Player::~Player()
|
|||
{
|
||||
}
|
||||
|
||||
void Core::Entity::Player::injectPacket( std::string path )
|
||||
{
|
||||
auto session = g_serverZone.getSession( getId() );
|
||||
if( session )
|
||||
session->getZoneConnection()->injectPacket( path, *this );
|
||||
}
|
||||
|
||||
// TODO: add a proper calculation based on race / job / level / gear
|
||||
uint32_t Core::Entity::Player::getMaxHp()
|
||||
{
|
||||
|
@ -1480,7 +1487,7 @@ uint32_t Core::Entity::Player::getTerritoryId() const
|
|||
|
||||
void Core::Entity::Player::sendZonePackets()
|
||||
{
|
||||
getCurrentZone()->onBeforeEnterTerritory( *this );
|
||||
getCurrentZone()->onBeforePlayerZoneIn( *this );
|
||||
|
||||
ZoneChannelPacket< FFXIVIpcInit > initPacket( getId() );
|
||||
initPacket.data().charId = getId();
|
||||
|
@ -1490,7 +1497,7 @@ void Core::Entity::Player::sendZonePackets()
|
|||
|
||||
if( isLogin() )
|
||||
{
|
||||
queuePacket(ActorControlPacket143( getId(), SetCharaGearParamUI, m_equipDisplayFlags, 1 ) );
|
||||
queuePacket( ActorControlPacket143( getId(), SetCharaGearParamUI, m_equipDisplayFlags, 1 ) );
|
||||
}
|
||||
|
||||
// set flags, will be reset automatically by zoning ( only on client side though )
|
||||
|
@ -1547,7 +1554,7 @@ void Core::Entity::Player::sendZonePackets()
|
|||
if( getLastPing() == 0 )
|
||||
sendQuestInfo();
|
||||
|
||||
getCurrentZone()->onEnterTerritory( *this );
|
||||
getCurrentZone()->onPlayerZoneIn( *this );
|
||||
|
||||
m_bMarkedForZoning = false;
|
||||
}
|
||||
|
|
|
@ -45,6 +45,8 @@ public:
|
|||
|
||||
void autoAttack( CharaPtr pTarget ) override;
|
||||
|
||||
void injectPacket( std::string path );
|
||||
|
||||
// EventHandlers
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/*! start an event action */
|
||||
|
|
|
@ -160,7 +160,10 @@ void Core::Network::GameConnection::eventHandlerEnterTerritory( const Packets::G
|
|||
|
||||
player.eventStart( player.getId(), eventId, Event::EventHandler::EnterTerritory, 0, player.getZoneId() );
|
||||
|
||||
g_scriptMgr.onEnterTerritory( player, eventId, param1, param2 );
|
||||
if( auto instance = player.getCurrentInstance() )
|
||||
instance->onEnterTerritory( player, eventId, param1, param2 );
|
||||
else
|
||||
g_scriptMgr.onEnterTerritory( player, eventId, param1, param2 );
|
||||
|
||||
player.checkEvent( eventId );
|
||||
}
|
||||
|
|
|
@ -360,6 +360,18 @@ bool Core::Scripting::ScriptManager::onInstanceUpdate( InstanceContentPtr instan
|
|||
return false;
|
||||
}
|
||||
|
||||
bool Core::Scripting::ScriptManager::onInstanceEnterTerritory( InstanceContentPtr instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 )
|
||||
{
|
||||
auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance->getDirectorId() );
|
||||
if( script )
|
||||
{
|
||||
script->onEnterTerritory( player, eventId, param1, param2 );
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Scripting::NativeScriptManager& Core::Scripting::ScriptManager::getNativeScriptHandler()
|
||||
{
|
||||
return *m_nativeScriptManager;
|
||||
|
|
|
@ -59,6 +59,7 @@ namespace Core
|
|||
|
||||
bool onInstanceInit( InstanceContentPtr instance );
|
||||
bool onInstanceUpdate( InstanceContentPtr instance, uint32_t currTime );
|
||||
bool onInstanceEnterTerritory( InstanceContentPtr instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 );
|
||||
|
||||
void loadDir( const std::string& dirname, std::set<std::string> &files, const std::string& ext );
|
||||
|
||||
|
|
|
@ -63,9 +63,9 @@ Core::Data::ExdDataGenerated::InstanceContentPtr Core::InstanceContent::getInsta
|
|||
return m_instanceContentInfo;
|
||||
}
|
||||
|
||||
void Core::InstanceContent::onEnterTerritory( Entity::Player& player )
|
||||
void Core::InstanceContent::onPlayerZoneIn( Entity::Player &player )
|
||||
{
|
||||
g_log.debug( "InstanceContent::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|"
|
||||
g_log.debug( "InstanceContent::onPlayerZoneIn: Zone#" + std::to_string( getGuId() ) + "|"
|
||||
+ std::to_string( getInstanceContentId() ) +
|
||||
+ ", Entity#" + std::to_string( player.getId() ) );
|
||||
|
||||
|
@ -263,7 +263,7 @@ void Core::InstanceContent::onRegisterEObj( Entity::EventObjectPtr object )
|
|||
g_log.error( "InstanceContent::onRegisterEObj Zone " + m_internalName + ": No EObj data found for EObj with ID: " + std::to_string( object->getObjectId() ) );
|
||||
}
|
||||
|
||||
void Core::InstanceContent::onBeforeEnterTerritory( Core::Entity::Player &player )
|
||||
void Core::InstanceContent::onBeforePlayerZoneIn( Core::Entity::Player &player )
|
||||
{
|
||||
if( m_pEntranceEObj != nullptr )
|
||||
{
|
||||
|
@ -302,3 +302,8 @@ void Core::InstanceContent::onTalk( Core::Entity::Player& player, uint32_t event
|
|||
player.sendDebug( "No onTalk handler found for interactable eobj with EObjID: " +
|
||||
std::to_string( it->second->getObjectId() ) + ", eventId: " + std::to_string( eventId ) );
|
||||
}
|
||||
|
||||
void Core::InstanceContent::onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 )
|
||||
{
|
||||
g_scriptMgr.onInstanceEnterTerritory( getAsInstanceContent(), player, eventId, param1, param2 );
|
||||
}
|
||||
|
|
|
@ -30,13 +30,14 @@ public:
|
|||
virtual ~InstanceContent();
|
||||
|
||||
bool init() override;
|
||||
void onBeforeEnterTerritory( Entity::Player& player ) override;
|
||||
void onEnterTerritory( Entity::Player& player ) override;
|
||||
void onBeforePlayerZoneIn( Entity::Player &player ) override;
|
||||
void onPlayerZoneIn( Entity::Player &player ) override;
|
||||
void onLeaveTerritory( Entity::Player& player ) override;
|
||||
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 onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override;
|
||||
|
||||
void onRegisterEObj( Entity::EventObjectPtr object ) override;
|
||||
|
||||
|
|
|
@ -631,7 +631,7 @@ void Core::Zone::updateInRangeSet( Entity::ActorPtr pActor, Cell* pCell )
|
|||
}
|
||||
}
|
||||
|
||||
void Core::Zone::onEnterTerritory( Entity::Player& player )
|
||||
void Core::Zone::onPlayerZoneIn( Entity::Player &player )
|
||||
{
|
||||
g_log.debug( "Zone::onEnterTerritory: Zone#" + std::to_string( getGuId() ) + "|" + std::to_string( getTerritoryId() ) +
|
||||
+ ", Entity#" + std::to_string( player.getId() ) );
|
||||
|
@ -658,6 +658,11 @@ void Core::Zone::onInitDirector( Entity::Player& player )
|
|||
|
||||
}
|
||||
|
||||
void Core::Zone::onEnterTerritory( Core::Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Core::Zone::registerEObj( Entity::EventObjectPtr object )
|
||||
{
|
||||
if( !object )
|
||||
|
|
|
@ -73,13 +73,14 @@ public:
|
|||
|
||||
virtual void loadCellCache();
|
||||
virtual uint32_t getTerritoryId() const;
|
||||
virtual void onBeforeEnterTerritory( Entity::Player& player ) {};
|
||||
virtual void onEnterTerritory( Entity::Player& player );
|
||||
virtual void onBeforePlayerZoneIn( Entity::Player &player ) {};
|
||||
virtual void onPlayerZoneIn( Entity::Player &player );
|
||||
virtual void onFinishLoading( Entity::Player& player );
|
||||
virtual void onInitDirector( Entity::Player& player );
|
||||
virtual void onLeaveTerritory( Entity::Player& player );
|
||||
virtual void onUpdate( uint32_t currTime );
|
||||
virtual void onRegisterEObj( Entity::EventObjectPtr object ) {};
|
||||
virtual void onEnterTerritory( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 );
|
||||
|
||||
Common::Weather getNextWeather();
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue