Хелп с LUA скриптом

iMusicAndMe

Новичок
Автор темы
1
0
Короче пацаны, было мне нечем заняться и я думаю попробую у чата гпт какую-то рандомную дичь запросить, потом нашёл этот форум, вижу тут все ребята шарящие, че не так с этим скриптом? И если всё не так, то так и напишите что я еб***. Пасиб


require "moonloader"

local teleportCoords = {x = 0, y = 0, z = 0} -- координаты точки телепортации
local teleportDist = 0 -- дистанция телепортации
local isTeleporting = false -- флаг телепортации

function onWheelClick(button, state, absoluteX, absoluteY, relativeX, relativeY)
if button == "middle" and state == "down" then
isTeleporting = true -- включаем режим телепортации
teleportDist = 0 -- сбрасываем дистанцию телепортации
elseif button == "middle" and state == "up" and isTeleporting then
isTeleporting = false -- выключаем режим телепортации
local playerX, playerY, playerZ = getElementPosition(getLocalPlayer()) -- получаем текущие координаты игрока
local dx, dy, dz = getCameraMatrix() -- получаем координаты точки взгляда камеры
local dist = teleportDist -- получаем дистанцию телепортации
local x = playerX + dx * dist -- вычисляем новые координаты по осям X и Z
local y = playerY + dy * dist
local z = playerZ + dz * dist + 1 -- добавляем 1 к Z, чтобы игрок не застревал в земле
setElementPosition(getLocalPlayer(), x, y, z) -- перемещаем игрока на новую позицию
end
end

function onClientRender()
if isTeleporting then
local playerX, playerY, playerZ = getElementPosition(getLocalPlayer()) -- получаем текущие координаты игрока
local dx, dy, dz = getCameraMatrix() -- получаем координаты точки взгляда камеры
local dist = getDistanceBetweenPoints3D(playerX, playerY, playerZ, playerX + dx, playerY + dy, playerZ + dz) -- вычисляем дистанцию телепортации
teleportDist = dist -- сохраняем дистанцию телепортации
dx, dy, dz = dx * dist, dy * dist, dz * dist -- умножаем координаты точки взгляда на дистанцию
local px, py = getScreenFromWorldPosition(playerX + dx, playerY + dy, playerZ + dz) -- получаем экранные координаты точки телепортации
if px and py then
dx, dy = px - screenWidth / 2, py - screenHeight / 2 -- вычисляем расстояние от точки телепортации до центра экрана
dx, dy = dx / zoom, dy / zoom -- корректируем расстояние в зависимости от зум
local r = math.sqrt(dx * dx + dy * dy) -- вычисляем радиус вектора
local angle = math.deg(math.atan2(dy, dx)) + 180 -- вычисляем угол между вектором и осью X
dx, dy = r * math.cos(math.rad(angle)), r * math.sin(math.rad(angle)) -- вычисляем новые координаты точки телепортации, корректируя угол под учетом текущего зума
dx, dy = dx + screenWidth / 2, dy + screenHeight / 2 -- смещаем точку телепортации относительно центра экрана
dx, dy = dx - 50, dy - 50 -- смещаем точку телепортации относительно левого верхнего угла
dx, dy = dx / 2, dy / 2 -- корректируем координаты, чтобы изображение было два раза меньше
dx, dy = dx / zoom, dy / zoom -- корректируем координаты в зависимости от зума
dx, dy = dx + 50, dy + 50 -- смещаем точку телепортации относительно левого верхнего угла
dx, dy = dx + 10, dy + 10 -- добавляем отступ, чтобы изображение было немного выше
dx, dy = math.floor(dx), math.floor(dy) -- округляем координаты до целых чисел
dx, dy = math.max(dx, 0), math.max(dy, 0) -- убеждаемся, что координаты не выходят за границы экрана
dx, dy = math.min(dx, screenWidth - 120), math.min(dy, screenHeight - 120)
dx, dy = dx + 60, dy + 60 -- добавляем отступ от границ экрана
dx, dy = dx / screenWidth, dy / screenHeight -- нормализуем координаты от 0 до 1
teleportCoords.x, teleportCoords.y, teleportCoords.z = interpolateBetween(playerX + dx * dist, playerY + dy * dist, playerZ + dz * dist, playerX + dx * dist, playerY + dy * dist, playerZ + dz * dist, 0.5, "InOutQuad") -- вычисляем координаты точки телепортации с помощью интерполяции
function teleportToCursor(player)
local cursorX, cursorY, _, _, _ = getCursorPosition()
local x, y, z = getWorldFromScreenPosition(cursorX, cursorY, 100)
if x then
setElementPosition(player, x, y, z)
end
end
end
end
end
addCommandHandler("tp", teleportToCursor)