Help, lua, нуб в этом.

Статус
В этой теме нельзя размещать новые ответы.

SBLM

Новичок
Автор темы
12
0
Здесь стандартно показывает так:
Норма: 0$/8100$
Заработано: 0$
Кол-во рейсов: 0/36
Lua:
            renderFontDrawText(my_font, 'Норма: {32C13E}'..cfg.work.norma..'${FFFFFF}/{32C13E}'..cfg.settings.norma..'$\n'..'{FFFFFF}Заработано: {32C13E}'..cfg.work.money..'$\n'..'{FFFFFF}Кол-во рейсов: '..cfg.work.race..'/'..r, cfg.stats.posX, cfg.stats.posY, -1)
Мне изменить порядок, я пытался, но потом скрипт не работал. Как нужно сделать:
Количество рейсов: 0 / (здесь кол-во автоматически ставится, зависит от нормы).
Заработок: 0$.
Положено в кассу: 0$ / 8100$.

Если нужен полный кол, то вот:
Lua:
script_name("Truck Helper v1.0.1")
script_author("BBooGG")

local sf = require "sampfuncs"
local se = require 'lib.samp.events'
local inicfg = require 'inicfg'
local vk = require 'vkeys'
local keys = require 'game.keys'

local my_font = renderCreateFont('Segoe UI', 12, 0x1 + 0x8)

local thread

local cfg = inicfg.load({
  settings =
  {
    norma = 10800,
    doc = false,
    autoload = false,
    autoloadsignal = false,
    autoloadautovalue = false,
    autoloadvalue = 15000,
    autounload = false,
    stats = false
  },
  work =
  {
    race = 0,
    norma = 0,
    normarace = 0,
    money = 0
  },
  stats =
  {
    posX = 39,
    posY = 349
  }
}, "truck_helper")

function main()
    if not isSampLoaded() and not isSampfuncsLoaded then return end
    while not isSampAvailable() do wait(0) end
    sampRegisterChatCommand("tcfg", function()lua_thread.create(menu_cfg)end);
    sampRegisterChatCommand("thelp", help);
    sampRegisterChatCommand("tclear", clear);
    sampRegisterChatCommand("tallclear", allClear);
    sampAddChatMessage('{bfbfbf}[Truck Helper] {fffff}Скрипт успешно загружен. Узнать команды > /thelp.', -1)
    lua_thread.create(statsDraw)
    thread = lua_thread.create_suspended(signal)
    while true do
        wait(0)
        if wasKeyPressed(vk.VK_RBUTTON) and wasKeyPressed(vk.VK_Z) and cfg.settings.stats then
            sampSetCursorMode(3)
            while true do
                wait(0)
                local posX, posY = getCursorPos()
                cfg.stats.posX = posX
                cfg.stats.posY = posY
                if wasKeyReleased(vk.VK_Z) then
                    sampSetCursorMode(0)
                    inicfg.save(cfg, "truck_helper")
                    break
                end
            end
        end
    end
end

function se.onServerMessage(color, text)
    if text == 'Посигнальте, чтобы перейти к загрузке.' and cfg.settings.autoloadsignal then
        thread:run()
    elseif text == 'Посигнальте, чтобы перейти к разгрузке.' and cfg.settings.autounload then
        thread:run()
    end
    --15000 кг груза было продано за {33AA33}$5700.{FFFFFF} Доход: $5130 ($285 доставлено в кассу компании)
    if text:find('%d кг груза было продано за ') then
        thread:terminate()
        local t = {}
        for i in text:gmatch("$(%d+)") do 
            t[#t+1] = i
        end
        if t[1] == nil or t[2] == nil or t[3] == nil then
            return
        else
            cfg.work.money = cfg.work.money+tonumber(t[2])
            cfg.work.norma = cfg.work.norma+tonumber(t[3])
            cfg.work.race = cfg.work.race+1
            cfg.work.normarace = cfg.work.normarace+1
            inicfg.save(cfg, "truck_helper")
            if cfg.settings.doc then
                sampSendChat('/tr Количество рейсов: '..cfg.work.race..' | Заработок: '..cfg.work.money..'$ | Положено в кассу: '..cfg.work.norma..'$ / '..cfg.settings.norma..'$.')
            end
        end
    end
end

function se.onShowDialog(id, style, title, button1, button2, text)
    print(text)
    if text:find('Максимальная грузоподъемность фуры c учетом ваших навыков: ') and cfg.settings.autoload then
        if cfg.settings.autoloadsignal then
            thread:terminate()
        end
        if cfg.settings.autoloadautovalue then
            local i = 0
            for k in text:gmatch('(%d+)') do
                if i == 1 then
                    sampSendDialogResponse(id, 1, '', k)
                    break
                end
                i = i+1
            end
        else
            sampSendDialogResponse(id, 1, '', cfg.settings.autoloadvalue)
        end
        return false
    end
end

function help()
    sampAddChatMessage('{bfbfbf}[Truck Helper]{ffffff} /tcfg — настройки.',-1)
    sampAddChatMessage('{bfbfbf}[Truck Helper]{ffffff} /tclear — обнуление статистики, кроме нормы.',-1)
    sampAddChatMessage('{bfbfbf}[Truck Helper]{ffffff} /tallclear — обнуление всей статистики.',-1)
end

function signal()
    while true do
        wait(0)
        setGameKeyState(keys.vehicle.HORN,-1)
    end
end

function menu_cfg()
    local s = {}
    for v, k in pairs(cfg.settings) do
        print(v..'  '..tostring(k))
        if k == true then
            s[v] = '{32C13E}[||||]{bfbfbf}.'
        elseif k == false then       
            s[v] = '{E21F1F}[||||]{bfbfbf}.'
        end
    end
    local dialog = {
        {
            title = 'Норма: {32C13E}'..cfg.settings.norma..'$',
            onclick = function(menu, row)
                sampShowDialog(45612, '{ff00ff}Truck Helper', 'Введите норму.', 'Применить', '', sf.DIALOG_STYLE_INPUT)
                repeat
                    wait(0)
                    local result, button, list, input = sampHasDialogRespond(45612)
                    if result then
                        if tonumber(input) ~= nil then
                            if tonumber(input) < 0 then
                                sampAddChatMessage('{E21F1F}[Truck Helper]{FFFFFF} Число не может быть отрицательным.', -1)
                            else
                                cfg.settings.norma = tonumber(input)
                                inicfg.save(cfg, "truck_helper")
                                menu[row].title = 'Норма: {32C13E}'..cfg.settings.norma..'$'
                            end
                        else
                            sampAddChatMessage('{E21F1F}[Truck Helper]{FFFFFF} Поле не может быть пустым.', -1)
                        end
                    end
                until result
                return true
            end
        },
        {
            title = 'Доклад в рацию: '..s['doc'],
            onclick = function(menu, row)
                cfg.settings.doc = not cfg.settings.doc
                inicfg.save(cfg, "truck_helper")
                menu[row].title = '{bfbfbf}Доклад в рацию: '..(cfg.settings.doc and '{32C13E}[||||]{bfbfbf}.' or '{E21F1F}[||||]{bfbfbf}.')
                return true
            end
        },
        {
            title = 'Авто загрузка: '..s['autoload'],
            onclick = function(menu, row)
                cfg.settings.autoload = not cfg.settings.autoload
                inicfg.save(cfg, "truck_helper")
                menu[row].title = '{bfbfbf}Автозагрузка: '..(cfg.settings.autoload and '{32C13E}[||||]{bfbfbf}.' or '{E21F1F}[||||]{bfbfbf}.')
                return true
            end
        },
        {
            title = 'Авто Сигнал (для загрузки): '..s['autoloadsignal'],
            onclick = function(menu, row)
                cfg.settings.autoloadsignal = not cfg.settings.autoloadsignal
                inicfg.save(cfg, "truck_helper")
                menu[row].title = '{bfbfbf}Автоcигнал (для загрузки): '..(cfg.settings.autoloadsignal and '{32C13E}[||||]{bfbfbf}.' or '{E21F1F}[||||]{bfbfbf}.')
                return true
            end
        },
        {
            title = 'Авто определение кг для загрузки: '..s['autoloadautovalue'],
            onclick = function(menu, row)
                cfg.settings.autoloadautovalue = not cfg.settings.autoloadautovalue
                inicfg.save(cfg, "truck_helper")
                menu[row].title = '{bfbfbf}Автоопределение кг (для загрузки): '..(cfg.settings.autoloadautovalue and '{32C13E}[||||]{bfbfbf}.' or '{E21F1F}[||||]{bfbfbf}.')
                return true
            end
        },
        {
            title = 'Авто загрузка: {32C13E}'..cfg.settings.autoloadvalue..' кг',
            onclick = function(menu, row)
                sampShowDialog(45612, 'Truck Helper | Изменение авто загрузки', 'Введите число дл авто загрузки.', 'Применить', '', sf.DIALOG_STYLE_INPUT)
                repeat
                    wait(0)
                    local result, button, list, input = sampHasDialogRespond(45612)
                    if result then
                        if tonumber(input) ~= nil then
                            if tonumber(input) < 0 then
                                sampAddChatMessage('{E21F1F}[Truck Helper]{FFFFFF} Число не может быть отрицательным.', -1)
                            elseif tonumber(input) > 15000 then
                                sampAddChatMessage('{E21F1F}[Truck Helper]{FFFFFF} Число не может быть больше 15000.', -1)
                            else
                                cfg.settings.autoloadvalue = tonumber(input)
                                inicfg.save(cfg, "truck_helper")
                                menu[row].title = 'Авто загрузка: {32C13E}'..cfg.settings.autoloadvalue..' кг'
                            end
                        else
                            sampAddChatMessage('{E21F1F}[Truck Helper]{FFFFFF} Поле не может быть пустым.', -1)
                        end
                    end
                until result
                return true
            end
        },
        {
            title = '{bfbfbf}Автосигнал (для разгрузки): '..s['autounload'],
            onclick = function(menu, row)
                cfg.settings.autounload = not cfg.settings.autounload
                inicfg.save(cfg, "truck_helper")
                menu[row].title = '{bfbfbf}Автосигнал (для разгрузки): '..(cfg.settings.autounload and '{32C13E}[||||]{bfbfbf}.' or '{E21F1F}[||||]{bfbfbf}.')
                return true
            end
        },
        {
            title = '{bfbfbf}Статистика: '..s['stats'],
            onclick = function(menu, row)
                cfg.settings.stats = not cfg.settings.stats
                inicfg.save(cfg, "truck_helper")
                menu[row].title = '{bfbfbf}Статистика: '..(cfg.settings.stats and '{32C13E}[||||]{bfbfbf}.' or '{E21F1F}[||||]{bfbfbf}.')
                return true
            end
        }
    }
    submenus_show(dialog, "Truck Helper | Settings", "Изменить", "Закрыть")
end

function statsDraw()
    while true do
        if cfg.settings.stats then
            local r = 0;
            if cfg.settings.norma ~= 0 and cfg.work.norma ~= 0 and cfg.work.normarace ~= 0 then
                r = math.ceil(cfg.settings.norma/(cfg.work.norma/cfg.work.normarace))
            end
            renderFontDrawText(my_font, 'Норма: {32C13E}'..cfg.work.norma..'${FFFFFF}/{32C13E}'..cfg.settings.norma..'$\n'..'{FFFFFF}Заработано: {32C13E}'..cfg.work.money..'$\n'..'{FFFFFF}Кол-во рейсов: '..cfg.work.race..'/'..r, cfg.stats.posX, cfg.stats.posY, -1)
        end
        wait(0)
    end
end

function clear()
    cfg.work.money = 0
    cfg.work.race = 0
    inicfg.save(cfg, "truck_helper")
    sampAddChatMessage('{32C13E}[Truck Helper]{FFFFFF} Вся статистика кроме нормы обнулена.', -1)
end

function allClear()
    cfg.work.money = 0
    cfg.work.race = 0
    cfg.work.norma = 0
    cfg.work.normarace = 0
    inicfg.save(cfg, "truck_helper")
    sampAddChatMessage('{32C13E}[Truck Helper]{FFFFFF} Вся статистика обнулена.', -1)
end

-- FYP --
function submenus_show(menu, caption, select_button, close_button, back_button)
    select_button, close_button, back_button = select_button or 'Select', close_button or 'Close', back_button or 'Back'
    prev_menus = {}
    function display(menu, id, caption)
        local string_list = {}
        for i, v in ipairs(menu) do
            table.insert(string_list, type(v.submenu) == 'table' and v.title .. '  >>' or v.title)
        end
        sampShowDialog(id, caption, table.concat(string_list, '\n'), select_button, (#prev_menus > 0) and back_button or close_button, sf.DIALOG_STYLE_LIST)
        repeat
            wait(0)
            local result, button, list = sampHasDialogRespond(id)
            if result then
                if button == 1 and list ~= -1 then
                    local item = menu[list + 1]
                    if type(item.submenu) == 'table' then -- submenu
                        table.insert(prev_menus, {menu = menu, caption = caption})
                        if type(item.onclick) == 'function' then
                            item.onclick(menu, list + 1, item.submenu)
                        end
                        return display(item.submenu, id + 1, item.submenu.title and item.submenu.title or item.title)
                    elseif type(item.onclick) == 'function' then
                        local result = item.onclick(menu, list + 1)
                        if not result then return result end
                        return display(menu, id, caption)
                    end
                else -- if button == 0
                    if #prev_menus > 0 then
                        local prev_menu = prev_menus[#prev_menus]
                        prev_menus[#prev_menus] = nil
                        return display(prev_menu.menu, id - 1, prev_menu.caption)
                    end
                    return false
                end
            end
        until result
    end
    return display(menu, 31337, caption or menu.title)
end
 
Статус
В этой теме нельзя размещать новые ответы.