GetUserdataType: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
m (Add type for CRemoteCall (fetchRemote))
mNo edit summary
Line 18: Line 18:
***''vector4'': a 4D vector, used in the [[Vector/Vector4|Vector4]] class.
***''vector4'': a 4D vector, used in the [[Vector/Vector4|Vector4]] class.
***''matrix'': a matrix, used in the [[Matrix]] class.
***''matrix'': a matrix, used in the [[Matrix]] class.
***''request'': a userdata type returned via [[fetchRemote]]
***''userdata'': a fallback userdata type return value, when no other type could be found for the object.
***''userdata'': a fallback userdata type return value, when no other type could be found for the object.
***''request'': a request userdata type returned via [[fetchRemote]]
 
**'''Server only'''
**'''Server only'''
***''account'': a [[Account|player account]].
***''account'': a [[Account|player account]].

Revision as of 18:34, 5 December 2022

This function gets the type of a userdata value, which is not always a element in the element tree.

Syntax

string getUserdataType ( userdata value )

Required Arguments

  • value: A userdata value to get the type of. Userdata types can be:
    • Shared
      • resource-data: a resource pointer.
      • xml-node: a XML node.
      • lua-timer: a timer.
      • vector2: a 2D vector, used in the Vector2 class.
      • vector3: a 3D vector, used in the Vector3 class.
      • vector4: a 4D vector, used in the Vector4 class.
      • matrix: a matrix, used in the Matrix class.
      • request: a userdata type returned via fetchRemote
      • userdata: a fallback userdata type return value, when no other type could be found for the object.

Returns

Returns a string containing the specified userdata's type, or false plus an error message if the given value is not userdata.

Example

This example shows a function that can be used to work around the impossibility to transfer vectors as arguments when using triggerClientEvent and triggerServerEvent, by converting them into a table which can be used safely.

function safeArgsForTransfer(...)
    local args = { ... }
    for index, arg in ipairs(args) do
        if type(arg) == "userdata" and getUserdataType(arg):match("vector") then
            -- Transform every kind of vector userdata to a table which can be transfered safely
            args[index] =
            {
                arg:getX(),
                arg:getY(),
                arg.getZ and arg:getZ() or nil,
                arg.getW and arg:getW() or nil,
                -- Extra field to distinguish from normal tables
                ["isVectorWorkaround"] = true
            }
        end
    end
    return unpack(args)
end

See Also