Активный
- Тема Автор
- #1
Контекст
Решение фиксирует текущие координаты штаба, проверяет присутствие и упрощает перенос лагеря. Решение закрывает задачи операционного центра аэропорта.
Функциональность
Внедрение
Код
Тест-кейсы
Эксплуатация
Решение фиксирует текущие координаты штаба, проверяет присутствие и упрощает перенос лагеря. Решение закрывает задачи операционного центра аэропорта.
Функциональность
- хранит актуальную зону развёрнутого штаба
- вычисляет кто находится внутри рабочей окружности
- позволяет перемещать лагерь одной командой
Внедрение
- выберите ответственных за перенос лагеря
- пропишите базовую зону по умолчанию
- согласуйте радиус охвата для контроля присутствия
- добавьте проверку посещаемости в систему допуска
Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#define MODULE_TAG "AIR_MOBILE_HQ"
new Float:AIR_HQPos[3] = {1500.0, -1700.0, 13.0};
new Float:AIR_HQRadius = 35.0;
stock bool:AIR_IsInside(playerid)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
return floatsqroot(floatpower(x - AIR_HQPos[0], 2.0) + floatpower(y - AIR_HQPos[1], 2.0)) <= AIR_HQRadius;
}
CMD:hqstatusair(playerid, const params[])
{
new msg[128];
format(msg, sizeof msg, "[%s] HQ: %.2f %.2f %.2f | Радиус %.1fм", MODULE_TAG, AIR_HQPos[0], AIR_HQPos[1], AIR_HQPos[2], AIR_HQRadius);
SendClientMessage(playerid, 0x20B2AAFF, msg);
format(msg, sizeof msg, "[%s] Вы %s внутри периметра.", MODULE_TAG, AIR_IsInside(playerid) ? "уже" : "не");
SendClientMessage(playerid, 0x20B2AAFF, msg);
return 1;
}
CMD:hqmoveair(playerid, const params[])
{
new Float:x, Float:y, Float:z, Float:r;
if(sscanf(params, "ffff", x, y, z, r)) return SendClientMessage(playerid, -1, "Используй: /hqmoveair [x] [y] [z] [радиус]");
AIR_HQPos[0] = x;
AIR_HQPos[1] = y;
AIR_HQPos[2] = z;
AIR_HQRadius = r;
new msg[144];
format(msg, sizeof msg, "[%s] HQ перенесен в %.1f %.1f %.1f | R=%.1f", MODULE_TAG, x, y, z, r);
SendClientMessageToAll(0xF0E68CFF, msg);
return 1;
}
Тест-кейсы
- переместите штаб и сравните координаты на карте
- проверьте, что игрок вне радиуса не учитывается
- вызовите перенос в движущемся транспорте для проверки защиты
Эксплуатация
- фотографируйте зону при каждом переносе для отчета
- проверяйте привязку ко времени комендантского часа
- ежедневно синхронизируйте координаты с порталом
- отчеты автоматически попадают в аэропорт