Активный
- Тема Автор
- #1
Идея
Когда на сервере вспыхивает ЧС (пожар, массовый DM, падение FPS), админская команда должна быстро собрать данные и отработать сценарий. Модуль кризисного штаба автоматически строит “карточку происшествия”, назначает ответственных и запускает чек-лист действий.
Карточка происшествия
Регистрация происшествия
Назначение ответственного
Чек-лист действий
Для каждого типа происшествия создаём скрипт.
Командный интерфейс
`/crisis` — список всех карточек, `/crisis new` — создать новую, `/crisis take 3` — взять на себя третью.
Визуализация
* Включите TextDraw с основными метриками: число открытых карточек, количество критических (severity >= 3), кто сейчас “дежурный”.
* Админы с мобильного клиента могут получать inline-уведомления через IRC/Discord вебхуки.
Советы по эксплуатации
1. Записывайте итог: как закрыли, какие санкции выдали. Эти данные пригодятся для отчётов.
2. Разделите карточки по типам (техничка, поведенческая, геймплей) и держите свои чек-листы.
3. Для крупных ивентов можно заранее подготовить шаблон карточки (например, “Концерт сорвался”).
Тест
* Создайте карточку “Оптимизация FPS”. Пусть ответственный проверит лог, сделает рестарт стримера, отметит в карточке результат.
* Сделайте имитацию пожара в ЛС. Убедитесь, что команда `CrisisRoutine_Fire` замораживает игроков и шлёт уведомления.
* Попробуйте параллельно держать несколько карточек, чтобы проверить устойчивость массива (при закрытии заменяйте запись последней, чтобы не образовывались дыры).
Когда на сервере вспыхивает ЧС (пожар, массовый DM, падение FPS), админская команда должна быстро собрать данные и отработать сценарий. Модуль кризисного штаба автоматически строит “карточку происшествия”, назначает ответственных и запускает чек-лист действий.
Карточка происшествия
Код:
enum IncidentInfo
{
IncidentTitle[48],
IncidentReporter[24],
IncidentLocation[32],
IncidentSeverity,
IncidentStatus,
IncidentCreated,
IncidentNotes[128],
IncidentOwner
}
new IncidentLog[16][IncidentInfo];
new IncidentCount;
Регистрация происшествия
Код:
int CreateIncident(const title[], const reporter[], const loc[], severity)
{
if(IncidentCount >= sizeof IncidentLog)
return -1;
new idx = IncidentCount++;
format(IncidentLog[idx][IncidentTitle], 48, "%s", title);
format(IncidentLog[idx][IncidentReporter], 24, "%s", reporter);
format(IncidentLog[idx][IncidentLocation], 32, "%s", loc);
IncidentLog[idx][IncidentSeverity] = severity;
IncidentLog[idx][IncidentStatus] = 0; // 0 — открыто
IncidentLog[idx][IncidentCreated] = gettime();
IncidentLog[idx][IncidentOwner] = -1;
IncidentLog[idx][IncidentNotes][0] = '\0';
return idx;
}
Назначение ответственного
Код:
AssignIncident(idx, playerid)
{
if(idx < 0 || idx >= IncidentCount)
return 0;
IncidentLog[idx][IncidentOwner] = playerid;
format(IncidentLog[idx][IncidentNotes], 128,
"%sПринято администратором %s\n",
IncidentLog[idx][IncidentNotes],
GetAdminNick(playerid));
return 1;
}
Чек-лист действий
Для каждого типа происшествия создаём скрипт.
Код:
forward CrisisRoutine_Fire(idx);
public CrisisRoutine_Fire(idx)
{
SendToFireDept(IncidentLog[idx][IncidentLocation]);
FreezeNearbyPlayers(IncidentLog[idx][IncidentLocation], 15.0);
BroadcastToAdmins("[FIRE] Штаб активирован, ближайшие игроки заморожены.");
return 1;
}
Командный интерфейс
`/crisis` — список всех карточек, `/crisis new` — создать новую, `/crisis take 3` — взять на себя третью.
Код:
CMD:crisis(playerid, params[])
{
if(isnull(params))
{
ShowIncidentList(playerid);
return 1;
}
if(!strcmp(params, "new", true))
{
return StartIncidentDialog(playerid);
}
if(!strfind(params, "take ", true))
{
new idx = strval(params[5]);
AssignIncident(idx, playerid);
return 1;
}
return 1;
}
Визуализация
* Включите TextDraw с основными метриками: число открытых карточек, количество критических (severity >= 3), кто сейчас “дежурный”.
* Админы с мобильного клиента могут получать inline-уведомления через IRC/Discord вебхуки.
Советы по эксплуатации
1. Записывайте итог: как закрыли, какие санкции выдали. Эти данные пригодятся для отчётов.
2. Разделите карточки по типам (техничка, поведенческая, геймплей) и держите свои чек-листы.
3. Для крупных ивентов можно заранее подготовить шаблон карточки (например, “Концерт сорвался”).
Тест
* Создайте карточку “Оптимизация FPS”. Пусть ответственный проверит лог, сделает рестарт стримера, отметит в карточке результат.
* Сделайте имитацию пожара в ЛС. Убедитесь, что команда `CrisisRoutine_Fire` замораживает игроков и шлёт уведомления.
* Попробуйте параллельно держать несколько карточек, чтобы проверить устойчивость массива (при закрытии заменяйте запись последней, чтобы не образовывались дыры).