- 30
- 6
- Версия MoonLoader
- .026-beta
ку, написал скрипт, который проверяет, прошло ли кд повышения, чтобы повысить игрока на новый ранг. Но он не работает, уже попробовал много чего, может ошибка в логике работы или в синтаксисе скрипта, хз
Суть скрипта: вводится команда /grank id ранг, после чего открывается /checkjobprogress id и пишется команда /time, собирается инфа по последнем повышении игрока дата и время, также и с /time собирается инфа о дате и времени. Как инфа была собрана, то она проверяется, прошло ли кд для повышения допустим на 3 ранг (6 часов), если кд прошло то пишет /giverank id ранг, если нет то выдает ошибку
@wojciech? Хелпани плиз
@ChаtGPT сможешь помочь?
Суть скрипта: вводится команда /grank id ранг, после чего открывается /checkjobprogress id и пишется команда /time, собирается инфа по последнем повышении игрока дата и время, также и с /time собирается инфа о дате и времени. Как инфа была собрана, то она проверяется, прошло ли кд для повышения допустим на 3 ранг (6 часов), если кд прошло то пишет /giverank id ранг, если нет то выдает ошибку
Text диалога:
Название: {BFBBBA}Успеваемость
Ид диалога: 0
Текст: {FFFFFF}Статистика успеваемости сотрудника {66FF6C}FBI{FFFFFF}: Resdf_Dedf
1) Успешных арестов: {FFB323}0{FFFFFF}
2) Обезвреживание бомбы: {FFB323}0{FFFFFF}
3) Проведено обысков (на КПП): {FFB323}0{FFFFFF}
4) Проверок документов: {FFB323}0{FFFFFF}
5) Отправлено авто на штраф.стоянку: {FFB323}0{FFFFFF}
Статистика успеваемости за неделю:
1) Успешных арестов: {F9FF23}0{FFFFFF}
2) Обезвреживание бомбы: {F9FF23}0{FFFFFF}
3) Проведено обысков (на КПП): {F9FF23}0{FFFFFF}
4) Проверок документов: {F9FF23}0{FFFFFF}
5) Отправлено авто на штраф.стоянку: {F9FF23}0{FFFFFF}
Статистика успеваемости за сегодня:
1) Успешных арестов: {F9FF23}0{FFFFFF}
2) Обезвреживание бомбы: {F9FF23}0{FFFFFF}
3) Проведено обысков (на КПП): {F9FF23}0{FFFFFF}
4) Проверок документов: {F9FF23}0{FFFFFF}
5) Отправлено авто на штраф.стоянку: {F9FF23}0{FFFFFF}
Дата вступления в организацию:
{cccccc}15:39 15.07.2024{FFFFFF}
Последнее повышение:
{cccccc}15.07.2024 15:39:22 (amember)
Сам скрипт:
script_properties('test')
require 'lib.moonloader'
local events = require 'lib.samp.events'
local monthMapping = {
January = 1,
February = 2,
March = 3,
April = 4,
May = 5,
June = 6,
July = 7,
August = 8,
September = 9,
October = 10,
November = 11,
December = 12
}
-- кд повышений на ранг
local cooldowns = {
[3] = 6 * 60 * 60, --6 часов
[4] = 12 * 60 * 60, --12 часов
[5] = 24 * 60 * 60, --24 часа
[6] = 48 * 60 * 60, --48 часов
[7] = 72 * 60 * 60, --72 часа
[8] = 96 * 60 * 60, --96 часов
[9] = 120 * 60 * 60 --120 часов
}
local lastRankUpTime = {}
local currentId = 0 --ид
local pendingRankUp = nil --инфа о повышении ранга
local currentTime = nil -- текущее время в игре
function main()
while not isSampAvailable() do
wait(100)
end
sampRegisterChatCommand('grank', cmd_grank)
while true do
wait(0)
if pendingRankUp and currentTime then
local id, rank = pendingRankUp.id, pendingRankUp.rank
--проверка даты и времени последнего повышения
if lastRankUpTime[id] then
local lastTime = lastRankUpTime[id]
local timePassed = os.difftime(currentTime, os.time(lastTime))
local cooldown = cooldowns[rank]
if cooldown and timePassed >= cooldown then
sampSendChat(string.format("/giverank %d %d", id, rank))
sampAddChatMessage(string.format("Ранг %d был выдан игроку с ID %d.", rank, id), 0x8DFF18)
else
local remainingTime = cooldown - timePassed
local hours = math.floor(remainingTime / 3600)
local minutes = math.floor((remainingTime % 3600) / 60)
sampAddChatMessage(string.format("Еще не прошло КД для повышения игрока на ранг %d. Ожидание: %d ч %d мин.", rank, hours, minutes), 0x8DFF18)
end
else
sampAddChatMessage(string.format("Нет информации о последнем повышении для игрока с ID %d.", id), 0x8DFF18)
end
pendingRankUp = nil
end
end
end
function events.onShowDialog(dialogId, style, title, button1, button2, text)
if title:find('Успеваемость') then
local date = text:match('Последнее повышение:%s*{cccccc}(%d+%.%d+%.%d+ %d+:%d+:%d+)')
if date then
local year, month, day, hour, min = date:match('(%d+)%.(%d+)%.(%d+) (%d+):(%d+)')
lastRankUpTime[currentId] = {
year = tonumber(year),
month = tonumber(month),
day = tonumber(day),
hour = tonumber(hour),
min = tonumber(min),
sec = 0
}
sampAddChatMessage(string.format("Последнее повышение игрока с ID %d: Дата: %s, Время: %s", currentId, date:sub(1, 10), date:sub(12, 16)), 0x8DFF18)
else
sampAddChatMessage("Не удалось получить дату из /checkjobprogress игрока: " .. text, 0x8DFF18)
end
end
end
function cmd_grank(param)
local id, rank = param:match('(%d+) (%d+)')
id = tonumber(id)
rank = tonumber(rank)
if id and rank then
currentId = id -- id из grank
pendingRankUp = { id = id, rank = rank }
sampSendChat(string.format("/checkjobprogress %d", id))
sampSendChat("/time")
else
sampAddChatMessage("Используйте: /grank id ранг", 0x8DFF18)
end
end
function events.onDisplayGameText(style, time, text)
-- day - день, monthName = дата, hours = час, minutes = минуты
local day, monthName, hours, minutes = text:match('~y~(%d+) ~y~(%a+)~n~~w~(%d+):(%d+)~n~ ~g~ Played ~w~%d+ min.')
--месяца в числа
local month = monthMapping[monthName]
if day and month and hours and minutes then
--преобразование даты
local currentDate = os.date("*t")
currentDate.day = tonumber(day)
currentDate.month = month
currentDate.hour = tonumber(hours)
currentDate.min = tonumber(minutes)
currentDate.sec = 0 -- Установим секунды в 0
currentTime = os.time(currentDate)
sampAddChatMessage(string.format("Текущее время: День: %s, Месяц: %d, Время: %02d:%02d", day, month, tonumber(hours), tonumber(minutes)), 0x8DFF18)
else
sampAddChatMessage("Не удалось извлечь данные c /time: " .. text, 0x8DFF18)
end
end
@wojciech? Хелпани плиз
@ChаtGPT сможешь помочь?
Последнее редактирование: