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

Carlos777

Потрачен
227
219
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Какая функция отвечает за удаление скрипта? Тип хочу в скрипте сделать кнопку удалить скрипт и что б он удалялся в папке мунлоадер

Lua:
local dir = "путь"

dir:remove()
лайкни ток если помог
 
  • Нравится
Реакции: Renty

Pasquale Developer

Известный
109
8

Lua:
local dir = "путь"

dir:remove()
лайкни ток если помог
А что будет если по приколу указать в путь системные файлы?, оно ведь снесет винду?
 

Pu$$y

Участник
80
2
Lua:
sampRegisterChatCommand("save", function(location)
            if location ~= "" then
        x,y,z = getCharCoordinates(PLAYER_PED)
        local slocation = io.open("moonloader/locations.txt", "a")
        slocation:write(loc.."\n" .. x .." , " .. y .. " , " .. z .. "\n")
        slocation:close()
        else
        sampAddChatMessage("ERROR", -1)
        end
    end)
    sampRegisterChatCommand("locate", function(find)
        local findloc = io.open("moonloader/locations.txt", "r")
        for line in findloc:lines() do
            if string.find(line, find) then
                pos = findloc:read("*line")
                setBlipCoordinates(1, posX)
                setTargetBlipCoordinates(pos)
            end
        end
    end)

The blip always shows in wrong coordinates. Why? Can anyone help?
 

MaksQ

Известный
967
817

Lua:
local dir = "путь"

dir:remove()
лайкни ток если помог
М а не проще вот так?

Lua:
                        os.remove(thisScript().path)
                        thisScript():unload()
Как сделать затемнение экрана при открытии imgui менюшки?
 

Anton Nixon

Активный
474
48
пацаны подскажите, когда я перезапускаю скрипт у меня появляеться курсос в центре экрана. Как его убрать?
Выключай отображение мышки при краше скрипта onScriptTerminated или как-то так функция называется
Код:
Как поменять шрифт в имгуи?
 
Последнее редактирование:

Ananasasas

Участник
51
2
Помощь!!! Помогите связать отдельные фрагменты, я продолжаю писать скрипт, сейчас нужно что бы если ставка не сыграла, то ставка переходила на черное, если опять не сыграла то на красное, если сыграла, то оставалась на краном, ну короче думаю поняли, нужно чтоб если ставка не сыграла, то она менялась на другой цвет. Всего 2 цвета, черный и красный, чтоб из красного попасть в черный нужно нажать на текстдрав 2080, чтоб обратно в красный 2079, помогите пожалуйста.
Я вот начал что то писать, но запутался
Код:
function sampev.onServerMessage(color, text)
    if startBet > 0 then
        if (text == "Вы покинули стол" or text == "Вы покинули стол, так как не делали ставок" or text == "Вы пытаетесь сделать ставку больше допустимой") and color == -10092289 then
            startBet = 0
            sampAddChatMessage("[AutoBet] {FFFFFF}Автоставка отключена", 0x3399FFFF)
            endGame = false
            exitProhibit = false
        end
        if string.match(text, "Число %d+! Вы выиграли .-C") and color == -10092289 then
            currentBet = startBet
            endGame = true
            exitProhibit = false
        end
        if string.match(text, "Число %d+! К сожалению, Ваша ставка не сыграла") and color == -1347440641 then
            currentBet = currentBet * 2
            endGame = true
            exitProhibit = false
     
    end
end


Код выше делает так, что ставка на одной и той же клетке увеличивается в 2 раза при появлении надписи "Число %d+! К сожалению, Ваша ставка не сыграла", но мне нужно что она при появлении этой надписи меняла клетку игры, с черное на красное и наоборот, то есть нужна проверка на какой клетке стоит ставка, и в зависимости от этого жать на опеределенный текстрав, и ставить туда x2 ставку, вот какую проверку я сделал, но не знаю как связать
Код:
local red = true -- в начало
if red = false then
sampSendClickTextdraw(2080)
red = true
end
 

EmilkaL

Известный
85
5
Умеет ли луа отсылать данные на сайт, те допустим есть массив из 5 чисел {UID,name,x,y,z} и есть сайт на который это нужно передать передать,где в дальнейшем оно обработается в php, веротянее всего, и передастся на фонт.
 

Tak

Известный
176
70
Умеет ли луа отсылать данные на сайт, те допустим есть массив из 5 чисел {UID,name,x,y,z} и есть сайт на который это нужно передать передать,где в дальнейшем оно обработается в php, веротянее всего, и передастся на фонт.
Да, умеет, вот
 

3kyfresh

Известный
10
5
Хеллоу) Как эмулировать прокрутку колессика мыши? или как проверить что оно было прокручено)) Заранее спасибо)
Если что нашел решение с помощью функции
getMousewheelDelta
 
Последнее редактирование:

deridane

Известный
7
0
Lua:
function ev.onSendChat(text)
    for key,val in pairs(array) do
        if text:find(val) then
            text:match((val)) = "Плохой человек"
        end

    end
end
Это так работает? Если нет, то как это можно заменить? ( мне нужно заменять конкретные слова, которые я пишу)
[ML] (error) script.lua: ...TA San Andreas(main)\moonloader\sincebadboyingoodboy.lua:41: unexpected symbol near '='
[ML] (error) script.lua: Script died due to an error. (01A04A6C)
 
Последнее редактирование:

Tak

Известный
176
70
Lua:
function ev.onSendChat(text)
    for key,val in pairs(array) do
        if text:find(val) then
            text:match((val)) = "Плохой человек"
        end

    end
end
Это так работает? Если нет, то как это можно заменить?
[ML] (error) script.lua: ...TA San Andreas(main)\moonloader\sincebadboyingoodboy.lua:41: unexpected symbol near '='
[ML] (error) script.lua: Script died due to an error. (01A04A6C)
Что бы ответить на вопрос, как должно работать, нужно узнать как вы хотите, что бы оно работало 😂
А так, действия со строками тут
 
  • Нравится
Реакции: deridane

klk300

Участник
36
1
Хеллоу) Как эмулировать прокрутку колессика мыши? или как проверить что оно было прокручено)) Заранее спасибо)
Если что нашел решение с помощью функции
getMousewheelDelta
Если не ошибаюсь то прокрутка мышки вверх или вниз это считается как нажатие, посмотри в vkeys может что-то найдешь