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

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

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

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

aes_statsx_cstrike обнуление топа

, Помогите добавить автообнуление статистики (/top15....) [РЕШЕНО]
Статус пользователя sana666
сообщение 29.4.2015, 17:12
Сообщение #1


Стаж: 12 лет
Город: Новосибирск

Сообщений: 235
Благодарностей: 39
Полезность: 29

Помогите добавить автообнуление статистики (/top15....)
aes_statsx_cstrike

Исходник:
Код:


#include <amxmodx>
#include <csx>
#include <csstats>

#if AMXX_VERSION_NUM < 183
#include <colorchat>

#define print_team_default DontChange
#define print_team_grey Grey
#define print_team_red Red
#define print_team_blue Blue
#endif

#define NO_AES

#if !defined NO_AES
#include <aes_main>
#endif

#define PLUGIN "AES: StatsX"
#define VERSION "0.3 Beta"
#define AUTHOR "serfreeman1337"

/* - CVARS - */
enum _:cvars {
CVAR_MOTD_DESC,
CVAR_ASTATS_DESC,
CVAR_CHAT_DESC,
CVAR_SKILL,
CVAR_CSSTATS,
CVAR_ASTATS_GLOBAL,
CVAR_ALIST_CNT
}

new cvar[cvars]

/* - RANDOM STUFF */

// User stats parms id
#define STATS_KILLS 0
#define STATS_DEATHS 1
#define STATS_HS 2
#define STATS_TKS 3
#define STATS_SHOTS 4
#define STATS_HITS 5
#define STATS_DAMAGE 6

#define MAX_TOP 10

/* - SKILL - */

new const g_skill_letters[][] = {
"L-",
"L",
"L+",
"M-",
"M",
"M+",
"H-",
"H",
"H+",
"P"
}

new const g_skill_class[][] = {
"Lm",
"L",
"Lp",
"Mm",
"M",
"Mp",
"Hm",
"H",
"Hp",
"P"
}

// Global player flags.
new const BODY_PART[8][] =
{
"WHOLEBODY",
"HTML_HEAD",
"HTML_CHEST",
"HTML_STOMACH",
"HTML_LARM",
"HTML_RARM",
"HTML_LLEG",
"HTML_RLEG"
}

new g_skill_opt[sizeof g_skill_letters]
new chatDescCap[10],motdDescCap[10],aStatsDescCap[10]

#if !defined NO_AES
new useCsstats,useAstatsGlobal
#endif

#define BUFF_LEN 1535

new theBuffer[BUFF_LEN + 1] = 0

#define MENU_LEN 512

new g_MenuStatus[33][2]

public SayStatsMe = 0 // displays user's stats and rank
public SayRankStats = 0 // displays user's rank stats
public SayRank = 0 // displays user's rank
public SayTop15 = 0 // displays first 15 players
public SayStatsAll = 0 // displays all players stats and rank

public plugin_init(){
register_plugin(PLUGIN, VERSION, AUTHOR)

register_clcmd("say","Say_Catch")
register_clcmd("say_team","Say_Catch")

/*
// Отображение /top15 и /rank
// ВАЖНО! Motd окно не может показывать больше 1534-х символов, а сообщение в чат больше 192-х.
// Если что то отображается криво или не полностью, то нужно уменьшить количество пунктов. (Топ не показывает больше 10-ти игроков)
// * - Ранг
// a - Ник (Only /top15)
// b - Убийста
// c - Смерти
// d - Попаданий
// e - Выстрелов
// f - В голову
// g - Точность
// h - Эффективность
// i - Скилл
// j - Звание Army Ranks
*/

cvar[CVAR_MOTD_DESC] = register_cvar("aes_statsx_top","*abcfi")
cvar[CVAR_CHAT_DESC] = register_cvar("aes_statsx_rank","bci")
cvar[CVAR_ASTATS_DESC] = register_cvar("aes_statsx_astats","a")

// Настройка скилла. Значения схожи со значениями эффективности.
// Значения: L- L L+ M- M M+ H- H H+ P (Low Middle High Pro)
cvar[CVAR_SKILL] = register_cvar("aes_statsx_skill","35 40 45 50 55 65 70 75 80 90")

// Использовать расчет опыта и уровня на основании статистики из csstats.dat
// в случае если не удалось получить опыт из AES
cvar[CVAR_CSSTATS] = register_cvar("aes_statsx_use_csstats","1")

cvar[CVAR_ASTATS_GLOBAL] = register_cvar("aes_statsx_astats_global","1")
cvar[CVAR_ALIST_CNT] = register_cvar("aes_statsx_alist","10")

// register_dictionary_colored("statsx.txt")
register_dictionary("statsx_aes.txt")

register_menucmd(register_menuid("Stats Menu"), 1023, "actionStatsMenu")
}

public plugin_cfg(){
new levelString[36],stPos,ePos,rawPoint[20],cnt

get_pcvar_string(cvar[CVAR_MOTD_DESC],motdDescCap,9)
trim(motdDescCap)

get_pcvar_string(cvar[CVAR_CHAT_DESC],chatDescCap,9)
trim(chatDescCap)

get_pcvar_string(cvar[CVAR_ASTATS_DESC],aStatsDescCap,9)
trim(aStatsDescCap)

get_pcvar_string(cvar[CVAR_SKILL],levelString,35)

// парсер значений для скилла
do {
ePos = strfind(levelString[stPos]," ")

formatex(rawPoint,ePos,levelString[stPos])
g_skill_opt[cnt] = str_to_num(rawPoint)

stPos += ePos + 1

cnt++

// narkoman wole suka
if(cnt > sizeof g_skill_letters - 1)
break
} while (ePos != -1)

#if !defined NO_AES
useCsstats = get_pcvar_num(cvar[CVAR_CSSTATS])
useAstatsGlobal = get_pcvar_num(cvar[CVAR_ASTATS_GLOBAL])
#endif
}

// Ловим сообщения чата
public Say_Catch(id){
new msg[191]
read_args(msg,190)

trim(msg)
remove_quotes(msg)

if(msg[0] == '/'){
if(!strcmp(msg[1],"rank",1))
return RankSay(id)
if(containi(msg[1],"top") == 0){
replace(msg,190,"/top","")

return SayTop(id,str_to_num(msg))
}
if(!strcmp(msg[1],"rankstats",1))
return RankStatsSay(id,id)

if(!strcmp(msg[1],"statsme",1))
return StatsMeSay(id,id)

if(!strcmp(msg[1],"stats",1)){
arrayset(g_MenuStatus[id],0,2)
return ShowStatsMenu(id,0)
}

#if !defined NO_AES
if(!strcmp(msg[1],"astats",1)){
return ShowAStats(id)
}

if(!strcmp(msg[1],"alist",1)){
return ShowAList(id)
}
#endif
}

return PLUGIN_CONTINUE
}

public RankSay(id){
if(!SayRank){
client_print_color(id,0,"%L %L",id,"STATS_TAG", id,"DISABLED_MSG")

return PLUGIN_HANDLED
}

new message[191],len,rank,stats[8],bh[8]

len += formatex(message[len],190 - len,"%L ",id,"STATS_TAG")

rank = get_user_stats(id,stats,bh)

len += formatex(message[len],190 - len,"%L ",id,"AES_YOUR_RANK_IS",rank,get_statsnum())

parse_rank_desc(id,message,190,len,stats)

client_print_color(id,print_team_default,message)

return PLUGIN_HANDLED
}

// Формирование сообщения /rank
parse_rank_desc(id,msg[],maxlen,len,stats[8]){
new cnt,theChar[4]

// Проверяем всё флаги
for(new i ; i < strlen(chatDescCap) ; ++i){
theChar[0] = chatDescCap[i] // фз почему напрямую не рабатает

// если это первое значение, то рисуем в начале скобку, иначе запятую с пробелом
if(cnt != strlen(chatDescCap))
len += formatex(msg[len],maxlen - len,cnt <= 0 ? "(" : ", ")

// добавляем в сообщение информацию в соотв. с флагами
switch(theChar[0]){
case 'a':{ // ничего
}
case 'b':{ // убийства
len += formatex(msg[len],maxlen - len,"%L ^3%d^1",id,"KILLS",stats[0])
}
case 'c':{ // смерти
len += formatex(msg[len],maxlen - len,"%L ^3%d^1",id,"DEATHS",stats[1])
}
case 'd':{ // попадания
len += formatex(msg[len],maxlen - len,"%L ^3%d^1",id,"HITS",stats[5])
}
case 'e':{ // выстрелы
len += formatex(msg[len],maxlen - len,"%L ^3%d^1",id,"SHOTS",stats[4])
}
case 'f':{ // хедшоты
len += formatex(msg[len],maxlen - len,"%L ^3%d^1",id,"STATS_HS",stats[2])
}
case 'g':{ // точность
len += formatex(msg[len],maxlen - len,"%L ^3%.2f^1",id,"ACC",accuracy(stats))
}
case 'h':{ // эффективность
len += formatex(msg[len],maxlen - len,"%L ^3%d^1",id,"EFF",effec(stats))
}
case 'i':{ // скилл
new sskill[4]
get_skill(stats,sskill,3)
len += formatex(msg[len],maxlen - len,"%L ^3%s^1",id,"STATS_SKILL",sskill)

}
#if !defined NO_AES
case 'j':{ // ранг и опыт
new aStats[AES_ST_END],level[42],lev

if(aes_get_player_stats(id,aStats)){
aes_get_level_name(aStats[AES_ST_LEVEL],level,31,id)
lev = strlen(level)
lev += formatex(level[lev],41-lev,"(%d)",aStats[AES_ST_EXP])
}
else // без ранга
formatex(level,31,"^4---^1")

len += formatex(msg[len],maxlen - len,"%L ^3%s^1",id,"STATS_RANK",level)
}
#endif
}

theChar[0] = 0
cnt ++
}

// закрываем всё сообщение скобкой, если была подстановка параметров
if(cnt)
len += formatex(msg[len],maxlen - len,")")
}

// Формирование окна /rankstats
// id - кому показывать
// stId - кого показывать
public RankStatsSay(id,stId){
if(!SayRankStats){
client_print_color(id,0,"%L %L",id,"STATS_TAG", id,"DISABLED_MSG")

return PLUGIN_HANDLED
}

new len,stats[8],bh[8],tt[64]
new name[32],skilll[32],levelName[42]

#if !defined NO_AES
new aStats[AES_ST_END]
#endif

theBuffer[0] = 0

formatex(tt,63,"%L",id,"RANKSTATS_TITLE")

len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_META")
len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_STYLE")

new rank = get_user_stats(stId,stats,bh)

new rt = get_skill(stats,skilll,31)
formatex(skilll,31,"%L",id,"HTML_SKILL_VALUE",g_skill_class[rt])

if(id == stId)
formatex(name,31,"%L",id,"HTML_YOU")
else{
get_user_name(stId,name,31)
formatex(levelName,31," ^"%s^"",name)
add(tt,63,levelName)
}

#if !defined NO_AES
aes_get_player_stats(stId,aStats)
aes_get_level_name(aStats[AES_ST_LEVEL],levelName,41,id)
#endif

len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_RANKSTATS_BODY",
id,"HTML_RANK_IS",name,rank,get_statsnum())

// vot eto formatirovanie
#if !defined NO_AES
len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_RANKSTATS_HEADER",
id,"HTML_KILLS",stats[STATS_KILLS],stats[STATS_HS],
id,"HTML_DEATHS",stats[STATS_DEATHS],
id,"HTML_HITS",stats[STATS_HITS],
id,"HTML_SHOTS",stats[STATS_SHOTS],
id,"HTML_DMG",stats[STATS_DAMAGE],
id,"HTML_ACC",accuracy(stats),
id,"HTML_EFF",effec(stats),
id,"HTML_SKILL",skilll,
id,"HTML_ARMYRANKS",levelName,aStats[AES_ST_EXP]
)
#else
len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_RANKSTATS_HEADER_NORANK",
id,"HTML_KILLS",stats[STATS_KILLS],stats[STATS_HS],
id,"HTML_DEATHS",stats[STATS_DEATHS],
id,"HTML_HITS",stats[STATS_HITS],
id,"HTML_SHOTS",stats[STATS_SHOTS],
id,"HTML_DMG",stats[STATS_DAMAGE],
id,"HTML_ACC",accuracy(stats),
id,"HTML_EFF",effec(stats),
id,"HTML_SKILL",skilll
)
#endif

len += formatex(theBuffer[len],1536-len,"%L",id,"HTML_RANKSTATS_HITS")

new theSwitcher

for (new i = 1; i < 8; i++)
{
len += formatex(theBuffer[len],BUFF_LEN-len,"%L",
id,"HTML_RANKSTATS_HITSTABLE",
theSwitcher ? " class=b" : "",
id,BODY_PART[i],bh[i])

theSwitcher = theSwitcher ? false : true
}

// mne tak nadoel etot kod :(
for(new i = 0 ; i < 2; ++i){
len += formatex(theBuffer[len],BUFF_LEN-len,"%L",
id,"HTML_RANKSTATS_BLANK",
theSwitcher ? " class=b" : "")

theSwitcher = theSwitcher ? false : true
}

show_motd(id,theBuffer,tt)

return PLUGIN_HANDLED
}

get_skill(stats[8],skill[],skilllen,&skillexp = 0){
new sk = floatround(effec(stats))

for(new i;i < sizeof g_skill_opt;++i){
if(g_skill_opt[i] > sk || i == sizeof g_skill_opt - 1){
copy(skill,skilllen,g_skill_letters[i])
return i
}
}

return 0
}

// Формирование окна /top
// В Pos указывается с какой позиции рисовать
public SayTop(id,Pos){
if(!SayTop15){
client_print_color(id,0,"%L %L",id,"STATS_TAG", id,"DISABLED_MSG")

return PLUGIN_HANDLED
}

if(Pos == 15 || Pos <= 0)
Pos = 10

theBuffer[0] = 0

new len,tt[64]
formatex(tt,63,"%L",id,"HTML_PLAYER_TOP")

//len += formatex(buffer[len],1535 - len,"<html><head>")
len += formatex(theBuffer[len],BUFF_LEN - len,"%L%L",id,"HTML_META",id,"HTML_STYLE")
//len += formatex(buffer[len],1535 - len,"</head><body>")
len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_TOP_BODY",id,"HTML_PLAYER_TOP")

len += parse_top_desc_header(id,theBuffer,BUFF_LEN,len,false)

new name[32],uid[36],stats[8],bh[8]

new size = min(get_statsnum(),Pos)
new i

#if !defined NO_AES
new Array:uids = ArrayCreate(36)
#endif

new Array:ustats = ArrayCreate(8)
new Array:names = ArrayCreate(32)
new Array:poss = ArrayCreate(1)

// Если ваш сервер не может поднять создание 4ех динамических массивов
// Удалите AES и больше никогда не ставьте его

new rank,lst

for(i = size - MAX_TOP < 0 ? 0 : size - MAX_TOP; i < size ; i++){
rank = get_stats(i,stats,bh,name,31,uid,35)

ArrayPushCell(poss,rank ? rank : lst + 1)

#if !defined NO_AES
ArrayPushString(uids,uid)
#endif

ArrayPushString(names,name)
ArrayPushArray(ustats,stats)

lst = rank
}

#if !defined NO_AES
len = parse_top_desc_body(id,theBuffer,BUFF_LEN,len,uids,ustats,names,poss,false)
#else
len = parse_top_desc_body(id,theBuffer,BUFF_LEN,len,ustats,names,poss,false)
#endif

len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_CLOSE")

//len += formatex(buffer[len],1562 - len,"</body></html")

show_motd(id,theBuffer,tt)

return PLUGIN_HANDLED
}

// Формируем список игроков в таблице для топа игроков
#if !defined NO_AES
parse_top_desc_body(id,buff[],maxlen,len,Array:uids,Array:ustats,Array:names,Arr
ay:pos,bool:isAstats){
#else
parse_top_desc_body(id,buff[],maxlen,len,Array:ustats,Array:names,Array:pos,bool
:isAstats){
#endif
new tmp[256],len2,tmp2[96],name[32],stats[8],bh[8],theChar[4],rank,bool:theSwitcher

#if !defined NO_AES
new st[AES_ST_END]
#endif

new Array:aStats = Invalid_Array,players[32],pCount

if(!isAstats){
#if !defined NO_AES
aStats = aes_get_stats(uids)
#endif

pCount = ArraySize(names)
}
else{
get_players(players,pCount)
SortCustom1D(players,pCount,"AStats_Sort_Function",players,pCount)
}

// неудалось получить статистику или недостаточно данных
// сносим массив и пользуемся стандартной статистикой для формирования званий
if(aStats != Invalid_Array && ArraySize(aStats) < ArraySize(names) && !isAstats){
ArrayDestroy(aStats)

aStats = Invalid_Array
}

for(new i;i < pCount ;++i){
#if !defined NO_AES
arrayset(st,-1,AES_ST_END)
#endif

if(!isAstats){
ArrayGetString(names,i,name,31)
ArrayGetArray(ustats,i,stats)
rank = ArrayGetCell(pos,i)
}else{
get_user_name(players[i],name,31)

#if !defined NO_AES
rank = useAstatsGlobal ? get_user_stats(players[i],stats,bh) : get_user_wstats(players[i],0,stats,bh)
aes_get_player_stats(players[i],st)
#else
rank = get_user_stats(players[i],stats,bh)
#endif
}

#if !defined NO_AES
if(!isAstats && aStats != Invalid_Array)
ArrayGetArray(aStats,i,st)
#endif

new fCnt = isAstats != true ? strlen(motdDescCap) : strlen(aStatsDescCap)

for(new z = 0; z < fCnt ; ++z){
tmp2[0] = 0
theChar[0] = isAstats != true ? motdDescCap[z] : aStatsDescCap[z]

switch(theChar[0]){
case '*':{
formatex(tmp2,31,"%d",rank)
}
case 'a':{
if(!isAstats)
ArrayGetString(names,i,tmp2,31)
else
copy(tmp2,95,name)

replace_all(tmp2,95,"<","&lt")
replace_all(tmp2,95,">","&gt")
}
case 'b':{
formatex(tmp2,31,"%d",stats[STATS_KILLS])
}
case 'c':{
formatex(tmp2,31,"%d",stats[STATS_DEATHS])
}
case 'd':{
formatex(tmp2,31,"%d",stats[STATS_HITS])
}
case 'e':{
formatex(tmp2,31,"%d",stats[STATS_SHOTS])
}
case 'f':{
formatex(tmp2,31,"%d",stats[STATS_HS])
}
case 'g':{
formatex(tmp2,31,"%.2f%%",accuracy(stats))
}
case 'h':{
formatex(tmp2,31,"%.2f%%",effec(stats))
}
case 'i':{
new rt = get_skill(stats,tmp2,31)
formatex(tmp2,31,"%L",id,"HTML_SKILL_VALUE",g_skill_class[rt])
}
#if !defined NO_AES
case 'j':{
new lvl[64]

// используем статистику из csstats.dat
if(st[AES_ST_EXP] < 0){
if(useCsstats){
new stats2[4]

if(!isAstats)
get_stats2(rank - 1,stats2)
else
get_user_stats2(players[i],stats2)

st[AES_ST_EXP] = aes_get_exp_for_stats(stats,stats2)
st[AES_ST_LEVEL] = aes_get_level_for_exp(st[AES_ST_EXP])
}else
st[AES_ST_LEVEL] = -1

}

if(st[AES_ST_LEVEL] > -1){
aes_get_level_name(st[AES_ST_LEVEL],tmp2,95,id)
formatex(lvl,63,"%s (%d)",tmp2,st[AES_ST_EXP])
}else
formatex(lvl,63,"%L",id,"HTML_NOT_TRACKED")

len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_BODY_CELL",lvl)

tmp2[0] = 0
theChar[0] = 0

continue
}
#endif
}

// выводим отформатированные данные
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_BODY_CELL",tmp2)

tmp2[0] = 0
theChar[0] = 0
}

len2 = 0
len += formatex(buff[len],maxlen-len,"%L",id,"HTML_BODY_ROW",theSwitcher ? " class=b" : " class=q",tmp)

theSwitcher = theSwitcher ? false : true
}

if(!isAstats){
ArrayDestroy(ustats)
ArrayDestroy(names)
ArrayDestroy(pos)

if(aStats != Invalid_Array)
ArrayDestroy(aStats)
}

return len
}

// Формируем заголовок таблицы для топа игроков
parse_top_desc_header(id,buff[],maxlen,len,bool:isAstats){
new tmp[256],len2,theChar[4],lCnt

lCnt = isAstats != true ? strlen(motdDescCap) : strlen(aStatsDescCap)

for(new i ; i < lCnt ; ++i){
theChar[0] = isAstats != true ? motdDescCap[i] : aStatsDescCap[i]

switch(theChar[0]){
case '*':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_POS")
}
case 'a':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_PLAYER")
}
case 'b':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_KILLS")
}
case 'c':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_DEATHS")
}
case 'd':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_HITS")
}
case 'e':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_SHOTS")
}
case 'f':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_HS")
}
case 'g':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_ACC")
}
case 'h':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_EFF")
}
case 'i':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_SKILL")
}
#if !defined NO_AES
case 'j':{
len2 += formatex(tmp[len2],255-len2,"%L",id,"HTML_HEADER_CELL","",id,"HTML_ARMYRANKS")
}
#endif
}

theChar[0] = 0
}

return formatex(buff[len],maxlen-len,"%L",id,"HTML_TOP_HEADER_ROW",tmp)
}

// Личная статистка за карту
// Команда /statsme

// id - кому показывать
// stId - кого показывать
public StatsMeSay(id,stId){
if(!SayStatsMe){
client_print_color(id,0,"%L %L",id,"STATS_TAG", id,"DISABLED_MSG")

return PLUGIN_HANDLED
}

new len,stats[8],bh[8],wpnId,wpnName[32],tt[64]

formatex(tt,63,"%L",id,"STATS_TITLE")

if(id != stId){
new name[32],nameQ[34]
get_user_name(stId,name,31)

formatex(nameQ,33," ^"%s^"",name)

add(tt,63,nameQ)
}

theBuffer[0] = 0

get_user_wstats(stId,0,stats,bh)

len += formatex(theBuffer[len],BUFF_LEN-len,"%L%L",id,"HTML_META",id,"HTML_STYLE")
len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_STATS_BODY")

len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_STATS_HEADER1",
id,"HTML_KILLS",stats[STATS_KILLS],
id,"HTML_HS",stats[STATS_HS],
id,"HTML_DEATHS",stats[STATS_DEATHS],
id,"HTML_HITS",stats[STATS_HITS],
id,"HTML_SHOTS",stats[STATS_SHOTS],
id,"HTML_DMG",stats[STATS_DAMAGE],
id,"HTML_ACC",accuracy(stats),
id,"HTML_EFF",effec(stats))

len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_STATS_HEADER2",
id,"HTML_WEAPON",
id,"HTML_KILLS",
id,"HTML_DEATHS",
id,"HTML_HITS",
id,"HTML_SHOTS",
id,"HTML_DMG",
id,"HTML_ACC")

new theTrigger

for (wpnId = 1; wpnId < xmod_get_maxweapons() && BUFF_LEN-len > 0 ; wpnId++)
{
if (get_user_wstats(stId, wpnId, stats,bh))
{
xmod_get_wpnname(wpnId,wpnName,31)

len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_STATS_TABLE",
theTrigger ? " class=b" : " class=q",
wpnName,
stats[STATS_KILLS],
stats[STATS_DEATHS],
stats[STATS_HITS],
stats[STATS_SHOTS],
stats[STATS_DAMAGE],
accuracy(stats))

theTrigger = theTrigger ? false : true
}
}

len += formatex(theBuffer[len],BUFF_LEN-len,"%L",id,"HTML_CLOSE")

show_motd(id,theBuffer,tt)

return PLUGIN_HANDLED
}

// формирование меню для просмотра статистики игроков
public ShowStatsMenu(id,page){
if(!SayStatsAll){
client_print_color(id,0,"%L %L",id,"STATS_TAG", id,"DISABLED_MSG")

return PLUGIN_HANDLED
}

new menuKeys,menuText[512],menuLen
new tName[42],players[32],pCount

get_players(players,pCount)

new maxPages = ((pCount - 1) / 7) + 1 // находим макс. кол-во страниц

// отображаем с начала, если такой страницы не существует
if(page > maxPages)
page = 0

// начальный индекс игрока согласно странице
new usrIndex = (7 * page)

menuLen += formatex(menuText[menuLen],MENU_LEN - 1 - menuLen,"%L %L\R\y%d/%d^n",
id,"MENU_TAG",id,"MENU_TITLE",page + 1,maxPages)

// добавляем игроков в меню
while(usrIndex < pCount){
get_user_name(players[usrIndex],tName,31)
menuKeys |= (1 << usrIndex % 7)

menuLen += formatex(menuText[menuLen],MENU_LEN - 1 - menuLen,"^n\r%d.\w %s",
(usrIndex % 7) + 1,tName)

usrIndex ++

// перываем заполнение
// если данная страница уже заполнена
if(!(usrIndex % 7))
break
}

// вариант просмотра статистики
menuLen += formatex(menuText[menuLen],MENU_LEN - 1 - menuLen,"^n^n\r%d.\w %L",8,id,g_MenuStatus[id][0] ? "MENU_RANK" : "MENU_STATS")
menuKeys |= MENU_KEY_8

if(!(usrIndex % 7)){
menuLen += formatex(menuText[menuLen],MENU_LEN - 1 - menuLen,"^n^n\r%d.\w %L",9,id,"MORE")
menuKeys |= MENU_KEY_9
}

if((7 * page)){
menuLen += formatex(menuText[menuLen],MENU_LEN - 1 - menuLen,"^n^n\r%d.\w %L",0,id,"BACK")
menuKeys |= MENU_KEY_0
}else{
menuLen += formatex(menuText[menuLen],MENU_LEN - 1 - menuLen,"^n^n\r%d.\w %L",0,id,"EXIT")
menuKeys |= MENU_KEY_0
}


show_menu(id,menuKeys,menuText,-1,"Stats Menu")

return PLUGIN_HANDLED
}

public actionStatsMenu(id,key){
switch(key){
case 0..6:{
new usrIndex = key + (7 * g_MenuStatus[id][1]) + 1

if(!is_user_connected(id)){
ShowStatsMenu(id,g_MenuStatus[id][1])

return PLUGIN_HANDLED
}

g_MenuStatus[id][0] ? RankStatsSay(id,usrIndex) : StatsMeSay(id,usrIndex)

ShowStatsMenu(id,g_MenuStatus[id][1])
}
case 7:{
g_MenuStatus[id][0] = g_MenuStatus[id][0] ? 0 : 1
ShowStatsMenu(id,g_MenuStatus[id][1])
}
case 8:{
g_MenuStatus[id][1] ++
ShowStatsMenu(id,g_MenuStatus[id][1])
}
case 9:{
if(g_MenuStatus[id][1]){
g_MenuStatus[id][1] --
ShowStatsMenu(id,g_MenuStatus[id][1])
}
}
}

return PLUGIN_HANDLED
}

#if !defined NO_AES
// Статистика текущих игроков
public ShowAStats(id){
theBuffer[0] = 0

new len,tt[64]
formatex(tt,63,"%L",id,"THE_STATS")

//len += formatex(buffer[len],1535 - len,"<html><head>")
len += formatex(theBuffer[len],BUFF_LEN - len,"%L%L",id,"HTML_META",id,"HTML_STYLE")
//len += formatex(buffer[len],1535 - len,"</head><body>")
len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_TOP_BODY",id,"THE_STATS")

len += parse_top_desc_header(id,theBuffer,BUFF_LEN,len,true)

len = parse_top_desc_body(id,theBuffer,BUFF_LEN,len,Invalid_Array,Invalid_Array,Invali
d_Array,Invalid_Array,true)
len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_CLOSE")

//len += formatex(buffer[len],1562 - len,"</body></html")

show_motd(id,theBuffer,tt)

return PLUGIN_HANDLED
}

public AStats_Sort_Function(elem1,elem2){
new st1[AES_ST_END],st2[AES_ST_END]

aes_get_player_stats(elem1,st1)
aes_get_player_stats(elem2,st2)

if(st1[AES_ST_EXP] > st2[AES_ST_EXP])
return -1
else if(st1[AES_ST_EXP] < st2[AES_ST_EXP])
return 1

return 0
}

// Страница со списком званий
public ShowAList(id){
theBuffer[0] = 0

new len,len2,tt[64],buff[BUFF_LEN]
formatex(tt,63,"%L",id,"THE_RANKS")

//len += formatex(buffer[len],1535 - len,"<html><head>")
len += formatex(theBuffer[len],BUFF_LEN - len,"%L%L",id,"HTML_META",id,"HTML_STYLE")
//len += formatex(buffer[len],1535 - len,"</head><body>")
len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_TOP_BODY",id,"THE_RANKS")

new aStats[AES_ST_END],levelName[64],bool:theSwitcher

aes_get_player_stats(id,aStats)

new stPos = max(0,aStats[AES_ST_LEVEL] - (get_pcvar_num(cvar[CVAR_ALIST_CNT])/2))
new enPos = max(10,aStats[AES_ST_LEVEL] + (get_pcvar_num(cvar[CVAR_ALIST_CNT])/2))

enPos = min(enPos,aes_get_max_level())

len2 += formatex(buff[len2],BUFF_LEN-len2,"%L",id,"HTML_HEADER_CELL","",id,"STATS_RANK")
len2 += formatex(buff[len2],BUFF_LEN-len2,"%L",id,"HTML_HEADER_CELL","",id,"STATS_EXP")

len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_TOP_HEADER_ROW",buff)

buff[0] = 0
len2 = 0

for(new i = stPos; i < enPos ; ++i){
aes_get_level_name(i,levelName,63,id)

len2 += formatex(buff[len2],BUFF_LEN - len2,"%L",id,"HTML_BODY_CELL",levelName)

if(!i)
num_to_str(0,levelName,63)
else
num_to_str(aes_get_exp_to_next_level(i - 1),levelName,63)

len2 += formatex(buff[len2],BUFF_LEN - len2,"%L",id,"HTML_BODY_CELL",levelName)

if(i != aStats[AES_ST_LEVEL])
len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_BODY_ROW",theSwitcher ? " class=b" : " class=q",buff)
else
len += formatex(theBuffer[len],BUFF_LEN - len,"<u>%L</u>",id,"HTML_BODY_ROW",theSwitcher ? " class=b style=^"text-decoration: underline;^"" : " class=q style=^"text-decoration: underline;^"",buff)

theSwitcher = theSwitcher ? false : true

buff[0] = 0
len2 = 0
}

len += formatex(theBuffer[len],BUFF_LEN - len,"%L",id,"HTML_CLOSE")

show_motd(id,theBuffer,tt)

return PLUGIN_HANDLED
}
#endif

// Stats formulas
Float:accuracy(izStats[8])
{
if (!izStats[STATS_SHOTS])
return (0.0)

return (100.0 * float(izStats[STATS_HITS]) / float(izStats[STATS_SHOTS]))
}

Float:effec(izStats[8])
{
if (!izStats[STATS_KILLS])
return (0.0)

return (100.0 * float(izStats[STATS_KILLS]) / float(izStats[STATS_KILLS] + izStats[STATS_DEATHS]))
}


Отредактировал: sana666, - 29.4.2015, 17:31


Звукозапись:
VK - vk.com/zvuk_off
TG - @zvuk_off
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя sana666
сообщение 29.4.2015, 18:20
Сообщение #2


Стаж: 12 лет
Город: Новосибирск

Сообщений: 235
Благодарностей: 39
Полезность: 29

существует ли плагин для обнуления статистики после определенного количества игроков ?


Звукозапись:
VK - vk.com/zvuk_off
TG - @zvuk_off
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя GOOD FELLOW
сообщение 30.4.2015, 6:44
Сообщение #3


Иконка группы

Стаж: 13 лет

Сообщений: 2294
Благодарностей: 1187
Полезность: 890

csstatsx_size, не?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя sana666
сообщение 30.4.2015, 12:56
Сообщение #4


Стаж: 12 лет
Город: Новосибирск

Сообщений: 235
Благодарностей: 39
Полезность: 29

Цитата(GOOD FELLOW @ 30.4.2015, 6:44) *
csstatsx_size, не?
эту переменную использует вроде statsx.amxx, в исходнике не нашел переменной и в других плагинах стандарт статистики не нашел.
Скорее ты прав, я потестирую с этой командой.


Звукозапись:
VK - vk.com/zvuk_off
TG - @zvuk_off
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: