Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для #Djuga
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.02.2018
    Сообщений
    11
    Репутация:
    1 ±

    Система рейтинга

    Всем привет.

    Был на "конкурсе" с Артёмом (Long-), делал систему рп рейтинга, в итог оказалось не нужно , но уже сделал, выложу, может кому пригодится.




    Особенности:

    • MySQL R41-2
    • DC_CMD
    • Не зависимая





    Суть системы:

    Ну, система заключается в том , в TAB уровень а-ля SCORE это рейтинг, а не уровень, и за каждое использования команды /me, /do, /try дается 1 очко рейтинга, и в каждый PayDay(юзается каждый час дается) если игрок отсидел прибавляется одно очко, если не просидел 1 час, то анулируеться и очки исчезают.




    Приступим,

    Ко всем переменным:

    PHP код:
    new
        
    g_rp_score[MAX_PLAYERS], /*Очки которые засчитываются до PayDay*/
        
    bool:g_me_time[MAX_PLAYERS char],/*Анти-Флуд команды /me*/
        
    bool:g_do_time[MAX_PLAYERS char],/*Анти-Флуд команды /do*/
        
    g_Score[10],/*очки игрока в топе*/
        
    g_TopName[10][MAX_PLAYER_NAME];/*имя игрока в топе*/ 
    В enum игрока:

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

    PHP код:
    CMD:me(playeridparams[])
    {
        if(
    me_time{playerid}) 

        return 
    SendClientMessage(playerid, -1/*Ваш желаемый цвет*/"Подождите пару секунд...");

        if(
    isnull(params)) 

        return 
    SendClientMessage(playerid, -1/*Ваш желаемый цвет*/"Введите /me [Текст]");
        new
            
    me_text[145]; //144 + нулевая ячейка

        
    strcat(me_textPlayerInfo[playerid][pName]/*переменная ника*/);
        
    strcat(me_text" ");
        
    strcat(me_textparams[0]);

           
    /*  ProxDetector(15, playerid, me_text, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/); Ваш proxdetector  ВНИМАНИЕотправляйте me_textне params*/
        
    SetPlayerChatBubble(playeridparams[0], -1/*Ваш желаемый цвет*/25.07000); /*тут сделаем текст над головой только params[0]*/

        
    rp_score[playerid] ++;
        
    me_time{playerid} = true/*анти флуд, чтобы не набивали очки*/
       
    SetTimerEx("@__g_command"15*1000false"ii"playerid0);
        return 
    true;
    }
    CMD:do(playeridparams[])
    {
        if(
    do_time{playerid})  

        return 
    SendClientMessage(playerid, -1/*Ваш желаемый цвет*/"Подождите пару секунд...");

        if(
    isnull(params))) 

        return 
    SendClientMessage(playerid, -1/*Ваш желаемый цвет*/"Введите /me [Текст]");
        new
            
    do_text[144];

        
    strcat(do_textparams[0]);
        
    strcat(do_text"|");
        
    strcat(do_textPlayerInfo[playerid][pName]/*переменная ника*/);

           
    /*  ProxDetector(15, playerid, do_text, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/); Ваш proxdetector  ВНИМАНИЕотправляйте me_textне params*/

           
    rp_score[playerid] ++;
           
    do_time{playerid} = true/*анти флуд, чтобы не набивали очки*/
            
    SetTimerEx("@__g_command"15*1000false"ii"playerid1);
        return 
    true;
    }
    CMD:test(playerid) return mysql_tquery(m_connect/*переменная подключения*/"SELECT * FROM `accounts/*таблица с аккаунтами*/` `/*имя*/Name` WHERE `RPTop` != '0' ORDER BY `RPTop` DESC LIMIT 10""TopPlayers""i"playerid); 
    В OnPlayerConnect:

    PHP код:
    PlayerInfo/*enum игрока*/[playerid][pRPScore] = 
        
    rp_score[playerid] = 0;
        
    do_time{playerid} =
        
    me_time{playerid} = false
    Ко всем коллбэкам:

    PHP код:
    @__g_command(playeridcommand);
    @
    __g_command(playeridcommand)
    {
        if(!
    commandme_time{playerid} = false;
        else if(
    commanddo_time{playerid} = false;
        return 
    true;
    }

    forward TopPlayers(playerid);
    public 
    TopPlayers(playerid)
    {
        new
            
    rows,
            
    top_string[300];

        
    cache_get_row_count(rows);    
        if(
    rows)
        {
            for(new 
    rrowsr++)
            {
                   
    cache_get_value_name_int(r"RPTop",  g_Score[r]);
                
    cache_get_value_name(r"Name"g_TopName[r], MAX_PLAYER_NAME);
                
                
    format(top_stringsizeof top_string"%s[%s]:\t[%d очков]\n"top_stringg_TopName[r], g_Score[r]);
                
            }
            
    ShowPlayerDialog(playerid9999DIALOG_STYLE_MSGBOX"Топ РП игроков"top_string"Назад""");
        }
        else 
    SendClientMessage(playerid, -1"Нит топов(9");    
        return 
    1;

    В выдачу зарплаты:

    PHP код:
    new
          
    query[90];

            
    #if defined foreach
    foreach(new Player)
    #else
    for(new 0GetPlayerPoolSize(); pi++)
    #endif
            
    {
                
    PlayerInfo/*тут ваше*/[i][pRPScore] += rp_score;
                
    format(querysizeof(query), "UPDATE `accounts/*таблица с акками*/` SET `RPTop` = '%d' WHERE `Name` = '%s'"PlayerInfo/*тут ваше*/[i][pRPScore] , PlayerInfo[i][pName]);
                
    mysql_query(m_connectquery);
    rp_score 0;
        } 
    После авторизации игрока:

    PHP код:
    SetPlayerScore(playeridPlayerInfo/*изменяем*/[playerid][pRPScore]); 
    В базе данных:

    PHP код:
    Создайте таблицу:
    RPTop 



    При размещении на других порталах, указывайте автора - #Djuga
    Последний раз редактировалось #Djuga; 02.03.2018 в 21:09.

  2. #2
    Аватар для Web
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2014
    Сообщений
    67
    Репутация:
    8 ±
    Пережиток прошлого и самп рп. Это не говорит об уровне рп у игрока, вот совсем. Не нужно это в 2018
    Код HTML:
    PlayerInfo/*тут ваше*/[i][pRPScore] += rp_score;
    Так то и PlayerInfo не у всех, у кого то может быть и просто Player. Да и прибавлять через SetPlayerScore не вариант, так как может в моде быть еще и уровень игрока/а то и возраст. И значение будет спустя время довольно большим.
    Последний раз редактировалось Web; 02.03.2018 в 14:48.

  3. #3
    Аватар для #Djuga
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.02.2018
    Сообщений
    11
    Репутация:
    1 ±
    Цитата Сообщение от Web Посмотреть сообщение
    Пережиток прошлого и самп рп. Это не говорит об уровне рп у игрока, вот совсем. Не нужно это в 2018
    Код HTML:
    PlayerInfo/*тут ваше*/[i][pRPScore] += rp_score;
    Так то и PlayerInfo не у всех, у кого то может быть и просто Player. Да и прибавлять через SetPlayerScore не вариант, так как может в моде быть еще и уровень игрока/а то и возраст. И значение будет спустя время довольно большим.
    Ну это уже их дело, добавлять или нет, они могут и в статистику впихнуть.

    Так то и PlayerInfo не у всех
    Я же написал, пусть изменят.

  4. #4
    Аватар для Chaprnks
    Пользователь

    Статус
    Оффлайн
    Регистрация
    27.06.2014
    Сообщений
    0
    Репутация:
    0 ±
    отличная идея! но если кто-то узнает, все, что ему нужно сделать, это спам /me я и получить оценку 9999

  5. #5
    Аватар для Desulaid
    лесоруб продакшен

    Статус
    Оффлайн
    Регистрация
    15.03.2015
    Адрес
    Slobodskoy
    Сообщений
    667
    Репутация:
    236 ±
    Определись со стилем написания переменных: g_do_time, g_Score, g_TopName. Ну не эстетично ж.

  6. #6
    Аватар для Mopok
    Пользователь

    Статус
    Оффлайн
    Регистрация
    28.10.2015
    Сообщений
    37
    Репутация:
    3 ±
    Цитата Сообщение от #Djuga Посмотреть сообщение
    Был на "конкурсе"
    Сорян за немношко оффтопа. А шо за "конукрс", где происходит такое?)

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •