attempt to yield across C-call boundary

killerson

Участник
Автор темы
66
1
Версия MoonLoader
.026-beta
help me plz >.<
[08:49:54.945928] (error) indicator.lua: D:\GTA\moonloader\indicator.lua:2: attempt to yield across C-call boundary
stack traceback:
[C]: in function 'wait'
D:\GTA\moonloader\indicator.lua:2: in main chunk

indiactor:
while true do
        wait(0)  
        local cam_x, cam_y, cam_z = getActiveCameraCoordinates()
        local width, heigth = convertGameScreenCoordsToWindowScreenCoords(339.1, 179.1)
        local cross_x, cross_y, cross_z = convertScreenCoordsToWorld3D(width, heigth, 100)
        local result, pointer = processLineOfSight(cam_x, cam_y, cam_z, cross_x, cross_y, cross_z, false, false, true, false, false, false, false)
        if result then
            if isLineOfSightClear(cam_x, cam_y, cam_z, pointer.pos[1], pointer.pos[2], pointer.pos[3], true, true, false, true, true) then
                if pointer.entityType == 3 then
                    if getCharPointerHandle(pointer.entity) ~= playerPed then
                        changeCrosshairColor(0x00FF00FF)
                    end
                end
            end
        end
end
 

Iskon

Участник
110
18
Это происходит из-за того, что ты пытаешься вызвать функцию wait() не в теле основного потока main.

Ты можешь свой цикл засунуть в поток, и все будет работать.


Код:
lua_thread.create(function ()
while true do
        wait(0) 
        local cam_x, cam_y, cam_z = getActiveCameraCoordinates()
        local width, heigth = convertGameScreenCoordsToWindowScreenCoords(339.1, 179.1)
        local cross_x, cross_y, cross_z = convertScreenCoordsToWorld3D(width, heigth, 100)
        local result, pointer = processLineOfSight(cam_x, cam_y, cam_z, cross_x, cross_y, cross_z, false, false, true, false, false, false, false)
        if result then
            if isLineOfSightClear(cam_x, cam_y, cam_z, pointer.pos[1], pointer.pos[2], pointer.pos[3], true, true, false, true, true) then
                if pointer.entityType == 3 then
                    if getCharPointerHandle(pointer.entity) ~= playerPed then
                        changeCrosshairColor(0x00FF00FF)
                    end
                end
            end
       end
end
end)
 
  • Нравится
Реакции: tygodym

killerson

Участник
Автор темы
66
1
Это происходит из-за того, что ты пытаешься вызвать функцию wait() не в теле основного потока main.

Ты можешь свой цикл засунуть в поток, и все будет работать.


Код:
lua_thread.create(function ()
while true do
        wait(0)
        local cam_x, cam_y, cam_z = getActiveCameraCoordinates()
        local width, heigth = convertGameScreenCoordsToWindowScreenCoords(339.1, 179.1)
        local cross_x, cross_y, cross_z = convertScreenCoordsToWorld3D(width, heigth, 100)
        local result, pointer = processLineOfSight(cam_x, cam_y, cam_z, cross_x, cross_y, cross_z, false, false, true, false, false, false, false)
        if result then
            if isLineOfSightClear(cam_x, cam_y, cam_z, pointer.pos[1], pointer.pos[2], pointer.pos[3], true, true, false, true, true) then
                if pointer.entityType == 3 then
                    if getCharPointerHandle(pointer.entity) ~= playerPed then
                        changeCrosshairColor(0x00FF00FF)
                    end
                end
            end
       end
end
end)
теперь выдает эту ошибку:
[02:05:10.570435] (error) indicator.lua: D:\GTA\moonloader\indicator.lua:12: attempt to call global 'changeCrosshairColor' (a nil value)
stack traceback:
D:\GTA\moonloader\indicator.lua: in function <D:\GTA\moonloader\indicator.lua:1>
[02:05:10.570435] (error) indicator.lua: Script died due to an error. (0D1848BC)
 

MrDorlik

Известный
950
383
теперь выдает эту ошибку:
[02:05:10.570435] (error) indicator.lua: D:\GTA\moonloader\indicator.lua:12: attempt to call global 'changeCrosshairColor' (a nil value)
stack traceback:
D:\GTA\moonloader\indicator.lua: in function <D:\GTA\moonloader\indicator.lua:1>
[02:05:10.570435] (error) indicator.lua: Script died due to an error. (0D1848BC)
функция changeCrosshairColor не объявлена
 

MLycoris

На вид оружие массового семяизвержения
Проверенный
1,980
2,201
если ты не знаешь что такое функция, как ты код пишешь вообще
та он эту фигню скопировал и не знает что с ней делать
 
  • Нравится
Реакции: killerson

MrDorlik

Известный
950
383
help me plz >.<
[08:49:54.945928] (error) indicator.lua: D:\GTA\moonloader\indicator.lua:2: attempt to yield across C-call boundary
stack traceback:
[C]: in function 'wait'
D:\GTA\moonloader\indicator.lua:2: in main chunk

indiactor:
while true do
        wait(0)
        local cam_x, cam_y, cam_z = getActiveCameraCoordinates()
        local width, heigth = convertGameScreenCoordsToWindowScreenCoords(339.1, 179.1)
        local cross_x, cross_y, cross_z = convertScreenCoordsToWorld3D(width, heigth, 100)
        local result, pointer = processLineOfSight(cam_x, cam_y, cam_z, cross_x, cross_y, cross_z, false, false, true, false, false, false, false)
        if result then
            if isLineOfSightClear(cam_x, cam_y, cam_z, pointer.pos[1], pointer.pos[2], pointer.pos[3], true, true, false, true, true) then
                if pointer.entityType == 3 then
                    if getCharPointerHandle(pointer.entity) ~= playerPed then
                        changeCrosshairColor(0x00FF00FF)
                    end
                end
            end
        end
end
Lua:
local memory = require "memory"

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    while true do
        wait(0)
        local cam_x, cam_y, cam_z = getActiveCameraCoordinates()
        local width, heigth = convertGameScreenCoordsToWindowScreenCoords(339.1, 179.1)
        local cross_x, cross_y, cross_z = convertScreenCoordsToWorld3D(width, heigth, 100)
        local result, pointer = processLineOfSight(cam_x, cam_y, cam_z, cross_x, cross_y, cross_z, false, false, true, false, false, false, false)
        if result then
            if isLineOfSightClear(cam_x, cam_y, cam_z, pointer.pos[1], pointer.pos[2], pointer.pos[3], true, true, false, true, true) then
                if pointer.entityType == 3 then
                    if getCharPointerHandle(pointer.entity) ~= playerPed then
                        changeCrosshairColor(0xFF0000FF)
                    end
                end
            end
        else
            changeCrosshairColor(0xFFFFFFFF)
        end
    end
end

function changeCrosshairColor(rgba)
    local r = bit.band(bit.rshift(rgba, 24), 0xFF)
    local g = bit.band(bit.rshift(rgba, 16), 0xFF)
    local b = bit.band(bit.rshift(rgba, 8), 0xFF)
    local a = bit.band(rgba, 0xFF)

    memory.setuint8(0x58E301, r, true)
    memory.setuint8(0x58E3DA, r, true)
    memory.setuint8(0x58E433, r, true)
    memory.setuint8(0x58E47C, r, true)

    memory.setuint8(0x58E2F6, g, true)
    memory.setuint8(0x58E3D1, g, true)
    memory.setuint8(0x58E42A, g, true)
    memory.setuint8(0x58E473, g, true)

    memory.setuint8(0x58E2F1, b, true)
    memory.setuint8(0x58E3C8, b, true)
    memory.setuint8(0x58E425, b, true)
    memory.setuint8(0x58E466, b, true)

    memory.setuint8(0x58E2EC, a, true)
    memory.setuint8(0x58E3BF, a, true)
    memory.setuint8(0x58E420, a, true)
    memory.setuint8(0x58E461, a, true)
end
 
Последнее редактирование:
  • Нравится
Реакции: killerson