Потоки Lua и не конфликтация их

wintreist

Активный
Автор темы
308
71
Версия MoonLoader
.026-beta
Требуется при создании потока выделять ему личные переменные имеющие одинаковый смысл выполнения (знаю что написал херню)

Lua:
function sampev.onCreate3DText(idObject, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    if activate then
    if text:find('То что ищется', 1, true) then
lua_thread.create(function()
    id = idObject
    while not activate_thr or not sampIs3dTextDefined(id) do
    wait(100)
    end
    run = true
    sampAddChatMessage('Запуск отслеживания координат', -1)
    print(sampIs3dTextDefined(id))
    while run and sampIs3dTextDefined(id) do
        _,    _, X, Y, _, _, _, _, _ = sampGet3dTextInfoById(id)
        x, y, _ = getCharCoordinates(playerPed)
        print(getDistanceBetweenCoords2d(x, y, X, Y))
        if getDistanceBetweenCoords2d(x, y, X, Y) < 2 then
            sampAddChatMessage('Делаю', -1)
            setVirtualKeyDown(vkeys.VK_N, true)
            wait(200)
            setVirtualKeyDown(vkeys.VK_N, false)
            run = false
        end
        wait(100)
    end
end)
end
end

В общем исходя из того, что потоки могут читать и перезаписывать переменные объявленные вне потока, делаю вывод, что в моём случае, если одно и то же действие произойдет, то потоки будут друг другу перезаписывать переменные. Мне же требуется, чтобы у каждого потока были строго выделенные переменные, и никто, кроме их самих не перезаписывал их.
 
  • Нравится
Реакции: Ya Zaregalsya
Решение
Требуется при создании потока выделять ему личные переменные имеющие одинаковый смысл выполнения (знаю что написал херню)

Lua:
function sampev.onCreate3DText(idObject, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    if activate then
    if text:find('То что ищется', 1, true) then
lua_thread.create(function()
    id = idObject
    while not activate_thr or not sampIs3dTextDefined(id) do
    wait(100)
    end
    run = true
    sampAddChatMessage('Запуск отслеживания координат', -1)
    print(sampIs3dTextDefined(id))
    while run and sampIs3dTextDefined(id) do
        _,    _, X, Y, _, _, _, _, _ = sampGet3dTextInfoById(id)
        x, y, _ = getCharCoordinates(playerPed)...

Quasper

Известный
835
354
Требуется при создании потока выделять ему личные переменные имеющие одинаковый смысл выполнения (знаю что написал херню)

Lua:
function sampev.onCreate3DText(idObject, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    if activate then
    if text:find('То что ищется', 1, true) then
lua_thread.create(function()
    id = idObject
    while not activate_thr or not sampIs3dTextDefined(id) do
    wait(100)
    end
    run = true
    sampAddChatMessage('Запуск отслеживания координат', -1)
    print(sampIs3dTextDefined(id))
    while run and sampIs3dTextDefined(id) do
        _,    _, X, Y, _, _, _, _, _ = sampGet3dTextInfoById(id)
        x, y, _ = getCharCoordinates(playerPed)
        print(getDistanceBetweenCoords2d(x, y, X, Y))
        if getDistanceBetweenCoords2d(x, y, X, Y) < 2 then
            sampAddChatMessage('Делаю', -1)
            setVirtualKeyDown(vkeys.VK_N, true)
            wait(200)
            setVirtualKeyDown(vkeys.VK_N, false)
            run = false
        end
        wait(100)
    end
end)
end
end

В общем исходя из того, что потоки могут читать и перезаписывать переменные объявленные вне потока, делаю вывод, что в моём случае, если одно и то же действие произойдет, то потоки будут друг другу перезаписывать переменные. Мне же требуется, чтобы у каждого потока были строго выделенные переменные, и никто, кроме их самих не перезаписывал их.
создавай локальные переменные внутри потока, область их видимости будет ограничена той функцией в которой они были объявлены
local a = 10 --локальная переменная
a = 10 --глобальная переменная
 
  • Нравится
Реакции: wintreist и Ya Zaregalsya

wintreist

Активный
Автор темы
308
71
создавай локальные переменные внутри потока, область их видимости будет ограничена той функцией в которой они были объявлены
local a = 10 --локальная переменная
a = 10 --глобальная переменная
То есть примерно так?

Lua:
function sampev.onCreate3DText(idObject, color, position, distance, testLOS, attachedPlayerId, attachedVehicleId, text)
    if activate then
    if text:find('То что ищется', 1, true) then
lua_thread.create(function()
    local id = idObject
    local X, Y, x, y, run
    while not activate_thr or not sampIs3dTextDefined(id) do
    wait(100)
    end
    run = true
    sampAddChatMessage('Запуск отслеживания координат', -1)
    print(sampIs3dTextDefined(id))
    while run and sampIs3dTextDefined(id) do
        _,    _, X, Y, _, _, _, _, _ = sampGet3dTextInfoById(id)
        x, y, _ = getCharCoordinates(playerPed)
        print(getDistanceBetweenCoords2d(x, y, X, Y))
        if getDistanceBetweenCoords2d(x, y, X, Y) < 2 then
            sampAddChatMessage('Делаю', -1)
            setVirtualKeyDown(vkeys.VK_N, true)
            wait(200)
            setVirtualKeyDown(vkeys.VK_N, false)
            run = false
        end
        wait(100)
    end
end)
end
end