Вопросы по Lua скриптингу

Общая тема для вопросов по разработке скриптов на языке программирования Lua, в частности под MoonLoader.
  • Задавая вопрос, убедитесь, что его нет в списке частых вопросов и что на него ещё не отвечали (воспользуйтесь поиском).
  • Поищите ответ в теме посвященной разработке Lua скриптов в MoonLoader
  • Отвечая, убедитесь, что ваш ответ корректен.
  • Старайтесь как можно точнее выразить мысль, а если проблема связана с кодом, то обязательно прикрепите его к сообщению, используя блок [code=lua]здесь мог бы быть ваш код[/code].
  • Если вопрос связан с MoonLoader-ом первым делом желательно поискать решение на wiki.

Частые вопросы

Как научиться писать скрипты? С чего начать?
Информация - Гайд - Всё о Lua скриптинге для MoonLoader(https://blast.hk/threads/22707/)
Как вывести текст на русском? Вместо русского текста у меня какие-то каракули.
Изменить кодировку файла скрипта на Windows-1251. В Atom: комбинация клавиш Ctrl+Shift+U, в Notepad++: меню Кодировки -> Кодировки -> Кириллица -> Windows-1251.
Как получить транспорт, в котором сидит игрок?
Lua:
local veh = storeCarCharIsInNoSave(PLAYER_PED)
Как получить свой id или id другого игрока?
Lua:
local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- получить свой ид
local _, id = sampGetPlayerIdByCharHandle(ped) -- получить ид другого игрока. ped - это хендл персонажа
Как проверить, что строка содержит какой-то текст?
Lua:
if string.find(str, 'текст', 1, true) then
-- строка str содержит "текст"
end
Как эмулировать нажатие игровой клавиши?
Lua:
local game_keys = require 'game.keys' -- где-нибудь в начале скрипта вне функции main

setGameKeyState(game_keys.player.FIREWEAPON, -1) -- будет сэмулировано нажатие клавиши атаки
Все иды клавиш находятся в файле moonloader/lib/game/keys.lua.
Подробнее о функции setGameKeyState здесь: lua - setgamekeystate | BlastHack — DEV_WIKI(https://www.blast.hk/wiki/lua:setgamekeystate)
Как получить id другого игрока, в которого целюсь я?
Lua:
local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE) -- получить хендл персонажа, в которого целится игрок
if valid and doesCharExist(ped) then -- если цель есть и персонаж существует
  local result, id = sampGetPlayerIdByCharHandle(ped) -- получить samp-ид игрока по хендлу персонажа
  if result then -- проверить, прошло ли получение ида успешно
    -- здесь любые действия с полученным идом игрока
  end
end
Как зарегистрировать команду чата SAMP?
Lua:
-- До бесконечного цикла/задержки
sampRegisterChatCommand("mycommand", function (param)
     -- param будет содержать весь текст введенный после команды, чтобы разделить его на аргументы используйте string.match()
    sampAddChatMessage("MyCMD", -1)
end)
Крашит игру при вызове sampSendChat. Как это исправить?
Это происходит из-за бага в SAMPFUNCS, когда производится попытка отправки пакета определенными функциями изнутри события исходящих RPC и пакетов. Исправления для этого бага нет, но есть способ не провоцировать его. Вызов sampSendChat изнутри обработчика исходящих RPC/пакетов нужно обернуть в скриптовый поток с нулевой задержкой:
Lua:
function onSendRpc(id)
  -- крашит:
  -- sampSendChat('Send RPC: ' .. id)

  -- норм:
  lua_thread.create(function()
    wait(0)
    sampSendChat('Send RPC: ' .. id)
  end)
end
 
Последнее редактирование:

imring

Ride the Lightning
Всефорумный модератор
2,362
2,545
Код:
function main()
    while true do
        wait(0)
        local veh = sampGetVehicleIdByCarHandle(cHandle)
        if veh = 481 and isCharOnCar(playerPed, cHandle) and isKeyDown(0xA1) then    -- BMX RShift
                setVirtualKeyDown(0x57, true) -- w on
                wait(20) -- wait 20 ms
                setVirtualKeyDown(0x57, false) -- w off
        end
    end
end
Как сделать, чтобы все работало, а то 5: 'then' expected near '='
Lua:
if veh == 481
 

3loe_ny3uko

Новичок
10
0
Скинь свой полный скрипт, а не только эту функцию.

Код:
function main()
    while true do
        wait(0)
        local veh = sampGetVehicleIdByCarHandle(cHandle)
        if veh = 481 and isCharOnCar(playerPed, cHandle) and isKeyDown(0xA1) then    -- BMX RShift
                setVirtualKeyDown(0x57, true) -- w on
                wait(20) -- wait 20 ms
                setVirtualKeyDown(0x57, false) -- w off
        end
    end
end
Как сделать, чтобы все работало, а то 5: 'then' expected near '='
Некоторые команды в скрипте еще не сделаны, например /ustav.
Lua:
script_name("NAVY")
script_description("/navy")
script_version("0.1")
script_author("Soap_Mctavish")
script_dependencies("SAMPFUNCS, SAMP")
require("lib.moonloader")
require("lib.sampfuncs")

vstart = 1


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

if vstart == 1 then
    sampAddChatMessage("{ffffff}*[{228B22}NAVY{ffffff}]: Помощь /navy", 0xC1C1C1)
  end

  sampRegisterChatCommand("navy", navy)
  sampRegisterChatCommand("nvmed", nvmed)
  sampRegisterChatCommand("nvcom", nvcom)
  sampRegisterChatCommand("nvrp", nvrp)
  sampRegisterChatCommand("askdoc", askdoc)
  sampRegisterChatCommand("askdoc1", askdoc1)
  sampRegisterChatCommand("askdoc2", askdoc2)
  sampRegisterChatCommand("searep", searep)
  sampRegisterChatCommand("searep1", searep1)
  sampRegisterChatCommand("searep2", searep2)
  sampRegisterChatCommand("searep3", searep3)
  sampRegisterChatCommand("stopboat", stopboat)
  sampRegisterChatCommand("vfrisk", vfrisk)
  sampRegisterChatCommand("nvfrisk", nvfrisk)
    wait(-1)

while true do
wait(0)

end
end

function navy()
local navy = [[
{ffffff}__________________________________________________________________________________________________________

{228B22}[ NAVY ]{ffffff}   Скрипт, создан для солдат национальной гвардии в рядах ВМФ.
{228B22}[ Авторы  ]{ffffff}   Soap_Mctavish и Francisko_Murphy.
{ffffff}__________________________________________________________________________________________________________

{228B22}[ /loadnavy ] {ffffff}- Обновление скрипта до последней версии.
{ffffff}__________________________________________________________________________________________________________

{ff0000}[ Команды: ]

{228B22}[ /ustav ] {ffffff}- Устав ВМФ.
{228B22}[ /nvcom ] {ffffff}- Команды солдата ВМФ.
{228B22}[ /nvrp ] {ffffff}- Role Play отыгровки.

{ffffff}__________________________________________________________________________________________________________
]]
sampShowDialog(1010, "{ffffff} Военно-морской флот ", navy, "{ffffff}Закрыть", "", 0)
end

function nvcom()
local nvcom = [[
{ffffff}__________________________________________________________________________________________________________

{228B22}[ NAVY ]{ffffff}   Основные команды служащего ВМФ NGSA.
{ffffff}__________________________________________________________________________________________________________
{ff0000}[ Команды: ]

{228B22}[ /searep ] {ffffff}- Доклад морского патруля.

{ffffff}__________________________________________________________________________________________________________
]]
sampShowDialog(1010, "{ffffff} Команды ВМФ ", nvcom, "{ffffff}Закрыть", "", 0)
end

function nvrp()
local nvrp = [[
{ffffff}__________________________________________________________________________________________________________

{228B22}[ NAVY ]{ffffff}   Role-Play отыгровки сотрудника ВМФ.
{ffffff}__________________________________________________________________________________________________________
{ff0000}[ Команды: ]

{228B22}[ /askdoc ] {ffffff}- Попросить документы.
{228B22}[ /nvfrisk ] {ffffff}- Обыск (ДЛЯ ТЕХ, У КОГО ЕСТЬ POLICE HELPER)
{228B22}[ /vfrisk ] {ffffff}- Обыск (ДЛЯ ТЕХ, У КОГО НЕТ POLICE HELPER)

{ffffff}__________________________________________________________________________________________________________
]]
sampShowDialog(1010, "{ffffff} Role-Play отыгровки ", nvrp, "{ffffff}Закрыть", "", 0)
end

  function askdoc()
    sampAddChatMessage("{ffffff}*[ Мысли ]: Запрос документов [{228B22} /askdoc1 {ffffff}]. Если всё удачно [{228B22} /askdoc2 {ffffff}]", 0xC1C1C1)
  end

  function askdoc1(param)
        local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
if result then
namelol = sampGetPlayerNickname(playerID)
local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
    askdoc1 = string.match(param, '(%d+)')
            lua_thread.create(function()
                sampSendChat("/z Здравия желаю! Вас беспокоит боец Национальной Гвардии "..namelol.."")
                wait(2500)
                sampSendChat("/z Я состою в рядах Военно Морского Флота, сейчас я проведу обычную проверку документов")
                wait(2500)
                sampSendChat("/z В случаи отказа предоставления документов - я примею силу")
            end)
        end
    end

    function askdoc2()
      sampSendChat("/z Спасибо за предоставление документов, но это еще не всё")
            sampAddChatMessage("{ffffff}*[ Мысли ]: Мне нужно провести обыск [{228B22} /nvfrisk ((PHelper)), /vfrisk {ffffff}].")
    end

    function searep()
      sampAddChatMessage("{ffffff}*[ Мысли ]: Доклад патруля. Код 1 [{228B22} /searep1 {ffffff}]. Код 2 [{FFFF00} /searep2 {ffffff}]. Код 3 [{FF0000} /searep3 {ffffff}]", 0xC1C1C1)
    end

    function searep1(param)
          local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
  if result then
  namelol = sampGetPlayerNickname(playerID)
  local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
      searep1 = string.match(param, '(%d+)')
              lua_thread.create(function()
                  sampSendChat("/r [В.М.Ф.] Докладывает "..familyl.." | Водный патруль | Код-1")
              end)
          end
      end

      function searep2(param)
            local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
    if result then
    namelol = sampGetPlayerNickname(playerID)
    local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
        searep2 = string.match(param, '(%d+)')
                lua_thread.create(function()
                    sampSendChat("/r [В.М.Ф.] Докладывает "..familyl.." | Водный патруль | Код-2")
                end)
            end
        end

        function searep3(param)
              local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
      if result then
      namelol = sampGetPlayerNickname(playerID)
      local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
          searep3 = string.match(param, '(%d+)')
                  lua_thread.create(function()
                      sampSendChat("/r [В.М.Ф.] Докладывает "..familyl.." | Водный патруль | Код-3")
                  end)
              end
          end

                    function nvfrisk()
                        local id = sampGetPlayerIdByCharHandle(ped)
                        lua_thead.create(function()
                            sampSendChat("/do На плече человека находилась сумка")
                                wait(2500)
                            sampSendChat("/todo - Хорошо, теперь поднимите ваши руки, * доставая перчатки из сумки.")
                                wait(2500)
                            sampSendChat("/me одевает перчатки на руки и вытаскивает ордер из сумки, после чего...")
                            sampSendChat("/do ...предъявляет ордер и убирает, готовится обыскать человека")
                            wait(2500)
                            sampSendChat("/me медленно провел руками по всему телу человека и снял перчатки")
                            sampSendChat("/deafrisk "..id.."")
                        end)
                    end
 

checkdasound

Известный
Проверенный
963
410
Lua:
function main()
    while true do
        wait(0)
        local veh = sampGetVehicleIdByCarHandle(cHandle)
        if isCharOnAnyBike(playerPed) and isKeyDown(0xA1) then    -- BMX RShift
                setVirtualKeyDown(0x57, true) -- w on
                wait(20) -- wait 20 ms
                setVirtualKeyDown(0x57, false) -- w off
        end
    end
end
Вот так все работает, а если вместо isCharOnAnyBike(playerPed), поставить veh == 481, то не работает, а мне нужно, чтобы так было только на BMX'е, а не на всех байках.
UPD: isCharInModel(playerPed, 481) помогло

Некоторые команды в скрипте еще не сделаны, например /ustav.
Lua:
script_name("NAVY")
script_description("/navy")
script_version("0.1")
script_author("Soap_Mctavish")
script_dependencies("SAMPFUNCS, SAMP")
require("lib.moonloader")
require("lib.sampfuncs")

vstart = 1


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

if vstart == 1 then
    sampAddChatMessage("{ffffff}*[{228B22}NAVY{ffffff}]: Помощь /navy", 0xC1C1C1)
  end

  sampRegisterChatCommand("navy", navy)
  sampRegisterChatCommand("nvmed", nvmed)
  sampRegisterChatCommand("nvcom", nvcom)
  sampRegisterChatCommand("nvrp", nvrp)
  sampRegisterChatCommand("askdoc", askdoc)
  sampRegisterChatCommand("askdoc1", askdoc1)
  sampRegisterChatCommand("askdoc2", askdoc2)
  sampRegisterChatCommand("searep", searep)
  sampRegisterChatCommand("searep1", searep1)
  sampRegisterChatCommand("searep2", searep2)
  sampRegisterChatCommand("searep3", searep3)
  sampRegisterChatCommand("stopboat", stopboat)
  sampRegisterChatCommand("vfrisk", vfrisk)
  sampRegisterChatCommand("nvfrisk", nvfrisk)
    wait(-1)

while true do
wait(0)

end
end

function navy()
local navy = [[
{ffffff}__________________________________________________________________________________________________________

{228B22}[ NAVY ]{ffffff}   Скрипт, создан для солдат национальной гвардии в рядах ВМФ.
{228B22}[ Авторы  ]{ffffff}   Soap_Mctavish и Francisko_Murphy.
{ffffff}__________________________________________________________________________________________________________

{228B22}[ /loadnavy ] {ffffff}- Обновление скрипта до последней версии.
{ffffff}__________________________________________________________________________________________________________

{ff0000}[ Команды: ]

{228B22}[ /ustav ] {ffffff}- Устав ВМФ.
{228B22}[ /nvcom ] {ffffff}- Команды солдата ВМФ.
{228B22}[ /nvrp ] {ffffff}- Role Play отыгровки.

{ffffff}__________________________________________________________________________________________________________
]]
sampShowDialog(1010, "{ffffff} Военно-морской флот ", navy, "{ffffff}Закрыть", "", 0)
end

function nvcom()
local nvcom = [[
{ffffff}__________________________________________________________________________________________________________

{228B22}[ NAVY ]{ffffff}   Основные команды служащего ВМФ NGSA.
{ffffff}__________________________________________________________________________________________________________
{ff0000}[ Команды: ]

{228B22}[ /searep ] {ffffff}- Доклад морского патруля.

{ffffff}__________________________________________________________________________________________________________
]]
sampShowDialog(1010, "{ffffff} Команды ВМФ ", nvcom, "{ffffff}Закрыть", "", 0)
end

function nvrp()
local nvrp = [[
{ffffff}__________________________________________________________________________________________________________

{228B22}[ NAVY ]{ffffff}   Role-Play отыгровки сотрудника ВМФ.
{ffffff}__________________________________________________________________________________________________________
{ff0000}[ Команды: ]

{228B22}[ /askdoc ] {ffffff}- Попросить документы.
{228B22}[ /nvfrisk ] {ffffff}- Обыск (ДЛЯ ТЕХ, У КОГО ЕСТЬ POLICE HELPER)
{228B22}[ /vfrisk ] {ffffff}- Обыск (ДЛЯ ТЕХ, У КОГО НЕТ POLICE HELPER)

{ffffff}__________________________________________________________________________________________________________
]]
sampShowDialog(1010, "{ffffff} Role-Play отыгровки ", nvrp, "{ffffff}Закрыть", "", 0)
end

  function askdoc()
    sampAddChatMessage("{ffffff}*[ Мысли ]: Запрос документов [{228B22} /askdoc1 {ffffff}]. Если всё удачно [{228B22} /askdoc2 {ffffff}]", 0xC1C1C1)
  end

  function askdoc1(param)
        local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
if result then
namelol = sampGetPlayerNickname(playerID)
local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
    askdoc1 = string.match(param, '(%d+)')
            lua_thread.create(function()
                sampSendChat("/z Здравия желаю! Вас беспокоит боец Национальной Гвардии "..namelol.."")
                wait(2500)
                sampSendChat("/z Я состою в рядах Военно Морского Флота, сейчас я проведу обычную проверку документов")
                wait(2500)
                sampSendChat("/z В случаи отказа предоставления документов - я примею силу")
            end)
        end
    end

    function askdoc2()
      sampSendChat("/z Спасибо за предоставление документов, но это еще не всё")
            sampAddChatMessage("{ffffff}*[ Мысли ]: Мне нужно провести обыск [{228B22} /nvfrisk ((PHelper)), /vfrisk {ffffff}].")
    end

    function searep()
      sampAddChatMessage("{ffffff}*[ Мысли ]: Доклад патруля. Код 1 [{228B22} /searep1 {ffffff}]. Код 2 [{FFFF00} /searep2 {ffffff}]. Код 3 [{FF0000} /searep3 {ffffff}]", 0xC1C1C1)
    end

    function searep1(param)
          local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
  if result then
  namelol = sampGetPlayerNickname(playerID)
  local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
      searep1 = string.match(param, '(%d+)')
              lua_thread.create(function()
                  sampSendChat("/r [В.М.Ф.] Докладывает "..familyl.." | Водный патруль | Код-1")
              end)
          end
      end

      function searep2(param)
            local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
    if result then
    namelol = sampGetPlayerNickname(playerID)
    local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
        searep2 = string.match(param, '(%d+)')
                lua_thread.create(function()
                    sampSendChat("/r [В.М.Ф.] Докладывает "..familyl.." | Водный патруль | Код-2")
                end)
            end
        end

        function searep3(param)
              local result, playerID = sampGetPlayerIdByCharHandle(playerPed)
      if result then
      namelol = sampGetPlayerNickname(playerID)
      local namel, familyl = string.match(namelol, '(%a+)_(%a+)')
          searep3 = string.match(param, '(%d+)')
                  lua_thread.create(function()
                      sampSendChat("/r [В.М.Ф.] Докладывает "..familyl.." | Водный патруль | Код-3")
                  end)
              end
          end

                    function nvfrisk()
                        local id = sampGetPlayerIdByCharHandle(ped)
                        lua_thead.create(function()
                            sampSendChat("/do На плече человека находилась сумка")
                                wait(2500)
                            sampSendChat("/todo - Хорошо, теперь поднимите ваши руки, * доставая перчатки из сумки.")
                                wait(2500)
                            sampSendChat("/me одевает перчатки на руки и вытаскивает ордер из сумки, после чего...")
                            sampSendChat("/do ...предъявляет ордер и убирает, готовится обыскать человека")
                            wait(2500)
                            sampSendChat("/me медленно провел руками по всему телу человека и снял перчатки")
                            sampSendChat("/deafrisk "..id.."")
                        end)
                    end
в 164 строке у тебя написано lua_thead, а нужно lua_thread. А из-за чего ошибка в консоли, я хз.
 
Последнее редактирование:

штейн

Известный
Проверенный
1,003
688
Lua:
                if  imgui.Button(u8'Изменить секретный код', btn_size) then
                    if imgui.InputText(test_text_buffer) then
                        data.options.secret = test_text_buffer.v
                        imgui.Text(u8'Вы изменили секретный код на '..secret)
                    end
                end
конечно я тупой, но почему гта крашит когда нажимаю на Изменить секретный код
 

AnWu

https://t.me/anwublog
Всефорумный модератор
4,761
5,368
Lua:
function main()
    while true do
        wait(0)
        local veh = sampGetVehicleIdByCarHandle(cHandle)
        if isCharOnAnyBike(playerPed) and isKeyDown(0xA1) then    -- BMX RShift
                setVirtualKeyDown(0x57, true) -- w on
                wait(20) -- wait 20 ms
                setVirtualKeyDown(0x57, false) -- w off
        end
    end
end
Вот так все работает, а если вместо isCharOnAnyBike(playerPed), поставить veh == 481, то не работает, а мне нужно, чтобы так было только на BMX'е, а не на всех байках.


в 164 строке у тебя написано lua_thead, а нужно lua_thread.
sampGetVehicleIdByCarHandle - возвращает 2 значения, результат и сам ид.
хочешь на байке?
Lua:
        if isCharOnAnyBike(playerPed) and isKeyDown(0xA1) then    -- BMX RShift
                local veh = storeCarCharIsInNoSave(PLAYER_PED)
                local model = getCarModel(veh)
                if model == --[[ID BMX]] then
                      setVirtualKeyDown(0x57, true) -- w on
                      wait(20) -- wait 20 ms
                      setVirtualKeyDown(0x57, false) -- w off
                end
        end
 

checkdasound

Известный
Проверенный
963
410
sampGetVehicleIdByCarHandle - возвращает 2 значения, результат и сам ид.
хочешь на байке?
Lua:
        if isCharOnAnyBike(playerPed) and isKeyDown(0xA1) then    -- BMX RShift
                local veh = storeCarCharIsInNoSave(PLAYER_PED)
                local model = getCarModel(veh)
                if model == --[[ID BMX]] then
                      setVirtualKeyDown(0x57, true) -- w on
                      wait(20) -- wait 20 ms
                      setVirtualKeyDown(0x57, false) -- w off
                end
        end
Lua:
function main()
    while true do
        wait(0)
        if isCharInModel(playerPed, 481) and isKeyDown(0xA1) then    -- BMX RShift
                setVirtualKeyDown(0x57, true) -- w on
                wait(20) -- wait 20 ms
                setVirtualKeyDown(0x57, false) -- w off
        end
    end
end
Я по-другому уже сделал.
Использовал isCharInModel(playerPed, 481) и заработало.
 
  • Нравится
Реакции: AnWu

imring

Ride the Lightning
Всефорумный модератор
2,362
2,545
Lua:
                if  imgui.Button(u8'Изменить секретный код', btn_size) then
                    if imgui.InputText(test_text_buffer) then
                        data.options.secret = test_text_buffer.v
                        imgui.Text(u8'Вы изменили секретный код на '..secret)
                    end
                end
конечно я тупой, но почему гта крашит когда нажимаю на Изменить секретный код
Lua:
imgui.InputText('##secret', test_text_buffer)
 
  • Нравится
Реакции: штейн и AnWu

штейн

Известный
Проверенный
1,003
688
Lua:
                    if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                        data.options.server = '176.32.37.63'
                        imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                    end
текст появляется меньше чем на секунду и исчезает, что сделать надо чтобы он подольше висел
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,650
2,535
Lua:
                    if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                        data.options.server = '176.32.37.63'
                        imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                    end
текст появляется меньше чем на секунду и исчезает, что сделать надо чтобы он подольше висел
Lua:
                    if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                        data.options.server = '176.32.37.63'
                        lua_thread.create(function() bool = true  wait(3000) bool = false end)
                        lua_thread.create(function()
                               while bool == true do wait(0)
                                   imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                               end
                        end)
                    end
 

штейн

Известный
Проверенный
1,003
688
Lua:
                    if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                        data.options.server = '176.32.37.63'
                        lua_thread.create(function() bool = true  wait(3000) bool = false end)
                        lua_thread.create(function()
                               while bool == true do wait(0)
                                   imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                               end
                        end)
                    end

C++:
[ML] (error) GAuth: cannot resume non-suspended coroutine
[ML] (error) GAuth: Script died due to error. (07F7277C)

Lua:
                    if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                        data.options.server = '176.32.37.63'
                        inicfg.save(data, '\\GAuth\\'..wdata)
                        lua_thread.create(function() imguishit = true wait(3000) imguishit = false end)
                        lua_thread.create(function()
                            while imguishit do wait(0)
                                imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                            end
                        end)
                    end
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,650
2,535
C++:
[ML] (error) GAuth: cannot resume non-suspended coroutine
[ML] (error) GAuth: Script died due to error. (07F7277C)

Lua:
                    if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                        data.options.server = '176.32.37.63'
                        inicfg.save(data, '\\GAuth\\'..wdata)
                        lua_thread.create(function() imguishit = true wait(3000) imguishit = false end)
                        lua_thread.create(function()
                            while imguishit do wait(0)
                                imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                            end
                        end)
                    end
Дебаг, но это скорее всего из-за inicfg, попробуй опять прогрузить конфиг-файл в цикле.
 

imring

Ride the Lightning
Всефорумный модератор
2,362
2,545
Lua:
                    if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                        data.options.server = '176.32.37.63'
                        lua_thread.create(function() bool = true  wait(3000) bool = false end)
                        lua_thread.create(function()
                               while bool == true do wait(0)
                                   imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                               end
                        end)
                    end
зачем создавать 2 потока, если можно создать один поток с таймером?
Lua:
if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
    data.options.server = '176.32.37.63'
    lua_thread.create(function()
        local clock = os.clock()
        while os.clock() - clock < 3 do wait(0)
            imgui.Text(u8'Вы изменили сервер на '..data.options.server)
        end
    end)
end
 

штейн

Известный
Проверенный
1,003
688
зачем создавать 2 потока, если можно создать один поток с таймером?
Lua:
if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
    data.options.server = '176.32.37.63'
    lua_thread.create(function()
        local clock = os.clock()
        while os.clock() - clock < 3 do wait(0)
            imgui.Text(u8'Вы изменили сервер на '..data.options.server)
        end
    end)
end
точно такая же ошибка

[ML] (error) GAuth: cannot resume non-suspended coroutine
[ML] (error) GAuth: Script died due to error. (07F7277C)
 

Fomikus

Известный
Проверенный
475
345
зачем создавать 2 потока, если можно создать один поток с таймером?
Lua:
if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
    data.options.server = '176.32.37.63'
    lua_thread.create(function()
        local clock = os.clock()
        while os.clock() - clock < 3 do wait(0)
            imgui.Text(u8'Вы изменили сервер на '..data.options.server)
        end
    end)
end
Как потоки юзать чтобы Wait(500) работал, можно пример?
Lua:
lua_thread.create(function()
BeginToPoint(1321.1305, 1252.6588, 10.8203, 1.000000, -255, false)