Здесь стандартно показывает так:
Норма: 0$/8100$
Заработано: 0$
Кол-во рейсов: 0/36
Мне изменить порядок, я пытался, но потом скрипт не работал. Как нужно сделать:
Количество рейсов: 0 / (здесь кол-во автоматически ставится, зависит от нормы).
Заработок: 0$.
Положено в кассу: 0$ / 8100$.
Если нужен полный кол, то вот:
Норма: 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