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

Kegwineye.

Участник
478
21
Потому-что функция работает только на mimgui
как сделать вот так ? типо где нотификация вылезла..
GTA_SA_MP 30.01.2022 9_21_34.png
а то получаеться только так
GTA_ San Andreas 30.01.2022 9_24_56.png
 

DeKzer

Известный
515
222
Как сделать, чтобы над всеми машинами в зоне стрима отображались их ID?
 

Kegwineye.

Участник
478
21

DeKzer

Известный
515
222
Как узнать все хендлы тачек в зоне стрима я знал. Мне бы способ как над ними всеми их id поставить
 

sizeoftrickster

Известный
Проверенный
139
593
Как узнать все хендлы тачек в зоне стрима я знал. Мне бы способ как над ними всеми их id поставить
Lua:
require('moonloader')

function main()

    local font = renderCreateFont('Arial', 10, 5)

    while (true) do
        --[[
            Wiki -> https://wiki.blast.hk/ru/moonloader/lua/getAllVehicles
            Перебираем массив хэндлов транспорта, value = Handle
        ]]--
        for key, value in ipairs(getAllVehicles()) do
            --[[ Проверяем на наличие транспорта на экране ]]
            if (isCarOnScreen(value)) then
                --[[ Получаем 3D Coords транспорта ]]
                local posX, posY, posZ = getCarCoordinates(value)
                --[[ Получаем Screen Coords транспорта ]]
                local x, y = convert3DCoordsToScreen(posX, posY, posZ)
                renderFontDrawText(font, string.format('Car: %s | ID: %d\nServerID: %d', getGxtText(getNameOfVehicleModel(getCarModel(value))), getCarModel(value), select(2, sampGetVehicleIdByCarHandle(value))), x, y, -1)
            end
        end
        wait(0)
    end
end
 
  • Нравится
Реакции: DeKzer
D

deleted-user-216129

Гость
Возможно ли реализовать нейросеть на луа?
Конечно. Но имеет ли это смысл в ГТА(если ты конечно про неё). Когда я пытался запустить - фпс при обучение конкретно так проседал.
Вот код нейронки (самой простенькой).

Как экспортировать шрифт в base85? Просто у фипа в fa-icons.lua название есть, а файл с помощью которого он это сделал - не нашёл.
Код фипа:
-- Exported using binary_to_compressed_lua.cpp
gitlab.com

Как экспортировать шрифт в base85? Просто у фипа в fa-icons.lua название есть, а файл с помощью которого он это сделал - не нашёл.
Код фипа:
-- Exported using binary_to_compressed_lua.cpp
gitlab.com
Решение
1. Качаем файл с темы про картинки в mimgui
2. Открываем папку с файлом в cmd
3. Пишем « b2c_lua.exe -base85 ШРИФТ.ttf ПЕРЕМЕННАЯ > НАЗВАНИЕ_ФАЙЛА.lua »
4. Смотрим что получилось в файле который вы указали выше (НАЗВАНИЕ_ФАЙЛА.lua)
 
Последнее редактирование модератором:

Markelov9999

Участник
73
2
Берёшь любой HEX цвет и добавляешь к нему 0x
Например берём белый цвет (FFFFFF). Итог: 0xFFFFFF
Это то понятно.
Но к примеру на рендерах на игроках у меня лично в скрипте не работает HEX код.
У когда который работает, который привёл выше, на 2 символа больше чем в HEX
 

Rice.

Известный
Модератор
1,737
1,674
Это то понятно.
Но к примеру на рендерах на игроках у меня лично в скрипте не работает HEX код.
У когда который работает, который привёл выше, на 2 символа больше чем в HEX
0xFF и цвет. Пример: 0xFFFF0000 (FF0000 - красный)
 
  • Нравится
Реакции: Markelov9999

Kegwineye.

Участник
478
21
тут нихуя не написано как сделать так же
134094
 

Rice.

Известный
Модератор
1,737
1,674
тут нихуя не написано как сделать так же
134094
Что тебе именно нужно? Почему мы должны гадать? Тебе скинули тему с исходником, там всё нормально написано, как сделать уведомление. Если тебе не это нужно, то ты так и скажи.