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; }
EquippedItemsList Actor::GetEquippedItems() { EquippedItemsList itemList; ExtraContainerChanges * xChanges = static_cast <ExtraContainerChanges *>(baseExtraList.GetByType(kExtraData_ContainerChanges)); if(xChanges && xChanges->data && xChanges->data->objList) for(ExtraContainerChanges::Entry * entry = xChanges->data->objList; entry; entry = entry->next) if(entry->data && entry->data->extendData && entry->data->type) for(ExtraContainerChanges::EntryExtendData * extend = entry->data->extendData; extend; extend = extend->next) if(extend->data && extend->data->HasType(kExtraData_Worn) || extend->data->HasType(kExtraData_WornLeft)) itemList.push_back(entry->data->type); return itemList; }
EquippedItemsList Actor::GetEquippedItems() { EquippedItemsList itemList; ExtraContainerDataArray outEntryData; ExtraContainerExtendDataArray outExtendData; ExtraContainerChanges * xChanges = static_cast <ExtraContainerChanges *>(extraDataList.GetByType(kExtraData_ContainerChanges)); if(xChanges) { UInt32 count = xChanges->GetAllEquipped(outEntryData, outExtendData); for (UInt32 i = 0; i < count ; i++) itemList.push_back(outEntryData[i]->type); } return itemList; }