Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система рейтинга | Grand RP

Long-

Мастер
Всем привет.​
Был на "конкурсе", делал систему рейтинга копию Гранда, в итог оказалось не нужно :), но уже сделал, выложу, может кому пригодится.​

Особенности:
  • MySQL R39-x
  • Процессор DC_CMD
  • Почти независимая

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

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

Приступим,


Ко всем глобальным переменным:​

PHP:
new
    gRatingPlayerTop[10],
    gNamePlayerTop[10][MAX_PLAYER_NAME],
    gTempRating[MAX_PLAYERS];
В OnGameModeInit:​

PHP:
SetTimer("@__PayDay",1000 * 60,1);
Сами коллбэки и функции:​

PHP:
@__PayDay();
@__PayDay()
{
	new
	    minute;
	gettime(_, minute, _);
	if(minute == 0)
	    PayDay();
}
PHP:
stock PayDay()
{
    new
           str_fmt[160];

	#if defined foreach
		foreach(new i : Player)
	#else
		for(new i = GetPlayerPoolSize(); i != -1; --i)
		{
			if(IsPlayerConnected(i))
	#endif
	{
		SetPlayerScore(i, gTempRating[i]);

        GetPlayerName(playerid, str_fmt, MAX_PLAYER_NAME);
           
        format(str_fmt, sizeof str_fmt, "UPDATE `accounts` SET `rating` = '%d' WHERE `name` = '%s'", gTempRating[i], str_fmt);
        mysql_function_query(connect, str_fmt ,false, "");

        gTempRating[i] = 0;
	}
	#if !defined foreach
		}
	#endif
}
В любые команды которые хотите чтобы зачислялось +1 очко:​

PHP:
gTempRating[playerid]++;
В OnPlayerDisconnect:​

PHP:
gTempRating[playerid] = 0;
Сама команда открытия, и коллбэк сортировки:​

PHP:
CMD:topplayer(playerid)
    return mysql_function_query(connect,"SELECT `name`, `rating` FROM `accounts` ORDER BY `rating` DESC LIMIT 10",true, "OnTopAccountsResponse","d", playerid);

forward OnTopAccountsResponse(playerid);
public OnTopAccountsResponse(playerid)
{
	new
	    rows = cache_get_row_count(connect);

    if(rows)
	{
	    for(new i, str_fmt[250]; i < rows; i++)
	    {
	        gRatingPlayerTop[i] = cache_get_field_content_int(i, "rating", connect);
			cache_get_field_content(i, "name", gNamePlayerTop[i], connect, 30);
			
			format(str_fmt, sizeof str_fmt, "%s%s - %d\n",str_fmt, gNamePlayerTop[i], gRatingPlayerTop[i]);
			
	    }
	    ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Рейтинг", str_fmt, "Ок", "Выход");
	}
		
	return 1;
}
Ну вот и все, если есть более оптимизированный вариант, или нашли ошибку/недоработку напишите в комменты.​
 
Последнее редактирование:
Сверху Снизу