Гость stibs

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

В теме 9 сообщений

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


Всем привет! В одном моде (слитый 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

Отредактировано пользователем stibs

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если ошибка : 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;
}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Автор мода Sunrise RPSerega_Travakur

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

Указал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как исправить? 

Спойлер

C:\Users\Максим\Desktop\Moд ICE RP\gamemodes\ice.pwn(10431) : error 012: invalid function call, not a valid address
C:\Users\Максим\Desktop\Moд ICE RP\gamemodes\ice.pwn(10431) : error 029: invalid expression, assumed zero
C:\Users\Максим\Desktop\Moд ICE RP\gamemodes\ice.pwn(10431) : warning 215: expression has no effect
C:\Users\Максим\Desktop\Moд ICE RP\gamemodes\ice.pwn(10431) : error 001: expected token: ";", but found ")"
C:\Users\Максим\Desktop\Moд ICE RP\gamemodes\ice.pwn(10431) : fatal error 107: too many error messages on one line

Compilation aborted.

Pawn compiler 3.10.8              Copyright (c) 1997-2006, ITB CompuPhase


4 Errors.
 

 

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'""""");

 

imag1e.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@wert1xxx сток поставь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

получено новое достижение: апнуть тему 5-ти летней давности

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

Устно предупредил – не поняли... В следующий раз поставлю на премодерацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • dmitryan
      От dmitryan


      Скачать файл RUSSIA RP | 2024 | ДОРАБОТКА!
      Доброго времени суток! Я выложил на продажу полную копию Russia RolePlay!
      Мод будет обновляться.
      Основа мода : Russia RP | 2023 by gooding
      Доработка мода : Я (D.Grizenko)
       
       

















      Добавил dmitryan Добавлено 07.03.2024 Категория Моды Автор Основа - gooding, доработка - d.grizenko  
    • Redmondd
      От Redmondd
      При запуске сервера в консоли пишет: Started server on port: 7777, with maxplayers: 500 lanmode is OFF.
      И когда захожу на сервер пишет server didnt respond
       
      ---------- Loaded log file: "server_log.txt". ---------- SA-MP Dedicated Server ---------------------- v0.3.7-R2, (C)2005-2015 SA-MP Team filterscripts = ""  (string) Server Plugins --------------  Loading plugin: mysql   > MySQL plugin R7-2 successfully loaded.   Loaded.  Loading plugin: sscanf  ===============================       sscanf plugin loaded.          Version:  2.8.1    (c) 2012 Alex "Y_Less" Cole  ===============================   Loaded.  Loading plugin: dc_cmd   Daniel's CMD plugin v2.8     (c) 2014 Daniel_Cortez         www.pro-pawn.ru   Loaded.  Loading plugin: streamer *** Streamer Plugin v2.7.9 by Incognito loaded ***   Loaded.  Loaded 4 plugins. Started server on port: 7777, with maxplayers: 500 lanmode is OFF. Filterscripts ---------------   Loaded 0 filterscripts. Подключение к базе данных MYSQL успешно ---------------------------------- --------Redmond RP 01-------- ---------------------------------- Number of vehicle models: 5 Склады загружены успешно Дома (15 шт) загружены успешно