1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-26 06:27:45 +00:00

Merge pull request #208 from GokuWeedLord/feature/nativescripting

scripts are now built into common libs instead of seperate libs
This commit is contained in:
Mordred 2017-12-27 09:33:54 +01:00 committed by GitHub
commit 76cd9cdd80
31 changed files with 227 additions and 225 deletions

3
.gitignore vendored
View file

@ -111,3 +111,6 @@ src/common/Version\.cpp
# travis-ci build mtime cache # travis-ci build mtime cache
.mtime_cache .mtime_cache
# generated script loader files
scripts/native/*/ScriptLoader.cpp

View file

@ -2,32 +2,47 @@ cmake_minimum_required(VERSION 3.0)
project(Sapphire_Script) project(Sapphire_Script)
file(GLOB SCRIPT_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h") file(GLOB SCRIPT_INCLUDE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.h")
file(GLOB_RECURSE SCRIPT_FILES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
include_directories("${CMAKE_SOURCE_DIR}/src/servers/") include_directories("${CMAKE_SOURCE_DIR}/src/servers/")
include_directories("${CMAKE_SOURCE_DIR}/src/servers/sapphire_zone/") include_directories("${CMAKE_SOURCE_DIR}/src/servers/sapphire_zone/")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}") include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
if(MSVC) message("exec: ${EXECUTABLE_OUTPUT_DIRECTORY}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Yc\"${CMAKE_CURRENT_SOURCE_DIR}/ScriptObject.h\" /FI\"${CMAKE_CURRENT_SOURCE_DIR}/ScriptObject.h\"")
endif()
message( "exec: ${EXECUTABLE_OUTPUT_DIRECTORY}" ) set(SCRIPT_LIB_DIR "${EXECUTABLE_OUTPUT_DIRECTORY}/compiledscripts/" )
set(EXECUTABLE_OUTPUT_PATH "${SCRIPT_LIB_DIR}")
set(LIBRARY_OUTPUT_PATH "${SCRIPT_LIB_DIR}")
set(RUNTIME_OUTPUT_DIRECTORY "${SCRIPT_LIB_DIR}")
set( SCRIPT_LIB_DIR "${EXECUTABLE_OUTPUT_DIRECTORY}/compiledscripts/" )
set( EXECUTABLE_OUTPUT_PATH "${SCRIPT_LIB_DIR}")
set( LIBRARY_OUTPUT_PATH "${SCRIPT_LIB_DIR}")
set( RUNTIME_OUTPUT_DIRECTORY "${SCRIPT_LIB_DIR}")
foreach(_sourcefile ${SCRIPT_FILES}) file(GLOB children "${CMAKE_CURRENT_SOURCE_DIR}/*" )
get_filename_component(_file "${_sourcefile}" NAME_WE) foreach(_scriptDir ${children})
add_library("${_file}" MODULE "${_sourcefile}" "${SCRIPT_INCLUDE_FILES}") get_filename_component(_name "${_scriptDir}" NAME_WE)
if(IS_DIRECTORY ${_scriptDir} AND NOT ${_name} MATCHES "CMakeFiles")
message("discovered plugin lib: ${_scriptDir} (${_name})")
file(GLOB_RECURSE SCRIPT_FILES "${_scriptDir}/*.cpp")
# build file list
foreach(_script ${SCRIPT_FILES})
get_filename_component( _scriptname "${_script}" NAME_WE)
if(NOT ${_scriptname} MATCHES "ScriptLoader")
if(ScriptIncludes)
set(ScriptIncludes "${ScriptIncludes}\n#include \"${_script}\"")
else()
set(ScriptIncludes "#include \"${_script}\"")
endif()
set(ScriptNames "${ScriptNames} static_cast< ScriptObject* >( new ${_scriptname} ),\n")
endif()
endforeach()
add_library("script_${_name}" MODULE "${SCRIPT_FILES}" "${SCRIPT_INCLUDE_FILES}" "${_scriptDir}/ScriptLoader.cpp")
target_link_libraries("script_${_name}" sapphire_zone)
if(MSVC) if(MSVC)
set_source_files_properties("${_file}" PROPERTIES set_target_properties("script_${_name}" PROPERTIES
COMPILE_FLAGS "/YuScriptObject.h"
)
set_target_properties(${_file} PROPERTIES
CXX_STANDARD 14 CXX_STANDARD 14
CXX_STANDARD_REQUIRED ON CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS ON CXX_EXTENSIONS ON
@ -38,11 +53,15 @@ foreach(_sourcefile ${SCRIPT_FILES})
) )
endif() endif()
target_link_libraries("${_file}" sapphire_zone) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/ScriptLoader.cpp.in" "${_scriptDir}/ScriptLoader.cpp")
add_custom_command(TARGET "${_file}" POST_BUILD add_custom_command(TARGET "script_${_name}" POST_BUILD
COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/${_file}.exp" COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.exp"
COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/${_file}.lib" COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.lib"
COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/${_file}.ilk" COMMAND ${CMAKE_COMMAND} -E remove "${SCRIPT_LIB_DIR}/script_${_name}.ilk"
) )
endforeach(_sourcefile ${SCRIPT_FILES})
unset(ScriptIncludes)
unset(ScriptNames)
endif()
endforeach()

View file

@ -34,5 +34,3 @@ public:
Scene00000( player ); Scene00000( player );
} }
}; };
EXPORT_SCRIPTOBJECT( CmnDefCutSceneReplay )

View file

@ -54,5 +54,3 @@ public:
Scene00100( player ); Scene00100( player );
} }
}; };
EXPORT_SCRIPTOBJECT( CmnDefInnBed )

View file

@ -56,5 +56,3 @@ public:
Scene00001( player ); Scene00001( player );
} }
}; };
EXPORT_SCRIPTOBJECT( CmnDefLinkShell )

View file

@ -1,9 +1,9 @@
#include "../ScriptObject.h" #include "../ScriptObject.h"
class HouFurOrchestrionDef : public EventScript class HouFurOrchestrion : public EventScript
{ {
public: public:
HouFurOrchestrionDef() : EventScript( "HouFurOrchestrionDef", 721226 ) HouFurOrchestrion() : EventScript( "HouFurOrchestrion", 721226 )
{} {}
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
@ -16,5 +16,3 @@ public:
Scene00000( player ); Scene00000( player );
} }
}; };
EXPORT_SCRIPTOBJECT( HouFurOrchestrionDef )

View file

@ -0,0 +1,16 @@
#include <vector>
class ScriptObject;
@ScriptIncludes@
const ScriptObject* ptrs[] =
{
@ScriptNames@
nullptr
};
extern "C" EXPORT const ScriptObject** getScripts()
{
return ptrs;
}

View file

@ -11,5 +11,3 @@ public:
player.addStatusEffectByIdIfNotExist( 50, 20000, player, 30 ); player.addStatusEffectByIdIfNotExist( 50, 20000, player, 30 );
} }
}; };
EXPORT_SCRIPTOBJECT( ActionSprint3 )

View file

@ -44,5 +44,3 @@ public:
} }
}; };
EXPORT_SCRIPTOBJECT( Aethernet )

View file

@ -66,5 +66,3 @@ public:
} }
} }
}; };
EXPORT_SCRIPTOBJECT( Aetheryte )

View file

@ -1,31 +1,28 @@
#include "../ScriptObject.h" #include "../ScriptObject.h"
#define ERANGE_HOWTO_ANN_AND_QUEST 2117539
#define ERANGE_HOWTO_QUEST_REWARD 2366417
#define ERANGE_SEQ_1_CLOSED_1 2351918
#define POS_SEQ_1_CLOSED_RETURN_1 2351921
#define ERANGE_SEQ_1_CLOSED_2 2351919
#define POS_SEQ_1_CLOSED_RETURN_2 2351921
#define ERANGE_ALWAYS_CLOSED_1 2280846
#define POS_ALWAYS_CLOSED_RETURN_1 2320804
#define ENPC_ALWAYS_CLOSED_1 2367988
#define ERANGE_ALWAYS_CLOSED_3 2280851
#define POS_ALWAYS_CLOSED_RETURN_3 2320811
#define ENPC_ALWAYS_CLOSED_3 2563491
#define BGM_MUSIC_ZONE_FST_TWN 1003
#define NCUT_FST_1 3
#define NCUT_FST_2 53
#define NCUT_FST_3 226
#define ENPC_QUEST_OFFER 1985150
#define NCUT_LIGHT_ALL 2
#define NCUT_LIGHT_FST_1 147
#define NCUT_LIGHT_FST_2 146
class OpeningGridania : public EventScript class OpeningGridania : public EventScript
{ {
public: private:
OpeningGridania() : EventScript( "OpeningGridania", 1245186 ) static constexpr auto ERANGE_HOWTO_ANN_AND_QUEST = 2117539;
{} static constexpr auto ERANGE_HOWTO_QUEST_REWARD = 2366417;
static constexpr auto ERANGE_SEQ_1_CLOSED_1 = 2351918;
static constexpr auto POS_SEQ_1_CLOSED_RETURN_1 = 2351921;
static constexpr auto ERANGE_SEQ_1_CLOSED_2 = 2351919;
static constexpr auto POS_SEQ_1_CLOSED_RETURN_2 = 2351921;
static constexpr auto ERANGE_ALWAYS_CLOSED_1 = 2280846;
static constexpr auto POS_ALWAYS_CLOSED_RETURN_1 = 2320804;
static constexpr auto ENPC_ALWAYS_CLOSED_1 = 2367988;
static constexpr auto ERANGE_ALWAYS_CLOSED_3 = 2280851;
static constexpr auto POS_ALWAYS_CLOSED_RETURN_3 = 2320811;
static constexpr auto ENPC_ALWAYS_CLOSED_3 = 2563491;
static constexpr auto BGM_MUSIC_ZONE_FST_TWN = 1003;
static constexpr auto NCUT_FST_1 = 3;
static constexpr auto NCUT_FST_2 = 53;
static constexpr auto NCUT_FST_3 = 226;
static constexpr auto ENPC_QUEST_OFFER = 1985150;
static constexpr auto NCUT_LIGHT_ALL = 2;
static constexpr auto NCUT_LIGHT_FST_1 = 147;
static constexpr auto NCUT_LIGHT_FST_2 = 146;
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {
@ -67,7 +64,9 @@ public:
player.eventPlay( getId(), 40, 1, 2, 1, callback ); player.eventPlay( getId(), 40, 1, 2, 1, callback );
} }
/////////////////////////////// public:
OpeningGridania() : EventScript( "OpeningGridania", 1245186 )
{}
void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override void onEnterZone( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2 ) override
{ {
@ -89,5 +88,3 @@ public:
} }
} }
}; };
EXPORT_SCRIPTOBJECT( OpeningGridania )

View file

@ -96,5 +96,3 @@ public:
// todo: handle closed events // todo: handle closed events
} }
}; };
EXPORT_SCRIPTOBJECT( OpeningLimsa )

View file

@ -89,5 +89,3 @@ public:
} }
} }
}; };
EXPORT_SCRIPTOBJECT( OpeningUldah )

View file

@ -6,29 +6,29 @@
// Start NPC: 1001148 // Start NPC: 1001148
// End NPC: 1001140 // End NPC: 1001140
#define SEQ_0 0
#define SEQ_FINISH 255
#define RewardExpFactor 50
#define RewardGil 103
#define ACTOR0 1001148
#define ACTOR1 1001140
#define CUT_EVENT 29
#define EOBJECT0 2001659
#define EOBJECT1 2001660
#define EOBJECT7 2616477
#define EVENT_ACTION_SEARCH 1
#define HOWTO_QUEST_ACCEPT 12
#define HOWTO_QUEST_ANNOUNCE 2
#define HOWTO_REWARD 11
#define HOWTO_TODO 3
#define OPENING_EVENT_HANDLER 1245186
#define SEQ_2_ACTOR1 2
class ManFst001 : public EventScript class ManFst001 : public EventScript
{ {
private: private:
static constexpr auto SEQ_0 = 0;
static constexpr auto SEQ_FINISH = 255;
static constexpr auto RewardExpFactor = 50;
static constexpr auto RewardGil = 103;
static constexpr auto ACTOR0 = 1001148;
static constexpr auto ACTOR1 = 1001140;
static constexpr auto CUT_EVENT = 29;
static constexpr auto EOBJECT0 = 2001659;
static constexpr auto EOBJECT1 = 2001660;
static constexpr auto EOBJECT7 = 2616477;
static constexpr auto EVENT_ACTION_SEARCH = 1;
static constexpr auto HOWTO_QUEST_ACCEPT = 12;
static constexpr auto HOWTO_QUEST_ANNOUNCE = 2;
static constexpr auto HOWTO_REWARD = 11;
static constexpr auto HOWTO_TODO = 3;
static constexpr auto OPENING_EVENT_HANDLER = 1245186;
static constexpr auto SEQ_2_ACTOR1 = 2;
void Scene00000( Entity::Player& player ) void Scene00000( Entity::Player& player )
{ {
auto callback = [&]( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 ) auto callback = [&]( Entity::Player& player, uint32_t eventId, uint16_t param1, uint16_t param2, uint16_t param3 )
@ -102,5 +102,3 @@ public:
Scene00004( player ); Scene00004( player );
} }
}; };
EXPORT_SCRIPTOBJECT( ManFst001 )

View file

@ -221,5 +221,3 @@ public:
Scene00005( player ); Scene00005( player );
} }
}; };
EXPORT_SCRIPTOBJECT( ManFst002 )

View file

@ -19,5 +19,3 @@ public:
} }
}; };
EXPORT_SCRIPTOBJECT( ManFst003 )

View file

@ -78,7 +78,7 @@ class ManFst004 : public EventScript
// Event Handlers // Event Handlers
void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override void onTalk( uint32_t eventId, Entity::Player& player, uint64_t actorId ) override
{ {
auto actor = Event::mapEventActorToRealActor( actorId ); auto actor = Event::mapEventActorToRealActor( static_cast< uint32_t >( actorId ) );
if( actor == ManFst004::Actor0 ) if( actor == ManFst004::Actor0 )
{ {
Scene00000( player ); Scene00000( player );
@ -255,5 +255,3 @@ class ManFst004 : public EventScript
} }
}; };
EXPORT_SCRIPTOBJECT( ManFst004 );

View file

@ -159,5 +159,3 @@ public:
Scene00011( player ); Scene00011( player );
} }
}; };
EXPORT_SCRIPTOBJECT( ManSea001 );

View file

@ -147,5 +147,3 @@ public:
Scene00000( player ); Scene00000( player );
} }
}; };
EXPORT_SCRIPTOBJECT( ManSea002 )

View file

@ -141,5 +141,3 @@ public:
Scene00004( player ); Scene00004( player );
} }
}; };
EXPORT_SCRIPTOBJECT( ManWil001 )

View file

@ -154,5 +154,3 @@ public:
Scene00000( player ); Scene00000( player );
} }
}; };
EXPORT_SCRIPTOBJECT( ManWil002 )

View file

@ -82,5 +82,3 @@ public:
} }
} }
}; };
EXPORT_SCRIPTOBJECT( SubFst001 )

View file

@ -54,5 +54,3 @@ public:
Scene00001( player ); Scene00001( player );
} }
}; };
EXPORT_SCRIPTOBJECT( SubFst010 )

View file

@ -182,5 +182,3 @@ public:
Scene00096( player ); Scene00096( player );
} }
}; };
EXPORT_SCRIPTOBJECT( SubFst013 )

View file

@ -1,10 +0,0 @@
#include "Version.h"
namespace Core {
namespace Version {
const std::string GIT_HASH = "d799f2e3c2d745f9d9e07d6e37664fc031b7c264";
const std::string VERSION = "-128-NOTFOUND";
} /* Version */
} /* Core */

View file

@ -567,9 +567,9 @@ void Core::DebugCommandHandler::script( char* data, Entity::Player &player, boos
for( auto it = scripts.begin(); it != scripts.end(); ++it ) for( auto it = scripts.begin(); it != scripts.end(); ++it )
{ {
auto script = *it; auto script = *it;
player.sendDebug( " - '" + script->script_name + "' loaded at @ 0x" + player.sendDebug( " - '" + script->library_name + "' loaded at @ 0x" +
boost::str( boost::format( "%|X|" ) % script->handle ) + boost::str( boost::format( "%|X|" ) % script->handle ) +
", script ptr: 0x" + boost::str( boost::format( "%|X|" ) % script->script ) ); ", num scripts: " + std::to_string( script->scripts.size() ) );
} }
} }
else else

View file

@ -12,10 +12,6 @@
#define EXPORT __attribute__((visibility("default"))) #define EXPORT __attribute__((visibility("default")))
#endif #endif
#define EXPORT_SCRIPTOBJECT( type ) \
extern "C" EXPORT ScriptObject* getScript() \
{ return static_cast< ScriptObject* >( new type ); }
using namespace Core; using namespace Core;
// constant script ids for certain events // constant script ids for certain events

View file

@ -57,16 +57,23 @@ namespace Core {
if( !module ) if( !module )
return false; return false;
auto script = m_loader.getScriptObject( module->handle ); auto scripts = m_loader.getScripts( module->handle );
if( !script ) if( !scripts )
{ {
m_loader.unloadScript( module ); m_loader.unloadScript( module );
return false; return false;
} }
module->script = script; //
module->script_name = script->getName(); bool success = false;
module->type = script->getType();
for( int i = 0; ; i++ )
{
if( scripts[i] == nullptr )
break;
auto script = scripts[i];
module->scripts.push_back( script );
switch( script->getType() ) switch( script->getType() )
{ {
@ -85,9 +92,14 @@ namespace Core {
case ScriptType::Zone: case ScriptType::Zone:
m_zoneScripts[ script->getId() ] = dynamic_cast< ZoneScript* >( script ); m_zoneScripts[ script->getId() ] = dynamic_cast< ZoneScript* >( script );
break; break;
}
default: success = true;
m_loader.unloadScript( module ); }
if( !success )
{
m_loader.unloadScript( module->handle );
return false; return false;
} }
@ -110,28 +122,31 @@ namespace Core {
bool NativeScriptManager::unloadScript( ScriptInfo* info ) bool NativeScriptManager::unloadScript( ScriptInfo* info )
{ {
auto ptr = info->script; for( auto& script : info->scripts )
{
switch( info->type ) switch( script->getType() )
{ {
case ScriptType::StatusEffect: case ScriptType::StatusEffect:
removeValueFromMap< uint32_t, StatusEffectScript* >( ptr, m_statusEffectScripts ); removeValueFromMap< uint32_t, StatusEffectScript* >( script, m_statusEffectScripts );
break; break;
case ScriptType::Action: case ScriptType::Action:
removeValueFromMap< uint32_t, ActionScript* >( ptr, m_actionScripts ); removeValueFromMap< uint32_t, ActionScript* >( script, m_actionScripts );
break; break;
case ScriptType::Quest: case ScriptType::Quest:
removeValueFromMap< uint32_t, EventScript* >( ptr, m_eventScripts ); removeValueFromMap< uint32_t, EventScript* >( script, m_eventScripts );
break; break;
case ScriptType::BattleNpc: case ScriptType::BattleNpc:
removeValueFromMap< uint32_t, BattleNpcScript* >( ptr, m_battleNpcScripts ); removeValueFromMap< uint32_t, BattleNpcScript* >( script, m_battleNpcScripts );
break; break;
case ScriptType::Zone: case ScriptType::Zone:
removeValueFromMap< uint32_t, ZoneScript* >( ptr, m_zoneScripts ); removeValueFromMap< uint32_t, ZoneScript* >( script, m_zoneScripts );
break; break;
default: default:
return false; continue;
}
delete script;
} }
return m_loader.unloadScript( info ); return m_loader.unloadScript( info );

View file

@ -1,6 +1,8 @@
#ifndef SAPPHIRE_SCRIPTINFO_H #ifndef SAPPHIRE_SCRIPTINFO_H
#define SAPPHIRE_SCRIPTINFO_H #define SAPPHIRE_SCRIPTINFO_H
#include <vector>
#include "NativeScriptApi.h" #include "NativeScriptApi.h"
#ifdef _WIN32 #ifdef _WIN32
@ -22,9 +24,8 @@ namespace Scripting {
std::string cache_path; std::string cache_path;
std::string library_path; std::string library_path;
std::string script_name;
ModuleHandle handle; ModuleHandle handle;
ScriptObject* script; std::vector< ScriptObject* > scripts;
ScriptType type; ScriptType type;
}; };
} }

View file

@ -100,22 +100,21 @@ Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::loadModule( const st
return info; return info;
} }
ScriptObject* Core::Scripting::ScriptLoader::getScriptObject( ModuleHandle handle ) ScriptObject** Core::Scripting::ScriptLoader::getScripts( ModuleHandle handle )
{ {
using getScript = ScriptObject*(*)(); using getScripts = ScriptObject**(*)();
#ifdef _WIN32 #ifdef _WIN32
getScript func = reinterpret_cast< getScript >( GetProcAddress( handle, "getScript" ) ); getScripts func = reinterpret_cast< getScripts >( GetProcAddress( handle, "getScripts" ) );
#else #else
getScript func = reinterpret_cast< getScript >( dlsym( handle, "getScript" ) ); getScripts func = reinterpret_cast< getScripts >( dlsym( handle, "getScripts" ) );
#endif #endif
if( func ) if( func )
{ {
auto ptr = func(); auto ptr = func();
g_log.debug( "got ScriptObject @ 0x" + boost::str( boost::format( "%|08X|" ) % ptr ) ); g_log.debug( "got ScriptObject array @ 0x" + boost::str( boost::format( "%|08X|" ) % ptr ) );
g_log.debug( "script info -> name: " + std::string( ptr->getName() ) + ", id: " + std::to_string( ptr->getId() ) );
return ptr; return ptr;
} }
@ -171,7 +170,7 @@ Core::Scripting::ScriptInfo* Core::Scripting::ScriptLoader::getScriptInfo( std::
{ {
for( auto it = m_scriptMap.begin(); it != m_scriptMap.end(); ++it ) for( auto it = m_scriptMap.begin(); it != m_scriptMap.end(); ++it )
{ {
if( it->second->script_name == name ) if( it->second->library_name == name )
{ {
return it->second; return it->second;
} }
@ -184,7 +183,7 @@ void Core::Scripting::ScriptLoader::findScripts( std::set< Core::Scripting::Scri
{ {
for( auto it = m_scriptMap.begin(); it != m_scriptMap.end(); ++it ) for( auto it = m_scriptMap.begin(); it != m_scriptMap.end(); ++it )
{ {
if( it->second->script_name.find( search ) != std::string::npos ) if( it->second->library_name.find( search ) != std::string::npos )
{ {
scripts.insert( it->second ); scripts.insert( it->second );
} }

View file

@ -19,7 +19,8 @@ typedef void* ModuleHandle;
namespace Core { namespace Core {
namespace Scripting { namespace Scripting {
class ScriptLoader { class ScriptLoader
{
protected: protected:
std::unordered_map< std::string, ScriptInfo* > m_scriptMap; std::unordered_map< std::string, ScriptInfo* > m_scriptMap;
@ -30,10 +31,15 @@ namespace Scripting {
const std::string getModuleExtension(); const std::string getModuleExtension();
ScriptInfo* loadModule( const std::string& ); ScriptInfo* loadModule( const std::string& );
bool unloadScript( ScriptInfo* ); bool unloadScript( ScriptInfo* );
bool unloadScript( ModuleHandle ); bool unloadScript( ModuleHandle );
ScriptInfo* getScriptInfo( std::string name ); ScriptInfo* getScriptInfo( std::string name );
ScriptObject** getScripts( ModuleHandle handle );
ScriptObject* getScriptObject( ModuleHandle handle ); ScriptObject* getScriptObject( ModuleHandle handle );
bool isModuleLoaded( std::string name ); bool isModuleLoaded( std::string name );
void findScripts( std::set< Core::Scripting::ScriptInfo* >& scripts, const std::string& search ); void findScripts( std::set< Core::Scripting::ScriptInfo* >& scripts, const std::string& search );