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

Удалённый пользователь 341712

Гость
Последнее редактирование модератором:

Wei Huang

Участник
21
0
Не работает
1605445871775.png

Lua:
tmpRemove('file.txt') -- удалит файл file.txt из твоей папки TEMP
 

wulfandr

Известный
637
260
У

Удалённый пользователь 341712

Гость
что не получается? показывай свой код, весь, как делаешь
Lua:
require 'lib.moonloader'
local samp = require 'lib.samp.events'
local memory = require 'memory'
local imgui = require 'imgui'
local encoding = require "encoding"
local inicfg = require 'inicfg'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local HLcfg = inicfg.load({
    config = {
        colorMyBullet = 0.74, 0.46, 0.12, 1.00
    }
}, "traicer.ini")
inicfg.save(HLcfg, "traicer.ini")

local colorMyBullet = imgui.ImFloat4(imgui.ImColor(HLcfg.config.colorMyBullet):GetFloat4())

local window = imgui.ImBool(false)

local bulletSync = {lastId = 0, maxLines = 50}
for i = 1, bulletSync.maxLines do
    bulletSync[i] = {time = 0, t = {x,y,z}, o = {x,y,z}, type = 0}
end

function main()
    while not isSampLoaded() do wait(100) end
    sampRegisterChatCommand('fgas', function()
        window.v = not window.v
    end)
    while true do
        wait(0)
        imgui.Process = true
        if not window.v then
            imgui.ShowCursor = false
        end     
        local oTime = os.time()
        for i = 1, bulletSync.maxLines do
            if bulletSync[i].time >= oTime then
                local result, wX, wY, wZ, wW, wH = convert3DCoordsToScreenEx(bulletSync[i].o.x, bulletSync[i].o.y, bulletSync[i].o.z, true, true)
                local resulti, pX, pY, pZ, pW, pH = convert3DCoordsToScreenEx(bulletSync[i].t.x, bulletSync[i].t.y, bulletSync[i].t.z, true, true)
                local a, r, g, b = explode_argb(colorMyBullet.v)
                if result and resulti then
                    local xResolution = memory.getuint32(0x00C17044)
                    if wZ < 1 then
                        wX = xResolution - wX
                    end
                    if pZ < 1 then
                        pZ = xResolution - pZ
                    end
                    renderDrawLine(wX, wY, pX, pY, 1, bulletSync[i].type == 0 and 0xFFFFFFFF or join_argb(a, r, g, b))
                    renderDrawPolygon(pX, pY-1, 3, 3, 4.0, 10, bulletSync[i].type == 0 and 0xFFFFFFFF or 0xFFFFFFFF)
                end
            end
        end
    end
end

function join_argb(a, r, g, b)
    local argb = b  -- b
    argb = bit.bor(argb, bit.lshift(g, 8))  -- g
    argb = bit.bor(argb, bit.lshift(r, 16)) -- r
    argb = bit.bor(argb, bit.lshift(a, 24)) -- a
    return argb
  end

function explode_argb(argb)
    local a = bit.band(bit.rshift(argb, 24), 0xFF)
    local r = bit.band(bit.rshift(argb, 16), 0xFF)
    local g = bit.band(bit.rshift(argb, 8), 0xFF)
    local b = bit.band(argb, 0xFF)
    return a, r, g, b
end

function imgui.OnDrawFrame()
    blue()
    if window.v then
        imgui.ShowCursor = true
        imgui.Begin("test", window)
        imgui.Separator()
        imgui.Text(u8"Укажите цвет трейсера, если вы попали:")
        if imgui.ColorEdit4('##сolorState', colorMyBullet) then
            local clr = imgui.ImColor.FromFloat4(colorMyBullet.v[1], colorMyBullet.v[2], colorMyBullet.v[3], colorMyBullet.v[4]--[[colorMyBullet.v[3], colorMyBullet.v[2], colorMyBullet.v[1], colorMyBullet.v[4]]):GetU32()
            HLcfg.config.colorMyBullet = clr
            save()
        end
        imgui.Separator()
        imgui.End()
    end
end

function save()
    inicfg.save(HLcfg, "traicer.ini")
end

function blue()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    style.Alpha = 1.00

    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.16, 0.29, 0.48, 0.54)
    colors[clr.FrameBgHovered]         = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.FrameBgActive]          = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.TitleBg]                = ImVec4(0.16, 0.29, 0.48, 1.00)
    colors[clr.TitleBgActive]          = ImVec4(0.16, 0.29, 0.48, 1.00)
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)
    colors[clr.CheckMark]              = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.24, 0.52, 0.88, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Button]                 = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.ButtonHovered]          = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ButtonActive]           = ImVec4(0.06, 0.53, 0.98, 1.00)
    colors[clr.Header]                 = ImVec4(0.26, 0.59, 0.98, 0.31)
    colors[clr.HeaderHovered]          = ImVec4(0.26, 0.59, 0.98, 0.80)
    colors[clr.HeaderActive]           = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.26, 0.59, 0.98, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ResizeGrip]             = ImVec4(0.26, 0.59, 0.98, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(0.26, 0.59, 0.98, 0.95)
    colors[clr.TextSelectedBg]         = ImVec4(0.26, 0.59, 0.98, 0.35)
    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

function samp.onSendBulletSync(data)
    bulletSync.lastId = bulletSync.lastId + 1
    if bulletSync.lastId < 1 or bulletSync.lastId > bulletSync.maxLines then
        bulletSync.lastId = 1
    end
    bulletSync[bulletSync.lastId].time = os.time() + 5
    bulletSync[bulletSync.lastId].o.x, bulletSync[bulletSync.lastId].o.y, bulletSync[bulletSync.lastId].o.z = data.origin.x, data.origin.y, data.origin.z
    bulletSync[bulletSync.lastId].t.x, bulletSync[bulletSync.lastId].t.y, bulletSync[bulletSync.lastId].t.z = data.target.x, data.target.y, data.target.z
    bulletSync[bulletSync.lastId].type = data.targetType
end

function samp.onBulletSync(playerid, data)
    bulletSync.lastId = bulletSync.lastId + 1
    if bulletSync.lastId < 1 or bulletSync.lastId > bulletSync.maxLines then
        bulletSync.lastId = 1
    end
    bulletSync[bulletSync.lastId].time = os.time() + 5
    bulletSync[bulletSync.lastId].o.x, bulletSync[bulletSync.lastId].o.y, bulletSync[bulletSync.lastId].o.z = data.origin.x, data.origin.y, data.origin.z
    bulletSync[bulletSync.lastId].t.x, bulletSync[bulletSync.lastId].t.y, bulletSync[bulletSync.lastId].t.z = data.target.x, data.target.y, data.target.z
    bulletSync[bulletSync.lastId].type = data.targetType
end
Lua:
require 'lib.moonloader'
local samp = require 'lib.samp.events'
local memory = require 'memory'
local imgui = require 'imgui'
local encoding = require "encoding"
local inicfg = require 'inicfg'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local HLcfg = inicfg.load({
    config = {
        colorMyBullet = 0.74, 0.46, 0.12, 1.00
    }
}, "traicer.ini")
inicfg.save(HLcfg, "traicer.ini")

local colorMyBullet = imgui.ImFloat4(imgui.ImColor(HLcfg.config.colorMyBullet):GetFloat4())

local window = imgui.ImBool(false)

local bulletSync = {lastId = 0, maxLines = 50}
for i = 1, bulletSync.maxLines do
    bulletSync[i] = {time = 0, t = {x,y,z}, o = {x,y,z}, type = 0}
end

function main()
    while not isSampLoaded() do wait(100) end
    sampRegisterChatCommand('fgas', function()
        window.v = not window.v
    end)
    while true do
        wait(0)
        imgui.Process = true
        if not window.v then
            imgui.ShowCursor = false
        end     
        local oTime = os.time()
        for i = 1, bulletSync.maxLines do
            if bulletSync[i].time >= oTime then
                local result, wX, wY, wZ, wW, wH = convert3DCoordsToScreenEx(bulletSync[i].o.x, bulletSync[i].o.y, bulletSync[i].o.z, true, true)
                local resulti, pX, pY, pZ, pW, pH = convert3DCoordsToScreenEx(bulletSync[i].t.x, bulletSync[i].t.y, bulletSync[i].t.z, true, true)
                if result and resulti then
                    local xResolution = memory.getuint32(0x00C17044)
                    if wZ < 1 then
                        wX = xResolution - wX
                    end
                    if pZ < 1 then
                        pZ = xResolution - pZ
                    end
                    renderDrawLine(wX, wY, pX, pY, 1, bulletSync[i].type == 0 and 0xFFFFFFFF or explode_argb(colorMyBullet.v))
                    renderDrawPolygon(pX, pY-1, 3, 3, 4.0, 10, bulletSync[i].type == 0 and 0xFFFFFFFF or 0xFFFFFFFF)
                end
            end
        end
    end
end

function join_argb(a, r, g, b)
    local argb = b  -- b
    argb = bit.bor(argb, bit.lshift(g, 8))  -- g
    argb = bit.bor(argb, bit.lshift(r, 16)) -- r
    argb = bit.bor(argb, bit.lshift(a, 24)) -- a
    return argb
  end

function explode_argb(argb)
    local a = bit.band(bit.rshift(argb, 24), 0xFF)
    local r = bit.band(bit.rshift(argb, 16), 0xFF)
    local g = bit.band(bit.rshift(argb, 8), 0xFF)
    local b = bit.band(argb, 0xFF)
    return a, r, g, b
end

function imgui.OnDrawFrame()
    blue()
    if window.v then
        imgui.ShowCursor = true
        imgui.Begin("test", window)
        imgui.Separator()
        imgui.Text(u8"Укажите цвет трейсера, если вы попали:")
        if imgui.ColorEdit4('##сolorState', colorMyBullet) then
            local clr = imgui.ImColor.FromFloat4(colorMyBullet.v[1], colorMyBullet.v[2], colorMyBullet.v[3], colorMyBullet.v[4]--[[colorMyBullet.v[3], colorMyBullet.v[2], colorMyBullet.v[1], colorMyBullet.v[4]]):GetU32()
            HLcfg.config.colorMyBullet = clr
            save()
        end
        imgui.Separator()
        imgui.End()
    end
end

function save()
    inicfg.save(HLcfg, "traicer.ini")
end

function blue()
    imgui.SwitchContext()
    local style = imgui.GetStyle()
    local colors = style.Colors
    local clr = imgui.Col
    local ImVec4 = imgui.ImVec4
    style.Alpha = 1.00

    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.16, 0.29, 0.48, 0.54)
    colors[clr.FrameBgHovered]         = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.FrameBgActive]          = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.TitleBg]                = ImVec4(0.16, 0.29, 0.48, 1.00)
    colors[clr.TitleBgActive]          = ImVec4(0.16, 0.29, 0.48, 1.00)
    colors[clr.TitleBgCollapsed]       = ImVec4(0.00, 0.00, 0.00, 0.51)
    colors[clr.CheckMark]              = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.SliderGrab]             = ImVec4(0.24, 0.52, 0.88, 1.00)
    colors[clr.SliderGrabActive]       = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Button]                 = ImVec4(0.26, 0.59, 0.98, 0.40)
    colors[clr.ButtonHovered]          = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ButtonActive]           = ImVec4(0.06, 0.53, 0.98, 1.00)
    colors[clr.Header]                 = ImVec4(0.26, 0.59, 0.98, 0.31)
    colors[clr.HeaderHovered]          = ImVec4(0.26, 0.59, 0.98, 0.80)
    colors[clr.HeaderActive]           = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.Separator]              = colors[clr.Border]
    colors[clr.SeparatorHovered]       = ImVec4(0.26, 0.59, 0.98, 0.78)
    colors[clr.SeparatorActive]        = ImVec4(0.26, 0.59, 0.98, 1.00)
    colors[clr.ResizeGrip]             = ImVec4(0.26, 0.59, 0.98, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(0.26, 0.59, 0.98, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(0.26, 0.59, 0.98, 0.95)
    colors[clr.TextSelectedBg]         = ImVec4(0.26, 0.59, 0.98, 0.35)
    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

function samp.onSendBulletSync(data)
    bulletSync.lastId = bulletSync.lastId + 1
    if bulletSync.lastId < 1 or bulletSync.lastId > bulletSync.maxLines then
        bulletSync.lastId = 1
    end
    bulletSync[bulletSync.lastId].time = os.time() + 5
    bulletSync[bulletSync.lastId].o.x, bulletSync[bulletSync.lastId].o.y, bulletSync[bulletSync.lastId].o.z = data.origin.x, data.origin.y, data.origin.z
    bulletSync[bulletSync.lastId].t.x, bulletSync[bulletSync.lastId].t.y, bulletSync[bulletSync.lastId].t.z = data.target.x, data.target.y, data.target.z
    bulletSync[bulletSync.lastId].type = data.targetType
end

function samp.onBulletSync(playerid, data)
    bulletSync.lastId = bulletSync.lastId + 1
    if bulletSync.lastId < 1 or bulletSync.lastId > bulletSync.maxLines then
        bulletSync.lastId = 1
    end
    bulletSync[bulletSync.lastId].time = os.time() + 5
    bulletSync[bulletSync.lastId].o.x, bulletSync[bulletSync.lastId].o.y, bulletSync[bulletSync.lastId].o.z = data.origin.x, data.origin.y, data.origin.z
    bulletSync[bulletSync.lastId].t.x, bulletSync[bulletSync.lastId].t.y, bulletSync[bulletSync.lastId].t.z = data.target.x, data.target.y, data.target.z
    bulletSync[bulletSync.lastId].type = data.targetType
end
 

Dmitriy Makarov

25.05.2021
Проверенный
2,490
1,120
Я тут с columns работал
1605550486827.png

Не знаете, как сделать так, чтобы после каждой строчки шла линия Separator?
Текст пишу через цикл for и там как-то сложновато.)
Lua:
imgui.BeginChild("main", imgui.ImVec2(550, 310), true)
imgui.Columns(5, "column", true)
for i = 1, 30 do
    imgui.Text("text")
    imgui.NextColumn()
end
imgui.Columns(1)
imgui.Separator()
imgui.EndChild()
Пытался везде прописывать imgui.Separator, так сказать, "методом тыка" проверить, но не получается что-то.
 

wulfandr

Известный
637
260
Столкнулся с проблемой.
Скрипт работает, но почему-то оружие берётся 2 раза подряд. Подскажите в чём трабл. Вот код собственно:
Lua:
require "lib.moonloader"
require "lib.sampfuncs"
local sampev = require("lib.samp.events")
lastdialog = {}
function main()
    repeat wait(7000) until isSampAvailable()
    while true do
        wait(0)
        if sampIsDialogActive() and lastdialog.id == 245 and isKeyDown(VK_MENU) then
            local count = -1
            for line in lastdialog.text:gmatch('[^\r\n]+') do
                count = count + 1
                if line:find('Desert Eagle') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Shotgun') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('SMG') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('M4A1') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Rifle') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Броня') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Спец оружие') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                    sampAddChatMessage("{FFFFFF}  Вы взяли боекомплект.", -1)
                    break
                end
            end
        end
    end
end
function sampev.onShowDialog(dialogid, style, title, btn1, btn2, text)
    lastdialog.id = dialogid
    lastdialog.style = style
    lastdialog.title = title
    lastdialog.btn1 = btn1
    lastdialog.btn2 = btn2
    lastdialog.text = text
end
а зачем ты сделал в main если можно в onshowdialog?
а зачем ты сделал в main если можно в onshowdialog?
и советую оптимизировать, проверку на броню, здоровье, само оружие
 
У

Удалённый пользователь 341712

Гость
Столкнулся с проблемой.
Скрипт работает, но почему-то оружие берётся 2 раза подряд. Подскажите в чём трабл. Вот код собственно:
Lua:
require "lib.moonloader"
require "lib.sampfuncs"
local sampev = require("lib.samp.events")
lastdialog = {}
function main()
    repeat wait(7000) until isSampAvailable()
    while true do
        wait(0)
        if sampIsDialogActive() and lastdialog.id == 245 and isKeyDown(VK_MENU) then
            local count = -1
            for line in lastdialog.text:gmatch('[^\r\n]+') do
                count = count + 1
                if line:find('Desert Eagle') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Shotgun') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('SMG') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('M4A1') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Rifle') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Броня') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                end
                if line:find('Спец оружие') then
                    wait(500)
                    sampSendDialogResponse(lastdialog.id, 1, count, -1)
                    sampAddChatMessage("{FFFFFF}  Вы взяли боекомплект.", -1)
                    break
                end
            end
        end
    end
end
function sampev.onShowDialog(dialogid, style, title, btn1, btn2, text)
    lastdialog.id = dialogid
    lastdialog.style = style
    lastdialog.title = title
    lastdialog.btn1 = btn1
    lastdialog.btn2 = btn2
    lastdialog.text = text
end
в onShowDialog делай
 

Next..

Известный
343
135
есть такой код
Lua:
function imgui.OnDrawFrame()
    if window.v then
        imgui.SetNextWindowPos(imgui.ImVec2(posX, posY), imgui.Cond.FirstUseEver, imgui.ImVec2(0.0, 0.0))
        imgui.Begin('Players in stream', window, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoScrollbar + imgui.WindowFlags.NoScrollWithMouse)
        imgui.BeginChild("#menu1", imgui.ImVec2(300, 42), false)
        if imgui.Button(u8"Информации", imgui.ImVec2(145, 42)) then
            setVis_window = true
            setKey_window = false
        end
        imgui.SameLine(155)
        if imgui.Button(u8"Горячие клавиши", imgui.ImVec2(145, 42)) then
            setVis_window = false
            setKey_window = true
        end
        imgui.EndChild()
        imgui.Separator()
        if setVis_window then
            imgui.BeginChild("#menu2", imgui.ImVec2(x, y), false)
            imgui.EndChild()
        end
        if setKey_window then
            imgui.BeginChild("#menu3", imgui.ImVec2(x, y), false)
            imgui.EndChild()
        end
        imgui.End()
    end
end
и есть переключение между окнами, как можно изменить размер второго окна(сделать меньше)?
Grand Theft Auto  San Andreas Screenshot 2020.11.17 - 00.02.55.84.png
Grand Theft Auto  San Andreas Screenshot 2020.11.17 - 00.02.59.43.png
 

Salvatore_Ferrari

Известный
427
239
Да
if imgui.Selectable(u8("Основная информация"), false, 0, imgui.ImVec2(200, 50)) then selected = 1 end
Парни, как сделать, если selected == 1, то он светится цветом (как активный), в противном случае - как обычно
так он не является активным пока на него не нажмешь.
seletable и так светится если на него нажать.
Если нужно изменить цвет актива кнопки , это можно сделать в стилях.
 

Curtis

Участник
282
10
так он не является активным пока на него не нажмешь.
seletable и так светится если на него нажать.
Если нужно изменить цвет актива кнопки , это можно сделать в стилях.
У меня не светится когда активный :(
У меня не светится когда активный :(
Я думал типо, если мы в Selectable == 1, то светится эта кнопка
 

Angr

Известный
291
98
Посмотреть вложение 76077
как получить корды этой залупы?
Нужен Sampfuncs, просто в свой код вставишь, она самостоятельная
Lua:
function onReceiveRpc(int,bit)
    if int == 38 then -- SetRaceCheckpoint(Гоночный checkpoint)
        local typeRace = raknetBitStreamReadInt8(bit)
        local X = raknetBitStreamReadFloat(bit)
        local Y = raknetBitStreamReadFloat(bit)
        local Z = raknetBitStreamReadFloat(bit)
        local nextX = raknetBitStreamReadFloat(bit)
        local nextY = raknetBitStreamReadFloat(bit)
        local nextZ = raknetBitStreamReadFloat(bit)
        local radius = raknetBitStreamReadFloat(bit)
        print(X,Y,Z,typeRace,radius)
     elseif int == 107 then -- Если SetCheckpoint(Обычный checkpoint)
        local Xz = raknetBitStreamReadFloat(bit)
        local Yz = raknetBitStreamReadFloat(bit)
        local Zz = raknetBitStreamReadFloat(bit)
        local rdus = raknetBitStreamReadFloat(bit)
        print(Xz,Yz,Zz,rdus)
    end
end