Всем привет.
Был на "конкурсе" с Артёмом (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 код:
CMD:me(playerid, params[])
{
if(me_time{playerid})
return SendClientMessage(playerid, -1/*Ваш желаемый цвет*/, "Подождите пару секунд...");
if(isnull(params))
return SendClientMessage(playerid, -1/*Ваш желаемый цвет*/, "Введите /me [Текст]");
new
me_text[145]; //144 + нулевая ячейка
strcat(me_text, PlayerInfo[playerid][pName]/*переменная ника*/);
strcat(me_text, " ");
strcat(me_text, params[0]);
/* ProxDetector(15, playerid, me_text, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/, -1/*Ваш желаемый цвет*/); Ваш proxdetector ВНИМАНИЕ, отправляйте me_text, не params*/
SetPlayerChatBubble(playerid, params[0], -1/*Ваш желаемый цвет*/, 25.0, 7000); /*тут сделаем текст над головой только params[0]*/
rp_score[playerid] ++;
me_time{playerid} = true; /*анти флуд, чтобы не набивали очки*/
SetTimerEx("@__g_command", 15*1000, false, "ii", playerid, 0);
return true;
}
CMD:do(playerid, params[])
{
if(do_time{playerid})
return SendClientMessage(playerid, -1/*Ваш желаемый цвет*/, "Подождите пару секунд...");
if(isnull(params)))
return SendClientMessage(playerid, -1/*Ваш желаемый цвет*/, "Введите /me [Текст]");
new
do_text[144];
strcat(do_text, params[0]);
strcat(do_text, "|");
strcat(do_text, PlayerInfo[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*1000, false, "ii", playerid, 1);
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(playerid, command);
@__g_command(playerid, command)
{
if(!command) me_time{playerid} = false;
else if(command) do_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 r; r < rows; r++)
{
cache_get_value_name_int(r, "RPTop", g_Score[r]);
cache_get_value_name(r, "Name", g_TopName[r], MAX_PLAYER_NAME);
format(top_string, sizeof top_string, "%s[%s]:\t[%d очков]\n", top_string, g_TopName[r], g_Score[r]);
}
ShowPlayerDialog(playerid, 9999, DIALOG_STYLE_MSGBOX, "Топ РП игроков", top_string, "Назад", "");
}
else SendClientMessage(playerid, -1, "Нит топов(9");
return 1;
}
В выдачу зарплаты:
PHP код:
new
query[90];
#if defined foreach
foreach(new i : Player)
#else
for(new i = 0, p = GetPlayerPoolSize(); i < p; i++)
#endif
{
PlayerInfo/*тут ваше*/[i][pRPScore] += rp_score;
format(query, sizeof(query), "UPDATE `accounts/*таблица с акками*/` SET `RPTop` = '%d' WHERE `Name` = '%s'", PlayerInfo/*тут ваше*/[i][pRPScore] , PlayerInfo[i][pName]);
mysql_query(m_connect, query);
rp_score = 0;
}
После авторизации игрока:
PHP код:
SetPlayerScore(playerid, PlayerInfo/*изменяем*/[playerid][pRPScore]);
В базе данных:
PHP код:
Создайте таблицу:
RPTop
При размещении на других порталах, указывайте автора - #Djuga