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

donaks.

Известный
105
72
Как узнать координаты красной метки на карте, которую ставит сервер, когда, к примеру, gps ввел?
 

donaks.

Известный
105
72
Lua:
bool result, float posX, float posY, float posZ = getTargetBlipCoordinates()
Он берет ПОЛЬЗОВАТЕЛЬСКУЮ метку (маркер), а мне нужно для бота, чтобы он вот эту красную фигню распознал. Возможно ли это, или нужно ручками прописывать?
KFVMJGU.png
 

Izvinisb

Известный
Проверенный
959
603
Он берет ПОЛЬЗОВАТЕЛЬСКУЮ метку (маркер), а мне нужно для бота, чтобы он вот эту красную фигню распознал. Возможно ли это, или нужно ручками прописывать?
KFVMJGU.png
 
  • Нравится
Реакции: donaks.

Flaze_

Участник
40
0
lua:
require("moonloader")
local sampev = require("lib.samp.events")

local objectAcs = {371, 1485, 2052, 2053, 2054, 2819, 2843, 2844, 2845, 2846, 3026, 3070, 11704, 11735, 18636, 18637, 18638, 18639, 18640, 18645, 18891, 18892, 18893, 18894, 18895, 18896, 18897, 18898, 18899, 18900, 18901, 18902, 18903, 18904, 18905, 18906, 18907, 18908, 18909, 18910, 18911, 18912, 18913, 18914, 18915, 18916, 18917, 18918, 18919, 18920, 18921, 18922, 18923, 18924, 18925, 18926, 18927, 18928, 18929, 18930, 18931, 18932, 18933, 18934, 18935, 18936, 18937, 18938, 18939, 18940, 18941, 18942, 18943, 18948, 18949, 18950, 18951, 18952, 18953, 18954, 18955, 18956, 18957, 18958, 18959, 18960, 18961, 18962, 18963, 18964, 18965, 18966, 18967, 18968, 18969, 18970, 18971, 18972, 18973, 18974, 18975, 18976, 18977, 18978, 18979, 19006, 19007, 19008, 19009, 19010, 19011, 19012, 19013, 19014, 19015, 19016, 19017, 19018, 19019, 19020, 19021, 19022, 19023, 19024, 19025, 19026, 19027, 19028, 19029, 19030, 19031, 19032, 19033, 19034, 19035, 19036, 19037, 19038, 19039, 19040, 19041, 19042, 19043, 19044, 19045, 19046, 19047, 19048, 19049, 19050, 19051, 19052, 19053, 19064, 19065, 19066, 19067, 19068, 19069, 19077, 19085, 19093, 19094, 19095, 19096, 19097, 19098, 19099, 19100, 19101, 19102, 19103, 19104, 19105, 19106, 19107, 19108, 19109, 19110, 19111, 19112, 19113, 19114, 19115, 19116, 19117, 19118, 19119, 19120, 19136, 19137, 19138, 19139, 19140, 19141, 19142, 19160, 19161, 19162, 19163, 19200, 19274, 19330, 19331, 19348, 19349, 19352, 19421, 19422, 19423, 19424, 19469, 19472, 19487, 19488, 19514, 19515, 19516, 19517, 19518, 19519, 19520, 19521, 19528, 19553, 19554, 19555, 19556, 19557, 19558, 19559, 19773, 19801, 19878, 19904}

function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then error("need sampfuncs") end
    while not isSampAvailable() or sampGetGamestate() ~= 3 do wait(0) end
    wait(-1)
end


lua_thread.create(function()
    while true do
        wait(0)
        if getCurrentCharWeapon(PLAYER_PED) == 34 and isKeyDown(VK_RBUTTON) then
            sniperFix(false)
            while isKeyDown(VK_RBUTTON) do wait(0) end
            sniperFix(true)
        end   
    end
end)


function sniperFix(params1)
    for _, v in ipairs(getAllObjects()) do
        for _, j in ipairs(objectAcs) do
            if getObjectModel(v) == j then
                setObjectVisible(v, params1)
            end
        end
    end
end
Как перечислить ид ганов в выделенной строчке? К примеру 34(снапа) и 43(фотоаппарат)
 

Double Tap Inside

Известный
Проверенный
1,919
1,275
Как сделать заголовок окна imgui больше, чтобы кнопочка "Закрыть" была больше?

222.PNG



Как сделать горизонтальный скролл бар в imgui.InputTextMultiline() ?

9999.PNG
 
Последнее редактирование:

Double Tap Inside

Известный
Проверенный
1,919
1,275
Как перехватить нажатие именно на этот крестик, чтобы запустить какую-то свою функцию?
222.PNG