EngineRequestModel: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
m (Add note about having to call engineFreeModel in onClientResourceStop)
(Remove obsolete Requirements section)
 
(2 intermediate revisions by 2 users not shown)
Line 10: Line 10:
</syntaxhighlight>
</syntaxhighlight>
===Required Arguments===
===Required Arguments===
*'''elementType''': "ped", "vehicle" or "object".
*'''elementType''': "ped", "vehicle", "object", "timed-object", "clump"


===Optional Arguments===  
===Optional Arguments===  
*'''parentID''': The ID of the parent model (by default this is: 1337 - objects, 400 - vehicles, 7 - peds).
*'''parentID''': The ID of the parent model (by default this is: 1337 - objects, 400 - vehicles, 7 - peds, 3425 - clump models, 4715 - timed objects).
{{Important Note|Here is the parentID limit for each element type:<br>
*'''ped''': 0 - 26315
*'''vehicle''': 400 - 611
*'''object''': 615 - 11681
*'''timed-object''': 615 - 11681
*'''clump''': 615 - 11681
If you try to use higher values than the limit, your client may crash.}}


===Returns===
===Returns===
Line 54: Line 61:
addEventHandler("onClientResourceStop", resourceRoot, onStop)
addEventHandler("onClientResourceStop", resourceRoot, onStop)
</syntaxhighlight>
</syntaxhighlight>
==Requirements==
{{Requirements|n/a|1.5.7-9.20147|}}


==See Also==
==See Also==
{{Engine functions}}
{{Engine functions}}

Latest revision as of 17:14, 7 November 2024

This function is used to assign the next available model ID to a certain element type.

[[{{{image}}}|link=|]] Note: Before release 1.5.8 r20716 this must be "ped". After release 1.5.8 r20716 this function supports "vehicle" and "object" too.
[[{{{image}}}|link=|]] Note: Vehicle unique features may be unsupported, see issue 1861 for examples and details
[[{{{image}}}|link=|]] Important Note: Unlike some other functions, the side-effects of this function aren't reverted on resource stop, so you must manually call engineFreeModel in onClientResourceStop (Just like the example below does)

Syntax

int engineRequestModel ( string elementType [, int parentID ] )

Required Arguments

  • elementType: "ped", "vehicle", "object", "timed-object", "clump"

Optional Arguments

  • parentID: The ID of the parent model (by default this is: 1337 - objects, 400 - vehicles, 7 - peds, 3425 - clump models, 4715 - timed objects).
[[{{{image}}}|link=|]] Important Note: Here is the parentID limit for each element type:
  • ped: 0 - 26315
  • vehicle: 400 - 611
  • object: 615 - 11681
  • timed-object: 615 - 11681
  • clump: 615 - 11681

If you try to use higher values than the limit, your client may crash.

Returns

Returns an integer of the model ID that was available to be assigned to the element type, false if no free model ID available or invalid element type. Do not rely on the model numbers returned being consistent across multiple clients or multiple runs of resources. There is no guarantee for the order of the numbers or that the same numbers will always correspond to the same element type. Any patterns are coincidental.

Example

This example creates a ped and then gives you the opportunity to change its model. If the resource stops, then the IDs allocated will be deallocated. Use /cap for creating the ped and /sap to skin the ped. You will need some skins added to a folder and to the meta.xml for /sap to work:

local peds = {}
function createAllocatedPed()
    local x, y, z = getElementPosition(localPlayer)
    local id = engineRequestModel("ped")
    peds[id] = createPed(id, x+0.5, y, z+0.5)
    outputChatBox("New ped with ID "..id.." created.")
end
addCommandHandler("cap", createAllocatedPed, false, false)

function skinAllocatedPeds()
    local txd, dff;
    for id,ped in pairs(peds) do
        if fileExists("skins/" .. id .. ".txd") and fileExists("skins/" .. id .. ".dff") then
            txd = engineLoadTXD("skins/" .. id .. ".txd")
            engineImportTXD(txd, id)
            dff = engineLoadDFF("skins/" .. id .. ".dff")
            engineReplaceModel(dff, id)
            outputChatBox("Model ID "..id.." changed correctly.")
        else
            outputChatBox("Model ID "..id.." couldn't change. REASON: skins/" .. id .. ".txd or skins/" .. id .. ".dff does not exist.")
        end
    end
end
addCommandHandler("sap", skinAllocatedPeds, false, false)

function onStop()
    for id,ped in pairs(peds) do
        engineFreeModel(id)
    end
end
addEventHandler("onClientResourceStop", resourceRoot, onStop)

See Also