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

Schizophrenic

Новичок
1
0
Здравствуйте, дорогие скриптеры! Я чайник в языке программировании LUA, и в языках в общем, но занялся этим совсем недавно. С помощью найденных источников я нашёл скрипты, по которым можно сделать бота. Немного разобравшись с этим, я сделал подходящего для себя бота. Эммулировав клавиатуру SHIFT в боте, у меня работает CLEO спидхак(как и задумывалось), но, получается так, что у меня теперь два файла для работы моего бота - это Lua(bot) и Cleo(speedhack). Перейдём к сути - я хочу этот самый скрип с Cleo перенести в Lua, тем самым, чтобы мой бот был одним файлом. Прошу помочь мне в этом, ибо я не шарю, а так, наглядно рассмотрю. Вот само Cleo:
 

Вложения

  • SH-SHIFT.cs
    18 KB · Просмотры: 7

seruj22048

Участник
74
6
как можно записать данные введенные в диалоге? function q.onSendDialogResponse(id, _, _, _, input) if id == 1 then password = input end end и если print(password) то ничего не выводит
 

ShuffleBoy

Известный
Друг
753
425
Неа, все так-же не работает
Лог скинь
Ребят, подскажите адекватную конструкцию "бинда" клавиш. Т.е. есть несколько клавиш (в т.ч. сочетание клавиш), при нажатии которых происходят определенные действия (выполняется код). А то циклом с KeyPress не оч это все делать. Другой вариант есть?
Lua:
if wasKeyPressed(int key) and wasKeyPressed(int key) and wasKeyPressed(int key) then
    --code
End
 
Последнее редактирование модератором:

Neak

Известный
76
20
Lua:
require 'lib.moonloader'
g = math.random(50, 85)

function main()
while not isSampAvailable() do wait(100) end
sampRegisterChatCommand("td", textdraw)
while true do wait(0)
if act then
if sampTextdrawIsExists(3082) then
wait(g)
sampSendClickTextdraw(3082)
end
end
end
end

function textdraw()
if not act then
act = true
sampAddChatMessage('Activated', -1)
else
act = false
sampAddChatMessage('Deactivated', -1)
end
end
Парни, помогите, почему не кликает на текстдрав?
 

AnWu

https://t.me/anwublog
Всефорумный модератор
4,761
5,368
Lua:
require 'lib.moonloader'
g = math.random(50, 85)

function main()
while not isSampAvailable() do wait(100) end
sampRegisterChatCommand("td", textdraw)
while true do wait(0)
if act then
if sampTextdrawIsExists(3082) then
wait(g)
sampSendClickTextdraw(3082)
end
end
end
end

function textdraw()
if not act then
act = true
sampAddChatMessage('Activated', -1)
else
act = false
sampAddChatMessage('Deactivated', -1)
end
end
Парни, помогите, почему не кликает на текстдрав?
а тд точно доступен для клика??