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

Zatvornik

Новичок
29
1
Все очень просто! Есть библиотека https://blast.hk/threads/14624/ разбираешься, там есть хук onServerMessage, юзаешь его вот так

Lua:
local SE = require 'lib.samp.events'

function SE.onServerMessage(color, text)
if string.find(text, "/отчет") then

    end
end
а для максимально точной обработки, можешь кинуть строчку с чат лога и там уже разберемся ^^
Вот строка:
Код:
<SMS> (Los-Santos) Gavril_Price[41]: /отчет 25 минуты на посту Los-Santos / Ст.Сержант Зубенко
Я вот хотел сделать так, чтобы при виде слова "/отчет" копировалась вся фраза в переменную rert и после я смог её допустим как-то использовать. Банально хотябы просто вывести в чат. Следовательно получается что-то такое:


Lua:
local SE = require "lib.samp.events"
local slovo = "/отчет"

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

    sampRegisterChatCommand("tester", dtester)
    
    while true do
        wait(0)
end


function SE.onServerMessage(color, text)
if string.find(text, slovo) then
    text = newotchet
end
end

function dtester(arg)
sampAddChatMessage('Отчет сотрудника: ' .. newotchet, -1)
end
 

штейн

Известный
Проверенный
1,001
687
Вот строка:
Код:
<SMS> (Los-Santos) Gavril_Price[41]: /отчет 25 минуты на посту Los-Santos / Ст.Сержант Зубенко
Я вот хотел сделать так, чтобы при виде слова "/отчет" копировалась вся фраза в переменную rert и после я смог её допустим как-то использовать. Банально хотябы просто вывести в чат. Следовательно получается что-то такое:


Lua:
local SE = require "lib.samp.events"
local slovo = "/отчет"

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

    sampRegisterChatCommand("tester", dtester)
   
    while true do
        wait(0)
end


function SE.onServerMessage(color, text)
if string.find(text, slovo) then
    text = newotchet
end
end

function dtester(arg)
sampAddChatMessage('Отчет сотрудника: ' .. newotchet, -1)
end
Lua:
if text:find('/отчет') then
    newotchet = text:match('/отчет (.+)')
end
 

Zatvornik

Новичок
29
1
Lua:
if text:find('/отчет') then
    newotchet = text:match('/отчет (.+)')
end
Если мне приходит "/отчет прибыл на пост", то в переменную newotchet идёт только "прибыл на пост", а мне надо этот же текст, но вместе со словом "/отчет", т.к. я хочу записать в переменную скажем sng несколько слов(не только "/отчет").
 

cheremuxa

Известный
430
200
Можно ли выполнять sampRegisterChatCommand() не в main?
Вот код:
Lua:
if imgui.Button(u8'КнопачькаЪъЪъЪ') then -- в onDrawFrame
    sampRegisterChatCommand(comm, function() sampSendChat(text) end) -- В comm название команды. Например local comm = 'mycmd'
end
При нажатии на кнопку команда регистрируется, но при вводе команды в чат ничего не происходит. Вообще. Т.е. команда существует, но в чат не пишет.
Адекватно начинает работать только после перезагрузки скрипта.
Простите, но Wtf? Что не так? (Да, я тупой)
команду ввести в ковычках, не? 'comm'
Если мне приходит "/отчет прибыл на пост", то в переменную newotchet идёт только "прибыл на пост", а мне надо этот же текст, но вместе со словом "/отчет", т.к. я хочу записать в переменную скажем sng несколько слов(не только "/отчет").
Lua:
if text:find('/отчет') then
    newotchet = text:match('(.+)')
end
 
  • Злость
Реакции: FBenz

btrtmr

Участник
39
2
Не выводится текст с файла фпк.txt
Lua:
function imgui.OnDrawFrame()
    local x, y = getScreenResolution()
    if main_window_state.v then
        imgui.LockPlayer = true
        imgui.SetNextWindowPos(imgui.ImVec2(x/2, y/2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(900, 500), imgui.Cond.FirstUseEver)
        imgui.Begin(u8('FBI-SUPPORT'), main_window_state)
        imgui.BeginChild('left pane', imgui.ImVec2(200, 0), true)
        if not selected then selected = 1 end
        if imgui.Selectable(u8('Основное'), false) then selected = 1 end
        if imgui.Selectable(u8('Горячие клавиши скрипта'), false) then selected = 2 end
        if imgui.Selectable(u8('Основные команды скрипта'), false) then selected = 3 end
                if imgui.Selectable(u8('Федеральный Процессуальный Кодекс'), false) then selected = 4 end
                if imgui.Selectable(u8('Единый Процессуальный Кодекс'), false) then selected = 5 end
        imgui.EndChild()
        imgui.SameLine()
        imgui.BeginGroup()
                if selected == 2 then
                    imgui.Text(u8"Горячие клавиши скрипта:")
                    imgui.Spacing()
                  imgui.Text(u8"END - управление шлагбаумом") -- простой текст внутри этого окна
                    imgui.Text(u8"M - кричалка при задержании [на улице | в машине]") -- простой текст внутри этого окна
                end
            if selected == 3 then
                    imgui.Text(u8"Основные команды скрипта:")
                        imgui.Spacing()
                        imgui.Text(u8"/rn [Сообщение] - OOC сообщение в /r") -- простой текст внутри этого окна
                        imgui.Text(u8"/fn [Сообщение] - OOC сообщение в /f") -- простой текст внутри этого окна
                        imgui.Text(u8"/r [Сообщение] - IC сообщение в /r") -- простой текст внутри этого окна
                        imgui.Text(u8"/f [Сообщение] - IC сообщение в /f") -- простой текст внутри этого окна
                      imgui.Text(u8"/sus [ID] [Кол-во звёзд] [Причина] - объявить человека в розыск") -- простой текст внутри этого окна
                        imgui.Text(u8"/cuf [ID] - надеть наручники на человека") -- простой текст внутри этого окна
                        imgui.Text(u8"/uncuf [ID] - снять наручники с человека") -- простой текст внутри этого окна
                        imgui.Text(u8"/jail [ID] - передать человека в участок") -- простой текст внутри этого окна
                        imgui.Text(u8"/issue [ID] - выдать человеку пропуск в здание МВД") -- простой текст внутри этого окна
                        imgui.Text(u8"/udost [ID] - предъявить удостоверение человеку") -- простой текст внутри этого окна
                        imgui.Text(u8"/driver [ID] [Причина] - аннулировать права на вождение") -- простой текст внутри этого окна
                        imgui.Text(u8"/inspect [ID] - провести обыск человеку") -- простой текст внутри этого окна
                        imgui.Text(u8"/inc [ID] - усадить человека в автомобиль") -- простой текст внутри этого окна
                        imgui.Text(u8"/hold [ID] - вести человека перед собой") -- простой текст внутри этого окна
                        imgui.Text(u8"/clear [ID] [Причина] - снять розыск с человека") -- простой текст внутри этого окна
                        imgui.Text(u8"/uninvite [ID] [Причина] - уволить сотрудника") -- простой текст внутри этого окна
                        imgui.Text(u8"/prava - зачитать права") -- простой текст внутри этого окна
                        imgui.Text(u8"/doprosprava - зачитать права для допроса") -- простой текст внутри этого окна
                end
                if selected == 4 then
                    local FileRead
                    FileRead = io.open(getWorkingDirectory() .. '/FBI-Support/фпк.txt', 'r')
                    local Read
                    Read = FileRead:read("*a")
                end
        -- ...
                imgui.EndGroup()
        imgui.End()
    end

end
 

Fyger

Потрачен
963
418
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ку, чёт мои руки из жопы снова сломали скрипт, как только активирую vr.v я не могу выключить окно имгуи, на чит-код не реагирует, нажму на крестик будет краш. В чём дело? Как я понял это что то связанное с задержкой
Lua:
local imgui = require 'imgui'
local encoding = require 'encoding'
local inicfg = require 'inicfg'
local hook = require 'lib.samp.events'
local bNotf, notf = pcall(import, "imgui_notf.lua")
encoding.default = 'CP1251'
u8 = encoding.UTF8

local mainIni = inicfg.load({
config =
{
lic = false,
trade = false,
tlf = false,
arm = false,
msk = false,
smk = false,
time = false,
lock = false,
jlock = false,
fcar = false,
recar = false,
key = false,
vr = false,
aut = false,
abc = false,
waitb = false,
acd = false,
mbc = false,
at = false,
setwaiter = 0,
}
}, "ARZ HotKeys")

local lic = imgui.ImBool(mainIni.config.lic)
local trade = imgui.ImBool(mainIni.config.trade)
local tlf = imgui.ImBool(mainIni.config.tlf)
local arm = imgui.ImBool(mainIni.config.arm)
local msk = imgui.ImBool(mainIni.config.msk)
local smk = imgui.ImBool(mainIni.config.smk)
local time = imgui.ImBool(mainIni.config.time)
local lock = imgui.ImBool(mainIni.config.lock)
local jlock = imgui.ImBool(mainIni.config.jlock)
local fcar = imgui.ImBool(mainIni.config.fcar)
local recar = imgui.ImBool(mainIni.config.recar)
local key = imgui.ImBool(mainIni.config.key)
local vr = imgui.ImBool(mainIni.config.vr)
local aut = imgui.ImBool(mainIni.config.aut)
local abc = imgui.ImBool(mainIni.config.abc)
local waitb = imgui.ImBool(mainIni.config.waitb)
local acd = imgui.ImBool(mainIni.config.acd)
local at = imgui.ImBool(mainIni.config.at)
local setwaiter = imgui.ImInt(10000)
smsbc = imgui.ImBuffer("EZ car", 100)
chatsms = imgui.ImBuffer(u8'/vr ', 100)
local mbc = imgui.ImBool(mainIni.config.mbc)

local status = inicfg.load(mainIni, 'ARZ HotKeys.ini')
if not doesFileExist('moonloader/config/ARZ HotKets.ini') then inicfg.save(mainIni, 'ARZ HotKeys.ini') end

local main_window_state = imgui.ImBool(false)
function imgui.OnDrawFrame()
    if main_window_state.v then
      imgui.SetNextWindowSize(imgui.ImVec2(700, 520), imgui.Cond.FirstUseEver)
      if not window_pos then
            ScreenX, ScreenY = getScreenResolution()ScreenX, ScreenY = getScreenResolution()
            imgui.SetNextWindowPos(imgui.ImVec2(ScreenX / 2 , ScreenY / 2), imgui.Cond.FirsUseEver, imgui.ImVec2(0.5, 0.5))
        end
      imgui.Begin('By Fyger | ARZ HotKeys | for Bavles gang empire', main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar)
      imgui.Text("Vk Author: @mq228_suqa1488")
      imgui.BeginChild("##g_sexbar", imgui.ImVec2(300, 120), true, imgui.WindowFlags.NoScrollbar)
      imgui.Checkbox(u8"Показ лицензий ближайшему игроку", lic)
      imgui.SameLine()
      imgui.TextQuestion(u8'При нажатии клавиш ALT + 1 вы покажите лицензии ближайшему игроку')
      imgui.Checkbox(u8"Торговля ближайшему игроку", trade)
      imgui.SameLine()
      imgui.TextQuestion(u8'При нажатии клавиш ALT + 2 вы предложите торговлю ближайшему игроку')
      imgui.Checkbox(u8"Телефон", tlf)
      imgui.SameLine()
      imgui.TextQuestion(u8"При нажатии на клавишу P у вас откроется телефон" )
      imgui.EndChild()
      imgui.BeginChild("##gay_bar", imgui.ImVec2(300, 120), true, imgui.WindowFlags.NoScrollbar)
      imgui.Checkbox(u8"Бронежилет", arm)
      imgui.SameLine()
      imgui.TextQuestion(u8"При сочетании клавиш ARM у вас появится бронежилет")
      imgui.Checkbox(u8"Маска", msk)
      imgui.SameLine()
      imgui.TextQuestion(u8"При сочетании клавиш MASK у вас появится маска")
      imgui.Checkbox(u8"Сигарета", smk)
      imgui.SameLine()
      imgui.TextQuestion(u8"При сочетании клавиш SMK у вас появится сигарета")
      imgui.EndChild()
      imgui.BeginChild("##bar_bar", imgui.ImVec2(300, 120), true, imgui.WindowFlags.NoScrollbar)
      imgui.Checkbox(u8"Часы", time)
      imgui.SameLine()
      imgui.TextQuestion(u8"При сочетании клавиш EZ вы посмотрите на часы")
      imgui.Checkbox(u8"Закрытие транспорта", lock)
      imgui.SameLine()
      imgui.TextQuestion(u8"При нажатии на клавишу L вы закроете/откроете свой транспорт")
      imgui.Checkbox(u8"Закрытие аренды", jlock)
      imgui.SameLine()
      imgui.TextQuestion(u8"При сочитании клвиш  JL вы закроете/откроете свой арендованный транспорт")
      imgui.EndChild()
      if imgui.Button(u8'Сохранить настройки',imgui.ImVec2(150,65)) then
      mainIni.config.lic = lic.v
      mainIni.config.trade = trade.v
      mainIni.config.tlf = tlf.v
      mainIni.config.arm = arm.v
      mainIni.config.msk = msk.v
      mainIni.config.smk = smk.v
      mainIni.config.time = time.v
      mainIni.config.lock = lock.v
      mainIni.config.jlock = jlock.v
      mainIni.config.fcar = fcar.v
      mainIni.config.recar = recar.v
      mainIni.config.key = key.v
      mainIni.config.vr = vr.v
      mainIni.config.setwaiter = setwaiter.v
      mainIni.config.aut = aut.v
      mainIni.config.abc = abc.v
      mainIni.config.waitb = waitb.v
      mainIni.config.acd = acd.v
      mainIni.config.mbc = mbc.v
      mainIni.config.at = at.v
      inicfg.save(mainIni, 'ARZ HotKeys.ini')
      end
      imgui.SetCursorPos(imgui.ImVec2(325, 61))
      imgui.BeginChild("##ear_bar", imgui.ImVec2(350, 120), true, imgui.WindowFlags.NoScrollbar)
      imgui.Checkbox(u8"Заправить авто", fcar)
      imgui.SameLine()
      imgui.TextQuestion(u8"При сочитании клвишь  CAN вы заправите транспорт используя канистру")
      imgui.Checkbox(u8"Починить авто", recar)
      imgui.SameLine()
      imgui.TextQuestion(u8"При сочитании клвишь  RECAR вы почините транспорт используя ремкомплект")
      imgui.Checkbox(u8"Ключи от авто", key)
      imgui.SameLine()
      imgui.TextQuestion(u8"При нажатии на клавиру K вы вставите/заберете ключи")
      imgui.EndChild()
      imgui.SetCursorPos(imgui.ImVec2(325, 189))
      imgui.BeginChild("##g_leftbar", imgui.ImVec2(350, 150), true, imgui.WindowFlags.NoScrollbar)
      imgui.Checkbox(u8"Авто скип ответа на репорт", aut)
      imgui.SameLine()
      imgui.TextQuestion(u8"Как только скрипт увидит ответ администратора он пропустит диалог")
      imgui.Checkbox(u8"Реклама в вип-чат", vr)
      imgui.InputText(u8"Сообщение", chatsms)
      imgui.SameLine()
      imgui.TextQuestion(u8"Это сообщение будет писатся в вип-чат с установленной вами задержкой")
      imgui.SliderInt('Wait', setwaiter, 10000, 30000)
      imgui.SameLine()
      imgui.TextQuestion(u8"10000 - 10с, указывается в милисекундах")
      imgui.EndChild()
      imgui.SetCursorPos(imgui.ImVec2(325, 348))
      imgui.BeginChild("##g_pftbar", imgui.ImVec2(350, 160), true, imgui.WindowFlags.NoScrollbar)
      imgui.Checkbox(u8"Авто закрытие дверей авто", acd)
      imgui.SameLine()
      imgui.TextQuestion(u8"Как только скрипт увидит что вы словили авто по госсу он автоматически закроет двери авто")
      imgui.Checkbox(u8"Сообщение после покупки авто", mbc)
      imgui.SameLine()
      imgui.TextQuestion(u8"Это сообщение отправится после покупки авто, по умолчанию стоит EZ car")
      imgui.InputText(u8"Сообщение", smsbc)
      imgui.Checkbox(u8"Авто тайм после ловли", at)
      imgui.SameLine()
      imgui.TextQuestion(u8"После удачной ловли скрипт сам пропишет /time с отыгровкой")
      imgui.EndChild()
      imgui.SetCursorPos(imgui.ImVec2(175, 445))
      if imgui.Button(u8"Перезагрузить скрипт", imgui.ImVec2(140,65)) then
            thisScript():reload()
        end
     end
   imgui.End()
end
function main()
    while not isSampAvailable() do wait(100) end
    print("По всем багам писать Автору: https://vk.com/mq228_suqa1488")
    sampRegisterChatCommand('fh', function(num)
    if num ~= nil then
        sampSendChat('/findihouse '..num)
        end
    end)
      notf.addNotification("Скрипт был успешно загружен", 5, 1)
      while true do
      wait(0)
    if lic.v and wasKeyPressed(0x31) and isKeyDown(0x12) then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if id then
                    sampSendChat('/showskill '..id)
                end
            end
    if trade.v and wasKeyPressed(0x32) and isKeyDown(0x12) then
                local veh, ped = storeClosestEntities(PLAYER_PED)
                local _, id = sampGetPlayerIdByCharHandle(ped)
                if _ then
                    sampSendChat('/trade '..id)
                end
            end
    if tlf.v and wasKeyPressed(0x50) and not sampIsCursorActive() then
        sampSendChat("/phone")
    end
    if arm.v then
        if testCheat("arm") and not sampIsChatInputActive() then
            sampSendChat("/me используя магию надел бронежилет")
            sampSendChat("/armour")
        end
    end
    if msk.v then
        if testCheat("mask") and not sampIsCursorActive() then
            sampSendChat("/mask")
        end
    end
    if time.v then
        if testCheat("ez") and not sampIsCursorActive() then
            sampSendChat("/me взглянул на часы с гравировкой •Бан по причине пидорас• ")
            sampSendChat("/time")
             wait(1200)
            sampSendChat ("/do На часах  "..os.date('%H:%M:%S'))
        end
    end
    if vr.v then
        sampSendChat(u8:decode(chatsms.v))
        wait(setwaiter.v)
    end    
    if lock.v and not sampIsCursorActive() then
        if testCheat("l") then
            sampSendChat("/lock")
        end
    end
    if jlock.v and not sampIsCursorActive() then
        if testCheat("jl") then
            sampSendChat("/jlock")
        end
    end
    if fcar.v and not sampIsCursorActive() then
        if testCheat("can") then
            sampSendChat("/fillcar")
        end
    end
    if testCheat("eda") then
        sampSendClickTextdraw(673)
    end
    if recar.v and not sampIsCursorActive() then
        if testCheat("recar") then
            sampSendChat("/repcar")
        end
    end
    if key.v and not sampIsCursorActive() then
        if testCheat("k") then
            sampSendChat("/key")
        end
    end
    if testCheat("RR") and not sampIsCursorActive() then
        main_window_state.v = not main_window_state.v
       end
       imgui.Process = main_window_state.v
       end
end
function hook.onServerMessage(color, text)
  if acd.v then
        if text:find("Поздравляем! Теперь этот транспорт принадлежит вам!") and not text:find('говорит') and not text:find('- |') then
            sampSendChat('/lock')
        end
   end
   lua_thread.create(function()
     if mbc.v then
           if text:find("Поздравляем! Теперь этот транспорт принадлежит вам!") and not text:find('говорит') and not text:find('- |') then
               wait(500)
               sampSendChat(u8:decode(smsbc.v))
            end
        end
    end)
    lua_thread.create(function()
        if at.v then
            if text:find("Поздравляем! Теперь этот транспорт принадлежит вам!") or text:find("(.-)Поздравляю! Теперь этот дом ваш!")  and not text:find('говорит') and not text:find('- |') then
                sampSendChat("/me взглянул на часы с гравировкой •Топ ловец•")
                sampSendChat("/time")
                wait(1200)
                sampSendChat ("/do На часах  "..os.date('%H:%M:%S'))
                end
            end
        end)
end
function hook.onShowDialog(dialogId, dialogStyle, dialogTitle, okButtonText, cancelButtonText, dialogText)
    if aut.v then
       if dialogId == 1333 then
            setVirtualKeyDown(13, false)
        end
       if dialogId == 1332 then
            setVirtualKeyDown(13, false)
        end
    end
    if tlf.v then
        if dialogId == 1000 then
            setVirtualKeyDown(13,false)
        end
    end
end

function apply_custom_style()
    if not state then
  imgui.SwitchContext()
  local style = imgui.GetStyle()
   local colors = style.Colors
   local clr = imgui.Col
   local ImVec4 = imgui.ImVec4
   local ImVec2 = imgui.ImVec2
     style.WindowPadding = ImVec2(15, 15)
     style.WindowRounding = 5.0
     style.FramePadding = ImVec2(5, 5)
     style.FrameRounding = 4.0
     style.ItemSpacing = ImVec2(12, 8)
     style.ItemInnerSpacing = ImVec2(8, 6)
     style.IndentSpacing = 25.0
     style.ScrollbarSize = 15.0
     style.ScrollbarRounding = 9.0
     style.GrabMinSize = 5.0
     style.GrabRounding = 3.0

     colors[clr.Text] = ImVec4(0.80, 0.80, 0.83, 1.00)
     colors[clr.TextDisabled] = ImVec4(0.24, 0.23, 0.29, 1.00)
     colors[clr.WindowBg] = ImVec4(0.06, 0.05, 0.07, 1.00)
     colors[clr.ChildWindowBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
     colors[clr.PopupBg] = ImVec4(0.07, 0.07, 0.09, 1.00)
     colors[clr.Border] = ImVec4(0.80, 0.80, 0.83, 0.88)
     colors[clr.BorderShadow] = ImVec4(0.92, 0.91, 0.88, 0.00)
     colors[clr.FrameBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
     colors[clr.FrameBgHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
     colors[clr.FrameBgActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
     colors[clr.TitleBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
     colors[clr.TitleBgCollapsed] = ImVec4(1.00, 0.98, 0.95, 0.75)
     colors[clr.TitleBgActive] = ImVec4(0.07, 0.07, 0.09, 1.00)
     colors[clr.MenuBarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
     colors[clr.ScrollbarBg] = ImVec4(0.10, 0.09, 0.12, 1.00)
     colors[clr.ScrollbarGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
     colors[clr.ScrollbarGrabHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
     colors[clr.ScrollbarGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
     colors[clr.ComboBg] = ImVec4(0.19, 0.18, 0.21, 1.00)
     colors[clr.CheckMark] = ImVec4(0.80, 0.80, 0.83, 0.31)
     colors[clr.SliderGrab] = ImVec4(0.80, 0.80, 0.83, 0.31)
     colors[clr.SliderGrabActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
     colors[clr.Button] = ImVec4(0.10, 0.09, 0.12, 1.00)
     colors[clr.ButtonHovered] = ImVec4(0.24, 0.23, 0.29, 1.00)
     colors[clr.ButtonActive] = ImVec4(0.56, 0.56, 0.58, 1.00)
     colors[clr.Header] = ImVec4(0.10, 0.09, 0.12, 1.00)
     colors[clr.HeaderHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
     colors[clr.HeaderActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
     colors[clr.ResizeGrip] = ImVec4(0.00, 0.00, 0.00, 0.00)
     colors[clr.ResizeGripHovered] = ImVec4(0.56, 0.56, 0.58, 1.00)
     colors[clr.ResizeGripActive] = ImVec4(0.06, 0.05, 0.07, 1.00)
     colors[clr.CloseButton] = ImVec4(0.40, 0.39, 0.38, 0.16)
     colors[clr.CloseButtonHovered] = ImVec4(0.40, 0.39, 0.38, 0.39)
     colors[clr.CloseButtonActive] = ImVec4(0.40, 0.39, 0.38, 1.00)
     colors[clr.PlotLines] = ImVec4(0.40, 0.39, 0.38, 0.63)
     colors[clr.PlotLinesHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
     colors[clr.PlotHistogram] = ImVec4(0.40, 0.39, 0.38, 0.63)
     colors[clr.PlotHistogramHovered] = ImVec4(0.25, 1.00, 0.00, 1.00)
     colors[clr.TextSelectedBg] = ImVec4(0.25, 1.00, 0.00, 0.43)
     colors[clr.ModalWindowDarkening] = ImVec4(1.00, 0.98, 0.95, 0.73)
    end
end
apply_custom_style()

function imgui.TextQuestion(text)
    imgui.TextDisabled('(?)')
    if imgui.IsItemHovered() then
        imgui.BeginTooltip()
        imgui.PushTextWrapPos(450)
        imgui.TextUnformatted(text)
        imgui.PopTextWrapPos()
        imgui.EndTooltip()
    end
end
При закрытие на крестикПосмотреть вложение 34510
Актуально
не помогло
 

Zatvornik

Новичок
29
1
команду ввести в ковычках, не? 'comm'

Lua:
if text:find('/отчет') then
    newotchet = text:match('(.+)')
end
Теперь выводит всю строку, а не то что надо было первоначально: вывести фразу после "/отчет" вместе с с этой фразой. Сейчас же выводит и до фразы, и после.
 

ninjaWRD

Участник
71
54
Как вернуться к обратному диалогу? Надо, чтобы по нажатию кнопки 1 в диалоге 339, скрипт возвращался к диалогу 337. Как быть?
Lua:
if did[1] then
            if button == 1 and list == 5 then
                sampShowDialog(337, '{ED760E}'..script.dialog.tag.. ' |{FFFFFF} Информация ', '{FFFFFF}Здесь вы получите всю информацию о скрипте\n \n\t\t\t\t{ED760E}===== COMMANDS =====\n{FFFFFF}/uhf - открыть меню настроек скрипта\n/uhf_start - начать ловлю\n \n\t\t\t\t{ED760E}===== SEARCH HOUSE =====\n{FFFFFF}House Class - настроить класс дома, который вам нужно купить (можно настроить несколько)\nWait Search - задержка перед проверкой каждого дома\nRadius - радиус поиска домов (стандартно 260)\n \n\t\t\t\t{ED760E}===== TELEPORT =====\n{FFFFFF}OnFoot - телепорт с ног [on/off]\nInCar - телепорт в автомобиле [on/off]\nCloserHome - телепортироваться к самому ближайшему дому', '>>', 'x', 0)
            end
        end
        if did[2] then
            if button == 1 then
                sampShowDialog(339, script.dialog.tag, 'хуй', '<<', 'x', 0)
 
Последнее редактирование:

Zatvornik

Новичок
29
1
Помогите с регуляторкой.

Код:
slovo = "kick"

function SE.onServerMessage(color, text)
    if string.find(text, "<ADM> %((%d+) уровень%) (.*)%[(%d+)%]%: %/" .. slovo) then --поиск запроса на наказание
        nadovidat = string.match(text, "%[(%d+)%]%:%")
    end
end

Как выглядит строка:
Код:
<ADM> (1 уровень) Santi_Asala[228]: /kick 30 помеха/Santi

Что должно записаться в переменную nadovidat:
Код:
/kick 30 помеха/Santi
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,634
2,482
Помогите с регуляторкой.

Код:
slovo = "kick"

function SE.onServerMessage(color, text)
    if string.find(text, "<ADM> %((%d+) уровень%) (.*)%[(%d+)%]%: %/" .. slovo) then --поиск запроса на наказание
        nadovidat = string.match(text, "%[(%d+)%]%:%")
    end
end

Как выглядит строка:
Код:
<ADM> (1 уровень) Santi_Asala[228]: /kick 30 помеха/Santi

Что должно записаться в переменную nadovidat:
Код:
/kick 30 помеха/Santi
Lua:
local nadovidat  = text:match('<ADM> %(%d+ уровень%) .+: (.+)')
 

ninjaWRD

Участник
71
54
Как вернуться к обратному диалогу? Надо, чтобы по нажатию кнопки 1 в диалоге 339, скрипт возвращался к диалогу 337. Как быть?
Lua:
if did[1] then
            if button == 1 and list == 5 then
                sampShowDialog(337, '{ED760E}'..script.dialog.tag.. ' |{FFFFFF} Информация ', '{FFFFFF}Здесь вы получите всю информацию о скрипте\n \n\t\t\t\t{ED760E}===== COMMANDS =====\n{FFFFFF}/uhf - открыть меню настроек скрипта\n/uhf_start - начать ловлю\n \n\t\t\t\t{ED760E}===== SEARCH HOUSE =====\n{FFFFFF}House Class - настроить класс дома, который вам нужно купить (можно настроить несколько)\nWait Search - задержка перед проверкой каждого дома\nRadius - радиус поиска домов (стандартно 260)\n \n\t\t\t\t{ED760E}===== TELEPORT =====\n{FFFFFF}OnFoot - телепорт с ног [on/off]\nInCar - телепорт в автомобиле [on/off]\nCloserHome - телепортироваться к самому ближайшему дому', '>>', 'x', 0)
            end
        end
        if did[2] then
            if button == 1 then
                sampShowDialog(339, script.dialog.tag, 'хуй', '<<', 'x', 0)
хелп