void clsScriptManager::CheckForNewScripts() { #ifdef _WIN32 struct _finddata_t luafile; intptr_t hFile = _findfirst((clsServerManager::sScriptPath+"\\*.lua").c_str(), &luafile); if(hFile != -1) { do { if((luafile.attrib & _A_SUBDIR) != 0 || stricmp(luafile.name+(strlen(luafile.name)-4), ".lua") != 0) { continue; } if(FindScript(luafile.name) != NULL) { continue; } AddScript(luafile.name, false, false); } while(_findnext(hFile, &luafile) == 0); _findclose(hFile); } #else DIR * p_scriptdir = opendir(clsServerManager::sScriptPath.c_str()); if(p_scriptdir == NULL) { return; } struct dirent * p_dirent; struct stat s_buf; while((p_dirent = readdir(p_scriptdir)) != NULL) { if(stat((clsServerManager::sScriptPath + p_dirent->d_name).c_str(), &s_buf) != 0 || (s_buf.st_mode & S_IFDIR) != 0 || strcasecmp(p_dirent->d_name + (strlen(p_dirent->d_name)-4), ".lua") != 0) { continue; } if(FindScript(p_dirent->d_name) != NULL) { continue; } AddScript(p_dirent->d_name, false, false); } closedir(p_scriptdir); #endif }
void clsScriptManager::LoadXML() { // PPK ... first start all script in order from xml file #ifdef _WIN32 TiXmlDocument doc((clsServerManager::sPath+"\\cfg\\Scripts.xml").c_str()); #else TiXmlDocument doc((clsServerManager::sPath+"/cfg/Scripts.xml").c_str()); #endif if(doc.LoadFile() == false) { if(doc.ErrorId() != TiXmlBase::TIXML_ERROR_OPENING_FILE && doc.ErrorId() != TiXmlBase::TIXML_ERROR_DOCUMENT_EMPTY) { int iMsgLen = sprintf(clsServerManager::pGlobalBuffer, "Error loading file Scripts.xml. %s (Col: %d, Row: %d)", doc.ErrorDesc(), doc.Column(), doc.Row()); CheckSprintf(iMsgLen, clsServerManager::szGlobalBufferSize, "clsScriptManager::LoadXML"); #ifdef _BUILD_GUI ::MessageBox(NULL, clsServerManager::pGlobalBuffer, g_sPtokaXTitle, MB_OK | MB_ICONERROR); #else AppendLog(clsServerManager::pGlobalBuffer); #endif exit(EXIT_FAILURE); } } else { TiXmlHandle cfg(&doc); TiXmlNode *scripts = cfg.FirstChild("Scripts").Node(); if(scripts != NULL) { TiXmlNode *child = NULL; while((child = scripts->IterateChildren(child)) != NULL) { TiXmlNode *script = child->FirstChild("Name"); if(script == NULL || (script = script->FirstChild()) == NULL) { continue; } char *name = (char *)script->Value(); if(FileExist((clsServerManager::sScriptPath+string(name)).c_str()) == false) { continue; } if((script = child->FirstChild("Enabled")) == NULL || (script = script->FirstChild()) == NULL) { continue; } bool enabled = atoi(script->Value()) == 0 ? false : true; if(FindScript(name) != NULL) { continue; } AddScript(name, enabled, false); } } } }
bool CLuaCtrl::ReloadByName(const std::string & strName) { CLuaScript * pLuaScript = FindScript(strName); if (!pLuaScript) return false; delete pLuaScript; pLuaScript = new CLuaScript; if (!pLuaScript->Init(g_luaState.GetState(),strName)) { delete pLuaScript; IME_ERROR("error reload lua scirpt %s",strName.c_str()); return false; } m_mapScripts[strName] = pLuaScript; return true; }
HoNewParticleScriptRes *HoNewParticleResMgr::AddScript(char *scr, char *indexName) { if(MAX_TOKEN_VECTORS <= NumScriptRes) return NULL; if(FindScript(indexName)!= NULL) return NULL; HoNewParticleScriptRes particleScriptRes; //particleScriptRes.script.reserve(strlen(scr)); particleScriptRes.name.reserve(strlen(indexName)); //particleScriptRes.script = scr; particleScriptRes.name = indexName; particleScriptRes.emitterTokenizer.Tokenize(scr); ScriptRes.push_back(particleScriptRes); NumScriptRes++; return &ScriptRes[NumScriptRes-1]; }
bool CSrScriptView::AddScriptAbsPath (const char* pFilename) { CSrScriptFile* pInfo; bool Result; pInfo = FindScript(pFilename); if (pInfo != NULL) { SetCurrentScript(pInfo); return true; } CSrScriptFile* pNewScript = m_Scripts.AddNew(); Result = pNewScript->Load(pFilename); if (!Result) return SrEditShowError("Failed to load script file '%s'!", pFilename); SetCurrentScript(pNewScript); FillScriptList(); return true; }
clsScriptManager::clsScriptManager() : pRunningScriptE(NULL), pRunningScriptS(NULL), ppScriptTable(NULL), pActualUser(NULL), pTimerListS(NULL), pTimerListE(NULL), ui8ScriptCount(0), ui8BotsCount(0), bMoved(false) { #ifdef _WIN32 clsServerManager::hLuaHeap = ::HeapCreate(HEAP_NO_SERIALIZE, 0x80000, 0); #endif #ifdef _WIN32 if(FileExist((clsServerManager::sPath + "\\cfg\\Scripts.pxt").c_str()) == false) { #else if(FileExist((clsServerManager::sPath + "/cfg/Scripts.pxt").c_str()) == false) { #endif LoadXML(); return; } #ifdef _WIN32 FILE * fScriptsFile = fopen((clsServerManager::sPath + "\\cfg\\Scripts.pxt").c_str(), "rt"); #else FILE * fScriptsFile = fopen((clsServerManager::sPath + "/cfg/Scripts.pxt").c_str(), "rt"); #endif if(fScriptsFile == NULL) { #ifdef _WIN32 int imsgLen = sprintf(clsServerManager::pGlobalBuffer, "Error loading file Scripts.pxt %s (%d)", WSErrorStr(errno), errno); #else int imsgLen = sprintf(clsServerManager::pGlobalBuffer, "Error loading file Scripts.pxt %s (%d)", ErrnoStr(errno), errno); #endif CheckSprintf(imsgLen, clsServerManager::szGlobalBufferSize, "clsScriptManager::clsScriptManager"); #ifdef _BUILD_GUI ::MessageBox(NULL, clsServerManager::pGlobalBuffer, g_sPtokaXTitle, MB_OK | MB_ICONERROR); #else AppendLog(clsServerManager::pGlobalBuffer); #endif exit(EXIT_FAILURE); } size_t szLen = 0; while(fgets(clsServerManager::pGlobalBuffer, (int)clsServerManager::szGlobalBufferSize, fScriptsFile) != NULL) { if(clsServerManager::pGlobalBuffer[0] == '#' || clsServerManager::pGlobalBuffer[0] == '\n') { continue; } szLen = strlen(clsServerManager::pGlobalBuffer)-1; if(szLen < 7) { continue; } clsServerManager::pGlobalBuffer[szLen] = '\0'; for(size_t szi = szLen-1; szi != 0; szi--) { if(isspace(clsServerManager::pGlobalBuffer[szi-1]) != 0 || clsServerManager::pGlobalBuffer[szi-1] == '=') { clsServerManager::pGlobalBuffer[szi-1] = '\0'; continue; } break; } if(clsServerManager::pGlobalBuffer[0] == '\0' || (clsServerManager::pGlobalBuffer[szLen-1] != '1' && clsServerManager::pGlobalBuffer[szLen-1] != '0')) { continue; } if(FileExist((clsServerManager::sScriptPath+string(clsServerManager::pGlobalBuffer)).c_str()) == false || FindScript(clsServerManager::pGlobalBuffer) != NULL) { continue; } AddScript(clsServerManager::pGlobalBuffer, clsServerManager::pGlobalBuffer[szLen-1] == '1' ? true : false, false); } fclose(fScriptsFile); } //------------------------------------------------------------------------------ clsScriptManager::~clsScriptManager() { pRunningScriptS = NULL; pRunningScriptE = NULL; for(uint8_t ui8i = 0; ui8i < ui8ScriptCount; ui8i++) { delete ppScriptTable[ui8i]; } #ifdef _WIN32 if(HeapFree(clsServerManager::hPtokaXHeap, HEAP_NO_SERIALIZE, (void *)ppScriptTable) == 0) { AppendDebugLog("%s - [MEM] Cannot deallocate ScriptTable in clsScriptManager::~clsScriptManager\n"); } #else free(ppScriptTable); #endif ppScriptTable = NULL; ui8ScriptCount = 0; pActualUser = NULL; ui8BotsCount = 0; #ifdef _WIN32 ::HeapDestroy(clsServerManager::hLuaHeap); #endif } //------------------------------------------------------------------------------ void clsScriptManager::Start() { ui8BotsCount = 0; pActualUser = NULL; // PPK ... first look for deleted and new scripts CheckForDeletedScripts(); CheckForNewScripts(); // PPK ... second start all enabled scripts for(uint8_t ui8i = 0; ui8i < ui8ScriptCount; ui8i++) { if(ppScriptTable[ui8i]->bEnabled == true) { if(ScriptStart(ppScriptTable[ui8i]) == true) { AddRunningScript(ppScriptTable[ui8i]); } else { ppScriptTable[ui8i]->bEnabled = false; } } } #ifdef _BUILD_GUI clsMainWindowPageScripts::mPtr->AddScriptsToList(true); #endif }