Система уровней по фрагам [DM]
Здравствуйте, уважаемые пользователи Pro-Pawn.Ru.
Вкратце расскажу, что здесь есть:
- При достижении определённого количества фрагов вы переходите на новый уровень. [Всего уровней: 28 (в дальнейшнем можете добавить новые уровни)];
- Новый уровень = новый ранг [Рангов столько же, сколько и уровней];
- Ваша статистика видна в текстдраве [Текстдрав один]
Создадим массивы:
- Для подсчёта количества фрагов игрока;
- Количества фрагов нужное для перехода на новый уровень;
- Для создания текстдрава с информацией;
- Названия рангов
Ко всем new:
PHP код:
const
MAX_LEVELS = 28;
new
player_kills[MAX_PLAYERS],
Text: stats_TD[MAX_PLAYERS];
static const
level_kills[MAX_LEVELS] =
{
50, 120, 170, 245, 350, 480, 720, 1050, 1450, 2600, 4400, 5200, 6100, 7350, 8100, 9350,
10000, 11300, 12100, 13450, 14150, 14900, 15250, 16200, 16900, 17300, 18100, 18900, 25000
},
rank_names[MAX_LEVELS + 1][14] =
{
"Newcomer", "Advanced", "Killer", "Master", "Professional", "Elite", "Commander",
"Warmonger", "Perfectionist", "Invincible", "Hero", "Almighty", "Bonecrusher", "Cruel",
"Sergeant", "Colonel", "Proof", "Supernatural", "Bloodsucker", "Predator", "Chastener",
"Tamer", "Incredible", "Fiend", "Dominator", "Perpetrator", "Ruthless", "Destroyer", "-/-"
};
Теперь создадим функцию, которая будет выводить на текстдрав статистику игрока.
В конец мода:
PHP код:
stock UpdateStats(const playerid)
{
new
level = 28;
switch(player_kills[playerid])
{
case 0..49:
level = 0;
case 50..119:
level = 1;
case 120..169:
level = 2;
case 170..244:
level = 3;
case 245..349:
level = 4;
case 350..479:
level = 5;
case 480..719:
level = 6;
case 720..1049:
level = 7;
case 1050..1449:
level = 8;
case 1450..2599:
level = 9;
case 2600..4399:
level = 10;
case 4400..5199:
level = 11;
case 5200..6099:
level = 12;
case 6100..7349:
level = 13;
case 7350..8099:
level = 14;
case 8100..9349:
level = 15;
case 9350..9999:
level = 16;
case 10000..11299:
level = 17;
case 11300..12099:
level = 18;
case 12100..13449:
level = 19;
case 13450..14149:
level = 20;
case 14150..14899:
level = 21;
case 14900..15249:
level = 22;
case 15250..16199:
level = 23;
case 16200..16899:
level = 24;
case 16900..17299:
level = 25;
case 17300..18099:
level = 26;
case 18100..18899:
level = 27;
}
SetPVarInt(playerid, "Level", level);
new
str[65];
format(str, 65, "Kills: %i / %i~n~Level: %i / %i~n~Rank: %s", player_kills[playerid], level_kills[level], level, MAX_LEVELS, rank_names[level]);
TextDrawSetString(stats_TD[playerid], str);
}
Создадим текстдрав, где будет показана информация о статистики игрока:
В public OnPlayerConnect:
PHP код:
stats_TD[playerid] = TextDrawCreate(497.000000, 99.000000, "_");
TextDrawBackgroundColor(stats_TD[playerid], 255);
TextDrawFont(stats_TD[playerid], 2);
TextDrawLetterSize(stats_TD[playerid], 0.270000, 1.100000);
TextDrawColor(stats_TD[playerid], 0xAAAADDFF);
TextDrawSetOutline(stats_TD[playerid], 1);
TextDrawSetProportional(stats_TD[playerid], 1);
TextDrawShowForPlayer(playerid, stats_TD[playerid]);
Для дальнейшей работы с файлами создайте папку с названием stats_TD в папке scriptfiles.
Создадим аккаунт статистики игрока, где будет храниться количество фрагов игрока:
В public OnPlayerDisconnect:
PHP код:
static const
prefix[] = "stats_TD/",
postfix[] = ".ini";
new
str[(sizeof(prefix) - 1) + MAX_PLAYER_NAME + (sizeof(postfix) - 1) + 1];
GetPlayerName(playerid, str, sizeof(str));
strins(str, prefix, 0), strcat(str, postfix);
new
File: file = fopen(str, io_write);
if(file != File: 0)
{
valstr(str, player_kills[playerid]);
fwrite(file, str);
fclose(file);
}
TextDrawDestroy(stats_TD[playerid]);
Сохранение количества фрагов игрока готово. Добавим загрузку количества фрагов игрока:
Добавляем после того, как игрок зашёл в аккаунт:
PHP код:
static const
prefix[] = "stats_TD/",
postfix[] = ".ini";
new
str[(sizeof(prefix) - 1) + MAX_PLAYER_NAME + (sizeof(postfix) - 1) + 1];
GetPlayerName(playerid, str, sizeof(str));
strins(str, prefix, 0), strcat(str, postfix);
new
File: file = fopen(str, io_read);
if(file != File: 0)
{
fread(file, str);
player_kills[playerid] = strval(str);
SetPlayerScore(playerid, player_kills[playerid]);
fclose(file);
}
Загрузка количества фрагов игрока из файла готова.
Теперь покажем игроку статистику, добавляем после того, как игрок зарегистрировался / вошёл в аккаунт:
PHP код:
UpdateStats(playerid);
Добавляем в public OnPlayerDeath:
PHP код:
SetPlayerScore(killerid, ++player_kills[killerid]);
UpdateStats(killerid);
Добавляем в public OnPlayerClickPlayer, чтобы узнать статистику другого игрока, кликнув его в TAB:
PHP код:
static const
fmt_str1[] = "Статистика игрока %s (%i)",
fmt_str2[] = "\
{00CC00}[Уровень: {FF0000}%i / %i{00CC00}]\n\
{00CC00}[Убийства: {FF0000}%i / %i{00CC00}]\n\
{00CC00}[Ранг: {FF0000}%s{00CC00}]";
new
str[sizeof(fmt_str1) - 2 + MAX_PLAYER_NAME - 2 + 4],
str2[sizeof(fmt_str2) - 2 + 2 - 2 + 2 - 2 + 11 - 2 + 11 - 2 + sizeof(RankNames[])],
level = GetPVarInt(clickedplayerid, "Level");
GetPlayerName(clickedplayerid, str, sizeof(str));
format(str, sizeof(str), fmt_str1, str, clickedplayerid);
format(str2, sizeof(str2), fmt_str2, level, MAX_LEVELS, player_kills[clickedplayerid], level_kills[level], rank_names[level]);
ShowPlayerDialog(playerid, 2048, DIALOG_STYLE_MSGBOX, str, str2, "Закрыть", "");
Это будет выглядить вот так:
Скриншот
Скриншоты текстдрава
Автор: Londlem
Специально для: Pro-Pawn.Ru
Копирование данной статьи без разрешения автора запрещено!