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

Tox777z

Известный
21
2

Вложения

  • Скриншот 16-10-2019 115551.png
    Скриншот 16-10-2019 115551.png
    28.9 KB · Просмотры: 113

Quasper

Известный
834
354
Ф*к. Только щас понял то что это вроде как не то что мне нужно. Как узнать свою анимацию через SAMP.lua?
через SAMP.lua тебе подсказали, но будет работать если только сервер тебе установил эту анимацию.
 
  • Нравится
Реакции: Eugene Crabs

Eugene Crabs

Активный
544
30
через SAMP.lua тебе подсказали, но будет работать если только сервер тебе установил эту анимацию.
А, понял. Думал то что будет что-то в формате "библиотека".функция(аргументы).

Но появился другой вопрос. Функция "int handle = getPickupPointerHandle(Pickup pickup)" получает Хэндл пикапа, верно?

И можно пример работы с этим хуком? Чтобы получал ID анимации моего персонажа, пока разобраться не могу
 
Последнее редактирование:

Vespan

loneliness
Проверенный
2,102
1,631
Как сделать поиск по imgui.Text??
(что-бы InputText искало imgui.Text)
Подскажите пожалуйста
 

Carlos777

Потрачен
227
219
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как замерять время, я зашёл в игру и вышел с неё и сохранить её в переменную.
И еще посчитать онлайн за день.
Может пример кто-то дать?
И не помешал бы перевод в 00:00:00
 
  • Нравится
Реакции: Vespan

chehon

Новичок
24
12
Как замерять время, я зашёл в игру и вышел с неё и сохранить её в переменную.
И еще посчитать онлайн за день.
Может пример кто-то дать?
И не помешал бы перевод в 00:00:00
os.clock() - возвращает время в секундах с точностью до миллисекунд с момента запуска приложения
Если хочешь посчитать онлайн за день, то как вариант, сохранять отыгранное время в ини файл
 

Vespan

loneliness
Проверенный
2,102
1,631
как сделать,такое круглое
42003
для imgui?
(хз как объяснить)
 

HackWhell

Новичок
26
0
Помогите пожалуйста, если я запишу маршрут в ракбот пеший(не бегающий), и мой бот заболеет например гастритом(на ДРП), то у него будет идти анимка гастрита и он будет останавливаться? Или же у него будет анимка и он будет в анимки болезни бежать
Помогите пожалуйста, если я запишу маршрут в ракбот пеший(не бегающий), и мой бот заболеет например гастритом(на ДРП), то у него будет идти анимка гастрита и он будет останавливаться? Или же у него будет анимка и он будет в анимки болезни бежать
P.S и еще как поставить задержку после спавна? А то при воспроизведение он тупо ТПшиться
 

JonnyWinner

Новичок
13
0
Кто знает как сделать чтобы когда вылазил какой-то диалог и чтобы нажимался энтер по этому диалогу иду
 

chehon

Новичок
24
12
Кто знает как сделать чтобы когда вылазил какой-то диалог и чтобы нажимался энтер по этому диалогу иду
Проверять функцией bool result = sampIsDialogActive() активен ли диалог, и, если активен - закрывать его функцией sampCloseCurrentDialogWithButton(int button)
 

JonnyWinner

Новичок
13
0
Проверять функцией bool result = sampIsDialogActive() активен ли диалог, и, если активен - закрывать его функцией sampCloseCurrentDialogWithButton(int button)
как сделать чтобы именно энтером закрывал диалог по иду
Проверять функцией bool result = sampIsDialogActive() активен ли диалог, и, если активен - закрывать его функцией sampCloseCurrentDialogWithButton(int button)
Ид диалога 4444 Энтером нужно закрывать его
Помогите сверху
 

chehon

Новичок
24
12
как сделать чтобы именно энтером закрывал диалог по иду

Ид диалога 4444 Энтером нужно закрывать его
Помогите сверху
Lua:
function main()
    while not isSampAvailable() do wait(100) end
    while true do
        if sampIsDialogActive() then
            if sampGetCurrentDialogId() == 4444 then
                setVirtualKeyDown(0x0D, true)
                wait(50)
                setVirtualKeyDown(0x0D, false)
            end
        end
        wait(0)
    end
end