Крашит при получении 3д корд прицела

7jizzle

Участник
Автор темы
238
14
Версия MoonLoader
.026-beta
Значит юзаю я функцию и рендерю точку на этих кордах. Естественно я пишу прицел.
Код:
[ML] (error) : table overflow
stack traceback:
    [C]: in function 'cast'
    E:\Games\Gta1\moonloader\crosshair3d.lua:10: in function 'get_crosshair_position'
    E:\Games\Gta1\moonloader\crosshair3d.lua:40: in function <E:\Games\Gta1\moonloader\crosshair3d.lua:35>
[ML] (error) : Script died due to an error. (0F61CE3C)

вот ес чо сама функция из снипов
Lua:
local ffi = require "ffi"
local getBonePosition = ffi.cast("int (__thiscall*)(void*, float*, int, bool)", 0x5E4280)

function get_crosshair_position()
    local vec_out = ffi.new("float[3]")
    local tmp_vec = ffi.new("float[3]")
    ffi.cast(
        "void (__thiscall*)(void*, float, float, float, float, float*, float*)",
        0x514970
    )(
        ffi.cast("void*", 0xB6F028),
        15.0,
        tmp_vec[0], tmp_vec[1], tmp_vec[2],
        tmp_vec,
        vec_out
    )
    return vec_out[0], vec_out[1], vec_out[2]
end

Как исправить эту ошибку?

upd скрипт крашит а не самп ес чо
 
Последнее редактирование:
Решение
Lua:
require("lib.moonloader")
local ffi = require "ffi"

function get_crosshair_position()
    local vec_out = ffi.new("float[3]")
    local tmp_vec = ffi.new("float[3]")
    ffi.cast(
        "void (__thiscall*)(void*, float, float, float, float, float*, float*)",
        0x514970
    )(
        ffi.cast("void*", 0xB6F028),
        15.0,
        tmp_vec[0], tmp_vec[1], tmp_vec[2],
        tmp_vec,
        vec_out
    )
    return vec_out[0], vec_out[1], vec_out[2]
end

function renderFigure2D(x, y, points, radius, color)
    local step = math.pi * 2 / points
    local render_start, render_end = {}, {}
    for i = 0, math.pi * 2, step do
        render_start[1] = radius * math.cos(i) + x
        render_start[2] = radius *...

7jizzle

Участник
Автор темы
238
14
Может кодом скинешь?
Lua:
require("lib.moonloader")
local ffi = require "ffi"

function get_crosshair_position()
    local vec_out = ffi.new("float[3]")
    local tmp_vec = ffi.new("float[3]")
    ffi.cast(
        "void (__thiscall*)(void*, float, float, float, float, float*, float*)",
        0x514970
    )(
        ffi.cast("void*", 0xB6F028),
        15.0,
        tmp_vec[0], tmp_vec[1], tmp_vec[2],
        tmp_vec,
        vec_out
    )
    return vec_out[0], vec_out[1], vec_out[2]
end

function renderFigure2D(x, y, points, radius, color)
    local step = math.pi * 2 / points
    local render_start, render_end = {}, {}
    for i = 0, math.pi * 2, step do
        render_start[1] = radius * math.cos(i) + x
        render_start[2] = radius * math.sin(i) + y
        render_end[1] = radius * math.cos(i + step) + x
        render_end[2] = radius * math.sin(i + step) + y
        renderDrawLine(render_start[1], render_start[2], render_end[1], render_end[2], 1, color)
    end
end

function main()
    if not isSampAvaible() then return end
    while true do
        wait(0)
        local crosshairScreenPos = {convert3DCoordsToScreen(get_crosshair_position())}
        renderFigure2D(crosshairScreenPos[1], crosshairScreenPos[2], 12, 20, 0xFF00FF00)
    end
end

Крашит при прицеливании частом. Сорь за задерку.
 

|| NN - NoName ||

Известный
1,049
629
Lua:
require("lib.moonloader")
local ffi = require "ffi"

function get_crosshair_position()
    local vec_out = ffi.new("float[3]")
    local tmp_vec = ffi.new("float[3]")
    ffi.cast(
        "void (__thiscall*)(void*, float, float, float, float, float*, float*)",
        0x514970
    )(
        ffi.cast("void*", 0xB6F028),
        15.0,
        tmp_vec[0], tmp_vec[1], tmp_vec[2],
        tmp_vec,
        vec_out
    )
    return vec_out[0], vec_out[1], vec_out[2]
end

function renderFigure2D(x, y, points, radius, color)
    local step = math.pi * 2 / points
    local render_start, render_end = {}, {}
    for i = 0, math.pi * 2, step do
        render_start[1] = radius * math.cos(i) + x
        render_start[2] = radius * math.sin(i) + y
        render_end[1] = radius * math.cos(i + step) + x
        render_end[2] = radius * math.sin(i + step) + y
        renderDrawLine(render_start[1], render_start[2], render_end[1], render_end[2], 1, color)
    end
end

function main()
    if not isSampAvaible() then return end
    while true do
        wait(0)
        local crosshairScreenPos = {convert3DCoordsToScreen(get_crosshair_position())}
        renderFigure2D(crosshairScreenPos[1], crosshairScreenPos[2], 12, 20, 0xFF00FF00)
    end
end

Крашит при прицеливании частом. Сорь за задерку.
Я исправил это тем, что выставил задержку больше чем 0 мс, мне помогло :)
 

trefa

Известный
Всефорумный модератор
2,097
1,231
Lua:
require("lib.moonloader")
local ffi = require "ffi"

function get_crosshair_position()
    local vec_out = ffi.new("float[3]")
    local tmp_vec = ffi.new("float[3]")
    ffi.cast(
        "void (__thiscall*)(void*, float, float, float, float, float*, float*)",
        0x514970
    )(
        ffi.cast("void*", 0xB6F028),
        15.0,
        tmp_vec[0], tmp_vec[1], tmp_vec[2],
        tmp_vec,
        vec_out
    )
    return vec_out[0], vec_out[1], vec_out[2]
end

function renderFigure2D(x, y, points, radius, color)
    local step = math.pi * 2 / points
    local render_start, render_end = {}, {}
    for i = 0, math.pi * 2, step do
        render_start[1] = radius * math.cos(i) + x
        render_start[2] = radius * math.sin(i) + y
        render_end[1] = radius * math.cos(i + step) + x
        render_end[2] = radius * math.sin(i + step) + y
        renderDrawLine(render_start[1], render_start[2], render_end[1], render_end[2], 1, color)
    end
end

function main()
    if not isSampAvaible() then return end
    while true do
        wait(0)
        local crosshairScreenPos = {convert3DCoordsToScreen(get_crosshair_position())}
        renderFigure2D(crosshairScreenPos[1], crosshairScreenPos[2], 12, 20, 0xFF00FF00)
    end
end

Крашит при прицеливании частом. Сорь за задерку.
Я же писал что слишком часто нельзя использовать функцию, пример как лучше использовать https://www.blast.hk/threads/30892/