From 61dfd16d7bf440ced616d80b6bbcf4b9343172e3 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 9 Feb 2018 02:34:43 +1100 Subject: [PATCH] instance scripting stuff --- src/servers/sapphire_zone/Forwards.h | 1 + .../sapphire_zone/Script/NativeScriptApi.h | 22 ++++++++++++---- .../sapphire_zone/Script/ScriptManager.cpp | 26 ++++++++++++++++++- .../sapphire_zone/Script/ScriptManager.h | 2 ++ .../Script/Scripts/CMakeLists.txt | 2 +- .../Script/Scripts/ScriptLoader.cpp.in | 3 --- .../Scripts/instances/trials/TheNavel.cpp | 19 ++++++++++++++ .../sapphire_zone/Zone/InstanceContent.cpp | 5 ++++ 8 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 src/servers/sapphire_zone/Script/Scripts/instances/trials/TheNavel.cpp diff --git a/src/servers/sapphire_zone/Forwards.h b/src/servers/sapphire_zone/Forwards.h index 54bfaa1a..8038a008 100644 --- a/src/servers/sapphire_zone/Forwards.h +++ b/src/servers/sapphire_zone/Forwards.h @@ -13,6 +13,7 @@ namespace Core { TYPE_FORWARD( Cell ); TYPE_FORWARD( Zone ); + TYPE_FORWARD( InstanceContent ); TYPE_FORWARD( Item ); TYPE_FORWARD( ItemContainer ); TYPE_FORWARD( Inventory ); diff --git a/src/servers/sapphire_zone/Script/NativeScriptApi.h b/src/servers/sapphire_zone/Script/NativeScriptApi.h index 72c0fac6..893dc6cd 100644 --- a/src/servers/sapphire_zone/Script/NativeScriptApi.h +++ b/src/servers/sapphire_zone/Script/NativeScriptApi.h @@ -8,6 +8,7 @@ #include #include #include +#include #ifdef _MSC_VER #define EXPORT __declspec( dllexport ) @@ -48,7 +49,7 @@ public: class StatusEffectScript : public ScriptObject { public: - StatusEffectScript( uint32_t effectId ) : + explicit StatusEffectScript( uint32_t effectId ) : ScriptObject( effectId, typeid( StatusEffectScript ).hash_code() ) { } @@ -66,7 +67,7 @@ public: class ActionScript : public ScriptObject { public: - ActionScript( uint32_t abilityId ) : + explicit ActionScript( uint32_t abilityId ) : ScriptObject( abilityId, typeid( ActionScript ).hash_code() ) { } @@ -79,7 +80,7 @@ public: class EventScript : public ScriptObject { public: - EventScript( uint32_t questId ) : + explicit EventScript( uint32_t questId ) : ScriptObject( questId, typeid( EventScript ).hash_code() ) { } @@ -97,7 +98,7 @@ public: class BattleNpcScript : public ScriptObject { public: - BattleNpcScript( uint32_t npcId ) : + explicit BattleNpcScript( uint32_t npcId ) : ScriptObject( npcId, typeid( BattleNpcScript ).hash_code() ) { } }; @@ -105,11 +106,22 @@ public: class ZoneScript : public ScriptObject { public: - ZoneScript( uint32_t zoneId ) : + explicit ZoneScript( uint32_t zoneId ) : ScriptObject( zoneId, typeid( ZoneScript ).hash_code() ) { } virtual void onZoneInit() { } }; +class InstanceContentScript : public ScriptObject +{ +public: + explicit InstanceContentScript( uint32_t instanceContentId ) : + ScriptObject( instanceContentId, typeid( InstanceContentScript ).hash_code() ) + { } + + virtual void onInit( InstanceContent& instance ) { } + virtual void onUpdate( InstanceContent& instance, uint32_t currTime ) { } +}; + #endif \ No newline at end of file diff --git a/src/servers/sapphire_zone/Script/ScriptManager.cpp b/src/servers/sapphire_zone/Script/ScriptManager.cpp index 2467fa07..d6024b81 100644 --- a/src/servers/sapphire_zone/Script/ScriptManager.cpp +++ b/src/servers/sapphire_zone/Script/ScriptManager.cpp @@ -332,7 +332,7 @@ bool Core::Scripting::ScriptManager::onStatusTimeOut( Entity::ActorPtr pActor, u bool Core::Scripting::ScriptManager::onZoneInit( ZonePtr pZone ) { - auto script = m_nativeScriptManager->getScript< ZoneScript >(pZone->getTerritoryId() ); + auto script = m_nativeScriptManager->getScript< ZoneScript >( pZone->getTerritoryId() ); if( script ) { script->onZoneInit(); @@ -342,6 +342,30 @@ bool Core::Scripting::ScriptManager::onZoneInit( ZonePtr pZone ) return false; } +bool Core::Scripting::ScriptManager::onInstanceInit( InstanceContent& instance ) +{ + auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance.getInstanceContentId() ); + if( script ) + { + script->onInit( instance ); + return true; + } + + return false; +} + +bool Core::Scripting::ScriptManager::onInstanceUpdate( InstanceContent& instance, uint32_t currTime ) +{ + auto script = m_nativeScriptManager->getScript< InstanceContentScript >( instance.getInstanceContentId() ); + if( script ) + { + script->onUpdate( instance, currTime ); + return true; + } + + return false; +} + Scripting::NativeScriptManager& Core::Scripting::ScriptManager::getNativeScriptHandler() { return *m_nativeScriptManager; diff --git a/src/servers/sapphire_zone/Script/ScriptManager.h b/src/servers/sapphire_zone/Script/ScriptManager.h index 958412a0..634afefb 100644 --- a/src/servers/sapphire_zone/Script/ScriptManager.h +++ b/src/servers/sapphire_zone/Script/ScriptManager.h @@ -59,6 +59,8 @@ namespace Core bool onEventHandlerReturn( Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param1, uint16_t param2, uint16_t param3 ); bool onEventHandlerTradeReturn( Entity::Player& player, uint32_t eventId, uint16_t subEvent, uint16_t param, uint32_t catalogId ); + bool onInstanceInit( InstanceContent& instance ); + bool onInstanceUpdate( InstanceContent& instance, uint32_t currTime ); void loadDir( const std::string& dirname, std::set &files, const std::string& ext ); diff --git a/src/servers/sapphire_zone/Script/Scripts/CMakeLists.txt b/src/servers/sapphire_zone/Script/Scripts/CMakeLists.txt index aeaa0094..5b1dedf1 100644 --- a/src/servers/sapphire_zone/Script/Scripts/CMakeLists.txt +++ b/src/servers/sapphire_zone/Script/Scripts/CMakeLists.txt @@ -39,7 +39,7 @@ foreach(_scriptDir ${children}) endforeach() add_library("script_${_name}" MODULE "${SCRIPT_FILES}" "${SCRIPT_INCLUDE_FILES}" "${_scriptDir}/ScriptLoader.cpp") - target_link_libraries("script_${_name}" sapphire_zone) + target_link_libraries("script_${_name}" sapphire_zone ${Boost_LIBRARIES}) if(MSVC) set_target_properties("script_${_name}" PROPERTIES diff --git a/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in b/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in index 4530fb82..739b32af 100644 --- a/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in +++ b/src/servers/sapphire_zone/Script/Scripts/ScriptLoader.cpp.in @@ -1,8 +1,5 @@ -#include #include