Sign in to follow this  
Followers 0
Guest stibs

Система статистики администрации.

6 posts in this topic

ГОТОВОЕ РЕШЕНИЕ


Всем привет! В одном моде (слитый Sunrise) увидел неплохую системку статистики администрации. Однако, как выяснилось, данная система не была доведена до конца. Т.е. там не было сохранения. Здесь же я его написал. Вы сможете полностью контролировать свою администрацию. Думаю, многим пригодится. В статистику входят: 

  • Статистика онлайна по дня недели (автоматически обнуляется в каждое воскресенье) + норма онлайна, а также общий недельный онлайн. 

Это урезанная версия, убрал из нее много лишнего, как например функция последняя причина наказания. 

Давайте начинать!


Для начала нам нужна бд, куда будет сохраняться онлайн администратора. Прикладываю готовую структуру базы данных для данной системы.

Спойлер

CREATE TABLE IF NOT EXISTS `onlineadm`( `nameadm` VARCHAR(24) NOT NULL , `online_monday` INT(11) NOT NULL , `online_tuesday` INT(11) NOT NULL , `online_wednesday` INT(11) NOT NULL , `online_thursday` INT(11) NOT NULL , `online_friday` INT(11) NOT NULL , `online_saturday` INT(11) NOT NULL , `online_sunday` INT(11) NOT NULL ) ENGINE = InnoDB;

 

Далее нам необходимо переместится в мод, и добавляем в OnGameModeInit обнуление онлайна по окончанию недели. 

if(getDayEx()==2) mysql_tquery(dbHandle, "UPDATE `onlineadm` SET `online_monday`='0',`online_tuesday`='0',`online_wednesday`='0',`online_thursday`='0',`online_friday`='0',`online_saturday`='0',`online_sunday`='0'", "", "");

Теперь делаем команду для просмотра статистики администрирования. 

Ко всем командам:
 

CMD:checkadmstats(playerid, params[])
{
    //проверку на админа
    if(sscanf(params, "s[24]", params[0])) return SendClientMessage(playerid, -1, "Используйте: /checkadmstats [nick]");
    mysql_format(dbHandle, string, sizeof(string), "SELECT * FROM `onlineadm` WHERE `nameadm`='%s' LIMIT 1", params[0]);
    mysql_tquery(dbHandle, string, "OnCheckStatsAdmin", "is", playerid, params[0]);
    SendClientMessage(playerid, -1, "В базу данных запрос успешно отправлен, ожидайте ответа.");
  
    return true;
}

Далее добавляем сам обработчик mysql запроса - OnCheckStatsAdmin:

Спойлер



forward OnCheckStatsAdmin(playerid, name[]);
public OnCheckStatsAdmin(playerid, name[])
{
    new rows, fields;
    cache_get_data(rows, fields);
    if(!rows)
    return SendClientMessage(playerid, -1, "Игрок с таким ником не найден! Поторите попытку.");
    new string[256],
    string_dialogue[2000],
    check_online_monday,
    check_online_tuesday,
    check_online_wednesday,
    check_online_thursday,
    check_online_friday,
    check_online_saturday,
    check_online_sunday,
    check_online_allday;
  
    check_online_monday = cache_get_row_int(0, 1, dbHandle); // id
    check_online_tuesday = cache_get_row_int(0, 2, dbHandle); // id
    check_online_wednesday = cache_get_row_int(0, 3, dbHandle); // id
    check_online_thursday = cache_get_row_int(0, 4, dbHandle); // id
    check_online_friday = cache_get_row_int(0, 5, dbHandle); // id
    check_online_saturday = cache_get_row_int(0, 6, dbHandle); // id
    check_online_sunday = cache_get_row_int(0, 7, dbHandle); // id
  
    strcat(string_dialogue, "{FF9900}Недельный онлайн\n\n");
    format(string, sizeof(string), "{FFFFFF}Понедельник:\t\t{3399FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n", check_online_monday/60, check_online_monday/3600, (check_online_monday/3600>=4)?("{63BD4E}Выполнена"):(check_online_monday/3600>=3)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
    format(string, sizeof(string), "{FFFFFF}Вторник\t\t{3399FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n", check_online_tuesday/60, check_online_tuesday/3600,  (check_online_tuesday/3600>=4)?("{63BD4E}Выполнена"):(check_online_tuesday/3600>=3)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
    format(string, sizeof(string), "{FFFFFF}Среда\t\t\t{3399FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n", check_online_wednesday/60, check_online_wednesday/3600,  (check_online_wednesday/3600>=4)?("{63BD4E}Выполнена"):(check_online_wednesday/3600>=3)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
    format(string, sizeof(string), "{FFFFFF}Четверг\t\t{3399FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n", check_online_thursday/60, check_online_thursday/3600,  (check_online_thursday/3600>=4)?("{63BD4E}Выполнена"):(check_online_thursday/3600>=3)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
    format(string, sizeof(string), "{FFFFFF}Пятница\t\t{3399FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n", check_online_friday/60, check_online_friday/3600,  (check_online_friday/3600>=4)?("{63BD4E}Выполнена"):(check_online_friday/3600>=3)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
    format(string, sizeof(string), "{FFFFFF}Суббота\t\t{3399FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n", check_online_saturday/60, check_online_saturday/3600,  (check_online_saturday/3600>=4)?("{63BD4E}Выполнена"):(check_online_saturday/3600>=3)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
    format(string, sizeof(string), "{FFFFFF}Воскресенье\t\t{3399FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n", check_online_sunday/60, check_online_sunday/3600,  (check_online_sunday/3600>=4)?("{63BD4E}Выполнена"):(check_online_sunday/3600>=3)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
    check_online_allday = check_online_monday + check_online_tuesday + check_online_wednesday + check_online_thursday + check_online_friday + check_online_saturday + check_online_sunday;
    format(string, sizeof(string), "\n{AFAFAF}Общий онлайн(недельный):\t{DD90FF}%i мин. (%i час.) {FFFFFF}| Норма онлайна - %s\n\n", check_online_allday/60, check_online_allday/3600, (check_online_sunday/3600>=28)?("{63BD4E}Выполнена"):(check_online_sunday/3600>=21)?("{FFCC00}Не выполнена"):("{F04245}Не выполнена"));
    strcat(string_dialogue, string);
  
    static const fmt_str[] = "Статистика администратора - %s";
    new str[sizeof(fmt_str) + (-2+24)];
    format(str, sizeof(str), fmt_str, name);
  
    ShowPlayerDialog(playerid, 0, DIALOG_STLYE_MSGBOX, str, string_dialogue, "Закрыть", "");
  
    return true;
}

 

Теперь самое главное, чего у этой системы, собственно и не было - Сохранение. 

Ко всем new:

new OnlineDay[MAX_PLAYERS];

Далее в секундный таймер суем:

if(/*проверка на АФК*/ < 3)
{
    OnlineDay[playerid]++;
} // если нет проверки на афк удалите ее и эти две скобки тоже.

После этого добавляем в OnPlayerDisconnect:

Спойлер

mysql_tquery(dbHandle, "SELECT * FROM `onlineadm`", "OnSaveAdm", "i", playerid);

 

Теперь создадим этот паблик сохранения:
 

Спойлер

forward OnSaveAdm(playerid);
public OnSaveAdm(playerid)
{
    new rows, fields;
    cache_get_data(rows, fields); 
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    new string[120],onlinesum;
    switch(getDayEx())
    {
        case 0:
        {
            onlinesum = cache_get_row_int(0, 6, dbHandle) + OnlineDay[playerid];
            mysql_format(dbHandle, string, sizeof(string), "UPDATE `onlineadm` SET `online_saturday` = '%d' WHERE `nameadm` = '%s'", onlinesum, name);
        }
        case 1:
        {
            onlinesum = cache_get_row_int(0, 7, dbHandle) + OnlineDay[playerid];
            mysql_format(dbHandle, string, sizeof(string), "UPDATE `onlineadm` SET `online_sunday` = '%d' WHERE `nameadm` = '%s'", onlinesum, name);
        }
        case 2:
        {
            onlinesum = cache_get_row_int(0, 1, dbHandle) + OnlineDay[playerid];
            mysql_format(dbHandle, string, sizeof(string), "UPDATE `onlineadm` SET `online_monday` = '%d' WHERE `nameadm` = '%s'", onlinesum, name);
        }
        case 3:
        {
            onlinesum = cache_get_row_int(0, 2, dbHandle) + OnlineDay[playerid];
            mysql_format(dbHandle, string, sizeof(string), "UPDATE `onlineadm` SET `online_tuesday` = '%d' WHERE `nameadm` = '%s'", onlinesum, name);
        }
        case 4:
        {
            onlinesum = cache_get_row_int(0, 3, dbHandle) + OnlineDay[playerid];
            mysql_format(dbHandle, string, sizeof(string), "UPDATE `onlineadm` SET `online_wednesday` = '%d' WHERE `nameadm` = '%s'", onlinesum, name);
        }
        case 5:
        {
            onlinesum = cache_get_row_int(0, 4, dbHandle) + OnlineDay[playerid];
            mysql_format(dbHandle, string, sizeof(string), "UPDATE `onlineadm` SET `online_thursday` = '%d' WHERE `nameadm` = '%s'", onlinesum, name);
        }
        case 6:
        {
            onlinesum = cache_get_row_int(0, 5, dbHandle) + OnlineDay[playerid];
            mysql_format(dbHandle, string, sizeof(string), "UPDATE `onlineadm` SET `online_friday` = '%d' WHERE `nameadm` = '%s'", onlinesum, name);
        }
    }
    mysql_tquery(dbHandle, string, "", ""); // запрос к базе
    return true;
}

 

Переделал систему: @stibs.

Автор первоначальной системы (автор мода Sunrise RP) - Serega_Travakur

Edited by stibs

Share this post


Link to post
Share on other sites

Если ошибка : undefined symbol getDayEx(), то вставляем в конец мода:

stock getDayEx()
{
    new w = gettime(), saturday = 1310155200, day_week;
	while(w - saturday > 60 * 60 * 24)
    {
        w -= 60 * 60 * 24;
        day_week ++;
    }
    while(day_week >= 7) day_week -= 7;
	return day_week;
}

 

Share this post


Link to post
Share on other sites

автора укажите, кто переделывал есть, а автора нет!

Заметка от Guest , создано

Было вырезано из мода (Sunrise RP), а кто автор мода без понятия. Если знаете, можете указать.

Share this post


Link to post
Share on other sites

Автор мода Sunrise RPSerega_Travakur

Заметка от Guest , создано

Указал.

Share this post


Link to post
Share on other sites

xD импорт нажми ,  с верху, я думаю знаешь где таблицы 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Dworkin
      By Dworkin
      Привет. Мне тяжело дается понимание строк в pawn из за не динамических массивов.
      #include enum pInfo { pRangName[25] } new players[MAX_PLAYERS][pInfo]; new string[20]; main() { format(string, sizeof(string), "Салага"); printf(string); players[0][pRangName] = string; } выдает ошибку "error 047: array sizes do not match, or destination array is too small" на строку "players[0][pRangName] = string;"
      Я понимаю что в ошибке говорится что размер не совпадает, но не могу понять как это сделать в павне
    • Ero33
      By Ero33
      Помогите решить проблему всё сделал, mysql подклучен но не открывается окно регистрациа ---------- Loaded log file: "server_log.txt". ---------- SA-MP Dedicated Server ---------------------- v0.3.7-R2, (C)2005-2015 SA-MP Team [20:35:47] [20:35:47] Server Plugins [20:35:47] -------------- [20:35:47] Loading plugin: crashdetect.so [20:35:47] CrashDetect plugin 4.19.4 [20:35:47] Loaded. [20:35:47] Loading plugin: filemanager.so [20:35:47] ****************** [20:35:47] ** FILE MANAGER ** [20:35:47] ** Loaded ** [20:35:47] ** Version 1.5 ** [20:35:47] ****************** [20:35:47] Loaded. [20:35:47] Loading plugin: gvar.so [20:35:47] *** GVar Plugin v1.3 by Incognito loaded *** [20:35:47] Loaded. [20:35:47] Loading plugin: mysql.so [20:35:47] >> plugin.mysql: R41-4 successfully loaded. [20:35:47] Loaded. [20:35:47] Loading plugin: pawncmd.so [20:35:47] Pawn.CMD plugin v3.2.0 by urShadow has been loaded [20:35:47] Loaded. [20:35:47] Loading plugin: pawnraknet.so [20:35:47] [Pawn.RakNet] | Pawn.RakNet 1.4.1 | 2016 - 2020 |-------------------------------- | Author and maintainer: urShadow | Compiled: Jun 18 2020 at 11:28:17 |-------------------------------------------------------------- | Forum thread: https://forum.sa-mp.com/showthread.php?t=640306 |-------------------------------------------------------------- | Repository: https://github.com/urShadow/Pawn.RakNet |-------------------------------------------------------------- | Wiki: https://github.com/urShadow/Pawn.RakNet/wiki [20:35:47] Loaded. [20:35:47] Loading plugin: pawnregex.so [20:35:47] [Pawn.Regex] plugin v1.1.3 by urShadow loaded [20:35:47] Loaded. [20:35:47] Loading plugin: profiler.so [20:35:47] Profiler plugin 2.15.3 [20:35:47] Loaded. [20:35:47] Loading plugin: sscanf.so [20:35:47] [20:35:47] =============================== [20:35:47] sscanf plugin loaded. [20:35:47] Version: 2.8.3 [20:35:47] (c) 2018 Alex "Y_Less" Cole [20:35:47] =============================== [20:35:47] Loaded. [20:35:47] Loading plugin: streamer.so [20:35:47] *** Streamer Plugin v2.9.4 by Incognito loaded *** [20:35:47] Loaded. [20:35:47] Loading plugin: TOTP.so [20:35:47] TOTP plugin v1.0.1 by Games loaded. [20:35:47] Loaded. [20:35:47] Loaded 11 plugins. [20:35:47] [20:35:47] Filterscripts [20:35:47] --------------- [20:35:47] Loading filterscript 'rega_KYPE.amx'... [20:35:47] Loaded 1 filterscripts. [20:35:48] [20:35:48] -------------------------------------- [20:35:48] ������� Nex-AC ��������! [20:35:48] ������ ��������: 1.9.53 [20:35:48] �����: Nexius [20:35:48] -------------------------------------- [20:35:48] [�������� ...] �� MYSQL ������� ���������! (������ [��������] | 1) [20:35:48] [�������� ...] ��������� ������� �������� (0 ��.) [20:35:48] [�������� ...] �� ������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ���� ����/����� ������� �������� (0 ��.) [20:35:48] ����� � ���� �� ������� [20:35:48] [�������� ...] ���� ������� ��������� (0 ��.) [20:35:48] ������ � ���� �� ������� [20:35:48] [�������� ...] ����� ������� ��������� (0 ��.) [20:35:48] ��������� � ���� �� ������� [20:35:48] [�������� ...] ��������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ��������� ������� ��������� (0 ��.) [20:35:48] ����� � ���� �� ������� [20:35:48] [�������� ...] ����� ������� ��������� (0 ��.) [20:35:48] ������� � ������ � ���� �� ������� [20:35:48] [�������� ...] ������� � ����� ������� ��������� (0 ��.) [20:35:48] ���-�� ����'�� � ���� �� ��������� � �������������� ����������� [20:35:48] [�������� ...] ��������� �������� ������� ��������� (0 ��.) [20:35:48] �� ���������� func �������� � ���� [20:35:48] [�������� ...] ������� ������� ������� ��������� (0 ��.) [20:35:48] �� ���������� �������� � ���� [20:35:48] [�������� ...] ������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ������� ���� ������� ��������� (0 ��.) [20:35:48] [�������� ...] �������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ���������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ������� ������� �������� (0 ��.) [20:35:48] [�������� ...] ������ ����� ������� �������� (0 ��.) [20:35:48] [�������� ...] ����������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ��������� ������� ��������� [20:35:48] �� ���������� ATMS � ���� [20:35:48] [�������� ...] ��������� ������� ��������� (0 ��.) [20:35:48] [�������� ...] ����������� ��������� [20:35:48] [�������� ...] ������ ������� ������� ��������� [20:35:48] �������� �� ������� [20:35:48] [������� ...] ������������ ��������: (19832 ��.) [20:35:48] [������� ...] ����������� ��������: (120 ��.) [20:35:48] _______________________________________________________ [20:35:48] [20:35:48] dev by: glvde. | vk.com/way_dev [20:35:48] aurora project � 2021, inc. all rights reserved. [20:35:48] _______________________________________________________ [20:35:48] Number of vehicle models: 109 [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] SET CHARACTER SET 'utf8' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] SET NAMES 'utf8' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] SET character_set_client = 'cp1251' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] SET character_set_connection = 'cp1251' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] SET character_set_results = 'cp1251' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] SET SESSION collation_connection = 'utf8_general_ci' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] UPDATE `accounts` SET `online_status` = '1001' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] ALTER TABLE `accounts` ALTER `pCash` SET DEFAULT '0' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] ALTER TABLE `accounts` ALTER `pLevel` SET DEFAULT '0' [20:35:48] [OnQueryError] SQL ERROR. QUERY: [20:35:48] UPDATE `reports` SET `count` = '0' WHERE `id` = 1