Активный
- Тема Автор
- #1
Контекст
готовит маршруты пролётов и выдаёт их пилотам ускоряет мобильные штабы и колонны координирует спасательные штабы.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
готовит маршруты пролётов и выдаёт их пилотам ускоряет мобильные штабы и колонны координирует спасательные штабы.
Функциональность
- отслеживает маршрутные точки для звена разведывательных дронов мобильного звена и наносит данные на сетку Rover
- управляет навигационные маяки Arc через панель Falcon без задержек
- прогнозирует потеря миссий и заранее предупреждает операторов полётов
Внедрение
- прописать каталог точек и полевые токены перед вводом
- сверить калибровку автопилотов с маршрутные маяки
- назначить ответственных за резерв миссий и полевой резерв техники
- загрузить сценарии шаблон высот и полевые чек-листы
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "MCS_DRONE_ARC_FIELD"
#define ROUTE_MAX 18
enum e_route
{
bool:used,
Float:x,
Float:y,
Float:z,
duration
};
new MCS_Routes[ROUTE_MAX][e_route];
stock MCS_AssignRoute(playerid, slot)
{
if(slot < 0 || slot >= ROUTE_MAX || !MCS_Routes[slot][used]) return 0;
SetPlayerCheckpoint(playerid, MCS_Routes[slot][x], MCS_Routes[slot][y], MCS_Routes[slot][z], 8.0);
new msg[96];
format(msg, sizeof msg, "[%s] Дрону назначен маршрут #%d | %d мин.", MODULE_TAG, slot, MCS_Routes[slot][duration]);
SendClientMessage(playerid, 0x7FFFD4FF, msg);
return 1;
}
CMD:dronearcfielstatres(playerid, const params[])
{
SendClientMessage(playerid, 0xFFDAB9FF, "[%s] Маршруты БПЛА:", MODULE_TAG);
for(new i = 0; i < ROUTE_MAX; i++)
{
if(!MCS_Routes[i][used]) continue;
new msg[128];
format(msg, sizeof msg, "#%d -> %.1f %.1f %.1f | %d мин", i, MCS_Routes[i][x], MCS_Routes[i][y], MCS_Routes[i][z], MCS_Routes[i][duration]);
SendClientMessage(playerid, 0xFFEFD5FF, msg);
}
return 1;
}
CMD:dronearcfielctlres(playerid, const params[])
{
new action[8], slot, target, duration;
new Float:x, Float:y, Float:z;
if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /dronearcfielctlres save/delete/assign ...");
if(!strcmp(action, "save", true))
{
if(sscanf(params, "s[8]ifffi", action, slot, x, y, z, duration)) return SendClientMessage(playerid, -1, "/dronearcfielctlres save [слот] [x] [y] [z] [мин]");
MCS_Routes[slot][used] = true;
MCS_Routes[slot][x] = x;
MCS_Routes[slot][y] = y;
MCS_Routes[slot][z] = z;
MCS_Routes[slot][duration] = duration;
SendClientMessage(playerid, 0x32CD32FF, "[%s] Маршрут #%d сохранен.", MODULE_TAG, slot);
}
else if(!strcmp(action, "delete", true))
{
if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/dronearcfielctlres delete [слот]");
MCS_Routes[slot][used] = false;
SendClientMessage(playerid, 0xFF4500FF, "[%s] Маршрут #%d очищен.", MODULE_TAG, slot);
}
else if(!strcmp(action, "assign", true))
{
if(sscanf(params, "s[8]ii", action, slot, target)) return SendClientMessage(playerid, -1, "/dronearcfielctlres assign [слот] [оператор]");
if(!MCS_AssignRoute(target, slot)) SendClientMessage(playerid, 0xDC143CFF, "[%s] Слот не готов.", MODULE_TAG);
}
return 1;
}
Тест-кейсы
- провести испытание: сохранить маршрут с максимальным временем — ожидать корректного сигнала
- смоделировать отказ: удалить занятую ячейку — убедиться что резерв подхватил
- сравнить отчёт с реестр маршрутов и подтвердить отсутствие расхождений
Эксплуатация
- ежедневно архивировать flown-логи
- еженедельно обновлять список точек
- вести брифинги на выезде вместе с операторов полётов
- держать план реагирования на потеря миссий актуальным
- отчёты автоматически попадают в штаб МЧС