CreateBuilding: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(use template ExampleCreateObjectOrBuilding)
mNo edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
__NOTOC__  
__NOTOC__  
{{Client function}}
{{Client function}}
{{New feature/item|3.0161|1.6.0|22410|Creates a [[building]] [[element]] at a given position and rotation.}}
{{New feature/item|3.0161|1.6.0|22410|Creates a [[building]] [[element]] at a given position & interior with a certain rotation.}}
{{Note|Unlike [[createObject]], this function does not have an '''isLowLOD''' argument. When using [[setLowLODElement]], the system will automatically define the building as a LOD.}}
{{BuildingInfo}}
{{BuildingInfo}}


Line 9: Line 10:


===Required Arguments===
===Required Arguments===
*'''modelId:''' A whole integer specifying the GTA:SA object model ID.
*'''modelId:''' A whole integer specifying the GTA:SA object model ID. See [[Object_IDs|Object IDs]] for a list of model IDs.
*'''x:''' A floating point number representing the X coordinate on the map.
*'''x:''' A floating point number representing the X coordinate on the map.
*'''y:''' A floating point number representing the Y coordinate on the map.
*'''y:''' A floating point number representing the Y coordinate on the map.

Latest revision as of 11:21, 14 October 2024

ADDED/UPDATED IN VERSION 1.6.0 r22410:
Creates a building element at a given position & interior with a certain rotation.
[[{{{image}}}|link=|]] Note: Unlike createObject, this function does not have an isLowLOD argument. When using setLowLODElement, the system will automatically define the building as a LOD.

Important information about buildings:

  • There is a distinction in GTA: San Andreas between static and dynamic models (these use a separate streaming system). Examples of buildings include building models, roads, and terrain. Objects created as Buildings can contain glass and shadows, unlike those created as Objects(which can be created in any dimension).
  • Using buildings for exterior mapping is more optimized than using objects. Gains in FPS can be noticed in areas where a lot of objects were replaced with buildings of this new system.
  • Buildings can only be created inside regular GTA:SA Map Boundaries (X between -3000 and 3000; Y between -3000 and 3000). Use createObject to spawn objects outside these normal limits.
  • Created buildings can have LOD models, which is possible using createBuilding to spawn the LOD building, then setLowLODElement to associate it with a non-LOD building element created beforehand. LOD model distance changed with engineSetModelLODDistance affects buildings too.

Syntax

building createBuilding ( int modelId, float x, float y, float z [, float rx, float ry, float rz, int interior = 0 ] )

OOP Syntax Help! I don't understand this!

Method: Building(...)


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.
  • interior: The interior you want to set the building to. Valid values are 0 to 255.


Returns

  • Returns the building element if the creation was successful, throws an error 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 [-]
Simple example

This example creates a building when the resource starts:

function loadMap()
   -- create a *building* at a specified position with a specified rotation
   createBuilding(4550, 1985, -2544, 94, 0,0,0) -- Maze Bank Tower in LS airport
end
addEventHandler("onClientResourceStart", resourceRoot, loadMap, false)

See Also