diff --git a/src/servers/Server_Zone/Script/NativeScript.cpp b/src/servers/Server_Zone/Script/NativeScript.cpp index 94861a66..df8a5fcf 100644 --- a/src/servers/Server_Zone/Script/NativeScript.cpp +++ b/src/servers/Server_Zone/Script/NativeScript.cpp @@ -53,36 +53,36 @@ namespace Core { void NativeScript::loadScript( std::string path ) { -// auto handle = m_loader.loadModule( path ); -// if( handle ) -// { -// // todo: this is shit -// if( auto script = m_loader.getScriptObject< StatusEffectScript >( handle ) ) -// { -// m_statusEffectScripts.insert( std::make_pair( script->getEffectId(), script ) ); -// } -// else if( auto script = m_loader.getScriptObject< ActionScript >( handle ) ) -// { -// m_actionScripts.insert( std::make_pair( script->getActionId(), script ) ); -// } -// else if( auto script = m_loader.getScriptObject< QuestScript >( handle ) ) -// { -// m_questScripts.insert( std::make_pair( script->getQuestId(), script ) ); -// } -// else if( auto script = m_loader.getScriptObject< BattleNpcScript >( handle ) ) -// { -// m_battleNpcScripts.insert( std::make_pair( script->getNpcId(), script ) ); -// } -// else if( auto script = m_loader.getScriptObject< ZoneScript >( handle ) ) -// { -// m_zoneScripts.insert( std::make_pair( script->getZoneId(), script ) ); -// } -// else -// { -// // unload anything which doesn't have a suitable export -// m_loader.unloadScript( handle ); -// } -// } + auto handle = m_loader.loadModule( path ); + if( handle ) + { + // todo: this is shit + if( auto script = m_loader.getScriptObject< StatusEffectScript >( handle ) ) + { + m_statusEffectScripts.insert( std::make_pair( script->getEffectId(), script ) ); + } + else if( auto script = m_loader.getScriptObject< ActionScript >( handle ) ) + { + m_actionScripts.insert( std::make_pair( script->getActionId(), script ) ); + } + else if( auto script = m_loader.getScriptObject< QuestScript >( handle ) ) + { + m_questScripts.insert( std::make_pair( script->getQuestId(), script ) ); + } + else if( auto script = m_loader.getScriptObject< BattleNpcScript >( handle ) ) + { + m_battleNpcScripts.insert( std::make_pair( script->getNpcId(), script ) ); + } + else if( auto script = m_loader.getScriptObject< ZoneScript >( handle ) ) + { + m_zoneScripts.insert( std::make_pair( script->getZoneId(), script ) ); + } + else + { + // unload anything which doesn't have a suitable export + m_loader.unloadScript( handle ); + } + } } diff --git a/src/servers/Server_Zone/Script/ScriptLoader.cpp b/src/servers/Server_Zone/Script/ScriptLoader.cpp index 4ad8c285..8632a298 100644 --- a/src/servers/Server_Zone/Script/ScriptLoader.cpp +++ b/src/servers/Server_Zone/Script/ScriptLoader.cpp @@ -60,12 +60,11 @@ ModuleHandle Core::Scripting::ScriptLoader::loadModule( std::string path ) return handle; } -template< typename T > -T* Core::Scripting::ScriptLoader::getScriptObject( ModuleHandle handle ) +ScriptObject* Core::Scripting::ScriptLoader::getScriptObject( ModuleHandle handle, std::string name ) { - typedef T* (*getScriptObjectType)(); + typedef ScriptObject* (*getScriptObjectType)(); + auto fn = boost::str( boost::format( "get%1%" ) % name ); - auto fn = boost::str( boost::format( "get%1%" ) % typeid( T ).name() ); g_log.info( "getting symbol: " + fn ); #ifdef _WIN32 diff --git a/src/servers/Server_Zone/Script/ScriptLoader.h b/src/servers/Server_Zone/Script/ScriptLoader.h index 508c52c3..3d422620 100644 --- a/src/servers/Server_Zone/Script/ScriptLoader.h +++ b/src/servers/Server_Zone/Script/ScriptLoader.h @@ -7,7 +7,6 @@ #ifdef _WIN32 #include - typedef HMODULE ModuleHandle; #else #include @@ -31,8 +30,13 @@ namespace Scripting { bool unloadScript( std::string ); bool unloadScript( ModuleHandle ); + ScriptObject* getScriptObject( ModuleHandle handle, std::string name ); + template< typename T > - T* getScriptObject( ModuleHandle ); + T* getScriptObject( ModuleHandle handle ) + { + return static_cast< T* >( getScriptObject( handle, typeid( T ).name() ) ); + } }; }