bool Cmd_GetStringIniSetting_Execute(COMMAND_ARGS) { char settingName[kMaxMessageLength] = { 0 }; *result = -1; if (ExtractArgs(EXTRACT_ARGS, &settingName)) { Setting* setting; if (GetIniSetting(settingName, &setting)) { char val[kMaxMessageLength] = { 0 }; if (const char * pVal = setting->Get()) { strcpy_s(val, kMaxMessageLength, pVal); AssignToStringVar(PASS_COMMAND_ARGS, val); if (IsConsoleMode()) Console_Print("GetStringIniSetting >> %s", val); } } else if (IsConsoleMode()) Console_Print("GetStringIniSetting >> SETTING NOT FOUND"); } return true; }
bool Cmd_GetFalloutDirectory_Execute(COMMAND_ARGS) { std::string path = GetFalloutDirectory(); const char* pathStr = path.c_str(); AssignToStringVar(PASS_COMMAND_ARGS, pathStr); return true; }
bool Cmd_GetScopeModelPath_Execute(COMMAND_ARGS) { TESForm* form = NULL; TESModel* model = NULL; const char* pathStr = ""; *result = 0; if (ExtractArgsEx(EXTRACT_ARGS_EX, &form)) { if (!form) if (thisObj) form = thisObj->baseForm; TESObjectWEAP* weapon = DYNAMIC_CAST(form, TESForm, TESObjectWEAP); if (weapon && weapon->HasScope()) model = &(weapon->targetNIF); if (model) pathStr = model->nifPath.m_data; } AssignToStringVar(PASS_COMMAND_ARGS, pathStr); return true; }
bool Cmd_GetConsoleOutputFilename_Execute(COMMAND_ARGS) { *result = 0; AssignToStringVar(PASS_COMMAND_ARGS, ConsoleManager::GetConsoleOutputFilename()); return true; }
bool Cmd_GetKeyName_Execute(COMMAND_ARGS) { const char* keyname = ""; UInt32 keycode = 0; if (ExtractArgs(EXTRACT_ARGS, &keycode)) keyname = GetDXDescription(keycode); AssignToStringVar(PASS_COMMAND_ARGS, keyname); return true; }
bool Cmd_AsciiToChar_Execute(COMMAND_ARGS) { char charStr[2] = "\0"; UInt32 asciiCode = 0; if (ExtractArgs(EXTRACT_ARGS, &asciiCode) && asciiCode < 256) charStr[0] = asciiCode; AssignToStringVar(PASS_COMMAND_ARGS, charStr); return true; }
bool Cmd_sv_Construct_Execute(COMMAND_ARGS) { char buffer[kMaxMessageLength] = {0}; //not checking the return value here 'cuz we need to assign to the string regardless ExtractFormatStringArgs(0, buffer, PASS_FMTSTR_ARGS, kCommandInfo_sv_Construct.numParams); AssignToStringVar(PASS_COMMAND_ARGS, buffer); return true; }
static bool Cmd_GetMapMenuMarkerName_Execute(COMMAND_ARGS) { const char* name = ""; MapMenu* mapMenu = (MapMenu*)GetMenuByType(kMenuType_Map); if (mapMenu) name = mapMenu->GetSelectedMarkerName(); AssignToStringVar(PASS_COMMAND_ARGS, name); return true; }
bool Cmd_ActorValueToStringC_Execute(COMMAND_ARGS) { UInt32 av = eActorVal_FalloutMax; std::string avStr = ""; if (ExtractArgs(EXTRACT_ARGS, &av) && av < eActorVal_FalloutMax) avStr = GetActorValueString(av); AssignToStringVar(PASS_COMMAND_ARGS, avStr.c_str()); return true; }
static bool Cmd_GetActiveUIComponentName_Execute(COMMAND_ARGS) { const char* name = ""; InterfaceManager* intfc = InterfaceManager::GetSingleton(); if (intfc->activeTile) name = intfc->activeTile->name.m_data; AssignToStringVar(PASS_COMMAND_ARGS, name); return true; }
bool Cmd_GetNthModName_Execute(COMMAND_ARGS) { UInt32 modIdx = 0xFF; const char* modName = ""; if (ExtractArgs(EXTRACT_ARGS, &modIdx)) modName = DataHandler::Get()->GetNthModName(modIdx); AssignToStringVar(PASS_COMMAND_ARGS, modName); return true; }
bool Cmd_GetFormIDString_Execute(COMMAND_ARGS) { TESForm* form = NULL; ExtractArgsEx(EXTRACT_ARGS_EX, &form); if (!form) form = thisObj; UInt32 formID = form ? form->refID : 0; char str[0x20] = { 0 }; sprintf_s(str, sizeof(str), "%08X", formID); AssignToStringVar(PASS_COMMAND_ARGS, str); return true; }
bool Cmd_GetNthFactionRankName_Execute(COMMAND_ARGS) { TESFaction* faction = NULL; UInt32 rank = 0; UInt32 gender = 0; const char* rankName = ""; if (ExtractArgs(EXTRACT_ARGS, &faction, &rank, &gender)) rankName = faction->GetNthRankName(rank, (gender ? true : false)); AssignToStringVar(PASS_COMMAND_ARGS, rankName); return true; }
static bool Cmd_GetStringIniSetting_Execute(COMMAND_ARGS) { char settingName[kMaxMessageLength] = { 0 }; const char* settingString = ""; if (ExtractFormatStringArgs(0, settingName, paramInfo, arg1, opcodeOffsetPtr, scriptObj, eventList, SIZEOF_FMT_STRING_PARAMS)) { INISettingEntry* entry = GetIniSetting(settingName); if (entry && (entry->data->name[0] == 'S' || entry->data->name[0] == 's')) settingString = entry->data->s; } AssignToStringVar(PASS_COMMAND_ARGS, settingString); return true; }
static bool Cmd_GetActiveUIComponentFullName_Execute(COMMAND_ARGS) { const char* name = ""; std::string nameStr; InterfaceManager* intfc = InterfaceManager::GetSingleton(); if (intfc->activeTile) { nameStr = intfc->activeTile->GetQualifiedName(); name = nameStr.c_str(); } AssignToStringVar(PASS_COMMAND_ARGS, name); return true; }
bool Cmd_NumToHex_Execute(COMMAND_ARGS) { UInt32 num = 0; UInt32 width = 8; ExtractArgs(EXTRACT_ARGS, &num, &width); char fmtStr[0x20]; width = width <= 8 ? width : 8; sprintf_s(fmtStr, sizeof(fmtStr), "%%0%dX", width); char hexStr[0x20]; sprintf_s(hexStr, sizeof(hexStr), fmtStr, num); AssignToStringVar(PASS_COMMAND_ARGS, hexStr); return true; }
bool Cmd_GetStringGameSetting_Execute(COMMAND_ARGS) { char settingName[0x100] = { 0 }; const char* settingString = ""; if (ExtractArgs(EXTRACT_ARGS, &settingName)) { Setting* setting = NULL; GameSettingCollection* gmsts = GameSettingCollection::GetSingleton(); if (gmsts && gmsts->GetGameSetting(settingName, &setting) && setting && setting->GetType() == Setting::kSetting_String) setting->Get(settingString); } AssignToStringVar(PASS_COMMAND_ARGS, settingString); return true; }
// This works for any TESFullName-derived form as well as references bool Cmd_GetName_Execute(COMMAND_ARGS) { TESForm* form = NULL; const char* name = ""; if (ExtractArgsEx(EXTRACT_ARGS_EX, &form)) { if (!form) if (thisObj) form = thisObj; if (form) name = GetFullName(form); } AssignToStringVar(PASS_COMMAND_ARGS, name); return true; }
static bool Cmd_GetInputText_Execute(COMMAND_ARGS) { UInt32 bRemoveHTML = 0; char inputText[kMaxMessageLength] = { 0 }; std::string inputStr; const char* toAssign = ""; if (ExtractArgs(PASS_EXTRACT_ARGS, &bRemoveHTML)) { TextInputHandler* textBox = TextInputHandler::GetTextBox(); if (textBox) { textBox->GetInputString(inputText); if (bRemoveHTML && textBox->IsHTML()) { // strip all HTML tags inputStr = inputText; UInt32 pos = 0; while ((pos = inputStr.find('<'), pos) != -1) { UInt32 endPos = inputStr.find('>'); if (endPos == -1) { // wtf? oh well, just erase the single '<' character if this ever happens. endPos = pos; } else { // check for <br>, replace with new line if (endPos - pos == 3 && inputStr[pos+1] == 'B' && inputStr[pos+2] == 'R') { inputStr.erase(pos, 4); inputStr.insert(pos, 1, '\n'); } else { inputStr.erase(pos, endPos-pos+1); } } } toAssign = inputStr.c_str(); } else { toAssign = inputText; } } } AssignToStringVar(PASS_COMMAND_ARGS, toAssign); return true; }
bool Cmd_sv_Percentify_Execute(COMMAND_ARGS) { std::string converted = ""; ExpressionEvaluator eval(PASS_COMMAND_ARGS); if (eval.ExtractArgs() && eval.NumArgs() == 1) { const char* src = eval.Arg(0)->GetString(); if (src) { converted = src; UInt32 pos = 0; while (pos < converted.length() && (pos = converted.find('%', pos)) != -1) { converted.insert(pos, 1, '%'); pos += 2; } } } AssignToStringVar(PASS_COMMAND_ARGS, converted.c_str()); return true; }
bool Cmd_GetNthEffectItemScriptName_Execute(COMMAND_ARGS) { TESForm* form = NULL; UInt32 whichEffect = 0; const char* effectName = ""; if (ExtractArgsEx(EXTRACT_ARGS_EX, &form, &whichEffect)) { EffectItemList* effectList = GetEffectList(form); if (effectList) { EffectItem* effectItem = effectList->ItemAt(whichEffect); if (effectItem && effectItem->scriptEffectInfo) effectName = effectItem->scriptEffectInfo->effectName.m_data; } } AssignToStringVar(PASS_COMMAND_ARGS, effectName); return true; }
bool ChangeCase_Execute (COMMAND_ARGS, bool bUpper) { std::string converted = ""; ExpressionEvaluator eval (PASS_COMMAND_ARGS); if (eval.ExtractArgs() && eval.NumArgs() == 1) { const char* src = eval.Arg (0)->GetString(); if (src) { converted = src; if (bUpper) MakeUpper (converted); else MakeLower (converted); } } AssignToStringVar(PASS_COMMAND_ARGS, converted.c_str ()); return true; }
bool Cmd_sv_SubString_Execute(COMMAND_ARGS) { UInt32 rhStrID = 0; UInt32 startPos = 0; UInt32 howMany = -1; std::string subStr; if (ExtractArgs(EXTRACT_ARGS, &rhStrID, &startPos, &howMany)) { StringVar* rhVar = g_StringMap.Get(rhStrID); if (!rhVar) return true; if (howMany == -1) howMany = rhVar->GetLength() - startPos; subStr = rhVar->SubString(startPos, howMany); } AssignToStringVar(PASS_COMMAND_ARGS, subStr.c_str()); return true; }
bool Cmd_GetModelPath_Execute(COMMAND_ARGS) { TESForm* form = NULL; const char* pathStr = ""; *result = 0; if (ExtractArgsEx(EXTRACT_ARGS_EX, &form)) { if (form) form = form->TryGetREFRParent(); if (!form) if (thisObj) form = thisObj->baseForm; TESModel* model = DYNAMIC_CAST(form, TESForm, TESModel); if (model) pathStr = model->nifPath.m_data; } AssignToStringVar(PASS_COMMAND_ARGS, pathStr); return true; }
bool Cmd_GetRawFormIDString_Execute(COMMAND_ARGS) { ExpressionEvaluator eval(PASS_COMMAND_ARGS); char str[0x20] = { 0 }; UInt32 formID = 0; if (eval.ExtractArgs() && eval.NumArgs() == 1) { ScriptToken* arg = eval.Arg(0); if (arg->CanConvertTo(kTokenType_ArrayElement)) { formID = arg->GetFormID(); } else if (arg->Type() == kTokenType_RefVar) { ScriptEventList::Var* var = arg->GetVar(); if (var) { formID = *((UInt32*)(&var->data)); } } } sprintf_s(str, sizeof(str), "%08X", formID); AssignToStringVar(PASS_COMMAND_ARGS, str); DEBUG_PRINT(str); return true; }
static bool GetSetMenuValue_Execute(COMMAND_ARGS, UInt32 mode) { const char* separatorChar = GetSeparatorChars(scriptObj); char stringArg[kMaxMessageLength] = { 0 }; UInt32 menuType = 0; float newFloatVal = 0; char* newStringVal = NULL; char* componentPath = stringArg; bool bExtracted = false; switch (mode) { case kGetFloat: case kGetString: case kExists: bExtracted = ExtractFormatStringArgs(0, stringArg, paramInfo, arg1, opcodeOffsetPtr, scriptObj, eventList, kCommandInfo_GetMenuFloatValue.numParams, &menuType); break; case kSetFloat: bExtracted = ExtractFormatStringArgs(0, stringArg, paramInfo, arg1, opcodeOffsetPtr, scriptObj, eventList, kCommandInfo_SetMenuFloatValue.numParams, &menuType, &newFloatVal); break; case kSetString: { bExtracted = ExtractFormatStringArgs(0, stringArg, paramInfo, arg1, opcodeOffsetPtr, scriptObj, eventList, kCommandInfo_GetMenuFloatValue.numParams, &menuType); // extract new value from format string char* context = NULL; componentPath = strtok_s(stringArg, separatorChar, &context); newStringVal = strtok_s(NULL, separatorChar, &context); bExtracted = (bExtracted && componentPath && newStringVal); } break; } char* strToAssign = ""; if (bExtracted) { Menu* menu = GetMenuByType(menuType); if (menu && menu->tile) { Tile::Value* val = menu->tile->GetValueByName(componentPath); if (val) { #if _DEBUG && 0 val->DumpExpressionList(); #endif switch (mode) { case kExists: *result = 1; break; case kGetFloat: if (val->IsNum()) *result = val->num; break; case kSetFloat: val->bIsNum = 1; val->parentTile->UpdateFloat(val->id, newFloatVal); break; case kGetString: if (val->IsString()) strToAssign = val->str.m_data; break; case kSetString: val->bIsNum = 0; val->parentTile->UpdateString(val->id, newStringVal); val->parentTile->SetStringValue(val->id, newStringVal); val->parentTile->UpdateField(val->id, 0, newStringVal); break; } } } } if (mode == kGetString) // need to assign even if errors occur during arg extraction/value retrieval AssignToStringVar(PASS_COMMAND_ARGS, strToAssign); return true; }