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

mld

Участник
99
11
42584

я что-то делаю не так? :с

-Неизвестная команда
 

RazorRw

t.me/sssecretway | ТГК: t.me/razor_ware
Всефорумный модератор
2,012
3,371
  • Нравится
Реакции: Eugene Crabs

Adler

Участник
38
14
Как клавиши W A S D которые высвечиваются игровым текстом на экране (onDisplayGameText) будут через спецификатор ключей? Мне для string.find.
 

Thief

Участник
108
13
attempt to call field 'remove' (a nil value) - метод от table.remove не хочет работать, когда уже пытался вывести значения 1 и 2 аргумента и в целом строку таблицы, всё абсолютно выводится и работает, но этот метод просто крашит весь скрипт, почему так происходит? метод если что находится в бесконечном цикле, а в нём стоит задержка в 1 мс, хз как это поможет, но на всякий случай.
 

wulfandr

Известный
635
259
attempt to call field 'remove' (a nil value) - метод от table.remove не хочет работать, когда уже пытался вывести значения 1 и 2 аргумента и в целом строку таблицы, всё абсолютно выводится и работает, но этот метод просто крашит весь скрипт, почему так происходит? метод если что находится в бесконечном цикле, а в нём стоит задержка в 1 мс, хз как это поможет, но на всякий случай.
Вызывается нулевое значение. Проверь таблицу и все названия на наличие дефекта.
attempt to call field 'remove' (a nil value) - метод от table.remove не хочет работать, когда уже пытался вывести значения 1 и 2 аргумента и в целом строку таблицы, всё абсолютно выводится и работает, но этот метод просто крашит весь скрипт, почему так происходит? метод если что находится в бесконечном цикле, а в нём стоит задержка в 1 мс, хз как это поможет, но на всякий случай.
лучше скинь код.
 

Vespan

хинкали это большие пельмени
Проверенный
2,139
1,897
Что такое Json?Как его использовать?
 

trefa

3d print
Всефорумный модератор
2,145
1,347
Что такое Json?Как его использовать?
Для этого google.com есть
А для использования, в wiki есть 2 функции

Посмотреть вложение 42584
я что-то делаю не так? :с

-Неизвестная команда
В твоём случае будет команда //rl

Как клавиши W A S D которые высвечиваются игровым текстом на экране (onDisplayGameText) будут через спецификатор ключей? Мне для string.find.
https://sampwiki.blast.hk/wiki/GameText_Styles
под вкладкой Special Text Letters
 
Последнее редактирование:
  • Нравится
Реакции: Adler

Vespan

хинкали это большие пельмени
Проверенный
2,139
1,897
Как вывисти весь текст из ини файла в imgui.text
 

Carlos777

Потрачен
227
219
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Короче есть main_gui two_gui three_gui

Когда активно main_gui надо мышку подрубать.
two_gui мышка отруб, и three_gui тоже.

Но блять отрубаю мышку в three_gui, потом вырубаю three_gui не робит ESC.