Активный
- Тема Автор
- #1
Контекст
контролирует каждую створку периметра и ведёт историю допуска держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
контролирует каждую створку периметра и ведёт историю допуска держит ночные смены в курсе каждой секунды решение держит городской ситуационный центр.
Функциональность
- отслеживает ранги допуска для периметра энергоузла ночного контура и наносит данные на ночную сетку Watcher
- управляет RFID-блоки Sentinel через панель Iris без задержек
- прогнозирует проникновения и ошибки выдачи и заранее предупреждает охранных офицеров
Внедрение
- прописать реестр ключевых точек и ночные ключи доступа перед вводом
- сверить штатные часы постов с марки Chronos
- назначить ответственных за аварийные шлюзы и ночной резерв каналов
- загрузить сценарии таблицу разблокировок и ночные регламенты
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "MUN_BEACON_LOCK_NIGHT"
new MUN_PassLevel[MAX_PLAYERS];
new MUN_LastVisit[MAX_PLAYERS];
stock MUN_Clamp(value, minv, maxv)
{
if(value < minv) return minv;
if(value > maxv) return maxv;
return value;
}
stock MUN_CanEnter(playerid, required)
{
return MUN_PassLevel[playerid] >= required;
}
CMD:beaconlocknistatcity(playerid, const params[])
{
new msg[128];
new last = (MUN_LastVisit[playerid] == 0 ? 0 : (GetTickCount() - MUN_LastVisit[playerid]) / 60000);
format(msg, sizeof(msg), "[%s] Уровень: %d | Последний проход: %d мин назад.", MODULE_TAG, MUN_PassLevel[playerid], last);
SendClientMessage(playerid, 0x2E8B57FF, msg);
return 1;
}
CMD:beaconlocknictlcity(playerid, const params[])
{
new target, level;
if(sscanf(params, "ui", target, level)) return SendClientMessage(playerid, -1, "Используй: /beaconlocknictlcity [id] [уровень 0-5]");
MUN_PassLevel[target] = MUN_Clamp(level, 0, 5);
SendClientMessage(target, 0x87CEFAFF, "[%s] Доступ обновлен до %d.", MODULE_TAG, MUN_PassLevel[target]);
return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
if(newkeys & KEY_SECONDARY_ATTACK)
{
MUN_LastVisit[playerid] = GetTickCount();
}
return 1;
}
Тест-кейсы
- провести испытание: создать ложный пропуск и проверить блокировку — ожидать корректного сигнала
- смоделировать отказ: перевести створку в ручной режим — убедиться что резерв подхватил
- сравнить отчёт с журнал пропусков и подтвердить отсутствие расхождений
Эксплуатация
- сохранять выгрузку пропусков каждые сутки
- сверять отчёты с журналом постов
- проводить ночные аудиты вместе с охранных офицеров
- держать план реагирования на проникновения и ошибки выдачи актуальным
- отчёты автоматически попадают в мэрия