Arma 3 Scripting

Command in Positions

setTerrainHeight

Also available as Markdown and JSON, or read the original wiki page.

Description

Set the current terrain's altitude on provided location(s).

Important

  • Heightmap changes:
    • are internally converted (rounded) to heightmap coordinates
    • are stored in the JIP queue
    • are not removed from the JIP queue if the values are set back to terrain's default value
    • are updated in the JIP queue for updated positions if the same group of positions are edited (order does not matter, but amount does); editing positions by terrain sections is good for multiplayer optimisation (see #Example 2)
    • are not updated and sent twice (old one then new one) if position edits are not exactly the same (see point above and #Example 2).
  • Edited terrain heights are not saved inside savegames, they need to be restored manually on savegame load.
  • Known issues:
    • Terrain sections can become invisible if the change is too extreme
    • Walking on the edge of extreme height changes can catapult the player away

Syntax

setTerrainHeight [positionAndAltitudeArray, adjustObjects]

Parameters:

Returns: Nothing

Examples

Example 1

private _fnc_flattenTerrain =
{
    params ["_start", "_a", "_b", "_h"];
    private _newPositions = [];

    for "_xStep" from 0 to _a do
    {
        for "_yStep" from 0 to _b do
        {
            private _newHeight = _start vectorAdd [_xStep, _yStep, 0];
            _newHeight set [2, _h];
            _newPositions pushBack _newHeight;
        };
    };

    _newPositions;
};

private _desiredTerrainHeight = 150;
private _positionsAndHeights = [getPosWorld player, 50, 50, _desiredTerrainHeight] call _fnc_flattenTerrain;
setTerrainHeight [_positionsAndHeights, true];

Example 2

Bad example:

// first update
setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 25], [1000, 1005, 25], [1005, 1005, 25]]];

// second update - this will make the JIP queue keep both messages
setTerrainHeight [[[1005, 1000, 50]]];

Good example:

// first update
setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 25], [1000, 1005, 25], [1005, 1005, 25]]];

// second update - this will update the JIP queue properly
setTerrainHeight [[[1000, 1000, 25], [1005, 1000, 50], [1000, 1005, 25], [1005, 1005, 25]]];

See also

getTerrainInfo · getTerrainHeight