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

Akionka

akionka.lua
Проверенный
742
499
Не помогло, и вообще там ничего нет, даже на гитхабе открыта заявка,никто не знает как чинить, переустанавлиаали атом
Очевидно, что это баг атома. Жди обновление. Или переходи на темную сторону VS code
 

The Spark

Известный
653
670
Есть табличка
Lua:
local TNames = {
    [114] = "Корвус",
    [22] = "Корвус",
    [123] = "Корвус",
    [221] = "Корвус",
    [131 = "Корвус",
    [345] = "Корвус"
}
Как всё объединить и сделать тип этого:
Lua:
local TNames = {
    [114, 22, 345, 123, 221, 131] = "Корвус"
}
 

cheremuxa

Известный
430
200
Есть табличка
Lua:
local TNames = {
    [114] = "Корвус",
    [22] = "Корвус",
    [123] = "Корвус",
    [221] = "Корвус",
    [131 = "Корвус",
    [345] = "Корвус"
}
Как всё объединить и сделать тип этого:
Lua:
local TNames = {
    [114, 22, 345, 123, 221, 131] = "Корвус"
}
Lua:
local TNames = {
    [114, 22, 345, 123, 221, 131] = "Корвус"
}
а потом вызывай,
Код:
TNames.1 - вызов 114 номера,
TNames.2 - вызов 2 номера,
TNames.3 - вызов 345 номера,
TNames.4 - вызов 123 номера, и т.д
 

ufdhbi

Известный
Проверенный
1,455
861
Есть табличка
Lua:
local TNames = {
    [114] = "Корвус",
    [22] = "Корвус",
    [123] = "Корвус",
    [221] = "Корвус",
    [131 = "Корвус",
    [345] = "Корвус"
}
Как всё объединить и сделать тип этого:
Lua:
local TNames = {
    [114, 22, 345, 123, 221, 131] = "Корвус"
}
Есть табличка
Lua:
local TNames = {
    [114] = "Корвус",
    [22] = "Корвус",
    [123] = "Корвус",
    [221] = "Корвус",
    [131 = "Корвус",
    [345] = "Корвус"
}
Как всё объединить и сделать тип этого:
Lua:
local TNames = {
    [114, 22, 345, 123, 221, 131] = "Корвус"
}
Lua:
local tNames = {
['Корвус'] = {12,45,67,23,674,1},
}
 

Lyonya Decart

Участник
140
22
Как отправить нажатие на дискету?
34193
 

Kbho

Участник
59
4
Ищу сбив анимации на X (на луа).Знаю что он есть на форуме, но не могу найти.
 

FBenz

Активный
328
40
Можно ли выполнять sampRegisterChatCommand() не в main?
Вот код:
Lua:
if imgui.Button(u8'КнопачькаЪъЪъЪ') then -- в onDrawFrame
    sampRegisterChatCommand(comm, function() sampSendChat(text) end) -- В comm название команды. Например local comm = 'mycmd'
end
При нажатии на кнопку команда регистрируется, но при вводе команды в чат ничего не происходит. Вообще. Т.е. команда существует, но в чат не пишет.
Адекватно начинает работать только после перезагрузки скрипта.
Простите, но Wtf? Что не так? (Да, я тупой)
 

Musaigen

abobusnik
Проверенный
1,582
1,301
Где можно почитать про графический интерфейс gui?
 

Lyonya Decart

Участник
140
22
Можно ли выполнять sampRegisterChatCommand() не в main?
Вот код:
Lua:
if imgui.Button(u8'КнопачькаЪъЪъЪ') then -- в onDrawFrame
    sampRegisterChatCommand(comm, function() sampSendChat(text) end) -- В comm название команды. Например local comm = 'mycmd'
end
При нажатии на кнопку команда регистрируется, но при вводе команды в чат ничего не происходит. Вообще. Т.е. команда существует, но в чат не пишет.
Адекватно начинает работать только после перезагрузки скрипта.
Простите, но Wtf? Что не так? (Да, я тупой)
пропробуй обьявить функцию вне имгуи
 

Krisvis

Известный
65
27
Можно ли выполнять sampRegisterChatCommand() не в main?
Вот код:
Lua:
if imgui.Button(u8'КнопачькаЪъЪъЪ') then -- в onDrawFrame
    sampRegisterChatCommand(comm, function() sampSendChat(text) end) -- В comm название команды. Например local comm = 'mycmd'
end
При нажатии на кнопку команда регистрируется, но при вводе команды в чат ничего не происходит. Вообще. Т.е. команда существует, но в чат не пишет.
Адекватно начинает работать только после перезагрузки скрипта.
Простите, но Wtf? Что не так? (Да, я тупой)
меня при таком раскладе крашило
 

KH9I3b_MuJIOCJIABCKu

Участник
52
20
есть переменная id она равна 123, как проверить есть ли этот чел в зоне стрима и если есть вывести в чат тест?
 

ufdhbi

Известный
Проверенный
1,455
861
Последнее редактирование модератором: