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

T1cKz

Известный
596
246
sampCloseCurrentDialogWithButton(1)
А зачем закрывать визуально открытый диалог через 1-ю кнопку?)
Если на него отправлен пакет о принятии?
Если он даже через 1 закроет, то один хрен выберет - шпаклёвку :thinking:
p.s. да я люблю падаебаца xD
 

ШPEK

Известный
1,476
524
Lua:
local sampev = require 'lib.samp.events'

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if dialogId == --[[ айди диалога]] then
        sampSendDialogResponse(--[[ айди диалога]], 1, 3, '')
    end
end


Хочешь предложить какую-то альтернативу анти-афк? Было бы очень интересно тебя выслушать.
Эта тема предназначена не для того чтобы подсказывать названия скриптов, а помогать по коду
 

T1cKz

Известный
596
246
Есть ли такая функция в ImGUI, например, если навестись, то высвечивает какой-то текст?
Типа как помощь - навёл мышкой - в появилось небольшое окошко с текстом, отвёл - пропало
 

#kerosin

🔥
Проверенный
241
152
Есть ли такая функция в ImGUI, например, если навестись, то высвечивает какой-то текст?
Типа как помощь - навёл мышкой - в появилось небольшое окошко с текстом, отвёл - пропало
Lua:
imgui.TextDisabled("(?)")
if imgui.IsItemHovered() then
   imgui.BeginTooltip()
   imgui.TextUnformatted("help")
   imgui.EndTooltip()
end
 
  • Нравится
Реакции: T1cKz

Aralone

Участник
30
5
Подскажите, как исправить? Указал строчку с ошибкой в конце кода

Lua:
[string "DEBUG = true..."]:104: '}' expected (to close '{' at line 102) near 'consecC'

Lua:
DEBUG = true
local function debug (message)
  if DEBUG then
    print(message)
  end
end

constonants = {
  "a","b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"
}
vowels = {
  "a","e","i","o","u","y"
}
doubles = {
   "b","d","e","f","g","k","l","n","p","t"
}
goesToC = {
  ["a"]={"b","c","d","f","g","k","l","m","n","p","q","r","s","t","z"},
  ["b"]={"l","r"},
  ["c"]={"h","l","r"},
  ["d"]={"r","w","y"},
  ["e"]={"b","d","g","l","m","n","r","t","v","x","z"},
  ["f"]={"l"},
  ["g"]={"h","r"},
  ["i"]={"d","g","k","l","m","n","p","t","z"},
  ["k"]={"l","n","r"},
  ["l"]={"p","t","v","y"},
  ["m"]={"n"},
  ["n"]={"g","k","t"},
  ["o"]={"b","c","d","g","k","l","m","n","p","r","s","t","w","z"},
  ["p"]={"h","l","y"},
  ["r"]={"v"},
  ["s"]={"h","k","l","t"},
  ["t"]={"h","l","r","w"},
  ["u"]={"b","d","g","l","m","n","p","r","t","z"},
  ["v"]={"l","r"},
  ["w"]={"n","r"},
  ["x"]={"y"},
  ["y"]={"k","n","v"}
}
goesToV = {
  ["a"]={"i"},
  ["b"]={"a","e","i","o"},
  ["c"]={"e","o"},
  ["d"]={"a","i","o"},
  ["e"]={"a","e","u"},
  ["f"]={"a","i","o"},
  ["g"]={"a","e","o","u"},
  ["h"]={"a","i","o"},
  ["i"]={"e","o"},
  ["j"]={"a","e","i","o"},
  ["k"]={"a","e","i","o"},
  ["l"]={"a","e","i","o","u"},
  ["m"]={"a","e","i"},
  ["n"]={"e","i","o"},
  ["o"]={"a","e","i"},
  ["p"]={"a","i","o","u"},
  ["q"]={"u"},
  ["r"]={"a","e","i","o"},
  ["s"]={"a","e","o"},
  ["t"]={"e","i","o"},
  ["u"]={"e"},
  ["v"]={"a","e","i","o"},
  ["w"]={"a","e","i","o"},
  ["x"]={"a","e"},
  ["y"]={"e","o"},
  ["z"]={"a","e","o"}
}
sequences = {
  ["c"]={"hr"},
  ["d"]={"st"},
  ["f"]={"th"},
  ["g"]={"yp", "yps"},
  ["k"]={"yl"},
  ["l"]={"ly", "th", "dr"},
  ["n"]={"dr", "ky", "kr"},
  ["p"]={"py"},
  ["q"]={"ui", "ue"},
  ["r"]={"ry", "th", "ch", "st"},
  ["s"]={"sy", "yl"},
  ["t"]={"tr", "hs", "hr"},
  ["w"]={"ls"},
  ["x"]={"yl", "yr"}
}
incompat = {
  ["b"]={"j", "k", "q", "s", "z"},
  ["c"]={"c", "f", "g", "h", "j", "q"},
  ["d"]={"c", "h", "j", "p", "q", "w", "z"}
}
banned = {
  "fap"
}

rand = math.random

function choice (list)
  return list[rand(1, #list)]
end

Generator = {}
function Generator:new ()
  init = {
    name = choice({choice(constonants), choice(vowels)}) -- здесь
    consecC = 0
    consecV = 0
  }
 
end
 
Последнее редактирование:

madrasso

Потрачен
883
324
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
как сделать проверку, появился ли чек поинт? ( в цикле )
 

SAMP.ASI

Известный
223
53
Вылетает ексепшон при нажатии Х (открытии окна)

Lua:
local imgui = require 'imgui'
local key = require 'vkeys'
local notf = import 'imgui_notf.lua'

local encoding = require 'encoding'
encoding.default = 'CP1251'

local notf_live = 3
local notf_cunt = 1

local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then
    imgui.SetNextWindowSize(imgui.ImVec2(150, 200), imgui.Cond.FirstUseEver)

    imgui.Begin(u8'Окно', main_window_state)
    if imgui.Button(u8'Тест уведомления') then
      notf.addNotification(string.format("Уведомление #%d\n\n\nВам повестка!", notf_cunt), notf_live)
      notf_cunt = notf_cunt + 1
    end
    imgui.End()
  end
end

function main()
  while true do
    wait(0)
    if wasKeyPressed(key.VK_X) then
        main_window_state.v = not main_window_state.v
    end
    imgui.Process = main_window_state.v
  end
end
 

Patrickkk

Участник
162
19
Вылетает ексепшон при нажатии Х (открытии окна)

Lua:
local imgui = require 'imgui'
local key = require 'vkeys'
local notf = import 'imgui_notf.lua'

local encoding = require 'encoding'
encoding.default = 'CP1251'

local notf_live = 3
local notf_cunt = 1

local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then
    imgui.SetNextWindowSize(imgui.ImVec2(150, 200), imgui.Cond.FirstUseEver)

    imgui.Begin(u8'Окно', main_window_state)
    if imgui.Button(u8'Тест уведомления') then
      notf.addNotification(string.format("Уведомление #%d\n\n\nВам повестка!", notf_cunt), notf_live)
      notf_cunt = notf_cunt + 1
    end
    imgui.End()
  end
end

function main()
  while true do
    wait(0)
imgui.Process = main_window_state.v
    if wasKeyPressed(key.VK_X) then
        main_window_state.v = not main_window_state.v
    end
   
  end
end

Lua:
local imgui = require 'imgui'
local key = require 'vkeys'
local notf = import 'imgui_notf.lua'

local encoding = require 'encoding'
encoding.default = 'CP1251'

local notf_live = 3
local notf_cunt = 1

local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
  if main_window_state.v then
    imgui.SetNextWindowSize(imgui.ImVec2(150, 200), imgui.Cond.FirstUseEver)

    imgui.Begin(u8'Окно', main_window_state)
    if imgui.Button(u8'Тест уведомления') then
      notf.addNotification(string.format("Уведомление #%d\n\n\nВам повестка!", notf_cunt), notf_live)
      notf_cunt = notf_cunt + 1
    end
    imgui.End()
  end
end

function main()
  while true do
    wait(0)
imgui.Process = main_window_state.v
    if wasKeyPressed(key.VK_X) then
        main_window_state.v = not main_window_state.v
    end
   
  end
end