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

MLycoris

Режим чтения
Проверенный
1,826
1,867
сам скрипт то работает,но гм нет,это странно,пишет гм он,но сам гм не работает:(
на сервере без античита он нормально работает, не знаю возможно ли в наше время найти полноценно рабочий гм с ног
 

why ega

РП игрок
Модератор
2,550
2,242
Lua:
local nigger = thisScript

nigger():unload()
Случайно вставил этот текст (забыл очистить инпут на форуме перед тем, как ответить). Да и я уже решил проблему и ты не совсем так понял вопрос, тк. это ток отрывок от него)
 

sosnov

Известный
331
115
есть ли что то типо этого?:
Lua:
setCharAnimSpeed(PLAYER_PED, 1500)
делающее скорость анимок/персонажа быстрей?
эта шняга не работает так как вероятней всего ее не существует...
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
есть ли что то типо этого?:
Lua:
setCharAnimSpeed(PLAYER_PED, 1500)
делающее скорость анимок/персонажа быстрей?
эта шняга не работает так как вероятней всего ее не существует...
Может это.
4-й параметр.

UPD: Или вообще через events делай.
 
Последнее редактирование:

diva

Известный
251
44
Может это.
4-й параметр.

UPD: Или вообще через events делай.
script doesnt work why? maybe you know the solution?


Lua:
script_properties("work-in-pause")
require("lib.samp.events").onTextDrawSetString = function (slot0, slot1)
    if slot1:find("CONVERSATION_YES") then
        lua_thread.create(function ()
            setVirtualKeyDown(89, true)
            wait(4000)
            setVirtualKeyDown(89, false)
        end)
    end

    if slot1:find("Zuveles nera") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Kabliukas tuscias") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Istraukei zuvi") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Niekas nekimba") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("koks laimikis") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Siandien tau gerai sekasi") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("niekas nebuvo uzkibe") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Zuvis tavo rankose") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Kur gi tos zuvys") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Kokia zuvis") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Tu tikras zvejys") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Siandien nesiseka") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Bandymas sekmingas") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Bandymas nesekmingas") then
        sampSendChat("/zvejoti")
    end

    if slot1:find("Neblogas grobis") then
        sampSendChat("/zvejoti")
    end
end
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
script doesnt work why? maybe you know the solution?
Doesn't work only on pause or does not work at all?
Are you sure this is the event you need? Can you try with the onShowTextDraw event?
Lua:
INCOMING_RPCS[RPC.SHOWTEXTDRAW]               = {'onShowTextDraw',
  {textdrawId = 'uint16'},
  {textdraw = {
    {flags = 'uint8'},
    {letterWidth = 'float'},
    {letterHeight = 'float'},
    {letterColor = 'int32'},
    {lineWidth = 'float'},
    {lineHeight = 'float'},
    {boxColor = 'int32'},
    {shadow = 'uint8'},
    {outline = 'uint8'},
    {backgroundColor = 'int32'},
    {style = 'uint8'},
    {selectable = 'uint8'},
    {position = 'vector2d'},
    {modelId = 'uint16'},
    {rotation = 'vector3d'},
    {zoom = 'float'},
    {color1 = 'int16'},
    {color2 = 'int16'},
    {text = 'string16'}
  }}
}
 

sosnov

Известный
331
115
Lua:
setCharCanBeKnockedOffBike(PLAYER_PED, false)
это должно действовать как ноубайк,но нихуа
какая функция должна спасать от падений с велика?
 

diva

Известный
251
44
Doesn't work only on pause or does not work at all?
Are you sure this is the event you need? Can you try with the onShowTextDraw event?
Lua:
INCOMING_RPCS[RPC.SHOWTEXTDRAW]               = {'onShowTextDraw',
  {textdrawId = 'uint16'},
  {textdraw = {
    {flags = 'uint8'},
    {letterWidth = 'float'},
    {letterHeight = 'float'},
    {letterColor = 'int32'},
    {lineWidth = 'float'},
    {lineHeight = 'float'},
    {boxColor = 'int32'},
    {shadow = 'uint8'},
    {outline = 'uint8'},
    {backgroundColor = 'int32'},
    {style = 'uint8'},
    {selectable = 'uint8'},
    {position = 'vector2d'},
    {modelId = 'uint16'},
    {rotation = 'vector3d'},
    {zoom = 'float'},
    {color1 = 'int16'},
    {color2 = 'int16'},
    {text = 'string16'}
  }}
}
fish bot works when im in game, every 4 seconds it writes /zvejoti (/fish)
but if im gonna alt+tab fish bot will stop working and not gonna type /zvejoti
 

Dmitriy Makarov

25.05.2021
Проверенный
2,478
1,113
fish bot works when im in game, every 4 seconds it writes /zvejoti (/fish)
but if im gonna alt+tab fish bot will stop working and not gonna type /zvejoti
Specifies that the script will continue executing while the game is paused (assuming the game is maximized and in the foreground).
Try with this.
 

joumey

Активный
195
43
У меня проект есть minergame, там должна быть огромная сума денег ( что бы улучшить игру и баланс после 2ккк с чем то не уходил в минус, ведь это стает концом игры), и вот мне нужно сохраять это в иникфг и использовать в имгуи
как пользоваться ffi.new и как сохранить его значение в файл и использовать в имгуи, если можно?
up
 

Luis_Mora

Участник
31
1
Привет. telegram
Есть такая штука как телеграм контрол самп. https://www.blast.hk/threads/62811
Интересует вопрос. Можно ли как то отлавливать сообщения НЕ от пользователей.
Т.е. меня интересует непосредственно отловить сообщение которое туда отправляет сам бот.
Я по определённой команде отправляю сообщение в канал в телеграме, от лица бота.
Если допустим человек в этом же канале пишет /send вывпвып, то всем у кого настроен данный скрипт, соответственно придёт в чат "вывпвып"
Мне нужно чтобы бот, при такой отправке, сам же смог отловить условно эту же команду. Т.е. посылаем в канал через команду /test сообщение /send sdfsdf от лица бота, и сам же бот его принимает и выполняет.
Может кто знает как это сделать можно.