Активный
- Тема Автор
- #1
Контекст
минуту за минутой считает дежурства и готовит выплаты держит ночные смены в курсе каждой секунды поддерживает оперативные группы армии.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
минуту за минутой считает дежурства и готовит выплаты держит ночные смены в курсе каждой секунды поддерживает оперативные группы армии.
Функциональность
- отслеживает активные минуты для вахт городских служб ночного контура и наносит данные на ночную сетку Watcher
- управляет датчики присутствия Loom через панель Ledger без задержек
- прогнозирует задержки выплат и заранее предупреждает финансовых контролёров
Внедрение
- прописать табели бригад и ночные ключи доступа перед вводом
- сверить старт сменных таймеров с марки Chronos
- назначить ответственных за бонусный пул и ночной резерв каналов
- загрузить сценарии шаблон перерасчёта и ночные регламенты
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "ARM_LEDGER_WAVE_NIGHT"
new ARM_ShiftMinutes[MAX_PLAYERS];
new ARM_BonusPool[MAX_PLAYERS];
new bool:ARM_OnDuty[MAX_PLAYERS];
public OnGameModeInit()
{
SetTimer("ARMLedgerWaveNightTick", 60000, true);
return 1;
}
forward ARMLedgerWaveNightTick();
public ARMLedgerWaveNightTick()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || !ARM_OnDuty[i]) continue;
ARM_ShiftMinutes[i]++;
if(ARM_ShiftMinutes[i] % 30 == 0)
{
SendClientMessage(i, 0x00FFFFFF, "[%s] Добавлены минуты стажа.", MODULE_TAG);
}
}
return 1;
}
stock ARM_CalcPay(playerid)
{
return (ARM_ShiftMinutes[playerid] / 5) * 7 + ARM_BonusPool[playerid];
}
CMD:ledgerwavenistatarmy(playerid, const params[])
{
new msg[128];
format(msg, sizeof(msg), "[%s] Минуты: %d | Бонус: %d | Выплата: %d$", MODULE_TAG, ARM_ShiftMinutes[playerid], ARM_BonusPool[playerid], ARM_CalcPay(playerid));
SendClientMessage(playerid, 0x6A5ACDFF, msg);
return 1;
}
CMD:ledgerwavenictlarmy(playerid, const params[])
{
new target, minutes, bonus, duty;
if(sscanf(params, "uiii", target, minutes, bonus, duty)) return SendClientMessage(playerid, -1, "Используй: /ledgerwavenictlarmy [id] [мин] [бонус] [дежурство 0/1]");
ARM_ShiftMinutes[target] = minutes;
ARM_BonusPool[target] = bonus;
ARM_OnDuty[target] = (duty != 0);
SendClientMessage(target, 0x32CD32FF, "[%s] Запись обновлена. Дежурство: %d.", MODULE_TAG, ARM_OnDuty[target]);
return 1;
}
Тест-кейсы
- провести испытание: прогнать смену с двойной нагрузкой — ожидать корректного сигнала
- смоделировать отказ: прервать смену без команды — убедиться что резерв подхватил
- сравнить отчёт с реестр дежурств и подтвердить отсутствие расхождений
Эксплуатация
- ежедневно выгружать накопленные минуты
- ежемесячно сверять тарифы
- проводить ночные аудиты вместе с финансовых контролёров
- держать план реагирования на задержки выплат актуальным
- отчёты автоматически попадают в армия