Array Variable
Please Note: The official wiki is no longer being maintained by the communityEdit
The modding community for Fallout 3 and Fallout New Vegas has created its own wiki due to onerous and painful captcha requirements for every edit.
The active wiki contributors have moved to the new wiki -- for the most current information, visit:
http://geckwiki.comEdit
Array variables are added by NVSE 4. Arrays are similar to form lists but allow for far more powerful capabilities with much easier scripting. Arrays are simple to use, provided you switch to using Let instead of the vanilla 'set .. to ..', and if eval instead of simply 'if'.
Arrays Compared to Form ListsEdit
- Arrays may store any data type in any combination, form lists only base forms or references.
- Form lists must be created in the GECK, arrays are created dynamically within scripts by letting a variable to a wide range of function that return different types of array.
- Regular arrays (array lists) are organized identically to form lists, the first item is always at index 0, and the last at (total size - 1).
- Map and String map arrays allow organization by user specified keys for each item.
- Arrays may be easily looped through using Foreach
- Both arrays and form lists can be searched using various functions.
- Form lists require complicated scripting to sort or copy. Arrays may be easily copied and sorted using a single function from a range of possiblities.
- Entries in a form list must be assigned to a variable via a function before they can be manipulated. Within NVSE expressions, or if using the Script Compiler Override, array entries may be manipulated directly using square brackets.
- Arrays contents can be printed to the console with a single function for easy debugging, either from within a script or from the in game console.
Simple ExampleEdit
Regular array, all keys are consecutive integers from 0:
array_var aBeatles ref rActor let aBeatles := Ar_List JohnREF, PaulREF, GeorgeREF, RingoREF let rActor := aBeatles[0] ; * rActor == JohnREF if eval aBeatles[2] == GeorgeREF ; element 2 (third) is GeorgeREF endif let aBeatles[1] := SunnyREF ; * change element 1 (second) to SunnyREF ; aBeatles array now contains: JohnREF, SunnyREF, GeorgeREF, RingoREF
Map array, keys may be any unique float:
array_var MagicNumberToString string_var my_string let MagicNumberToString := Ar_Construct "map" let MagicNumberToString[2] := "Upper body" let MagicNumberToString[5] := "Weapon" ; MagicNumberToString contains: 2::"Upper body", 5::"Weapon" let my_string := MagicNumberToString[5] ; * my_string == "Weapon"
String map array, all keys are unique strings:
array_var StringToMagicNumber int MyInt let StringToMagicNumber := Ar_Construct "stringmap" let StringToMagicNumber["Upper body"] := 2 let StringToMagicNumber["Weapon"] := 5 ; StringToMagicNumber contains: "Upper body"::2, "Weapon"::5 let MyInt := StringToMagicNumber["Weapon"] ; * MyInt == 5
Array FunctionsEdit
- Creation: Ar_Construct, Ar_List, Ar_Map, Ar_Range
- Modification: Ar_Append, Ar_Insert, Ar_InsertRange, Ar_Resize, Ar_Erase
- Sorting: Ar_Sort, Ar_SortAlpha, Ar_CustomSort
- Copying: Ar_Copy, Ar_DeepCopy
- Searching: Ar_Find, Ar_HasKey, Ar_First, Ar_Last, Ar_Next, Ar_Prev, Ar_Keys
- Debugging: Ar_Dump, Ar_DumpID