Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod - Counter Strike Source && CS GO » Плагины (платные) » Activity History (Статистика посещений, функции, логи)
Activity History
_wS_ Дата: Суббота, 06.04.2019, 12:17:26 | Сообщение # 1
Activity History (csgo, css, css v34) (купить)

Установка/обновление
Если что-то не работает

Ведёт статистику посещаемости сервера с привязкой к команде игрока.
Т.е. можно узнать не просто сколько он всего провел времени на сервере, а еще и сколько находился в определенной команде.

Поддерживается лишь MYSQL, поэтому в addons/sourcemod/configs/databases.cfg нужно добавить:

Код
"activity_history"
{
    "driver" "mysql"
    "host" "хост"
    "database" "база"
    "user" "логин"
    "pass" "пароль"
    "port" "3306"
}


МОДУЛИ:

Active History [Log]

Код
#if defined _activity_history_included
    #endinput
#endif
#define _activity_history_included

////////////////

#define AH_EVENT_NEWDAY    0 // public CallBack(day_number, day, month, year, old_day, old_month, old_year) - начался новый день (day_number 1-7, понедельник = 1)
#define AH_EVENT_SQL    1 // public CallBack(Handle:hSQL) - если INVALID_HANDLE, то соединение разорвано, иначе установлено/восстановлено.

/**
* public CallBack() - очередь запросов очищена (все запросы выполнены)
* Это относится лишь к MYSQL запросам, которые обновляют name, t_sec, ct_sec, spec_sec.
* Обновление происходит:
* - каждые 5 минут
* - при выходе с сервера
* - наступил новый день
* Такие запросы добавляются в очередь (CreateArray), новый запрос стартует после завершения предыдущего.
* Пример полезности:
* Начался новый день (AH_EVENT_NEWDAY) и мы хотим получить топ игроков прошлого дня.
* Может случиться так, что не все UPDATE запросы были завершены и мы получим неточные данные.
* Поэтому, если AH_UpdateQueueEmpty() false, можно хукнуть AH_EVENT_UPDATE_QUEUE_CLEARED и уже там получить топ.
**/
#define AH_EVENT_UPDATE_QUEUE_CLEARED 2

// Если hook false, то это UnHook.
native AH_HookEvent(AH_EVENT, Function:CallBack, bool:hook = true);

////////////////

#define T_SEC   0
#define CT_SEC   1
#define SPEC_SEC  2

native Handle:AH_GetSQL();
native bool:AH_UpdateQueueEmpty(); // Есть ли на очереди запросы на обновление данных (AH_EVENT_UPDATE_QUEUE_CLEARED)

/**
* Узнать сколько секунд игрок провел на сервере с DateFrom по DateTo.
*
* Дата указывается в формате "число.месяц.год", например "25.3.2019".
* Если DateFrom = DateTo, то вернёт статистику за 1 день.
*
* STEAM_   - "STEAM_x:x:xxxxxxx"
* CallBack   - функция для возврата результата (SQL_TQuery требует времени)
* detail   - если true, то узнаем не только общее время, но и статистику за каждый days день (смотрите hDetailAr ниже)
*
* //
* public CallBack(const String:STEAM_[], const String:DateFrom[], const String:DateTo[], seconds[3], client, Handle:hDetailAr, Float:fQuerySeconds, const String:sQueryError[]);
*
* STEAM_ и Date..    - такие же, как и при вызове функции
* seconds   - общий результат (секунды активности за days дней) seconds[T_SEC] seconds[CT_SEC] seconds[SPEC_SEC]
* client   - игрок, чей steamid совпадает с STEAM_, иначе 0 (offline).
* hDetailAr  - если не INVALID_HANDLE, то это CreateArray (Handle: вы должны закрыть), содержащий статистику за каждый days-день.
*      Запись имеет вид: "year|month|day|T_SEC|CT_SEC|SPEC_SEC".
*      Данные отсортированы по дате в порядке возрастания (1, 2, 3, ..)
*      Если игрока не было на сервере в какой-то из days дней, то записи не будет.
* fQuerySeconds    - сколько секунд выполнялся запрос
* sQueryError  - если не пустая 'if (sQueryError[0])', то запрос завершился с ошибкой.
* //
*
* return:
* 1 = запрос успешно стартовал
* 0 = ошибка (например, нет связи с SQL или DateFrom > DateTo)
**/
native AH_GetActivitySeconds(const String:STEAM_[], const String:DateFrom[], const String:DateTo[], Function:CallBack, bool:detail = false);

/**
* Получить список игроков, которые больше всего провели времени на сервере с DateFrom по DateTo (если даты равны, то за 1 день).
*
* limit   - в списке будет не более 'x' человек (лимит) (0 = лимита нет).
*
* public CallBack(const String:DateFrom[], const String:DateTo[], Handle:hAr, Float:fQuerySeconds, const String:sQueryError[]);
* hAr    - если не INVALID_HANDLE, то это CreateArray (Handle: вы должны закрыть) со списком ироков.
*      Запись имеет вид: "x|T_SEC|CT_SEC|SPEC_SEC|steamid|name" (x = T_SEC + CT_SEC + SPEC_SEC).
*     Данные отсортированы по 'x' в порядке убывания (индекс 0 = top1)
* return:
* 1 = запрос успешно стартовал
* 0 = ошибка (например, нет связи с SQL или DateFrom > DateTo)
**/
native AH_GetActivitySecondsTop(const String:DateFrom[], const String:DateTo[], Function:CallBack, limit);

/**
* Узнать сколько человек посетило сервер с DateFrom по DateTo (если даты равны, то за 1 день).
*
* public CallBack(UniquePlayers, Handle:hAr, const String:DateFrom[], const String:DateTo[], Float:fQuerySeconds, const String:sQueryError[])
* UniquePlayers    = общее количество уникальных посетителей с DateFrom по DateTo
* hAr    = если detail false, то вид строк:
*                    "year|month|day|count" (отсортировано по возрастанию даты)
*       если detail true , то вид строк:
*                    "year|month|day|hDetailAr" (отсортировано по возрастанию даты)
*                    hDetailAr это Handle в виде int или 0
*                    "SUM_SEC|T_SEC|CT_SEC|SPEC_SEC|name|steamid" (отсортировано по убыванию SUM_SEC)
*                    Чем больше записей вернет результат, тем больше памяти (RAM) потребуется, поэтому не выбирайте слишком много.
* return:
* 1 = запрос успешно стартовал
* 0 = ошибка (например, нет связи с SQL или DateFrom > DateTo)
**/
native AH_GetActivityPlayers(const String:DateFrom[], const String:DateTo[], Function:CallBack, bool:detail = false);

/**
* Удалить статистику с DateFrom по DateTo (если даты равны, то за 1 день).
*
* Укажите STEAM_, если нужно удалить не все записи, а лишь конкретного игрока.
* Если DateFrom и DateTo и STEAM_ равны "all", то таблица полностью очищается.
*
* Если CallBack указан, то будет вызван:
* public CallBack(rows, const String:DateFrom[], const String:DateTo[], const String:STEAM_[], Float:fQuerySeconds, const String:sQueryError[])
* rows    = количество удалённых записей
*
* return:
* 1 = запрос успешно стартовал
* 0 = ошибка (например, нет связи с SQL или DateFrom > DateTo)
**/
native AH_ClearStats(const String:DateFrom[], const String:DateTo[], const String:STEAM_[] = "", Function:CallBack = INVALID_FUNCTION);

stock bool:GetDayMonthYearFromString(const String:str[], &d, &m, &y) // str = "day.month.year"
{
    decl String:s[24];
    strcopy(s, sizeof(s), str);
    new i = FindCharInString(s, '.', true);
    if (i > -1 && (y = StringToInt(s[i+1])) > 1000)
    {
        s[i] = 0;
        if ((i = FindCharInString(s, '.', true)) > -1 && (m = StringToInt(s[i+1])) >= 1 && m <= 12)
        {
            s[i] = 0;
            if ((d = StringToInt(s)) >= 1 && d <= 31)
            return true;
        }
    }
    d = 0;
    m = 0;
    y = 0;
    return false;
}

public SharedPlugin:__pl_activity_history =
{
    name = "activity_history",
    file = "activity_history.smx",
#if defined REQUIRE_PLUGIN
    required = 1,
#else
    required = 0,
#endif
};

#if !defined REQUIRE_PLUGIN
public __pl_activity_history_SetNTVOptional()
{
    MarkNativeAsOptional("AH_HookEvent");
    MarkNativeAsOptional("AH_GetSQL");
    MarkNativeAsOptional("AH_UpdateQueueEmpty");
    MarkNativeAsOptional("AH_GetActivitySeconds");
    MarkNativeAsOptional("AH_GetActivitySecondsTop");
    MarkNativeAsOptional("AH_GetActivityPlayers");
    MarkNativeAsOptional("AH_ClearStats");
}
#endif

Прикрепления: inc.zip(3.0 Kb)
 
Форум » SourceMod - Counter Strike Source && CS GO » Плагины (платные) » Activity History (Статистика посещений, функции, логи)
  • Страница 1 из 1
  • 1
Поиск: