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

meowprd

Тот самый Котовский
Проверенный
1,280
712
как изменить скорость джетпака?
Смотри этот исходник
 

moreveal

Известный
Проверенный
814
462
Смотри этот исходник
смотрел, там джетпак летит вперед сам
 

Sanchez.

Известный
704
187
1627243678604.png

Как убрать то что я обвел в красный кружок? (Это в консоле sampfuncs)
 

Gorskin

I shit on you
Проверенный
1,247
1,043
Есть ли функция которая позволяет выделять курсором и копировать текст из имгуи окна?
 

Curtis

Участник
282
10
Как массив записать в inicfg и чтобы от туда брались данные? Как записать простое значение(переменную) знаю
Если ли функция, которая принимает ид скина человека по ИД и пол его(М/Ж)
 
Последнее редактирование:

Adriano_Martini

Активный
145
39
Прицел должен становится красным когда навожу на игрока, и да он становится красным, но проблема в том что при отводе с игрока прицел все равно остаётся красного цвета, и оно то красное то белое, мне сказал один уважаемый челик что этот прицел работает как треугольник над головой у игрока, а этот треугольник также не точно показывает что твой прицел чётко на игроке.
Нужно сделать так чтобы прицел становился красным лишь тогда когда прицел нацелен прямо на игрока, а не рядом с ним, надеюсь поможете.

Вот код:
Lua:
local memory = require 'memory'
function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(0) end
    while true do
        wait(0)
        local result, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
        if result then
            changeCrosshairColor(0xFF0000FF) -- красный
        else
            changeCrosshairColor(0xFFFFFFFF) -- белый
        end
    end
end
function changeCrosshairColor(rgba)
    local r = bit.band(bit.rshift(rgba, 24), 0xFF)
    local g = bit.band(bit.rshift(rgba, 16), 0xFF)
    local b = bit.band(bit.rshift(rgba, 8), 0xFF)
    local a = bit.band(rgba, 0xFF)

    memory.setuint8(0x58E301, r, true)
    memory.setuint8(0x58E3DA, r, true)
    memory.setuint8(0x58E433, r, true)
    memory.setuint8(0x58E47C, r, true)

    memory.setuint8(0x58E2F6, g, true)
    memory.setuint8(0x58E3D1, g, true)
    memory.setuint8(0x58E42A, g, true)
    memory.setuint8(0x58E473, g, true)

    memory.setuint8(0x58E2F1, b, true)
    memory.setuint8(0x58E3C8, b, true)
    memory.setuint8(0x58E425, b, true)
    memory.setuint8(0x58E466, b, true)

    memory.setuint8(0x58E2EC, a, true)
    memory.setuint8(0x58E3BF, a, true)
    memory.setuint8(0x58E420, a, true)
    memory.setuint8(0x58E461, a, true)
end
 

Lamprecht

Новичок
21
1
Как изменить флаг InputText после его создания? Например он создан с ReadOnly, но когда нажму кнопку ReadOnly снимется с него
 

TSIDEX

Известный
83
8
Как проверить наличие игрового ника в TAB без использования /id?
 

Rice.

https://t.me/riceoff
Модератор
1,689
1,427
Как изменить флаг InputText после его создания? Например он создан с ReadOnly, но когда нажму кнопку ReadOnly снимется с него
Пример с проверкой на chechbox
Lua:
--Local
local checkbox = imgui.ImBool(false)
local buffer = imgui.ImBuffer(256)

--Imgui
imgui.Checkbox('Checkbox', checkbox)

if checkbox.v then
        imgui.InputText("Text", buffer, imgui.InputTextFlags.Password)
    else
        imgui.InputText("Text", buffer)
end
 

#Kai-

Известный
705
292
Пример с проверкой на chechbox
Lua:
--Local
local checkbox = imgui.ImBool(false)
local buffer = imgui.ImBuffer(256)

--Imgui
imgui.Checkbox('Checkbox', checkbox)

if checkbox.v then
        imgui.InputText("Text", buffer, imgui.InputTextFlags.Password)
    else
        imgui.InputText("Text", buffer)
end
Lua:
local checkbox = imgui.ImBool(false)
local buffer = imgui.ImBuffer(256)

imgui.Checkbox('Checkbox', checkbox)
imgui.InputText("Text", buffer, checkbox.v and 0 or imgui.InputTextFlags.Password)
Иди табуляции учись, а не раздавай советы по быдло коду.
 

Shepard

Активный
459
88
Можно как-то загрузить/обновить файл на github по api? Как это сделать?
 

Regards

Новичок
22
0
Данный код позволяет менять размер шрифта и FA_ICONS но проблема в том, что при открытии окна происходит дикий лаг, то бишь подгрузка, можно как то исправить этот лаг?
Lua:
local fontsize = nil
font = {}
function imgui.BeforeDrawFrame()
    local config = imgui.ImFontConfig()
    config.MergeMode, config.PixelSnapH = true, true
    local range = {
        text = imgui.GetIO().Fonts:GetGlyphRangesCyrillic(),
        icon = imgui.ImGlyphRanges({ 0xf000, 0xf83e })
    }
    
    if default_font_icons == nil then
        default_font_icons = imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(fa_base, 13, config, range.icon)
    end
    for _, size in ipairs({ 11, 15, 20, 35, 45, 60 }) do
        if font[size] == nil then
            font[size] = imgui.GetIO().Fonts:AddFontFromFileTTF(getFolderPath(0x14) .. '\\trebucbd.ttf', size, nil, range.text)
            imgui.GetIO().Fonts:AddFontFromMemoryCompressedBase85TTF(fa_base, size, config, range.icon)
        end
    end
end
В переменной fa_base находится очень много символов, так и не разобрался для чего они.