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

штейн

Известный
Проверенный
1,001
687
Lua:
--imgui ebani

function settings()
    show_main_window.v = not show_main_window.v
end

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.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.FrameBg]                = ImVec4(128, 128, 128, 0.54)
    colors[clr.FrameBgHovered]         = ImVec4(128, 128, 128, 0.40)
    colors[clr.FrameBgActive]          = ImVec4(128, 128, 128, 0.67)
    colors[clr.TitleBg]                = ImVec4(6, 0, 0, 1.00)
    colors[clr.TitleBgActive]          = ImVec4(6, 0, 0, 1.00)
    colors[clr.TitleBgCollapsed]       = ImVec4(24, 0, 0, 0.75)
    colors[clr.MenuBarBg]              = ImVec4(128, 128, 128, 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.CheckMark]              = ImVec4(1, 0, 0, 0.75)
    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(128, 128, 128, 0.40)
    colors[clr.ButtonHovered]          = ImVec4(128, 128, 128, 1.00)
    colors[clr.ButtonActive]           = ImVec4(128, 128, 128, 1.00)
    colors[clr.Header]                 = ImVec4(128, 128, 128, 0.31)
    colors[clr.HeaderHovered]          = ImVec4(128, 128, 128, 0.80)
    colors[clr.HeaderActive]           = ImVec4(128, 128, 128, 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(128, 128, 128, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(128, 128, 128, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(128, 128, 128, 0.95)
    colors[clr.CloseButton]            = ImVec4(0.06, 0.06, 0.06, 0.50)
    colors[clr.CloseButtonHovered]     = ImVec4(0.06, 0.06, 0.06, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.06, 0.06, 0.06, 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.TextSelectedBg]         = ImVec4(0.26, 0.59, 0.98, 0.35)
    colors[clr.ModalWindowDarkening]   = ImVec4(128, 128, 128, 0.35)
end
apply_custom_style()

do

    show_main_window = imgui.ImBool(false)
    local show_another_window = imgui.ImBool(false)
    local show_test_window = imgui.ImBool(false)
    local test_text_buffer = imgui.ImBuffer(256)
    local test_text_buffer2 = imgui.ImBuffer(256)
    local show_help_window = imgui.ImBool(false)
    local moonimgui_text_buffer = imgui.ImBuffer('test', 256)
    local glyph_ranges_cyrillic = nil
    function imgui.OnDrawFrame()
        if show_main_window.v then
            local data = inicfg.load(nil, 'moonloader\\config\\GAuth\\'..wdata..'')
            local sw, sh = getScreenResolution()
            imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
            imgui.SetNextWindowSize(imgui.ImVec2(600, 250), imgui.Cond.FirstUseEver)
            imgui.Begin(u8'Основное Меню', show_main_window)
            local btn_size = imgui.ImVec2(-0.1, 0)
            if imgui.Button(u8'Настройки данных', btn_size) then
                show_another_window.v = not show_another_window.v
                imgui.End()
            end
            imgui.Text(u8'            Скрипт GAuth V3 - новая версия скрипта, который автоматически вводит гугл код.')
            imgui.Text(u8'        Для использования скрипта необходимо указать Ваш ник, секретный код и сервер, на ..')
            imgui.Text(u8'                                        .. котором вы собираетесь использовать скрипт.')
            imgui.Text('')
            imgui.Text(u8'                    GAuth V3 отличается от своего предшественника новым, переписанным ..')
            imgui.Text(u8'                                        .. с нуля кодом и удобностью в использовании.')
            imgui.Text(u8'                        Написана возможность использовать скрипт сразу на 3-х серверах.')
            imgui.Text(u8'            Полностью изменено оформление скрипта, открыт код, ибо там нечего скрывать.')
            imgui.End()
        end

        if show_another_window.v then
            local data = inicfg.load(nil, 'moonloader\\config\\GAuth\\'..wdata..'')
            local btn_size = imgui.ImVec2(-0.1, 0)
            imgui.SetNextWindowSize(imgui.ImVec2(600, 500), imgui.Cond.FirstUseEver)
            imgui.Begin(u8'Настройки данных', show_another_window)
            imgui.Text(u8'                                                                    Секретный код:')
            imgui.TextColored(RGBtoImVec4('808080'), u8'                                                                  '..data.options.secret)
            if imgui.CollapsingHeader(u8'                                                    Изменить секретный код') then
                imgui.Text(u8'Указывайте секретный код в шестнадцати значном формате.')
                imgui.Text(u8'Секретный код можно узнать на почте, либо через Администрацию.')
                if imgui.InputText('##secret', test_text_buffer) then
                    data.options.secret = test_text_buffer.v
                    imgui.Text(u8'Вы изменили секретный код на '..data.options.secret)
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
            end
            imgui.Text('')
            imgui.Text(u8'                                                                         Сервер:')
            imgui.TextColored(RGBtoImVec4('808080'), u8'                                                                  '..bserver)
            if imgui.CollapsingHeader(u8'                                                            Изменить сервер') then
                if imgui.Button(u8'Pears Project [ 1 ]', btn_size) then
                    data.options.server = '176.32.37.62'
                    imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
                if imgui.Button(u8'Pears Project [ 2 ]', btn_size) then
                    data.options.server = '176.32.39.34'
                    imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
                if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                    data.options.server = '176.32.37.63'
                    inicfg.save(data, '\\GAuth\\'..wdata)
                    lua_thread.create(function()
                            local clock = os.clock()
                            while os.clock() - clock < 3 do wait(0)
                        end
                    end)
                    imgui.Text(u8'Вы изменили сервер на '..bserver)
                end
            end
            imgui.Text('')
            imgui.Text(u8'                                                                             Ник:')
            imgui.TextColored(RGBtoImVec4('808080'), u8'                                                               '..nick:gsub('_', ' '))
            if imgui.CollapsingHeader(u8'                                                                Изменить ник') then
                imgui.Text(u8'Указывайте ник в формате - "Nick_Name".')
                imgui.Text(u8'Указывать нужно ник, который Вы используете на указанном Вами сервере.')
                if imgui.InputText('##nick', test_text_buffer2) then
                    data.options.nick = test_text_buffer2.v
                    imgui.Text(u8'Вы изменили ник на '..nick:gsub('_', ' '))
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
            end
        end
    end
end

открываю show_another_window - крашит гта
 

imring

Ride the Lightning
Всефорумный модератор
2,355
2,518
Lua:
--imgui ebani

function settings()
    show_main_window.v = not show_main_window.v
end

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.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.FrameBg]                = ImVec4(128, 128, 128, 0.54)
    colors[clr.FrameBgHovered]         = ImVec4(128, 128, 128, 0.40)
    colors[clr.FrameBgActive]          = ImVec4(128, 128, 128, 0.67)
    colors[clr.TitleBg]                = ImVec4(6, 0, 0, 1.00)
    colors[clr.TitleBgActive]          = ImVec4(6, 0, 0, 1.00)
    colors[clr.TitleBgCollapsed]       = ImVec4(24, 0, 0, 0.75)
    colors[clr.MenuBarBg]              = ImVec4(128, 128, 128, 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.CheckMark]              = ImVec4(1, 0, 0, 0.75)
    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(128, 128, 128, 0.40)
    colors[clr.ButtonHovered]          = ImVec4(128, 128, 128, 1.00)
    colors[clr.ButtonActive]           = ImVec4(128, 128, 128, 1.00)
    colors[clr.Header]                 = ImVec4(128, 128, 128, 0.31)
    colors[clr.HeaderHovered]          = ImVec4(128, 128, 128, 0.80)
    colors[clr.HeaderActive]           = ImVec4(128, 128, 128, 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(128, 128, 128, 0.25)
    colors[clr.ResizeGripHovered]      = ImVec4(128, 128, 128, 0.67)
    colors[clr.ResizeGripActive]       = ImVec4(128, 128, 128, 0.95)
    colors[clr.CloseButton]            = ImVec4(0.06, 0.06, 0.06, 0.50)
    colors[clr.CloseButtonHovered]     = ImVec4(0.06, 0.06, 0.06, 1.00)
    colors[clr.CloseButtonActive]      = ImVec4(0.06, 0.06, 0.06, 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.TextSelectedBg]         = ImVec4(0.26, 0.59, 0.98, 0.35)
    colors[clr.ModalWindowDarkening]   = ImVec4(128, 128, 128, 0.35)
end
apply_custom_style()

do

    show_main_window = imgui.ImBool(false)
    local show_another_window = imgui.ImBool(false)
    local show_test_window = imgui.ImBool(false)
    local test_text_buffer = imgui.ImBuffer(256)
    local test_text_buffer2 = imgui.ImBuffer(256)
    local show_help_window = imgui.ImBool(false)
    local moonimgui_text_buffer = imgui.ImBuffer('test', 256)
    local glyph_ranges_cyrillic = nil
    function imgui.OnDrawFrame()
        if show_main_window.v then
            local data = inicfg.load(nil, 'moonloader\\config\\GAuth\\'..wdata..'')
            local sw, sh = getScreenResolution()
            imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
            imgui.SetNextWindowSize(imgui.ImVec2(600, 250), imgui.Cond.FirstUseEver)
            imgui.Begin(u8'Основное Меню', show_main_window)
            local btn_size = imgui.ImVec2(-0.1, 0)
            if imgui.Button(u8'Настройки данных', btn_size) then
                show_another_window.v = not show_another_window.v
                imgui.End()
            end
            imgui.Text(u8'            Скрипт GAuth V3 - новая версия скрипта, который автоматически вводит гугл код.')
            imgui.Text(u8'        Для использования скрипта необходимо указать Ваш ник, секретный код и сервер, на ..')
            imgui.Text(u8'                                        .. котором вы собираетесь использовать скрипт.')
            imgui.Text('')
            imgui.Text(u8'                    GAuth V3 отличается от своего предшественника новым, переписанным ..')
            imgui.Text(u8'                                        .. с нуля кодом и удобностью в использовании.')
            imgui.Text(u8'                        Написана возможность использовать скрипт сразу на 3-х серверах.')
            imgui.Text(u8'            Полностью изменено оформление скрипта, открыт код, ибо там нечего скрывать.')
            imgui.End()
        end

        if show_another_window.v then
            local data = inicfg.load(nil, 'moonloader\\config\\GAuth\\'..wdata..'')
            local btn_size = imgui.ImVec2(-0.1, 0)
            imgui.SetNextWindowSize(imgui.ImVec2(600, 500), imgui.Cond.FirstUseEver)
            imgui.Begin(u8'Настройки данных', show_another_window)
            imgui.Text(u8'                                                                    Секретный код:')
            imgui.TextColored(RGBtoImVec4('808080'), u8'                                                                  '..data.options.secret)
            if imgui.CollapsingHeader(u8'                                                    Изменить секретный код') then
                imgui.Text(u8'Указывайте секретный код в шестнадцати значном формате.')
                imgui.Text(u8'Секретный код можно узнать на почте, либо через Администрацию.')
                if imgui.InputText('##secret', test_text_buffer) then
                    data.options.secret = test_text_buffer.v
                    imgui.Text(u8'Вы изменили секретный код на '..data.options.secret)
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
            end
            imgui.Text('')
            imgui.Text(u8'                                                                         Сервер:')
            imgui.TextColored(RGBtoImVec4('808080'), u8'                                                                  '..bserver)
            if imgui.CollapsingHeader(u8'                                                            Изменить сервер') then
                if imgui.Button(u8'Pears Project [ 1 ]', btn_size) then
                    data.options.server = '176.32.37.62'
                    imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
                if imgui.Button(u8'Pears Project [ 2 ]', btn_size) then
                    data.options.server = '176.32.39.34'
                    imgui.Text(u8'Вы изменили сервер на '..data.options.server)
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
                if imgui.Button(u8'Pears Project [ 3 ]', btn_size) then
                    data.options.server = '176.32.37.63'
                    inicfg.save(data, '\\GAuth\\'..wdata)
                    lua_thread.create(function()
                            local clock = os.clock()
                            while os.clock() - clock < 3 do wait(0)
                        end
                    end)
                    imgui.Text(u8'Вы изменили сервер на '..bserver)
                end
            end
            imgui.Text('')
            imgui.Text(u8'                                                                             Ник:')
            imgui.TextColored(RGBtoImVec4('808080'), u8'                                                               '..nick:gsub('_', ' '))
            if imgui.CollapsingHeader(u8'                                                                Изменить ник') then
                imgui.Text(u8'Указывайте ник в формате - "Nick_Name".')
                imgui.Text(u8'Указывать нужно ник, который Вы используете на указанном Вами сервере.')
                if imgui.InputText('##nick', test_text_buffer2) then
                    data.options.nick = test_text_buffer2.v
                    imgui.Text(u8'Вы изменили ник на '..nick:gsub('_', ' '))
                    inicfg.save(data, '\\GAuth\\'..wdata)
                end
            end
        end
    end
end

открываю show_another_window - крашит гта
imgui.End() где?
Подскажите как сделать таймер 2-ух минутный? :)
Lua:
local clock = os.clock()
local delay = 600
while os.clock() - clock < delay do wait(0) print('Left '..('%d'):format(delay-(os.clock() - clock))..' seconds.') end
 
  • Нравится
Реакции: f0rtrix

WhackerH

Новичок
43
0
как работать с таким типом диалогов?
XSONOsU.png
 

Fomikus

Известный
Проверенный
474
343
как работать с таким типом диалогов?
XSONOsU.png
sampSendDialogResponse(id, button, list, text)
ID - id диалога
button - кнопка (1 если жмем на Уря, 2 если жмем на Закрыть)
list - строчка, тут её нету, пишем -1
text - текст что вобьем в диалог

Как работать с потоками?
Где их создавать(Вне/внутри main)
Как их запустить.

Делает шаг и встает на месте, в чем проблема?
Lua:
function main()
    if not isSampLoaded() and not isSampfuncsLoaded then return end
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand('MyBot', BotCode)
    wait(-1)
end

function BotCode()
    lua_thread.create(function()
        BeginToPoint(1481.174560, -1349.359985, 113.129318, 1.000000, -255, true)
        if sampIsDialogActive() then
            local id = sampGetCurrentDialogId()
            if id == 857 then
        sampSendDialogResponse(857, 1, 1, -1)
        end
        end
        BeginToPoint(1474.552246, -1349.468627, 113.13032531738, 1.000000, -255, false)
                end)
end
 
Последнее редактирование модератором:

штейн

Известный
Проверенный
1,001
687
допутим у меня есть шестнадцатизначный текст, например: asd2as6ajsda1asd
мне нужно, чтобы половина этого текста была заменена на *, как это сделать?
 

#Northn

Police Helper «Reborn» — уже ШЕСТЬ лет!
Всефорумный модератор
2,639
2,489
допутим у меня есть шестнадцатизначный текст, например: asd2as6ajsda1asd
мне нужно, чтобы половина этого текста была заменена на *, как это сделать?
Не изобретать велосипед и использовать готовые библиотеки шифрования? AESLua
 

Bogach

Активный
558
27
Как можно остановить выполнение какого - то конкретного части кода ? Возьмем к примеру Лекции, включил и вдруг по каким - то причинам нужно остановить это, как это сделать? Учитывая, что ещё лекции с задержкой, можно остановить перезагрузкой скрипта ? Или есть что - то по проще ?
 

Fomikus

Известный
Проверенный
474
343
как текст введеный в этот диалог вывести в чат?
Если ты сам в скрипте указал что писать и он будет писать это всегда
sampAddChatMessage(text, color)
Если переменную засунул то(Мб так нельзя, незнаю):
local ABC = yourtext
sampAddChatMessage(string.format('Вы ввели число: %d', ABC), -1)
 

Bogach

Активный
558
27
Если они у тебя допустим в потоке, то можно использовать
lua_thread:terminate()

например
Lua:
local lecThread = lua_thread.create_suspended(function ()
  -- тут идут лекции
end)

function lec()
  lecThread:run()
end

--какое-нибудь событие когда нужно остановить лекцию
lecThread:terminate()
А если не в потоке, а просто в основном цикле, в действии при клике на пункт меню, типа. я открываю диалог, выбираю пункт с лекциями и пошла лекция в чат, в таком случае как остановить ?