diff --git a/plugins/statsx.sma b/plugins/statsx.sma index 0544e7fe..c0266133 100755 --- a/plugins/statsx.sma +++ b/plugins/statsx.sma @@ -107,9 +107,6 @@ public SpecRankInfo = 0 // displays rank info when spectating #define MAX_TEXT_LENGTH 255 #define MAX_BUFFER_LENGTH 2047 -// User messages. -#define DISABLED_MSG "Server has disabled that option" - // User stats parms id #define STATS_KILLS 0 #define STATS_DEATHS 1 @@ -122,14 +119,14 @@ public SpecRankInfo = 0 // displays rank info when spectating // Global player flags. new BODY_PART[8][] = { - "wholebody", - "head", - "chest", - "stomach", - "leftarm", - "rightarm", - "leftleg", - "rightleg" + "WHOLEBODY", + "HEAD", + "CHEST", + "STOMACH", + "LEFTARM", + "RIGHTARM", + "LEFTLEG", + "RIGHTLEG" } // Killer information, save killer info at the time when player is killed. @@ -251,37 +248,37 @@ public plugin_init() { save_team_chatscore() } -new g_addStast[] = "amx_statscfg add ^"%s^" %s" +public plugin_cfg() { + new addStast[] = "amx_statscfg add ^"%s^" %s" -public plugin_cfg(){ - server_cmd( g_addStast, "Show killer hp&ap","KillerChat" ) + server_cmd( addStast, "Show killer hp&ap","KillerChat" ) - server_cmd( g_addStast, "Show Attackers", "ShowAttackers" ) - server_cmd( g_addStast, "Show Victims", "ShowVictims" ) - server_cmd( g_addStast, "Show killer", "ShowKiller" ) - server_cmd( g_addStast, "Show Team Score", "ShowTeamScore" ) - server_cmd( g_addStast, "Show Total Stats", "ShowTotalStats" ) - server_cmd( g_addStast, "Show Best Score", "ShowBestScore" ) - server_cmd( g_addStast, "Show Most Disruptive", "ShowMostDisruptive" ) + server_cmd( addStast, "Show Attackers", "ShowAttackers" ) + server_cmd( addStast, "Show Victims", "ShowVictims" ) + server_cmd( addStast, "Show killer", "ShowKiller" ) + server_cmd( addStast, "Show Team Score", "ShowTeamScore" ) + server_cmd( addStast, "Show Total Stats", "ShowTotalStats" ) + server_cmd( addStast, "Show Best Score", "ShowBestScore" ) + server_cmd( addStast, "Show Most Disruptive", "ShowMostDisruptive" ) - server_cmd( g_addStast, "HUD-stats default", "ShowStats" ) - server_cmd( g_addStast, "Dist&HS in HUD lists", "ShowDistHS" ) + server_cmd( addStast, "HUD-stats default", "ShowStats" ) + server_cmd( addStast, "Dist&HS in HUD lists", "ShowDistHS" ) - server_cmd( g_addStast, "Stats at the end of map", "EndPlayer") - server_cmd( g_addStast, "Top15 at the end of map", "EndTop15" ) + server_cmd( addStast, "Stats at the end of map", "EndPlayer") + server_cmd( addStast, "Top15 at the end of map", "EndTop15" ) - server_cmd( g_addStast, "Say /hp", "SayHP" ) - server_cmd( g_addStast, "Say /statsme", "SayStatsMe" ) - server_cmd( g_addStast, "Say /rankstats", "SayRankStats" ) - server_cmd( g_addStast, "Say /me", "SayMe" ) - server_cmd( g_addStast, "Say /rank", "SayRank" ) - server_cmd( g_addStast, "Say /report", "SayReport" ) - server_cmd( g_addStast, "Say /score", "SayScore" ) - server_cmd( g_addStast, "Say /top15", "SayTop15" ) - server_cmd( g_addStast, "Say /stats", "SayStatsAll" ) - server_cmd( g_addStast, "Misc say commands", "SayMiscFunc" ) + server_cmd( addStast, "Say /hp", "SayHP" ) + server_cmd( addStast, "Say /statsme", "SayStatsMe" ) + server_cmd( addStast, "Say /rankstats", "SayRankStats" ) + server_cmd( addStast, "Say /me", "SayMe" ) + server_cmd( addStast, "Say /rank", "SayRank" ) + server_cmd( addStast, "Say /report", "SayReport" ) + server_cmd( addStast, "Say /score", "SayScore" ) + server_cmd( addStast, "Say /top15", "SayTop15" ) + server_cmd( addStast, "Say /stats", "SayStatsAll" ) + server_cmd( addStast, "Misc say commands", "SayMiscFunc" ) - server_cmd( g_addStast, "Spec. Rank Info", "SpecRankInfo" ) + server_cmd( addStast, "Spec. Rank Info", "SpecRankInfo" ) // Update local configuration vars with value in cvars. get_config_cvars() @@ -332,7 +329,7 @@ set_plugin_mode( id, sFlags[] ) { if ( sFlags[0] ) g_iPluginMode = read_flags( sFlags ) get_flags( g_iPluginMode, t_sText, MAX_TEXT_LENGTH ) - console_print( id, "^"amx_statsx_mode^" set to ^"%s^"", t_sText ) + console_print( id, "%L", id, "MODE_SET_TO", t_sText ) return g_iPluginMode } @@ -349,7 +346,7 @@ get_config_cvars() { // Get and format attackers header and list. get_attackers( id, sBuffer[MAX_BUFFER_LENGTH+1] ) { - new izStats[8], izBody[8] + new izStats[8],izBody[8] new iAttacker new iFound, iLen new iMaxPlayer = get_maxplayers() @@ -366,11 +363,11 @@ get_attackers( id, sBuffer[MAX_BUFFER_LENGTH+1] ) { get_user_astats( id, iAttacker, izStats, izBody ) if ( izStats[STATS_SHOTS] && ShowFullStats ) { get_user_name( iAttacker, t_sName, MAX_NAME_LENGTH ) - iLen = format( sBuffer, MAX_BUFFER_LENGTH, "Attackers -- %s -- %0.2f%%%% acc.:^n", - t_sName, accuracy( izStats ) ) + iLen = format( sBuffer, MAX_BUFFER_LENGTH, "%L -- %s -- %0.2f%%%% %L:^n", + id, "ATTACKERS", t_sName, accuracy( izStats ), id, "ACC" ) } else - iLen = format( sBuffer, MAX_BUFFER_LENGTH, "Attackers:^n" ) + iLen = format( sBuffer, MAX_BUFFER_LENGTH, "%L:^n", id, "ATTACKERS" ) // Get and format attacker list. for ( iAttacker = 1; iAttacker <= iMaxPlayer; iAttacker++ ) { @@ -380,24 +377,24 @@ get_attackers( id, sBuffer[MAX_BUFFER_LENGTH+1] ) { if ( izStats[STATS_KILLS] ) { if ( !ShowDistHS ) iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s -- %d hit(s) / %d dmg / %s^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE], + "%s -- %d %L / %d %L / %s^n", + t_sName, izStats[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 hit(s) / %d dmg / %s / %0.0f m / HS^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE], + "%s -- %d %L / %d %L / %s / %0.0f m / HS^n", + t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserAttackerDistance[id]) ) else iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s -- %d hit(s) / %d dmg / %s / %0.0f m^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE], + "%s -- %d %L / %d %L / %s / %0.0f m^n", + t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserAttackerDistance[id]) ) } else iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s -- %d hit(s) / %d dmg^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE] ) + "%s -- %d %L / %d %L^n", + t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG" ) } } if ( !iFound ) @@ -422,10 +419,10 @@ get_victims( id, sBuffer[MAX_BUFFER_LENGTH+1] ) { izStats[STATS_SHOTS] = 0 get_user_vstats( id, 0, izStats, izBody ) if ( izStats[STATS_SHOTS] ) - iLen = format( sBuffer, MAX_BUFFER_LENGTH, "Victims -- %0.2f%%%% acc.:^n", - accuracy( izStats ) ) + iLen = format( sBuffer, MAX_BUFFER_LENGTH, "%L -- %0.2f%%%% %L:^n", + id, "VICTIMS", accuracy( izStats ), id, "ACC" ) else - iLen = format( sBuffer, MAX_BUFFER_LENGTH, "Victims:^n" ) + iLen = format( sBuffer, MAX_BUFFER_LENGTH, "%L:^n", id, "VICTIMS" ) for ( iVictim = 1; iVictim <= iMaxPlayer; iVictim++ ) { if( get_user_vstats( id, iVictim, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH ) ) { @@ -434,24 +431,24 @@ get_victims( id, sBuffer[MAX_BUFFER_LENGTH+1] ) { if ( izStats[STATS_DEATHS] ) { if ( !ShowDistHS ) iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s -- %d hit(s) / %d dmg / %s^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE], + "%s -- %d %L / %d %L / %s^n", + t_sName, izStats[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 hit(s) / %d dmg / %s / %0.0f m / HS^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE], + "%s -- %d %L / %d %L / %s / %0.0f m / HS^n", + t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserVictimDistance[id][iVictim]) ) else iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s -- %d hit(s) / %d dmg / %s / %0.0f m^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE], + "%s -- %d %L / %d %L / %s / %0.0f m^n", + t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG", t_sWpn, distance(g_izUserVictimDistance[id][iVictim]) ) } else iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s -- %d hit(s) / %d dmg^n", - t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE] ) + "%s -- %d %L / %d %L^n", + t_sName, izStats[STATS_HITS], id, "HIT_S", izStats[STATS_DAMAGE], id, "DMG" ) } } if ( !iFound ) @@ -484,14 +481,14 @@ get_kill_info( id, iKiller, sBuffer[MAX_BUFFER_LENGTH+1] ) { get_user_vstats( id, iKiller, izVStats, iaVBody ) iLen = format( sBuffer, MAX_BUFFER_LENGTH, - "%s killed you with %s^nfrom distance of %0.2f meters.^n", + "%L^n", id, "KILLED_YOU_DIST", t_sName, t_sWpn, distance(g_izUserAttackerDistance[id]) ) iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "He did %d damage to you with %d hit(s)^nand still has %dhp and %dap.^n", + "%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, - "You did %d damage to him with %d hit(s).^n", + "%L^n", id, "YOU_DID_DMG", izVStats[STATS_DAMAGE], izVStats[STATS_HITS] ) } return iFound @@ -522,9 +519,9 @@ add_most_disruptive( sBuffer[MAX_BUFFER_LENGTH+1] ) { new Float:fGameEff = effec( g_izUserGameStats[id] ) new Float:fRndAcc = accuracy( g_izUserRndStats[id] ) format( t_sText, MAX_TEXT_LENGTH, - "Most damage done by: %s^n%d hit(s) / %d dmg -- %0.2f%%%% eff. / %0.2f%%%% acc.^n", - g_izUserRndName[id], g_izUserRndStats[id][STATS_HITS], - iMaxDamage, fGameEff, fRndAcc ) + "%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", + iMaxDamage, LANG_SERVER, "DMG", fGameEff, LANG_SERVER, "EFF", fRndAcc, LANG_SERVER, "ACC" ) add( sBuffer, MAX_BUFFER_LENGTH, t_sText ) } return iMaxDamageId @@ -554,8 +551,9 @@ add_best_score( sBuffer[MAX_BUFFER_LENGTH+1] ) { new Float:fGameEff = effec( g_izUserGameStats[id] ) new Float:fRndAcc = accuracy( g_izUserRndStats[id] ) format( t_sText, MAX_TEXT_LENGTH, - "Best score: %s^n%d kill(s) / %d hs -- %0.2f%%%% eff. / %0.2f%%%% acc.^n", - g_izUserRndName[id], iMaxKills, iMaxHeadShots, fGameEff, fRndAcc ) + "%L: %s^n%d %L / %d hs -- %0.2f%%%% %L / %0.2f%%%% %L^n", + LANG_SERVER, "BEST_SCORE", g_izUserRndName[id], iMaxKills, LANG_SERVER, "KILL_S", + iMaxHeadShots, fGameEff, LANG_SERVER, "EFF", fRndAcc, LANG_SERVER, "ACC" ) add( sBuffer, MAX_BUFFER_LENGTH, t_sText ) } return iMaxKillsId @@ -575,8 +573,9 @@ add_team_score( sBuffer[MAX_BUFFER_LENGTH+1] ) { // Format round team stats, MOTD format( t_sText, MAX_TEXT_LENGTH, - "TERRORIST %d / %0.2f%%%% eff. / %0.2f%%%% acc.^nCT %d / %0.2f%%%% eff. / %0.2f%%%% acc.^n", - g_izTeamScore[0], fzMapEff[0], fzRndAcc[0], g_izTeamScore[1], fzMapEff[1], fzRndAcc[1] ) + "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( sBuffer, MAX_BUFFER_LENGTH, t_sText ) } @@ -594,17 +593,17 @@ save_team_chatscore() { // Format game team stats, chat format( g_sScore, MAX_BUFFER_LENGTH, - "TERRORIST %d / %0.2f%%%% eff. / %0.2f%%%% acc. -- CT %d / %0.2f%%%% eff. / %0.2f%%%% acc.", - g_izTeamScore[0], fzMapEff[0], fzMapAcc[0], g_izTeamScore[1], fzMapEff[1], fzMapAcc[1] ) + "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_sText, MAX_TEXT_LENGTH, - "Total: %d kill(s) / %d hs -- %d hit(s) / %d shot(s)^n", - g_izUserRndStats[0][STATS_KILLS], g_izUserRndStats[0][STATS_HS], - g_izUserRndStats[0][STATS_HITS], g_izUserRndStats[0][STATS_SHOTS] ) + "%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( sBuffer, MAX_BUFFER_LENGTH, t_sText ) } @@ -623,11 +622,11 @@ add_attacker_hits( id, iAttacker, sBuffer[MAX_BUFFER_LENGTH+1] ) { iLen = strlen( sBuffer ) get_user_name( iAttacker, t_sName, MAX_NAME_LENGTH ) iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s hits you in:^n", t_sName ) + "%L:^n", id, "HITS_YOU_IN", t_sName ) for ( new i = 1; i < 8; i++ ) { if ( !izBody[i] ) continue iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - "%s: %d^n", BODY_PART[i], izBody[i] ) + "%L: %d^n", id, BODY_PART[i], izBody[i] ) } } } @@ -648,7 +647,7 @@ format_kill_ainfo( id, iKiller, sBuffer[MAX_BUFFER_LENGTH+1] ) { get_user_astats( id, iKiller, izStats, izBody, t_sWpn, MAX_WEAPON_LENGTH ) iLen = format( sBuffer, MAX_BUFFER_LENGTH, - "Killed by %s with %s @ %0.0fm (%dhp, %dap) >>", t_sName, t_sWpn, + "%L (%dhp, %dap) >>", id, "KILLED_BY_WITH", t_sName, t_sWpn, distance(g_izUserAttackerDistance[id]), g_izKilled[id][KILLED_KILLER_HEALTH], g_izKilled[id][KILLED_KILLER_ARMOUR] ) @@ -656,15 +655,15 @@ format_kill_ainfo( id, iKiller, sBuffer[MAX_BUFFER_LENGTH+1] ) { for ( new i = 1; i < 8; i++ ) { if ( !izBody[i] ) continue iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - " %s: %d", BODY_PART[i], izBody[i] ) + " %L: %d", id, BODY_PART[i], izBody[i] ) } } else iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - " no hits" ) + " %L", id, "NO_HITS" ) } else - copy( sBuffer, MAX_BUFFER_LENGTH, "You have no killer..." ) + format( sBuffer, MAX_BUFFER_LENGTH, "%L", id, "YOU_NO_KILLER" ) return iFound } @@ -684,24 +683,24 @@ format_kill_vinfo( id, iKiller, sBuffer[MAX_BUFFER_LENGTH+1] ) { iFound = 1 get_user_name( iKiller, t_sName, MAX_NAME_LENGTH ) iLen = format( sBuffer, MAX_BUFFER_LENGTH, - "You hit %s %d time(s), %d damage >>", + "%L >>", id, "YOU_HIT", t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE] ) } else iLen = format( sBuffer, MAX_BUFFER_LENGTH, - "Last result: %d hit(s), %d damage >>", + "%L >>", id, "LAST_RES", izStats[STATS_HITS], izStats[STATS_DAMAGE] ) if ( izStats[STATS_HITS] ) { for ( new i = 1; i < 8; i++ ) { if ( !izBody[i] ) continue iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - " %s: %d", BODY_PART[i], izBody[i] ) + " %L: %d", id, BODY_PART[i], izBody[i] ) } } else iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, - " no hits" ) + " %L", id, "NO_HITS" ) return iFound } @@ -714,12 +713,22 @@ format_top15( sBuffer[MAX_BUFFER_LENGTH+1] ){ if ( iMax > 15 ) iMax = 15 - + + new lKills[16],lDeaths[16],lHits[16],lShots[16],lEff[16],lAcc[16] + format(lKills,15,"%L",LANG_SERVER,"KILLS") + format(lDeaths,15,"%L",LANG_SERVER,"DEATHS") + format(lHits,15,"%L",LANG_SERVER,"HITS") + format(lShots,15,"%L",LANG_SERVER,"SHOTS") + format(lEff,15,"%L",LANG_SERVER,"EFF") + format(lAcc,15,"%L",LANG_SERVER,"ACC") + ucfirst(lEff) + ucfirst(lAcc) + iLen = format( sBuffer, MAX_BUFFER_LENGTH, "
" )
   iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen,
                   "%2s %-22.22s %6s %6s %6s %6s %4s %4s %4s^n",
-                  "#", "Nick", "Kills", "Deaths", "Hits", "Shots", "HS", "Eff.", "Acc." )
+                  "#", "Nick", lKills, lDeaths, lHits, lShots, "HS", lEff, lAcc )
   for ( new i = 0; i < iMax && MAX_BUFFER_LENGTH - iLen > 0; i++ ) {
     get_stats( i, izStats, izBody, t_sName, MAX_NAME_LENGTH )
     iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen,
@@ -736,26 +745,37 @@ format_rankstats( id, sBuffer[MAX_BUFFER_LENGTH+1], iMyId=0 ) {
   new izStats[8] = { 0, ... }
   new izBody[8]
   new iRankPos, iLen
+  new lKills[16],lDeaths[16],lHits[16],lShots[16],lDamage[16],lEff[16],lAcc[16]
+  format(lKills,15,"%L",id,"KILLS")
+  format(lDeaths,15,"%L",id,"DEATHS")
+  format(lHits,15,"%L",id,"HITS")
+  format(lShots,15,"%L",id,"SHOTS")
+  format(lDamage,15,"%L",id,"DAMAGE")
+  format(lEff,15,"%L",id,"EFF")
+  format(lAcc,15,"%L",id,"ACC")
+  ucfirst(lEff)
+  ucfirst(lAcc)
   iRankPos = get_user_stats( id, izStats, izBody )
   iLen = format( sBuffer, MAX_BUFFER_LENGTH, 
                   "
" )
   iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen,
-                  "%s rank is %d of %d^n^n", 
-                  (!iMyId||iMyId==id)?"Your":"Players", iRankPos, get_statsnum() )
-  iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen,
-                  "%s rank is %d of %d^n^n", 
-                  (!iMyId||iMyId==id)?"Your":"Players", iRankPos, get_statsnum() )
+                  "%L %L^n^n", id, (!iMyId||iMyId==id)?"YOUR":"PLAYERS",
+                  id, "RANK_IS", iRankPos, get_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",
-                  "Kills", izStats[STATS_KILLS], izStats[STATS_HS], 
-                  "Deaths", izStats[STATS_DEATHS], "Hits", izStats[STATS_HITS], 
-                  "Shots", izStats[STATS_SHOTS], "Damage", izStats[STATS_DAMAGE], 
-                  "Eff.", effec( izStats ), "Acc.", accuracy( izStats ) )
+                  lKills, izStats[STATS_KILLS], izStats[STATS_HS], 
+                  lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], 
+                  lShots, izStats[STATS_SHOTS], lDamage, izStats[STATS_DAMAGE], 
+                  lEff, effec( izStats ), lAcc, accuracy( izStats ) )
+  new L_BODY_PART[8][32]
+  for (new i=1; i<8; i++) {
+    format(L_BODY_PART[i],31,"%L",id,BODY_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", BODY_PART[1], izBody[1], BODY_PART[2], izBody[2], 
-                  BODY_PART[3], izBody[3], BODY_PART[4], izBody[4], BODY_PART[5], izBody[5], 
-                  BODY_PART[6], izBody[6], BODY_PART[7], izBody[7])
+                  "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])
 }
 
 
@@ -764,18 +784,29 @@ format_stats( id, sBuffer[MAX_BUFFER_LENGTH+1] ) {
   new izStats[8] = { 0, ... }
   new izBody[8]
   new iWeapon, iLen
+  new lKills[16],lDeaths[16],lHits[16],lShots[16],lDamage[16],lEff[16],lAcc[16],lWeapon[16]
+  format(lKills,15,"%L",id,"KILLS")
+  format(lDeaths,15,"%L",id,"DEATHS")
+  format(lHits,15,"%L",id,"HITS")
+  format(lShots,15,"%L",id,"SHOTS")
+  format(lDamage,15,"%L",id,"DAMAGE")
+  format(lEff,15,"%L",id,"EFF")
+  format(lAcc,15,"%L",id,"ACC")
+  format(lWeapon,15,"%L",id,"WEAPON")
+  ucfirst(lEff)
+  ucfirst(lAcc)
   get_user_wstats( id, 0, izStats, izBody )
   iLen = format( sBuffer, MAX_BUFFER_LENGTH, 
                   "
" )
   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",
-                  "Kills", izStats[STATS_KILLS], izStats[STATS_HS], 
-                  "Deaths", izStats[STATS_DEATHS], "Hits", izStats[STATS_HITS], 
-                  "Shots", izStats[STATS_SHOTS], "Damage", izStats[STATS_DAMAGE], 
-                  "Eff.", effec( izStats ), "Acc.", accuracy( izStats ) )
+                  lKills, izStats[STATS_KILLS], izStats[STATS_HS], 
+                  lDeaths, izStats[STATS_DEATHS], lHits, izStats[STATS_HITS], 
+                  lShots, izStats[STATS_SHOTS], lDamage, izStats[STATS_DAMAGE], 
+                  lEff, effec( izStats ), lAcc, accuracy( izStats ) )
   iLen += format( sBuffer[iLen], MAX_BUFFER_LENGTH - iLen,
                   "%-12.12s  %6s  %6s  %6s  %6s  %6s  %4s^n",
-                  "Weapon", "Kills", "Deaths", "Hits", "Shots", "Damage", "Acc." )
+                  lWeapon, lKills, lDeaths, lHits, lShots, lDamage, lAcc )
   for ( iWeapon = 1; iWeapon < 31 && MAX_BUFFER_LENGTH - iLen > 0 ; iWeapon++ ) {
     if ( get_user_wstats( id, iWeapon, izStats, izBody ) ) {
       get_weaponname( iWeapon, t_sWpn, MAX_WEAPON_LENGTH )
@@ -894,7 +925,7 @@ public cmdPluginMode( id, level, cid ) {
 // Display MOTD stats.
 public cmdStatsMe( id ) {
   if ( !SayStatsMe ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   format_stats( id, g_sBuffer )
@@ -906,7 +937,7 @@ public cmdStatsMe( id ) {
 // Display MOTD rank.
 public cmdRankStats( id ) {
   if ( !SayRankStats ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   format_rankstats( id, g_sBuffer )
@@ -918,7 +949,7 @@ public cmdRankStats( id ) {
 // Display MOTD top15 ranked.
 public cmdTop15( id ) {
   if ( !SayTop15 ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   format_top15( g_sBuffer )
@@ -929,7 +960,7 @@ public cmdTop15( id ) {
 // Display killer information.
 public cmdHp( id ) {
   if ( !SayHP ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   new iKiller = g_izKilled[id][KILLED_KILLER_ID]
@@ -941,7 +972,7 @@ public cmdHp( id ) {
 // Display user stats.
 public cmdMe( id ) {
   if ( !SayMe ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   format_kill_vinfo( id, 0, g_sBuffer )
@@ -952,7 +983,7 @@ public cmdMe( id ) {
 // Display user rank
 public cmdRank( id ) {
   if ( !SayRank ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   new izStats[8], izBody[8]
@@ -963,7 +994,7 @@ public cmdRank( id ) {
   fEff = effec( izStats )
   fAcc = accuracy( izStats )
   client_print( id, print_chat,
-                "* Your rank is %d of %d with %d kill(s), %d hit(s), %0.2f%%%% eff. and %0.2f%%%% acc.", 
+                "* %L", id, "YOUR_RANK_IS",
                 iRankPos, iRankMax, izStats[STATS_KILLS], izStats[STATS_HITS],
                 fEff, fAcc )
   return PLUGIN_CONTINUE
@@ -972,7 +1003,7 @@ public cmdRank( id ) {
 // Report user weapon status to team.
 public cmdReport( id ) { 
   if ( !SayReport ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   new iWeapon, iClip, iAmmo, iHealth, iArmor
@@ -980,14 +1011,19 @@ public cmdReport( id ) {
   get_weaponname( iWeapon, t_sWpn, MAX_WEAPON_LENGTH )
   iHealth = get_user_health( id ) 
   iArmor = get_user_armor( id )
-  if ( iClip >= 0 )
+  new lWeapon[16]
+  format(lWeapon,15,"%L",id,"WEAPON")
+  strtolower(lWeapon)
+  if ( iClip >= 0 ) {
     format( g_sBuffer, MAX_BUFFER_LENGTH,
-            "weapon: %s, ammo: %d/%d, health: %d, armor: %d", 
-            t_sWpn[7], iClip, iAmmo, iHealth, iArmor ) 
+            "%s: %s, %L: %d/%d, %L: %d, %L: %d", 
+            lWeapon, t_sWpn[7], LANG_SERVER, "AMMO", iClip, iAmmo,
+            LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor ) 
+  }
   else
     format( g_sBuffer, MAX_BUFFER_LENGTH,
-            "weapon: %s, health: %d, armor: %d", 
-            t_sWpn[7], iHealth, iArmor ) 
+            "%s: %s, %L: %d, %L: %d", 
+            lWeapon, t_sWpn[7], LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor ) 
   engclient_cmd( id, "say_team", g_sBuffer )
   return PLUGIN_CONTINUE
 } 
@@ -995,10 +1031,10 @@ public cmdReport( id ) {
 // Display team map score
 public cmdScore( id ) {
   if ( !SayScore ) {
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
-  client_print( id, print_chat, "Game score: %s", g_sScore )
+  client_print( id, print_chat, "%L: %s", id, "GAME_SCORE", g_sScore )
   return PLUGIN_CONTINUE
 }
 
@@ -1009,9 +1045,9 @@ public cmdTimeLeft( id ) {
   new iTimeLeft = get_timeleft()
   if ( iTimeLeft )
     client_print( 0, print_chat,
-                  "Time remaining:  %02d:%02d", iTimeLeft / 60, iTimeLeft % 60 )
+                  "%L:  %02d:%02d", id, "TIME_REM", iTimeLeft / 60, iTimeLeft % 60 )
   else
-    client_print( 0, print_chat, "* No Time Limit *" )
+    client_print( 0, print_chat, "* %L *", LANG_PLAYER, "NO_T_LIMIT" )
   return PLUGIN_CONTINUE
 }
 
@@ -1020,7 +1056,7 @@ public cmdTheTime( id ) {
   if ( !SayMiscFunc )
     return PLUGIN_CONTINUE
   get_time( "%H:%M:%S", g_sBuffer, MAX_BUFFER_LENGTH )
-  client_print( 0, print_chat, "The time:  %s", g_sBuffer )
+  client_print( 0, print_chat, "%L:  %s", LANG_PLAYER, "THE_TIME", g_sBuffer )
   return PLUGIN_CONTINUE
 }
 
@@ -1029,7 +1065,7 @@ public cmdCurrentMap( id ) {
   if ( !SayMiscFunc )
     return PLUGIN_CONTINUE
   get_mapname( g_sBuffer, MAX_BUFFER_LENGTH )
-  client_print( 0, print_chat, "Played map:  %s", g_sBuffer )
+  client_print( 0, print_chat, "%L:  %s", LANG_PLAYER, "PLAYED_MAP", g_sBuffer )
   return PLUGIN_CONTINUE
 }
 
@@ -1037,8 +1073,8 @@ public cmdCurrentMap( id ) {
 public cmdFf( id ) {
   if ( !SayMiscFunc )
     return PLUGIN_CONTINUE
-  client_print( 0, print_chat, "Friendly fire:  %s",
-                get_cvar_num( "mp_friendlyfire" ) ? "ON" : "OFF" )
+  client_print( 0, print_chat, "%L:  %L", LANG_PLAYER, "FRIEND_FIRE",
+                LANG_PLAYER, get_cvar_num( "mp_friendlyfire" ) ? "ON" : "OFF" )
   return PLUGIN_CONTINUE
 }
 
@@ -1047,15 +1083,16 @@ public cmdSwitch( id ) {
   g_izStatsSwitch[id] = ( g_izStatsSwitch[id] ) ? 0 : -1 
   num_to_str( g_izStatsSwitch[id], t_sText, MAX_TEXT_LENGTH )
   client_cmd( id, "setinfo _amxstatsx %s", t_sText )
-  client_print( id, print_chat, "* You have %s stats announcements",
-                g_izStatsSwitch[id] ? "enabled" : "disabled" )
+  new lEnDis[32]
+  format(lEnDis, 31, "%L", id, g_izStatsSwitch[id] ? "ENABLED" : "DISABLED")
+  client_print( id, print_chat, "* %L", id, "STATS_ANNOUNCE", lEnDis)
   return PLUGIN_CONTINUE
 }
 
 // Player stats menu.
 public cmdStats( id ) {
   if ( !SayStatsAll ){
-    client_print( id, print_chat, DISABLED_MSG )
+    client_print( id, print_chat, "%L", id, "DISABLED_MSG" )
     return PLUGIN_HANDLED
   }
   showStatsMenu( id, g_izUserMenuPosition[id]=0 )
@@ -1119,8 +1156,8 @@ showStatsMenu( id, iMenuPos ) {
   if ( iMenuPos >= iMenuPosMax )
     iMenuPos = iMenuPosMax - 1
   iUserIndex = iMenuPos * PPL_MENU_OPTIONS
-  iLen = format( g_sBuffer, MAX_BUFFER_LENGTH, "\yServer Stats\R%d/%d^n\w^n",
-                 iMenuPos + 1, iMenuPosMax )
+  iLen = format( g_sBuffer, MAX_BUFFER_LENGTH, "\y%L\R%d/%d^n\w^n",
+                 id, "SERVER_STATS", iMenuPos + 1, iMenuPosMax )
   iMenuOptionMax = iPlayers - iUserIndex
   if ( iMenuOptionMax > PPL_MENU_OPTIONS ) 
     iMenuOptionMax = PPL_MENU_OPTIONS
@@ -1134,14 +1171,14 @@ showStatsMenu( id, iMenuPos ) {
   iLen += format( g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n8. %s^n\w",
                   g_izUserMenuActionText[ g_izUserMenuAction[id] ] )
   if ( iPlayers > iUserIndex ) {
-    iLen += copy( g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n9. More..." )
+    iLen += format( g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n9. %L...", id, "MORE" )
     iKeyMask |= MENU_KEY_9
   }
   if ( iMenuPos > 0 )
-    iLen += copy( g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. Back" )
+    iLen += format( g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "BACK" )
   else
-    iLen += copy( g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. Exit" )
-  show_menu( id, iKeyMask, g_sBuffer )
+    iLen += format( g_sBuffer[iLen], MAX_BUFFER_LENGTH - iLen, "^n0. %L", id, "MORE" )
+  show_menu( id, iKeyMask, g_sBuffer, -1, "Server Stats" )
   return PLUGIN_HANDLED
 }
 
@@ -1494,7 +1531,7 @@ endround_stats() {
   
   g_sAwardAndScore[0] = 0
 
-  // Create round awards. 
+  // Create round awards.
   if ( ShowMostDisruptive )
     add_most_disruptive( g_sAwardAndScore )
   if ( ShowBestScore )
@@ -1502,7 +1539,7 @@ endround_stats() {
 
   // Create round score. 
   // Compensate HUD message if awards are disabled.
-  if ( ShowTeamScore || ShowTotalStats ) { 
+  if ( ShowTeamScore || ShowTotalStats ) {
     if ( ShowMostDisruptive && ShowBestScore )
       add( g_sAwardAndScore, MAX_BUFFER_LENGTH, "^n^n" )
     else if ( ShowMostDisruptive || ShowBestScore )
@@ -1583,7 +1620,7 @@ public eventShowRank( id ) {
       iRankPos = get_user_stats( iPlayer, izStats, izBody )
       iRankMax = get_statsnum()
       set_hudtype_specmode()
-      show_hudmessage( id, "%s's rank is %d of %d", t_sName, iRankPos, iRankMax )
+      show_hudmessage( id, "%L", id, "X_RANK_IS", t_sName, iRankPos, iRankMax )
     }
   }
   return PLUGIN_CONTINUE