Исходник Генератор карты высот (hmap) на основе processLineOfSight

loossklxm

Известный
Автор темы
52
9

Команда в чат /hmap

Желательно прогрузить зону, иначе не будут найдены точки​

Зависания на момент генерации!

Исходник:
-- Генератор карты высот (hmap) на основе processLineOfSight

local vector3d = require("vector3d")

-- Настройки генерации
local GRID_STEP = 0.5          -- шаг сетки (в метрах)
local MAP_MIN_X, MAP_MAX_X = 0, 10
local MAP_MIN_Y, MAP_MAX_Y = 0, 10

-- Получение Z через луч
local function get_ground_z(x, y)
    local startZ = 1000.0
    local result, col_point = processLineOfSight(
        x, y, startZ,
        x, y, startZ - 2000.0,
        true, false, false, true, false, false, false, false
    )
    if result and col_point and col_point.pos then
        return col_point.pos[3] + 1.0 -- Z
    end
    return nil
end

local function hmap_generated(filename)
    local file = io.open(filename, "w")
    if not file then
        sampAddChatMessage("{FF0000}Не удалось создать файл: " .. filename, -1)
        print("Не удалось создать файл: " .. filename)
        return false
    end

    local total_points = 0
    local failed_points = 0

    for x = MAP_MIN_X, MAP_MAX_X, GRID_STEP do
        for y = MAP_MIN_Y, MAP_MAX_Y, GRID_STEP do
            local z = get_ground_z(x, y)
            if z then
                file:write(string.format("%.1f,%.1f,%.2f\n", x, y, z))
                total_points = total_points + 1
            else
                failed_points = failed_points + 1
            end
        end
    end

    file:close()
    sampAddChatMessage("Завершено! Сохранено {00CC00}"..total_points.."{FFFFFF} точек. Не удалось получить Z для {FF0000}"..failed_points.."{FFFFFF} точек.", -1)
    print("Завершено! Сохранено "..total_points.." точек. Не удалось получить Z для "..failed_points.." точек.")
    return true
end

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    sampRegisterChatCommand("hmap", function(args)
        hmap_generated("hmap_generated.csv")
    end)

    wait(-1)
end