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

edrenbaton

Активный
232
39
ну так у тебя вывод сообщения "текст" идет без проверки текста
так должно работать
Lua:
function sampev.onServerMessage(color, text)
    lua_thread.create(function()
        if text:find('/newcode %d+') then
            wait(0)
            if ini.dialogs.codeall then
                sampSendChat('/newcode '..text:match('/newcode (%d+)'))
                vk_request('Ввели код /newcode '..text:match('/newcode (%d+)'))
            else
                sampAddChatMessage("текст", 0xDB0D0D)
            end
        end
    end)
end
У тебя хук onServerMessage это как функция обычная, которая вызывается с каждым сообщением в чате. Добавь попробуй переменную и в конце твоего блока ( с твоей задачей ) присвой этой переменной false. Ну и каждый раз проверяй ( в начале хука ) эту переменную
Мои герои, люблю вас <3
 

chapo

чопа сребдс // @moujeek
Модератор
8,881
11,606
Как получить инициалы из sampGetPlayerNickname(id)?
так?
1653504221594.png

Lua:
function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('hui_zalupa_pirojok', function(arg)
        sampAddChatMessage(sampGetPlayerNickname(tonumber(arg))..' = '..GetLettersFromName(tonumber(arg)), -1)
    end)
    wait(-1)
end


function GetLettersFromName(PlayerId)
    if sampIsPlayerConnected(PlayerId) or PlayerId == select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)) then
        local fullname = sampGetPlayerNickname(PlayerId)
        if fullname:match('(.+)_(.+)') then
            local name, surname = fullname:match('(.+)_(.+)')
            return name:sub(1, 1)..'. '..surname:sub(1, 1)..'.'
        end
    end
    return 'H.U.I'
end
 
  • Влюблен
  • Нравится
Реакции: TSIDEX и ARMOR

TSIDEX

Известный
86
8
так?
Посмотреть вложение 149618
Lua:
function main()
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('hui_zalupa_pirojok', function(arg)
        sampAddChatMessage(sampGetPlayerNickname(tonumber(arg))..' = '..GetLettersFromName(tonumber(arg)), -1)
    end)
    wait(-1)
end


function GetLettersFromName(PlayerId)
    if sampIsPlayerConnected(PlayerId) or PlayerId == select(2, sampGetPlayerIdByCharHandle(PLAYER_PED)) then
        local fullname = sampGetPlayerNickname(PlayerId)
        if fullname:match('(.+)_(.+)') then
            local name, surname = fullname:match('(.+)_(.+)')
            return name:sub(1, 1)..'. '..surname:sub(1, 1)..'.'
        end
    end
    return 'H.U.I'
end
От души, выручил
 

edrenbaton

Активный
232
39
Что делать? (Плохо разбираюсь в луа, даже не начинаюший, делал скрипт для боусника)
Код:
Код:
script_name("AutoCodeForMarti")
script_authors("DaVinci")
script_version("1")

--deps
local effil = require 'effil'
local encoding = require 'encoding'
local imgui = require 'imgui'
local inicfg = require 'inicfg'
local sampev = require 'lib.samp.events'
local sampev = require("samp.events")
encoding.default = 'CP1251'
u8 = encoding.UTF8

local global_scale = imgui.ImFloat(1.2)
local resx, resy = getScreenResolution()

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
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ChildWindowRounding = 2.0
    style.FrameRounding = 3
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0
    style.WindowPadding = imgui.ImVec2(4.0, 4.0)
    style.FramePadding = imgui.ImVec2(3.5, 3.5)
    style.ButtonTextAlign = imgui.ImVec2(0.0, 0.5)
    colors[clr.WindowBg]              = ImVec4(0.14, 0.12, 0.16, 1.00);
    colors[clr.ChildWindowBg]         = ImVec4(0.30, 0.20, 0.39, 0.00);
    colors[clr.PopupBg]               = ImVec4(0.05, 0.05, 0.10, 0.90);
    colors[clr.Border]                = ImVec4(0.89, 0.85, 0.92, 0.30);
    colors[clr.BorderShadow]          = ImVec4(0.00, 0.00, 0.00, 0.00);
    colors[clr.FrameBg]               = ImVec4(0.30, 0.20, 0.39, 1.00);
    colors[clr.FrameBgHovered]        = ImVec4(0.41, 0.19, 0.63, 0.68);
    colors[clr.FrameBgActive]         = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.TitleBg]               = ImVec4(0.41, 0.19, 0.63, 0.45);
    colors[clr.TitleBgCollapsed]      = ImVec4(0.41, 0.19, 0.63, 0.35);
    colors[clr.TitleBgActive]         = ImVec4(0.41, 0.19, 0.63, 0.78);
    colors[clr.MenuBarBg]             = ImVec4(0.30, 0.20, 0.39, 0.57);
    colors[clr.ScrollbarBg]           = ImVec4(0.30, 0.20, 0.39, 1.00);
    colors[clr.ScrollbarGrab]         = ImVec4(0.41, 0.19, 0.63, 0.31);
    colors[clr.ScrollbarGrabHovered]  = ImVec4(0.41, 0.19, 0.63, 0.78);
    colors[clr.ScrollbarGrabActive]   = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.ComboBg]               = ImVec4(0.30, 0.20, 0.39, 1.00);
    colors[clr.CheckMark]             = ImVec4(0.56, 0.61, 1.00, 1.00);
    colors[clr.SliderGrab]            = ImVec4(0.41, 0.19, 0.63, 0.24);
    colors[clr.SliderGrabActive]      = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.Button]                = ImVec4(0.41, 0.19, 0.63, 0.44);
    colors[clr.ButtonHovered]         = ImVec4(0.41, 0.19, 0.63, 0.86);
    colors[clr.ButtonActive]          = ImVec4(0.64, 0.33, 0.94, 1.00);
    colors[clr.Header]                = ImVec4(0.41, 0.19, 0.63, 0.76);
    colors[clr.HeaderHovered]         = ImVec4(0.41, 0.19, 0.63, 0.86);
    colors[clr.HeaderActive]          = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.ResizeGrip]            = ImVec4(0.41, 0.19, 0.63, 0.20);
    colors[clr.ResizeGripHovered]     = ImVec4(0.41, 0.19, 0.63, 0.78);
    colors[clr.ResizeGripActive]      = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.CloseButton]           = ImVec4(1.00, 1.00, 1.00, 0.75);
    colors[clr.CloseButtonHovered]    = ImVec4(0.88, 0.74, 1.00, 0.59);
    colors[clr.CloseButtonActive]     = ImVec4(0.88, 0.85, 0.92, 1.00);
    colors[clr.PlotLines]             = ImVec4(0.89, 0.85, 0.92, 0.63);
    colors[clr.PlotLinesHovered]      = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.PlotHistogram]         = ImVec4(0.89, 0.85, 0.92, 0.63);
    colors[clr.PlotHistogramHovered]  = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.TextSelectedBg]        = ImVec4(0.41, 0.19, 0.63, 0.43);
    colors[clr.ModalWindowDarkening]  = ImVec4(0.20, 0.20, 0.20, 0.35);
end
apply_custom_style()

local loaded = false
local glyph_ranges = nil
local function load_font()
    if loaded then return end
    local font_path = getFolderPath(0x14) .. '\\trebucbd.ttf'
    assert(doesFileExist(font_path), 'WTF: Font "' .. font_path .. '" doesn\'t exist')
    imgui.SwitchContext()
    imgui.GetIO().Fonts:Clear()
    local builder = imgui.ImFontAtlasGlyphRangesBuilder()
    builder:AddRanges(imgui.GetIO().Fonts:GetGlyphRangesCyrillic())
    builder:AddText(u8'‚„…†‡€‰‹‘’“”•–—™›№')
    glyph_ranges = builder:BuildRanges()
    imgui.GetIO().Fonts:AddFontFromFileTTF(font_path, 14.0*1.3, nil, glyph_ranges)
    imgui.RebuildFonts()
    loaded = true
end
function imgui.BeforeDrawFrame()
    load_font()
end


function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('aocode', aacode)
end

function imgui.BeforeDrawFrame()
    load_font()
end

if not doesDirectoryExist('moonloader/config') then
    createDirectory('moonloader/config')
end

local defaults = {
    main = {
        autocode = false,
        codenew = '2500',
        code = '2500',
        codemega = '2500'
    }
}

local ini = inicfg.load(defaults, 'autocode.ini')

--buffers
local diaAutoCode = imgui.ImBool(ini.main.autocode)
local diaNew = imgui.ImBuffer(u8(ini.main.codenew), 64)
local diaMega = imgui.ImBuffer(u8(ini.main.codemega), 64)
local diaCode = imgui.ImBuffer(u8(ini.main.code), 64)

function aacode()
    aacoded = not aacoded
    if aacoded then
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.Process = true
    else
        imgui.ShowCursor = false
        imgui.Process = false
        imgui.LockPlayer = false
    end
end
function eventsWindow()
    imgui.PushItemWidth(150*global_scale.v)
    imgui.Checkbox(u8'Автоответчик на коды(ЗАПРЕЩЕННО!)', diaAutoCode)
    imgui.InputText(u8'Задержка на /mega', diaMega)
    imgui.Hint('Задержка на автоответичк /mega\nУКАЗЫВАЕТСЯ В СЕКУНДАХ')
    imgui.InputText(u8'Задержка на /newcode', diaNew)
    imgui.Hint('Задержка на автоответичк /newcode\nУКАЗЫВАЕТСЯ В СЕКУНДАХ')
    imgui.InputText(u8'Задержка на /code', diaCode)
    imgui.Hint('Задержка на автоответичк /code\nУКАЗЫВАЕТСЯ В СЕКУНДАХ')
    imgui.PopItemWidth()
    imgui.SetCursorPosX(175*global_scale.v)
    if imgui.Button('Save', imgui.ImVec2(150*global_scale.v, 20*global_scale.v)) then
        ini.main.autocode = u8:decode(diaAutoCode.v)
        ini.main.codenew = u8:decode(diaNew.v)
        ini.main.code = u8:decode(diaCode.v)
        ini.main.codemega = u8:decode(diaMega.v)
        inicfg.save(ini, 'autocode.ini')
        printStringNow('SAVED!', 2000)
    end
end

local winState = 1

function imgui.OnDrawFrame()
    if aacoded then
        imgui.SetNextWindowPos(imgui.ImVec2(resx/2, resy/2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(500*global_scale.v, 300*global_scale.v))
        imgui.Begin(u8"AutoCodeForMarti", nil, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize + imgui.WindowFlags.MenuBar)
        imgui.BeginMenuBar()
        if imgui.MenuItem(u8'Настройки') then
            winState = 3
        end
        if winState == 3 then
            eventsWindow()
        end
        imgui.End()
    end
end

function onScriptTerminate(s, quit)
    if s == thisScript() and aacoded and not quit then
        lockPlayerControl(false)
        showCursor(false, false)
    end
end

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

YarikVL

Известный
Проверенный
4,751
1,814
Что делать? (Плохо разбираюсь в луа, даже не начинаюший, делал скрипт для боусника)
Код:
Код:
script_name("AutoCodeForMarti")
script_authors("DaVinci")
script_version("1")

--deps
local effil = require 'effil'
local encoding = require 'encoding'
local imgui = require 'imgui'
local inicfg = require 'inicfg'
local sampev = require 'lib.samp.events'
local sampev = require("samp.events")
encoding.default = 'CP1251'
u8 = encoding.UTF8

local global_scale = imgui.ImFloat(1.2)
local resx, resy = getScreenResolution()

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
    style.WindowTitleAlign = imgui.ImVec2(0.5, 0.5)
    style.ChildWindowRounding = 2.0
    style.FrameRounding = 3
    style.ItemSpacing = imgui.ImVec2(5.0, 4.0)
    style.ScrollbarSize = 13.0
    style.ScrollbarRounding = 0
    style.GrabMinSize = 8.0
    style.GrabRounding = 1.0
    style.WindowPadding = imgui.ImVec2(4.0, 4.0)
    style.FramePadding = imgui.ImVec2(3.5, 3.5)
    style.ButtonTextAlign = imgui.ImVec2(0.0, 0.5)
    colors[clr.WindowBg]              = ImVec4(0.14, 0.12, 0.16, 1.00);
    colors[clr.ChildWindowBg]         = ImVec4(0.30, 0.20, 0.39, 0.00);
    colors[clr.PopupBg]               = ImVec4(0.05, 0.05, 0.10, 0.90);
    colors[clr.Border]                = ImVec4(0.89, 0.85, 0.92, 0.30);
    colors[clr.BorderShadow]          = ImVec4(0.00, 0.00, 0.00, 0.00);
    colors[clr.FrameBg]               = ImVec4(0.30, 0.20, 0.39, 1.00);
    colors[clr.FrameBgHovered]        = ImVec4(0.41, 0.19, 0.63, 0.68);
    colors[clr.FrameBgActive]         = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.TitleBg]               = ImVec4(0.41, 0.19, 0.63, 0.45);
    colors[clr.TitleBgCollapsed]      = ImVec4(0.41, 0.19, 0.63, 0.35);
    colors[clr.TitleBgActive]         = ImVec4(0.41, 0.19, 0.63, 0.78);
    colors[clr.MenuBarBg]             = ImVec4(0.30, 0.20, 0.39, 0.57);
    colors[clr.ScrollbarBg]           = ImVec4(0.30, 0.20, 0.39, 1.00);
    colors[clr.ScrollbarGrab]         = ImVec4(0.41, 0.19, 0.63, 0.31);
    colors[clr.ScrollbarGrabHovered]  = ImVec4(0.41, 0.19, 0.63, 0.78);
    colors[clr.ScrollbarGrabActive]   = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.ComboBg]               = ImVec4(0.30, 0.20, 0.39, 1.00);
    colors[clr.CheckMark]             = ImVec4(0.56, 0.61, 1.00, 1.00);
    colors[clr.SliderGrab]            = ImVec4(0.41, 0.19, 0.63, 0.24);
    colors[clr.SliderGrabActive]      = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.Button]                = ImVec4(0.41, 0.19, 0.63, 0.44);
    colors[clr.ButtonHovered]         = ImVec4(0.41, 0.19, 0.63, 0.86);
    colors[clr.ButtonActive]          = ImVec4(0.64, 0.33, 0.94, 1.00);
    colors[clr.Header]                = ImVec4(0.41, 0.19, 0.63, 0.76);
    colors[clr.HeaderHovered]         = ImVec4(0.41, 0.19, 0.63, 0.86);
    colors[clr.HeaderActive]          = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.ResizeGrip]            = ImVec4(0.41, 0.19, 0.63, 0.20);
    colors[clr.ResizeGripHovered]     = ImVec4(0.41, 0.19, 0.63, 0.78);
    colors[clr.ResizeGripActive]      = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.CloseButton]           = ImVec4(1.00, 1.00, 1.00, 0.75);
    colors[clr.CloseButtonHovered]    = ImVec4(0.88, 0.74, 1.00, 0.59);
    colors[clr.CloseButtonActive]     = ImVec4(0.88, 0.85, 0.92, 1.00);
    colors[clr.PlotLines]             = ImVec4(0.89, 0.85, 0.92, 0.63);
    colors[clr.PlotLinesHovered]      = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.PlotHistogram]         = ImVec4(0.89, 0.85, 0.92, 0.63);
    colors[clr.PlotHistogramHovered]  = ImVec4(0.41, 0.19, 0.63, 1.00);
    colors[clr.TextSelectedBg]        = ImVec4(0.41, 0.19, 0.63, 0.43);
    colors[clr.ModalWindowDarkening]  = ImVec4(0.20, 0.20, 0.20, 0.35);
end
apply_custom_style()

local loaded = false
local glyph_ranges = nil
local function load_font()
    if loaded then return end
    local font_path = getFolderPath(0x14) .. '\\trebucbd.ttf'
    assert(doesFileExist(font_path), 'WTF: Font "' .. font_path .. '" doesn\'t exist')
    imgui.SwitchContext()
    imgui.GetIO().Fonts:Clear()
    local builder = imgui.ImFontAtlasGlyphRangesBuilder()
    builder:AddRanges(imgui.GetIO().Fonts:GetGlyphRangesCyrillic())
    builder:AddText(u8'‚„…†‡€‰‹‘’“”•–—™›№')
    glyph_ranges = builder:BuildRanges()
    imgui.GetIO().Fonts:AddFontFromFileTTF(font_path, 14.0*1.3, nil, glyph_ranges)
    imgui.RebuildFonts()
    loaded = true
end
function imgui.BeforeDrawFrame()
    load_font()
end


function main()
    if not isSampLoaded() or not isSampfuncsLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampRegisterChatCommand('aocode', aacode)
end

function imgui.BeforeDrawFrame()
    load_font()
end

if not doesDirectoryExist('moonloader/config') then
    createDirectory('moonloader/config')
end

local defaults = {
    main = {
        autocode = false,
        codenew = '2500',
        code = '2500',
        codemega = '2500'
    }
}

local ini = inicfg.load(defaults, 'autocode.ini')

--buffers
local diaAutoCode = imgui.ImBool(ini.main.autocode)
local diaNew = imgui.ImBuffer(u8(ini.main.codenew), 64)
local diaMega = imgui.ImBuffer(u8(ini.main.codemega), 64)
local diaCode = imgui.ImBuffer(u8(ini.main.code), 64)

function aacode()
    aacoded = not aacoded
    if aacoded then
        imgui.ShowCursor = true
        imgui.LockPlayer = true
        imgui.Process = true
    else
        imgui.ShowCursor = false
        imgui.Process = false
        imgui.LockPlayer = false
    end
end
function eventsWindow()
    imgui.PushItemWidth(150*global_scale.v)
    imgui.Checkbox(u8'Автоответчик на коды(ЗАПРЕЩЕННО!)', diaAutoCode)
    imgui.InputText(u8'Задержка на /mega', diaMega)
    imgui.Hint('Задержка на автоответичк /mega\nУКАЗЫВАЕТСЯ В СЕКУНДАХ')
    imgui.InputText(u8'Задержка на /newcode', diaNew)
    imgui.Hint('Задержка на автоответичк /newcode\nУКАЗЫВАЕТСЯ В СЕКУНДАХ')
    imgui.InputText(u8'Задержка на /code', diaCode)
    imgui.Hint('Задержка на автоответичк /code\nУКАЗЫВАЕТСЯ В СЕКУНДАХ')
    imgui.PopItemWidth()
    imgui.SetCursorPosX(175*global_scale.v)
    if imgui.Button('Save', imgui.ImVec2(150*global_scale.v, 20*global_scale.v)) then
        ini.main.autocode = u8:decode(diaAutoCode.v)
        ini.main.codenew = u8:decode(diaNew.v)
        ini.main.code = u8:decode(diaCode.v)
        ini.main.codemega = u8:decode(diaMega.v)
        inicfg.save(ini, 'autocode.ini')
        printStringNow('SAVED!', 2000)
    end
end

local winState = 1

function imgui.OnDrawFrame()
    if aacoded then
        imgui.SetNextWindowPos(imgui.ImVec2(resx/2, resy/2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(500*global_scale.v, 300*global_scale.v))
        imgui.Begin(u8"AutoCodeForMarti", nil, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize + imgui.WindowFlags.MenuBar)
        imgui.BeginMenuBar()
        if imgui.MenuItem(u8'Настройки') then
            winState = 3
        end
        if winState == 3 then
            eventsWindow()
        end
        imgui.End()
    end
end

function onScriptTerminate(s, quit)
    if s == thisScript() and aacoded and not quit then
        lockPlayerControl(false)
        showCursor(false, false)
    end
end

function imgui.Hint(text)
    imgui.SameLine()
    imgui.TextDisabled("(?)")
    if imgui.IsItemHovered() then
        imgui.BeginTooltip()
        imgui.TextUnformatted(u8(text))
        imgui.EndTooltip()
    end
end
Чел не трать время на нубо рп, там будут появляться ( скорее всего ) проблемы с твоими скриптами, потому что на нубо рп всё криво реализовано. Плюс лучший проект сейчас арз ( оригинальный )

На счёт скрипта, я так и не понял зачем тебе кодировка и декодировка для цифр?
Ну и крашит тебя из-за того что ты подключил шрифты fAwesome хотя их у тебя нету. Посмотри гайд Чапы в гугле на бх найдёшь: fAwesome 4/5
 

edrenbaton

Активный
232
39
Чел не трать время на нубо рп, там будут появляться ( скорее всего ) проблемы с твоими скриптами, потому что на нубо рп всё криво реализовано. Плюс лучший проект сейчас арз ( оригинальный )

На счёт скрипта, я так и не понял зачем тебе кодировка и декодировка для цифр?
Ну и крашит тебя из-за того что ты подключил шрифты fAwesome хотя их у тебя нету. Посмотри гайд Чапы в гугле на бх найдёшь: fAwesome 4/5
На нубо рп я трачу время так как в бане на ориге(До 1 числа), + на нубо рп смешно смотреть на то как игроки говорят что я ахк когда ловлю дом всего за 1.1, хотя на ориге это даже медленно))

Спс
 

NotFound

Участник
77
23
Имеется строка определённая с помощью квадратных скобок
Пример:
[[
Текст 1
Текст 2
Текст 3
]]
Мне необходимо вывести эту строку через sampAddChatMessage или sampSendChat. Как я понял надо посчитать кол-во переносов и через цикл for их вызывать, но не знаю как это правильно сделать.
 

ch1ps

Участник
101
3
Думаю все знают об инвентаре на аризоне, я не знаю, как работать с отрисовкой текста, поэтому обратился сюда, как при определённом условии открывать предмет с инвентаря, то есть: условно говоря, на первом слоту в инвентаре стоит ящик, при нажатии клавиши Н, открывается инвентарь и используется этот ящик, то есть открывается
 

YarikVL

Известный
Проверенный
4,751
1,814
Думаю все знают об инвентаре на аризоне, я не знаю, как работать с отрисовкой текста, поэтому обратился сюда, как при определённом условии открывать предмет с инвентаря, то есть: условно говоря, на первом слоту в инвентаре стоит ящик, при нажатии клавиши Н, открывается инвентарь и используется этот ящик, то есть открывается
смотрел этот скрипт https://www.blast.hk/threads/125576/ ?
Там должно быть взаимодействие с инвентарем. А вообще это клик по текстдраву, инфу о текстдравах через TextDrawEditor by Sargon можешь посмотреть
 
  • Нравится
Реакции: ch1ps

sat0ry

Известный
1,092
296
Думаю все знают об инвентаре на аризоне, я не знаю, как работать с отрисовкой текста, поэтому обратился сюда, как при определённом условии открывать предмет с инвентаря, то есть: условно говоря, на первом слоту в инвентаре стоит ящик, при нажатии клавиши Н, открывается инвентарь и используется этот ящик, то есть открывается
получай айди текстдрава, и кликай по нему
 
  • Нравится
Реакции: YarikVL