Орбитальный планер БПЛА ночного режима для МЧС

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

8

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

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

Функциональность
  • отслеживает маршрутные точки для звена разведывательных дронов ночного контура и наносит данные на ночную сетку Watcher
  • управляет навигационные маяки Arc через панель Falcon без задержек
  • прогнозирует потеря миссий и заранее предупреждает операторов полётов

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

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

#define MODULE_TAG "MCS_DRONE_ARC_NIGHT"
#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:dronearcnighstatres(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:dronearcnighctlres(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, "Используй: /dronearcnighctlres save/delete/assign ...");

    if(!strcmp(action, "save", true))
    {
        if(sscanf(params, "s[8]ifffi", action, slot, x, y, z, duration)) return SendClientMessage(playerid, -1, "/dronearcnighctlres 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, "/dronearcnighctlres 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, "/dronearcnighctlres assign [слот] [оператор]");
        if(!MCS_AssignRoute(target, slot)) SendClientMessage(playerid, 0xDC143CFF, "[%s] Слот не готов.", MODULE_TAG);
    }
    return 1;
}

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

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

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

Сверху