1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-04-28 15:17:46 +00:00
sapphire/src/servers/Server_Zone/Script/NativeScript.cpp

140 lines
4.7 KiB
C++
Raw Normal View History

#include "NativeScript.h"
namespace Core {
namespace Scripting {
NativeScript::NativeScript( )
{ }
StatusEffectScript* NativeScript::getStatusEffectScript( uint32_t statusId )
{
auto script = m_statusEffectScripts.find( statusId );
if( script == m_statusEffectScripts.end() )
return nullptr;
return script->second;
}
ActionScript* NativeScript::getActionScript(uint32_t abilityId)
{
auto script = m_actionScripts.find( abilityId );
if( script == m_actionScripts.end() )
return nullptr;
return script->second;
}
QuestScript* NativeScript::getQuestScript( uint32_t questId )
{
auto script = m_questScripts.find( questId );
if( script == m_questScripts.end() )
return nullptr;
return script->second;
}
BattleNpcScript* NativeScript::getBattleNpcScript( uint32_t npcId )
{
auto script = m_battleNpcScripts.find( npcId );
if( script == m_battleNpcScripts.end() )
return nullptr;
return script->second;
}
ZoneScript* NativeScript::getZoneScript( uint32_t zoneId )
{
auto script = m_zoneScripts.find( zoneId );
if( script == m_zoneScripts.end() )
return nullptr;
return script->second;
}
bool NativeScript::loadScript( std::string path )
{
auto info = m_loader.loadModule( path );
if( info )
{
// todo: this is shit
if( auto script = m_loader.getScriptObject< StatusEffectScript >( info->handle, "StatusEffectScript" ) )
{
// todo: make this a define or something
info->script = script;
info->script_name = script->getName();
2017-12-11 21:10:54 +11:00
m_statusEffectScripts[ script->getId() ] = script;
}
else if( auto script = m_loader.getScriptObject< ActionScript >( info->handle, "ActionScript" ) )
{
info->script = script;
info->script_name = script->getName();
2017-12-11 21:10:54 +11:00
m_actionScripts[ script->getId() ] = script;
}
else if( auto script = m_loader.getScriptObject< QuestScript >( info->handle, "QuestScript" ) )
{
info->script = script;
info->script_name = script->getName();
2017-12-11 21:10:54 +11:00
m_questScripts[ script->getId() ] = script;
}
else if( auto script = m_loader.getScriptObject< BattleNpcScript >( info->handle, "BattleNpcScript" ) )
{
info->script = script;
info->script_name = script->getName();
2017-12-11 21:10:54 +11:00
m_battleNpcScripts[ script->getId() ] = script;
}
else if( auto script = m_loader.getScriptObject< ZoneScript >( info->handle, "ZoneScript" ) )
{
info->script = script;
info->script_name = script->getName();
2017-12-11 21:10:54 +11:00
m_zoneScripts[ script->getId() ] = script;
}
else
{
// unload anything which doesn't have a suitable export
m_loader.unloadScript( info->handle );
return false;
}
}
else
return false;
return true;
}
const std::string NativeScript::getModuleExtension()
{
return m_loader.getModuleExtension();
}
bool NativeScript::unloadScript( std::string name )
{
auto info = m_loader.getScriptInfo( name );
if( info )
{
auto ptr = info->script;
if( removeValueFromMap< uint32_t, StatusEffectScript* >( ptr, m_statusEffectScripts ) )
return m_loader.unloadScript( info );
else if( removeValueFromMap< uint32_t, ActionScript* >( ptr, m_actionScripts ) )
return m_loader.unloadScript( info );
else if( removeValueFromMap< uint32_t, QuestScript* >( ptr, m_questScripts ) )
return m_loader.unloadScript( info );
else if( removeValueFromMap< uint32_t, BattleNpcScript* >( ptr, m_battleNpcScripts ) )
return m_loader.unloadScript( info );
else if( removeValueFromMap< uint32_t, ZoneScript* >( ptr, m_zoneScripts ) )
return m_loader.unloadScript( info );
}
return false;
}
boost::shared_ptr< NativeScript > create_script_engine( )
{
return boost::make_shared< NativeScript >();
}
}
}