Система контроля топлива для полиции

Активный
Статус
Сообщения
516
Лайки
32

8

месяц на сайте

Контекст
Готовое решение следит за расходом топлива служебного транспорта и автоматически уведомляет диспетчеров. поддерживает дежурную часть полиции.

Функциональность
  • считает расход топлива по каждому авто в реальном времени
  • фиксирует и обновляет персональные квоты экипажей
  • выдает предупреждения при риске остановки транспорта

Внедрение
  • подключить модуль к OnPlayerStateChange для фиксации посадки
  • прописать лимиты квот в конфигурационном файле
  • назначить ответственных за выдачу дополнительных литров
  • включить уведомления в радиосвязи диспетчерской

Код
Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define MODULE_TAG "PD_KONTROL_TOPLIVA"

new Float:PD_VehicleFuel[MAX_VEHICLES];
new PD_FuelQuota[MAX_PLAYERS];

forward InitPDFuelCore();
public InitPDFuelCore()
{
    for(new pid = 0; pid < MAX_PLAYERS; pid++)
    {
        PD_FuelQuota[pid] = 120;
    }
    printf("[%s] Квоты установлены для %s.", MODULE_TAG, "полиция");
    return 1;
}

stock PD_UpdateFuel(vehicleid, Float:diff)
{
    PD_VehicleFuel[vehicleid] = floatmax(0.0, PD_VehicleFuel[vehicleid] - diff);
    if(PD_VehicleFuel[vehicleid] < 5.0)
    {
        new driver = PD_GetVehicleDriver(vehicleid);
        if(driver != INVALID_PLAYER_ID)
        {
            SendClientMessage(driver, 0xFFA500FF, "[%s] Резерв почти пуст.", MODULE_TAG);
        }
    }
    return 1;
}

stock PD_GetVehicleDriver(vehicleid)
{
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
        if(IsPlayerConnected(i) && GetPlayerVehicleID(i) == vehicleid) return i;
    }
    return INVALID_PLAYER_ID;
}

CMD:fuelpanelpd(playerid, const params[])
{
    new msg[96];
    format(msg, sizeof(msg), "[%s] Остаток квоты: %d л.", MODULE_TAG, PD_FuelQuota[playerid]);
    SendClientMessage(playerid, 0x1E90FFFF, msg);
    return 1;
}

CMD:fuelquotapd(playerid, const params[])
{
    new target, amount;
    if(sscanf(params, "ui", target, amount)) return SendClientMessage(playerid, 0xDC143CFF, "Используй: /fuelquotapd [id] [литры]");
    PD_FuelQuota[target] = amount;
    SendClientMessage(target, 0x32CD32FF, "[%s] Квота обновлена до %d.", MODULE_TAG, amount);
    return 1;
}

Тест-кейсы
  • симуляция длительного патруля и проверка обнуления квоты
  • принудительное уменьшение топлива до 5% и проверка алерта
  • выдача новой квоты через команду и проверка синхронизации

Эксплуатация
  • создавать недельные отчеты, экспортируя квоты в CSV
  • держать шаблон команд для дежурных контролеров
  • ежемесячно пересматривать допустимые лимиты
  • отчеты автоматически попадают в полиция
 

1 человек читают эту тему (Всего: 1, Пользователей: 0, Гостей: 1)

Сверху