EngineRequestModel: Difference between revisions
(Created page with "modelID = engineRequestModel("ped") https://github.com/multitheftauto/mtasa-blue/commit/34d4eed068f9c957d977044e8c7fd36e087ff09a") |
TheNormalnij (talk | contribs) (There is no parentId limits) |
||
(32 intermediate revisions by 16 users not shown) | |||
Line 1: | Line 1: | ||
__NOTOC__ | |||
{{Client function}} | |||
{{New feature/item|3.0158|1.5.7|20147|This function is used to assign the next available model ID to a certain element type.}} | |||
{{note|After release '''1.6.0 r22868''' this function supports "object-damageable".}} | |||
{{note|Before release '''1.5.8 r20716''' this must be "ped". After release '''1.5.8 r20716''' this function supports "vehicle" and "object" too.}} | |||
{{note|Vehicle unique features may be unsupported, see [https://github.com/multitheftauto/mtasa-blue/issues/1861 issue 1861] for examples and details}} | |||
{{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== | |||
<syntaxhighlight lang="lua"> | |||
int engineRequestModel ( string elementType [, int parentID ] ) | |||
</syntaxhighlight> | |||
===Required Arguments=== | |||
*'''elementType''': "ped", "vehicle", "object", "timed-object", "clump", "object-damageable" | |||
===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, 994 - damageable objects). | |||
{{Important Note|parentID should be the same model type to prevent crashes.}} | |||
===Returns=== | |||
{{New feature/item|3.0158|1.5.7|20147| 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: | |||
<syntaxhighlight lang="lua"> | |||
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) | |||
</syntaxhighlight> | |||
==See Also== | |||
{{Engine functions}} |
Latest revision as of 14:48, 5 January 2025
This function is used to assign the next available model ID to a certain element type.
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", "object-damageable"
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, 994 - damageable objects).
Important Note: parentID should be the same model type to prevent crashes. |
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
- engineAddImage
- engineApplyShaderToWorldTexture
- engineFreeModel
- engineGetModelFlags
- engineGetModelIDFromName
- engineGetModelLODDistance
- engineGetModelNameFromID
- engineGetModelPhysicalPropertiesGroup
- engineGetModelTextureNames
- engineGetModelTextures
- engineGetModelTXDID
- engineGetModelVisibleTime
- engineGetObjectGroupPhysicalProperty
- engineGetSurfaceProperties
- engineGetVisibleTextureNames
- engineImageGetFilesCount
- engineImageGetFiles
- engineImageGetFile
- engineImageLinkDFF
- engineImageLinkTXD
- engineImportTXD
- engineLoadCOL
- engineLoadDFF
- engineLoadIMG
- engineLoadIFP
- engineLoadTXD
- engineRemoveImage
- engineRemoveShaderFromWorldTexture
- engineReplaceAnimation
- engineReplaceCOL
- engineReplaceModel
- engineRequestModel
- engineResetModelFlags
- engineResetModelLODDistance
- engineResetSurfaceProperties
- engineRestoreAnimation
- engineRestoreCOL
- engineRestoreDFFImage
- engineRestoreModel
- engineRestoreModelPhysicalPropertiesGroup
- engineRestoreObjectGroupPhysicalProperties
- engineRestoreTXDImage
- engineRestreamWorld
- engineSetAsynchronousLoading
- engineSetModelFlag
- engineSetModelFlags
- engineSetModelLODDistance
- engineSetModelPhysicalPropertiesGroup
- engineSetModelVisibleTime
- engineSetObjectGroupPhysicalProperty
- engineSetSurfaceProperties
- engineStreamingFreeUpMemory
- engineStreamingGetUsedMemory