Активный
- Тема Автор
- #1
Контекст
контролирует заполняемость контейнеров и экипажи держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
контролирует заполняемость контейнеров и экипажи держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
- отслеживает уровень заполнения для санитарного кластера ночного контура и наносит данные на ночную сетку Watcher
- управляет датчики Delta через панель CleanFlow без задержек
- прогнозирует переполненные баки и заранее предупреждает мастеров смен
Внедрение
- прописать карта контейнеров и ночные ключи доступа перед вводом
- сверить график машин с марки Chronos
- назначить ответственных за резервный грузовик и ночной резерв каналов
- загрузить сценарии сценарий критического вызова и ночные регламенты
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "MUN_WASTE_DELTA_NIGHT"
#define BIN_CAP 30
enum e_bin
{
bool:active,
Float:x,
Float:y,
level,
crew
};
new MUN_Bins[BIN_CAP][e_bin];
CMD:wastedeltanistatcity(playerid, const params[])
{
SendClientMessage(playerid, 0x9ACD32FF, "[%s] Контейнеры:", MODULE_TAG);
for(new i = 0; i < BIN_CAP; i++)
{
if(!MUN_Bins[i][active]) continue;
new msg[144];
format(msg, sizeof msg, "#%d (%.1f/%.1f) | %d%% | Экипаж %d", i, MUN_Bins[i][x], MUN_Bins[i][y], MUN_Bins[i][level], MUN_Bins[i][crew]);
SendClientMessage(playerid, 0x9ACD32FF, msg);
}
return 1;
}
CMD:wastedeltanictlcity(playerid, const params[])
{
new action[8], slot, level, crew;
new Float:x, Float:y;
if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /wastedeltanictlcity map/fill/crew/reset");
if(!strcmp(action, "map", true))
{
if(sscanf(params, "s[8]iff", action, slot, x, y)) return SendClientMessage(playerid, -1, "/wastedeltanictlcity map [слот] [x] [y]");
MUN_Bins[slot][active] = true;
MUN_Bins[slot][x] = x;
MUN_Bins[slot][y] = y;
MUN_Bins[slot][level] = 0;
}
else if(!strcmp(action, "fill", true))
{
if(sscanf(params, "s[8]ii", action, slot, level)) return SendClientMessage(playerid, -1, "/wastedeltanictlcity fill [слот] [0-120]");
MUN_Bins[slot][level] = level;
if(level > 100) SendClientMessage(playerid, 0xFF0000FF, "[%s] Переполнение!", MODULE_TAG);
}
else if(!strcmp(action, "crew", true))
{
if(sscanf(params, "s[8]ii", action, slot, crew)) return SendClientMessage(playerid, -1, "/wastedeltanictlcity crew [слот] [экипаж]");
MUN_Bins[slot][crew] = crew;
}
else if(!strcmp(action, "reset", true))
{
if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/wastedeltanictlcity reset [слот]");
MUN_Bins[slot][active] = false;
}
return 1;
}
Тест-кейсы
- провести испытание: поднять уровень до 110% — ожидать корректного сигнала
- смоделировать отказ: обнулить контейнер и проверить историю — убедиться что резерв подхватил
- сравнить отчёт с журнал вывоза и подтвердить отсутствие расхождений
Эксплуатация
- вечером сбрасывать суточную статистику
- раз в квартал пересматривать пороги
- проводить ночные аудиты вместе с мастеров смен
- держать план реагирования на переполненные баки актуальным
- отчёты автоматически попадают в мэрия