Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

RANK 3.0

, Помогите довести до ума!
Статус пользователя IAMHARD
сообщение 13.8.2015, 19:30
Сообщение #1
Стаж: 11 лет

Сообщений: 194
Благодарностей: 57
Полезность: 234

Нашел тут замечательный плагин статистики, который выводит в топ по kills / deaths = place
Немного доработал его, чтоб в статистику записывались только Steam игроки.
Но не могу найти нормальную проверку на валидность стима, поэтому "полукровки" типа таких "VALVE_0:0:51786099 "ROMAHbl[4]_U$ER" 1 1" с 9-ю и меньше знаками после VALVE попадают топ.

Еще хочу в стату добавить запись Хедшотов, и чтоб стата рассчитывалась по формуле float ( kills / deaths * headshots)
А в сам топ15 шла инфа по типу:
# | nick | kills | deaths | headshots | k/d ratio | hs % - float(headshots / kills * 100)

ну это в идеале вообще =))
Сам я не особо шарю, но че то понимаю маленько, конечно же я не прошу вас за меня все написать, и подать все на блюдечке, хотябы подскажите, где почитать че можно или совет какой дайте))
Очень хочется именно такую стату себе на серв.
Вот код:
Код:

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

#define HTML_IN_MOTD
#define SAVE_RANKS_AFTER_SORT
#define SORT_INTERVAL 3.0

enum RankData
{
Data_SteamID[32],
Data_Name[32],
Data_Kills,
Data_Deaths
};

new g_File[64];
new Array:g_SteamID;
new Trie:g_Name, Trie:g_Kills, Trie:g_Deaths;
new g_Top15[2048];
new bool:g_Sort = true;
new g_Data[33][RankData], bool:g_Authorized[33];

public plugin_init()
{
register_plugin("Rank", "3.0", "hleV");
RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 );

get_datadir(g_File, 63);
add(g_File, 63, "/ranks.ini");

g_SteamID = ArrayCreate(32, 1);
g_Name = TrieCreate();
g_Kills = TrieCreate();
g_Deaths = TrieCreate();

LoadRanks();
ArraySort(g_SteamID, "SortRanks");
WriteTop15();

set_task(SORT_INTERVAL, "SortTask", _, _, _, "b");

register_clcmd("say /rank", "SayRank");
register_clcmd("say /top", "SayTop15");
register_clcmd("say /top15", "SayTop15");

register_event("DeathMsg", "DeathMsg", "a");
}

public plugin_end()
{
ArraySort(g_SteamID, "SortRanks");
SaveRanks();

ArrayDestroy(g_SteamID);
}

public client_putinserver(Client)
{
get_user_authid(Client, g_Data[Client][Data_SteamID], 31);

if (!str_to_num(g_Data[Client][Data_SteamID][10]) || strlen(g_Data[Client][Data_SteamID]) > 18)
return;

get_user_name(Client, g_Data[Client][Data_Name], 31);

if (!TrieKeyExists(g_Name, g_Data[Client][Data_SteamID]))
AddRank(Client);
else
LoadData(Client);

UpdateRank(Client, true);

g_Authorized[Client] = true;
}

public client_disconnect(Client)
g_Authorized[Client] = false;

public client_infochanged(Client)
{
if (!g_Authorized[Client])
return;

static Name[32];
get_user_info(Client, "name", Name, 31);

if (equal(Name, g_Data[Client][Data_Name]))
return;

copy(g_Data[Client][Data_Name], 31, Name);
UpdateRank(Client, true);
}

public FwdPlayerSpawnPost( Client )
{
get_user_authid(Client, g_Data[Client][Data_SteamID], 31);

if (!str_to_num(g_Data[Client][Data_SteamID][10]) || strlen(g_Data[Client][Data_SteamID]) > 18)
return;

if( is_user_alive( Client ) )
{
set_task(0.1, "SayRank", Client)
}
}

public SayRank(Client)
{
get_user_authid(Client, g_Data[Client][Data_SteamID], 31);

if (!str_to_num(g_Data[Client][Data_SteamID][10]) || strlen(g_Data[Client][Data_SteamID]) > 18)
{
client_print(Client,print_chat, "Stats only for STEAM players!");
return;
}


new Position = GetPosition(Client);

if (!g_Authorized[Client] || !Position)
{
client_print(Client, print_chat, "* You are not ranked.");

return;
}

client_print
(
Client,
print_chat,
"* Your rank is %d of %d with %d kills and %d deaths.",
Position,
ArraySize(g_SteamID),
g_Data[Client][Data_Kills],
g_Data[Client][Data_Deaths]
);
}

public SayTop15(Client)
show_motd(Client, g_Top15, "Top 15");

public DeathMsg()
{
new Killer = read_data(1);
new Victim = read_data(2);

if (g_Authorized[Victim])
{
g_Data[Victim][Data_Deaths]++;
g_Sort = true;

UpdateRank(Victim, false);
}

if (g_Authorized[Killer] && Killer != Victim)
{
g_Data[Killer][Data_Kills]++;
g_Sort = true;

UpdateRank(Killer, false);
}
}

public SortTask()
{
if (!g_Sort)
return;

ArraySort(g_SteamID, "SortRanks");
WriteTop15();

#if defined SAVE_RANKS_AFTER_SORT
SaveRanks();
#endif
}

public SortRanks(Array:SteamID, Position1, Position2)
{
static SteamID1[32];
ArrayGetString(SteamID, Position1, SteamID1, 31);

static SteamID2[32];
ArrayGetString(SteamID, Position2, SteamID2, 31);

static Kills1;
TrieGetCell(g_Kills, SteamID1, Kills1);

static Kills2;
TrieGetCell(g_Kills, SteamID2, Kills2);

static Deaths1;
TrieGetCell(g_Deaths, SteamID1, Deaths1);

static Deaths2;
TrieGetCell(g_Deaths, SteamID2, Deaths2);

if (Kills1 - Deaths1 < Kills2 - Deaths2)
return 1;
else if (Kills1 - Deaths1 > Kills2 - Deaths2)
return -1;

return 0;
}

LoadRanks()
{
new File = fopen(g_File, "r");

if (!File)
return;

new Data[96], SteamID[32], Name[32], Kills[16], Deaths[16];

while (!feof(File))
{
fgets(File, Data, 96);

if (!strlen(Data))
continue;

parse(Data, SteamID, 31, Name, 31, Kills, 15, Deaths, 15);

ArrayPushString(g_SteamID, SteamID);
TrieSetString(g_Name, SteamID, Name);
TrieSetCell(g_Kills, SteamID, str_to_num(Kills));
TrieSetCell(g_Deaths, SteamID, str_to_num(Deaths));
}

fclose(File);
}

SaveRanks()
{
new File = fopen(g_File, "w+");

if (!File)
return;

for (new Position, Size = ArraySize(g_SteamID), SteamID[32], Name[32], Kills, Deaths; Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);
TrieGetString(g_Name, SteamID, Name, 31);
TrieGetCell(g_Kills, SteamID, Kills);
TrieGetCell(g_Deaths, SteamID, Deaths);

fprintf(File, "%s ^"%s^" %d %d^n", SteamID, Name, Kills, Deaths);
}

fclose(File);
}

AddRank(Client)
{
g_Data[Client][Data_Kills] = 0;
g_Data[Client][Data_Deaths] = 0;

ArrayPushString(g_SteamID, g_Data[Client][Data_SteamID]);
TrieSetString(g_Name, g_Data[Client][Data_SteamID], g_Data[Client][Data_Name]);
}

LoadData(Client)
{
TrieGetCell(g_Kills, g_Data[Client][Data_SteamID], g_Data[Client][Data_Kills]);
TrieGetCell(g_Deaths, g_Data[Client][Data_SteamID], g_Data[Client][Data_Deaths]);
}

UpdateRank(Client, bool:Name)
{
if (Name)
TrieSetString(g_Name, g_Data[Client][Data_SteamID], g_Data[Client][Data_Name]);

TrieSetCell(g_Kills, g_Data[Client][Data_SteamID], g_Data[Client][Data_Kills]);
TrieSetCell(g_Deaths, g_Data[Client][Data_SteamID], g_Data[Client][Data_Deaths]);
}

GetPosition(Client)
{
static Position, Size, SteamID[32];

for (Position = 0, Size = ArraySize(g_SteamID); Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);

if (equal(SteamID, g_Data[Client][Data_SteamID]))
return Position + 1;
}

return 0;
}

WriteTop15()
{
#if defined HTML_IN_MOTD
static const Header[] = "<body bgcolor=#000000><font color=#87cefa><pre>%5s %22s %5s %5s^n^n";
static const Buffer[] = "%4d %22s %5d %6d^n";
#else
static const Header[] = "%5s %22s %5s %5s^n^n";
static const Buffer[] = "%5d %22s %5d %5d^n";
#endif

static Length, Position, Size, SteamID[32], Name[32], Kills, Deaths;
Length = formatex(g_Top15[Length], 2047 - Length, Header, "Rank", "Name", "Kills", "Deaths");

for (Position = 0, Size = min(ArraySize(g_SteamID), 15); Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);
TrieGetString(g_Name, SteamID, Name, 31);
TrieGetCell(g_Kills, SteamID, Kills);
TrieGetCell(g_Deaths, SteamID, Deaths);

Length += formatex(g_Top15[Length], 2047 - Length, Buffer, Position + 1, Name, Kills, Deaths);
}
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Immunity
сообщение 13.8.2015, 19:39
Сообщение #2
Стаж: 11 лет

Сообщений: 444
Благодарностей: 119
Полезность: 139

Возьми стим проверку с плагина steambonus.
Вот сама проверка. мб поможет :)
Код:
stock bool:is_user_steam(id)
{
static dp_pointer;

if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false;
}

new szAuthid[34];
get_user_authid(id, szAuthid, charsmax(szAuthid));

return (containi(szAuthid, "LAN") < 0);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя IAMHARD
сообщение 13.8.2015, 19:56
Сообщение #3
Стаж: 11 лет

Сообщений: 194
Благодарностей: 57
Полезность: 234

Я как понимаю, если у меня дпрото раздает всем невалидным VALVE_****, то мне достаточно использовать только is_user_steam(id)

Отредактировал: Bloo, - 14.8.2015, 21:28
Причина: Выдано устное предупреждение!
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Immunity
сообщение 13.8.2015, 20:00
Сообщение #4
Стаж: 11 лет

Сообщений: 444
Благодарностей: 119
Полезность: 139

Цитата(IAMHARD @ 13.8.2015, 20:52) *
Я как понимаю, если у меня дпрото раздает всем невалидным VALVE_****, то мне достаточно использовать только is_user_steam(id)

Весь сток в самый низ впиши, а выше можешь использовать is_user_steam

Отредактировал: Immunity, - 13.8.2015, 20:01
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя IAMHARD
сообщение 13.8.2015, 21:54
Сообщение #5
Стаж: 11 лет

Сообщений: 194
Благодарностей: 57
Полезность: 234

Цитата(Immunity @ 13.8.2015, 20:55) *
Весь сток в самый низ впиши, а выше можешь использовать is_user_steam

Вообщем сделал так, как ты написал, все работает как часики, только почему то мой BOT который висит в спектрах пролез в статистику, да это не важно вообще, важно что онли стим в ней!!!
Спасибо большое!
Щас буду шаманить с хедшотами, не знаю че из этого выйдет)))

Вот код если кому надо:
Код:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

#define HTML_IN_MOTD
#define SAVE_RANKS_AFTER_SORT
#define SORT_INTERVAL 3.0

enum RankData
{
Data_SteamID[32],
Data_Name[32],
Data_Kills,
Data_Deaths
};

new g_File[64];
new Array:g_SteamID;
new Trie:g_Name, Trie:g_Kills, Trie:g_Deaths;
new g_Top15[2048];
new bool:g_Sort = true;
new g_Data[33][RankData], bool:g_Authorized[33];

public plugin_init()
{
register_plugin("Rank", "3.0", "hleV");
RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 );

get_datadir(g_File, 63);
add(g_File, 63, "/ranks.ini");

g_SteamID = ArrayCreate(32, 1);
g_Name = TrieCreate();
g_Kills = TrieCreate();
g_Deaths = TrieCreate();

LoadRanks();
ArraySort(g_SteamID, "SortRanks");
WriteTop15();

set_task(SORT_INTERVAL, "SortTask", _, _, _, "b");

register_clcmd("say /rank", "SayRank");
register_clcmd("say /top", "SayTop15");
register_clcmd("say /top15", "SayTop15");

register_event("DeathMsg", "DeathMsg", "a");
}

public plugin_end()
{
ArraySort(g_SteamID, "SortRanks");
SaveRanks();

ArrayDestroy(g_SteamID);
}

public client_putinserver(Client)
{
if(!is_user_steam(Client))
return;

get_user_authid(Client, g_Data[Client][Data_SteamID], 31);
get_user_name(Client, g_Data[Client][Data_Name], 31);

if (!TrieKeyExists(g_Name, g_Data[Client][Data_SteamID]))
AddRank(Client);
else
LoadData(Client);

UpdateRank(Client, true);

g_Authorized[Client] = true;
}

public client_disconnect(Client)
g_Authorized[Client] = false;

public client_infochanged(Client)
{
if (!g_Authorized[Client])
return;

static Name[32];
get_user_info(Client, "name", Name, 31);

if (equal(Name, g_Data[Client][Data_Name]))
return;

copy(g_Data[Client][Data_Name], 31, Name);
UpdateRank(Client, true);
}

public FwdPlayerSpawnPost( Client )
{
if(!is_user_steam(Client))
return;

if( is_user_alive( Client ) )
{
set_task(0.1, "SayRank", Client)
}
}

public SayRank(Client)
{
if(!is_user_steam(Client))
{
client_print(Client,print_chat, "Stats only for STEAM players!");
return;
}


new Position = GetPosition(Client);

if (!g_Authorized[Client] || !Position)
{
client_print(Client, print_chat, "* You are not ranked.");

return;
}

client_print
(
Client,
print_chat,
"* Your rank is %d of %d with %d kills and %d deaths.",
Position,
ArraySize(g_SteamID),
g_Data[Client][Data_Kills],
g_Data[Client][Data_Deaths]
);
}

public SayTop15(Client)
show_motd(Client, g_Top15, "Top 15");

public DeathMsg()
{
new Killer = read_data(1);
new Victim = read_data(2);

if (g_Authorized[Victim])
{
g_Data[Victim][Data_Deaths]++;
g_Sort = true;

UpdateRank(Victim, false);
}

if (g_Authorized[Killer] && Killer != Victim)
{
g_Data[Killer][Data_Kills]++;
g_Sort = true;

UpdateRank(Killer, false);
}
}

public SortTask()
{
if (!g_Sort)
return;

ArraySort(g_SteamID, "SortRanks");
WriteTop15();

#if defined SAVE_RANKS_AFTER_SORT
SaveRanks();
#endif
}

public SortRanks(Array:SteamID, Position1, Position2)
{
static SteamID1[32];
ArrayGetString(SteamID, Position1, SteamID1, 31);

static SteamID2[32];
ArrayGetString(SteamID, Position2, SteamID2, 31);

static Kills1;
TrieGetCell(g_Kills, SteamID1, Kills1);

static Kills2;
TrieGetCell(g_Kills, SteamID2, Kills2);

static Deaths1;
TrieGetCell(g_Deaths, SteamID1, Deaths1);

static Deaths2;
TrieGetCell(g_Deaths, SteamID2, Deaths2);

if (Kills1 - Deaths1 < Kills2 - Deaths2)
return 1;
else if (Kills1 - Deaths1 > Kills2 - Deaths2)
return -1;

return 0;
}

LoadRanks()
{
new File = fopen(g_File, "r");

if (!File)
return;

new Data[96], SteamID[32], Name[32], Kills[16], Deaths[16];

while (!feof(File))
{
fgets(File, Data, 96);

if (!strlen(Data))
continue;

parse(Data, SteamID, 31, Name, 31, Kills, 15, Deaths, 15);

ArrayPushString(g_SteamID, SteamID);
TrieSetString(g_Name, SteamID, Name);
TrieSetCell(g_Kills, SteamID, str_to_num(Kills));
TrieSetCell(g_Deaths, SteamID, str_to_num(Deaths));
}

fclose(File);
}

SaveRanks()
{
new File = fopen(g_File, "w+");

if (!File)
return;

for (new Position, Size = ArraySize(g_SteamID), SteamID[32], Name[32], Kills, Deaths; Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);
TrieGetString(g_Name, SteamID, Name, 31);
TrieGetCell(g_Kills, SteamID, Kills);
TrieGetCell(g_Deaths, SteamID, Deaths);

fprintf(File, "%s ^"%s^" %d %d^n", SteamID, Name, Kills, Deaths);
}

fclose(File);
}

AddRank(Client)
{
g_Data[Client][Data_Kills] = 0;
g_Data[Client][Data_Deaths] = 0;

ArrayPushString(g_SteamID, g_Data[Client][Data_SteamID]);
TrieSetString(g_Name, g_Data[Client][Data_SteamID], g_Data[Client][Data_Name]);
}

LoadData(Client)
{
TrieGetCell(g_Kills, g_Data[Client][Data_SteamID], g_Data[Client][Data_Kills]);
TrieGetCell(g_Deaths, g_Data[Client][Data_SteamID], g_Data[Client][Data_Deaths]);
}

UpdateRank(Client, bool:Name)
{
if (Name)
TrieSetString(g_Name, g_Data[Client][Data_SteamID], g_Data[Client][Data_Name]);

TrieSetCell(g_Kills, g_Data[Client][Data_SteamID], g_Data[Client][Data_Kills]);
TrieSetCell(g_Deaths, g_Data[Client][Data_SteamID], g_Data[Client][Data_Deaths]);
}

GetPosition(Client)
{
static Position, Size, SteamID[32];

for (Position = 0, Size = ArraySize(g_SteamID); Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);

if (equal(SteamID, g_Data[Client][Data_SteamID]))
return Position + 1;
}

return 0;
}

WriteTop15()
{
#if defined HTML_IN_MOTD
static const Header[] = "<body bgcolor=#000000><font color=#87cefa><pre>%5s %22s %5s %5s^n^n";
static const Buffer[] = "%4d %22s %5d %6d^n";
#else
static const Header[] = "%5s %22s %5s %5s^n^n";
static const Buffer[] = "%5d %22s %5d %5d^n";
#endif

static Length, Position, Size, SteamID[32], Name[32], Kills, Deaths;
Length = formatex(g_Top15[Length], 2047 - Length, Header, "Rank", "Name", "Kills", "Deaths");

for (Position = 0, Size = min(ArraySize(g_SteamID), 15); Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);
TrieGetString(g_Name, SteamID, Name, 31);
TrieGetCell(g_Kills, SteamID, Kills);
TrieGetCell(g_Deaths, SteamID, Deaths);

Length += formatex(g_Top15[Length], 2047 - Length, Buffer, Position + 1, Name, Kills, Deaths);
}
}

stock bool:is_user_steam(Client)
{
static dp_pointer;

if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", Client);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false;
}

new szAuthid[34];
get_user_authid(Client, szAuthid, charsmax(szAuthid));

return (containi(szAuthid, "LAN") < 0);
}


Отредактировал: IAMHARD, - 13.8.2015, 21:54
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Immunity
сообщение 13.8.2015, 23:16
Сообщение #6
Стаж: 11 лет

Сообщений: 444
Благодарностей: 119
Полезность: 139

Запили ещё проверку на ботов. Только я не помню как уже...

http://amxxmodx.ru/core/amxmodxinc/62-is_u...to-ili-bot.html (No advertising)

Отредактировал: Immunity, - 13.8.2015, 23:24
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя IAMHARD
сообщение 14.8.2015, 21:13
Сообщение #7
Стаж: 11 лет

Сообщений: 194
Благодарностей: 57
Полезность: 234

Пытался своими корявенькими ручонками добавить в статистику Хедшоты ubeysya.gif
Естественно у меня ниче не работает dntknw.gif

Сам файл статистики rank.ini создется, в него записываются стим+ник игроков, но не записывается kills deaths hs
И окно MOTD top15 не открывается по команде.

Помогите пожалуйста инвалиду)))
Рабочий код выше, если что)

Код:
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>

#define HTML_IN_MOTD
#define SAVE_RANKS_AFTER_SORT
#define SORT_INTERVAL 3.0

enum RankData
{
Data_SteamID[32],
Data_Name[32],
Data_Kills,
Data_Deaths,
Data_HS
};

new g_File[80];
new Array:g_SteamID;
new Trie:g_Name, Trie:g_Kills, Trie:g_Deaths, Trie:g_HS;
new g_Top15[2048];
new bool:g_Sort = true;
new g_Data[33][RankData], bool:g_Authorized[33];

public plugin_init()
{
register_plugin("Rank", "3.0", "hleV");
RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawnPost", 1 );

get_datadir(g_File, 79);
add(g_File, 79, "/ranks.ini");

g_SteamID = ArrayCreate(32, 1);
g_Name = TrieCreate();
g_Kills = TrieCreate();
g_Deaths = TrieCreate();
g_HS = TrieCreate();

LoadRanks();
ArraySort(g_SteamID, "SortRanks");
WriteTop15();

set_task(SORT_INTERVAL, "SortTask", _, _, _, "b");

register_clcmd("say /rank", "SayRank");
register_clcmd("say /top", "SayTop15");
register_clcmd("say /top15", "SayTop15");

register_event("DeathMsg", "DeathMsg", "a");
}

public plugin_end()
{
ArraySort(g_SteamID, "SortRanks");
SaveRanks();

ArrayDestroy(g_SteamID);
}

public client_putinserver(Client)
{
if(!is_user_steam(Client))
return;

get_user_authid(Client, g_Data[Client][Data_SteamID], 31);
get_user_name(Client, g_Data[Client][Data_Name], 31);

if (!TrieKeyExists(g_Name, g_Data[Client][Data_SteamID]))
AddRank(Client);
else
LoadData(Client);

UpdateRank(Client, true);

g_Authorized[Client] = true;
}

public client_disconnect(Client)
g_Authorized[Client] = false;

public client_infochanged(Client)
{
if (!g_Authorized[Client])
return;

static Name[32];
get_user_info(Client, "name", Name, 31);

if (equal(Name, g_Data[Client][Data_Name]))
return;

copy(g_Data[Client][Data_Name], 31, Name);
UpdateRank(Client, true);
}

public FwdPlayerSpawnPost( Client )
{
if(!is_user_steam(Client))
return;

if( is_user_alive( Client ) )
{
set_task(0.1, "SayRank", Client)
}
}

public SayRank(Client)
{
if(!is_user_steam(Client))
{
client_print(Client,print_chat, "Stats only for STEAM players!");
return;
}


new Position = GetPosition(Client);

if (!g_Authorized[Client] || !Position)
{
client_print(Client, print_chat, "* You are not ranked.");

return;
}

client_print
(
Client,
print_chat,
"* Your rank is %d of %d with %d kills, %d deaths, %d HeadShots.",
Position,
ArraySize(g_SteamID),
g_Data[Client][Data_Kills],
g_Data[Client][Data_Deaths],
g_Data[Client][Data_HS]
);
}

public SayTop15(Client)
show_motd(Client, g_Top15, "Top 15");

public DeathMsg()
{
new Killer = read_data(1);
new Victim = read_data(2);
new HS = read_data(3);

if (g_Authorized[Victim])
{
g_Data[Victim][Data_Deaths]++;
g_Sort = true;

UpdateRank(Victim, false);
}

if (g_Authorized[Killer] && Killer != Victim)
{
g_Data[Killer][Data_Kills]++;
g_Data[HS][Data_HS]++;
g_Sort = true;

UpdateRank(Killer, false);
}
}

public SortTask()
{
if (!g_Sort)
return;

ArraySort(g_SteamID, "SortRanks");
WriteTop15();

#if defined SAVE_RANKS_AFTER_SORT
SaveRanks();
#endif
}

public SortRanks(Array:SteamID, Position1, Position2)
{
static SteamID1[32];
ArrayGetString(SteamID, Position1, SteamID1, 31);

static SteamID2[32];
ArrayGetString(SteamID, Position2, SteamID2, 31);

static Kills1;
TrieGetCell(g_Kills, SteamID1, Kills1);

static Kills2;
TrieGetCell(g_Kills, SteamID2, Kills2);

static Deaths1;
TrieGetCell(g_Deaths, SteamID1, Deaths1);

static Deaths2;
TrieGetCell(g_Deaths, SteamID2, Deaths2);

static HS1;
TrieGetCell(g_HS, SteamID1, HS1);

static HS2;
TrieGetCell(g_HS, SteamID2, HS2);

if (Kills1 - Deaths1 + HS1 < Kills2 - Deaths2 + HS2)
return 1;
else if (Kills1 - Deaths1 + HS1 > Kills2 - Deaths2 + HS2)
return -1;

return 0;
}

LoadRanks()
{
new File = fopen(g_File, "r");

if (!File)
return;

new Data[112], SteamID[32], Name[32], Kills[16], Deaths[16], HS[16];

while (!feof(File))
{
fgets(File, Data, 112);

if (!strlen(Data))
continue;

parse(Data, SteamID, 31, Name, 31, Kills, 15, Deaths, 15, HS, 15);

ArrayPushString(g_SteamID, SteamID);
TrieSetString(g_Name, SteamID, Name);
TrieSetCell(g_Kills, SteamID, str_to_num(Kills));
TrieSetCell(g_Deaths, SteamID, str_to_num(Deaths));
TrieSetCell(g_HS, SteamID, str_to_num(HS));
}

fclose(File);
}

SaveRanks()
{
new File = fopen(g_File, "w+");

if (!File)
return;

for (new Position, Size = ArraySize(g_SteamID), SteamID[32], Name[32], Kills, Deaths, HS; Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);
TrieGetString(g_Name, SteamID, Name, 31);
TrieGetCell(g_Kills, SteamID, Kills);
TrieGetCell(g_Deaths, SteamID, Deaths);
TrieGetCell(g_HS, SteamID, HS);

fprintf(File, "%s ^"%s^" %d %d %d^n", SteamID, Name, Kills, Deaths, HS);
}

fclose(File);
}

AddRank(Client)
{
g_Data[Client][Data_Kills] = 0;
g_Data[Client][Data_Deaths] = 0;
g_Data[Client][Data_HS] = 0;

ArrayPushString(g_SteamID, g_Data[Client][Data_SteamID]);
TrieSetString(g_Name, g_Data[Client][Data_SteamID], g_Data[Client][Data_Name]);
}

LoadData(Client)
{
TrieGetCell(g_Kills, g_Data[Client][Data_SteamID], g_Data[Client][Data_Kills]);
TrieGetCell(g_Deaths, g_Data[Client][Data_SteamID], g_Data[Client][Data_Deaths]);
TrieGetCell(g_HS, g_Data[Client][Data_SteamID], g_Data[Client][Data_HS]);
}

UpdateRank(Client, bool:Name)
{
if (Name)
TrieSetString(g_Name, g_Data[Client][Data_SteamID], g_Data[Client][Data_Name]);

TrieSetCell(g_Kills, g_Data[Client][Data_SteamID], g_Data[Client][Data_Kills]);
TrieSetCell(g_Deaths, g_Data[Client][Data_SteamID], g_Data[Client][Data_Deaths]);
TrieSetCell(g_HS, g_Data[Client][Data_SteamID], g_Data[Client][Data_HS]);
}

GetPosition(Client)
{
static Position, Size, SteamID[32];

for (Position = 0, Size = ArraySize(g_SteamID); Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);

if (equal(SteamID, g_Data[Client][Data_SteamID]))
return Position + 1;
}

return 0;
}

WriteTop15()
{
#if defined HTML_IN_MOTD
static const Header[] = "<body bgcolor=#000000><font color=#87cefa><pre>%5s %30s %5s %5s %s^n^n";
static const Buffer[] = "%5d %30s %5d %5d %5d^n";
#else
static const Header[] = "%5s %22s %5s %5s^n^n";
static const Buffer[] = "%5d %22s %5d %5d^n";
#endif

static Length, Position, Size, SteamID[32], Name[32], Kills, Deaths, HS;
Length = formatex(g_Top15[Length], 2047 - Length, Header, "Rank", "Name", "Kills", "Deaths, HS");

for (Position = 0, Size = min(ArraySize(g_SteamID), 20); Position < Size; Position++)
{
ArrayGetString(g_SteamID, Position, SteamID, 31);
TrieGetString(g_Name, SteamID, Name, 31);
TrieGetCell(g_Kills, SteamID, Kills);
TrieGetCell(g_Deaths, SteamID, Deaths);
TrieGetCell(g_HS, SteamID, HS);

Length += formatex(g_Top15[Length], 2047 - Length, Buffer, Position + 1, Name, Kills, Deaths, HS);
}
}

stock bool:is_user_steam(Client)
{
static dp_pointer;

if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", Client);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false;
}

new szAuthid[34];
get_user_authid(Client, szAuthid, charsmax(szAuthid));

return (containi(szAuthid, "LAN") < 0);
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя IAMHARD
сообщение 15.8.2015, 17:51
Сообщение #8
Стаж: 11 лет

Сообщений: 194
Благодарностей: 57
Полезность: 234

Ну хоть кто нибудь, помогите мне, без вас я не справлюсь sorry.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: