Активный
- Тема Автор
- #1
Зачем нужен
Когда на сервере сотни бизнесов, игроки часто забывают платить налоги, обновлять склад или обслуживать оборудование. Этот сервис запускает проверочные рейды, фиксирует нарушения и начисляет штрафы без ручного вмешательства админов.
Данные по бизнесу
Подготовка
При старте сервера загружаем все бизнесы и назначаем им дату следующей проверки.
Планировщик проверок
Каждый час выбираем часть бизнесов и прогоняем по чек-листу.
Чек-лист
Уведомления
Отчёт для админов
Команда `/auditlog` выводит 10 последних проверок, `/audits bID` — историю конкретного бизнеса. Сохраняйте записи в базу, чтобы можно было отследить системных нарушителей.
Советы
* Добавьте коэффициенты в зависимости от статуса бизнеса (VIP получает предупреждение вместо штрафа).
* Проверьте интеграцию с налоговой системой: если штраф не оплачен вовремя, бизнес блокируется.
* Для RP-серверов можно дополнить сценарий выездной проверкой: инспектор приезжает, собеседует персонал, и результат заносится в карточку.
Проверка
1. Создайте тестовый бизнес с пустым складом и просроченным налогом — убедитесь, что начисляется двойной штраф.
2. Попробуйте выполнить аудиты вручную через `/auditrun 15`, чтобы проверить реакцию системы.
3. Включите лог и проследите, что планировщик не пропускает бизнесы и не проверяет их чаще, чем раз в час.
Когда на сервере сотни бизнесов, игроки часто забывают платить налоги, обновлять склад или обслуживать оборудование. Этот сервис запускает проверочные рейды, фиксирует нарушения и начисляет штрафы без ручного вмешательства админов.
Данные по бизнесу
Код:
enum BusinessAudit
{
AuditBusinessID,
AuditOwner[MAX_PLAYER_NAME],
AuditLastCheck,
AuditFine,
AuditStatus,
AuditNotes[96]
}
new AuditData[256][BusinessAudit];
new AuditCount;
Подготовка
При старте сервера загружаем все бизнесы и назначаем им дату следующей проверки.
Код:
LoadBusinessAudits()
{
for(new i = 0; i < TotalBusinesses; i++)
{
new idx = AuditCount++;
AuditData[idx][AuditBusinessID] = BusinessData[i][bID];
GetBusinessOwner(i, AuditData[idx][AuditOwner], MAX_PLAYER_NAME);
AuditData[idx][AuditLastCheck] = gettime();
AuditData[idx][AuditFine] = 0;
AuditData[idx][AuditStatus] = 0;
AuditData[idx][AuditNotes][0] = '\0';
}
}
Планировщик проверок
Каждый час выбираем часть бизнесов и прогоняем по чек-листу.
Код:
forward AuditScheduler();
public AuditScheduler()
{
new now = gettime();
for(new i = 0; i < AuditCount; i++)
{
if(now - AuditData[i][AuditLastCheck] < 3600)
continue;
RunAudit(i);
AuditData[i][AuditLastCheck] = now;
}
return 1;
}
Чек-лист
Код:
RunAudit(idx)
{
new b = AuditData[idx][AuditBusinessID];
new violations = 0;
if(BusinessData[b][bStock] < 50) violations++;
if(BusinessData[b][bTaxDebt] > 0) violations++;
if(!IsBusinessStaffOnline(b)) violations++;
if(violations > 0)
{
new fine = violations * 5000;
AuditData[idx][AuditFine] += fine;
AuditData[idx][AuditStatus] = 1;
format(AuditData[idx][AuditNotes], 96, "Нарушений: %d, штраф $%d", violations, fine);
NotifyOwner(idx, fine);
}
else
{
AuditData[idx][AuditStatus] = 0;
AuditData[idx][AuditNotes] = "Проверка пройдена";
}
}
Уведомления
Код:
NotifyOwner(idx, fine)
{
new owner[MAX_PLAYER_NAME];
format(owner, sizeof owner, "%s", AuditData[idx][AuditOwner]);
if(IsPlayerOnline(owner))
{
SendClientMessage(GetPlayerID(owner), 0xFF0000FF,
"[AUDIT] Ваш бизнес получил штраф $%d. Оплатите его в течение суток.", fine);
}
else
{
LogOfflineMessage(owner, fine);
}
}
Отчёт для админов
Команда `/auditlog` выводит 10 последних проверок, `/audits bID` — историю конкретного бизнеса. Сохраняйте записи в базу, чтобы можно было отследить системных нарушителей.
Советы
* Добавьте коэффициенты в зависимости от статуса бизнеса (VIP получает предупреждение вместо штрафа).
* Проверьте интеграцию с налоговой системой: если штраф не оплачен вовремя, бизнес блокируется.
* Для RP-серверов можно дополнить сценарий выездной проверкой: инспектор приезжает, собеседует персонал, и результат заносится в карточку.
Проверка
1. Создайте тестовый бизнес с пустым складом и просроченным налогом — убедитесь, что начисляется двойной штраф.
2. Попробуйте выполнить аудиты вручную через `/auditrun 15`, чтобы проверить реакцию системы.
3. Включите лог и проследите, что планировщик не пропускает бизнесы и не проверяет их чаще, чем раз в час.