257 lines
12 KiB
Plaintext
257 lines
12 KiB
Plaintext
|
scriptname PapyrusUtil Hidden
|
||
|
|
||
|
; Get version of papyrus DLL library. Version 3.3 will return 33.
|
||
|
int function GetVersion() global native
|
||
|
|
||
|
; Get version of compiled papyrus scripts which should match return from GetVersion()
|
||
|
int function GetScriptVersion() global
|
||
|
return 33
|
||
|
endFunction
|
||
|
|
||
|
; ##
|
||
|
; ## Array manipulation utilities
|
||
|
; ##
|
||
|
|
||
|
; Few extra array types not provided by SKSE normally to help avoid having to use and cast Form arrays
|
||
|
Actor[] function ActorArray(int size, Actor filler = none) global native
|
||
|
Actor[] function ResizeActorArray(Actor[] ArrayValues, int toSize, Actor filler = none) global native
|
||
|
ObjectReference[] function ObjRefArray(int size, ObjectReference filler = none) global native
|
||
|
ObjectReference[] function ResizeObjRefArray(ObjectReference[] ArrayValues, int toSize, ObjectReference filler = none) global native
|
||
|
|
||
|
; ## Append a value to the end of the given array and return the new array.
|
||
|
; ## NOTE: The array has to be recreated each time you call this. For the sake of memory usage and performance, DO NOT use these to build up an array through a loop,
|
||
|
; ## in such a situation it is significantly faster to create the full length array first and then fill it. Best to limit to only the occasional need.
|
||
|
float[] function PushFloat(float[] ArrayValues, float push) global native
|
||
|
int[] function PushInt(int[] ArrayValues, int push) global native
|
||
|
; bool[] function PushBool(bool[] ArrayValues, bool push) global native ; // Bugged - Non-native version available below
|
||
|
string[] function PushString(string[] ArrayValues, string push) global native
|
||
|
Form[] function PushForm(Form[] ArrayValues, Form push) global native
|
||
|
Alias[] function PushAlias(Alias[] ArrayValues, Alias push) global native
|
||
|
Actor[] function PushActor(Actor[] ArrayValues, Actor push) global native
|
||
|
ObjectReference[] function PushObjRef(ObjectReference[] ArrayValues, ObjectReference push) global native
|
||
|
|
||
|
; ## Removes all elements from the given array matching the provided value and returns the shortened array.
|
||
|
float[] function RemoveFloat(float[] ArrayValues, float ToRemove) global native
|
||
|
int[] function RemoveInt(int[] ArrayValues, int ToRemove) global native
|
||
|
; bool[] function RemoveBool(bool[] ArrayValues, bool ToRemove) global native ; // Bugged - Non-native version available below
|
||
|
string[] function RemoveString(string[] ArrayValues, string ToRemove) global native
|
||
|
Form[] function RemoveForm(Form[] ArrayValues, Form ToRemove) global native
|
||
|
Alias[] function RemoveAlias(Alias[] ArrayValues, Alias ToRemove) global native
|
||
|
Actor[] function RemoveActor(Actor[] ArrayValues, Actor ToRemove) global native
|
||
|
ObjectReference[] function RemoveObjRef(ObjectReference[] ArrayValues, ObjectReference ToRemove) global native
|
||
|
|
||
|
; ## Returns the number of instances an array has an element equal to the given value
|
||
|
int function CountFloat(float[] ArrayValues, float EqualTo) global native
|
||
|
int function CountInt(int[] ArrayValues, int EqualTo) global native
|
||
|
int function CountBool(bool[] ArrayValues, bool EqualTo) global native
|
||
|
int function CountString(string[] ArrayValues, string EqualTo) global native
|
||
|
int function CountForm(Form[] ArrayValues, Form EqualTo) global native
|
||
|
int function CountAlias(Alias[] ArrayValues, Alias EqualTo) global native
|
||
|
int function CountActor(Actor[] ArrayValues, Actor EqualTo) global native
|
||
|
int function CountObjRef(ObjectReference[] ArrayValues, ObjectReference EqualTo) global native
|
||
|
|
||
|
; ## Returns two arrays combined into one, optionally also removing any duplicate occurrences of a value.
|
||
|
float[] function MergeFloatArray(float[] ArrayValues1, float[] ArrayValues2, bool RemoveDupes = false) global native
|
||
|
int[] function MergeIntArray(int[] ArrayValues1, int[] ArrayValues2, bool RemoveDupes = false) global native
|
||
|
; bool[] function MergeBoolArray(bool[] ArrayValues1, bool[] ArrayValues2, bool RemoveDupes = false) global native ; // Bugged - Non-native version available below
|
||
|
string[] function MergeStringArray(string[] ArrayValues1, string[] ArrayValues2, bool RemoveDupes = false) global native
|
||
|
Form[] function MergeFormArray(Form[] ArrayValues1, Form[] ArrayValues2, bool RemoveDupes = false) global native
|
||
|
Alias[] function MergeAliasArray(Alias[] ArrayValues1, Alias[] ArrayValues2, bool RemoveDupes = false) global native
|
||
|
Actor[] function MergeActorArray(Actor[] ArrayValues1, Actor[] ArrayValues2, bool RemoveDupes = false) global native
|
||
|
ObjectReference[] function MergeObjRefArray(ObjectReference[] ArrayValues1, ObjectReference[] ArrayValues2, bool RemoveDupes = false) global native
|
||
|
|
||
|
; ## Returns a sub section of an array indicated by a starting and ending index.
|
||
|
; ## The default argument "int EndIndex = -1" clamps the to the end of the array. Equivalent of setting EndIndex = (ArrayValues.Length - 1)
|
||
|
float[] function SliceFloatArray(float[] ArrayValues, int StartIndex, int EndIndex = -1) global native
|
||
|
int[] function SliceIntArray(int[] ArrayValues, int StartIndex, int EndIndex = -1) global native
|
||
|
; bool[] function SliceBoolArray(bool[] ArrayValues, int StartIndex, int EndIndex = -1) global native ; // Bugged - Non-native version available below
|
||
|
string[] function SliceStringArray(string[] ArrayValues, int StartIndex, int EndIndex = -1) global native
|
||
|
Form[] function SliceFormArray(Form[] ArrayValues, int StartIndex, int EndIndex = -1) global native
|
||
|
Alias[] function SliceAliasArray(Alias[] ArrayValues, int StartIndex, int EndIndex = -1) global native
|
||
|
Actor[] function SliceActorArray(Actor[] ArrayValues, int StartIndex, int EndIndex = -1) global native
|
||
|
ObjectReference[] function SliceObjRefArray(ObjectReference[] ArrayValues, int StartIndex, int EndIndex = -1) global native
|
||
|
|
||
|
|
||
|
function SortIntArray(int[] ArrayValues, bool descending = false) global native
|
||
|
function SortFloatArray(float[] ArrayValues, bool descending = false) global native
|
||
|
function SortStringArray(string[] ArrayValues, bool descending = false) global native
|
||
|
|
||
|
; ##
|
||
|
; ## Shortcuts for common usage
|
||
|
; ##
|
||
|
|
||
|
string[] function ClearEmpty(string[] ArrayValues) global
|
||
|
return RemoveString(ArrayValues, "")
|
||
|
endFunction
|
||
|
Form[] function ClearNone(Form[] ArrayValues) global
|
||
|
return RemoveForm(ArrayValues, none)
|
||
|
endFunction
|
||
|
|
||
|
int function CountFalse(bool[] ArrayValues) global
|
||
|
return CountBool(ArrayValues, false)
|
||
|
endFunction
|
||
|
int function CountTrue(bool[] ArrayValues) global
|
||
|
return CountBool(ArrayValues, true)
|
||
|
endFunction
|
||
|
int function CountNone(Form[] ArrayValues) global
|
||
|
return CountForm(ArrayValues, none)
|
||
|
endFunction
|
||
|
|
||
|
; ##
|
||
|
; ## Extra String Utilities
|
||
|
; ##
|
||
|
|
||
|
; ## Similar to SKSE's native StringUtil.Split() except results are whitespace trimmed. So comma, separated,list,can, be, spaced,or,not.
|
||
|
string[] function StringSplit(string ArgString, string Delimiter = ",") global native
|
||
|
|
||
|
; ## Opposite of StringSplit()
|
||
|
string function StringJoin(string[] Values, string Delimiter = ",") global native
|
||
|
|
||
|
|
||
|
; ##
|
||
|
; ## Shortcuts for some common number actions. Mostly to help cut some basic and overly verbose checks down to a single line.
|
||
|
; ## Making these native instead of normal globals is probably massive overkill...
|
||
|
; ##
|
||
|
|
||
|
; ## Return the total sum of all values stored in the given array
|
||
|
int function AddIntValues(int[] Values) global native
|
||
|
float function AddFloatValues(float[] Values) global native
|
||
|
|
||
|
; ## Returns the value clamped to the min or max when out of range
|
||
|
int function ClampInt(int value, int min, int max) global native
|
||
|
float function ClampFloat(float value, float min, float max) global native
|
||
|
|
||
|
; ## Similar to the clamp functions, only values wrap around to the other side of range instead.
|
||
|
; ## Mostly useful for traversing around array values by wrapping the index from end to end without having to check for it being out of range first.
|
||
|
; ## i.e.: Form var = myFormArray[WrapInt(i, (myFormArray.Length - 1))]
|
||
|
int function WrapInt(int value, int end, int start = 0) global native
|
||
|
float function WrapFloat(float value, float end, float start = 0.0) global native
|
||
|
|
||
|
; ## Returns the given value signed if bool is true, unsigned if false, regardless if value started out signed or not.
|
||
|
int function SignInt(bool doSign, int value) global native
|
||
|
float function SignFloat(bool doSign, float value) global native
|
||
|
|
||
|
; ##
|
||
|
; ## Non-Native bool versions of some functions where SKSE version is bugged.
|
||
|
; ## SKSE version VMResultArray<bool> fails to be manipulated by other native functions past creation.
|
||
|
; ##
|
||
|
|
||
|
bool[] function ResizeBoolArray(bool[] ArrayValues, int toSize, bool filler = false) global
|
||
|
bool[] Output = Utility.CreateBoolArray(toSize, filler)
|
||
|
int i = ArrayValues.Length
|
||
|
if i > toSize
|
||
|
i = toSize
|
||
|
endIf
|
||
|
while i
|
||
|
i -= 1
|
||
|
Output[i] = ArrayValues[i]
|
||
|
endWhile
|
||
|
return Output
|
||
|
endFunction
|
||
|
|
||
|
bool[] function PushBool(bool[] ArrayValues, bool push) global
|
||
|
return ResizeBoolArray(ArrayValues, ArrayValues.Length + 1, push)
|
||
|
endFunction
|
||
|
|
||
|
bool[] function RemoveBool(bool[] ArrayValues, bool ToRemove) global
|
||
|
int count = CountBool(ArrayValues, ToRemove)
|
||
|
return Utility.CreateBoolArray((ArrayValues.Length - Count), !ToRemove)
|
||
|
endFunction
|
||
|
|
||
|
bool[] function MergeBoolArray(bool[] ArrayValues1, bool[] ArrayValues2, bool RemoveDupes = false) global
|
||
|
if !ArrayValues1 && !ArrayValues2
|
||
|
return Utility.CreateBoolArray(0)
|
||
|
elseIf RemoveDupes
|
||
|
; Don't know why this option would ever be used for bool arrays, but provided for consistency sake with others
|
||
|
bool[] Output = new bool[1]
|
||
|
Output[0] = (ArrayValues1 && ArrayValues1[0]) || (!ArrayValues1 && ArrayValues2 && ArrayValues2[0])
|
||
|
if (ArrayValues1 && ArrayValues1.Find(!Output[0]) != -1) || (ArrayValues2 && ArrayValues2.Find(!Output[0]) != -1)
|
||
|
Output = PushBool(Output, !Output[0])
|
||
|
endIf
|
||
|
return Output
|
||
|
elseIf !ArrayValues1
|
||
|
return ArrayValues2
|
||
|
elseIf !ArrayValues2
|
||
|
return ArrayValues1
|
||
|
endIf
|
||
|
bool[] Output = Utility.CreateBoolArray(ArrayValues1.Length + ArrayValues2.Length)
|
||
|
bool[] Source = ArrayValues2
|
||
|
int n = Source.Length
|
||
|
int i = Output.Length
|
||
|
while i
|
||
|
i -= 1
|
||
|
n -= 1
|
||
|
if n < 0 && i > 0
|
||
|
Source = ArrayValues1
|
||
|
n = ArrayValues1.Length - 1
|
||
|
endIf
|
||
|
Output[i] = Source[n]
|
||
|
endWhile
|
||
|
return Output
|
||
|
endFunction
|
||
|
|
||
|
bool[] function SliceBoolArray(bool[] ArrayValues, int StartIndex, int EndIndex = -1) global
|
||
|
if !ArrayValues || (StartIndex > EndIndex && EndIndex > -1)
|
||
|
return Utility.CreateBoolArray(0)
|
||
|
elseIf StartIndex <= 0 && (EndIndex == -1 || EndIndex >= ArrayValues.Length)
|
||
|
return ArrayValues
|
||
|
endIf
|
||
|
if StartIndex < 0
|
||
|
StartIndex = 0
|
||
|
endIf
|
||
|
if EndIndex < 0 || EndIndex >= ArrayValues.Length
|
||
|
EndIndex = ArrayValues.Length - 1
|
||
|
endIf
|
||
|
if StartIndex == EndIndex
|
||
|
return Utility.CreateBoolArray(1, ArrayValues[StartIndex])
|
||
|
endIf
|
||
|
EndIndex += 1
|
||
|
bool[] Output = Utility.CreateBoolArray(EndIndex - StartIndex)
|
||
|
int i = Output.Length
|
||
|
while i && EndIndex
|
||
|
i -= 1
|
||
|
EndIndex -= 1
|
||
|
Output[i] = ArrayValues[EndIndex]
|
||
|
endWhile
|
||
|
return Output
|
||
|
endFunction
|
||
|
|
||
|
|
||
|
; ##
|
||
|
; ## DEPRECATED: SKSE now provides their own variable sized arrays for these types - mirrored here for backwards compatibility.
|
||
|
; ##
|
||
|
|
||
|
float[] function FloatArray(int size, float filler = 0.0) global
|
||
|
return Utility.CreateFloatArray(size, filler)
|
||
|
endFunction
|
||
|
int[] function IntArray(int size, int filler = 0) global
|
||
|
return Utility.CreateIntArray(size, filler)
|
||
|
endFunction
|
||
|
bool[] function BoolArray(int size, bool filler = false) global
|
||
|
return Utility.CreateBoolArray(size, filler)
|
||
|
endFunction
|
||
|
string[] function StringArray(int size, string filler = "") global
|
||
|
return Utility.CreateStringArray(size, filler)
|
||
|
endFunction
|
||
|
Form[] function FormArray(int size, Form filler = none) global
|
||
|
return Utility.CreateFormArray(size, filler)
|
||
|
endFunction
|
||
|
Alias[] function AliasArray(int size, Alias filler = none) global
|
||
|
return Utility.CreateAliasArray(size, filler)
|
||
|
endFunction
|
||
|
|
||
|
float[] function ResizeFloatArray(float[] ArrayValues, int toSize, float filler = 0.0) global
|
||
|
return Utility.ResizeFloatArray(ArrayValues, toSize, filler)
|
||
|
endFunction
|
||
|
int[] function ResizeIntArray(int[] ArrayValues, int toSize, int filler = 0) global
|
||
|
return Utility.ResizeIntArray(ArrayValues, toSize, filler)
|
||
|
endFunction
|
||
|
string[] function ResizeStringArray(string[] ArrayValues, int toSize, string filler = "") global
|
||
|
return Utility.ResizeStringArray(ArrayValues, toSize, filler)
|
||
|
endFunction
|
||
|
Form[] function ResizeFormArray(Form[] ArrayValues, int toSize, Form filler = none) global
|
||
|
return Utility.ResizeFormArray(ArrayValues, toSize, filler)
|
||
|
endFunction
|
||
|
Alias[] function ResizeAliasArray(Alias[] ArrayValues, int toSize, Alias filler = none) global
|
||
|
return Utility.ResizeAliasArray(ArrayValues, toSize, filler)
|
||
|
endFunction
|