2017-12-10 01:52:03 +11:00
|
|
|
#include "NativeScript.h"
|
|
|
|
|
|
|
|
namespace Core {
|
|
|
|
namespace Scripting {
|
|
|
|
|
|
|
|
NativeScript::NativeScript( )
|
|
|
|
{ }
|
|
|
|
|
|
|
|
StatusEffectScript* NativeScript::getStatusEffectScript( uint32_t statusId )
|
|
|
|
{
|
2017-12-10 21:44:18 +11:00
|
|
|
auto script = m_statusEffectScripts.find( statusId );
|
|
|
|
if( script == m_statusEffectScripts.end() )
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
return script->second;
|
2017-12-10 01:52:03 +11:00
|
|
|
}
|
|
|
|
|
2017-12-10 15:31:48 +11:00
|
|
|
ActionScript* NativeScript::getAbilityScript( uint32_t abilityId )
|
2017-12-10 01:52:03 +11:00
|
|
|
{
|
2017-12-10 21:44:18 +11:00
|
|
|
auto script = m_actionScripts.find( abilityId );
|
|
|
|
if( script == m_actionScripts.end() )
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
return script->second;
|
2017-12-10 01:52:03 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
QuestScript* NativeScript::getQuestScript( uint32_t questId )
|
|
|
|
{
|
2017-12-10 21:44:18 +11:00
|
|
|
auto script = m_questScripts.find( questId );
|
|
|
|
if( script == m_questScripts.end() )
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
return script->second;
|
2017-12-10 01:52:03 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
BattleNpcScript* NativeScript::getBattleNpcScript( uint32_t npcId )
|
|
|
|
{
|
2017-12-10 21:44:18 +11:00
|
|
|
auto script = m_battleNpcScripts.find( npcId );
|
|
|
|
if( script == m_battleNpcScripts.end() )
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
return script->second;
|
2017-12-10 01:52:03 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
ZoneScript* NativeScript::getZoneScript( uint32_t zoneId )
|
|
|
|
{
|
2017-12-10 21:44:18 +11:00
|
|
|
auto script = m_zoneScripts.find( zoneId );
|
|
|
|
if( script == m_zoneScripts.end() )
|
|
|
|
return nullptr;
|
|
|
|
|
|
|
|
return script->second;
|
2017-12-10 01:52:03 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
void NativeScript::removeStatusEffectScript( uint32_t statusId )
|
|
|
|
{
|
|
|
|
m_statusEffectScripts.erase( statusId );
|
|
|
|
}
|
|
|
|
|
|
|
|
void NativeScript::removeAbilityScript( uint32_t abilityId )
|
|
|
|
{
|
2017-12-10 15:31:48 +11:00
|
|
|
m_actionScripts.erase( abilityId );
|
2017-12-10 01:52:03 +11:00
|
|
|
}
|
|
|
|
|
|
|
|
void NativeScript::removeQuestScript( uint32_t questId )
|
|
|
|
{
|
|
|
|
m_questScripts.erase( questId );
|
|
|
|
}
|
|
|
|
|
|
|
|
void NativeScript::removeBattleNpcScript( uint32_t npcId )
|
|
|
|
{
|
|
|
|
m_battleNpcScripts.erase( npcId );
|
|
|
|
}
|
|
|
|
|
2017-12-12 01:45:24 +11:00
|
|
|
bool NativeScript::loadScript( std::string path )
|
2017-12-10 15:31:48 +11:00
|
|
|
{
|
2017-12-12 01:45:24 +11:00
|
|
|
auto info = m_loader.loadModule( path );
|
|
|
|
if( info )
|
2017-12-10 16:49:01 +11:00
|
|
|
{
|
|
|
|
// todo: this is shit
|
2017-12-12 01:45:24 +11:00
|
|
|
if( auto script = m_loader.getScriptObject< StatusEffectScript >( info->handle, "StatusEffectScript" ) )
|
2017-12-10 16:49:01 +11:00
|
|
|
{
|
2017-12-12 01:45:24 +11:00
|
|
|
info->script = script;
|
2017-12-11 21:10:54 +11:00
|
|
|
m_statusEffectScripts[ script->getId() ] = script;
|
2017-12-10 16:49:01 +11:00
|
|
|
}
|
2017-12-12 01:45:24 +11:00
|
|
|
else if( auto script = m_loader.getScriptObject< ActionScript >( info->handle, "ActionScript" ) )
|
2017-12-10 16:49:01 +11:00
|
|
|
{
|
2017-12-12 01:45:24 +11:00
|
|
|
info->script = script;
|
2017-12-11 21:10:54 +11:00
|
|
|
m_actionScripts[ script->getId() ] = script;
|
2017-12-10 16:49:01 +11:00
|
|
|
}
|
2017-12-12 01:45:24 +11:00
|
|
|
else if( auto script = m_loader.getScriptObject< QuestScript >( info->handle, "QuestScript" ) )
|
2017-12-10 16:49:01 +11:00
|
|
|
{
|
2017-12-12 01:45:24 +11:00
|
|
|
info->script = script;
|
2017-12-11 21:10:54 +11:00
|
|
|
m_questScripts[ script->getId() ] = script;
|
2017-12-10 16:49:01 +11:00
|
|
|
}
|
2017-12-12 01:45:24 +11:00
|
|
|
else if( auto script = m_loader.getScriptObject< BattleNpcScript >( info->handle, "BattleNpcScript" ) )
|
2017-12-10 16:49:01 +11:00
|
|
|
{
|
2017-12-12 01:45:24 +11:00
|
|
|
info->script = script;
|
2017-12-11 21:10:54 +11:00
|
|
|
m_battleNpcScripts[ script->getId() ] = script;
|
2017-12-10 16:49:01 +11:00
|
|
|
}
|
2017-12-12 01:45:24 +11:00
|
|
|
else if( auto script = m_loader.getScriptObject< ZoneScript >( info->handle, "ZoneScript" ) )
|
2017-12-10 16:49:01 +11:00
|
|
|
{
|
2017-12-12 01:45:24 +11:00
|
|
|
info->script = script;
|
2017-12-11 21:10:54 +11:00
|
|
|
m_zoneScripts[ script->getId() ] = script;
|
2017-12-10 16:49:01 +11:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// unload anything which doesn't have a suitable export
|
2017-12-12 01:45:24 +11:00
|
|
|
m_loader.unloadScript( info->handle );
|
|
|
|
|
|
|
|
return false;
|
2017-12-10 16:49:01 +11:00
|
|
|
}
|
|
|
|
}
|
2017-12-12 01:45:24 +11:00
|
|
|
else
|
|
|
|
return false;
|
|
|
|
|
|
|
|
return true;
|
2017-12-10 15:31:48 +11:00
|
|
|
}
|
2017-12-10 01:52:03 +11:00
|
|
|
|
2017-12-10 23:51:06 +11:00
|
|
|
const std::string NativeScript::getModuleExtension()
|
|
|
|
{
|
|
|
|
return m_loader.getModuleExtension();
|
|
|
|
}
|
|
|
|
|
2017-12-12 01:45:24 +11:00
|
|
|
bool NativeScript::unloadScript( std::string name )
|
|
|
|
{
|
|
|
|
return m_loader.unloadScript( name );
|
|
|
|
}
|
|
|
|
|
2017-12-10 01:52:03 +11:00
|
|
|
|
|
|
|
boost::shared_ptr< NativeScript > create_script_engine( )
|
|
|
|
{
|
2017-12-12 01:45:24 +11:00
|
|
|
return boost::make_shared< NativeScript >();
|
2017-12-10 01:52:03 +11:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|