diff --git a/src/tools/event_object_parser/instance.tmpl b/src/tools/event_object_parser/instance.tmpl index c8188474..558f1d25 100644 --- a/src/tools/event_object_parser/instance.tmpl +++ b/src/tools/event_object_parser/instance.tmpl @@ -25,6 +25,11 @@ EOBJ_INIT } + void onLeaveTerritory( InstanceContent& instance, Entity::Player& player ) override + { + + } + }; EXPOSE_SCRIPT( INSTANCE_NAME ); \ No newline at end of file diff --git a/src/world/Script/NativeScriptApi.cpp b/src/world/Script/NativeScriptApi.cpp index dcf124c6..8068f42c 100644 --- a/src/world/Script/NativeScriptApi.cpp +++ b/src/world/Script/NativeScriptApi.cpp @@ -231,6 +231,10 @@ namespace Sapphire::ScriptAPI { } + void InstanceContentScript::onLeaveTerritory( InstanceContent& instance, Entity::Player& player ) + { + } + /////////////////////////////////////////////////////////////////// QuestBattleScript::QuestBattleScript( uint32_t questBattleId ) : diff --git a/src/world/Script/NativeScriptApi.h b/src/world/Script/NativeScriptApi.h index 150f5465..0fcf222a 100644 --- a/src/world/Script/NativeScriptApi.h +++ b/src/world/Script/NativeScriptApi.h @@ -336,6 +336,8 @@ namespace Sapphire::ScriptAPI virtual void onEnterTerritory( Sapphire::InstanceContent& instance, Sapphire::Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ); + virtual void onLeaveTerritory( InstanceContent& instance, Entity::Player& player ); + World::Manager::EventMgr& eventMgr() { return Common::Service< World::Manager::EventMgr >::ref(); diff --git a/src/world/Script/ScriptMgr.cpp b/src/world/Script/ScriptMgr.cpp index 69c85548..6d43ba49 100644 --- a/src/world/Script/ScriptMgr.cpp +++ b/src/world/Script/ScriptMgr.cpp @@ -637,6 +637,18 @@ bool Sapphire::Scripting::ScriptMgr::onInstanceEnterTerritory( InstanceContent& return false; } +bool Sapphire::Scripting::ScriptMgr::onInstanceLeaveTerritory( InstanceContent& instance, Entity::Player& player ) +{ + auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::InstanceContentScript >( instance.getDirectorId() ); + if( script ) + { + script->onLeaveTerritory( instance, player ); + return true; + } + + return false; +} + bool Sapphire::Scripting::ScriptMgr::onPlayerSetup( QuestBattle& instance, Entity::Player& player ) { auto script = m_nativeScriptMgr->getScript< Sapphire::ScriptAPI::QuestBattleScript >( instance.getDirectorId() ); diff --git a/src/world/Script/ScriptMgr.h b/src/world/Script/ScriptMgr.h index aeb000c9..f336682b 100644 --- a/src/world/Script/ScriptMgr.h +++ b/src/world/Script/ScriptMgr.h @@ -102,6 +102,8 @@ namespace Sapphire::Scripting onInstanceEnterTerritory( InstanceContent& instance, Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ); + bool onInstanceLeaveTerritory( InstanceContent& instance, Entity::Player& player ); + bool onPlayerSetup( QuestBattle& instance, Entity::Player& player ); bool onInstanceInit( QuestBattle& instance ); diff --git a/src/world/Territory/InstanceContent.cpp b/src/world/Territory/InstanceContent.cpp index 286afe57..2101923f 100644 --- a/src/world/Territory/InstanceContent.cpp +++ b/src/world/Territory/InstanceContent.cpp @@ -110,6 +110,9 @@ void Sapphire::InstanceContent::onLeaveTerritory( Entity::Player& player ) unbindPlayer( player.getId() ); clearDirector( player ); + + auto& scriptMgr = Common::Service< Scripting::ScriptMgr >::ref(); + scriptMgr.onInstanceLeaveTerritory( *this, player ); } void Sapphire::InstanceContent::onUpdate( uint64_t tickCount )