Трекер колонн Spine ночного режима для МЧС

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

8

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

Контекст
фиксирует состав колонны и проход по чекпойнтам держит ночные смены в курсе каждой секунды координирует спасательные штабы.

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

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

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

#define MODULE_TAG "MCS_CONVOY_SPINE_NIGHT"
#define CONVOY_MAX 12

enum e_convoy
{
    bool:used,
    vehid,
    checkpoint,
    status
}
new MCS_Convoy[CONVOY_MAX][e_convoy];

CMD:convoyspinenstatres(playerid, const params[])
{
    SendClientMessage(playerid, 0xAFEEEEFF, "[%s] Колонна:", MODULE_TAG);
    for(new i = 0; i < CONVOY_MAX; i++)
    {
        if(!MCS_Convoy[i][used]) continue;
        new msg[96];
        format(msg, sizeof msg, "#%d | car %d | chk %d | st %d", i, MCS_Convoy[i][vehid], MCS_Convoy[i][checkpoint], MCS_Convoy[i][status]);
        SendClientMessage(playerid, 0xAFEEEEFF, msg);
    }
    return 1;
}

CMD:convoyspinenctlres(playerid, const params[])
{
    new action[8], slot, value;
    if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /convoyspinenctlres add/remove/check/status");

    if(!strcmp(action, "add", true))
    {
        if(sscanf(params, "s[8]ii", action, slot, value)) return SendClientMessage(playerid, -1, "/convoyspinenctlres add [слот] [vehid]");
        MCS_Convoy[slot][used] = true;
        MCS_Convoy[slot][vehid] = value;
        MCS_Convoy[slot][checkpoint] = 0;
        MCS_Convoy[slot][status] = 0;
    }
    else if(!strcmp(action, "remove", true))
    {
        if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/convoyspinenctlres remove [слот]");
        MCS_Convoy[slot][used] = false;
    }
    else if(!strcmp(action, "check", true))
    {
        if(sscanf(params, "s[8]ii", action, slot, value)) return SendClientMessage(playerid, -1, "/convoyspinenctlres check [слот] [пункт]");
        MCS_Convoy[slot][checkpoint] = value;
    }
    else if(!strcmp(action, "status", true))
    {
        if(sscanf(params, "s[8]ii", action, slot, value)) return SendClientMessage(playerid, -1, "/convoyspinenctlres status [слот] [0-3]");
        MCS_Convoy[slot][status] = value;
        if(value == 3)
        {
            SendClientMessageToAll(0xFF0000FF, "[%s] Колонна запросила усиление!", MODULE_TAG);
        }
    }
    return 1;
}

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

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

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

Сверху