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

Akionka

akionka.lua
Проверенный
742
500
Есть где-то гайды или просто инфа по работе с sampev?
 

Curtis

Участник
282
10
Lua:
if imgui.Button(u8("Отправить")) then
    sampAddChatMessage("• {FF0000}Внимание! {FFFFFF}Нажмите {35dd2f}Y{FFFFFF}, отказ - {FF0000}N.", -1)
    lua_thread.create(function()
        repeat
            wait(0)
        until not isKeyJustPressed(0x59) or not isKeyJustPressed(0x4E)

        if isKeyJustPressed(0x59) then -- Y
            -- действие                                
        elseif isKeyJustPressed(0x4E) then -- N
            -- отказ                              
        end
    end)
end
Вот код. После нажатия на кнопку, есть 2 пути, отказ и продолжить. КОгда я нажимаю на клавиши ничего не происходит. В чем проблема?
Актуально
 

Dark_Knight

Me, me and me.
Друг
4,067
2,081
Хорошо. Получается, что всем юзерам скрипта придется обновлять IE?
По идеи, да. Но это просто предположение. Увы, я твой не видел и не знаю, как он работает. Сужу чисто по своему опыту, который в твоем случае, может быть ошибочным.
 
  • Нравится
Реакции: moreveal

Eugene Crabs

Активный
544
30
я немного не понял можно премер код. за ранее спасибо
Еще проверку на персонажа не забудь сделать. Если это твой или серверный - хэндл равен "1" (Или "-1", точно не помню)
--float distance = getDistanceBetweenCoords2d(float x1, float y1, float x2, float y2)
 

Мурпху

Активный
211
39
Почему не робит?
Lua:
local requests = require('requests')
function main()
    repeat wait(0) until isSampAvailable()
    local request = requests.get('https://pastebin.com/raw/b9ers9sb')
    local nick = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))
    local function res()
        for n in request.text:gmatch('[^\r\n]+') do
            if nick:find(n) then return true end
        end
        return false
    end
    if not res() then error('Скрипт не привязан. Покупать у него: vk.com/idneznay') end
    sampAddChatMessage('{FFCD0A}[WhoIs]:Скрипт загружен. {FFFFFF}Автор: Skezz', -1)
        wait(2000)
        sampRegisterChatCommand('whois', whois)
        while true do
        wait(0)
    end
end
 

kizn

О КУ)))
Всефорумный модератор
2,405
2,060
Почему не робит?
Lua:
local requests = require('requests')
function main()
    repeat wait(0) until isSampAvailable()
    local request = requests.get('https://pastebin.com/raw/b9ers9sb')
    local nick = sampGetPlayerNickname(select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)))
    local function res()
        for n in request.text:gmatch('[^\r\n]+') do
            if nick:find(n) then return true end
        end
        return false
    end
    if not res() then error('Скрипт не привязан. Покупать у него: vk.com/idneznay') end
    sampAddChatMessage('{FFCD0A}[WhoIs]:Скрипт загружен. {FFFFFF}Автор: Skezz', -1)
        wait(2000)
        sampRegisterChatCommand('whois', whois)
        while true do
        wait(0)
    end
end
а где функция error?
 

Petr_Sergeevich

Известный
Проверенный
707
296
  • Эм
Реакции: The Spark

rayprod

Участник
96
1
Можно ли это как то создать?

в случае столкновения или удара именно кулаком по крузеру делается скриншот, автоматически.
 

LelHack

Известный
456
124
Как вычислить корды этой херни? Можно функцию это вроде бы не пикап хз может чекпоинт
 

Вложения

  • sa-mp-019.png
    sa-mp-019.png
    435 KB · Просмотры: 81

D.Makarov

Участник
146
3
Помогите сделать так что бы когда я прописывал команду и айди человека был таргет на него
Lua:
function main()
    while not isSampAvailable() do wait(100) end
    while true do
        wait(0)
        local valid, ped = getCharPlayerIsTargeting(PLAYER_HANDLE)
        if valid and doesCharExist(ped) then
            local result, id = sampGetPlayerIdByCharHandle(ped)
                lua_thread.create(function()
                    sampSendChat("/showpass "..id)
                    wait(2000)
                    sampSendChat("/kiss "..id)
                    wait(2000)
                    sampSendChat("/showlic "..id)
                    wait(1000)
                    sampSendChat("/showpass "..id)
                    wait(1000)
                    sampSendChat("/kiss "..id)
                    wait(2000)
                    sampSendChat("/showskill "..id)
                    wait(2000)
                    sampSendChat("/kiss "..id)
                end)
            end
        end
        end