Команда в чат /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