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

The Spark

Известный
653
671
1. Как сделать активацию на координаты
2. Как написать в консоль sf
 

Kotovasya

Участник
85
13
как юзать renderLoadTextureFromFileInMemory()? я вообще не шарю в памяти и как ее юзать
Там и не используется память. gtaweapon3.ttf - это d3dx шрифт, и его нужно загружать и использовать по-другому. В скрипте, который я скинул видно, каким именно образом
 
  • Нравится
Реакции: tlwsn

tlwsn

Известный
537
85
Там и не используется память. gtaweapon3.ttf - это d3dx шрифт, и его нужно загружать и использовать по-другому. В скрипте, который я скинул видно, каким именно образом
как можно добавить черный фон, что бы не сливались цвета?
 

Lucengen

Участник
52
0
Как сделать вот такое меню в имгуи?
upload_2019-4-4_18-40-0.png
 

TopKitten

Участник
86
3
Код:
function myskin(arg)
lua_thread.create(function()
    while true do
        local chars = getAllChars()
        for i, k in pairs(chars) do
        _, myid = sampGetPlayerIdByCharHandle(PLAYER_PED)
        local model = getCharModel(k)
            if model == arg then
          
            else
            sampSendChat("/skin " .. myid .. " " .. arg, -1)
            wait(0)
        end
        end
    end
end)
end

Нужно чтоб я мог устанавливать себе постоянный скин
И если я устанавливаю скин /myskin 106
То он должен быть всегда на мне
Если на мне другой скин, то оно будет обратно переключать на скин 106
Но этот скрипт постоянно флудит, даже если скин верный
хелп, не особо шарю в луа
 

damag

Женюсь на официантке в моем любимом баре
Проверенный
1,152
1,192
  • Нравится
Реакции: Lucengen

James Hawk

Известный
919
217
а если по понятней
Lua:
imgui.Checkbox('Sensitivity Fix', sensFix) -- сам чекбокс

function checkbox() -- Действия чекбоксов
-- Sensitivity Fix
if sensFix.v then
if axisx ~= axisy then
writeMemory(0xB6EC18, 4, axisx, false)      
end
else
writeMemory(0xB6EC18, 4, axisy, false)
end
end
То ли я слепой, то ли ты ему нахрена-то кинул функцию сенсы
 

The Sunset

Новичок
22
4
Хотел написать починку авто по команде, но когда пишу команду, сидя в авто, выдает ошибку в консоль:
opcode '0224' call caused an unhandled exception
stack traceback:
[C]: in function 'setCarHealth'
D:\Games\GTA for BD\moonloader\hp.lua:56: in function <D:\Games\GTA for BD\moonloader\hp.lua:53>

Но вне авто - скрипт работает.
Вот часть из кода:

Lua:
default_hpcar = 1000

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    reg_cmd()

    wait(-1)
end

function reg_cmd()
    local cmd = sampRegisterChatCommand
    local luachat = sampAddChatMessage

cmd('/hpcar',
    function()
        local player_car = isCharInAnyCar(PLAYER_PED)
        if player_car == true  then
            setCarHealth(carhandle, default_hpcar)
            luachat('Транспорт починен!', 0xFFD700)
        else
            luachat('Вы не в транспорте!', 0xFFD700)
        end
    end)
Вопрос: Что нужно "починить" в setCarHealth? Или чем заменить?..
 

DeMoN3D

Известный
366
76
и он будет искать вне зависимости от раскладки?
нет, он будет искать конкретно привет, просто параллельно добавь такое же но вместо привет - ghbdtn

Хотел написать починку авто по команде, но когда пишу команду, сидя в авто, выдает ошибку в консоль:
opcode '0224' call caused an unhandled exception
stack traceback:
[C]: in function 'setCarHealth'
D:\Games\GTA for BD\moonloader\hp.lua:56: in function <D:\Games\GTA for BD\moonloader\hp.lua:53>

Но вне авто - скрипт работает.
Вот часть из кода:

Lua:
default_hpcar = 1000

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end

    reg_cmd()

    wait(-1)
end

function reg_cmd()
    local cmd = sampRegisterChatCommand
    local luachat = sampAddChatMessage

cmd('/hpcar',
    function()
        local player_car = isCharInAnyCar(PLAYER_PED)
        if player_car == true  then
            setCarHealth(carhandle, default_hpcar)
            luachat('Транспорт починен!', 0xFFD700)
        else
            luachat('Вы не в транспорте!', 0xFFD700)
        end
    end)
Вопрос: Что нужно "починить" в setCarHealth? Или чем заменить?..
тебе хендл кара нужен вместо carhandle
если не ошибаюсь, то -1 это кар, в котором ты сидишь, но лучше делать проверку