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

получено новое достижение: апнуть тему 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

    • August_Rothschild
      By August_Rothschild
      Всем привет , как заменять анимации в игре ? Имеется ввиду анимации танцев , как прочесть файлы с анимациями или как заменять определенную анимацию 
    • hotlive
      By hotlive
      я создал свою копию радмира и хочу дать доступ игрокам  к команде /getv, так как она доступна только админам, помогите сделать