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

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

8

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

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

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

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

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

#define MODULE_TAG "PD_BEACON_LOCK_NIGHT"

new PD_PassLevel[MAX_PLAYERS];
new PD_LastVisit[MAX_PLAYERS];

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

stock PD_CanEnter(playerid, required)
{
    return PD_PassLevel[playerid] >= required;
}

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

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

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

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

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

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

Сверху