Маршруты вывоза Delta ночного режима для полиции

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Контекст
контролирует заполняемость контейнеров и экипажи держит ночные смены в курсе каждой секунды поддерживает дежурные части полиции.

Функциональность
  • отслеживает уровень заполнения для санитарного кластера ночного контура и наносит данные на ночную сетку Watcher
  • управляет датчики Delta через панель CleanFlow без задержек
  • прогнозирует переполненные баки и заранее предупреждает мастеров смен

Внедрение
  • прописать карта контейнеров и ночные ключи доступа перед вводом
  • сверить график машин с марки Chronos
  • назначить ответственных за резервный грузовик и ночной резерв каналов
  • загрузить сценарии сценарий критического вызова и ночные регламенты

Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define MODULE_TAG "PD_WASTE_DELTA_NIGHT"
#define BIN_CAP 30

enum e_bin
{
    bool:active,
    Float:x,
    Float:y,
    level,
    crew
};
new PD_Bins[BIN_CAP][e_bin];

CMD:wastedeltanistatpd(playerid, const params[])
{
    SendClientMessage(playerid, 0x9ACD32FF, "[%s] Контейнеры:", MODULE_TAG);
    for(new i = 0; i < BIN_CAP; i++)
    {
        if(!PD_Bins[i][active]) continue;
        new msg[144];
        format(msg, sizeof msg, "#%d (%.1f/%.1f) | %d%% | Экипаж %d", i, PD_Bins[i][x], PD_Bins[i][y], PD_Bins[i][level], PD_Bins[i][crew]);
        SendClientMessage(playerid, 0x9ACD32FF, msg);
    }
    return 1;
}

CMD:wastedeltanictlpd(playerid, const params[])
{
    new action[8], slot, level, crew;
    new Float:x, Float:y;
    if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /wastedeltanictlpd map/fill/crew/reset");

    if(!strcmp(action, "map", true))
    {
        if(sscanf(params, "s[8]iff", action, slot, x, y)) return SendClientMessage(playerid, -1, "/wastedeltanictlpd map [слот] [x] [y]");
        PD_Bins[slot][active] = true;
        PD_Bins[slot][x] = x;
        PD_Bins[slot][y] = y;
        PD_Bins[slot][level] = 0;
    }
    else if(!strcmp(action, "fill", true))
    {
        if(sscanf(params, "s[8]ii", action, slot, level)) return SendClientMessage(playerid, -1, "/wastedeltanictlpd fill [слот] [0-120]");
        PD_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, "/wastedeltanictlpd crew [слот] [экипаж]");
        PD_Bins[slot][crew] = crew;
    }
    else if(!strcmp(action, "reset", true))
    {
        if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/wastedeltanictlpd reset [слот]");
        PD_Bins[slot][active] = false;
    }
    return 1;
}

Тест-кейсы
  • провести испытание: поднять уровень до 110% — ожидать корректного сигнала
  • смоделировать отказ: обнулить контейнер и проверить историю — убедиться что резерв подхватил
  • сравнить отчёт с журнал вывоза и подтвердить отсутствие расхождений

Эксплуатация
  • вечером сбрасывать суточную статистику
  • раз в квартал пересматривать пороги
  • проводить ночные аудиты вместе с мастеров смен
  • держать план реагирования на переполненные баки актуальным
  • отчёты автоматически попадают в полиция
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху