static bool Cmd_ConScribe_GetRegisteredLogNames_Execute(COMMAND_ARGS) { *result = 0; const char* ModName = ResolveModName(scriptObj); if (ModName == NULL) return true; LogManager::GetSingleton()->RegisterMod(ModName); std::vector<OBSEElement> LogList; for (std::vector<std::string>::const_iterator Itr = LogManager::GetSingleton()->GetModLogData(ModName)->RegisteredLogs.begin(); Itr != LogManager::GetSingleton()->GetModLogData(ModName)->RegisteredLogs.end(); Itr++) { LogList.push_back(Itr->c_str()); } std::map<std::string, OBSEElement> OBSEStringMap; OBSEArray* OBSEVector = ArrayFromStdVector(LogList, scriptObj); OBSEStringMap["default log"] = LogManager::GetSingleton()->GetDefaultLog(ModName); OBSEStringMap["log list"] = OBSEVector; OBSEArray* ResultArray = StringMapFromStdMap(OBSEStringMap, scriptObj); if (!ResultArray) _MESSAGE("Couldn't create array. Passed in script %08x", scriptObj->refID); else if (!g_arrayIntfc->AssignCommandResult(ResultArray, result)) _MESSAGE("Couldn't assign result array. Passed in script %08x", scriptObj->refID); return true; }
bool Cmd_ExamplePlugin_MakeArray_Execute(COMMAND_ARGS) { // Create an array of the format // { // 0:"Zero" // 1:1.0 // 2:PlayerRef // 3:StringMap { "A":"a", "B":123.456, "C":"manually set" } // 4:"Appended" // } // create the inner StringMap array std::map<std::string, OBSEElement> stringMap; stringMap["A"] = "a"; stringMap["B"] = 123.456; // create the outer array std::vector<OBSEElement> vec; vec.push_back("Zero"); vec.push_back(1.0); vec.push_back(*g_thePlayer); // convert our map to an OBSE StringMap and store in outer array OBSEArray* stringMapArr = StringMapFromStdMap(stringMap, scriptObj); vec.push_back(stringMapArr); // manually set another element in stringmap g_arrayIntfc->SetElement(stringMapArr, "C", "manually set"); // convert outer array OBSEArray* arr = ArrayFromStdVector(vec, scriptObj); // append another element to array g_arrayIntfc->AppendElement(arr, "appended"); if (!arr) Console_Print("Couldn't create array"); // return the array if (!g_arrayIntfc->AssignCommandResult(arr, result)) Console_Print("Couldn't assign array to command result."); // result contains the new ArrayID; print it Console_Print("Returned array ID %.0f", *result); return true; }
static bool Cmd_ConScribe_ReadFromLog_Execute(COMMAND_ARGS) { *result = 0; const char * ModName = ResolveModName(scriptObj); char Buffer[kMaxMessageLength]; if (!ExtractFormatStringArgs(0, Buffer, paramInfo, arg1, opcodeOffsetPtr, scriptObj, eventList, kCommandInfo_ReadFromLog.numParams)) return true; else if (Buffer == NULL || ModName == NULL) return true; std::string LogPath; std::vector<OBSEElement> LogContents; if (!_stricmp(Buffer, "*.*") && LogManager::GetSingleton()->GetDefaultLog(ModName)) LogPath = std::string(GET_INI_STRING("RootDirectory")) + "ConScribe Logs\\Per-Mod\\" + std::string(LogManager::GetSingleton()->GetDefaultLog(ModName)) + ".log"; else if (LogManager::GetSingleton()->IsLogRegistered(ModName, Buffer)) LogPath = std::string(GET_INI_STRING("RootDirectory")) + "ConScribe Logs\\Per-Mod\\" + std::string(Buffer) + ".log"; else return true; LogContents.push_back(LogPath.c_str()); ConScribeLog* TempLog = new ConScribeLog(LogPath.c_str(), ConScribeLog::e_In); std::vector<std::string> STLVector(TempLog->ReadAllLines()); OBSEArray* ResultArray = ArrayFromStdVector(LogContents, scriptObj); for (std::vector<std::string>::const_iterator Itr = STLVector.begin(); Itr != STLVector.end(); Itr++) { if (Itr == STLVector.end() - 1 && Itr->begin() == Itr->end()) continue; // skip empty last lines g_arrayIntfc->AppendElement(ResultArray, Itr->c_str()); } if (!ResultArray) _MESSAGE("Couldn't create array. Passed in script %08x", scriptObj->refID); else if (!g_arrayIntfc->AssignCommandResult(ResultArray, result)) _MESSAGE("Couldn't assign result array. Passed in script %08x", scriptObj->refID); return true; }