Вопросы по 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
 
Последнее редактирование:

[SA ARZ]

Известный
392
8
Помогите с финда вытащить все ники (даже после Стр. 2 и т.д)

46645



КОД:
if arrayFunc.NewdialogFind.v and dialogId == 63 then
        ftext = {}
        logTextFind = {}
        colWork = 0
        for w in text:gmatch("[^\r\n]+") do
            colWork = colWork + 1
            table.insert(ftext, w)
        end
        for i, h in pairs(ftext) do
            if i >= 2 then
                num, nick, nrang, zrang, number, afk = h:match("(%d+.)%s(%w+_%w+%[%d+%])\t(%d+)%sранг.%s(.*)\t(%d+)\t(.*)")
                logTextFind[#logTextFind+1] = nick.."|"..zrang.."|"..nrang.."|"..number.."|"..afk
            end
        end
        newFind.v = true
        return false
    end
 

user31883

Потрачен
98
223
Как сделать, чтобы когда на экране есть текстдрав или модель(обьект) и он не исчезает через 10 секунд, то выполняется функция?
 

trefa

3d print
Всефорумный модератор
2,112
1,279
Как сделать, чтобы когда на экране есть текстдрав или модель(обьект) и он не исчезает через 10 секунд, то выполняется функция?
Хукать RPC, при этом запустить таймер, если ещё раз не придёт пакет при работающем таймере. то твой код
 

Receiver

leet-cheats 👑
Проверенный
624
893
можно как нибудь получить текст кнопочек диалога
46650
 

trefa

3d print
Всефорумный модератор
2,112
1,279

trefa

3d print
Всефорумный модератор
2,112
1,279
Через память
Функция будет sampGetDialogButtons
 

Receiver

leet-cheats 👑
Проверенный
624
893
Через память
Функция будет sampGetDialogButtons
takou функции нет лол
 

trefa

3d print
Всефорумный модератор
2,112
1,279
Помогите с финда вытащить все ники (даже после Стр. 2 и т.д)

Посмотреть вложение 46645


КОД:
if arrayFunc.NewdialogFind.v and dialogId == 63 then
        ftext = {}
        logTextFind = {}
        colWork = 0
        for w in text:gmatch("[^\r\n]+") do
            colWork = colWork + 1
            table.insert(ftext, w)
        end
        for i, h in pairs(ftext) do
            if i >= 2 then
                num, nick, nrang, zrang, number, afk = h:match("(%d+.)%s(%w+_%w+%[%d+%])\t(%d+)%sранг.%s(.*)\t(%d+)\t(.*)")
                logTextFind[#logTextFind+1] = nick.."|"..zrang.."|"..nrang.."|"..number.."|"..afk
            end
        end
        newFind.v = true
        return false
    end
Дай текст диалога
Твоя реализация не оч
 

[SA ARZ]

Известный
392
8
Я тебе чё его буду переписывать, дай текстом, а не картинкой. Картинку я видел ес чё



Код:
стр. 1 - Имя    Ранг и должность    Телефон    Дополнительно{FFFFFF}
1. Lars_Trench[25]    8 ранг. [LS]: Депутат    535555  
2. Delfino_Costello[248]    7 ранг. [LS]: Лицензёр    111117    На паузе 8:39
3. Lion_Trench[331]    7 ранг. [LS]: Лицензёр    954565  
4. Jason_Marti[60]    6 ранг. [LS]: Инструктор    554466    В тюрьме 39:59
5. Cesare_Costello[247]    6 ранг. [LS]: Инструктор    8505  
6. Giorgio_Laurent[270]    5 ранг. [LS]: Адвокат    1170    На паузе 1:09
7. Novogodniy_Grinch[417]    5 ранг. [LS]: Адвокат    9228  
8. Kiyoshi_Matsumoto[241]    5 ранг. [LS]: Адвокат    5151  
9. Barryk_Affect[85]    5 ранг. [LS]: Адвокат    3006    На паузе 42:12
10. Alfeo_DeSanto[125]    5 ранг. [LS]: Адвокат    798777  
11. Tessa_Holand[174]    4 ранг. [LS]: Советник Мэра    321112  
12. Danya_Moore[2]    4 ранг. [LS]: Советник Мэра    2204  
13. Aleksandr_Komarov[155]    3 ранг. [LS]: Секретарь    1460  
14. Wolfgang_Dwayne[45]    3 ранг. [LS]: Секретарь    116611  
15. Federico_Castille[139]    2 ранг. [LS]: Старший Агент СБ    555542  
16. Yaroslav_Knyazev[147]    2 ранг. [LS]: Старший Агент СБ    8818  
17. Facundo_Nope[211]    2 ранг. [LS]: Старший Агент СБ    1716  
18. Brendon_Nouer[117]    2 ранг. [LS]: Старший Агент СБ    673112  
19. Islam_Dzagoev[206]    2 ранг. [LS]: Старший Агент СБ    1951928  
20. Makar_Sokolov[96]    2 ранг. [LS]: Старший Агент СБ    100096    Затычка 4:28
стр. 2 - Имя    Ранг и должность    Телефон    Дополнительно{FFFFFF}
21. Chika_Kudasai[228]    1 ранг. [LS]: Агент СБ    1009    В тюрьме 52:48
22. Mercy_DeRossa[195]    1 ранг. [LS]: Агент СБ    949392  
23. Vadim_Mohnarilov[348]    1 ранг. [LS]: Агент СБ    1890544  
24. Alessandro_Campo[285]    1 ранг. [LS]: Агент СБ    660640  
25. Tema_Classico[239]    1 ранг. [LS]: Агент СБ    1951211  
26. Jason_Williams[161]    1 ранг. [LS]: Агент СБ    735735
 

Dan4s

Новичок
22
2
После нажатия кнопки сохранить, не вводится текст как фиксануть?

Lua:
imgui.InputText(u8"семян", semena)
         if imgui.Button(u8'Сохранить', imgui.ImVec2(btn_size)) then
         mainIni.config.semena = semena.v
    inicfg.save(mainIni, directIni)
        
   end