Arizona Помощь со скриптом PayDayMaster

Manchinii

Новичок
Автор темы
7
4
Версия SA-MP
  1. 0.3.7-R3
Здравствуйте дамы и господа
написал я значит скрипт для счетчика дохода с пей деев и столкнулся с такой проблемой, я захотел добавить систему сохранения по дням недели но никак не смог его реализовать, прошу помочь вас мне в этом. Зарнее всех блогадарю и прошу прощения за свой говнокод)

Код:

Lua:
-------------Samp Library---------------
local samp = require 'lib.samp.events'
local effil = require('effil')
local requests = require 'requests'
local font_flag = require('moonloader').font_flag
local vk = require 'vkeys'
----------Mimgui library-------------
local imgui = require 'mimgui'
local encoding = require('encoding')
local u8 = encoding.UTF8
encoding.default = 'CP1251'
local new = imgui.new

local cjson = require "cjson"



----------Ini library-----------
local inicfg = require('inicfg')
local IniFileName = "PayDayMaster.ini"
local ffi = require("ffi")

--      sampRegisterChatCommand("testzp", function()
--    samp.onServerMessage(0xFFFFFF, "Общая заработная плата: $176,167")
--      samp.onServerMessage(0xFFFFFF, "Текущая сумма на депозите: $264,503,290 {33AA33}(+$154,220)")
--    samp.onServerMessage(0xFFFFFF, "Баланс на донат-счет: 4811 AZ {ff6666}(+2 AZ)")
--   end)
---------Ini cfg loading--------------
local ini = inicfg.load({
    data = {
        totalSalary = 0,
        totalDeposit = 0,
        totalAZ = 0,

        initialBank = 0,
        initialDeposit = 0,
        initialAZ = 0,

        pday_count = 0,

        opencommad = "payday",
        window_languages = 0,

        chbox_chat_payday = false

        


    }
}, IniFileName)

-- Ensure ini file is saved initially
inicfg.save(ini, IniFileName)

local currentDayNumber = tonumber(os.date("%u"))  -- Получаем день недели как число от 1 до 7
print(currentDayNumber)
-------------local variables total---------
local totalSalary = ini.data.totalSalary
local totalDeposit = ini.data.totalDeposit
local totalAZ = ini.data.totalAZ

----------Local variables initial---------
local initialBank = ini.data.initialBank
local initialDeposit = ini.data.initialDeposit
local initialAZ = ini.data.initialAZ

----------Pay-Day counts-------------
pday_count = ini.data.pday_count
window_languages = ini.data.window_languages



------------Mimgui Buffers and bools--------------
local paydayBuffer = {}
local paydayVisibleRussian = new.bool(false)
local paydayVisibleEnglish = new.bool(false)
local showSettings = new.bool(false)

local inputCommand = ffi.new("char[256]", u8:encode(ini.data.opencommad))
local OpenFrameCommand = u8:decode(ffi.string(inputCommand))

local ComboLanguage = new.int(ini.data.window_languages) -- создаём буфер для комбо
local language_list = { u8 'Русский', u8 'English' } -- создаём таблицу с содержимым списка
local ImItems = imgui.new['const char*'][#language_list](language_list)


local chbox_chat_payday = new.bool(ini.data.chbox_chat_payday)





----------Remove ColorCodes----------
function removeColorCodes(str)
    return str:gsub("{%x%x%x%x%x%x}", "")
end

  sampRegisterChatCommand("testzp", function()
    samp.onServerMessage(0xFFFFFF, "Общая заработная плата: $176,167")
      samp.onServerMessage(0xFFFFFF, "Текущая сумма на депозите: $264,503,290 {33AA33}(+$154,220)")
    samp.onServerMessage(0xFFFFFF, "Баланс на донат-счет: 4811 AZ {ff6666}(+2 AZ)")
   end)

--------------Number format system----------------
local function formatWithCommas(number)
    local formatted = tostring(number)
    while true do
        formatted, k = formatted:gsub("^(-?%d+)(%d%d%d)", '%1,%2')
        if k == 0 then break end
    end
    return formatted
end

----------------Save Data-----------------
function saveData()
    ini.data.totalSalary = totalSalary
    ini.data.totalDeposit = totalDeposit
    ini.data.totalAZ = totalAZ
    ini.data.initialBank = initialBank
    ini.data.initialDeposit = initialDeposit
    ini.data.initialAZ = initialAZ
    ini.data.pday_count = pday_count
    ini.data.window_languages = ComboLanguage[0]
    ini.data.opencommad = u8:decode(ffi.string(inputCommand))
    ini.data.chbox_chat_payday = chbox_chat_payday[0]

    inicfg.save(ini, IniFileName)
end

------------------Clear Data---------------------
function ClearData()
    ini.data.totalSalary = 0
    ini.data.totalDeposit = 0
    ini.data.totalAZ = 0
    ini.data.initialBank = 0
    ini.data.initialDeposit = 0
    ini.data.initialAZ = 0
    ini.data.pday_count = 0
    ini.data.opencommad = "payday"
    ini.data.window_languages = 0
    ini.data.chbox_chat_payday = false

    inicfg.save(ini, IniFileName)

    lua_thread.create(function()
        sampAddChatMessage("{7FFF00}« PayDayMaster » {FFFFFF}Для очиститки данных скрипт перезапускается!", -1)
        wait(1000)
        thisScript():reload()
    end)
end

-------------------------PARSING SYSTEM--------------------------
function samp.onServerMessage(color, text)
    table.insert(paydayBuffer, text)

    -- Initial amounts hooks
    local bank = text:match("Текущая сумма в банке: %$([%d,]+)")
    if bank then
        initialBank = tonumber((bank:gsub(",", "")))
        saveData()
    end

    local deposit = text:match("Текущая сумма на депозите: %$([%d,]+)")
    if deposit then
        initialDeposit = tonumber((deposit:gsub(",", "")))
        saveData()
    end

    local az = text:match("Баланс на донат%-счет: (%d+) AZ")
    if az then
        initialAZ = tonumber(az)
        saveData()
    end

    if #paydayBuffer >= 5 then
        local fullText = table.concat(paydayBuffer, "\n")

        local salary = fullText:match("Общая заработная плата: %$([%d,]+)")
        if salary then
            totalSalary = totalSalary + tonumber((salary:gsub(",", "")))
            pday_count = pday_count + 1
        end

        local depositBonus = fullText:match("Текущая сумма на депозите: %$[%d,]+ %b{}%(%+%$([%d,]+)%)")
        if depositBonus then
            totalDeposit = totalDeposit + tonumber((depositBonus:gsub(",", "")))
        end

        local azBonus = fullText:match("Баланс на донат%-счет: %d+ AZ %b{}%(%+(%d+) AZ%)")
        if azBonus then
            totalAZ = totalAZ + tonumber(azBonus)
            if chbox_chat_payday[0] then
                sampAddChatMessage(
                    "{7FFF00}« PayDayMaster » {FFFFFF}Заработано с PayDay'ев $ " ..
                    formatWithCommas(totalSalary + totalDeposit), -1)
            end
        end

        saveData()
        paydayBuffer = {}
    end
end

--------------Start command--------------
sampRegisterChatCommand(OpenFrameCommand, function()
    if ComboLanguage[0] == 0 then
        paydayVisibleRussian[0] = not paydayVisibleRussian[0]
    else
        paydayVisibleEnglish[0] = not paydayVisibleEnglish[0]
    end
end)





------------------Final local------------
local finalBank = ""
local finalDeposit = ""
local finalAZ = ""


-------------------------Mimgui Russian Frame-------------------------
imgui.OnFrame(function()
    return paydayVisibleRussian[0]
end, function()
    imgui.SetNextWindowPos(imgui.ImVec2(353, 424), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowSize(imgui.ImVec2(350, 400), imgui.Cond.Always)
    imgui.Begin(u8 "PayDay Статистика", paydayVisibleRussian, imgui.WindowFlags.NoResize)

    if imgui.BeginTabBar('Tabs') then
        if imgui.BeginTabItem(u8 'Главная') then
            imgui.Text(u8 "Заработано с момента запуска:")
            imgui.Text(u8(string.format("Зарплата: $%s", formatWithCommas(totalSalary))))
            imgui.Text(u8(string.format("Депозит: $%s", formatWithCommas(totalDeposit))))
            imgui.Text(u8(string.format("AZ: %s", totalAZ)))

            imgui.Separator()

            imgui.Text(u8 "Начальные суммы:")
            imgui.Text(u8(string.format("Банк: $%s", formatWithCommas(initialBank))))
            imgui.Text(u8(string.format("Депозит: $%s", formatWithCommas(initialDeposit))))
            imgui.Text(u8(string.format("AZ: %s", initialAZ)))

            imgui.Separator()


            finalBank = formatWithCommas(initialBank + totalSalary)
            finalDeposit = formatWithCommas(initialDeposit + totalDeposit)
            finalAZ = tostring(initialAZ + totalAZ)


            imgui.Text(u8 "Итоговые суммы:")
            imgui.Text(u8(string.format("Банк: $%s", finalBank)))
            imgui.Text(u8(string.format("Депозит: $%s", finalDeposit)))
            imgui.Text(u8(string.format("AZ: %s", finalAZ)))
            imgui.Text(u8 "Кол-во PayDays : " .. pday_count)

            if imgui.Button(u8 "Закрыть") then
                paydayVisibleRussian[0] = false
            end
            imgui.SameLine()
            if imgui.Button(u8 "Очистить данные") then
                ClearData()
            end
            imgui.EndTabItem()
        end
        if imgui.BeginTabItem(u8 'Другое') then -- задаём название второй вкладки
            if imgui.CollapsingHeader(u8 'Смена команды для открытии окна') then
                imgui.TextQuestion(u8 "Команда по которой будет открыватся меню скрипта\n P.S После ввода команды необходимо перезагрузить скрипт.")
                imgui.SameLine()
                imgui.InputTextWithHint(u8 '  ', u8 'Введите команду...', inputCommand, 256)
                imgui.NewLine()
            end

            if imgui.CollapsingHeader(u8 'Смена языка интерфейса') then
                imgui.TextQuestion(u8 "Изменяет язык интерфейса")
                imgui.SameLine()
                imgui.Combo(u8 '. ', ComboLanguage, ImItems, #language_list)
                ini.data.window_languages = ComboLanguage[0]
                inicfg.save(ini, IniFileName)
            end






            if imgui.CollapsingHeader(u8 "Выводить заработанную сумму c PayDay'ев в чат") then
                imgui.TextQuestion(u8 "Выводит заработанные деньги с PayDay'ev\nПрибавляя депозит к зарплате при появлении PayDay'я")
                imgui.SameLine()
                imgui.Checkbox(u8 "Вкл/Выкл", chbox_chat_payday)
            end


            imgui.EndTabItem()
            imgui.NewLine()
        end
        imgui.EndTabBar()
    end





    imgui.End()
end)

----------------------Mimgui English Frame--------------------------------
imgui.OnFrame(function()
    return paydayVisibleEnglish[0]
end, function()
    imgui.SetNextWindowPos(imgui.ImVec2(353, 424), imgui.Cond.FirstUseEver)
    imgui.SetNextWindowSize(imgui.ImVec2(350, 400), imgui.Cond.Always)
    imgui.Begin(u8 "PayDay stats", paydayVisibleEnglish, imgui.WindowFlags.NoResize)

    if imgui.BeginTabBar('Tabs') then
        if imgui.BeginTabItem(u8 'Main') then
            imgui.Text(u8 "Earned since coming in:")
            imgui.Text(u8(string.format("Salary: $%s", formatWithCommas(totalSalary))))
            imgui.Text(u8(string.format("Deposit: $%s", formatWithCommas(totalDeposit))))
            imgui.Text(u8(string.format("AZ-COINS: %s", totalAZ)))

            imgui.Separator()

            imgui.Text(u8 "Initial amounts:")
            imgui.Text(u8(string.format("Salary: $%s", formatWithCommas(initialBank))))
            imgui.Text(u8(string.format("Deposit: $%s", formatWithCommas(initialDeposit))))
            imgui.Text(u8(string.format("AZ-COINS: %s", initialAZ)))

            imgui.Separator()


            finalBank = formatWithCommas(initialBank + totalSalary)
            finalDeposit = formatWithCommas(initialDeposit + totalDeposit)
            finalAZ = tostring(initialAZ + totalAZ)


            imgui.Text(u8 "Total amounts:")
            imgui.Text(u8(string.format("Salary: $%s", finalBank)))
            imgui.Text(u8(string.format("Deposit: $%s", finalDeposit)))
            imgui.Text(u8(string.format("AZ-COINS: %s", finalAZ)))
            imgui.Text(u8 "Amount of PayDays: " .. pday_count)

            if imgui.Button(u8 "Close") then
                paydayVisibleEnglish[0] = false
            end
            imgui.SameLine()
            if imgui.Button(u8 "Clear data") then
                ClearData()
            end
            imgui.EndTabItem()
        end
        if imgui.BeginTabItem(u8 'Others') then -- задаём название второй вкладки
            if imgui.CollapsingHeader(u8 "Opening command the script menu") then
                imgui.TextQuestion(u8 "The command that will open the script menu\n P.S After entering the command, you need to reload the script.")
                imgui.SameLine()
                imgui.InputTextWithHint(u8 '  ', u8 'Enter the command...', inputCommand, 256)
            end

            if imgui.CollapsingHeader(u8 "Change frame language") then
                imgui.TextQuestion(u8 "Change frame language")
                imgui.SameLine()
                imgui.Combo(u8 ' . ', ComboLanguage, ImItems, #language_list)
                ini.data.window_languages = ComboLanguage[0]
                inicfg.save(ini, IniFileName)
            end
            if imgui.CollapsingHeader(u8 "Withdrawing earnings from PayDay in chat") then
                imgui.TextQuestion(u8 "Вывод заработанных средств из PayDay'ev\nДобавьте свой депозит к зарплате.")
                imgui.SameLine()
                imgui.Checkbox(u8 "ON/OFF", chbox_chat_payday)
            end




            imgui.EndTabItem()
            imgui.NewLine()
        end
        imgui.EndTabBar()
    end





    imgui.End()
end)

---------------Main Fuction--------------


function main()
    while not isSampAvailable() do
        wait(100)
    end
    sampAddChatMessage("{7FFF00}« PayDayMaster » {FFFFFF} Скрипт {C0C0C0}загружен!")
    sampAddChatMessage("{7FFF00}« PayDayMaster » {FFFFFF} Команда для активации: {C0C0C0}/" .. ini.data.opencommad)
    sampAddChatMessage("{7FFF00}« PayDayMaster » {FFFFFF} Автор скрипта: {C0C0C0}Wenfost")
end

-----------------CenterText----------------------
function imgui.CenterText(text)
    local width = imgui.GetWindowWidth()
    local calc = imgui.CalcTextSize(text)
    imgui.SetCursorPosX(width / 2 - calc.x / 2)
    imgui.Text(text)
end

-----------------Text Question---------------
function imgui.TextQuestion(text)
    imgui.TextDisabled('(?)')
    if imgui.IsItemHovered() then
        imgui.BeginTooltip()
        imgui.PushTextWrapPos(450)
        imgui.TextUnformatted(text)
        imgui.PopTextWrapPos()
        imgui.EndTooltip()
    end
end

------------------------------------Mimgui Theme------------------------------------
function theme()
    imgui.SwitchContext()
    local style                                  = imgui.GetStyle()

    style.WindowPadding                          = imgui.ImVec2(15, 15)
    style.WindowRounding                         = 10.0
    style.ChildRounding                          = 6.0
    style.FramePadding                           = imgui.ImVec2(8, 7)
    style.FrameRounding                          = 8.0
    style.ItemSpacing                            = imgui.ImVec2(8, 8)
    style.ItemInnerSpacing                       = imgui.ImVec2(10, 6)
    style.IndentSpacing                          = 25.0
    style.ScrollbarSize                          = 13.0
    style.ScrollbarRounding                      = 12.0
    style.GrabMinSize                            = 10.0
    style.GrabRounding                           = 6.0
    style.PopupRounding                          = 8
    style.WindowTitleAlign                       = imgui.ImVec2(0.5, 0.5)
    style.ButtonTextAlign                        = imgui.ImVec2(0.5, 0.5)

    style.Colors[imgui.Col.Text]                 = imgui.ImVec4(0.90, 0.90, 0.93, 1.00)
    style.Colors[imgui.Col.TextDisabled]         = imgui.ImVec4(0.40, 0.40, 0.45, 1.00)
    style.Colors[imgui.Col.WindowBg]             = imgui.ImVec4(0.12, 0.12, 0.14, 1.00)
    style.Colors[imgui.Col.ChildBg]              = imgui.ImVec4(0.18, 0.20, 0.22, 0.30)
    style.Colors[imgui.Col.PopupBg]              = imgui.ImVec4(0.13, 0.13, 0.15, 1.00)
    style.Colors[imgui.Col.Border]               = imgui.ImVec4(0.30, 0.30, 0.35, 1.00)
    style.Colors[imgui.Col.BorderShadow]         = imgui.ImVec4(0.00, 0.00, 0.00, 0.00)
    style.Colors[imgui.Col.FrameBg]              = imgui.ImVec4(0.18, 0.18, 0.20, 1.00)
    style.Colors[imgui.Col.FrameBgHovered]       = imgui.ImVec4(0.25, 0.25, 0.28, 1.00)
    style.Colors[imgui.Col.FrameBgActive]        = imgui.ImVec4(0.30, 0.30, 0.34, 1.00)
    style.Colors[imgui.Col.TitleBg]              = imgui.ImVec4(0.15, 0.15, 0.17, 1.00)
    style.Colors[imgui.Col.TitleBgCollapsed]     = imgui.ImVec4(0.10, 0.10, 0.12, 1.00)
    style.Colors[imgui.Col.TitleBgActive]        = imgui.ImVec4(0.15, 0.15, 0.17, 1.00)
    style.Colors[imgui.Col.MenuBarBg]            = imgui.ImVec4(0.12, 0.12, 0.14, 1.00)
    style.Colors[imgui.Col.ScrollbarBg]          = imgui.ImVec4(0.12, 0.12, 0.14, 1.00)
    style.Colors[imgui.Col.ScrollbarGrab]        = imgui.ImVec4(0.30, 0.30, 0.35, 1.00)
    style.Colors[imgui.Col.ScrollbarGrabHovered] = imgui.ImVec4(0.40, 0.40, 0.45, 1.00)
    style.Colors[imgui.Col.ScrollbarGrabActive]  = imgui.ImVec4(0.50, 0.50, 0.55, 1.00)
    style.Colors[imgui.Col.CheckMark]            = imgui.ImVec4(0.70, 0.70, 0.90, 1.00)
    style.Colors[imgui.Col.SliderGrab]           = imgui.ImVec4(0.70, 0.70, 0.90, 1.00)
    style.Colors[imgui.Col.SliderGrabActive]     = imgui.ImVec4(0.80, 0.80, 0.90, 1.00)
    style.Colors[imgui.Col.Button]               = imgui.ImVec4(0.18, 0.18, 0.20, 1.00)
    style.Colors[imgui.Col.ButtonHovered]        = imgui.ImVec4(0.60, 0.60, 0.90, 1.00)
    style.Colors[imgui.Col.ButtonActive]         = imgui.ImVec4(0.28, 0.56, 0.96, 1.00)
    style.Colors[imgui.Col.Header]               = imgui.ImVec4(0.20, 0.20, 0.23, 1.00)
    style.Colors[imgui.Col.HeaderHovered]        = imgui.ImVec4(0.25, 0.25, 0.28, 1.00)
    style.Colors[imgui.Col.HeaderActive]         = imgui.ImVec4(0.30, 0.30, 0.34, 1.00)
    style.Colors[imgui.Col.Separator]            = imgui.ImVec4(0.40, 0.40, 0.45, 1.00)
    style.Colors[imgui.Col.SeparatorHovered]     = imgui.ImVec4(0.50, 0.50, 0.55, 1.00)
    style.Colors[imgui.Col.SeparatorActive]      = imgui.ImVec4(0.60, 0.60, 0.65, 1.00)
    style.Colors[imgui.Col.ResizeGrip]           = imgui.ImVec4(0.20, 0.20, 0.23, 1.00)
    style.Colors[imgui.Col.ResizeGripHovered]    = imgui.ImVec4(0.25, 0.25, 0.28, 1.00)
    style.Colors[imgui.Col.ResizeGripActive]     = imgui.ImVec4(0.30, 0.30, 0.34, 1.00)
    style.Colors[imgui.Col.PlotLines]            = imgui.ImVec4(0.61, 0.61, 0.64, 1.00)
    style.Colors[imgui.Col.PlotLinesHovered]     = imgui.ImVec4(0.70, 0.70, 0.75, 1.00)
    style.Colors[imgui.Col.PlotHistogram]        = imgui.ImVec4(0.61, 0.61, 0.64, 1.00)
    style.Colors[imgui.Col.PlotHistogramHovered] = imgui.ImVec4(0.70, 0.70, 0.75, 1.00)
    style.Colors[imgui.Col.TextSelectedBg]       = imgui.ImVec4(0.30, 0.30, 0.34, 1.00)
    style.Colors[imgui.Col.ModalWindowDimBg]     = imgui.ImVec4(0.10, 0.10, 0.12, 0.80)
    style.Colors[imgui.Col.Tab]                  = imgui.ImVec4(0.18, 0.20, 0.22, 1.00)
    style.Colors[imgui.Col.TabHovered]           = imgui.ImVec4(0.60, 0.60, 0.90, 1.00)
    style.Colors[imgui.Col.TabActive]            = imgui.ImVec4(0.28, 0.56, 0.96, 1.00)
end

imgui.OnInitialize(function()
    theme()
end)