GetObjectType
A function added by the Fallout Script Extender.
Description
Returns the type code of the specified Base Form, or calling Reference. If a reference is passed, its BaseForm is derived.
Syntax
(TypeCode:int) reference.GetObjectType BaseForm
Or:
(TypeCode:int) reference.GetType BaseForm
Example
Calling on a known reference:
int iType let iType := SunnyRef.GetType print $iType ;* Should print "42", which is the NPC form type.
Calling on a known Base Form:
int iType let iType := GetType GSSunnySmiles print $iType ;* Should print "42", which is the NPC form type.
Working With Ref Variables:
- Reminder: While Ref Variables sound awfully like "Reference Variable", they can hold either Base Forms or References.
If the ref variable is guaranteed to be a Base Form:
ref rRef int iType let iType := GetType rRef
If the ref variable is guaranteed to be a Reference:
ref rRef int iType let iType := rRef.GetType
If you're not sure if the ref variable will be valid, it is always important to verify using IsFormValid / IsReference. Not doing so can cause problems; this applies to other functions as well.
In the interest of debugging such issues, it is recommended to use "Let :=" over "Set to", as Let just as fast (if not faster in some cases) and will report errors if attempting to call functions with the wrong syntax / with invalid forms.
The following will cover a few examples of how to use these functions in conjunction with GetType, in order to avoid errors and crashes.
To verify if the ref variable holds either a Base Form or a Reference:
ref rRef if IsFormValid rRef ; Unless we can assume rRef will be a Reference or a Base Form, ;... it is unsafe to proceed without further filtering. endif
To verify if the ref variable holds a Base Form:
ref rRef
int iType
if IsFormValid rRef
if IsReference rRef != 1
; rRef is a Base Form.
let iType := GetType rRef
if iType == 41 ; ammo
; do something appropriate for ammo
endif
endif
endif
To verify if the ref variable holds a Reference:
ref rRef
if IsReference rRef
if (rRef.GetType) == 24 ; Armor
; do something appropriate for Armor
endif
endif
To verify if the ref variable holds either a Base Form or a Reference, and to be able to act in either case:
ref rRef
int iType
if IsFormValid rRef
if IsReference rRef != 1
; rRef is a Base Form.
let iType := GetType rRef
if iType == 41 ; ammo
; do something appropriate for ammo
endif
else
; rRef is a Reference.
let iType := rRef.GetType
if iType == 41 ; ammo
; do something appropriate for ammo
endif
endif
endif