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

ShuffleBoy

Известный
Друг
754
429
Есть у кого пример вывода текста с чата в имгуи?
Lua:
for i=99, 1, -1 do
    local text = sampGetChatString(i)
    imgui.Text(u8(text))
end

helo amerika
я недавно (вчера) начал учить луа ну сам язык понятен выучил не учил
хочу задать пару вопросов
1) где взять список всех функций сампа или как оно там ну типа sampSendChat и т.д. в wiki чет хуй знает ну короче блять.
2) где посмотреть список функций imgui желательно (ох ну пиздец как желательно) на русском ну типа че за че отвечает
3) да
4) где посмотреть да и че вообще такое хуки ну типа как я понимаю вот открылся у юзера диалог и это приходит в луа а потом в луа как то где то надо подшаманить и типа samp.OnDialogOpen(id, title, text, button1, button2, style или да) или это не хуки. ну что такое тогда хуки.
5) да.
вот запятые на всякий случай ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
1. Blast wiki >> moonloader >> список функций
2. Все на английском, доступны в офф репозитории
3. Пизда
4. Самп луа
5. Пизда

Ага, понял, спасибо большое
На счет imgui, что такое 0.1f, и вообще чего это за float значения везде, включая цвета? а где-нибудь можно посмотреть вообще документацию imgui на русском?
1 - инт, 6.957 - флоат, ее нет
 
Последнее редактирование модератором:

Toopie

Новичок
29
2
1 - инт, 6.957 - флоат, ее нет
да блин спс я знаю че такое флоат смысле float но блять не ебу нахуй нахуй какого хуя они нахуй в цветах то забыли ну типа colors[clr.Butotn] = imgui.Vec2(2.0, 4.0, 4.0) ну ты понял да а нахуя как же RGB???????????????????????????????
 

Frapsy

Известный
Проверенный
393
227
да блин спс я знаю че такое флоат смысле float но блять не ебу нахуй нахуй какого хуя они нахуй в цветах то забыли ну типа colors[clr.Butotn] = imgui.Vec2(2.0, 4.0, 4.0) ну ты понял да а нахуя как же RGB???????????????????????????????
Ну дык вариаций цветов и оттенков может быть бесконечно много, что наш глаз не все и заметит, по этому дробные числа, это сугубо моя логика, и если не ошибаюсь, то каждое из чисел это R, G, и B :D

Lua:
if imgui.Button("Delete.") then
            imgui.OpenPopup("Delete?")
            if imgui.BeginPopupModal("Delete?", 1, imgui.WindowFlags.AlwaysAutoResize) then
                imgui.Text("any text\n\nokay?")
                imgui.Separator()

                local dont_ask_me_next_time = false
                imgui.PushStyleVar(imgui.StyleVar.FramePadding, imgui.imVec2(0, 0))
                imgui.Checkbox("Don't ask me next time", dont_ask_me_next_time)
                imgui.PopStyleVar()

                if imgui.Button("OK") then
                     imgui.CloseCurrentPopup()
                end
                imgui.SameLine()
                if imgui.Button("Cancel") then
                    imgui.CloseCurrentPopup()
                end
                imgui.EndPopup()
            end
        end
Из примера с С++ под луа подогнал, но чет не хочет работать из-за строки
imgui.PushStyleVar(imgui.StyleVar.FramePadding, imgui.imVec2(0, 0))
Что не так?
 
Последнее редактирование модератором:

LUCHARE

Известный
Друг
545
695
Lua:
if imgui.Button("Delete.") then
            imgui.OpenPopup("Delete?")
            if imgui.BeginPopupModal("Delete?", 1, imgui.WindowFlags.AlwaysAutoResize) then
                imgui.Text("any text\n\nokay?")
                imgui.Separator()

                local dont_ask_me_next_time = false
                imgui.PushStyleVar(imgui.StyleVar.FramePadding, imgui.imVec2(0, 0))
                imgui.Checkbox("Don't ask me next time", dont_ask_me_next_time)
                imgui.PopStyleVar()

                if imgui.Button("OK") then
                     imgui.CloseCurrentPopup()
                end
                imgui.SameLine()
                if imgui.Button("Cancel") then
                    imgui.CloseCurrentPopup()
                end
                imgui.EndPopup()
            end
        end
Из примера с С++ под луа подогнал, но чет не хочет работать из-за строки
imgui.PushStyleVar(imgui.StyleVar.FramePadding, imgui.imVec2(0, 0))
Что не так?
imgui.PushStyleVar(imgui.StyleVar.FramePadding, imgui.ImVec2(0, 0))
 

Aralone

Участник
30
5
Подскажите, можно ли сменить виртуальный мир? Для интерьера нашел функцию, для вирт мира нет :(
 

Landate

Потрачен
112
28
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Дайте норм сайт на русском для изучения луа
 

ШPEK

Известный
1,476
525
Бред не неси, координаты помогут ТПнуть в место, а виртуальный мир это совсем иное ._. Виртуалку только сервер сменить может.
Разве вирт.мир это не как инта в воздухе?

Дайте норм сайт на русском для изучения луа
Что тебя на бласт хаке не устраивает?
 
Последнее редактирование модератором:

atiZZZ

Новичок
249
47
Как сделать так, что бы я бежал к машине определённой, скажем так к пони далее нажимал на 0x0D (enter)?
 

dmitri4

Известный
453
79
Есть ли способ как можно поставить метку на карте по координатам (как ту которая с помощью пкм ставится)