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

Vlad Horii

Известный
Проверенный
310
171
Как сделать проверку, на какой дистанции находится игрок?
Вот код, нужно добавить проверку.
Lua:
for i = 0, sampGetMaxPlayerId(true) do
local result, handle = sampGetCharHandleBySampPlayerId(i)
if result and doesCharExist(handle) then
 

kawa operand

перерывпятьминут
602
333
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
через формулу длины вектора по двум точкам (геометрия 9 класс) считай и полученная хуйня будет расстоянием от тебя до хуйни какой нибудь
 
  • Нравится
Реакции: AnWu

imring

Ride the Lightning
Всефорумный модератор
2,355
2,517
через формулу длины вектора по двум точкам (геометрия 9 класс) считай и полученная хуйня будет расстоянием от тебя до хуйни какой нибудь
:facepalm2:
Lua:
float distance = getDistanceBetweenCoords2d(float x1, float y1, float x2, float y2)  -- 0509
float distance = getDistanceBetweenCoords3d(float x1, float y1, float z1, float x2, float y2, float z2)  -- 050A
 

imring

Ride the Lightning
Всефорумный модератор
2,355
2,517
Как сделать шоб на русском писало ?
Lua:
week_rus = { ['Monday'] = 'Понедельник', ['Tuesday'] = 'Вторник', ['Wednesday'] = 'Среда', ['Thursday'] = 'Четверг', ['Friday'] = 'Пятница', ['Saturday'] = 'Субота', ['Sunday'] = 'Воскресенье'}

print(week_rus[os.date('%A', os.time())])
 
  • Нравится
Реакции: BlackKnigga и Ken Block

Ken Block

Известный
432
31
Как сделать что бы была автоактивация скрипта и писало в чат за 1 минуту до Pay Day хрень какуюнить ?
 

Qsany

Потрачен
464
147
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Lua:
wait(0)
    if getCurrentCharWeapon(playerPed) == 24 then

Как продолжить перечисление оружия
 

AnWu

Guardian of Order
Всефорумный модератор
4,690
5,199
Есть противопоказания к renderDrawBox? У моих тестеров после повторного показа не показываются боксы. Хотя у меня самого всё отлично рендерится.

Как сделать что бы была автоактивация скрипта и писало в чат за 1 минуту до Pay Day хрень какуюнить ?
Lua:
if os.date("%m") == 59 then
    sampAddChatMessage("AAAAAAAAAAAAAA", 0xAAAAAAAA)
end

Lua:
wait(0)
    if getCurrentCharWeapon(playerPed) == 24 then

Как продолжить перечисление оружия
Lua:
local weapons = {24, 64, 32, 18} -- Сюда все ид оружия
while true do
    wait(0)
    for _, v in ipairs(weapons)
        if getCurrentCharWeapon(playerPed) == v then
             sampAddChatMessage("AAAAAAAAAAAAAAAAA", 0xAAAAAAA)
        end
    end
end
 
Последнее редактирование модератором:

Qsany

Потрачен
464
147
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
@DonHomka
Ток тсс.. но я чутка переделываю для личного пользования скрипт deddosouro cbug..
Так вот хотелось бы добавить несколько видос ганов, вместо одного который там стоит (24 deagle)
Вот часть кода которая отвечает за это
Lua:
while true do
    wait(0)
    if getCurrentCharWeapon(playerPed) == 24 then
    if cfg.set.noCamRestore then
    if not isCharDead(playerPed) then cameraRestorePatch(true)
    else cameraRestorePatch(false) end end
        if isKeyDown(2) and isKeyJustPressed(cfg.set.secondarykey) then
            if cfg.set.autoScroll and getAmmoInClip() < 5 then giveWeaponToChar(playerPed, 24, 0) end
            while cfg.set.checkpt and getAmmoInClip() == 0 do wait(0) end
            wait(0)
            if cfg.set.randomMisses then
                if math.random(0, cfg.set.missChanceIs1to ) == 1 then
                    wait(math.random(17, 40) * 10)
                    setGameKeyState(18, 255)
                end
            else
                setCharAnimSpeed(playerPed, "python_fire", 1.337)
                setGameKeyState(17, 255)
                wait(55)
                setGameKeyState(6, 0)
                setGameKeyState(18, 255)
                setCharAnimSpeed(playerPed, "python_fire", 1.0)
                end
            end
        end
    end
end

суору не ругайся плез, я чисто для себя делаю :d
 

AnWu

Guardian of Order
Всефорумный модератор
4,690
5,199
@DonHomka
Ток тсс.. но я чутка переделываю для личного пользования скрипт deddosouro cbug..
Так вот хотелось бы добавить несколько видос ганов, вместо одного который там стоит (24 deagle)
Вот часть кода которая отвечает за это
Lua:
while true do
    wait(0)
    if getCurrentCharWeapon(playerPed) == 24 then
    if cfg.set.noCamRestore then
    if not isCharDead(playerPed) then cameraRestorePatch(true)
    else cameraRestorePatch(false) end end
        if isKeyDown(2) and isKeyJustPressed(cfg.set.secondarykey) then
            if cfg.set.autoScroll and getAmmoInClip() < 5 then giveWeaponToChar(playerPed, v, 0) end
            while cfg.set.checkpt and getAmmoInClip() == 0 do wait(0) end
            wait(0)
            if cfg.set.randomMisses then
                if math.random(0, cfg.set.missChanceIs1to ) == 1 then
                    wait(math.random(17, 40) * 10)
                    setGameKeyState(18, 255)
                end
            else
                setCharAnimSpeed(playerPed, "python_fire", 1.337)
                setGameKeyState(17, 255)
                wait(55)
                setGameKeyState(6, 0)
                setGameKeyState(18, 255)
                setCharAnimSpeed(playerPed, "python_fire", 1.0)
                end
            end
        end
    end
end

суору не ругайся плез, я чисто для себя делаю :d
Lua:
local weapons = {24, 24) -- 24 - deagle, 26 - shotgun
while true do
    wait(0)
    for _, k in ipairs(weapons) do
    if getCurrentCharWeapon(playerPed) == v then
    if cfg.set.noCamRestore then
    if not isCharDead(playerPed) then cameraRestorePatch(true)
    else cameraRestorePatch(false) end end
        if isKeyDown(2) and isKeyJustPressed(cfg.set.secondarykey) then
            if cfg.set.autoScroll and getAmmoInClip() < 5 then giveWeaponToChar(playerPed, v, 0) end
            while cfg.set.checkpt and getAmmoInClip() == 0 do wait(0) end
            wait(0)
            if cfg.set.randomMisses then
                if math.random(0, cfg.set.missChanceIs1to ) == 1 then
                    wait(math.random(17, 40) * 10)
                    setGameKeyState(18, 255)
                end
            else
                setCharAnimSpeed(playerPed, "python_fire", 1.337)
                setGameKeyState(17, 255)
                wait(55)
                setGameKeyState(6, 0)
                setGameKeyState(18, 255)
                setCharAnimSpeed(playerPed, "python_fire", 1.0)
                end
            end
        end
        end
    end
end
 
  • Нравится
Реакции: Qsany

trefa

Известный
Всефорумный модератор
2,097
1,231
Как проверить что какое то число делят на какое то число без остатка?
 

drags

Известный
Проверенный
155
207
Как узнать, что отправляется при клике на текстдрав?
 

_JeT_

Новичок
24
0
В чём может быть проблема? Скачал скрипт, ввожу /menutest - ничего не происходит, скрипт в папке moonloader.
 

Вложения

  • dialogTest.lua
    2.8 KB · Просмотры: 11

Bogach

Активный
558
27
Ребят, напомните пожалуйста, как файл циклом проверять, я запамятовал, вроде так? Или нет
Lua:
local bl = io.open("moonloader\\BlackList\\BlackList.txt","r")
 for line in bl:lines() do
 end