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

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
товарищи программисты, я не знал что вы целый срач устроите по этому поводу. Мне правда интересно что должен быть за тостер, чтобы после лишней проверки терялась какая-то значительная часть производительности, но спасибо за поправку
Товарищ программист, попробуйте задать какую-нибудь проверку, например на электронную почту, я посмотрю какой тостер это вытянет по 5 раз проверять вместо 1
 

Myradov|

Известный
361
106
как вот это
Lua:
imgui.SwitchContext()
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4

colors[clr.Text]   = ImVec4(0.00, 0.00, 0.00, 0.51)
colors[clr.TextDisabled]   = ImVec4(0.24, 0.24, 0.24, 1.00)
colors[clr.WindowBg]              = ImVec4(1.00, 1.00, 1.00, 1.00)
colors[clr.ChildWindowBg]         = ImVec4(0.96, 0.96, 0.96, 1.00)
colors[clr.PopupBg]               = ImVec4(0.92, 0.92, 0.92, 1.00)
colors[clr.Border]                = ImVec4(0.86, 0.86, 0.86, 1.00)
colors[clr.BorderShadow]          = ImVec4(0.00, 0.00, 0.00, 0.00)
colors[clr.FrameBg]               = ImVec4(0.88, 0.88, 0.88, 1.00)
colors[clr.FrameBgHovered]        = ImVec4(0.82, 0.82, 0.82, 1.00)
colors[clr.FrameBgActive]         = ImVec4(0.76, 0.76, 0.76, 1.00)
colors[clr.TitleBg]               = ImVec4(0.00, 0.45, 1.00, 0.82)
colors[clr.TitleBgCollapsed]      = ImVec4(0.00, 0.45, 1.00, 0.82)
colors[clr.TitleBgActive]         = ImVec4(0.00, 0.45, 1.00, 0.82)
colors[clr.MenuBarBg]             = ImVec4(0.00, 0.37, 0.78, 1.00)
colors[clr.ScrollbarBg]           = ImVec4(0.00, 0.00, 0.00, 0.00)
colors[clr.ScrollbarGrab]         = ImVec4(0.00, 0.35, 1.00, 0.78)
colors[clr.ScrollbarGrabHovered]  = ImVec4(0.00, 0.33, 1.00, 0.84)
colors[clr.ScrollbarGrabActive]   = ImVec4(0.00, 0.31, 1.00, 0.88)
colors[clr.ComboBg]               = ImVec4(0.92, 0.92, 0.92, 1.00)
colors[clr.CheckMark]             = ImVec4(0.00, 0.49, 1.00, 0.59)
colors[clr.SliderGrab]            = ImVec4(0.00, 0.49, 1.00, 0.59)
colors[clr.SliderGrabActive]      = ImVec4(0.00, 0.39, 1.00, 0.71)
colors[clr.Button]                = ImVec4(0.00, 0.49, 1.00, 0.59)
colors[clr.ButtonHovered]         = ImVec4(0.00, 0.49, 1.00, 0.71)
colors[clr.ButtonActive]          = ImVec4(0.00, 0.49, 1.00, 0.78)
colors[clr.Header]                = ImVec4(0.00, 0.49, 1.00, 0.78)
colors[clr.HeaderHovered]         = ImVec4(0.00, 0.49, 1.00, 0.71)
colors[clr.HeaderActive]          = ImVec4(0.00, 0.49, 1.00, 0.78)
colors[clr.ResizeGrip]            = ImVec4(0.00, 0.39, 1.00, 0.59)
colors[clr.ResizeGripHovered]     = ImVec4(0.00, 0.27, 1.00, 0.59)
colors[clr.ResizeGripActive]      = ImVec4(0.00, 0.25, 1.00, 0.63)
colors[clr.CloseButton]           = ImVec4(0.00, 0.35, 0.96, 0.71)
colors[clr.CloseButtonHovered]    = ImVec4(0.00, 0.31, 0.88, 0.69)
colors[clr.CloseButtonActive]     = ImVec4(0.00, 0.25, 0.88, 0.67)
colors[clr.PlotLines]             = ImVec4(0.00, 0.39, 1.00, 0.75)
colors[clr.PlotLinesHovered]      = ImVec4(0.00, 0.39, 1.00, 0.75)
colors[clr.PlotHistogram]         = ImVec4(0.00, 0.39, 1.00, 0.75)
colors[clr.PlotHistogramHovered]  = ImVec4(0.00, 0.35, 0.92, 0.78)
colors[clr.TextSelectedBg]        = ImVec4(0.00, 0.47, 1.00, 0.59)
colors[clr.ModalWindowDarkening]  = ImVec4(0.20, 0.20, 0.20, 0.35)
совместить с этим?
Lua:
local events = require("lib.samp.events")
require "lib.moonloader"
local keys = require 'vkeys'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)
local peremenaya = imgui.ImBool(false)
local x, y, z = getCharCoordinates(PLAYER_PED)

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('test',qq)
    sampRegisterChatCommand('ojsdfnjojkgn',on)

    imgui.Process = false
    while true do
        wait(0)
        imgui.Process = main_window_state.v
    end
end


function qq(arg)
    main_window_state.v = not main_window_state.v
end

function on(arg)
    lua_thread.create(function()
    local Px, Py, Pz = getCharCoordinates(1) -- исходна¤ точка (откуда)
    local Gx, Gy, Gz = -25.42812538147, 1858.9477539063, 17.713193893433 -- конечна¤ точка (куда)
    local Dx, Dy, Dz = Gx - Px, Gy - Py, Gz - Pz -- считаем длину по векторам
    local D = math.sqrt(Dx ^ 2 + Dy ^ 2 + Dz ^ 2)
    local steps = math.floor(D / 1) -- stepLength замен¤й на свое число, это длина прыжка в метрах
    local path = {}
    for i = 1, steps do
      path[#path+1] = {
        x = Px + (Dx / steps) * i,
        y = Py + (Dy / steps) * i,
        z = Pz + (Dz / steps) * i
      }
      end
    path[#path+1] = {x = Gx, y = Gy, z = Gz}
        for i = 1, steps do
            wait(100) -- подбирай задержку между шагами
            setCharCoordinates(1, path[i].x, path[i].y, path[i].z)
            setVirtualKeyDown(VK_MENU, true)
            wait(100)
            setVirtualKeyDown(VK_MENU, false)
        end
    end)
end



function imgui.OnDrawFrame()
    local sw, sh = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(500,300), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2),imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("Cnn helper by Biuti", main_window_state)
        if imgui.Checkbox(u8'твой чекбокс', peremenaya) then
            on()
        end
    end
    imgui.End()
end
Всунуть в любую часть кода. Лучше в конец чтобы не мешало
Lua:
local events = require("lib.samp.events")
require "lib.moonloader"
local keys = require 'vkeys'
local imgui = require 'imgui'
local encoding = require 'encoding'
encoding.default = 'CP1251'
u8 = encoding.UTF8
local main_window_state = imgui.ImBool(false)
local text_buffer = imgui.ImBuffer(256)
local peremenaya = imgui.ImBool(false)
local x, y, z = getCharCoordinates(PLAYER_PED)

function main()
    repeat wait(0) until isSampAvailable()
    sampRegisterChatCommand('test',qq)
    sampRegisterChatCommand('ojsdfnjojkgn',on)
 
    imgui.Process = false
    while true do
        wait(0)
        imgui.Process = main_window_state.v
    end
end


function qq(arg)
    main_window_state.v = not main_window_state.v
end

function on(arg)
    lua_thread.create(function()
    local Px, Py, Pz = getCharCoordinates(1) -- исходна¤ точка (откуда)
    local Gx, Gy, Gz = -25.42812538147, 1858.9477539063, 17.713193893433 -- конечна¤ точка (куда)
    local Dx, Dy, Dz = Gx - Px, Gy - Py, Gz - Pz -- считаем длину по векторам
    local D = math.sqrt(Dx ^ 2 + Dy ^ 2 + Dz ^ 2)
    local steps = math.floor(D / 1) -- stepLength замен¤й на свое число, это длина прыжка в метрах
    local path = {}
    for i = 1, steps do
      path[#path+1] = {
        x = Px + (Dx / steps) * i,
        y = Py + (Dy / steps) * i,
        z = Pz + (Dz / steps) * i
      }
      end
    path[#path+1] = {x = Gx, y = Gy, z = Gz}
        for i = 1, steps do
            wait(100) -- подбирай задержку между шагами
            setCharCoordinates(1, path[i].x, path[i].y, path[i].z)
            setVirtualKeyDown(VK_MENU, true)
            wait(100)
            setVirtualKeyDown(VK_MENU, false)
        end
    end)
end



function imgui.OnDrawFrame()
    local sw, sh = getScreenResolution()
    if main_window_state.v then
        imgui.SetNextWindowSize(imgui.ImVec2(500,300), imgui.Cond.FirstUseEver)
        imgui.SetNextWindowPos(imgui.ImVec2((sw / 2), sh / 2),imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.Begin("Cnn helper by Biuti", main_window_state)
        if imgui.Checkbox(u8'твой чекбокс', peremenaya) then
            on()
        end
    end
    imgui.End()
end

imgui.SwitchContext()
local style = imgui.GetStyle()
local colors = style.Colors
local clr = imgui.Col
local ImVec4 = imgui.ImVec4

colors[clr.Text]   = ImVec4(0.00, 0.00, 0.00, 0.51)
colors[clr.TextDisabled]   = ImVec4(0.24, 0.24, 0.24, 1.00)
colors[clr.WindowBg]              = ImVec4(1.00, 1.00, 1.00, 1.00)
colors[clr.ChildWindowBg]         = ImVec4(0.96, 0.96, 0.96, 1.00)
colors[clr.PopupBg]               = ImVec4(0.92, 0.92, 0.92, 1.00)
colors[clr.Border]                = ImVec4(0.86, 0.86, 0.86, 1.00)
colors[clr.BorderShadow]          = ImVec4(0.00, 0.00, 0.00, 0.00)
colors[clr.FrameBg]               = ImVec4(0.88, 0.88, 0.88, 1.00)
colors[clr.FrameBgHovered]        = ImVec4(0.82, 0.82, 0.82, 1.00)
colors[clr.FrameBgActive]         = ImVec4(0.76, 0.76, 0.76, 1.00)
colors[clr.TitleBg]               = ImVec4(0.00, 0.45, 1.00, 0.82)
colors[clr.TitleBgCollapsed]      = ImVec4(0.00, 0.45, 1.00, 0.82)
colors[clr.TitleBgActive]         = ImVec4(0.00, 0.45, 1.00, 0.82)
colors[clr.MenuBarBg]             = ImVec4(0.00, 0.37, 0.78, 1.00)
colors[clr.ScrollbarBg]           = ImVec4(0.00, 0.00, 0.00, 0.00)
colors[clr.ScrollbarGrab]         = ImVec4(0.00, 0.35, 1.00, 0.78)
colors[clr.ScrollbarGrabHovered]  = ImVec4(0.00, 0.33, 1.00, 0.84)
colors[clr.ScrollbarGrabActive]   = ImVec4(0.00, 0.31, 1.00, 0.88)
colors[clr.ComboBg]               = ImVec4(0.92, 0.92, 0.92, 1.00)
colors[clr.CheckMark]             = ImVec4(0.00, 0.49, 1.00, 0.59)
colors[clr.SliderGrab]            = ImVec4(0.00, 0.49, 1.00, 0.59)
colors[clr.SliderGrabActive]      = ImVec4(0.00, 0.39, 1.00, 0.71)
colors[clr.Button]                = ImVec4(0.00, 0.49, 1.00, 0.59)
colors[clr.ButtonHovered]         = ImVec4(0.00, 0.49, 1.00, 0.71)
colors[clr.ButtonActive]          = ImVec4(0.00, 0.49, 1.00, 0.78)
colors[clr.Header]                = ImVec4(0.00, 0.49, 1.00, 0.78)
colors[clr.HeaderHovered]         = ImVec4(0.00, 0.49, 1.00, 0.71)
colors[clr.HeaderActive]          = ImVec4(0.00, 0.49, 1.00, 0.78)
colors[clr.ResizeGrip]            = ImVec4(0.00, 0.39, 1.00, 0.59)
colors[clr.ResizeGripHovered]     = ImVec4(0.00, 0.27, 1.00, 0.59)
colors[clr.ResizeGripActive]      = ImVec4(0.00, 0.25, 1.00, 0.63)
colors[clr.CloseButton]           = ImVec4(0.00, 0.35, 0.96, 0.71)
colors[clr.CloseButtonHovered]    = ImVec4(0.00, 0.31, 0.88, 0.69)
colors[clr.CloseButtonActive]     = ImVec4(0.00, 0.25, 0.88, 0.67)
colors[clr.PlotLines]             = ImVec4(0.00, 0.39, 1.00, 0.75)
colors[clr.PlotLinesHovered]      = ImVec4(0.00, 0.39, 1.00, 0.75)
colors[clr.PlotHistogram]         = ImVec4(0.00, 0.39, 1.00, 0.75)
colors[clr.PlotHistogramHovered]  = ImVec4(0.00, 0.35, 0.92, 0.78)
colors[clr.TextSelectedBg]        = ImVec4(0.00, 0.47, 1.00, 0.59)
colors[clr.ModalWindowDarkening]  = ImVec4(0.20, 0.20, 0.20, 0.35)
 

samartinell1

Участник
98
14
Товарищ программист, попробуйте задать какую-нибудь проверку, например на электронную почту, я посмотрю какой тостер это вытянет по 5 раз проверять вместо 1
я может что-то не понимаю, но я вывел os.clock() в начале проверки и в конце и там разница в 4 тысячных секунды. Также вот скрин кода(почти максимум проверок, что дает сделать луа).
1600012917568.png

1600013076523.png
Позже сделал точно также, только с двумя проверками и получил абсолютно такой же результат.
1600013221775.png
1600013230875.png
Возможно в каком то супер большом коде, где будут проверки по-сложнее, разница будет видна, но это явно не тот случай, к которому ты на меня напал,
Если я не прав и моя проверка - говно, поясни почему
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
я может что-то не понимаю, но я вывел os.clock() в начале проверки и в конце и там разница в 4 тысячных секунды. Также вот скрин кода(почти максимум проверок, что дает сделать луа).
Посмотреть вложение 68725 Посмотреть вложение 68726
Позже сделал точно также, только с двумя проверками и получил абсолютно такой же результат.
Посмотреть вложение 68727Посмотреть вложение 68728
Возможно в каком то супер большом коде, где будут проверки по-сложнее, разница будет видна, но это явно не тот случай, к которому ты на меня напал,
Если я не прав и моя проверка - говно, поясни почему
Потому что использование регулярных выражений и обычного текста в find - совершенно разные вещи
 
  • Нравится
Реакции: samartinell1

Rei

Известный
Друг
1,612
1,670
я может что-то не понимаю, но я вывел os.clock() в начале проверки и в конце и там разница в 4 тысячных секунды. Также вот скрин кода(почти максимум проверок, что дает сделать луа).
Позже сделал точно также, только с двумя проверками и получил абсолютно такой же результат.
Возможно в каком то супер большом коде, где будут проверки по-сложнее, разница будет видна, но это явно не тот случай, к которому ты на меня напал,
Если я не прав и моя проверка - говно, поясни почему
это бредовый тест на производительность, я тоже как-то пытался оценить скорость переменных и получения значения элемента массива по индексу, выдавало рандомные значения вообще. хоть сколько-то обьективные данные можешь получить при переборе массива в 1000+ строк, и то хз
 
  • Грустно
Реакции: samartinell1

samartinell1

Участник
98
14
Потому что использование регулярных выражений и обычного текста в find - совершенно разные вещи

1600013898143.png

1600013942069.png

сделал 85 проверок(если не ошибаюсь) при этом каждый раз записываю в переменную email текст, разница колеблится от 4 тысячных (как в тот раз) до 5 тысячных секунд, что-то не очень
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Посмотреть вложение 68730
Посмотреть вложение 68731
сделал 85 проверок(если не ошибаюсь) при этом каждый раз записываю в переменную email текст, разница колеблится от 4 тысячных (как в тот раз) до 5 тысячных секунд, что-то не очень
Держи нормальную регулярку для электронной почты ^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,6}$
 

samartinell1

Участник
98
14
это бредовый тест на производительность, я тоже как-то пытался оценить скорость переменных и получения значения элемента массива по индексу, выдавало рандомные значения вообще. хоть сколько-то обьективные данные можешь получить при переборе массива в 1000+ строк, и то хз
тогда ок, вопросов нет
 

wulfandr

Известный
636
260
что исправить?
Lua:
require "lib.moonloader"
local imgui = require "imgui"
local encoding = require 'encoding'
local inicfg = require 'inicfg'
local ev = require 'lib.samp.events'
encoding.default = 'CP1251'
u8 = encoding.UTF8

local proc=0
local itog=0
local al=false
local mainIni = inicfg.load({
 config =
    {
 amount = 0,
 lien = false,
 hlopock = false,
 goldrul = false,
 silverrul = false,
 bronzerul = false,
 stone = false,
 stalon = false,
 podarok = false,
 bronze = false,
 silver = false,
 gold = false,
 narko = false,
 metal = false,
 gtalon = false,
 skid = false,
 otm = false,
 tushka = false,
 shkura = false,
        meat = false,
        lbilet = false,

        meatin=0,
        meatpr=0,
        tushkain=0,
        tushkapr=0,
        shkurain=0,
        shkurapr=0,
        otmin=0,
        otmpr=0,
        skidin = 0,
        skidn = 0,
        gtalonin = 0,
        gtaloninpr = 0,
        lienin = 0,
        lieninpr = 0,
        hlopockin = 0,
        hlopockinpr = 0,
        goldrulin = 0,
        goldrulpr = 0,
        silverrulin = 0,
        silverrulpr = 0,
        bronzerulin = 0,
        bronzerulpr = 0,
        stonein = 0,
        stonepr = 0,
        stalonin = 0,
        staloninpr = 0,
        podarokin = 0,
        podarokinpr = 0,
        goldin = 0,
        goldpr = 0,
        silverin = 0,
        silverpr = 0,
        bronzein = 0,
        bronzepr = 0,
        narkoin = 0,
        narkoinpr = 0,
        metalin = 0,
        metalinpr = 0,
        lbiletin = 0,
        lbiletinpr = 0,


        tt = false,
        supreme = false,
        larek1 = false,
        larek2 = false,
        larek3 = false,

        ttin = 0,
        supremein = 0,
        larek1in = 0,
        larek2in = 0,
        larek3in = 0,
    }
}, "FastBuy")

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

metal = imgui.ImBool(mainIni.config.metal)
hlopock = imgui.ImBool(mainIni.config.hlopock)
lien = imgui.ImBool(mainIni.config.lien)
goldrul = imgui.ImBool(mainIni.config.goldrul)
silverrul = imgui.ImBool(mainIni.config.silverrul)
bronzerul = imgui.ImBool(mainIni.config.bronzerul)
stone = imgui.ImBool(mainIni.config.stone)
stalon = imgui.ImBool(mainIni.config.stalon)
podarok = imgui.ImBool(mainIni.config.podarok)
silver = imgui.ImBool(mainIni.config.silver)
gold = imgui.ImBool(mainIni.config.gold)
bronze = imgui.ImBool(mainIni.config.bronze)
narko = imgui.ImBool(mainIni.config.narko)
gtalon = imgui.ImBool(mainIni.config.gtalon)
skid = imgui.ImBool(mainIni.config.skid)
otm = imgui.ImBool(mainIni.config.otm)
meat = imgui.ImBool(mainIni.config.meat)
tushka = imgui.ImBool(mainIni.config.tushka)
shkura = imgui.ImBool(mainIni.config.shkura)
lbilet = imgui.ImBool(mainIni.config.lbilet)
tt = imgui.ImBool(mainIni.config.tt)
supreme = imgui.ImBool(mainIni.config.supreme)
larek1 = imgui.ImBool(mainIni.config.larek1)
larek2 = imgui.ImBool(mainIni.config.larek2)
larek3 = imgui.ImBool(mainIni.config.larek3)

ttin = imgui.ImBuffer(''..mainIni.config.ttin, 20)
supremein = imgui.ImBuffer(''..mainIni.config.supremein, 20)
larek1in = imgui.ImBuffer(''..mainIni.config.larek1in, 20)
larek2in = imgui.ImBuffer(''..mainIni.config.larek2in, 20)
larek3in = imgui.ImBuffer(''..mainIni.config.larek3in, 20)
tushkain = imgui.ImBuffer(''..mainIni.config.tushkain, 20)
tushkapr = imgui.ImBuffer(''..mainIni.config.tushkapr, 20)
shkurain = imgui.ImBuffer(''..mainIni.config.shkurain, 20)
shkurapr = imgui.ImBuffer(''..mainIni.config.shkurapr, 20)
meatin = imgui.ImBuffer(''..mainIni.config.meatin, 20)
meatpr = imgui.ImBuffer(''..mainIni.config.meatpr, 20)
otmin = imgui.ImBuffer(''..mainIni.config.otmin, 20)
otmpr = imgui.ImBuffer(''..mainIni.config.otmpr, 20)
skidin = imgui.ImBuffer(''..mainIni.config.skidin, 20)
skidn = imgui.ImBuffer(''..mainIni.config.skidn, 20)
gtalonin = imgui.ImBuffer(''..mainIni.config.gtalonin, 20)
gtaloninpr = imgui.ImBuffer(''..mainIni.config.gtaloninpr, 20)
metalin = imgui.ImBuffer(''..mainIni.config.metalin, 20)
metalinpr = imgui.ImBuffer(''..mainIni.config.metalinpr, 20)
lienin = imgui.ImBuffer(''..mainIni.config.lienin, 20)
lieninpr = imgui.ImBuffer(''..mainIni.config.lieninpr, 20)
hlopockin = imgui.ImBuffer(''..mainIni.config.hlopockin, 20)
hlopockinpr = imgui.ImBuffer(''..mainIni.config.hlopockinpr, 20)
goldrulin = imgui.ImBuffer(''..mainIni.config.goldrulin, 20)
goldrulpr = imgui.ImBuffer(''..mainIni.config.goldrulpr, 20)
silverrulin = imgui.ImBuffer(''..mainIni.config.silverrulin, 20)
silverrulpr = imgui.ImBuffer(''..mainIni.config.silverrulpr, 20)
bronzerulin = imgui.ImBuffer(''..mainIni.config.bronzerulin, 20)
bronzerulpr = imgui.ImBuffer(''..mainIni.config.bronzerulpr, 20)
stonein = imgui.ImBuffer(''..mainIni.config.stonein, 20)
stonepr = imgui.ImBuffer(''..mainIni.config.stonepr, 20)
stalonin = imgui.ImBuffer(''..mainIni.config.stalonin, 20)
staloninpr = imgui.ImBuffer(''..mainIni.config.staloninpr, 20)
podarokin = imgui.ImBuffer(''..mainIni.config.podarokin, 20)
podarokinpr = imgui.ImBuffer(''..mainIni.config.podarokinpr, 20)
silverin = imgui.ImBuffer(''..mainIni.config.silverin, 20)
silverpr = imgui.ImBuffer(''..mainIni.config.silverpr, 20)
goldin = imgui.ImBuffer(''..mainIni.config.goldin, 20)
goldpr = imgui.ImBuffer(''..mainIni.config.goldpr, 20)
bronzein = imgui.ImBuffer(''..mainIni.config.bronzein, 20)
bronzepr = imgui.ImBuffer(''..mainIni.config.bronzepr, 20)
narkoin = imgui.ImBuffer(''..mainIni.config.narkoin, 20)
narkoinpr = imgui.ImBuffer(''..mainIni.config.narkoinpr, 20)
lbiletin = imgui.ImBuffer(''..mainIni.config.lbiletin, 20)
lbiletinpr = imgui.ImBuffer(''..mainIni.config.lbiletinpr, 20)

local main_window_state = imgui.ImBool(false)

function main()
    if not isSampfuncsLoaded() or not isSampLoaded() then return end
    while not isSampAvailable() do wait(100) end
    sampAddChatMessage("{60FF60}[FastBuy {DAA520}by {FF0000}NECTOR] {FFFFFF}Загружен успешно!", -1)
    sampAddChatMessage("{60FF60}[FastBuy {DAA520}by {FF0000}NECTOR] {FFFFFF}Команда активации /buy.", -1)
    sampRegisterChatCommand("buy", function ()
        main_window_state.v = not main_window_state.v
    end)
    while true do
        wait(0)
        imgui.Process = main_window_state.v
    end
    wait(-1)
end

function imgui.OnDrawFrame()
    local sw, sh = getScreenResolution()
    
    if main_window_state.v then
        imgui.SetNextWindowPos(imgui.ImVec2(sw / 2 , sh / 2), imgui.Cond.FirsUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(700, 550), imgui.Cond.FirstUseEver)
        imgui.Begin(u8"FastBuy by text", main_window_state, imgui.WindowFlags.NoResize + imgui.WindowFlags.NoCollapse)
        if imgui.Button(u8"Начать скупку", imgui.ImVec2(350, 35)) then
            skup()
        end
        imgui.SameLine()
        if imgui.Button(u8'Сохранить настройки',imgui.ImVec2(350, 35)) then
            mainIni.config.skid = skid.v
            mainIni.config.tt = tt.v
            mainIni.config.supreme = supreme.v
            mainIni.config.larek1 = larek1.v
            mainIni.config.larek2 = larek2.v
            mainIni.config.larek3 = larek3.v
            mainIni.config.skidin = skidin.v
            mainIni.config.skidn = skidn.v
            mainIni.config.ttin = ttin.v
            mainIni.config.supremein = supremein.v
            mainIni.config.larek1in = larek1in.v
            mainIni.config.larek2in = larek2in.v
            mainIni.config.larek3in = larek3in.v

            mainIni.config.tushka = tushka.v
            mainIni.config.tushkain = tushkain.v
            mainIni.config.tushkapr = tushkapr.v
            mainIni.config.shkurain = shkurain.v
            mainIni.config.shkurapr = shkurapr.v
            mainIni.config.meat = meat.v
            mainIni.config.meatin = meatin.v
            mainIni.config.meatpr = meatpr.v
            mainIni.config.lien = lien.v
            mainIni.config.otm = otm.v
            mainIni.config.otmin = otmin.v
            mainIni.config.otmpr = otmpr.v
            mainIni.config.hlopock = hlopock.v
            mainIni.config.goldrul = goldrul.v
            mainIni.config.silverrul = silverrul.v
            mainIni.config.bronzerul = bronzerul.v
            mainIni.config.stone = stone.v
            mainIni.config.stalon = stalon.v
            mainIni.config.podarok = podarok.v
            mainIni.config.goldin = goldin.v
            mainIni.config.goldpr = goldpr.v
            mainIni.config.bronzein = bronzein.v
            mainIni.config.bronzepr = bronzepr.v
            mainIni.config.silverin = silverin.v
            mainIni.config.silverpr = silverpr.v
            mainIni.config.lienin = lienin.v
            mainIni.config.lieninpr = lieninpr.v
            mainIni.config.hlopockin = hlopockin.v
            mainIni.config.hlopockinpr = hlopockinpr.v
            mainIni.config.goldrulin = goldrulin.v
            mainIni.config.goldrulpr = goldrulpr.v
            mainIni.config.silverrulin = silverrulin.v
            mainIni.config.silverrulpr = silverrulpr.v
            mainIni.config.bronzerulin = bronzerulin.v
            mainIni.config.bronzerulpr = bronzerulpr.v
            mainIni.config.stonein = stonein.v
            mainIni.config.stonepr = stonepr.v
            mainIni.config.stalonin = stalonin.v
            mainIni.config.staloninpr = staloninpr.v
            mainIni.config.podarokin = podarokin.v
            mainIni.config.podarokinpr = podarokinpr.v
            mainIni.config.gold = gold.v
            mainIni.config.bronze = bronze.v
            mainIni.config.silver = silver.v
            mainIni.config.narko = narko.v
            mainIni.config.narkoin = narkoin.v
            mainIni.config.narkoinpr = narkoinpr.v
            mainIni.config.metal = metal.v
            mainIni.config.metalin = metalin.v
            mainIni.config.metalinpr = metalinpr.v
            mainIni.config.gtalon = gtalon.v
            mainIni.config.gtalonin = gtalonin.v
            mainIni.config.gtaloninpr = gtaloninpr.v
            mainIni.config.lbilet = lbilet.v
            mainIni.config.lbiletin = lbiletin.v
            mainIni.config.lbiletinpr = lbiletinpr.v
            inicfg.save(mainIni, 'FastBuy.ini')
            proc = 0
            superproc()
            if proc > 1.0000000002 then
                sampAddChatMessage('{60FF60}[FastBuy {DAA520}by {FF0000}NECTOR] {ffffff}Успешно сохранено! {FF0000}Внимание{FFFAFA}, проценты привышают 1: {FF0000}'..proc,-1)
            else
                sampAddChatMessage('{60FF60}[FastBuy {DAA520}by {FF0000}NECTOR] {ffffff}Успешно сохранено! Проценты в норме: {00FF00}'..proc,-1)
            end
        end
        imgui.SetCursorPos(imgui.ImVec2(10, 89))
        imgui.PushItemWidth(48)

        imgui.Checkbox("##0", narko)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. нарко", narkoin)
        imgui.InputText(u8"Процент на нарко", narkoinpr)

        imgui.Separator()

        imgui.Checkbox("##1",stalon)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. фам талона", stalonin)
        imgui.InputText(u8"Процент на фам талоны", staloninpr)

        imgui.Separator()

        imgui.Checkbox("##2",skid)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. скид талона", skidin)
        imgui.InputText(u8"Кол-во скид талонов", skidn)

        imgui.Separator()

        imgui.Checkbox("##3",podarok)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. подарка", podarokin)
        imgui.InputText(u8"Процент на подарки", podarokinpr)

        imgui.Separator()

        imgui.Checkbox("##4",bronzerul)
        imgui.SameLine()
        imgui.InputText(u8'Цена за ед. бронз рулетки', bronzerulin)
        imgui.InputText(u8'Процент на бронз рулетки', bronzerulpr)

        imgui.Separator()

        imgui.Checkbox("##5",silverrul)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. сереб рулетки", silverrulin)
        imgui.InputText(u8"Процент на сереб рулетки", silverrulpr)

        imgui.Separator()

        imgui.Checkbox("##6",goldrul)
        imgui.SameLine()
        imgui.InputText(u8'Цена за ед. gold рулетки',goldrulin)
        imgui.InputText(u8'Процент на gold рулетки',goldrulpr)

        imgui.Separator()

        imgui.Checkbox("##7",lien)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. льна", lienin)
        imgui.InputText(u8"Процент на лен", lieninpr)

        imgui.Separator()

        imgui.Checkbox("##8",hlopock)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. хлопка", hlopockin)
        imgui.InputText(u8"Процент на хлопок", hlopockinpr)

        imgui.Separator()

        imgui.Checkbox("##9",stone)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. каменя", stonein)
        imgui.InputText(u8"Процент на камень", stonepr)

        imgui.Separator()

        imgui.Checkbox("##10", metal)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. металла", metalin)
        imgui.InputText(u8"Процент на металл", metalinpr)

        imgui.Separator()

        imgui.Checkbox("##11",bronze)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. бронзы",bronzein)
        imgui.InputText(u8"Процент на бронзу",bronzepr)

        imgui.Separator()

        imgui.Checkbox("##12",silver)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. серебра", silverin)
        imgui.InputText(u8"Процент на серебро", silverpr)

        imgui.Separator()

        imgui.Checkbox("##13",gold)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. золота", goldin)
        imgui.InputText(u8"Процент на золото", goldpr)

        imgui.Separator()

        imgui.Checkbox("##14",meat)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. жар. мяса", meatin)
        imgui.InputText(u8"Процент на жар. мясо", meatpr)

        imgui.Separator()

        imgui.Checkbox("##15",tushka)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. тушки оленя", tushkain)
        imgui.InputText(u8"Процент на тушки оленя", tushkapr)

        imgui.Separator()

        imgui.Checkbox("##16",shkura)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. шкуру оленя", shkurain)
        imgui.InputText(u8"Процент на шкуру оленя", shkurapr)

        imgui.Separator()

        imgui.Checkbox("##17",gtalon)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. гр талона", gtalonin)
        imgui.InputText(u8"Процент на гр талоны", gtaloninpr)

        imgui.Separator()

        imgui.Checkbox("##18",otm)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. отмычки", otmin)
        imgui.InputText(u8"Процент на отмычки", otmpr)

        imgui.Separator()

        imgui.Checkbox("##19",lbilet)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ед. Билет год", lbiletin)
        imgui.InputText(u8"Процент на Билет год", lbiletinpr)

        imgui.Separator()

        imgui.Checkbox("##25", tt)
        imgui.SameLine()
        imgui.InputText(u8"Цена за Твин-Турбо", ttin)

        imgui.Separator()

        imgui.Checkbox("##26",supreme)
        imgui.SameLine()
        imgui.InputText(u8"Цена за SUPREME", supremein)

        imgui.Separator()

        imgui.Checkbox("##27",larek1)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ларек нарко (1)", larek1in)

        imgui.Separator()

        imgui.Checkbox("##28",larek2)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ларек яблоки (2)", larek2in)

        imgui.Separator()

        imgui.Checkbox("##29",larek3)
        imgui.SameLine()
        imgui.InputText(u8"Цена за ларек доллар (3)", larek3in)
        imgui.End()
    end
end

function ev.onShowDialog(id, style, title, button1, button2, text)
    if id == 3040 then
        al = true
    else
        al = false
    end
end

function skup()
    lua_thread.create(function()
        local money=getPlayerMoney(PLAYER_HANDLE)
        if tt.v and tonumber(ttin.v)~=0 then
            money=money-tonumber(ttin.v)
        end
        if supreme.v and tonumber(supremein.v)~=0 then
            money=money-tonumber(supremein.v)
        end
        if larek1.v and tonumber(larek1in.v)~=0 then
            money=money-tonumber(larek1in.v)
        end
        if larek2.v and tonumber(larek2in.v) ~= 0 then
            money=money-tonumber(larek2in.v)
        end
        if larek3.v and tonumber(larek3in.v) ~=0 then
            money=money-tonumber(larek3in.v)
        end
        if skid.v and tonumber(skidin.v) ~=0 then
            money=money-(tonumber(skidin.v)*tonumber(skidn.v))
        end
        proc=0
        superproc()
        if (money < 0) then
            sampAddChatMessage('{FF0000}[Ошибка] {FFFAFA}Не хватает денег на скуп, убери несколько товаров.', -1)
        elseif proc > 1.000002 then
            sampAddChatMessage('{FF0000}[Ошибка] {FFFAFA}Распределите проценты так, чтобы они не превосходили 1. Сейчас: {FF0000}'..proc, -1)
        elseif not al then
            sampAddChatMessage('{FF0000}[Ошибка] {FFFAFA}Нажмите alt.', -1)
        else
            if al then
                itog = 0
                al = false
                if narko.v then
                    amount=math.floor(tonumber(narkoinpr.v)*money/tonumber(narkoin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 0, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..narkoin.v)
                    itog=itog+tonumber(amount)*tonumber(narkoin.v)
                end
                wait(10)
                if metal.v then
                    amount=math.floor(tonumber(metalinpr.v)*money/tonumber(metalin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 7, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..metalin.v)
                    itog=itog+tonumber(amount)*tonumber(metalin.v)
                end
                wait(10)
                if lien.v then
                    amount=math.floor(tonumber(lieninpr.v)*money/tonumber(lienin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 5, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..lienin.v)
                    itog=itog+tonumber(amount)*tonumber(lienin.v)
                 end
                 wait(10)
                if hlopock.v then
                    amount=math.floor(tonumber(hlopockinpr.v)*money/tonumber(hlopockin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 4, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..hlopockin.v)
                    itog=itog+tonumber(amount)*tonumber(hlopockin.v)
                end
                wait(10)
                if goldrul.v then
                    amount=math.floor(tonumber(goldrulpr.v)*money/tonumber(goldrulin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 12, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..goldrulin.v)
                    itog=itog+tonumber(amount)*tonumber(goldrulin.v)
                end
                wait(10)
                if silverrul.v then
                    amount=math.floor(tonumber(silverrulpr.v)*money/tonumber(silverrulin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 11, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..silverrulin.v)
                    itog=itog+tonumber(amount)*tonumber(silverrulin.v)
                end
                wait(10)
                if bronzerul.v then
                    amount=math.floor(tonumber(bronzerulpr.v)*money/tonumber(bronzerulin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 10, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..bronzerulin.v)
                    itog=itog+tonumber(amount)*tonumber(bronzerulin.v)
                end
                wait(10)
                 if stone.v then
                    amount=math.floor(tonumber(stonepr.v)*money/tonumber(stonein.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 6, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..stonein.v)
                    itog=itog+tonumber(amount)*tonumber(stonein.v)
                end
                wait(10)
                 if bronze.v then
                    amount=math.floor(tonumber(bronzepr.v)*money/tonumber(bronzein.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 8, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..bronzein.v)
                    itog=itog+tonumber(amount)*tonumber(bronzein.v)
                end
                 wait(10)
                if silver.v then
                    amount=math.floor(tonumber(silverpr.v)*money/tonumber(silverin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 9, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..silverin.v)
                    itog=itog+tonumber(amount)*tonumber(silverin.v)
                end
                wait(10)
                if gold.v then
                    amount=math.floor(tonumber(goldpr.v)*money/tonumber(goldin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 10, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..goldin.v)
                    itog=itog+tonumber(amount)*tonumber(goldin.v)
                end
                 wait(10)
                if stalon.v then
                    amount=math.floor(tonumber(staloninpr.v)*money/tonumber(stalonin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 12, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..stalonin.v)
                    itog=itog+tonumber(amount)*tonumber(stalonin.v)
                end
                 wait(10)
                if podarok.v then
                    amount=math.floor(tonumber(podarokinpr.v)*money/tonumber(podarokin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 7, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..podarokin.v)
                    itog=itog+tonumber(amount)*tonumber(podarokin.v)
                end
                wait(10)
                if gtalon.v then
                    amount=math.floor(tonumber(gtaloninpr.v)*money/tonumber(gtalonin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 7, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..gtalonin.v)
                    itog=itog+tonumber(amount)*tonumber(gtalonin.v)
                end
                wait(10)
                if otm.v then
                    amount=math.floor(tonumber(otmpr.v)*money/tonumber(otmin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 9, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..otmin.v)
                    itog=itog+tonumber(amount)*tonumber(otmin.v)
                end
                wait(10)
                if skid.v then
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 6, '')
                    sampSendDialogResponse(3060, 1, 0, skidn.v..' '..skidin.v)
                    itog=itog+tonumber(skidn.v)*tonumber(skidin.v)
                end
                wait(10)
                if tt.v then
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 9, '')
                    sampSendDialogResponse(3060, 1, 0, ttin.v)
                    itog=itog+tonumber(ttin.v)
                end
                wait(10)
                if supreme.v then
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 8, '')
                    sampSendDialogResponse(3060, 1, 0, supremein.v)
                    itog=itog+tonumber(supremein.v)
                end
                wait(10)
                if larek1.v then
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 16, '')
                    sampSendDialogResponse(3060, 1, 0, larek1in.v)
                    itog=itog+tonumber(larek1in.v)
                end
                wait(10)
                if larek2.v then
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 17, '')
                    sampSendDialogResponse(3060, 1, 0, larek2in.v)
                    itog=itog+tonumber(larek2in.v)
                end
                wait(10)
                if larek3.v then
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 18, '')
                    sampSendDialogResponse(3060, 1, 0, larek3in.v)
                    itog=itog+tonumber(larek3in.v)
                end
                wait(10)
                if tushka.v then
                    amount=math.floor(tonumber(tushkapr.v)*money/tonumber(tushkain.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 14, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..tushkain.v)
                    itog=itog+tonumber(amount)*tonumber(tushkain.v)
                end
                wait(10)
                if shkura.v then
                    amount=math.floor(tonumber(shkurapr.v)*money/tonumber(shkurain.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 15, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..shkurain.v)
                    itog=itog+tonumber(amount)*tonumber(shkurain.v)
                end
                wait(10)
                if meat.v then
                    amount=math.floor(tonumber(meatpr.v)*money/tonumber(meatin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 17, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..meatin.v)
                    itog=itog+tonumber(amount)*tonumber(meatin.v)
                end
                wait(10)
                if lbilet.v then
                    amount=math.floor(tonumber(lbiletpr.v)*money/tonumber(lbiletin.v))
                    sampSendDialogResponse(3040, 1, 0, '')
                    sampSendDialogResponse(3050, 1, 19, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 20, '')
                    sampSendDialogResponse(3050, 1, 5, '')
                    sampSendDialogResponse(3060, 1, 0, amount..' '..lbiletin.v)
                    itog=itog+tonumber(amount)*tonumber(lbiletin.v)
                end
                wait(500)
                sampAddChatMessage('{60FF60}[FastBuy {DAA520}by {FF0000}NECTOR] {ffffff}Товары успешно выставлены! Сумма скупа составила: {00FF00}'..itog, -1)
            end
        end
    end)
end

function superproc()
    if narko.v then proc = proc+tonumber(narkoinpr.v) end
    if metal.v then proc = proc + tonumber(metalinpr.v) end
    if lien.v then proc = proc + tonumber(lieninpr.v) end
    if hlopock.v then proc = proc + tonumber(hlopockinpr.v) end
    if goldrul.v then proc = proc + tonumber(goldrulpr.v) end
    if silverrul.v then proc = proc + tonumber(silverrulpr.v) end
    if bronzerul.v then proc = proc + tonumber(bronzerulpr.v) end
    if stone.v then proc = proc + tonumber(stonepr.v) end
    if bronze.v then proc = proc + tonumber(bronzepr.v) end
    if silver.v then proc = proc + tonumber(silverpr.v) end
    if gold.v then proc = proc + tonumber(goldpr.v) end
    if stalon.v then proc = proc + tonumber(staloninpr.v) end
    if podarok.v then proc = proc + tonumber(podarokinpr.v) end
    if gtalon.v then proc= proc + tonumber(gtaloninpr.v) end
    if otm.v then proc = proc + tonumber(otmpr.v) end
    if meat.v then proc = proc + tonumber(meatpr.v)end
    if tushka.v then proc = proc + tonumber(tushkapr.v) end
    if shkura.v then proc = proc + tonumber(shkurapr.v) end
    if lbilet.v then proc = proc + tonumber(lbiletinpr.v) end
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.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.04, 0.04, 0.04, 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
apply_custom_style()
 
Последнее редактирование:
  • Нравится
Реакции: deleted-user-210352

Hund dev.

Участник
47
2
как сделать так, чтобы при нажатии кнопки скрипт открыл диалог сервера и начал вводить туда разные значения?
К примеру: Авто-Скупка на ЦР
а так же, при появлении диалога авторизации скрипт ввел туда твой пароль, который нужно вводить в определенном imgui.InputText
 

|DEVIL|

Известный
363
280
как сделать так, чтобы при нажатии кнопки скрипт открыл диалог сервера и начал вводить туда разные значения?
К примеру: Авто-Скупка на ЦР
а так же, при появлении диалога авторизации скрипт ввел туда твой пароль, который нужно вводить в определенном imgui.InputText
Что-бы открыть диалог, используется функция sampSendChat(text)

Что-бы скрипт ввёл пароль из диалога, понадобится функция sampSendDialogResponse (В вики бласта загугли)

Что-бы скрипт ввёл туда значение из буфера, обращайся не к самому буферу, а к его значению (v, или же buffer.v)

Если нужно подробнее рассказать, то открой переписку со мной
 

enyag

Известный
345
12
как сделать, что если убили допустим с кулака, то при нажатии на M пишется другое, если убили с гана тоже другое ?