Активный
- Тема Автор
- #1
Контекст
Штаб задает маршруты БПЛА, расписание и контролирует их выполнение одной командой. Решение используется оперативным штабом нацгвардии.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
Штаб задает маршруты БПЛА, расписание и контролирует их выполнение одной командой. Решение используется оперативным штабом нацгвардии.
Функциональность
- хранит до 16 заранее заданных пролетов
- помогает выдавать задания операторам дронов
- фиксирует длительность и координаты каждой миссии
Внедрение
- соберите каталог точек разведки
- опишите длительность и минимальную высоту
- обучите операторов запускать шаблон
- назначьте ответственного за обновление точек
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "NG_DRONE_SCHEDULER"
#define ROUTE_MAX 16
enum e_route
{
bool:used,
Float:x,
Float:y,
Float:z,
duration
};
new NG_Routes[ROUTE_MAX][e_route];
stock NG_AssignRoute(playerid, slot)
{
if(slot < 0 || slot >= ROUTE_MAX || !NG_Routes[slot][used]) return 0;
SetPlayerCheckpoint(playerid, NG_Routes[slot][x], NG_Routes[slot][y], NG_Routes[slot][z], 8.0);
new msg[96];
format(msg, sizeof msg, "[%s] Дрону назначен маршрут #%d | %d мин.", MODULE_TAG, slot, NG_Routes[slot][duration]);
SendClientMessage(playerid, 0x7FFFD4FF, msg);
return 1;
}
CMD:droneplanng(playerid, const params[])
{
SendClientMessage(playerid, 0xFFDAB9FF, "[%s] Маршруты БПЛА:", MODULE_TAG);
for(new i = 0; i < ROUTE_MAX; i++)
{
if(!NG_Routes[i][used]) continue;
new msg[128];
format(msg, sizeof msg, "#%d -> %.1f %.1f %.1f | %d мин", i, NG_Routes[i][x], NG_Routes[i][y], NG_Routes[i][z], NG_Routes[i][duration]);
SendClientMessage(playerid, 0xFFEFD5FF, msg);
}
return 1;
}
CMD:dronerunng(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, "Используй: /dronerunng save/delete/assign ...");
if(!strcmp(action, "save", true))
{
if(sscanf(params, "s[8]ifffi", action, slot, x, y, z, duration)) return SendClientMessage(playerid, -1, "/dronerunng save [слот] [x] [y] [z] [мин]");
NG_Routes[slot][used] = true;
NG_Routes[slot][x] = x;
NG_Routes[slot][y] = y;
NG_Routes[slot][z] = z;
NG_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, "/dronerunng delete [слот]");
NG_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, "/dronerunng assign [слот] [оператор]");
if(!NG_AssignRoute(target, slot)) SendClientMessage(playerid, 0xDC143CFF, "[%s] Слот не готов.", MODULE_TAG);
}
return 1;
}
Тест-кейсы
- создайте три маршрута и убедитесь что они сохраняются
- попробуйте удалить маршрут и проверить освобождение слота
- запустите вылет и контролируйте координаты на миникарте
Эксплуатация
- сверяйте геозоны с картой ограничений полетов
- ежедневно архивируйте flown-логи
- переутверждайте длительность миссий еженедельно
- отчеты автоматически попадают в нацгвардия