Сигнальный пропускной каркас ночного режима для армии

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

8

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

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

Функциональность
  • отслеживает ранги допуска для периметра энергоузла ночного контура и наносит данные на ночную сетку Watcher
  • управляет RFID-блоки Sentinel через панель Iris без задержек
  • прогнозирует проникновения и ошибки выдачи и заранее предупреждает охранных офицеров

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

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

#define MODULE_TAG "ARM_BEACON_LOCK_NIGHT"

new ARM_PassLevel[MAX_PLAYERS];
new ARM_LastVisit[MAX_PLAYERS];

stock ARM_Clamp(value, minv, maxv)
{
    if(value < minv) return minv;
    if(value > maxv) return maxv;
    return value;
}

stock ARM_CanEnter(playerid, required)
{
    return ARM_PassLevel[playerid] >= required;
}

CMD:beaconlocknistatarmy(playerid, const params[])
{
    new msg[128];
    new last = (ARM_LastVisit[playerid] == 0 ? 0 : (GetTickCount() - ARM_LastVisit[playerid]) / 60000);
    format(msg, sizeof(msg), "[%s] Уровень: %d | Последний проход: %d мин назад.", MODULE_TAG, ARM_PassLevel[playerid], last);
    SendClientMessage(playerid, 0x2E8B57FF, msg);
    return 1;
}

CMD:beaconlocknictlarmy(playerid, const params[])
{
    new target, level;
    if(sscanf(params, "ui", target, level)) return SendClientMessage(playerid, -1, "Используй: /beaconlocknictlarmy [id] [уровень 0-5]");
    ARM_PassLevel[target] = ARM_Clamp(level, 0, 5);
    SendClientMessage(target, 0x87CEFAFF, "[%s] Доступ обновлен до %d.", MODULE_TAG, ARM_PassLevel[target]);
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys & KEY_SECONDARY_ATTACK)
    {
        ARM_LastVisit[playerid] = GetTickCount();
    }
    return 1;
}

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

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

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

Сверху