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

Enlizmee

Активный
480
102
как получить ид людей которые умерли в зоне стрима,и вывести это в чат?
 

PoundFoolish

Участник
81
1
В чем ошибка, почему скрипт крашится?
Lua:
[19:56:18.972503] (error)    Key.lua: C:\SAMPS\GTA 130K BY DAPO SHOW\moonloader\Key.lua:40: bad argument #1 to 'lower' (string expected, got nil)
stack traceback:
    [C]: in function 'lower'
    C:\SAMPS\GTA 130K BY DAPO SHOW\moonloader\Key.lua:40: in function 'callback'
    ...TA 130K BY DAPO SHOW\moonloader\lib\samp\events\core.lua:80: in function <...TA 130K BY DAPO SHOW\moonloader\lib\samp\events\core.lua:54>
[19:56:18.976504] (error)    Key.lua: Script died due to an error. (0FD08A04)
 

Izvinisb

Известный
Проверенный
963
599
В чем ошибка, почему скрипт крашится?
Lua:
[19:56:18.972503] (error)    Key.lua: C:\SAMPS\GTA 130K BY DAPO SHOW\moonloader\Key.lua:40: bad argument #1 to 'lower' (string expected, got nil)
stack traceback:
    [C]: in function 'lower'
    C:\SAMPS\GTA 130K BY DAPO SHOW\moonloader\Key.lua:40: in function 'callback'
    ...TA 130K BY DAPO SHOW\moonloader\lib\samp\events\core.lua:80: in function <...TA 130K BY DAPO SHOW\moonloader\lib\samp\events\core.lua:54>
[19:56:18.976504] (error)    Key.lua: Script died due to an error. (0FD08A04)
bad argument #1 to 'lower' (string expected, got nil)
 

BARRY BRADLEY

Известный
711
176
  • Нравится
Реакции: Eugene Crabs

7jizzle

Участник
238
14
Подкиньте функцию конвента rgba to hex(для рендера если не такой тип цвета указал).
 

Double Tap Inside

Известный
Проверенный
1,916
1,255
Дайте функцию направления камеры на точку x,y,z для аима -__-. Мгновенную, без всяких там плавностей.
 
Последнее редактирование:

7jizzle

Участник
238
14
Дайте функцию направления камеры на точку x,y,z для аима -__-
 
  • Влюблен
Реакции: Double Tap Inside

HpP

Известный
368
119
На автоматическую загрузку поставил файл notify, но вместо него скачивается Html код Google Disc, почему?
 

HpP

Известный
368
119
Lua:
if not doesFileExist('moonloader//lib_imgui_notf.lua') then
    downloadUrlToFile('[URL='https://drive.google.com/uc?export=download&id=1HKVVAyTXJEAdOiu45K_0dyynU4MP8mF1,moonloader//lib_imgui_notf.lua']https://drive.google.com/uc?export=download&id=1HKVVAyTXJEAdOiu45K_0dyynU4MP8mF1','moonloader//lib_imgui_notf.lua[/URL]', function(id, status)
        if status == dlstatus.STATUS_ENDDOWNLOADDATA then
            Poss = 1
                print('Файл lib_imgui_notf.lua был успешно загружен!')
                    mainIni.Possas.Poss = Poss
                        inicfg.save(mainIni, directIni)
        end
    end)
end
 

McLore

Известный
565
283
Lua:
if not doesFileExist('moonloader//lib_imgui_notf.lua') then
    downloadUrlToFile('[URL='https://drive.google.com/uc?export=download&id=1HKVVAyTXJEAdOiu45K_0dyynU4MP8mF1,moonloader//lib_imgui_notf.lua']https://drive.google.com/uc?export=download&id=1HKVVAyTXJEAdOiu45K_0dyynU4MP8mF1','moonloader//lib_imgui_notf.lua[/URL]', function(id, status)
        if status == dlstatus.STATUS_ENDDOWNLOADDATA then
            Poss = 1
                print('Файл lib_imgui_notf.lua был успешно загружен!')
                    mainIni.Possas.Poss = Poss
                        inicfg.save(mainIni, directIni)
        end
    end)
end
Код:
local lnotf, notf = pcall(import, "imgui_notf.lua")

if not lnotf then
    downloadUrlToFile("прямая ссылка", "moonloader\\imgui_notf.lua", function(id, status, p1, p2)
    if status == dlstatus.STATUS_ENDDOWNLOADDATA then
    -- перезагружаешь или загружаешь скрипт
    end
end
 
  • Нравится
Реакции: HpP

Eugene Crabs

Активный
544
30
нет, это строка в json формате, функция преобразует строку в таблицу и вернёт таблицу в переменную tableJson
Это я знаю. Я не знаю каким образом объявить местонахождение JSON-строки, если она находится у меня на компьютере