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

DeMoN3D

Известный
368
77
есть функция
Lua:
    function getInf()
            local _, id = sampGetPlayerIdByCharHandle(PLAYER_PED) -- ID игрока
            local posX, posY, posZ = getCharCoordinates(PLAYER_PED) -- координаты персонажа
            local screenX, screenY = getScreenResolution() -- расширение экрана пользователя
            local skin = getCharModel(PLAYER_PED) -- ID скина игрока
            local int = getCharActiveInterior(PLAYER_PED) -- Активный интерьер
            return id, posX, posY, posZ, screenX, screenY, skin, int -- Возвращаем информацию
    end
Можно ли обратится к ней вот так?
Lua:
value = getInf().posY
Если нет, то есть что-то подобное?
_, _, _, значение = getInf() не покатит
Lua:
 return {id, posX, posY, posZ, screenX, screenY, skin, int} -- Возвращаем информацию
 

heg0vop

Новичок
10
0
скажите, как декомпилировать скрипты? luajit не работает, luadec тоже, слышал про декомпилятор на Python, но хз как им пользоваться, можете помочь?)
 

Di3

Участник
432
20
скажите, как декомпилировать скрипты? luajit не работает, luadec тоже, слышал про декомпилятор на Python, но хз как им пользоваться, можете помочь?)
Питон,он баганый , скрипт больше 30 кб уже не декомпилируется толком.

Lua:
 if imgui.IsWindowAppearing() then imgui.SetKeyboardFocusHere() end -- Делает ввод в input активным
if imgui.InputText("##reporter", inputreport,imgui.InputTextFlags.EnterReturnsTrue) then
  if inputreport.v ~= '' and inputreport.v ~= nil then
sampSendDialogResponse(idrepdialog, 1, _, u8:decode(inputreport.v))
    imgui.SetKeyboardFocusHere(-1)
reportwindow.v = false
  else
  sampAddChatMessage('[Ошибка] Введите ответ. Либо закройте репорт.', 0xDF3535)
  end
        end
Все работает вроде прекрасно,но иногда , не известно от чего, когда открываешь данное окно, то в строку ввода нельзя ничего ввести,курсор ввода сам оффается,нажимаешь , он все равно отключается и так по кд пока не релог скрипт. Как это исправить и из-за чего?
 

Anton Nixon

Известный
474
48
Подскажите, почему при сохранении в ini определенные значения записываются в разнобой
Код:
[info]
contr5=5
con4=4
pri1=1
delay=
priz2=2
contract6=6
priziv3=3
Lua:
local gInfo = inicfg.load({
     info = {
         pri1 = "",
         priz2 = "",
         priziv3 = "",
         con4 = "",
         contr5 = "",
        contract6 = "",
        delay = ''
        }
}, directIni)
 

Yuan

Участник
77
26
Подскажите, почему при сохранении в ini определенные значения записываются в разнобой
Код:
[info]
contr5=5
con4=4
pri1=1
delay=
priz2=2
contract6=6
priziv3=3
Lua:
local gInfo = inicfg.load({
     info = {
         pri1 = "",
         priz2 = "",
         priziv3 = "",
         con4 = "",
         contr5 = "",
        contract6 = "",
        delay = ''
        }
}, directIni)
Если важен порядок, можешь свою функцию/модуль написать для сборки и сохранения/чтения ини файла.
 

Frapsy

Известный
Проверенный
393
227
да хоть и баганный, мне все равно интересно как, тем более большинство luac файлов меньше 30кб весят
Скачай питон, пофикси проблему, которая всплывет после установки и заработает. Руки в руки и вперед.
Подскажите, почему при сохранении в ini определенные значения записываются в разнобой
А какая собственно разница, по порядку идет сохранение или нет? Задача - сохранить и считать данные ._. Тот паренек тебе предложил написать функцию, которая будет записывать данные в файл, брать их оттуда и потом "сортировать"(если это можно так назвать) по переменным. Это лишняя морока.
Как это исправить и из-за чего?
Ставлю на то, что причина лежит где-то в фокусах либо же на флаге про enter. Никогда их не использовал, по этому, проблемы с ними не испытывал, если все работает - экспериментируй.
 
  • Нравится
Реакции: Anton Nixon

Di3

Участник
432
20
Скачай питон, пофикси проблему, которая всплывет после установки и заработает. Руки в руки и вперед.

А какая собственно разница, по порядку идет сохранение или нет? Задача - сохранить и считать данные ._. Тот паренек тебе предложил написать функцию, которая будет записывать данные в файл, брать их оттуда и потом "сортировать"(если это можно так назвать) по переменным. Это лишняя морока.

Ставлю на то, что причина лежит где-то в фокусах либо же на флаге про enter. Никогда их не использовал, по этому, проблемы с ними не испытывал, если все работает - экспериментируй.
Тестить сложно, хер знает от чего, можно тестить час и ничего не будет.
На счет энтра врядли, сделал его не давно, а баг этот был.
 

heg0vop

Новичок
10
0
скажите, как декомпил
Скачай питон, пофикси проблему, которая всплывет после установки и заработает. Руки в руки и вперед.
проблема пофикшена, он спокойно работает, вы скажите, как начать скрипты декомпилировать
 

sobe1t

Известный
77
1
Есть координаты головы игрока в которого я целюсь
Код:
getCharPlayerIsTargeting(PLAYER_HANDLE)
Как получить значения углов для функции
Код:
setCameraPositionUnfixed(float xAngle, float zAngle)
чтобы камера смотрела строго на голову?
 

Bananious

Известный
238
17
Можно ли вывести всю информацию из локального диалога /phonebook в imgui.Text?
 

Frapsy

Известный
Проверенный
393
227
проблема пофикшена, он спокойно работает, вы скажите, как начать скрипты декомпилировать
Открыть глаза и перечитать сообщение фипа тогда.
Можно ли вывести всю информацию из локального диалога /phonebook в imgui.Text?
Можно
 
  • Нравится
Реакции: atizoff