Raised This Month: $183 Target: $400
 45% 

modify top10 to top15


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
giumbalau
Junior Member
Join Date: Jan 2021
Old 01-10-2021 , 05:13   modify top10 to top15
Reply With Quote #1

Ayone can modify this top ... to show 15 players
Thank you..
PHP Code:
//--------------------------------
#include <amxmodx>
#include <amxmisc>
#include <csx>
//--------------------------------
 
enum ChatColor
{
   
CHATCOLOR_NORMAL 1,
   
CHATCOLOR_GREEN,
   
CHATCOLOR_TEAM_COLOR,
   
CHATCOLOR_GREY,    
   
CHATCOLOR_RED,       
   
CHATCOLOR_BLUE,    
}
 
new 
g_TeamName[][] = 
{
   
"",
   
"TERRORIST",
   
"CT",
   
"SPECTATOR"
}
 
new 
g_msgSayText
new g_msgTeamInfo
 
// Uncomment to activate log debug messages.
//#define STATSX_DEBUG
 
// HUD statistics duration in seconds (minimum 1.0 seconds).
#define HUD_DURATION_CVAR   "amx_statsx_duration"
#define HUD_DURATION        "12.0"
 
// HUD statistics stop relative freeze end in seconds.
// To stop before freeze end use a negative value.
#define HUD_FREEZE_LIMIT_CVAR   "amx_statsx_freeze"
#define HUD_FREEZE_LIMIT        "-2.0"
 
// HUD statistics minimum duration, in seconds, to trigger the display logic.
#define HUD_MIN_DURATION    0.2
 
// Config plugin constants.
#define MODE_HUD_DELAY      0   // Make a 0.01 sec delay on HUD reset process.
 
// You can also manualy enable or disable these options by setting them to 1
// For example:
// public ShowAttackers = 1
// However amx_statscfg command is recommended
 
public KillerChat           // displays killer hp&ap to victim console 
                                // and screen
 
public ShowAttackers        // shows attackers
public ShowVictims          // shows victims
public ShowKiller           // shows killer
public ShowTeamScore        // shows team score at round end
public ShowTotalStats       // shows round total stats
public ShowBestScore        // shows rounds best scored player
public ShowMostDisruptive   // shows rounds most disruptive player
 
public EndPlayer            // displays player stats at the end of map
public EndTop15             // displays top15 at the end of map
 
public SayHP                // displays information about user killer
public SayStatsMe           // displays user's stats and rank
public SayRankStats         // displays user's rank stats
public SayMe                // displays user's stats
public SayRank              // displays user's rank
public SayReport            // report user's weapon status to team
public SayScore             // displays team's map score
public SayTop15             // displays first 15 players
public SayStatsAll          // displays all players stats and rank
 
public ShowStats            // set client HUD-stats switched off by default
public ShowDistHS           // show distance and HS in attackers and
                                //  victims HUD lists
public ShowFullStats        // show full HUD stats (more than 78 chars)
 
public SpecRankInfo         // displays rank info when spectating
 
// Standard Contstants.
#define MAX_TEAMS               2
#define MAX_PLAYERS             32 + 1
 
#define MAX_NAME_LENGTH         31
#define MAX_WEAPON_LENGTH       31
#define MAX_TEXT_LENGTH         255
#define MAX_BUFFER_LENGTH       2047
 
// 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
 
// Global player flags.
new BODY_PART[8][] =
{
   
"WHOLEBODY"
   
"HEAD"
   
"CHEST"
   
"STOMACH"
   
"LEFTARM"
   
"RIGHTARM"
   
"LEFTLEG"
   
"RIGHTLEG"
}
 
// Killer information, save killer info at the time when player is killed.
#define KILLED_KILLER_ID        0   // Killer userindex/user-ID
#define KILLED_KILLER_HEALTH    1   // Killer's health
#define KILLED_KILLER_ARMOUR    2   // Killer's armour
#define KILLED_TEAM             3   // Killer's team
#define KILLED_KILLER_STATSFIX  4   // Fix to register the last hit/kill
 
new g_izKilled[MAX_PLAYERS][5]
 
// Menu variables and configuration
#define MAX_PPL_MENU_ACTIONS    2   // Number of player menu actions
#define PPL_MENU_OPTIONS        7   // Number of player options per displayed menu
 
new g_iPluginMode                                   0
 
new g_izUserMenuPosition[MAX_PLAYERS]               = {0, ...}
new 
g_izUserMenuAction[MAX_PLAYERS]                 = {0, ...}
new 
g_izUserMenuPlayers[MAX_PLAYERS][32]
 
new 
g_izSpecMode[MAX_PLAYERS]                       = {0, ...}
 
new 
g_izShowStatsFlags[MAX_PLAYERS]                 = {0, ...}
new 
g_izStatsSwitch[MAX_PLAYERS]                    = {0, ...}
new 
Float:g_fzShowUserStatsTime[MAX_PLAYERS]        = {0.0, ...}
new 
Float:g_fShowStatsTime                          0.0
new Float:g_fFreezeTime                             0.0
new Float:g_fFreezeLimitTime                        0.0
new Float:g_fHUDDuration                            0.0
 
new g_iRoundEndTriggered                            0
new g_iRoundEndProcessed                            0
 
new Float:g_fStartGame                              0.0
new g_izTeamScore[MAX_TEAMS]                        = {0, ...}
new 
g_izTeamEventScore[MAX_TEAMS]                   = {0, ...}
new 
g_izTeamRndStats[MAX_TEAMS][8]
new 
g_izTeamGameStats[MAX_TEAMS][8]
new 
g_izUserUserID[MAX_PLAYERS]                     = {0, ...}
new 
g_izUserAttackerDistance[MAX_PLAYERS]           = {0, ...}
new 
g_izUserVictimDistance[MAX_PLAYERS][MAX_PLAYERS]
new 
g_izUserRndName[MAX_PLAYERS][MAX_NAME_LENGTH 1]
new 
g_izUserRndStats[MAX_PLAYERS][8]
new 
g_izUserGameStats[MAX_PLAYERS][8]
 
// Common buffer to improve performance, as Small always zero-initializes all vars
new g_sBuffer[MAX_BUFFER_LENGTH 1]                = ""
new g_sScore[MAX_TEXT_LENGTH 1]                   = ""
new g_sAwardAndScore[MAX_BUFFER_LENGTH 1]         = ""
 
new t_sText[MAX_TEXT_LENGTH 1]                    = ""
new t_sName[MAX_NAME_LENGTH 1]                    = ""
new t_sWpn[MAX_WEAPON_LENGTH 1]                   = ""
 
new g_HudSync_EndRound
new g_HudSync_SpecInfo

#define STATSX_SHELL_DESIGN_MAX 13

#define STATSX_SHELL_DESIGN1_STYLE "<meta charset=UTF-8><style>body{background:#112233;font-family:Segoe UI;}th{background:#558866;color:#FFF;padding:10px 2px;text-align:left;}td{padding:4px 3px;}table{background:#EEEECC;font-size:12px;font-family:Segoe UI;}h2,h3{color:#FFF;font-family:Segoe UI;}#c{background:#E2E2BC;}img{height:10px;background:#09F;margin:0 3px;}#r{height:10px;background:#B6423C;}#clr{background:none;color:#FFF;font-size:20px;}</style>"
#define STATSX_SHELL_DESIGN2_STYLE "<meta charset=UTF-8><style>body{font-family:Arial}th{background:#575757;color:#FFF;padding:5px;border-bottom:2px #BCE27F solid;text-align:left}td{padding:3px;border-bottom:1px #E7F0D0 solid}table{color:#3C9B4A;background:#FFF;font-size:12px}h2,h3{color:#333;font-family:Verdana}#c{background:#F0F7E2}img{height:10px;background:#62B054;margin:0 3px}#r{height:10px;background:#717171}#clr{background:none;color:#575757;font-size:20px}</style>"
#define STATSX_SHELL_DESIGN3_STYLE "<meta charset=UTF-8><style>body{background:#E6E6E6;font-family:Verdana}th{background:#F5F5F5;color:#A70000;padding:6px;text-align:left}td{padding:2px 6px}table{color:#333;background:#E6E6E6;font-size:10px;font-family:Georgia;border:2px solid #D9D9D9}h2,h3{color:#333;}#c{background:#FFF}img{height:10px;background:#14CC00;margin:0 3px}#r{height:10px;background:#CC8A00}#clr{background:none;color:#A70000;font-size:20px;border:0}</style>"
#define STATSX_SHELL_DESIGN4_STYLE "<meta charset=UTF-8><style>body{background:#E8EEF7;margin:2px;font-family:Tahoma}th{color:#0000CC;padding:3px}tr{text-align:left;background:#E8EEF7}td{padding:3px}table{background:#CCC;font-size:11px}h2,h3{font-family:Verdana}img{height:10px;background:#09F;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#000;font-size:20px}</style>"
#define STATSX_SHELL_DESIGN5_STYLE "<meta charset=UTF-8><style>body{background:#555;font-family:Arial}th{border-left:1px solid #ADADAD;border-top:1px solid #ADADAD}table{background:#3C3C3C;font-size:11px;color:#FFF;border-right:1px solid #ADADAD;border-bottom:1px solid #ADADAD;padding:3px}h2,h3{color:#FFF}#c{background:#FF9B00;color:#000}img{height:10px;background:#00E930;margin:0 3px}#r{height:10px;background:#B6423C}#clr{background:none;color:#FFF;font-size:20px;border:0}</style>"
#define STATSX_SHELL_DESIGN6_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Tahoma}th{background:#303B4A;color:#FFF}table{padding:6px 2px;background:#EFF1F3;font-size:12px;color:#222;border:1px solid #CCC}h2,h3{color:#222}#c{background:#E9EBEE}img{height:7px;background:#F8931F;margin:0 3px}#r{height:7px;background:#D2232A}#clr{background:none;color:#303B4A;font-size:20px;border:0}</style>"
#define STATSX_SHELL_DESIGN7_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Verdana}th{background:#2E2E2E;color:#FFF;text-align:left}table{padding:6px 2px;background:#FFF;font-size:11px;color:#333;border:1px solid #CCC}h2,h3{color:#333}#c{background:#F0F0F0}img{height:7px;background:#444;margin:0 3px}#r{height:7px;background:#999}#clr{background:none;color:#2E2E2E;font-size:20px;border:0}</style>"
#define STATSX_SHELL_DESIGN8_STYLE "<meta charset=UTF-8><style>body{background:#242424;margin:20px;font-family:Tahoma}th{background:#2F3034;color:#BDB670;text-align:left} table{padding:4px;background:#4A4945;font-size:10px;color:#FFF}h2,h3{color:#D2D1CF}#c{background:#3B3C37}img{height:12px;background:#99CC00;margin:0 3px}#r{height:12px;background:#999900}#clr{background:none;color:#FFF;font-size:20px}</style>"
#define STATSX_SHELL_DESIGN9_STYLE "<meta charset=UTF-8><style>body{background:#FFF;font-family:Tahoma}th{background:#056B9E;color:#FFF;padding:3px;text-align:left;border-top:4px solid #3986AC}td{padding:2px 6px}table{color:#006699;background:#FFF;font-size:12px;border:2px solid #006699}h2,h3{color:#F69F1C;}#c{background:#EFEFEF}img{height:5px;background:#1578D3;margin:0 3px}#r{height:5px;background:#F49F1E}#clr{background:none;color:#056B9E;font-size:20px;border:0}</style>"
#define STATSX_SHELL_DESIGN10_STYLE "<meta charset=UTF-8><style>body{background:#4C5844;font-family:Tahoma}th{background:#1E1E1E;color:#C0C0C0;padding:2px;text-align:left;}td{padding:2px 10px}table{color:#AAC0AA;background:#424242;font-size:13px}h2,h3{color:#C2C2C2;font-family:Tahoma}#c{background:#323232}img{height:3px;background:#B4DA45;margin:0 3px}#r{height:3px;background:#6F9FC8}#clr{background:none;color:#FFF;font-size:20px}</style>"
#define STATSX_SHELL_DESIGN11_STYLE "<meta charset=UTF-8><style>body{background:#F2F2F2;font-family:Arial}th{background:#175D8B;color:#FFF;padding:7px;text-align:left}td{padding:3px;border-bottom:1px #BFBDBD solid}table{color:#153B7C;background:#F4F4F4;font-size:11px;border:1px solid #BFBDBD}h2,h3{color:#153B7C}#c{background:#ECECEC}img{height:8px;background:#54D143;margin:0 3px}#r{height:8px;background:#C80B0F}#clr{background:none;color:#175D8B;font-size:20px;border:0}</style>"
#define STATSX_SHELL_DESIGN12_STYLE "<meta charset=UTF-8><style>body{background:#283136;font-family:Arial}th{background:#323B40;color:#6ED5FF;padding:10px 2px;text-align:left}td{padding:4px 3px;border-bottom:1px solid #DCDCDC}table{background:#EDF1F2;font-size:10px;border:2px solid #505A62}h2,h3{color:#FFF}img{height:10px;background:#A7CC00;margin:0 3px}#r{height:10px;background:#CC3D00}#clr{background:none;color:#6ED5FF;font-size:20px;border:0}</style>"
#define STATSX_SHELL_DESIGN13_STYLE "<meta charset=UTF-8><style>body{background:#220000;font-family:Tahoma}th{background:#3E0909;color:#FFF;padding:5px 2px;text-align:left;border-bottom:1px solid #DEDEDE}td{padding:2px 2px;}table{background:#FFF;font-size:11px;border:1px solid #791616}h2,h3{color:#FFF}#c{background:#F4F4F4;color:#7B0000}img{height:7px;background:#a00000;margin:0 3px}#r{height:7px;background:#181818}#clr{background:none;color:#CFCFCF;font-size:20px;border:0}</style>"

#define STATSX_SHELL_DEFAULT_STYLE "<meta charset=UTF-8><style>body{background:#000}tr{text-align:left}table{font-size:13px;color:#FFB000;padding:2px}h2,h3{color:#FFF;font-family:Verdana}img{height:5px;background:#0000FF;margin:0 3px}#r{height:5px;background:#FF0000}</style>"

new pcvar_stylepcvar_designiDesign
new bool:szTrigger true
 
//--------------------------------
// Initialize
//--------------------------------
public plugin_init()
{
   
// Register plugin.
   
register_plugin("STATSX"AMXX_VERSION_STR"AMXX DEV TEAM")
   
register_dictionary("statsx_colored.txt")
 
   
// Register events.
   
register_event("TextMsg""eventStartGame""a""2=#Game_Commencing""2=#Game_will_restart_in")
   
register_event("ResetHUD""eventResetHud""be")
   
register_event("RoundTime""eventStartRound""bc")
   
register_event("SendAudio""eventEndRound""a""2=%!MRAD_terwin""2=%!MRAD_ctwin""2=%!MRAD_rounddraw")
   
register_event("TeamScore""eventTeamScore""a")
   
register_event("30""eventIntermission""a")
   
register_event("TextMsg""eventSpecMode""bd""2&ec_Mod")
   
register_event("StatusValue""eventShowRank""bd""1=2")
 
   
// Register commands.
   
register_clcmd("say /hp""cmdHp"0"- display info. about your killer (chat)")
   
register_clcmd("say /statsme""cmdStatsMe"0"- display your stats (MOTD)")
   
register_clcmd("say /rankstats""cmdRankStats"0"- display your server stats (MOTD)")
   
register_clcmd("say /me""cmdMe"0"- display current round stats (chat)")
   
register_clcmd("say /score""cmdScore"0"- display last score (chat)")
   
register_clcmd("say /rank""cmdRank"0"- display your rank (chat)")
   
register_clcmd("say /report""cmdReport"0"- display weapon status (say_team)")
   
register_clcmd("say /top15""cmdTop15"0"- display top 15 players (MOTD)")
   
register_clcmd("say /stats""cmdStats"0"- display players stats (menu/MOTD)")
   
register_clcmd("say /switch""cmdSwitch"0"- switch client's stats on or off")
   
register_clcmd("say_team /hp""cmdHp"0"- display info. about your killer (chat)")
   
register_clcmd("say_team /statsme""cmdStatsMe"0"- display your stats (MOTD)")
   
register_clcmd("say_team /rankstats""cmdRankStats"0"- display your server stats (MOTD)")
   
register_clcmd("say_team /me""cmdMe"0"- display current round stats (chat)")
   
register_clcmd("say_team /score""cmdScore"0"- display last score (chat)")
   
register_clcmd("say_team /rank""cmdRank"0"- display your rank (chat)")
   
register_clcmd("say_team /report""cmdReport"0"- display weapon status (say_team_team)")
   
register_clcmd("say_team /top15""cmdTop15"0"- display top 15 players (MOTD)")
   
register_clcmd("say_team /stats""cmdStats"0"- display players stats (menu/MOTD)")
   
register_clcmd("say_team /switch""cmdSwitch"0"- switch client's stats on or off")
 
   
// Register menus.
   
register_menucmd(register_menuid("Server Stats"), 1023"actionStatsMenu")
 
   
// Register special configuration setting and default value.
   
register_srvcmd("amx_statsx_mode""cmdPluginMode"ADMIN_CFG"<flags> - sets plugin options")
 
#if defined STATSX_DEBUG
   
register_clcmd("say /hudtest""cmdHudTest")
#endif
 
   
register_cvar(HUD_DURATION_CVARHUD_DURATION)
   
register_cvar(HUD_FREEZE_LIMIT_CVARHUD_FREEZE_LIMIT)
 
   
// Init buffers and some global vars.
   
g_sBuffer[0] = 0
   save_team_chatscore
()
    
   
g_HudSync_EndRound CreateHudSyncObj()
   
g_HudSync_SpecInfo CreateHudSyncObj()
 
   
g_msgSayText get_user_msgid("SayText")
   
g_msgTeamInfo get_user_msgid("TeamInfo"

   
iDesign random_num(1STATSX_SHELL_DESIGN_MAX)
   
pcvar_design register_cvar("amx_statsx_design""1"// Шаблоны для MOTD окна ТОР15 (Всего 13 шаблонов. Оптимальные: 1, 9)
   
pcvar_style register_cvar("amx_statsx_shell_mode""1")
}
 
public 
plugin_cfg()
{
   new 
addStast[] = "amx_statscfg add ^"%s^" %s"
 
   
server_cmd(addStast"ST_SHOW_KILLER_CHAT""KillerChat")
   
server_cmd(addStast"ST_SHOW_ATTACKERS""ShowAttackers")
   
server_cmd(addStast"ST_SHOW_VICTIMS""ShowVictims")
   
server_cmd(addStast"ST_SHOW_KILLER""ShowKiller")
   
server_cmd(addStast"ST_SHOW_TEAM_SCORE""ShowTeamScore")
   
server_cmd(addStast"ST_SHOW_TOTAL_STATS""ShowTotalStats")
   
server_cmd(addStast"ST_SHOW_BEST_SCORE""ShowBestScore")
   
server_cmd(addStast"ST_SHOW_MOST_DISRUPTIVE""ShowMostDisruptive")
   
server_cmd(addStast"ST_SHOW_HUD_STATS_DEF""ShowStats")
   
server_cmd(addStast"ST_SHOW_DIST_HS_HUD""ShowDistHS")
   
server_cmd(addStast"ST_STATS_PLAYER_MAP_END""EndPlayer")
   
server_cmd(addStast"ST_STATS_TOP15_MAP_END""EndTop15")
   
server_cmd(addStast"ST_SAY_HP""SayHP")
   
server_cmd(addStast"ST_SAY_STATSME""SayStatsMe")
   
server_cmd(addStast"ST_SAY_RANKSTATS""SayRankStats")
   
server_cmd(addStast"ST_SAY_ME""SayMe")
   
server_cmd(addStast"ST_SAY_RANK""SayRank")
   
server_cmd(addStast"ST_SAY_REPORT""SayReport")
   
server_cmd(addStast"ST_SAY_SCORE""SayScore")
   
server_cmd(addStast"ST_SAY_TOP15""SayTop15")
   
server_cmd(addStast"ST_SAY_STATS""SayStatsAll")
   
server_cmd(addStast"ST_SPEC_RANK""SpecRankInfo")
 
   
// Update local configuration vars with value in cvars.
   
get_config_cvars()
}
 
// Set hudmessage format.
set_hudtype_killer(Float:fDuration)
   
set_hudmessage(2208000.050.1506.0fDuration, (fDuration >= g_fHUDDuration) ? 1.0 0.01.0, -1)
 
set_hudtype_endround(Float:fDuration)
{
   
set_hudmessage(10020000.050.5500.02fDuration, (fDuration >= g_fHUDDuration) ? 1.0 0.01.0)
}
 
set_hudtype_attacker(Float:fDuration)
   
set_hudmessage(2208000.550.3506.0fDuration, (fDuration >= g_fHUDDuration) ? 1.0 0.01.0, -1)
 
set_hudtype_victim(Float:fDuration)
   
set_hudmessage(0802200.550.6006.0fDuration, (fDuration >= g_fHUDDuration) ? 1.0 0.01.0, -1)
 
set_hudtype_specmode()
{
   
set_hudmessage(2552552550.020.9620.050.10.013.0, -1)
}
 
#if defined STATSX_DEBUG
public cmdHudTest(id)
{
   new 
iiLen
   iLen 
0
    
   
for (120i++)
      
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH iLen"....x....1....x....2....x....3....x....4....x....^n")
    
   
set_hudtype_killer(50.0)
   
show_hudmessage(id"%s"g_sBuffer)
}
#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]))
}
 
// Distance formula (metric)
Float:distance(iDistance)
{
   return 
float(iDistance) * 0.0254
}
 
// Get plugin config flags.
set_plugin_mode(idsFlags[])
{
   if (
sFlags[0])
      
g_iPluginMode read_flags(sFlags)
    
   
get_flags(g_iPluginModet_sTextMAX_TEXT_LENGTH)
   
console_print(id"%L"id"MODE_SET_TO"t_sText)
    
   return 
g_iPluginMode
}
 
// Get config parameters.
get_config_cvars()
{
   
g_fFreezeTime get_cvar_float("mp_freezetime")
    
   if (
g_fFreezeTime 0.0)
      
g_fFreezeTime 0.0
 
   g_fHUDDuration 
get_cvar_float(HUD_DURATION_CVAR)
    
   if (
g_fHUDDuration 1.0)
      
g_fHUDDuration 1.0
 
   g_fFreezeLimitTime 
get_cvar_float(HUD_FREEZE_LIMIT_CVAR)
}
 
// Get and format attackers header and list.
get_attackers(idsBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
izStats[8], izBody[8]
   new 
iAttacker
   
new iFoundiLen
   
new iMaxPlayer get_maxplayers()
 
   
iFound 0
   sBuffer
[0] = 0
 
   
// Get and format header. Add killing attacker statistics if user is dead.
   // Make sure shots is greater than zero or division by zero will occur.
   // To print a '%', 4 of them must done in a row.
   
izStats[STATS_SHOTS] = 0
   iAttacker 
g_izKilled[id][KILLED_KILLER_ID]
    
   if (
iAttacker)
      
get_user_astats(idiAttackerizStatsizBody)
    
   if (
izStats[STATS_SHOTS] && ShowFullStats)
   {
      
get_user_name(iAttackert_sNameMAX_NAME_LENGTH)
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L -- %s -- %0.2f%% %L:^n"id"ATTACKERS"t_sNameaccuracy(izStats), id"ACC")
   }
   else
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L:^n"id"ATTACKERS")
 
   
// Get and format attacker list.
   
for (iAttacker 1iAttacker <= iMaxPlayeriAttacker++)
   {
      if (
get_user_astats(idiAttackerizStatsizBodyt_sWpnMAX_WEAPON_LENGTH))
      {
         
iFound 1
         get_user_name
(iAttackert_sNameMAX_NAME_LENGTH)
          
         if (
izStats[STATS_KILLS])
         {
            if (!
ShowDistHS)
               
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L / %s^n"t_sNameizStats[STATS_HITS], id"HIT_S"
                           
izStats[STATS_DAMAGE], id"DMG"t_sWpn)
            else if (
izStats[STATS_HS])
               
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L / %s / %0.0f m / HS^n"t_sNameizStats[STATS_HITS], id"HIT_S"
                           
izStats[STATS_DAMAGE], id"DMG"t_sWpndistance(g_izUserAttackerDistance[id]))
            else
               
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L / %s / %0.0f m^n"t_sNameizStats[STATS_HITS], id"HIT_S"
                           
izStats[STATS_DAMAGE], id"DMG"t_sWpndistance(g_izUserAttackerDistance[id]))
         }
         else
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L^n"t_sNameizStats[STATS_HITS], id"HIT_S"izStats[STATS_DAMAGE], id"DMG")
      }
   }
    
   if (!
iFound)
      
sBuffer[0] = 0
    
   
return iFound
}
 
// Get and format victims header and list
get_victims(idsBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
izStats[8], izBody[8]
   new 
iVictim
   
new iFoundiLen
   
new iMaxPlayer get_maxplayers()
 
   
iFound 0
   sBuffer
[0] = 0
 
   
// Get and format header.
   // Make sure shots is greater than zero or division by zero will occur.
   // To print a '%', 4 of them must done in a row.
   
izStats[STATS_SHOTS] = 0
   get_user_vstats
(id0izStatsizBody)
    
   if (
izStats[STATS_SHOTS])
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L -- %0.2f%% %L:^n"id"VICTIMS"accuracy(izStats), id"ACC")
   else
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L:^n"id"VICTIMS")
 
   for (
iVictim 1iVictim <= iMaxPlayeriVictim++)
   {
      if (
get_user_vstats(idiVictimizStatsizBodyt_sWpnMAX_WEAPON_LENGTH))
      {
         
iFound 1
         get_user_name
(iVictimt_sNameMAX_NAME_LENGTH)
          
         if (
izStats[STATS_DEATHS])
         {
            if (!
ShowDistHS)
               
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L / %s^n"t_sNameizStats[STATS_HITS], id"HIT_S"
                           
izStats[STATS_DAMAGE], id"DMG"t_sWpn)
            else if (
izStats[STATS_HS])
               
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L / %s / %0.0f m / HS^n"t_sNameizStats[STATS_HITS], id"HIT_S"
                           
izStats[STATS_DAMAGE], id"DMG"t_sWpndistance(g_izUserVictimDistance[id][iVictim]))
            else
               
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L / %s / %0.0f m^n"t_sNameizStats[STATS_HITS], id"HIT_S"
                           
izStats[STATS_DAMAGE], id"DMG"t_sWpndistance(g_izUserVictimDistance[id][iVictim]))
         }
         else
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%s -- %d %L / %d %L^n"t_sNameizStats[STATS_HITS], id"HIT_S"izStats[STATS_DAMAGE], id"DMG")
      }
   }
    
   if (!
iFound)
      
sBuffer[0] = 0
 
   
return iFound
}
 
// Get and format kill info.
get_kill_info(idiKillersBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
iFoundiLen
 
   iFound 
0
   sBuffer
[0] = 0
 
   
if (iKiller && iKiller != id)
   {
      new 
izAStats[8], izABody[8], izVStats[8], iaVBody[8]
 
      
iFound 1
      get_user_name
(iKillert_sNameMAX_NAME_LENGTH)
 
      
izAStats[STATS_HITS] = 0
      izAStats
[STATS_DAMAGE] = 0
      t_sWpn
[0] = 0
      get_user_astats
(idiKillerizAStatsizABodyt_sWpnMAX_WEAPON_LENGTH)
 
      
izVStats[STATS_HITS] = 0
      izVStats
[STATS_DAMAGE] = 0
      get_user_vstats
(idiKillerizVStatsiaVBody)
 
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L^n"id"KILLED_YOU_DIST"t_sNamet_sWpndistance(g_izUserAttackerDistance[id]))
      
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%L^n"id"DID_DMG_HITS"izAStats[STATS_DAMAGE], izAStats[STATS_HITS], g_izKilled[id][KILLED_KILLER_HEALTH], g_izKilled[id][KILLED_KILLER_ARMOUR])
      
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%L^n"id"YOU_DID_DMG"izVStats[STATS_DAMAGE], izVStats[STATS_HITS])
   }
    
   return 
iFound
}
 
// Get and format most disruptive.
add_most_disruptive(sBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
idiMaxDamageIdiMaxDamageiMaxHeadShots
 
   iMaxDamageId 
0
   iMaxDamage 
0
   iMaxHeadShots 
0
 
   
// Find player.
   
for (id 1id MAX_PLAYERSid++)
   {
      if (
g_izUserRndStats[id][STATS_DAMAGE] >= iMaxDamage && (g_izUserRndStats[id][STATS_DAMAGE] > iMaxDamage || g_izUserRndStats[id][STATS_HS] > iMaxHeadShots))
      {
         
iMaxDamageId id
         iMaxDamage 
g_izUserRndStats[id][STATS_DAMAGE]
         
iMaxHeadShots g_izUserRndStats[id][STATS_HS]
      }
   }
 
   
// Format statistics.
   
if (iMaxDamageId)
   {
      
id iMaxDamageId
       
      
new Float:fGameEff effec(g_izUserGameStats[id])
      new 
Float:fRndAcc accuracy(g_izUserRndStats[id])
       
      
format(t_sTextMAX_TEXT_LENGTH"%L: %s^n%d %L / %d %L -- %0.2f%% %L / %0.2f%% %L^n"LANG_SERVER"MOST_DMG"g_izUserRndName[id], 
            
g_izUserRndStats[id][STATS_HITS], LANG_SERVER"HIT_S"iMaxDamageLANG_SERVER"DMG"fGameEffLANG_SERVER"EFF"fRndAccLANG_SERVER"ACC")
      
add(sBufferMAX_BUFFER_LENGTHt_sText)
   }
    
   return 
iMaxDamageId
}
 
// Get and format best score.
add_best_score(sBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
idiMaxKillsIdiMaxKillsiMaxHeadShots
 
   iMaxKillsId 
0
   iMaxKills 
0
   iMaxHeadShots 
0
 
   
// Find player
   
for (id 1id MAX_PLAYERSid++)
   {
      if (
g_izUserRndStats[id][STATS_KILLS] >= iMaxKills && (g_izUserRndStats[id][STATS_KILLS] > iMaxKills || g_izUserRndStats[id][STATS_HS] > iMaxHeadShots))
      {
         
iMaxKillsId id
         iMaxKills 
g_izUserRndStats[id][STATS_KILLS]
         
iMaxHeadShots g_izUserRndStats[id][STATS_HS]
      }
   }
 
   
// Format statistics.
   
if (iMaxKillsId)
   {
      
id iMaxKillsId
       
      
new Float:fGameEff effec(g_izUserGameStats[id])
      new 
Float:fRndAcc accuracy(g_izUserRndStats[id])
       
      
format(t_sTextMAX_TEXT_LENGTH"%L: %s^n%d %L / %d hs -- %0.2f%% %L / %0.2f%% %L^n"LANG_SERVER"BEST_SCORE"g_izUserRndName[id], 
            
iMaxKillsLANG_SERVER"KILL_S"iMaxHeadShotsfGameEffLANG_SERVER"EFF"fRndAccLANG_SERVER"ACC")
      
add(sBufferMAX_BUFFER_LENGTHt_sText)
   }
    
   return 
iMaxKillsId
}
 
// Get and format team score.
add_team_score(sBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS]
 
   
// Calculate team stats
   
for (new iTeam 0iTeam MAX_TEAMSiTeam++)
   {
      
fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam])
      
fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam])
      
fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam])
   }
 
   
// Format round team stats, MOTD
   
format(t_sTextMAX_TEXT_LENGTH"TERRORIST %d / %0.2f%% %L / %0.2f%% %L^nCT %d / %0.2f%% %L / %0.2f%% %L^n"g_izTeamScore[0], 
         
fzMapEff[0], LANG_SERVER"EFF"fzRndAcc[0], LANG_SERVER"ACC"g_izTeamScore[1], fzMapEff[1], LANG_SERVER"EFF"fzRndAcc[1], LANG_SERVER"ACC")
   
add(sBufferMAX_BUFFER_LENGTHt_sText)
}
 
// Get and format team stats, chat version
save_team_chatscore()
{
   new 
Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS]
 
   
// Calculate team stats
   
for (new iTeam 0iTeam MAX_TEAMSiTeam++)
   {
      
fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam])
      
fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam])
      
fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam])
   }
 
   
// Format game team stats, chat
   
format(g_sScoreMAX_BUFFER_LENGTH"TERRORIST %d / %0.2f%% %L / %0.2f%% %L  --  CT %d / %0.2f%% %L / %0.2f%% %L"g_izTeamScore[0], 
         
fzMapEff[0], LANG_SERVER"EFF"fzMapAcc[0], LANG_SERVER"ACC"g_izTeamScore[1], fzMapEff[1], LANG_SERVER"EFF"fzMapAcc[1], LANG_SERVER"ACC")
}
 
// Get and format total stats.
add_total_stats(sBuffer[MAX_BUFFER_LENGTH 1])
{
   
format(t_sTextMAX_TEXT_LENGTH"%L: %d %L / %d hs -- %d %L / %d %L^n"LANG_SERVER"TOTAL"g_izUserRndStats[0][STATS_KILLS], LANG_SERVER"KILL_S"
         
g_izUserRndStats[0][STATS_HS], g_izUserRndStats[0][STATS_HITS], LANG_SERVER"HITS"g_izUserRndStats[0][STATS_SHOTS], LANG_SERVER"SHOT_S")
   
add(sBufferMAX_BUFFER_LENGTHt_sText)
}
 
// Get and format a user's list of body hits from an attacker.
add_attacker_hits(idiAttackersBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
iFound 0
    
   
if (iAttacker && iAttacker != id)
   {
      new 
izStats[8], izBody[8], iLen
 
      izStats
[STATS_HITS] = 0
      get_user_astats
(idiAttackerizStatsizBody)
 
      if (
izStats[STATS_HITS])
      {
         
iFound 1
         iLen 
strlen(sBuffer)
         
get_user_name(iAttackert_sNameMAX_NAME_LENGTH)
          
         
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%L:^n"id"HITS_YOU_IN"t_sName)
          
         for (new 
18i++)
         {
            if (!
izBody[i])
               continue
             
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%L: %d^n"idBODY_PART[i], izBody[i])
         }
      }
   }
    
   return 
iFound
}
 
// Get and format killed stats: killer hp, ap, hits.
format_kill_ainfo(idiKillersBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
iFound 0
    
   
if (iKiller && iKiller != id)
   {
      new 
izStats[8], izBody[8]
      new 
iLen
       
      iFound 
1
      get_user_name
(iKillert_sNameMAX_NAME_LENGTH)
      
izStats[STATS_HITS] = 0
      get_user_astats
(idiKillerizStatsizBodyt_sWpnMAX_WEAPON_LENGTH)
 
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L $g[$g%dhp and $g%dap$g] "id"KILLED_BY_WITH"t_sNamet_sWpndistance(g_izUserAttackerDistance[id]), g_izKilled[id][KILLED_KILLER_HEALTH], g_izKilled[id][KILLED_KILLER_ARMOUR])
 
      if (
izStats[STATS_HITS])
      {
         for (new 
18i++)
         {
            if (!
izBody[i])
               continue
             
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen" %L: %d"idBODY_PART[i], izBody[i])
         }
      }
      else
         
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen" %L"id"NO_HITS")
   }
   else
      
format(sBufferMAX_BUFFER_LENGTH"%L"id"YOU_NO_KILLER")
    
   return 
iFound
}
 
// Get and format killed stats: hits, damage on killer.
format_kill_vinfo(idiKillersBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
iFound 0
   
new izStats[8]
   new 
izBody[8]
   new 
iLen
 
   izStats
[STATS_HITS] = 0
   izStats
[STATS_DAMAGE] = 0
   get_user_vstats
(idiKillerizStatsizBody)
 
   if (
iKiller && iKiller != id)
   {
      
iFound 1
      get_user_name
(iKillert_sNameMAX_NAME_LENGTH)
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L "id"YOU_HIT"t_sNameizStats[STATS_HITS], izStats[STATS_DAMAGE])
   }
   else
      
iLen format(sBufferMAX_BUFFER_LENGTH"%L "id"LAST_RES"izStats[STATS_HITS], izStats[STATS_DAMAGE])
 
   if (
izStats[STATS_HITS])
   {
      for (new 
18i++)
      {
         if (!
izBody[i])
            continue
          
         
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen" %L: %d"idBODY_PART[i], izBody[i])
      }
   }
   else
      
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen" %L"id"NO_HITS")
    
   return 
iFound
}
 
// Get and format top 15.
format_top15(sBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
iMax get_statsnum()
   new 
izStats[8], izBody[8]
   new 
iLen 0
 
   
if (iMax 15)
      
iMax 15
 
   
new lKills[16], lDeaths[16], lHits[16], lShots[16], lEff[16], lAcc[16]
    
   
format(lKills15"%L"LANG_SERVER"KILLS")
   
format(lDeaths15"%L"LANG_SERVER"DEATHS")
   
format(lHits15"%L"LANG_SERVER"HITS")
   
format(lShots15"%L"LANG_SERVER"SHOTS")
   
format(lEff15"%L"LANG_SERVER"EFF")
   
format(lAcc15"%L"LANG_SERVER"ACC")
    
   
ucfirst(lEff)
   
ucfirst(lAcc)
 
   
iLen format(sBufferMAX_BUFFER_LENGTH"<body bgcolor=#000000><font color=#FFB000><pre>"
   
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%2s %-22.22s %6s %6s %6s %6s %4s %4s %4s^n""#""Nick"lKillslDeathslHitslShots"HS"lEfflAcc)
    
   for (new 
0iMax && MAX_BUFFER_LENGTH iLen 0i++)
   {
      
get_stats(iizStatsizBodyt_sNameMAX_NAME_LENGTH)
      
replace_all(t_sNameMAX_NAME_LENGTH"<""[")
      
replace_all(t_sNameMAX_NAME_LENGTH">""]")
      
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%2d %-22.22s %6d %6d %6d %6d %4d %3.0f%% %3.0f%%^n"1t_sNameizStats[STATS_KILLS], 
                  
izStats[STATS_DEATHS], izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_HS], effec(izStats), accuracy(izStats))
   }
}
 
// Get and format rank stats.
format_rankstats(idsBuffer[MAX_BUFFER_LENGTH 1], iMyId 0)
{
   new 
izStats[8] = {0, ...}
   new 
izBody[8]
   new 
iRankPosiLen
   
new lKills[16], lDeaths[16], lHits[16], lShots[16], lDamage[16], lEff[16], lAcc[16]
    
   
format(lKills15"%L"id"KILLS")
   
format(lDeaths15"%L"id"DEATHS")
   
format(lHits15"%L"id"HITS")
   
format(lShots15"%L"id"SHOTS")
   
format(lDamage15"%L"id"DAMAGE")
   
format(lEff15"%L"id"EFF")
   
format(lAcc15"%L"id"ACC")
    
   
ucfirst(lEff)
   
ucfirst(lAcc)
    
   
iRankPos get_user_stats(idizStatsizBody)
   
iLen format(sBufferMAX_BUFFER_LENGTH"<body bgcolor=#000000><font color=#FFB000><pre>")
   
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%L %L^n^n"id, (!iMyId || iMyId == id) ? "YOUR" "PLAYERS"id"RANK_IS"iRankPosget_statsnum())
   
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%6s: %d  (%d with hs)^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %0.2f%%^n%6s: %0.2f%%^n^n"
               
lKillsizStats[STATS_KILLS], izStats[STATS_HS], lDeathsizStats[STATS_DEATHS], lHitsizStats[STATS_HITS], lShotsizStats[STATS_SHOTS], 
               
lDamageizStats[STATS_DAMAGE], lEffeffec(izStats), lAccaccuracy(izStats))
    
   new 
L_BODY_PART[8][32]
    
   for (new 
18i++)
   {
      
format(L_BODY_PART[i], 31"%L"idBODY_PART[i])
   }
    
   
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%10s:^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d^n%10s: %d""HITS"
               
L_BODY_PART[1], izBody[1], L_BODY_PART[2], izBody[2], L_BODY_PART[3], izBody[3], L_BODY_PART[4], izBody[4], L_BODY_PART[5], 
               
izBody[5], L_BODY_PART[6], izBody[6], L_BODY_PART[7], izBody[7])
}
 
// Get and format stats.
format_stats(idsBuffer[MAX_BUFFER_LENGTH 1])
{
   new 
izStats[8] = {0, ...}
   new 
izBody[8]
   new 
iWeaponiLen
   
new lKills[16], lDeaths[16], lHits[16], lShots[16], lDamage[16], lEff[16], lAcc[16], lWeapon[16]
    
   
format(lKills15"%L"id"KILLS")
   
format(lDeaths15"%L"id"DEATHS")
   
format(lHits15"%L"id"HITS")
   
format(lShots15"%L"id"SHOTS")
   
format(lDamage15"%L"id"DAMAGE")
   
format(lEff15"%L"id"EFF")
   
format(lAcc15"%L"id"ACC")
   
format(lWeapon15"%L"id"WEAPON")
    
   
ucfirst(lEff)
   
ucfirst(lAcc)
    
   
get_user_wstats(id0izStatsizBody)
    
   
iLen format(sBufferMAX_BUFFER_LENGTH"<body bgcolor=#000000><font color=#FFB000><pre>")
   
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%6s: %d  (%d with hs)^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %d^n%6s: %0.2f%%^n%6s: %0.2f%%^n^n"
               
lKillsizStats[STATS_KILLS], izStats[STATS_HS], lDeathsizStats[STATS_DEATHS], lHitsizStats[STATS_HITS], lShotsizStats[STATS_SHOTS], 
               
lDamageizStats[STATS_DAMAGE], lEffeffec(izStats), lAccaccuracy(izStats))
   
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%-12.12s  %6s  %6s  %6s  %6s  %6s  %4s^n"lWeaponlKillslDeathslHitslShotslDamagelAcc)
    
   for (
iWeapon 1iWeapon xmod_get_maxweapons() && MAX_BUFFER_LENGTH iLen iWeapon++)
   {
      if (
get_user_wstats(idiWeaponizStatsizBody))
      {
         
xmod_get_wpnname(iWeapont_sWpnMAX_WEAPON_LENGTH)
         
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%-12.12s  %6d  %6d  %6d  %6d  %6d  %3.0f%%^n"t_sWpnizStats[STATS_KILLS], izStats[STATS_DEATHS], 
                     
izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_DAMAGE], accuracy(izStats))
      }
   }
}
 
// Show round end stats. If gametime is zero then use default duration time. 
show_roundend_hudstats(idFloat:fGameTime)
{
   
// Bail out if there no HUD stats should be shown
   // for this player or end round stats not created.
   
if (!g_izStatsSwitch[id]) return
   if (!
g_sAwardAndScore[0]) return
 
   
// If round end timer is zero clear round end stats.
   
if (g_fShowStatsTime == 0.0)
   {
      
ClearSyncHud(idg_HudSync_EndRound)
#if defined STATSX_DEBUG
      
log_amx("Clear round end HUD stats for #%d"id)
#endif
   
}
 
   
// Set HUD-duration to default or remaining time.
   
new Float:fDuration
    
   
if (fGameTime == 0.0)
      
fDuration g_fHUDDuration
   
else
   {
      
fDuration g_fShowStatsTime g_fHUDDuration fGameTime
       
      
if (fDuration g_fFreezeTime g_fFreezeLimitTime)
         
fDuration g_fFreezeTime g_fFreezeLimitTime
   
}
    
   
// Show stats only if more time left than coded minimum.
   
if (fDuration >= HUD_MIN_DURATION)
   {
      
set_hudtype_endround(fDuration)
      
ShowSyncHudMsg(idg_HudSync_EndRound"%s"g_sAwardAndScore)
#if defined STATSX_DEBUG
      
log_amx("Show %1.2fs round end HUD stats for #%d"fDurationid)
#endif
   
}
}
 
// Show round end stats.
show_user_hudstats(idFloat:fGameTime)
{
   
// Bail out if there no HUD stats should be shown
   // for this player or user stats timer is zero.
   
if (!g_izStatsSwitch[id]) return
   if (
g_fzShowUserStatsTime[id] == 0.0) return
 
   
// Set HUD-duration to default or remaining time.
   
new Float:fDuration
    
   
if (fGameTime == 0.0)
      
fDuration g_fHUDDuration
   
else
   {
      
fDuration g_fzShowUserStatsTime[id] + g_fHUDDuration fGameTime
       
      
if (fDuration g_fFreezeTime g_fFreezeLimitTime)
         
fDuration g_fFreezeTime g_fFreezeLimitTime
   
}
 
   
// Show stats only if more time left than coded minimum.
   
if (fDuration >= HUD_MIN_DURATION)
   {
      if (
ShowKiller)
      {
         new 
iKiller
          
         iKiller 
g_izKilled[id][KILLED_KILLER_ID]
         
get_kill_info(idiKillerg_sBuffer)
         
add_attacker_hits(idiKillerg_sBuffer)
         
set_hudtype_killer(fDuration)
         
show_hudmessage(id"%s"g_sBuffer)
#if defined STATSX_DEBUG
         
log_amx("Show %1.2fs %suser HUD k-stats for #%d"fDurationg_sBuffer[0] ? "" "no "id)
#endif
      
}
       
      if (
ShowVictims)
      {
         
get_victims(idg_sBuffer)
         
set_hudtype_victim(fDuration)
         
show_hudmessage(id"%s"g_sBuffer)
#if defined STATSX_DEBUG
         
log_amx("Show %1.2fs %suser HUD v-stats for #%d"fDurationg_sBuffer[0] ? "" "no "id)
#endif
      
}
       
      if (
ShowAttackers)
      {
         
get_attackers(idg_sBuffer)
         
set_hudtype_attacker(fDuration)
         
show_hudmessage(id"%s"g_sBuffer)
#if defined STATSX_DEBUG
         
log_amx("Show %1.2fs %suser HUD a-stats for #%d"fDurationg_sBuffer[0] ? "" "no "id)
#endif
      
}
   }
}
 
//------------------------------------------------------------
// Plugin commands
//------------------------------------------------------------
 
// Set or get plugin config flags.
public cmdPluginMode(idlevelcid)
{
   if (!
cmd_access(idlevelcid1)) 
      return 
PLUGIN_HANDLED
    
   
if (read_argc() > 1)
      
read_argv(1g_sBufferMAX_BUFFER_LENGTH)
   else
      
g_sBuffer[0] = 0
    
   set_plugin_mode
(idg_sBuffer)
    
   return 
PLUGIN_HANDLED
}
 
// Display MOTD stats.
public cmdStatsMe(id)
{
   if (!
SayStatsMe)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
 
   
format_stats(idg_sBuffer)
   
get_user_name(idt_sNameMAX_NAME_LENGTH)
   
show_motd(idg_sBuffert_sName)
    
   return 
PLUGIN_CONTINUE
}
 
// Display MOTD rank.
public cmdRankStats(id)
{
   if (!
SayRankStats)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
    
   
format_rankstats(idg_sBuffer)
   
get_user_name(idt_sNameMAX_NAME_LENGTH)
   
show_motd(idg_sBuffert_sName)
    
   return 
PLUGIN_CONTINUE
}
 
// Display MOTD top15 ranked.
/*
public cmdTop15(id)
{
   if (!SayTop15)
   {
      client_print(id, print_chat, "%L", id, "DISABLED_MSG")
      return PLUGIN_HANDLED
   }
    
   format_top15(g_sBuffer)
   show_motd(id, g_sBuffer, "Top 15")
    
   return PLUGIN_CONTINUE
}
*/ 
// Display killer information.
public cmdHp(id)
{
   if (!
SayHP)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
    
   new 
iKiller g_izKilled[id][KILLED_KILLER_ID]
    
   
format_kill_ainfo(idiKillerg_sBuffer)
   
colorChat(idCHATCOLOR_NORMAL"^3[^3Rank^3] %s"g_sBuffer)
    
   return 
PLUGIN_CONTINUE
}
 
// Display user stats.
public cmdMe(id)
{
   if (!
SayMe)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
    
   
format_kill_vinfo(id0g_sBuffer)
   
colorChat(idCHATCOLOR_NORMAL"^3[^3Rank^3] %s"g_sBuffer)
    
   return 
PLUGIN_CONTINUE
}
 
// Display user rank
public cmdRank(id)
{
   if (!
SayRank)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
 
   new 
izStats[8], izBody[8]
   new 
iRankPosiRankMax
   
new Float:fEffFloat:fAcc
    
   iRankPos 
get_user_stats(idizStatsizBody)
   
iRankMax get_statsnum()
    
   
fEff effec(izStats)
   
fAcc accuracy(izStats)
    
   
colorChat(idCHATCOLOR_NORMAL"^3[^3Rank^3] %L"id"YOUR_RANK_IS"iRankPosiRankMaxizStats[STATS_KILLS], izStats[STATS_HITS], fEfffAcc)
    
   return 
PLUGIN_CONTINUE
}
 
// Report user weapon status to team.
public cmdReport(id)
{
   if (!
SayReport)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
    
   new 
iWeaponiClipiAmmoiHealthiArmor
    
   iWeapon 
get_user_weapon(idiClipiAmmo
    
   if (
iWeapon != 0)
      
xmod_get_wpnname(iWeapont_sWpnMAX_WEAPON_LENGTH)
    
   
iHealth get_user_health(id
   
iArmor get_user_armor(id)
    
   new 
lWeapon[16]
    
   
format(lWeapon15"%L"id"WEAPON")
   
strtolower(lWeapon)
    
   if (
iClip >= 0)
   {
      
format(g_sBufferMAX_BUFFER_LENGTH"%s: %s, %L: %d/%d, %L: %d, %L: %d"lWeapont_sWpnLANG_SERVER"AMMO"iClipiAmmoLANG_SERVER"HEALTH"iHealthLANG_SERVER"ARMOR"iArmor
   }
   else
      
format(g_sBufferMAX_BUFFER_LENGTH"%s: %s, %L: %d, %L: %d"lWeapont_sWpn[7], LANG_SERVER"HEALTH"iHealthLANG_SERVER"ARMOR"iArmor
    
   
engclient_cmd(id"say_team"g_sBuffer)
    
   return 
PLUGIN_CONTINUE

 
// Display team map score
public cmdScore(id)
{
   if (!
SayScore)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
    
   
client_print(idprint_chat"%L: %s"id"GAME_SCORE"g_sScore)
    
   return 
PLUGIN_CONTINUE
}
 
// Client switch to enable or disable stats announcements.
public cmdSwitch(id)
{
   
g_izStatsSwitch[id] = (g_izStatsSwitch[id]) ? : -1
   num_to_str
(g_izStatsSwitch[id], t_sTextMAX_TEXT_LENGTH)
   
client_cmd(id"setinfo _amxstatsx %s"t_sText)
    
   new 
lEnDis[32]
    
   
format(lEnDis31"%L"idg_izStatsSwitch[id] ? "ENABLED" "DISABLED")
   
client_print(idprint_chat"^3[^3Rank^3] %L"id"STATS_ANNOUNCE"lEnDis)
    
   return 
PLUGIN_CONTINUE
}
 
// Player stats menu.
public cmdStats(id)
{
   if (!
SayStatsAll)
   {
      
client_print(idprint_chat"%L"id"DISABLED_MSG")
      return 
PLUGIN_HANDLED
   
}
    
   
showStatsMenu(idg_izUserMenuPosition[id] = 0)
    
   return 
PLUGIN_CONTINUE
}
 
//--------------------------------
// Menu
//--------------------------------
 
public actionStatsMenu(idkey)
{
   switch (
key)
   {
      
// Key '1' to '7', execute action on this option
      
case 0..6:
      {
         new 
iOptioniIndex
         iOption 
= (g_izUserMenuPosition[id] * PPL_MENU_OPTIONS) + key
          
         
if (iOption >= && iOption 32)
         {
            
iIndex g_izUserMenuPlayers[id][iOption]
          
            if (
is_user_connected(iIndex))
            {
               switch (
g_izUserMenuAction[id])
               {
                  case 
0format_stats(iIndexg_sBuffer)
                  case 
1format_rankstats(iIndexg_sBufferid)
                  default: 
g_sBuffer[0] = 0
               
}
                
               if (
g_sBuffer[0])
               {
                  
get_user_name(iIndext_sNameMAX_NAME_LENGTH)
                  
show_motd(idg_sBuffert_sName)
               }
            }
         }
          
         
showStatsMenu(idg_izUserMenuPosition[id])
      }
      
// Key '8', change action
      
case 7:
      {
         
g_izUserMenuAction[id]++
          
         if (
g_izUserMenuAction[id] >= MAX_PPL_MENU_ACTIONS)
            
g_izUserMenuAction[id] = 0
          
         showStatsMenu
(idg_izUserMenuPosition[id])
      }
      
// Key '9', select next page of options
      
case 8showStatsMenu(id, ++g_izUserMenuPosition[id])
      
// Key '10', cancel or go back to previous menu
      
case 9:
      {
         if (
g_izUserMenuPosition[id] > 0)
            
showStatsMenu(id, --g_izUserMenuPosition[id])
      }
   }
    
   return 
PLUGIN_HANDLED
}
 
new 
g_izUserMenuActionText[MAX_PPL_MENU_ACTIONS][] = {"Show stats""Show rank stats"}
 
showStatsMenu(idiMenuPos)
{
   new 
iLeniKeyMaskiPlayers
   
new iUserIndexiMenuPosMaxiMenuOptioniMenuOptionMax
    
   get_players
(g_izUserMenuPlayers[id], iPlayers)
   
iMenuPosMax = ((iPlayers 1) / PPL_MENU_OPTIONS) + 1
    
   
// If menu pos does not excist use last menu (if players has left)
   
if (iMenuPos >= iMenuPosMax)
      
iMenuPos iMenuPosMax 1
 
   iUserIndex 
iMenuPos PPL_MENU_OPTIONS
   iLen 
format(g_sBufferMAX_BUFFER_LENGTH"\y%L\R%d/%d^n\w^n"id"SERVER_STATS"iMenuPos 1iMenuPosMax)
   
iMenuOptionMax iPlayers iUserIndex
    
   
if (iMenuOptionMax PPL_MENU_OPTIONS
      
iMenuOptionMax PPL_MENU_OPTIONS
    
   
for (iMenuOption 0iMenuOption iMenuOptionMaxiMenuOption++)
   {
      
get_user_name(g_izUserMenuPlayers[id][iUserIndex++], t_sNameMAX_NAME_LENGTH)
      
iKeyMask |= (1<<iMenuOption)
      
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH iLen"%d. %s^n\w"iMenuOption 1t_sName)
   }
    
   
iKeyMask |= MENU_KEY_8|MENU_KEY_0
   iLen 
+= format(g_sBuffer[iLen], MAX_BUFFER_LENGTH iLen"^n8. %s^n\w"g_izUserMenuActionText[g_izUserMenuAction[id]])
    
   if (
iPlayers iUserIndex)
   {
      
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH iLen"^n9. %L..."id"MORE")
      
iKeyMask |= MENU_KEY_9
   
}
    
   if (
iMenuPos 0)
      
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH iLen"^n0. %L"id"BACK")
   else
      
iLen += format(g_sBuffer[iLen], MAX_BUFFER_LENGTH iLen"^n0. %L"id"EXIT")
    
   
show_menu(idiKeyMaskg_sBuffer, -1"Server Stats")
    
   return 
PLUGIN_HANDLED
}
 
//------------------------------------------------------------
// Plugin events
//------------------------------------------------------------
 
// Reset game stats on game start and restart.
public eventStartGame()
{
   
read_data(2t_sTextMAX_TEXT_LENGTH)
    
   if (
t_sText[6] == 'w')
   {
      
read_data(3t_sTextMAX_TEXT_LENGTH)
      
g_fStartGame get_gametime() + float(str_to_num(t_sText))
   }
   else
      
g_fStartGame get_gametime()
    
   return 
PLUGIN_CONTINUE
}
 
// Round start
public eventStartRound()
{
   new 
iTeamidi
    
   
new Float:roundtime get_cvar_float("mp_roundtime");
   if (
read_data(1) >= floatround(roundtime 60.0,floatround_floor) || (roundtime == 2.3 && read_data(1) == 137)) // these round too weird for it to work through pawn, have to add an exception for it
   
{
#if defined STATSX_DEBUG
      
log_amx("Reset round stats")
#endif
       
      // Reset game stats on game start and restart.
      
if (g_fStartGame 0.0 && g_fStartGame <= get_gametime())
      {
#if defined STATSX_DEBUG
         
log_amx("Reset game stats")
#endif
         
g_fStartGame 0.0
 
         
// Clear team and game stats.
         
for (iTeam 0iTeam MAX_TEAMSiTeam++)
         {
            
g_izTeamEventScore[iTeam] = 0
             
            
for (08i++)
               
g_izTeamGameStats[iTeam][i] = 0
         
}
 
         
// Clear game stats, incl '0' that is sum of all users.
         
for (id 0id MAX_PLAYERSid++)
         {
            for (
08i++)
               
g_izUserGameStats[id][i] = 0
         
}
      }
 
      
// Update team score with "TeamScore" event values and
      // clear team round stats.
      
for (iTeam 0iTeam MAX_TEAMSiTeam++)
      {
         
g_izTeamScore[iTeam] = g_izTeamEventScore[iTeam]
          
         for (
08i++)
            
g_izTeamRndStats[iTeam][i] = 0
      
}
 
      
// Clear user round stats, incl '0' that is sum of all users.
      
for (id 0id MAX_PLAYERSid++)
      {
         
g_izUserRndName[id][0] = 0
          
         
for (08i++)
            
g_izUserRndStats[id][i] = 0
          
         g_fzShowUserStatsTime
[id] = 0.0
      
}
 
      
// Allow end round stats and reset end round triggered indicator.
      
g_iRoundEndTriggered 0
      g_iRoundEndProcessed 
0
      g_fShowStatsTime 
0.0
 
      
// Update local configuration vars with value in cvars.
      
get_config_cvars()
   }
 
   return 
PLUGIN_CONTINUE
}
 
// Reset killer info on round restart.
public eventResetHud(id)
{
   new 
args[1]
   
args[0] = id
    
   
if (g_iPluginMode MODE_HUD_DELAY)
      
set_task(0.01"delay_resethud"200 idargs1)
   else
      
delay_resethud(args)
    
   return 
PLUGIN_CONTINUE
}
 
public 
delay_resethud(args[])
{
   new 
id args[0]
   new 
Float:fGameTime
 
   
// Show user and score round stats after HUD-reset
#if defined STATSX_DEBUG
   
log_amx("Reset HUD for #%d"id)
#endif
   
fGameTime get_gametime()
   
show_user_hudstats(idfGameTime)
   
show_roundend_hudstats(idfGameTime)
 
   
// Reset round stats
   
g_izKilled[id][KILLED_KILLER_ID] = 0
   g_izKilled
[id][KILLED_KILLER_STATSFIX] = 0
   g_izShowStatsFlags
[id] = -1      // Initialize flags
   
g_fzShowUserStatsTime[id] = 0.0
   g_izUserAttackerDistance
[id] = 0
    
   
for (new 0MAX_PLAYERSi++)
      
g_izUserVictimDistance[id][i] = 0
    
   
return PLUGIN_CONTINUE
}
 
// Save killer info on death.
public client_death(killervictimwpnindexhitplaceTK)
{
   
// Bail out if no killer.
   
if (!killer)
      return 
PLUGIN_CONTINUE
 
   
if (killer != victim)
   {
      new 
iaVOrigin[3], iaKOrigin[3]
      new 
iDistance
       
      get_user_origin
(victimiaVOrigin)
      
get_user_origin(killeriaKOrigin)
       
      
g_izKilled[victim][KILLED_KILLER_ID] = killer
      g_izKilled
[victim][KILLED_KILLER_HEALTH] = get_user_health(killer)
      
g_izKilled[victim][KILLED_KILLER_ARMOUR] = get_user_armor(killer)
      
g_izKilled[victim][KILLED_KILLER_STATSFIX] = 0
 
      iDistance 
get_distance(iaVOriginiaKOrigin)
      
g_izUserAttackerDistance[victim] = iDistance
      g_izUserVictimDistance
[killer][victim] = iDistance
   
}
    
   
g_izKilled[victim][KILLED_TEAM] = get_user_team(victim)
   
g_izKilled[victim][KILLED_KILLER_STATSFIX] = 1
 
   
// Display kill stats for the player if round
   // end stats was not processed.
   
if (!g_iRoundEndProcessed)
      
kill_stats(victim)
 
   return 
PLUGIN_CONTINUE
}
 
// Display hudmessage stats on death.
// This will also update all round and game stats.
// Must be called at least once per round.
kill_stats(id)
{
   
// Bail out if user stats timer is non-zero, 
   // ie function already called.
   
if (g_fzShowUserStatsTime[id] > 0.0)
   {
      return
   }
       
   new 
team get_user_team(id)
   if (
team || team 2)
   {
      return
   }
 
   
// Flag kill stats displayed for this player.
   
g_fzShowUserStatsTime[id] = get_gametime()
 
   
// Add user death stats to user round stats
   
new izStats[8], izBody[8]
   new 
iTeami
   
new iKiller
 
   iKiller 
g_izKilled[id][KILLED_KILLER_ID]
 
   
// Get user's team (if dead use the saved team)
   
if (iKiller)
      
iTeam g_izKilled[id][KILLED_TEAM] - 1
   
else
      
iTeam get_user_team(id) - 1
 
   get_user_name
(idg_izUserRndName[id], MAX_NAME_LENGTH)
 
   if (
get_user_rstats(idizStatsizBody))
   {
      
// Update user's team round stats
      
if (iTeam >= && iTeam MAX_TEAMS)
      {
         for (
08i++)
         {
            
g_izTeamRndStats[iTeam][i] += izStats[i]
            
g_izTeamGameStats[iTeam][i] += izStats[i]
            
g_izUserRndStats[0][i] += izStats[i]
            
g_izUserGameStats[0][i] += izStats[i]
         }
      }
 
      
// Update user's round stats
      
if (g_izUserUserID[id] == get_user_userid(id))
      {
         for (
08i++)
         {
            
g_izUserRndStats[id][i] += izStats[i]
            
g_izUserGameStats[id][i] += izStats[i]
         }
      } else {
         
g_izUserUserID[id] = get_user_userid(id)
          
         for (
08i++)
         {
            
g_izUserRndStats[id][i] = izStats[i]
            
g_izUserGameStats[id][i] = izStats[i]
         }
      }
 
   }   
// endif (get_user_rstats())
 
   // Report stats in the chat section, if player is killed.
   
if (KillerChat && iKiller && iKiller != id)
   {
      if (
format_kill_ainfo(idiKillerg_sBuffer))
      {
         
colorChat(idCHATCOLOR_NORMAL"^1[^4Инфо^1] %s"g_sBuffer)
         
format_kill_vinfo(idiKillerg_sBuffer)
      }
       
      
colorChat(idCHATCOLOR_NORMAL"^1[^4Инфо^1] %s"g_sBuffer);
   }
 
   
// Display player stats info.
#if defined STATSX_DEBUG
   
log_amx("Kill stats for #%d"id)
#endif
   
show_user_hudstats(id0.0)
}
 
public 
eventEndRound()
{
   
// Update local configuration vars with value in cvars.
   
get_config_cvars()
 
   
// If first end round event in the round, calculate team score.
   
if (!g_iRoundEndTriggered)
   {
      
read_data(2t_sTextMAX_TEXT_LENGTH)
       
      if (
t_sText[7] == 't')         // Terrorist wins
         
g_izTeamScore[0]++
      else if (
t_sText[7] == 'c')      // CT wins
         
g_izTeamScore[1]++
   }
 
   
set_task(0.3"ERTask"997)
    
   return 
PLUGIN_CONTINUE
}
 
public 
ERTask()
{
   
// Flag round end triggered.
   
g_iRoundEndTriggered 1
 
   
// Display round end stats to all players.
   
endround_stats()
}
 
endround_stats()
{
   
// Bail out if end round stats has already been processed
   // or round end not triggered.
   
if (g_iRoundEndProcessed || !g_iRoundEndTriggered)
      return
 
   new 
iaPlayers[32], iPlayeriPlayersid
 
   get_players
(iaPlayersiPlayers)
 
   
// Display attacker & victim list for all living players.
   // This will also update all round and game stats for all players
   // not killed.
#if defined STATSX_DEBUG
   
log_amx("End round stats")
#endif
    
   
for (iPlayer 0iPlayer iPlayersiPlayer++)
   {
      
id iaPlayers[iPlayer]
       
      if (
g_fzShowUserStatsTime[id] == 0.0)
      {
         
kill_stats(id)
      }
   }
 
   
g_sAwardAndScore[0] = 0
 
   
// Create round awards.
   
if (ShowMostDisruptive)
      
add_most_disruptive(g_sAwardAndScore)
   if (
ShowBestScore)
      
add_best_score(g_sAwardAndScore)
 
   
// Create round score. 
   // Compensate HUD message if awards are disabled.
   
if (ShowTeamScore || ShowTotalStats)
   {
      if (
ShowMostDisruptive && ShowBestScore)
         
add(g_sAwardAndScoreMAX_BUFFER_LENGTH"^n^n")
      else if (
ShowMostDisruptive || ShowBestScore)
         
add(g_sAwardAndScoreMAX_BUFFER_LENGTH"^n^n^n^n")
      else
         
add(g_sAwardAndScoreMAX_BUFFER_LENGTH"^n^n^n^n^n^n")
 
      if (
ShowTeamScore)
         
add_team_score(g_sAwardAndScore)
       
      if (
ShowTotalStats)
         
add_total_stats(g_sAwardAndScore)
   }
 
   
save_team_chatscore()
 
   
// Get and save round end stats time.
   
g_fShowStatsTime get_gametime()
 
   
// Display round end stats to all players.
   
for (iPlayer 0iPlayer iPlayersiPlayer++)
   {
      
id iaPlayers[iPlayer]
      
show_roundend_hudstats(id0.0)
   }
 
   
// Flag round end processed.
   
g_iRoundEndProcessed 1
}
 
public 
eventTeamScore()
{
   new 
sTeamID[1], iTeamScore
   read_data
(1sTeamID1)
   
iTeamScore read_data(2)
   
g_izTeamEventScore[(sTeamID[0] == 'C') ? 0] = iTeamScore
    
   
return PLUGIN_CONTINUE
}
 
public 
eventIntermission()
{
   if (
EndPlayer || EndTop15)
      
set_task(1.0"end_game_stats"900)
}
 
public 
end_game_stats()
{
   new 
iaPlayers[32], iPlayeriPlayersid
 
   
if (EndPlayer)
   {
      
get_players(iaPlayersiPlayers)
       
      for (
iPlayer 0iPlayer iPlayersiPlayer++)
      {
         
id iaPlayers[iPlayer]
          
         if (!
g_izStatsSwitch[id])
            continue   
// Do not show any stats
          
         
cmdStatsMe(iaPlayers[iPlayer])
      }
   }
   else if (
EndTop15)
   {
      
get_players(iaPlayersiPlayers)
      
format_top15(g_sBuffer)
       
      for (
iPlayer 0iPlayer iPlayersiPlayer++)
      {
         
id iaPlayers[iPlayer]
          
         if (!
g_izStatsSwitch[id])
            continue   
// Do not show any stats
          
         
show_motd(iaPlayers[iPlayer], g_sBuffer"Top 15")
      }
   }
    
   return 
PLUGIN_CONTINUE
}
 
public 
eventSpecMode(id)
{
   new 
sData[12]
   
read_data(2sData11)
   
g_izSpecMode[id] = (sData[10] == '2')
    
   return 
PLUGIN_CONTINUE

 
public 
eventShowRank(id)
{
   if (
SpecRankInfo && g_izSpecMode[id])
   {
      new 
iPlayer read_data(2)
       
      if (
is_user_connected(iPlayer))
      {
         new 
izStats[8], izBody[8]
         new 
iRankPosiRankMax
          
         get_user_name
(iPlayert_sNameMAX_NAME_LENGTH)
          
         
iRankPos get_user_stats(iPlayerizStatsizBody)
         
iRankMax get_statsnum()
          
         
set_hudtype_specmode()
         
ShowSyncHudMsg(idg_HudSync_SpecInfo"%L"id"X_RANK_IS"t_sNameiRankPosiRankMax)
      }
   }
    
   return 
PLUGIN_CONTINUE
}
 
public 
client_connect(id)
{
   if (
ShowStats)
   {
      
get_user_info(id"_amxstatsx"t_sTextMAX_TEXT_LENGTH)
      
g_izStatsSwitch[id] = (t_sText[0]) ? str_to_num(t_sText) : -1
   
}
   else
      
g_izStatsSwitch[id] = 0
 
   g_izKilled
[id][KILLED_KILLER_ID] = 0
   g_izKilled
[id][KILLED_KILLER_STATSFIX] = 0
   g_izShowStatsFlags
[id] = 0      // Clear all flags
   
g_fzShowUserStatsTime[id] = 0.0
 
   
return PLUGIN_CONTINUE
}

public 
cmdTop15(id)
{
    if (!
SayTop15)
    {
        
client_print(idprint_chat"%L"id"DISABLED_MSG")
        return 
PLUGIN_HANDLED
    
}
    
    
//format_top15(g_sBuffer)
    //show_motd(id, g_sBuffer, "Top 15")
    
    
format_place1(g_sBuffer)
    
show_motd(idg_sBuffer"Top 10")
    
    return 
PLUGIN_CONTINUE
}

public 
cmdPlace1(id)
{
    if (!
SayTop15)
    {
        return 
PLUGIN_HANDLED
    
}
    
    new 
szMotdTitle[30]
    
    if(
get_pcvar_num(pcvar_style))
    {
        
formatex(szMotdTitlecharsmax(szMotdTitle), "10%L",id"MM_PLACE")
    }
    else
    {
        
szMotdTitle "Top 15"
    
}
    
    
format_place1(g_sBuffer)
    
show_motd(idg_sBufferszMotdTitle)


    return 
PLUGIN_CONTINUE
}

format_all_themes(sBuffer[MAX_BUFFER_LENGTH 1], iLen)
{
    if(
get_pcvar_num(pcvar_design)<= STATSX_SHELL_DESIGN_MAX)
    {
        
iDesign get_pcvar_num(pcvar_design)
    }
    else
    {
        if(
get_pcvar_num(pcvar_design) == (STATSX_SHELL_DESIGN_MAX 1))
        {
            
iDesign random_num(1,STATSX_SHELL_DESIGN_MAX)
        }
    }
            
    switch(
iDesign)
    {
        case 
1:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN1_STYLE)
        }
        
        case 
2:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN2_STYLE)
        }
        
        case 
3:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN3_STYLE)
        }
        
        case 
4:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN4_STYLE)
        }
        
        case 
5:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN5_STYLE)
        }
        
        case 
6:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN6_STYLE)
        }
        
        case 
7:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN7_STYLE)
        }
        
        case 
8:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN8_STYLE)
        }
        
        case 
9:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN9_STYLE)
        }
        
        case 
10:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN10_STYLE)
        }
        
        case 
11:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN11_STYLE)
        }
        
        case 
12:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN12_STYLE)
        }
        
        case 
13:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DESIGN13_STYLE)
        }

        default:
        {
            
iLen format(sBufferMAX_BUFFER_LENGTHSTATSX_SHELL_DEFAULT_STYLE)            
        }
    }
        
    return 
iLen
}

format_all_stats(sBuffer[MAX_BUFFER_LENGTH 1], izStats[8], izBody[8], iLeni)
{
    
get_stats(iizStatsizBodyt_sNameMAX_NAME_LENGTH)
    
replace_all(t_sNameMAX_NAME_LENGTH"<""&lt")
    
replace_all(t_sNameMAX_NAME_LENGTH">""&gt")
        
    if (
szTrigger)
    {
        
szTrigger false
        
        
if(get_pcvar_num(pcvar_style))
        {
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<tr><td>%d<td>%s<td>%d<td>%d<td>%d"1t_sNameizStats[STATS_KILLS], 
                
izStats[STATS_DEATHS], izStats[STATS_HS])
                
            if(((
effec(izStats) + accuracy(izStats)) / 2) < 50)
            {
                
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<td><img id=r width=%3.0f%%>%2.0f%%</tr>", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
            }
            else
            {
                    
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<td><img width=%3.0f%%>%2.0f%%</tr>", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
            }
        }
        else
        {
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<tr><td>%d<td>%s<td>%d<td>%d<td>%d</tr>"1t_sNameizStats[STATS_KILLS], 
                
izStats[STATS_DEATHS], izStats[STATS_HS])

        }
    }
    else
    {
        
szTrigger true
        
        
if(get_pcvar_num(pcvar_style))
        {
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<tr id=c><td>%d<td>%s<td>%d<td>%d<td>%d"1t_sNameizStats[STATS_KILLS], 
                    
izStats[STATS_DEATHS], izStats[STATS_HS])
                
            if(((
effec(izStats) + accuracy(izStats)) / 2) < 50)
            {
                
                
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<td><img id=r width=%3.0f%%>%2.0f%%</tr>", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
            }
            else
            {
                
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<td><img width=%3.0f%%>%2.0f%%</tr>", (((effec(izStats) + accuracy(izStats)) / 2) / 1.3), ((effec(izStats) + accuracy(izStats)) / 2))
            }
        }
        else
        {
            
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<tr id=c><td>%d<td>%s<td>%d<td>%d<td>%d</tr>"1t_sNameizStats[STATS_KILLS], 
                
izStats[STATS_DEATHS], izStats[STATS_HS])
        }
    }
    
    return 
iLen
}

format_place1(sBuffer[MAX_BUFFER_LENGTH 1])
{
    new 
iMax get_statsnum()
    new 
izStats[8], izBody[8]
    new 
iLen 0

    
if(get_pcvar_num(pcvar_style))
    {
        if (
iMax 10)
            
iMax 10
    
}
    else
    {
        if (
iMax 15)
            
iMax 15
    
}

    new 
lFirstPlace[60], lKills[30], lDeaths[30], lHits[30], lShots[30], lEff[30], lAcc[30], lHs[30], lNick[30], lPot[45]
    
    
    
format(lFirstPlace59"%L"LANG_SERVER"MM_FIRSTPLACE")
    
format(lNick29"%L"LANG_SERVER"MM_NICK")
    
replace_all(lNick29" ""&nbsp")
    
format(lKills29"%L"LANG_SERVER"KILLS")
    
format(lDeaths29"%L"LANG_SERVER"DEATHS")
    
format(lHits29"%L"LANG_SERVER"HITS")
    
format(lShots29"%L"LANG_SERVER"SHOTS")
    
format(lHs29"%L"LANG_SERVER"MM_HS")
    
replace_all(lHs29" ""&nbsp")
    
format(lEff29"%L"LANG_SERVER"MM_EFF")
    
format(lAcc29"%L"LANG_SERVER"MM_ACC")
    
format(lPot44"%L"LANG_SERVER"MM_POT")
    
    
ucfirst(lEff)
    
ucfirst(lAcc)

    
iLen format_all_themes(sBufferiLen)
    
    if(
get_pcvar_num(pcvar_style))
    {
        
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<body><h2>%s</h2><table width=100%% border=0 align=center cellpadding=0 cellspacing=1>"lFirstPlace)
        
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<body><tr><th>%s<th>%s<th>%s<th>%s<th>%s<th>%s</tr>""Top"lNicklKillslDeathslHslPot)
    }
    else
    {
        
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<body><table width=100%% border=0 align=center cellpadding=0 cellspacing=1>")
        
iLen += format(sBuffer[iLen], MAX_BUFFER_LENGTH iLen"<body><tr><th>%s<th>%s<th>%s<th>%s<th>%s</tr>""Top"lNicklKillslDeathslHs)
    }
        
    
    for (new 
0iMax && MAX_BUFFER_LENGTH iLen 0i++)
    {
        
iLen format_all_stats(g_sBufferizStatsizBodyiLeni)
    }
}
 
colorChat(idChatColor:color, const msg[], {Float,Sql,Result,_}:...)
{
   new 
teamindexMSG_Type
   
new bool:teamChanged false
   
static message[192]
    
   switch(
color)
   {
      case 
CHATCOLOR_NORMAL// Normal
      
{
         
message[0] = 0x01;
      }
      case 
CHATCOLOR_GREEN// Green
      
{
         
message[0] = 0x04;
      }
      default: 
// Grey, Red, Blue
      
{
         
message[0] = 0x03;
      }
   }
    
   
vformat(message[1], 190msg4);
   
replace_all(message190"$g""^x04")
   
replace_all(message190"$n""^x01")
   
replace_all(message190"$t""^x03")
       
   if(
id == 0)
   {
      
index findAnyPlayer();
      
MSG_Type MSG_ALL;
   }
   else
   {
      
index id;
      
MSG_Type MSG_ONE;
   }
   if(
index != 0)
   {
      
team get_user_team(index);   
      if(
color == CHATCOLOR_RED && team != 1)
      {
         
messageTeamInfo(indexMSG_Typeg_TeamName[1])
         
teamChanged true
      
}
      else
      if(
color == CHATCOLOR_BLUE && team != 2)
      {
         
messageTeamInfo(indexMSG_Typeg_TeamName[2])
         
teamChanged true
      
}
      else
      if(
color == CHATCOLOR_GREY && team != 0)
      {
         
messageTeamInfo(indexMSG_Typeg_TeamName[0])
         
teamChanged true
      
}
      
messageSayText(indexMSG_Typemessage);
      if(
teamChanged)
      {
         
messageTeamInfo(indexMSG_Typeg_TeamName[team])
      }
   }
}
 
messageSayText(idtypemessage[])
{
   
message_begin(typeg_msgSayText_id)
   
write_byte(id)      
   
write_string(message)
   
message_end()
}
    
messageTeamInfo(idtypeteam[])
{
   
message_begin(typeg_msgTeamInfo_id)
   
write_byte(id)
   
write_string(team)
   
message_end()
}
    
findAnyPlayer()
{
   static 
players[32], inumpid
    
   get_players
(playersinum"ch")
    
   for (new 
0inuma++)
   {
      
pid players[a]
      if(
is_user_connected(pid))
         return 
pid
   
}
    
   return 
0

giumbalau is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:37.


Powered by vBulletin®
Copyright ©2000 - 2021, vBulletin Solutions, Inc.
Theme made by Freecode