Активный
- Тема Автор
- #1
Контекст
фиксирует состав колонны и проход по чекпойнтам держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
фиксирует состав колонны и проход по чекпойнтам держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
- отслеживает номер чекпойнта для конвоя снабжения ночного контура и наносит данные на ночную сетку Watcher
- управляет маяки Spine через панель Convoy без задержек
- прогнозирует потеря связи с экипажами и заранее предупреждает диспетчеров движения
Внедрение
- прописать список колонн и ночные ключи доступа перед вводом
- сверить протокол выхода с марки Chronos
- назначить ответственных за резервные экипажи и ночной резерв каналов
- загрузить сценарии шаблон тревожного сигнала и ночные регламенты
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "MUN_CONVOY_SPINE_NIGHT"
#define CONVOY_MAX 12
enum e_convoy
{
bool:used,
vehid,
checkpoint,
status
}
new MUN_Convoy[CONVOY_MAX][e_convoy];
CMD:convoyspinenstatcity(playerid, const params[])
{
SendClientMessage(playerid, 0xAFEEEEFF, "[%s] Колонна:", MODULE_TAG);
for(new i = 0; i < CONVOY_MAX; i++)
{
if(!MUN_Convoy[i][used]) continue;
new msg[96];
format(msg, sizeof msg, "#%d | car %d | chk %d | st %d", i, MUN_Convoy[i][vehid], MUN_Convoy[i][checkpoint], MUN_Convoy[i][status]);
SendClientMessage(playerid, 0xAFEEEEFF, msg);
}
return 1;
}
CMD:convoyspinenctlcity(playerid, const params[])
{
new action[8], slot, value;
if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /convoyspinenctlcity add/remove/check/status");
if(!strcmp(action, "add", true))
{
if(sscanf(params, "s[8]ii", action, slot, value)) return SendClientMessage(playerid, -1, "/convoyspinenctlcity add [слот] [vehid]");
MUN_Convoy[slot][used] = true;
MUN_Convoy[slot][vehid] = value;
MUN_Convoy[slot][checkpoint] = 0;
MUN_Convoy[slot][status] = 0;
}
else if(!strcmp(action, "remove", true))
{
if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/convoyspinenctlcity remove [слот]");
MUN_Convoy[slot][used] = false;
}
else if(!strcmp(action, "check", true))
{
if(sscanf(params, "s[8]ii", action, slot, value)) return SendClientMessage(playerid, -1, "/convoyspinenctlcity check [слот] [пункт]");
MUN_Convoy[slot][checkpoint] = value;
}
else if(!strcmp(action, "status", true))
{
if(sscanf(params, "s[8]ii", action, slot, value)) return SendClientMessage(playerid, -1, "/convoyspinenctlcity status [слот] [0-3]");
MUN_Convoy[slot][status] = value;
if(value == 3)
{
SendClientMessageToAll(0xFF0000FF, "[%s] Колонна запросила усиление!", MODULE_TAG);
}
}
return 1;
}
Тест-кейсы
- провести испытание: добавить и удалить технику в марше — ожидать корректного сигнала
- смоделировать отказ: перевести колонну в статус угрозы — убедиться что резерв подхватил
- сравнить отчёт с журнал колонн и подтвердить отсутствие расхождений
Эксплуатация
- фиксировать время старта и финиша
- еженедельно сверять маршрутные карты
- проводить ночные аудиты вместе с диспетчеров движения
- держать план реагирования на потеря связи с экипажами актуальным
- отчёты автоматически попадают в мэрия