Активный
- Тема Автор
- #1
Контекст
сводит добровольцев и их часы допуска держит ночные смены в курсе каждой секунды координирует спасательные штабы.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
сводит добровольцев и их часы допуска держит ночные смены в курсе каждой секунды координирует спасательные штабы.
Функциональность
- отслеживает часы дежурства для корпуса добровольцев ночного контура и наносит данные на ночную сетку Watcher
- управляет карточки Loop через панель Beacon без задержек
- прогнозирует провал смен и заранее предупреждает координаторов волонтёров
Внедрение
- прописать лист ожидания и ночные ключи доступа перед вводом
- сверить расписание смен с марки Chronos
- назначить ответственных за лист резерва и ночной резерв каналов
- загрузить сценарии инструктаж допуска и ночные регламенты
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "MCS_VOLUNTEER_LOOP_NIGHT"
#define VOL_CAP 18
enum e_vol
{
bool:used,
playerid,
hours,
status
};
new MCS_Volunteers[VOL_CAP][e_vol];
stock MCS_FindByPlayer(playerid)
{
for(new i = 0; i < VOL_CAP; i++)
{
if(MCS_Volunteers[i][used] && MCS_Volunteers[i][playerid] == playerid) return i;
}
return -1;
}
CMD:volunteerloostatres(playerid, const params[])
{
new idx = MCS_FindByPlayer(playerid);
if(idx == -1) return SendClientMessage(playerid, 0xDC143CFF, "[%s] Вы не записаны на смену.", MODULE_TAG);
new msg[128];
format(msg, sizeof msg, "[%s] Слот #%d | Часы: %d | Статус: %d", MODULE_TAG, idx, MCS_Volunteers[idx][hours], MCS_Volunteers[idx][status]);
SendClientMessage(playerid, 0x98FB98FF, msg);
return 1;
}
CMD:volunteerlooctlres(playerid, const params[])
{
new action[8], slot, target, hours, status;
if(sscanf(params, "s[8]", action)) return SendClientMessage(playerid, -1, "Используй: /volunteerlooctlres add/update/reset");
if(!strcmp(action, "add", true))
{
if(sscanf(params, "s[8]iii", action, slot, target, hours)) return SendClientMessage(playerid, -1, "/volunteerlooctlres add [слот] [id] [часы]");
if(MCS_FindByPlayer(target) != -1) return SendClientMessage(playerid, 0xFF0000FF, "[%s] Игрок уже в сетке.", MODULE_TAG);
MCS_Volunteers[slot][used] = true;
MCS_Volunteers[slot][playerid] = target;
MCS_Volunteers[slot][hours] = hours;
MCS_Volunteers[slot][status] = 1;
SendClientMessage(target, 0x32CD32FF, "[%s] Вы записаны на смену #%d.", MODULE_TAG, slot);
}
else if(!strcmp(action, "update", true))
{
if(sscanf(params, "s[8]iiii", action, slot, hours, status, target)) return SendClientMessage(playerid, -1, "/volunteerlooctlres update [слот] [часы] [статус] [id]");
MCS_Volunteers[slot][hours] = hours;
MCS_Volunteers[slot][status] = status;
MCS_Volunteers[slot][playerid] = target;
SendClientMessage(target, 0xFFD700FF, "[%s] Параметры смены обновлены.", MODULE_TAG);
}
else if(!strcmp(action, "reset", true))
{
if(sscanf(params, "s[8]i", action, slot)) return SendClientMessage(playerid, -1, "/volunteerlooctlres reset [слот]");
MCS_Volunteers[slot][used] = false;
}
return 1;
}
Тест-кейсы
- провести испытание: проставить все слоты и проверить очередь — ожидать корректного сигнала
- смоделировать отказ: обновить статус допуска на лету — убедиться что резерв подхватил
- сравнить отчёт с журнал добровольцев и подтвердить отсутствие расхождений
Эксплуатация
- в конце суток очищать сетку
- раз в месяц актуализировать контакты
- проводить ночные аудиты вместе с координаторов волонтёров
- держать план реагирования на провал смен актуальным
- отчёты автоматически попадают в штаб МЧС