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

linmsqn

Участник
337
9
как можно сделать вывод определенных слов в специальное поле? типо у меня есть строка Объявление и дальше текст, мне нужно чтобы она выводилась в угол экрана как на этом скрине, а не именно в чат
1638708384496.png
 

Kosatik

Участник
113
20
Как можно написать чтобы человек бежал по нужным координатам? Просто не могу понять не много как сделать бота
 

Shepi

Активный
178
37
Всем привет.


Как можно цвет, полученный из imgui.ColorEdit4 использовать в качестве цвета в addChatMessage для одного аргумента?
 
  • Ха-ха
Реакции: Hideme Flow

shrug228

Активный
212
75
Как узнать, целится ли человек с пассажирского места? Можно использовать костыль с проверкой H в автомобиле, но тогда хз, как проверить нахождение на пассажирском.

try:
Lua:
--ongangzoneflash
date_table = os.date("*t")
hour, minute, second = date_table.hour, date_table.min, date_table.sec
year, month, day = date_table.year, date_table.month, date_table.wday

Всем привет.


Как можно цвет, полученный из imgui.ColorEdit4 использовать в качестве цвета в addChatMessage для одного аргумента?
Берешь цвет, переводишь в формат rgb hex. Далее в части строки в sampAddChatMessage делаешь вот такую штуку: "*предыдущий текст*{" .. *цвет в формате rgb hex* .. "}*дальнейший текст*"
 

S7XA

Активный
109
69
Можно ли где-то посмотреть все функции ffi , для луа.

И сразу второй вопрос можно ли в ffi lua , использовтаь что-то на подобие text:find если да то как?
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,746
4,831
Как узнать, целится ли человек с пассажирского места? Можно использовать костыль с проверкой H в автомобиле, но тогда хз, как проверить нахождение на пассажирском.
Если игрок в машине, и он не водитель. Па насчет привеливания - когда игрок прицеливается, режим камеры ставится в 53
 

yoozee

Новичок
12
0
скажите что не так почему то не пишет в чат Script ON
Lua:
 script_name("sss")
script_author("sss")
require"lib.moonloader"
require"moonloader"
function main()
    while true do
        wait(0)
        if isKeyDown(VK_NUMPAD9) and isKeyJustPressed(VK_NUMPAD6) then
            sampAddChatMessage("Script ON", 0x00FF00) 
        end
    end
end
 

linmsqn

Участник
337
9
как постоянно рендерить какой-нибудь настраиваемый текст на экране? допустим я хочу чтобы у меня слева в углу был текст ПРИВЕТ
 

S7XA

Активный
109
69
скажите что не так почему то не пишет в чат Script ON
Lua:
 script_name("sss")
script_author("sss")
require"lib.moonloader"
require"moonloader"
function main()
    while true do
        wait(0)
        if isKeyDown(VK_NUMPAD9) and isKeyJustPressed(VK_NUMPAD6) then
            sampAddChatMessage("Script ON", 0x00FF00)
        end
    end
end
code:
require 'lib.moonloader'

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while true do 
        wait(0) 
         if isKeyJustPressed(VK_X) then
         if not sampIsChatInputActive() then
            sampAddChatMessage("Script ON", 0x00FF00) 
         end
        end
    end
end
 

qdIbp

Автор темы
Проверенный
1,438
1,180
Как получить хэнд объекта по id модели