Краш игры при вводе команды скрипта

Sanurial

Участник
Автор темы
80
12
Версия MoonLoader
.027.0-preview
Привет, в общем, в LUA я полный нубик, и требуется помощь.
Суть скрипта моего заключается в том, что хочу написать автоматическую отправку сообщений при наличии пассажиров в машине.

Скрипт:
require 'lib.moonloader'
local imgui = require('imgui')
local sampev = require 'lib.samp.events'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local windowJob = imgui.ImBool(false)
local taxi = imgui.ImBool(false)

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('cjobs', function()
        windowJob.v = not windowJob.v
        imgui.Process = windowJob.v
    end)

    thrTaxi = lua_thread.create_suspended(taxi)

    imgui.Process = false
    windowJob.v = false

    while true do
        wait(0)
       
        if isCharInAnyCar(playerPed) then
            local car = storeCarCharIsInNoSave(playerPed)
            local result, passengers = getNumberOfPassengers(car)
            if passengers > 0 then
                if taxist.v == true then
                    thrTaxi:run()
                else
                    thrTaxi:stop()
                end
            end
        end

        imgui.Process = windowJob.v
    end
end

function imgui.OnDrawFrame()
    if windowJob.v then
        imgui.Begin(u8' Работа', windowJob)

        if imgui.Checkbox(u8"Таксист", taxist) then
            if taxist.v == true then
                sampAddChatMessage('{FF00FF}CaffJob >> {FFFFFF}Автоответчик таксиста {00FF00}включён{FFFFFF}.', -1)
            else
                sampAddChatMessage('{FF00FF}CaffJob >> {FFFFFF}Автоответчик таксиста {FF0000}выключён{FFFFFF}.', -1)
            end
        end

        imgui.End()
    end
end

function taxi()
    sampSendChat("Привет")
    wait(500)
    sampSendChat("123")
end

Но проблема заключается в том, что при вводе команды, самп просто закрывается и всё. Логи чистые, ошибок не выдаёт...
 
Последнее редактирование:
  • Эм
Реакции: Lance_Sterling

Lance_Sterling

Известный
978
341
Сейчас попробую
Вы используете переменную taxist которой нет, что бы её создать вместе с переменными 'local windowJob = imgui.ImBool(false)' и 'local taxi = imgui.ImBool(false)', напишите:
Lua:
local taxist = imgui.ImBool(false)
 
  • Нравится
Реакции: Sanurial

Sanurial

Участник
Автор темы
80
12
Вы используете переменную taxist которой нет, что бы её создать вместе с переменными 'local windowJob = imgui.ImBool(false)' и 'local taxi = imgui.ImBool(false)', напишите:
Lua:
local taxist = imgui.ImBool(false)
Да я уж понял, просто ранее для переменной в чекбоксе использовал имя переменной taxi. Моя невнимательность... С переменной вы были правы, спасибо!)

h7RVPOk.jpeg

Как это можно понять? Я так полагаю из-за того что поток с отправкой сообщений запускается в цикле с проверкой на пассажира...
 

Lance_Sterling

Известный
978
341
Попробуйте использовать:
Lua:
local isGreetingSent = false

function main()
    while not isSampAvailable() do wait(0) end

    while true do
        wait(0)

        if isCharInAnyCar(playerPed) and taxi.v then
            local car = storeCarCharIsInNoSave(playerPed)
            local result, passengers = getNumberOfPassengers(car)

            if passengers > 0 and isCharDriver(car, playerPed) and not isGreetingSent then
                sampSendChat("Привет, пассажир!")
                isGreetingSent = true
            end
        else
            isGreetingSent = false
        end
    end
end
Этот код использует ту же самую логику, что и ваш код, с одним изменением - переменная isGreetingSent, которая отслеживает, было ли уже отправлено приветствие. Если приветствие еще не было отправлено, то оно отправляется в чат, а переменная isGreetingSent устанавливается в значение true. Если игрок выходит из машины, то переменная isGreetingSent сбрасывается обратно в значение false, чтобы приветствие было отправлено снова, если другой игрок сядет в вашу машину.
 
Последнее редактирование:

Sanurial

Участник
Автор темы
80
12
Попробуйте использовать:
Lua:
local isGreetingSent = false

function main()
    while not isSampAvailable() do wait(0) end

    while true do
        wait(0)

        if isCharInAnyCar(playerPed) and taxi.v then
            local car = storeCarCharIsInNoSave(playerPed)
            local result, passengers = getNumberOfPassengers(car)

            if passengers > 0 and isCharDriver(car, playerPed) and not isGreetingSent then
                sampSendChat("Привет, пассажир!")
                isGreetingSent = true
            end
        else
            isGreetingSent = false
        end
    end
end
Этот код использует ту же самую логику, что и ваш код, с одним изменением - переменная isGreetingSent, которая отслеживает, было ли уже отправлено приветствие. Если приветствие еще не было отправлено, то оно отправляется в чат, а переменная isGreetingSent устанавливается в значение true. Если игрок выходит из машины, то переменная isGreetingSent сбрасывается обратно в значение false, чтобы приветствие было отправлено снова, если другой игрок сядет в вашу машину.
error:
31: attempt to call global 'isCharDriver' (a nil value)
stack traceback:
вот что выдаёт D:
 

Lance_Sterling

Известный
978
341
error:
31: attempt to call global 'isCharDriver' (a nil value)
stack traceback:
вот что выдаёт D:
Прошу прощения, замените всю строку на:
getDriverOfCar(car)
Lua:
if passengers > 0 and getDriverOfCar(car) == playerPed and not isGreetingSent then
 
  • Нравится
Реакции: Sanurial

Fasz fiatal

Известный
321
68
Да я уж понял, просто ранее для переменной в чекбоксе использовал имя переменной taxi. Моя невнимательность... С переменной вы были правы, спасибо!)

h7RVPOk.jpeg

Как это можно понять? Я так полагаю из-за того что поток с отправкой сообщений запускается в цикле с проверкой на пассажира...
на радмире убрали системный запрет мунлоадера или ты с обходом зашел?