Sign in to follow this  
Followers 0
Guest stibs

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

9 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

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

Спойлер

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

    • JAFAR
      By JAFAR
      Удалил полностью все объекты с города Батырево
      вы спросите зачем я это сделал?
      Я вам отвечу я хотел удалить все города с карты CRMP но затея не оправдала себя
      так как я хотел сделать единый город с 0 на crmp 0.3e ну потом я подумал и решил бросить затею
      так как это долго и нудно и смысл не вижу дальше продолжать!
       
      Если хотите что бы я продолжил делать дело с вас Like.
      Скриншоты проделанной работы:
       
      Желаю вам удачи!
      Удалённый батырево.txt
    • Jadyn Allen
      By Jadyn Allen
      Всем привет! Купил Мод Moscow RolePlay, поставил на хост, захожу и тут бац! Пишет что подключился и сразу выкидывает с сервера с переподключением с ошибкой LШ connection to the server. Reconnecting crmp. Кто сможет помочь буду благодарен