CreateObject: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
No edit summary
m (info about setLowLODElement)
(14 intermediate revisions by 6 users not shown)
Line 1: Line 1:
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
__NOTOC__
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
{{Server client function}}
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
Creates an [[object]] [[element]] at a given position and rotation.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
{{Note|Dynamic objects do not automatically have physics applied to them. Use [[setElementVelocity]](object, 0, 0, 0) to fix this.}}
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
{{Note|The alternative [[createBuilding]] function allows you to create objects that are non-dynamic. This [[createObject]] function can also create non-dynamic objects, but for optimization reasons '''it is recommended to spawn [[building|Buildings]] when creating static objects in the [[Dimension]] 0''' (because they don't use the MTA object-streaming system).}}
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
 
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
==Syntax==
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
<syntaxhighlight lang="lua">object createObject ( int modelId, float x, float y, float z, [ float rx, float ry, float rz, bool isLowLOD = false ] )</syntaxhighlight>
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
{{OOP||[[Object]]||}}
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
 
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
===Required Arguments===
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''modelId:''' A whole integer specifying the GTA:SA object model ID. See [[Object_IDs|Object IDs]] for a list of model IDs.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''x:''' A floating point number representing the X coordinate on the map.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''y:''' A floating point number representing the Y coordinate on the map.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''z:''' A floating point number representing the Z coordinate on the map.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
 
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
===Optional Arguments===
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
{{OptionalArg}}
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''rx:''' A floating point number representing the rotation about the X axis in degrees.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''ry:''' A floating point number representing the rotation about the Y axis in degrees.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''rz:''' A floating point number representing the rotation about the Z axis in degrees.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
{{New items|3.0120|1.2|
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
*'''isLowLOD:''' A bool value specifying if the object will be low LOD. A low LOD object has no collision and a longer draw distance. See [[setLowLODElement]] for linking a LOD object.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
}}
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
 
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
===Returns===
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
* Returns the [[object]] element if the creation was successful, ''false'' otherwise.
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
 
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
==Example==
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
{{ExampleCreateObjectOrBuilding}}
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
<section name="Server-only Example 1" class="server" show="true">
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
This example creates an object when the resource starts:
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
<syntaxhighlight lang="lua">
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
function loadMapObjects()
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
  -- create an object at a specified position with a specified rotation
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
  createObject(1337, 5540.6654, 1020.55122, 1240.545, 90, 0, 0)
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
end
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
addEventHandler("onResourceStart", resourceRoot, loadMapObjects)
Extrem liże hazowi dupsko a Barcioo liże cipsko Trinowi
</syntaxhighlight>
</section>
 
<section name="Server-only Example 2" class="server" show="true">
This example creates an object near the player who write /createObject in the chat:
<syntaxhighlight lang="lua">
-- this function is called whenever someone types 'createObject' in the console:
function createObjectCommand(thePlayer, commandName)
  if (thePlayer) then
      local x, y, z = getElementPosition(thePlayer)
      -- create a object next to the player:
      local theObject = createObject(980, x + 2, y + 2, z, 0, 0, 0)
      if (theObject) then -- check if the object was created successfully
        outputChatBox("Object created successfully.", thePlayer)
      else
        outputChatBox("Failed to create the object.", thePlayer)
      end
  end
end
addCommandHandler("createobject", createObjectCommand)
</syntaxhighlight>
</section>
 
==See Also==
{{Object functions}}

Revision as of 11:11, 14 October 2024

Creates an object element at a given position and rotation.

[[{{{image}}}|link=|]] Note: Dynamic objects do not automatically have physics applied to them. Use setElementVelocity(object, 0, 0, 0) to fix this.
[[{{{image}}}|link=|]] Note: The alternative createBuilding function allows you to create objects that are non-dynamic. This createObject function can also create non-dynamic objects, but for optimization reasons it is recommended to spawn Buildings when creating static objects in the Dimension 0 (because they don't use the MTA object-streaming system).

Syntax

object createObject ( int modelId, float x, float y, float z, [ float rx, float ry, float rz, bool isLowLOD = false ] )

OOP Syntax Help! I don't understand this!

Method: Object(...)


Required Arguments

  • modelId: A whole integer specifying the GTA:SA object model ID. See Object IDs for a list of model IDs.
  • x: A floating point number representing the X coordinate on the map.
  • y: A floating point number representing the Y coordinate on the map.
  • z: A floating point number representing the Z coordinate on the map.

Optional Arguments

NOTE: When using optional arguments, you might need to supply all arguments before the one you wish to use. For more information on optional arguments, see optional arguments.

  • rx: A floating point number representing the rotation about the X axis in degrees.
  • ry: A floating point number representing the rotation about the Y axis in degrees.
  • rz: A floating point number representing the rotation about the Z axis in degrees.
  • isLowLOD: A bool value specifying if the object will be low LOD. A low LOD object has no collision and a longer draw distance. See setLowLODElement for linking a LOD object.

Returns

  • Returns the object element if the creation was successful, false otherwise.

Example

Click to collapse [-]
How to automatically perform object/building creation

This example shows you how to easily verify if any object model ID is non-dynamic, so it can be used with the createBuilding function, as long as it's outside within the map boundaries. This script will only work CLIENTSIDE due to createBuilding.

function createObjectOrBuilding(modelID, x, y, z, rx, ry, rz, interior, dimension)
    -- Dynamic object models will always have a physical properties group different than -1.
    local isNonDynamic = engineGetModelPhysicalPropertiesGroup(modelID) == -1
    -- Buildings can't be placed outside dimension 0
    local isNormalDimension = dimension == 0
    -- Buildings can't be placed outside regular map boundaries
    local isInsideMapLimits = x >= -3000 and x <= 3000 and y >= -3000 and y <= 3000

    local obj, bld
    if isNonDynamic and isNormalDimension  and isInsideMapLimits then
        bld = createBuilding(modelID, x, y, z, rx, ry, rz, interior)
        assert(bld, ("Failed to create building with model ID %d at %f, %f, %f in interior %d"):format(modelID, x, y, z, interior))
    else
        obj = createObject(modelID, x, y, z, rx, ry, rz, false)
        assert(obj, ("Failed to create object with model ID %d at %f, %f, %f"):format(modelID, x, y, z))
        setElementInterior(obj, interior)
        setElementDimension(obj, dimension)
    end
    return obj or bld
end

-- This would be your object's model ID
local modelID = 3556
-- This would be your object's position coordinates
local x, y, z = 0, 0, 69
-- This would be your object's rotation coordinates
local rx, ry, rz = 0, 0, 90
-- This would be your object's interior ID
local interior = 0
-- This would be your object's dimension ID
local dimension = 0

local success, element = pcall(createObjectOrBuilding, modelID, x, y, z, rx, ry, rz, interior, dimension)
if not success then
    outputDebugString(("Failed to create object or building: %s"):format(tostring(element)), 4, 255, 25, 25)
    return
end

-- OPTIONAL: Then you can apply additional properties, like so:
if getElementType(element) == "object" then
    setObjectScale(element, 1.69)
    setObjectBreakable(element, false)
end
setElementAlpha(element, 255)
setElementCollisionsEnabled(element, true)
setElementFrozen(element, false)
Click to collapse [-]
Server-only Example 1

This example creates an object when the resource starts:

function loadMapObjects()
   -- create an object at a specified position with a specified rotation
   createObject(1337, 5540.6654, 1020.55122, 1240.545, 90, 0, 0)
end
addEventHandler("onResourceStart", resourceRoot, loadMapObjects)
Click to collapse [-]
Server-only Example 2

This example creates an object near the player who write /createObject in the chat:

-- this function is called whenever someone types 'createObject' in the console:
function createObjectCommand(thePlayer, commandName)
   if (thePlayer) then
      local x, y, z = getElementPosition(thePlayer)
      -- create a object next to the player:
      local theObject = createObject(980, x + 2, y + 2, z, 0, 0, 0)
      if (theObject) then -- check if the object was created successfully
         outputChatBox("Object created successfully.", thePlayer)
      else
         outputChatBox("Failed to create the object.", thePlayer)
      end
   end
end
addCommandHandler("createobject", createObjectCommand)

See Also