Диспетчер маршрутов Halo ночного режима для полиции

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

8

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

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

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

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

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

#define MODULE_TAG "PD_TRANSIT_HALO_NIGHT"
#define ROUTE_CAP 14

enum e_route_info
{
    bool:active,
    interval,
    stops,
    Float:lastX,
    Float:lastY,
    driver
};
new PD_Routes[ROUTE_CAP][e_route_info];

CMD:transithalonstatpd(playerid, const params[])
{
    new slot;
    if(sscanf(params, "i", slot)) return SendClientMessage(playerid, -1, "Используй: /transithalonstatpd [маршрут]");
    if(slot < 0 || slot >= ROUTE_CAP || !PD_Routes[slot][active]) return SendClientMessage(playerid, 0xDC143CFF, "[%s] Маршрут не активен.", MODULE_TAG);
    new msg[144];
    format(msg, sizeof msg, "[%s] #%d | Интервал %d мин | Остановок: %d | Водитель %d", MODULE_TAG, slot, PD_Routes[slot][interval], PD_Routes[slot][stops], PD_Routes[slot][driver]);
    SendClientMessage(playerid, 0x87CEEBFF, msg);
    return 1;
}

CMD:transithalonctlpd(playerid, const params[])
{
    new action[8], slot, interval, stops, driver;
    new Float:x, Float:y;
    if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /transithalonctlpd arm/coords/driver");

    if(!strcmp(action, "arm", true))
    {
        if(sscanf(params, "s[8]iii", action, slot, interval, stops)) return SendClientMessage(playerid, -1, "/transithalonctlpd arm [слот] [интервал] [остановок]");
        PD_Routes[slot][active] = true;
        PD_Routes[slot][interval] = interval;
        PD_Routes[slot][stops] = stops;
    }
    else if(!strcmp(action, "coords", true))
    {
        if(sscanf(params, "s[8]iff", action, slot, x, y)) return SendClientMessage(playerid, -1, "/transithalonctlpd coords [слот] [x] [y]");
        PD_Routes[slot][lastX] = x;
        PD_Routes[slot][lastY] = y;
    }
    else if(!strcmp(action, "driver", true))
    {
        if(sscanf(params, "s[8]ii", action, slot, driver)) return SendClientMessage(playerid, -1, "/transithalonctlpd driver [слот] [id]");
        PD_Routes[slot][driver] = driver;
    }
    return 1;
}

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

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

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

Сверху