CScript * CScriptingManager::Load(CMetaFile & mf) { CScript * pScript = new CScript(); if(!pScript->Load(mf)) { delete pScript; return NULL; } for(auto i = m_funcs.begin(); i != m_funcs.end(); i++) pScript->RegisterFunction((*i)->strName, (*i)->pfnFunction, (*i)->iParameterCount, (*i)->strTemplate); for(auto i = m_classes.begin(); i != m_classes.end(); i++) pScript->RegisterClass(*i); for(auto i = m_constants.begin(); i != m_constants.end(); i++) pScript->RegisterConstant((*i)->strName, (*i)->value); #ifdef _SERVER if(g_pModuleManager) g_pModuleManager->ScriptLoad(pScript->GetVM()); #endif // not a very good way , but leave it as is for now for(auto i = m_scripts.begin(); i != m_scripts.end(); i++) { if((*i)->GetMetaFile().m_Meta == "common" && (*i)->GetMetaFile().m_Type == mf.m_Type) { pScript->AddExternal((*i)->GetMetaFile()); } } if(!pScript->Execute()) { delete pScript; CLogFile::Printf("Failed to execute script %s", mf.ToMetaAndFileString().Get()); return NULL; } m_scripts.push_back(pScript); CEvents * pEvents = CEvents::GetInstance(); pEvents->Call("scriptInit", pScript); CScriptArguments arguments; arguments.push(mf.ToMetaAndFileString()); pEvents->Call("scriptLoad", &arguments); return pScript; }