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

artie

Участник
70
20
можете пожалуйста помочь чтобы при нажатии на X писался текст в чат, почему-то не работает это:
Lua:
function main()
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('dialog', function()
        dialog = not dialog
        if dialog then
            sampAddChatMessage("{ffb400}[Dialog]{FFFFFF} Скрипт включен.", -1)
        else
            sampAddChatMessage("{ffb400}[Dialog]{FFFFFF} Скрипт выключен.", -1)
        end
    end)
    sampRegisterChatCommand('gpso', function()
        falsegps = true
        sampSendChat('/gps')
        sampSendDialogResponse(25305, 1, 41, nil)
        lua_thread.create(function()
            wait(300)
            falsegps = false
        end)
    end)
    sampRegisterChatCommand('gpsc', function()
        chargegps = true
        sampSendChat('/gps')
        sampSendDialogResponse(25305, 1, 30, nil)
        lua_thread.create(function()
            wait(300)
            chargegps = false
        end)
    end)
    sampRegisterChatCommand('gpsg', function()
        gasgps = true
        sampSendChat('/gps')
        sampSendDialogResponse(25305, 1, 14, nil)
        lua_thread.create(function()
            wait(300)
            gasgps = false
        end)
    end)
    sampRegisterChatCommand('gpss', function()
        gpsshop = true
        sampSendChat('/gps')
        sampSendDialogResponse(25305, 1, 16, nil)
        lua_thread.create(function()
            wait(300)
            gpsshop = false
        end)
    end)
    for k, v in ipairs(commands) do
        sampRegisterChatCommand(v, function(args)
            local id = tonumber(args:match("%d+"))
            if id ~= nil then
                sampSendChat("/"..v.." "..id)
            else
                sampSendChat("/"..v.." "..select(2, sampGetPlayerIdByCharHandle(playerPed)))
            end
        end)
    end
    while true do
        wait(1)
        if isKeyControlAvailable() then
            if isKeyDown(VK_X) then
                sampAddChatMessage('asd')
            end
        end
    end
end

function isKeyControlAvailable()
    if not isSampLoaded() then return true end
    if not isSampfuncsLoaded() then return not sampIsChatInputActive() and not sampIsDialogActive() end
    return not sampIsChatInputActive() and not sampIsDialogActive() and not isSampfuncsConsoleActive()
end
 

F0RQU1N and

Известный
1,309
498
Как прослушивать сообщения с чата (Хотя бы серверные) на лаунчере аризоны?
ты нарик? я же ответил тебе уже
при чем тут ffi? открой иду и ищи адрес
r1:
Посмотреть вложение 169105r3:
Посмотреть вложение 169104
r1

функции идентичны почти
на r3 samp.dll + 0x67460
 
Последнее редактирование:

Ononimus

Потрачен
60
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
код:
local sampev = require 'lib.samp.events'
local inicfg = require 'inicfg'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
CP1251 = encoding.CP1251

-- ini файл --

local directIni = 'moonloader\\config\\report-plus.ini'
local mainIni = inicfg.load({
    config = {
        bindClock = "[18,82]",
        nick = Nick_Name,
        id = 0,
        raiting = 0,
        report = Помогите,
        otvet = Иду
    }
}, directIni)
if not doesFileExist("moonloader/config/report-plus.ini") then inicfg.save(mainIni, "report-plus.ini") end

-- Imgui окно --

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(tostring(mainIni.config.otvet), 256)
local sw, sh = getScreenResolution()
local rkeys = require 'rkeys'
imgui.HotKey = require ('imgui_addons').HotKey
local tLastKeys = {}
local ActiveClockMenu = {
    v = decodeJson(mainIni.config.bindClock)
}

-- Жёлтое Imgui окно --

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
 
    style.WindowRounding = 2.0
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.84)
    style.ChildWindowRounding = 2.0
    style.FrameRounding = 2.0
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0

    colors[clr.FrameBg]                = ImVec4(0.76, 0.6, 0, 0.74)--
    colors[clr.FrameBgHovered]         = ImVec4(0.84, 0.68, 0, 0.83)--
    colors[clr.FrameBgActive]          = ImVec4(0.92, 0.77, 0, 0.87)--
    colors[clr.TitleBg]                = ImVec4(0.04, 0.04, 0.04, 1.00)--
    colors[clr.TitleBgActive]          = ImVec4(0.92, 0.77, 0, 0.85)--
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)--
    colors[clr.CheckMark]              = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Button]                 = ImVec4(0.76, 0.6, 0, 0.85)
    colors[clr.ButtonHovered]          = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.ButtonActive]           = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Header]                 = ImVec4(0.84, 0.68, 0, 0.75)
    colors[clr.HeaderHovered]          = ImVec4(0.84, 0.68, 0, 0.90)
    colors[clr.HeaderActive]           = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.84, 0.68, 0, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.ResizeGrip]             = ImVec4(0.76, 0.6, 0, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(0.84, 0.68, 0, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(0.92, 0.77, 0, 0.95)
    colors[clr.TextSelectedBg]         = ImVec4(0.52, 0.34, 0, 0.85)
    colors[clr.Text]                   = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.TextDisabled]           = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.WindowBg]               = ImVec4(0.06, 0.06, 0.06, 0.94)
    colors[clr.ChildWindowBg]          = ImVec4(1.00, 1.00, 1.00, 0.00)
    colors[clr.PopupBg]                = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.ComboBg]                = colors[clr.PopupBg]
    colors[clr.Border]                 = ImVec4(0.43, 0.43, 0.50, 0.50)
    colors[clr.BorderShadow]           = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.MenuBarBg]              = ImVec4(0.14, 0.14, 0.14, 1.00)
    colors[clr.ScrollbarBg]            = ImVec4(0.02, 0.02, 0.02, 0.53)
    colors[clr.ScrollbarGrab]          = ImVec4(0.31, 0.31, 0.31, 1.00)
    colors[clr.ScrollbarGrabHovered]   = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.ScrollbarGrabActive]    = ImVec4(0.51, 0.51, 0.51, 1.00)
    colors[clr.CloseButton]            = ImVec4(0.41, 0.41, 0.41, 0.50)
    colors[clr.CloseButtonHovered]     = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.PlotLines]              = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]       = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]          = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered]   = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.ModalWindowDarkening]   = ImVec4(0.80, 0.80, 0.80, 0.35)
end
apply_custom_style()

-- Главная Функция --

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

    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Скрипт успешно загружен!')
    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Активация: /as или ' .. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "))
    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Автор: Sadow')

    sampRegisterChatCommand('as', cmd_as)

    imgui.Process = false

    bindClock = rkeys.registerHotKey(ActiveClockMenu.v, true, clockFunc)


    while true do
        wait(0)

        if main_window_state.v == false then
            imgui.Process = false
        end

        while not isSampAvailable() do
            wait(0)
           end
           _, idp = sampGetPlayerIdByCharHandle(PLAYER_PED)
           nick = sampGetPlayerNickname(idp)

    end
end

-- Команда /as --

function cmd_as(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

-- Функция с комбинацией клавиш --

function clockFunc()
    cmd_as()
end

-- Переменные необходимые для Imgui окна --

function sampev.onServerMessage(color, text)
    local text = text:gsub('{......}', '')
    if text:find('Ваш рейтинг игрового помощника: (%d+)') then
        mainIni.config.raiting = text:match('Ваш рейтинг игрового помощника: (%d+)')
        inicfg.save(mainIni, directIni)
    end
    if text:find('%[Вопрос%] (.+)%[(%d+)%]: (.+)') then
        mainIni.config.nick, mainIni.config.id, mainIni.config.report = text:match('%[Вопрос%] (.+)%[(%d+)%]: (.+)')
        inicfg.save(mainIni, directIni)
    end
    if text:match('%[Вопрос%] (.+)') then
        sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Чтобы ответить на репорт введите /as или ' .. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "))
    end
end

-- Функция информации в Imgui окне --

function imgui.Ques(text)
    imgui.SameLine()
    imgui.TextDisabled("(?)")
    if imgui.IsItemHovered() then
        imgui.BeginTooltip()
        imgui.TextUnformatted(u8(text))
        imgui.EndTooltip()
    end
end

-- Само Imgui окно --

function imgui.OnDrawFrame()
    sampSendChat('/myrating')
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(555, 180), imgui.Cond.FirstUseEver)
    imgui.Begin(u8"Репорт PLUS", main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Репорт от: ' .. mainIni.config.nick)
    imgui.Text(u8'Репорт: ' .. u8(mainIni.config.report))
    imgui.Text(' ')
    imgui.PushItemWidth(220)
    if imgui.InputText(u8'Ответить на репорт', text_buffer, imgui.InputTextFlags.EnterReturnsTrue) then
        imgui.PopItemWidth(50)
        mainIni.config.otvet = text_buffer.v
        inicfg.save(mainIni, directIni)
        sampSendChat('/pm ' .. mainIni.config.id .. ' ' .. u8:decode(mainIni.config.otvet), -1)
    end
    imgui.Text(' ')
    imgui.SetCursorPos(imgui.ImVec2(450, 150))
    if imgui.HotKey('##1', ActiveClockMenu, tLastKey, 100) then
        rkeys.changeHotKey(bindClock, ActiveClockMenu.v)
        mainIni.config.bindClock = encodeJson(ActiveClockMenu.v)
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine(320)
    imgui.Text(u8'Комбинация клавиш:')
    imgui.SameLine(0)
    imgui.SetCursorPos(imgui.ImVec2(350, 80))
    imgui.BeginChild(u8'Ваша статистика', imgui.ImVec2(200, 65), true)
    imgui.Text(u8'Ваш ник: ' .. nick .. '[' .. idp .. ']')
    imgui.Text(u8'Дата: ' .. os.date("%d") .. '.' .. os.date("%m") .. '.' .. os.date("%Y"))
    imgui.Text(u8'Общее кол-во репортов: ' .. mainIni.config.raiting)
    imgui.EndChild()
    imgui.End()
end
почему кикает на серверах за флуд (это скрипт ловит репорты и отвечает на них)
 
Последнее редактирование:

YarikVL

Известный
Проверенный
4,767
1,820
код:
local sampev = require 'lib.samp.events'
local inicfg = require 'inicfg'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
CP1251 = encoding.CP1251

-- ini файл --

local directIni = 'moonloader\\config\\report-plus.ini'
local mainIni = inicfg.load({
    config = {
        bindClock = "[18,82]",
        nick = Nick_Name,
        id = 0,
        raiting = 0,
        report = Помогите,
        otvet = Иду
    }
}, directIni)
if not doesFileExist("moonloader/config/report-plus.ini") then inicfg.save(mainIni, "report-plus.ini") end

-- Imgui окно --

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(tostring(mainIni.config.otvet), 256)
local sw, sh = getScreenResolution()
local rkeys = require 'rkeys'
imgui.HotKey = require ('imgui_addons').HotKey
local tLastKeys = {}
local ActiveClockMenu = {
    v = decodeJson(mainIni.config.bindClock)
}

-- Жёлтое Imgui окно --

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
 
    style.WindowRounding = 2.0
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.84)
    style.ChildWindowRounding = 2.0
    style.FrameRounding = 2.0
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0

    colors[clr.FrameBg]                = ImVec4(0.76, 0.6, 0, 0.74)--
    colors[clr.FrameBgHovered]         = ImVec4(0.84, 0.68, 0, 0.83)--
    colors[clr.FrameBgActive]          = ImVec4(0.92, 0.77, 0, 0.87)--
    colors[clr.TitleBg]                = ImVec4(0.04, 0.04, 0.04, 1.00)--
    colors[clr.TitleBgActive]          = ImVec4(0.92, 0.77, 0, 0.85)--
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)--
    colors[clr.CheckMark]              = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Button]                 = ImVec4(0.76, 0.6, 0, 0.85)
    colors[clr.ButtonHovered]          = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.ButtonActive]           = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Header]                 = ImVec4(0.84, 0.68, 0, 0.75)
    colors[clr.HeaderHovered]          = ImVec4(0.84, 0.68, 0, 0.90)
    colors[clr.HeaderActive]           = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.84, 0.68, 0, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.ResizeGrip]             = ImVec4(0.76, 0.6, 0, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(0.84, 0.68, 0, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(0.92, 0.77, 0, 0.95)
    colors[clr.TextSelectedBg]         = ImVec4(0.52, 0.34, 0, 0.85)
    colors[clr.Text]                   = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.TextDisabled]           = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.WindowBg]               = ImVec4(0.06, 0.06, 0.06, 0.94)
    colors[clr.ChildWindowBg]          = ImVec4(1.00, 1.00, 1.00, 0.00)
    colors[clr.PopupBg]                = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.ComboBg]                = colors[clr.PopupBg]
    colors[clr.Border]                 = ImVec4(0.43, 0.43, 0.50, 0.50)
    colors[clr.BorderShadow]           = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.MenuBarBg]              = ImVec4(0.14, 0.14, 0.14, 1.00)
    colors[clr.ScrollbarBg]            = ImVec4(0.02, 0.02, 0.02, 0.53)
    colors[clr.ScrollbarGrab]          = ImVec4(0.31, 0.31, 0.31, 1.00)
    colors[clr.ScrollbarGrabHovered]   = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.ScrollbarGrabActive]    = ImVec4(0.51, 0.51, 0.51, 1.00)
    colors[clr.CloseButton]            = ImVec4(0.41, 0.41, 0.41, 0.50)
    colors[clr.CloseButtonHovered]     = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.PlotLines]              = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]       = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]          = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered]   = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.ModalWindowDarkening]   = ImVec4(0.80, 0.80, 0.80, 0.35)
end
apply_custom_style()

-- Главная Функция --

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

    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Скрипт успешно загружен!')
    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Активация: /as или ' .. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "))
    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Автор: Sadow')

    sampRegisterChatCommand('as', cmd_as)

    imgui.Process = false

    bindClock = rkeys.registerHotKey(ActiveClockMenu.v, true, clockFunc)


    while true do
        wait(0)

        if main_window_state.v == false then
            imgui.Process = false
        end

        while not isSampAvailable() do
            wait(0)
           end
           _, idp = sampGetPlayerIdByCharHandle(PLAYER_PED)
           nick = sampGetPlayerNickname(idp)

    end
end

-- Команда /as --

function cmd_as(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

-- Функция с комбинацией клавиш --

function clockFunc()
    cmd_as()
end

-- Переменные необходимые для Imgui окна --

function sampev.onServerMessage(color, text)
    local text = text:gsub('{......}', '')
    if text:find('Ваш рейтинг игрового помощника: (%d+)') then
        mainIni.config.raiting = text:match('Ваш рейтинг игрового помощника: (%d+)')
        inicfg.save(mainIni, directIni)
    end
    if text:find('%[Вопрос%] (.+)%[(%d+)%]: (.+)') then
        mainIni.config.nick, mainIni.config.id, mainIni.config.report = text:match('%[Вопрос%] (.+)%[(%d+)%]: (.+)')
        inicfg.save(mainIni, directIni)
    end
    if text:match('%[Вопрос%] (.+)') then
        sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Чтобы ответить на репорт введите /as или ' .. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "))
    end
end

-- Функция информации в Imgui окне --

function imgui.Ques(text)
    imgui.SameLine()
    imgui.TextDisabled("(?)")
    if imgui.IsItemHovered() then
        imgui.BeginTooltip()
        imgui.TextUnformatted(u8(text))
        imgui.EndTooltip()
    end
end

-- Само Imgui окно --

function imgui.OnDrawFrame()
    sampSendChat('/myrating')
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(555, 180), imgui.Cond.FirstUseEver)
    imgui.Begin(u8"Репорт PLUS", main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Репорт от: ' .. mainIni.config.nick)
    imgui.Text(u8'Репорт: ' .. u8(mainIni.config.report))
    imgui.Text(' ')
    imgui.PushItemWidth(220)
    if imgui.InputText(u8'Ответить на репорт', text_buffer, imgui.InputTextFlags.EnterReturnsTrue) then
        imgui.PopItemWidth(50)
        mainIni.config.otvet = text_buffer.v
        inicfg.save(mainIni, directIni)
        sampSendChat('/pm ' .. mainIni.config.id .. ' ' .. u8:decode(mainIni.config.otvet), -1)
    end
    imgui.Text(' ')
    imgui.SetCursorPos(imgui.ImVec2(450, 150))
    if imgui.HotKey('##1', ActiveClockMenu, tLastKey, 100) then
        rkeys.changeHotKey(bindClock, ActiveClockMenu.v)
        mainIni.config.bindClock = encodeJson(ActiveClockMenu.v)
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine(320)
    imgui.Text(u8'Комбинация клавиш:')
    imgui.SameLine(0)
    imgui.SetCursorPos(imgui.ImVec2(350, 80))
    imgui.BeginChild(u8'Ваша статистика', imgui.ImVec2(200, 65), true)
    imgui.Text(u8'Ваш ник: ' .. nick .. '[' .. idp .. ']')
    imgui.Text(u8'Дата: ' .. os.date("%d") .. '.' .. os.date("%m") .. '.' .. os.date("%Y"))
    imgui.Text(u8'Общее кол-во репортов: ' .. mainIni.config.raiting)
    imgui.EndChild()
    imgui.End()
end
почему кикает на серверах за флуд (это скрипт ловит репорты и отвечает на них)
Бл, чел…
Тебе сказали смотреть все уроки по несколько раз каждый на ютуб канале The Champ Guess

А посмотрел бы внимательно гайды - не писал бы таких вопросов
Lua:
--остальной код вырезал чтобы ты увидел

-- Само Imgui окно --

function imgui.OnDrawFrame()
    sampSendChat('/myrating')
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(555, 180), imgui.Cond.FirstUseEver)
    imgui.Begin(u8"Репорт PLUS", main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Репорт от: ' .. mainIni.config.nick)
    imgui.Text(u8'Репорт: ' .. u8(mainIni.config.report))
    imgui.Text(' ')
    imgui.PushItemWidth(220)
    if imgui.InputText(u8'Ответить на репорт', text_buffer, imgui.InputTextFlags.EnterReturnsTrue) then
        imgui.PopItemWidth(50)
        mainIni.config.otvet = text_buffer.v
        inicfg.save(mainIni, directIni)
        sampSendChat('/pm ' .. mainIni.config.id .. ' ' .. u8:decode(mainIni.config.otvet), -1)
    end
    imgui.Text(' ')
    imgui.SetCursorPos(imgui.ImVec2(450, 150))
    if imgui.HotKey('##1', ActiveClockMenu, tLastKey, 100) then
        rkeys.changeHotKey(bindClock, ActiveClockMenu.v)
        mainIni.config.bindClock = encodeJson(ActiveClockMenu.v)
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine(320)
    imgui.Text(u8'Комбинация клавиш:')
    imgui.SameLine(0)
    imgui.SetCursorPos(imgui.ImVec2(350, 80))
    imgui.BeginChild(u8'Ваша статистика', imgui.ImVec2(200, 65), true)
    imgui.Text(u8'Ваш ник: ' .. nick .. '[' .. idp .. ']')
    imgui.Text(u8'Дата: ' .. os.date("%d") .. '.' .. os.date("%m") .. '.' .. os.date("%Y"))
    imgui.Text(u8'Общее кол-во репортов: ' .. mainIni.config.raiting)
    imgui.EndChild()
    imgui.End()
end
 

Ononimus

Потрачен
60
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Бл, чел…
Тебе сказали смотреть все уроки по несколько раз каждый на ютуб канале The Champ Guess

А посмотрел бы внимательно гайды - не писал бы таких вопросов
Lua:
--остальной код вырезал чтобы ты увидел

-- Само Imgui окно --

function imgui.OnDrawFrame()
    sampSendChat('/myrating')
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(555, 180), imgui.Cond.FirstUseEver)
    imgui.Begin(u8"Репорт PLUS", main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Репорт от: ' .. mainIni.config.nick)
    imgui.Text(u8'Репорт: ' .. u8(mainIni.config.report))
    imgui.Text(' ')
    imgui.PushItemWidth(220)
    if imgui.InputText(u8'Ответить на репорт', text_buffer, imgui.InputTextFlags.EnterReturnsTrue) then
        imgui.PopItemWidth(50)
        mainIni.config.otvet = text_buffer.v
        inicfg.save(mainIni, directIni)
        sampSendChat('/pm ' .. mainIni.config.id .. ' ' .. u8:decode(mainIni.config.otvet), -1)
    end
    imgui.Text(' ')
    imgui.SetCursorPos(imgui.ImVec2(450, 150))
    if imgui.HotKey('##1', ActiveClockMenu, tLastKey, 100) then
        rkeys.changeHotKey(bindClock, ActiveClockMenu.v)
        mainIni.config.bindClock = encodeJson(ActiveClockMenu.v)
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine(320)
    imgui.Text(u8'Комбинация клавиш:')
    imgui.SameLine(0)
    imgui.SetCursorPos(imgui.ImVec2(350, 80))
    imgui.BeginChild(u8'Ваша статистика', imgui.ImVec2(200, 65), true)
    imgui.Text(u8'Ваш ник: ' .. nick .. '[' .. idp .. ']')
    imgui.Text(u8'Дата: ' .. os.date("%d") .. '.' .. os.date("%m") .. '.' .. os.date("%Y"))
    imgui.Text(u8'Общее кол-во репортов: ' .. mainIni.config.raiting)
    imgui.EndChild()
    imgui.End()
end
не робит :)))
 
  • Злость
Реакции: YarikVL

Smeruxa

Известный
1,359
721
и как это сделать? не мой скрипт просто
он у тебя декомпилированный, ты ни как его не запустишь, только переписывать

вместо
Lua:
 if nick then
        mainIni.config.nick = nick
        inicfg.save(mainIni, directIni)
    end
    if id then
        mainIni.config.id = id
        inicfg.save(mainIni, directIni)
    end
    if report then
        mainIni.config.report = report
        inicfg.save(mainIni, directIni)
    end
сделай

Lua:
    mainIni.config.nick = nick
    mainIni.config.id = id
    mainIni.config.report = report
    inicfg.save(mainIni, directIni)
Чел, пожалуйста, не пиши если не знаешь точно, это же бред
 
  • Нравится
Реакции: copypaste_scripter

Ononimus

Потрачен
60
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ребят хелпуйте почему кикает за флуд калл бэк
код:
local sampev = require 'lib.samp.events'
local inicfg = require 'inicfg'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
CP1251 = encoding.CP1251

-- ini файл --

local directIni = 'moonloader\\config\\report-plus.ini'
local mainIni = inicfg.load({
    config = {
        bindClock = "[18,82]",
        nick = Nick_Name,
        id = 0,
        raiting = 0,
        report = Помогите,
        otvet = Иду
    }
}, directIni)
if not doesFileExist("moonloader/config/report-plus.ini") then inicfg.save(mainIni, "report-plus.ini") end

-- Imgui окно --

local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(tostring(mainIni.config.otvet), 256)
local sw, sh = getScreenResolution()
local rkeys = require 'rkeys'
imgui.HotKey = require ('imgui_addons').HotKey
local tLastKeys = {}
local ActiveClockMenu = {
    v = decodeJson(mainIni.config.bindClock)
}

-- Жёлтое Imgui окно --

function apply_custom_style()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
 
    style.WindowRounding = 2.0
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.84)
    style.ChildWindowRounding = 2.0
    style.FrameRounding = 2.0
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0

    colors[clr.FrameBg]                = ImVec4(0.76, 0.6, 0, 0.74)--
    colors[clr.FrameBgHovered]         = ImVec4(0.84, 0.68, 0, 0.83)--
    colors[clr.FrameBgActive]          = ImVec4(0.92, 0.77, 0, 0.87)--
    colors[clr.TitleBg]                = ImVec4(0.04, 0.04, 0.04, 1.00)--
    colors[clr.TitleBgActive]          = ImVec4(0.92, 0.77, 0, 0.85)--
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)--
    colors[clr.CheckMark]              = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Button]                 = ImVec4(0.76, 0.6, 0, 0.85)
    colors[clr.ButtonHovered]          = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.ButtonActive]           = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Header]                 = ImVec4(0.84, 0.68, 0, 0.75)
    colors[clr.HeaderHovered]          = ImVec4(0.84, 0.68, 0, 0.90)
    colors[clr.HeaderActive]           = ImVec4(0.92, 0.77, 0, 1.00)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.84, 0.68, 0, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.84, 0.68, 0, 1.00)
    colors[clr.ResizeGrip]             = ImVec4(0.76, 0.6, 0, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(0.84, 0.68, 0, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(0.92, 0.77, 0, 0.95)
    colors[clr.TextSelectedBg]         = ImVec4(0.52, 0.34, 0, 0.85)
    colors[clr.Text]                   = ImVec4(1.00, 1.00, 1.00, 1.00)
    colors[clr.TextDisabled]           = ImVec4(0.50, 0.50, 0.50, 1.00)
    colors[clr.WindowBg]               = ImVec4(0.06, 0.06, 0.06, 0.94)
    colors[clr.ChildWindowBg]          = ImVec4(1.00, 1.00, 1.00, 0.00)
    colors[clr.PopupBg]                = ImVec4(0.08, 0.08, 0.08, 0.94)
    colors[clr.ComboBg]                = colors[clr.PopupBg]
    colors[clr.Border]                 = ImVec4(0.43, 0.43, 0.50, 0.50)
    colors[clr.BorderShadow]           = ImVec4(0.00, 0.00, 0.00, 0.00)
    colors[clr.MenuBarBg]              = ImVec4(0.14, 0.14, 0.14, 1.00)
    colors[clr.ScrollbarBg]            = ImVec4(0.02, 0.02, 0.02, 0.53)
    colors[clr.ScrollbarGrab]          = ImVec4(0.31, 0.31, 0.31, 1.00)
    colors[clr.ScrollbarGrabHovered]   = ImVec4(0.41, 0.41, 0.41, 1.00)
    colors[clr.ScrollbarGrabActive]    = ImVec4(0.51, 0.51, 0.51, 1.00)
    colors[clr.CloseButton]            = ImVec4(0.41, 0.41, 0.41, 0.50)
    colors[clr.CloseButtonHovered]     = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.98, 0.39, 0.36, 1.00)
    colors[clr.PlotLines]              = ImVec4(0.61, 0.61, 0.61, 1.00)
    colors[clr.PlotLinesHovered]       = ImVec4(1.00, 0.43, 0.35, 1.00)
    colors[clr.PlotHistogram]          = ImVec4(0.90, 0.70, 0.00, 1.00)
    colors[clr.PlotHistogramHovered]   = ImVec4(1.00, 0.60, 0.00, 1.00)
    colors[clr.ModalWindowDarkening]   = ImVec4(0.80, 0.80, 0.80, 0.35)
end
apply_custom_style()

-- Главная Функция --

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

    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Скрипт успешно загружен!')
    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Активация: /as или ' .. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "))
    sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Автор: Sadow')

    sampRegisterChatCommand('as', cmd_as)

    imgui.Process = false

    bindClock = rkeys.registerHotKey(ActiveClockMenu.v, true, clockFunc)


    while true do
        wait(0)

        if main_window_state.v == false then
            imgui.Process = false
        end

        while not isSampAvailable() do
            wait(0)
           end
           _, idp = sampGetPlayerIdByCharHandle(PLAYER_PED)
           nick = sampGetPlayerNickname(idp)

    end
end

-- Команда /as --

function cmd_as(arg)
    main_window_state.v = not main_window_state.v
    imgui.Process = main_window_state.v
end

-- Функция с комбинацией клавиш --

function clockFunc()
    cmd_as()
end

-- Переменные необходимые для Imgui окна --

function sampev.onServerMessage(color, text)
    local text = text:gsub('{......}', '')
    if text:find('Ваш рейтинг игрового помощника: (%d+)') then
        mainIni.config.raiting = text:match('Ваш рейтинг игрового помощника: (%d+)')
        inicfg.save(mainIni, directIni)
    end
    if text:find('%[Вопрос%] (.+)%[(%d+)%]: (.+)') then
        mainIni.config.nick, mainIni.config.id, mainIni.config.report = text:match('%[Вопрос%] (.+)%[(%d+)%]: (.+)')
        inicfg.save(mainIni, directIni)
    end
    if text:match('%[Вопрос%] (.+)') then
        sampAddChatMessage('{ffff00}[Репорт PLUS] {FFFFFF}Чтобы ответить на репорт введите /as или ' .. table.concat(rkeys.getKeysName(ActiveClockMenu.v), " + "))
    end
end

-- Функция информации в Imgui окне --

function imgui.Ques(text)
    imgui.SameLine()
    imgui.TextDisabled("(?)")
    if imgui.IsItemHovered() then
        imgui.BeginTooltip()
        imgui.TextUnformatted(u8(text))
        imgui.EndTooltip()
    end
end

-- Само Imgui окно --

function imgui.OnDrawFrame()
    sampSendChat('/myrating')
    imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.SetNextWindowSize(imgui.ImVec2(555, 180), imgui.Cond.FirstUseEver)
    imgui.Begin(u8"Репорт PLUS", main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoMove + imgui.WindowFlags.NoCollapse)
    imgui.Text(u8'Репорт от: ' .. mainIni.config.nick)
    imgui.Text(u8'Репорт: ' .. u8(mainIni.config.report))
    imgui.Text(' ')
    imgui.PushItemWidth(220)
    if imgui.InputText(u8'Ответить на репорт', text_buffer, imgui.InputTextFlags.EnterReturnsTrue) then
        imgui.PopItemWidth(50)
        mainIni.config.otvet = text_buffer.v
        inicfg.save(mainIni, directIni)
        sampSendChat('/pm ' .. mainIni.config.id .. ' ' .. u8:decode(mainIni.config.otvet))
    end
    imgui.Text(' ')
    imgui.SetCursorPos(imgui.ImVec2(450, 150))
    if imgui.HotKey('##1', ActiveClockMenu, tLastKey, 100) then
        rkeys.changeHotKey(bindClock, ActiveClockMenu.v)
        mainIni.config.bindClock = encodeJson(ActiveClockMenu.v)
        inicfg.save(mainIni, directIni)
    end
    imgui.SameLine(320)
    imgui.Text(u8'Комбинация клавиш:')
    imgui.SameLine(0)
    imgui.SetCursorPos(imgui.ImVec2(350, 80))
    imgui.BeginChild(u8'Ваша статистика', imgui.ImVec2(200, 65), true)
    imgui.Text(u8'Ваш ник: ' .. nick .. '[' .. idp .. ']')
    imgui.Text(u8'Дата: ' .. os.date("%d") .. '.' .. os.date("%m") .. '.' .. os.date("%Y"))
    imgui.Text(u8'Общее кол-во репортов: ' .. mainIni.config.raiting)
    imgui.EndChild()
    imgui.End()
end


этот скрипт ловит репорты и выводит в имгуи окно
 
  • Bug
Реакции: xiavej и YarikVL

Smeruxa

Известный
1,359
721
есть гайд или что то где смогу научится делать это? или это ваще возиожно? @Smeruxa
возможно
Вспомни как ты свои скрипты пишешь и переписывай относительно того скрипта, это не сложно
Просто на сколько я помню там порядок иногда путается и простые вещи могут расширяться на неск-ко строк, например: setCharCoordinates(x, y, z) могут разбиваться на v1 = x; v2 = y; v3 = z; setCharCoordinates(v1, v2, v3)
 
  • Нравится
Реакции: copypaste_scripter