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

#Rewzeisch

Известный
120
10
Можете написать поиск теста по этой строке

Vasa_Pupkin передал(- а) бандану Microsoft_Vantus
Пж, очень надо.

Думаю с этой статьей можно и самому сделать
 
  • Нравится
Реакции: HarlyCloud

F0RQU1N and

Известный
1,305
497
как узнать в скрипте мой ип?
Отправь хттп запрос на 2ип
Думаю с этой статьей можно и самому сделать
Нет, я пробовал
 
  • Нравится
Реакции: HarlyCloud

Domino

Участник
326
15
Как сделать таймер, чтобы после нажатия, например , клавиши 164 , на экране появлялся таймер, шёл 15 секунд, ппри этом было видно сколько остаётся и потом пропадал. И так по кругу. Закончился и ждёт снова нажатия клавиши.
 
  • Нравится
Реакции: HarlyCloud

ZAKO

Известный
43
25
Привет, ЛУАшники, есть вариант реализации маппинга с текстом? Как это делают на серверах. Нужно заспавнить текст.
 
  • Нравится
Реакции: HarlyCloud

Jesus McWood

Участник
76
35
Привет всем! Помогите пожалуйста. Надо сделать в скрипте отыгровку инвайта. Только зацкилить не получается. Отправляется 1 сообщения в чат. А остальные не хотят. Бинд в самом конце. А та-же помогите сделать что-бы надо было нажать на человека, только потом проиграется скрипт. Как в mvdhelper​
Lua:
script_name('GRP | LeadHelper')
script_authors("Jesus_Mironenko", "Hiyantan_Miyadzaki")
script_description('Новый биндер для Grand Role Play')
script_version('0.1')

require "lib.moonloader"
local keys = require "vkeys"

local tag = "{1E90FF}[LeadHelper]"
local main_color = 0x5A90CE
local main_color_text = "{1E90FF}"
local white_color = "{FFFFFF}"


function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end


    sampAddChatMessage(tag .. " {FFFFFF}Скрипт успешно загружен. Авторы: {1E90FF}Jesus_Mironenko {FFFFFF}и {1E90FF}Hiyantan_Miyadzaki.", 0xADFF2F)
  
  
  
    ---Команды скрипта---

    sampRegisterChatCommand("lh", cmd_lh)
    sampRegisterChatCommand("команды", cmd_command)
    sampRegisterChatCommand("linvite", cmd_linvite)
    sampRegisterChatCommand("luninvite", cmd_luninvite)
    sampRegisterChatCommand("lsetskin", cmd_lsetskin)
    sampRegisterChatCommand("lgnews", cmd_lgnews)
    sampRegisterChatCommand("loffuninvite", cmd_loffuninvite)
    sampRegisterChatCommand("lgiverank", cmd_lgiverank)
    sampRegisterChatCommand("lfwarn", cmd_lfwarn)
    sampRegisterChatCommand("lfunwarn", cmd_lfunwarn)
    sampRegisterChatCommand("lblacklist", cmd_lblacklist)
    sampRegisterChatCommand("lunblacklist", cmd_lunblacklist)
    sampRegisterChatCommand("lmap", cmd_lmap)
  

    while true do
        wait(0)

    end
end

function cmd_lh()
  
    sampShowDialog(1647, "Главное меню {FF0000}[В РАЗРАБОТКЕ!]", string.format("Команды \nЛекции \nО скрипте"), "Выбрать", "Закрыть", 2)
  
end

function cmd_command()

    sampShowDialog(1648, "Команды", string.format("{1E90FF}/linvite {FFFFFF}- принять в организацию \n{1E90FF}/luninvite {FFFFFF}- уволить из организации \n{1E90FF}/lsetskin {FFFFFF}- изменить скин \n{1E90FF}/lgnews {FFFFFF}- гос. новости \n{1E90FF}/loffuninvite {FFFFFF}- уволить оффлайн \n{1E90FF}/lgiverank {FFFFFF}- изменить ранг \n{1E90FF}/lfwarn {FFFFFF}- выдать выговор \n{1E90FF}/lfunwarn {FFFFFF}- снять выговор \n{1E90FF}/lblacklist {FFFFFF}- занести в чёрный список \n{1E90FF}/lunblacklist {FFFFFF}- вынести из чёрного  списка \n{1E90FF}/lmap {FFFFFF}- карта сотрудников \n\n\n{FFFFFF}Автор команд: {1E90FF}Jesus_Mironenko"), "Принять", "Закрыть", 0)                                                                                                                                                                                                                                             

end

function cmd_linvite()

    sampSendChat("/do В левой руке кейс.")
        wait(2000)
    sampSendChat("/me взял кейс в две руки, затем нажал на кнопку")
        wait(2000)
    sampSendChat("/do Кейс раскрылся.")
        wait(2000)
    sampSendChat("/me достал из кейса пакет с формой и бейджиком")
        wait(2000)
    sampSendChat("/do Пакет в руке.")
        wait(2000)
    sampSendChat("/todo В этом пакете Ваша форма и бейджик* передавая пакет человеку напротив")
        wait(2000)
    sampSendChat("/invite [ID]")
        wait(2000)
    sampSendChat("/me закрыл кейс обеими руками, затем взял кейс в левую руку")
        wait(2000)
    while true do
        wait(0)
    end
end
 

TWP

Участник
53
1
Народ, есть скрипт который в игре находит сообщения и пишит их в отдельный лог, вопрос - как сделать так чтобы он их вписывал в сайт какой-нибудь, или там в гугл таблицу вместо обычного .txt на компе?
 

HarlyCloud

Потрачен
238
67
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Помогите сделать так чтоб когда открывался диалог от сервера и я знаю его ид нажмалась кнопка, я использовал функцию но забыл(
 

HarlyCloud

Потрачен
238
67
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Шо не так? Крашит
Lua:
mhp = imgui.ImInt(1)
if sHP.v then
        local ex, ey = getScreenResolution()
        imgui.SetNextWindowSize(imgui.ImVec2(234, 0), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2(ex / 2 - 200, ey / 2 - 200), imgui.Cond.FirstUseEver)
        imgui.SliderInt('', mhp, 0, 100)
        if imgui.Button(u8'Подвердить') then
            sampSendChat('/sethp '..mhp.v)
        end
        imgui.End()
    end
imgui.Begin(u8'Установка HP', sHP, 2)
Попробуй добавить
 

Angr

Известный
291
99
как узнать в скрипте мой ип?

Можно и через downloadUrlToFile, еще проще будет

Lua:
local request = require 'requests'
function checkip()
    local result, response = pcall(request.get, "http://ip-api.com/json/")
    if result then
        json_data = response.json()
        return json_data.query
    end
end
 
Последнее редактирование:

lorgon

Известный
656
272
Код:
if checkbox.v then music = true else music = false end
Есть пример с обработкой тегов в тексте?
(Как в бадло хелперах(мвдхелпер и т.д))
 
Последнее редактирование: