static bool Cmd_GetTileChildren_Execute(COMMAND_ARGS) { if (!ExpressionEvaluator::Active()) { ShowRuntimeError(scriptObj, "GetTileChildren must be called within an OBSE expression."); return true; } char buf[kMaxMessageLength] = { 0 }; UInt32 arrID = g_ArrayMap.Create(kDataType_Numeric, true, scriptObj->GetModIndex()); *result = arrID; Tile* tile = ExtractMenuComponent(PASS_COMMAND_ARGS, buf); if (tile) { UInt32 idx = 0; for (Tile::RefList::Node* node = tile->childList.start; node && node->data; node = node->next) { g_ArrayMap.SetElementString(arrID, idx, node->data->name.m_data); idx++; } } return true; }
static bool Cmd_GetEquippedItems_Execute(COMMAND_ARGS) { if (!ExpressionEvaluator::Active()) { ShowRuntimeError(scriptObj, "GetEquippedItems must be called within the context of an OBSE expression"); return false; } // create temp array to hold the items UInt32 arrID = g_ArrayMap.Create(kDataType_Numeric, true, scriptObj->GetModIndex()); *result = arrID; // get the items Actor* actor = OBLIVION_CAST(thisObj, TESObjectREFR, Actor); if (!actor) return true; EquippedItemsList eqItems = actor->GetEquippedItems(); // store items in array for (UInt32 i = 0; i < eqItems.size(); i++) g_ArrayMap.SetElementFormID(arrID, i, eqItems[i] ? eqItems[i]->refID : 0); return true; }
static bool Cmd_GetTileTraits_Execute(COMMAND_ARGS) { if (!ExpressionEvaluator::Active()) { ShowRuntimeError(scriptObj, "GetTileTraits must be called within an OBSE expression."); return true; } char buf[kMaxMessageLength] = { 0 }; UInt32 arrID = g_ArrayMap.Create(kDataType_String, false, scriptObj->GetModIndex()); *result = arrID; Tile* tile = ExtractMenuComponent(PASS_COMMAND_ARGS, buf); if (tile) { for (Tile::ValueList::Node* node = tile->valueList.start; node && node->data; node = node->next) { const char* traitName = Tile::StrIDToStr(node->data->id); if (node->data->bIsNum) g_ArrayMap.SetElementNumber(arrID, traitName, node->data->num); else g_ArrayMap.SetElementString(arrID, traitName, node->data->str.m_data); } } return true; }
static bool Cmd_GetUsedPowers_Execute(COMMAND_ARGS) { // returns an array of arrays: // Powers[n]["power"] := spellitem // Powers[n]["timer"] := seconds until power is usable again *result = 0; if (!ExpressionEvaluator::Active()) { ShowRuntimeError(scriptObj, "GetUsedPowers must be called within an OBSE expression."); return true; } ArrayID arr = g_ArrayMap.Create(kDataType_Numeric, true, scriptObj->GetModIndex()); *result = arr; Actor* actor = OBLIVION_CAST(thisObj, TESObjectREFR, Actor); if (!actor) return true; // populate the array UInt32 idx = 0; for (Actor::PowerListEntry* entry = &actor->greaterPowerList; entry && entry->data; entry = entry->next) { ArrayID inner = g_ArrayMap.Create(kDataType_String, false, scriptObj->GetModIndex()); g_ArrayMap.SetElementFormID(inner, "power", entry->data->power ? entry->data->power->refID : 0); g_ArrayMap.SetElementNumber(inner, "timer", entry->data->timer); g_ArrayMap.SetElementArray(arr, idx, inner); idx++; } return true; }