Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!
Иконка ресурса

SmartEvents - Плагин для временных событий v1.0.0

Версия мультиплеера
  1. SA:MP 0.3.7
  2. open.mp
SmartEvents

SA-MP/OMP плагин для управления временными событиями игроков: Mute, Jail, VIP и т.п.​


Как это работает

При создании события нужно указать:
  • Название события
  • Коллбек - вызывается один раз по истечении времени. Если оставшееся время больше 24 часов, коллбек не добавляется в очередь до следующего рестарта сервера, что оптимизирует производительность.
  • Тип времени- есть два типа:
    • false - offline: время истекает даже когда игрок не на сервере. Сохраняется один раз при выдаче события.
    • true - online: время истекает только пока игрок на сервере. Сохраняется при выдаче и при каждом выходе игрока с сервера.

Защита от краша

Даже для онлайн-событий потеря данных при краше не страшна.
При получении события во временную таблицу записываются нужные данные, а при выходе игрока - удаляются.
Если сервер крашнуло, то данные там останутся.
При повторном запуске плагин проверяет временную таблицу, вычисляет разницу между сохранённым и текущим временем запуска и обновляет основную таблицу.

Требования
  • Автоматический рестарт сервера раз в сутки (есть на всех нормальных серверах)
  • Скрипт автоматического поднятия при краше (есть по умолчанию на всех хостингах, на VPS ставится вручную)


Хранение данных
Все данные хранятся в SQLite базе данных по пути scriptfiles/SmartEvents.db.


Интеграция

Вызовите две функции в вашем моде - одну после авторизации, другую после регистрации:

Pawn:
public OnPlayerLogin(playerid)
{
    // Ваша загрузка аккаунта
    cache_get_value_name_int(0, "ID", PlayerInfo[playerid][pID]);

    SE_OnPlayerLogin(playerid, PlayerInfo[playerid][pID]);
}

public OnPlayerSignIn(playerid)
{
    // Когда игрок зарегистрировался
    PlayerInfo[playerid][pID] = cache_insert_id();
    SE_OnPlayerSignIn(playerid, PlayerInfo[playerid][pID]);
}


Пример использования

Pawn:
new SE:gPlayerMute;
new SE:gPlayerJail;

public OnGameModeInit()
{
    SE_SetLanguage("ru");
    gPlayerMute = SE_AddEvent("mute", "OnMuteExpired", true); // online - только время в игре
    gPlayerJail = SE_AddEvent("jail", "OnJailExpired", true); // online - только время в игре
}

CMD:mute(playerid, params[])
{
    SE_SetPlayerEvent(targetid, gPlayerMute, SE_MinutesToSeconds(30));
    SendClientMessage(targetid, -1, "Вам выдан мут на 30 минут");
}

CMD:unmute(playerid, params[])
{
    SE_RemovePlayerEvent(targetid, gPlayerMute);
    SendClientMessage(targetid, -1, "Ваш мут был снят");
}

CMD:jail(playerid, params[])
{
    SE_SetPlayerEvent(targetid, gPlayerJail, SE_HoursToSeconds(1));
    SendClientMessage(targetid, -1, "Вы посажены в jail на 1 час");
}

public OnPlayerText(playerid, text[])
{
    if (SE_IsPlayerEventActive(playerid, gPlayerMute))
    {
        SendClientMessage(playerid, -1, "У вас мут");
        return 0;
    }
    return 1;
}

public OnPlayerSpawn(playerid)
{
    if (SE_IsPlayerEventActive(playerid, gPlayerJail))
    {
        SetPlayerPos(playerid, x, y, z);
    }
    return 1;
}

SE_Event:OnMuteExpired(playerid)
{
    SendClientMessage(playerid, -1, "Время мута истекло");
}

SE_Event:OnJailExpired(playerid)
{
    SetPlayerPos(playerid, x, y, z);
    SendClientMessage(playerid, -1, "Время jail истекло");
}


Чем это лучше вычитания и сохранения каждую секунду?
  • Запросы в БД: Tick & Save - каждую секунду на игрока / SmartEvents - при выдаче + при выходе
  • Вызовы коллбека: Tick & Save - каждую секунду / SmartEvents - один раз по истечении

Benchmark
100 игроков с 5 часовым мутом и 15 реконектов на игрока (реконект только для плагина).

Benchmark.png


Документация: https://github.com/i...martEvents/wiki
Актуальная версия: https://github.com/i...Events/releases
Нет прав для скачивания
Автор
Saibot
Скачивания
0
Просмотры
68
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху