Discord sunucumuz açılmıştır, hepinizi bekleriz

https://discord.gg/43gGDQe6tS

CSM StatsX v2.3 [Steam Özel]

Counter-Strike 1.6 Eklenti Paylaşımı

Moderatör: Moderatörler

Forum kuralları
DİKKAT !
Konu Başlığı veya içeriği BÜYÜK HARFLERLE olan konular direk silenecektir !
Burası eklenti paylaşım bölümüdür ve yönetici onaylıdır. Alakasız konular hiçbir şekilde onaylanmayacaktır

Eklenti eklerken eklenti kurallarına uyulması gerekir.
En önemlisi paylaşılan eklenti şablonuna uyulması gerekir.
Bu hususlara dikkat edilmeyip paylaşılan eklenti konuları silenecektir.
Kullanıcı avatarı

Konu Sahibi
Yek'-ta
Mesajlar: 9624
Kayıt: Cmt Eyl 12, 2015 12:40 pm
İletişim:

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen Yek'-ta »

Eklenti İsmi : CSM StatsX v2.3 [Steam Özel]
Yapımcısı : AMXX Dev Team (Düzenleme Yek'-ta)
Sürüm : v2.3 [Steam Özel]
Açıklama :
CSM StatsX eklentisinin Steam Özel sürümüdür. Bu sürümde /top da Steam olan oyuncular belirgindir.


Neler Var :
2.0 sürümü yazdı: -1. sürümünde sadece top10,top20,top30... vs. top100 e kadar vardı, bunda ise bütün hepsi var. Yani siz .top234234234 yazsanız bile size o sıralamayı verir. .top1 yazarsanız sadece 1. sıradakini yazar, .top6 yazarsanız 6. kişiye kadar olan sıralamayı yazar.
-Oyuncu .top15 yazsa bile otomatik top10'u gösterir.
-1. sürümünde görselleri düzenlemek baya uğraş istiyordu, bu görselleri kolay düzenlemeniz için .sma dosyasının en üstüne sadece buraları düzenleyiniz diye not ekledim. Alt satırlara gömülerek karışık matematik sorularına dalar gibi dalmanıza gerek yok (çok satır var).
-.rankstats ı 2.0 sürümünde görselli yaptım. Ekran görüntülerinde görürsünüz, CT ve TE takımı için ayrı ayrı çıkıyor.
-Oyuncu canlı iken .me yazınca kaç vurduğunu görebiliyordu, bullet damage eklentisi olmayan ip ler bunun sadece ölü iken kullanılmasını istiyordu. Cvar komutu ekledim, 1 yada 0 yaparak sadece ölü iken işleme geçip geçmemesini ayarlayabiliyorsunuz.
-top sıralamasına oyuncunun ne kadar C4 kurduğunu ve kaçını patlatabildiğini ve kurulan C4 leri kaç defa çözebildiğini yazdırdım. 1.8.3 sürümünde böyle bir özellik vardı, nimetleri sonuna kadar kullandım.
2.2 sürümünde eklenenler yazdı: -amx_statscfgmenu ye normalde top15 diye kayıtlı idi ve bu eski bilgiler ile çakışabiliyor idi, buna özel tanımlandırma yapıp adını say /topxx koydum.
-/rank, /me komutlarını biçimlendirdim. Daha hoş ve göze güzel görünüyor.
-2.0 sürümünde say /topxx ile say /rankstats da gözüken veriler bir değilmiş, incelediğimde 2.0 da değişken atlaması yapmışım farkına varmadan. 2.2 sürümünde bunu fixledim
-say /topxx 'e NET değerini ekledim. Toplam öldürdüğü ile toplam öldüğünün farkı ekrana basılıyor. Eğer ki 0'ın altında bir değer varsa "-" koyuyor.
-say /rankstats da CT nin resmi gözükmüyormuş, bununla ilgili bir sorunu ben göremedim. cs1Net || cs2Net'e girerseniz görebilirsiniz, CT nin resmi sorunsuz gözüküyor.
2.3 [Steam Özel] sürümünde yapılanlar yazdı: -Top motd tasarımı yeniden tasarlandı ve daha sade bir tasarım çıkartıldı..
-Top motd ekranında hangi oyuncuların Steam üzerinden oynadığı bellidir.
-Top motd ekranında Neti sıfırın altında olanlarda "-" gözükmesi kaldırıldı.
-Rankstats tasarımı değiştirildi.

Ekran Görüntüsü :
Resim

Cvar Ayarları :

Kod: Tümünü seç

csm_mecanlikapat 1/0 ; .me komutunun canlı olan oyunculara kapatıp açma. 1 kapatır, 0 açar.
İndir :
Bu StatsX eklentisini kullanmak için önce bu eklentiyi kurmalısınız; eklentiler-pluginler/csd-stats-oyuncu-s ... 38211.html

Etiketler:
Link:
Linklerini gizle
Linki Kopyala

fourgething
Yasaklı Üye
Yasaklı Üye
Mesajlar: 67
Kayıt: Prş Haz 06, 2019 3:37 pm

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen fourgething »

Farklı sunucularda kullanilmasi için paylaşılamiyor demi

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
Yek'-ta
Mesajlar: 9624
Kayıt: Cmt Eyl 12, 2015 12:40 pm
İletişim:

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen Yek'-ta »

fourgething yazdı: Çrş Tem 31, 2019 8:49 pm Farklı sunucularda kullanilmasi için paylaşılamiyor demi
Sma konu içerisinde mevcuttur, fakat csdurağı sunucularında çalışır.

Link:
Linklerini gizle
Linki Kopyala

fourgething
Yasaklı Üye
Yasaklı Üye
Mesajlar: 67
Kayıt: Prş Haz 06, 2019 3:37 pm

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen fourgething »

Anladim bu paylaşilmişta digeri sanirim csduragina özel peki beklemedeyiz belki farklı sunucular içinde bi degişik versiyonu gelir

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

cazi53
Mesajlar: 93
Kayıt: Pzt Ara 25, 2017 3:37 pm

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen cazi53 »

Buna geçiş yapmak şart oldu.

Ben de 2.2'de şu şekilde kullanıyordum, banner olan kısmı bir arkadaşa kapattırmıştım :roll:

Kod: Tümünü seç

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <csx>
//--------------------------------
// Sadece Alt kısmı düzeltiniz.
//--------------------------------
#define TAG "^4asdasd :!y"

//Resimler
#define TOP10 "https://addons-media.operacdn.com/media/CACHE/images/themes/95/63495/1.0-rev2/images/9a0bc7fe-404c-4d43-8a3c-8a05b5e54fe2/d8c7ab18c5389c88b15e6167dcc0bf51.jpg"
#define TOPDEF "https://addons-media.operacdn.com/media/CACHE/images/themes/95/63495/1.0-rev2/images/9a0bc7fe-404c-4d43-8a3c-8a05b5e54fe2/d8c7ab18c5389c88b15e6167dcc0bf51.jpg"
#define RANKSTATSTE "https://addons-media.operacdn.com/media/CACHE/images/themes/95/63495/1.0-rev2/images/9a0bc7fe-404c-4d43-8a3c-8a05b5e54fe2/d8c7ab18c5389c88b15e6167dcc0bf51.jpg"
#define RANKSTATSCT "https://addons-media.operacdn.com/media/CACHE/images/themes/95/63495/1.0-rev2/images/9a0bc7fe-404c-4d43-8a3c-8a05b5e54fe2/d8c7ab18c5389c88b15e6167dcc0bf51.jpg"

//--------------------------------
#define SURUM "2.2"


//#define STATSX_DEBUG

#define HUD_DURATION_CVAR   "amx_statsx_duration"
#define HUD_DURATION        "12.0"

#define HUD_FREEZE_LIMIT_CVAR   "amx_statsx_freeze"
#define HUD_FREEZE_LIMIT        "-2.0"

#define HUD_MIN_DURATION    0.2


#define MODE_HUD_DELAY      0   // Make a 0.1 sec delay on HUD reset process.

new mecanlikapaliacik

public KillerChat           = 0 // displays killer hp&ap to victim console
                                // and screen

public ShowAttackers        = 0 // shows attackers
public ShowVictims          = 0 // shows victims
public ShowKiller           = 0 // shows killer
public ShowTeamScore        = 0 // shows team score at round end
public ShowTotalStats       = 0 // shows round total stats
public ShowBestScore        = 0 // shows rounds best scored player
public ShowMostDisruptive   = 0 // shows rounds most disruptive player

public EndPlayer            = 0 // displays player stats at the end of map
public EndTop15             = 0 // displays top15 at the end of map

public SayHP                = 0 // displays information about user killer
public SayStatsMe           = 0 // displays user's stats and rank
public SayRankStats         = 0 // displays user's rank stats
public SayMe                = 0 // displays user's stats
public SayRank              = 0 // displays user's rank
public SayReport            = 0 // report user's weapon status to team
public SayScore             = 0 // displays team's map score
public SayTopXX             = 0 // displays first 15 players
public SayStatsAll          = 0 // displays all players stats and rank

public ShowStats            = 1 // set client HUD-stats switched off by default
public ShowDistHS           = 0 // show distance and HS in attackers and
                                //  victims HUD lists
public ShowFullStats        = 0 // show full HUD stats (more than 78 chars)

public SpecRankInfo         = 0 // displays rank info when spectating

// Standard Contstants.
#define MAX_TEAMS               2
#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 + 1][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 + 1]               = {0, ...}
new g_izUserMenuAction[MAX_PLAYERS + 1]                 = {0, ...}
new g_izUserMenuPlayers[MAX_PLAYERS + 1][MAX_PLAYERS]

new g_izSpecMode[MAX_PLAYERS + 1]                       = {0, ...}

new g_izShowStatsFlags[MAX_PLAYERS + 1]                 = {0, ...}
new g_izStatsSwitch[MAX_PLAYERS + 1]                    = {0, ...}
new Float:g_fzShowUserStatsTime[MAX_PLAYERS + 1]        = {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 g_pFreezeTime                                       = 0
new g_pRoundTime                                        = 0
new g_pHudDuration                                      = 0
new g_pHudFreezeLimit                                   = 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 + 1]                     = {0, ...}
new g_izUserAttackerDistance[MAX_PLAYERS + 1]           = {0, ...}
new g_izUserVictimDistance[MAX_PLAYERS + 1][MAX_PLAYERS + 1]
new g_izUserRndName[MAX_PLAYERS + 1][MAX_NAME_LENGTH]
new g_izUserRndStats[MAX_PLAYERS + 1][8]
new g_izUserGameStats[MAX_PLAYERS + 1][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


//--------------------------------
// Initialize
//--------------------------------
public plugin_init()
{
	// Register plugin.
	register_plugin("CSM StatsX", SURUM, "AMXX Dev Team and CSmiLeFaCe")
	register_dictionary("statsx.txt")

	// Register events.
	register_event("TextMsg", "eventStartGame", "a", "2=#Game_Commencing", "2=#Game_will_restart_in")
	RegisterHamPlayer(Ham_Spawn, "eventSpawn", 1)
	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","Say_Catch")
	register_clcmd("say_team","Say_Catch")
	
	
	mecanlikapaliacik = register_cvar("csm_mecanlikapat","1")
	
	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 /score", "cmdScore", 0, "- display last score (chat)")
	register_clcmd("say /report", "cmdReport", 0, "- display weapon status (say_team)")
	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 /score", "cmdScore", 0, "- display last score (chat)")
	register_clcmd("say_team /report", "cmdReport", 0, "- display weapon status (say_team_team)")
	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

	g_pHudDuration = register_cvar(HUD_DURATION_CVAR, HUD_DURATION)
	g_pHudFreezeLimit = register_cvar(HUD_FREEZE_LIMIT_CVAR, HUD_FREEZE_LIMIT)

	g_pFreezeTime = get_cvar_pointer("mp_freezetime")
	g_pRoundTime = get_cvar_pointer("mp_roundtime")

	// Init buffers and some global vars.
	g_sBuffer[0] = 0

	g_HudSync_EndRound = CreateHudSyncObj()
	g_HudSync_SpecInfo = CreateHudSyncObj()
}
public Say_Catch(id){
	new szSaid[128]; read_args(szSaid,charsmax(szSaid))
	remove_quotes(szSaid)

	if(szSaid[0] == '/' || szSaid[0] == '.' || szSaid[0] == '!'){
		if(szSaid[1] == 't' && szSaid[2] == 'o' && szSaid[3] == 'p'){
			if(szSaid[4] == 'm' && szSaid[5] == 'e'){
				new siralama
				new izStats[8], izBody[8]
				siralama = get_user_stats(id, izStats, izBody)
				cmdTop(id,siralama+5)
			}
			else if(szSaid[4] == 0){
				cmdTop(id,10)
			}
			else {
				if(!is_str_num(szSaid[4]))
				{	
					cmdTop(id,10)
					return PLUGIN_HANDLED;
				}
				cmdTop(id,str_to_num(szSaid[4]))
			}
		}
		else if(szSaid[1] == 'r' && szSaid[2] == 'a' && szSaid[3] == 'n' && szSaid[4] == 'k' && szSaid[5] == 's' && szSaid[6] == 't' && szSaid[7] == 'a' && szSaid[8] == 't' && szSaid[9] == 's'){
			cmdRankStats(id)
		}
		else if(szSaid[1] == 'r' && szSaid[2] == 'a' && szSaid[3] == 'n' && szSaid[4] == 'k'){
			cmdRank(id)
		}
		else if(szSaid[1] == 'm' && szSaid[2] == 'e'){
			cmdMe(id)
		}
	}
	
	return PLUGIN_CONTINUE
}
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, "say /topXX", "SayTopXX")
	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(220, 80, 0, 0.05, 0.15, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1)

set_hudtype_endround(Float:fDuration)
{
	set_hudmessage(100, 200, 0, 0.05, 0.55, 0, 0.02, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0)
}

set_hudtype_attacker(Float:fDuration)
	set_hudmessage(220, 80, 0, 0.55, 0.35, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1)

set_hudtype_victim(Float:fDuration)
	set_hudmessage(0, 80, 220, 0.55, 0.60, 0, 6.0, fDuration, (fDuration >= g_fHUDDuration) ? 1.0 : 0.0, 1.0, -1)

set_hudtype_specmode()
{
	set_hudmessage(255, 255, 255, 0.02, 0.96, 2, 0.05, 0.1, 0.01, 3.0, -1)
}

#if defined STATSX_DEBUG
public cmdHudTest(id)
{
	new i, iLen
	iLen = 0

	for (i = 1; i < 20; i++)
		iLen += formatex(g_sBuffer[iLen], charsmax(g_sBuffer) - 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])
{
	return izStats[STATS_SHOTS] ? (100.0 * float(izStats[STATS_HITS]) / float(izStats[STATS_SHOTS])) : (0.0);
}

Float:effec(izStats[8])
{
	return izStats[STATS_KILLS] ? (100.0 * float(izStats[STATS_KILLS]) / float(izStats[STATS_KILLS] + izStats[STATS_DEATHS])) : (0.0);
}

// Distance formula (metric)
Float:distance(iDistance)
{
	return float(iDistance) * 0.0254
}

// Get plugin config flags.
set_plugin_mode(id, sFlags[])
{
	if (sFlags[0])
		g_iPluginMode = read_flags(sFlags)

	get_flags(g_iPluginMode, t_sText, charsmax(t_sText))
	console_print(id, "%L", id, "MODE_SET_TO", t_sText)

	return g_iPluginMode
}

// Get config parameters.
get_config_cvars()
{
	g_fFreezeTime = floatmax(get_pcvar_float(g_pFreezeTime), 0.0);

	g_fHUDDuration = floatmax(get_pcvar_float(g_pHudDuration), 1.0);

	g_fFreezeLimitTime = get_pcvar_float(g_pHudFreezeLimit)
}

// Get and format attackers header and list.
get_attackers(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new izStats[8], izBody[8]
	new iAttacker
	new iFound, iLen

	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(id, iAttacker, izStats, izBody)

	if (izStats[STATS_SHOTS] && ShowFullStats)
	{
		get_user_name(iAttacker, t_sName, charsmax(t_sName))
		iLen = formatex(sBuffer, charsmax(sBuffer), "%L -- %s -- %0.2f%% %L:^n", id, "ATTACKERS", t_sName, accuracy(izStats), id, "ACC")
	}
	else
		iLen = formatex(sBuffer, charsmax(sBuffer), "%L:^n", id, "ATTACKERS")

	// Get and format attacker list.
	for (iAttacker = 1; iAttacker <= MaxClients; iAttacker++)
	{
		if (get_user_astats(id, iAttacker, izStats, izBody, t_sWpn, charsmax(t_sWpn)))
		{
			iFound = 1
			get_user_name(iAttacker, t_sName, charsmax(t_sName))

			if (izStats[STATS_KILLS])
			{
				if (!ShowDistHS)
					iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%s -- %d %L / %d %L^n", t_sName, izStats[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(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new izStats[8], izBody[8]
	new iVictim
	new iFound, iLen

	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(id, 0, izStats, izBody)

	if (izStats[STATS_SHOTS])
		iLen = formatex(sBuffer, charsmax(sBuffer), "%L -- %0.2f%% %L:^n", id, "VICTIMS", accuracy(izStats), id, "ACC")
	else
		iLen = formatex(sBuffer, charsmax(sBuffer), "%L:^n", id, "VICTIMS")

	for (iVictim = 1; iVictim <= MaxClients; iVictim++)
	{
		if (get_user_vstats(id, iVictim, izStats, izBody, t_sWpn, charsmax(t_sWpn)))
		{
			iFound = 1
			get_user_name(iVictim, t_sName, charsmax(t_sName))

			if (izStats[STATS_DEATHS])
			{
				if (!ShowDistHS)
					iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%s -- %d %L / %d %L^n", t_sName, izStats[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(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new iFound, iLen

	iFound = 0
	sBuffer[0] = 0

	if (iKiller && iKiller != id)
	{
		new izAStats[8], izABody[8], izVStats[8], iaVBody[8]

		iFound = 1
		get_user_name(iKiller, t_sName, charsmax(t_sName))

		izAStats[STATS_HITS] = 0
		izAStats[STATS_DAMAGE] = 0
		t_sWpn[0] = 0
		get_user_astats(id, iKiller, izAStats, izABody, t_sWpn, charsmax(t_sWpn))

		izVStats[STATS_HITS] = 0
		izVStats[STATS_DAMAGE] = 0
		get_user_vstats(id, iKiller, izVStats, iaVBody)

		iLen = formatex(sBuffer, charsmax(sBuffer), "%L^n", id, "KILLED_YOU_DIST", t_sName, t_sWpn, distance(g_izUserAttackerDistance[id]))
		iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - 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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%L^n", id, "YOU_DID_DMG", izVStats[STATS_DAMAGE], izVStats[STATS_HITS])
	}

	return iFound
}

// Get and format most disruptive.
add_most_disruptive(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new iPlayer, iMaxDamageId, iMaxDamage, iMaxHeadShots

	iMaxDamageId = 0
	iMaxDamage = 0
	iMaxHeadShots = 0

	// Find player.
	for (iPlayer = 1; iPlayer <= MaxClients; iPlayer++)
	{
		if (g_izUserRndStats[iPlayer][STATS_DAMAGE] >= iMaxDamage && (g_izUserRndStats[iPlayer][STATS_DAMAGE] > iMaxDamage || g_izUserRndStats[iPlayer][STATS_HS] > iMaxHeadShots))
		{
			iMaxDamageId = iPlayer
			iMaxDamage = g_izUserRndStats[iPlayer][STATS_DAMAGE]
			iMaxHeadShots = g_izUserRndStats[iPlayer][STATS_HS]
		}
	}

	// Format statistics.
	if (iMaxDamageId)
	{
		iPlayer = iMaxDamageId

		new Float:fGameEff = effec(g_izUserGameStats[iPlayer])
		new Float:fRndAcc = accuracy(g_izUserRndStats[iPlayer])

		formatex(t_sText, charsmax(t_sText), "%L: %s^n%d %L / %d %L -- %0.2f%% %L / %0.2f%% %L^n", id, "MOST_DMG", g_izUserRndName[iPlayer],
				g_izUserRndStats[iPlayer][STATS_HITS], id, "HIT_S", iMaxDamage, id, "DMG", fGameEff, id, "EFF", fRndAcc, id, "ACC")
		add(sBuffer, charsmax(sBuffer), t_sText)
	}

	return iMaxDamageId
}

// Get and format best score.
add_best_score(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new iPlayer, iMaxKillsId, iMaxKills, iMaxHeadShots

	iMaxKillsId = 0
	iMaxKills = 0
	iMaxHeadShots = 0

	// Find player
	for (iPlayer = 1; iPlayer <= MaxClients; iPlayer++)
	{
		if (g_izUserRndStats[iPlayer][STATS_KILLS] >= iMaxKills && (g_izUserRndStats[iPlayer][STATS_KILLS] > iMaxKills || g_izUserRndStats[iPlayer][STATS_HS] > iMaxHeadShots))
		{
			iMaxKillsId = iPlayer
			iMaxKills = g_izUserRndStats[iPlayer][STATS_KILLS]
			iMaxHeadShots = g_izUserRndStats[iPlayer][STATS_HS]
		}
	}

	// Format statistics.
	if (iMaxKillsId)
	{
		iPlayer = iMaxKillsId

		new Float:fGameEff = effec(g_izUserGameStats[iPlayer])
		new Float:fRndAcc = accuracy(g_izUserRndStats[iPlayer])

		formatex(t_sText, charsmax(t_sText), "%L: %s^n%d %L / %d hs -- %0.2f%% %L / %0.2f%% %L^n", id, "BEST_SCORE", g_izUserRndName[iPlayer],
				iMaxKills, id, "KILL_S", iMaxHeadShots, fGameEff, id, "EFF", fRndAcc, id, "ACC")
		add(sBuffer, charsmax(sBuffer), t_sText)
	}

	return iMaxKillsId
}

// Get and format team score.
add_team_score(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS]

	// Calculate team stats
	for (new iTeam = 0; iTeam < MAX_TEAMS; iTeam++)
	{
		fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam])
		fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam])
		fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam])
	}

	// Format round team stats, MOTD
	formatex(t_sText, charsmax(t_sText), "TERRORIST %d / %0.2f%% %L / %0.2f%% %L^nCT %d / %0.2f%% %L / %0.2f%% %L^n", g_izTeamScore[0],
			fzMapEff[0], id, "EFF", fzRndAcc[0], id, "ACC", g_izTeamScore[1], fzMapEff[1], id, "EFF", fzRndAcc[1], id, "ACC")
	add(sBuffer, charsmax(sBuffer), t_sText)
}

// Get and format team stats, chat version
save_team_chatscore(id, sBuffer[MAX_TEXT_LENGTH + 1])
{
	new Float:fzMapEff[MAX_TEAMS], Float:fzMapAcc[MAX_TEAMS], Float:fzRndAcc[MAX_TEAMS]

	// Calculate team stats
	for (new iTeam = 0; iTeam < MAX_TEAMS; iTeam++)
	{
		fzMapEff[iTeam] = effec(g_izTeamGameStats[iTeam])
		fzMapAcc[iTeam] = accuracy(g_izTeamGameStats[iTeam])
		fzRndAcc[iTeam] = accuracy(g_izTeamRndStats[iTeam])
	}

	// Format game team stats, chat
	formatex(sBuffer, charsmax(sBuffer), "TERRORIST %d / %0.2f%% %L / %0.2f%% %L  --  CT %d / %0.2f%% %L / %0.2f%% %L", g_izTeamScore[0],
			fzMapEff[0], id, "EFF", fzMapAcc[0], id, "ACC", g_izTeamScore[1], fzMapEff[1], id, "EFF", fzMapAcc[1], id, "ACC")
}

// Get and format total stats.
add_total_stats(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	formatex(t_sText, charsmax(t_sText), "%L: %d %L / %d hs -- %d %L / %d %L^n", id, "TOTAL", g_izUserRndStats[0][STATS_KILLS], id, "KILL_S",
			g_izUserRndStats[0][STATS_HS], g_izUserRndStats[0][STATS_HITS], id, "HITS", g_izUserRndStats[0][STATS_SHOTS], id, "SHOT_S")
	add(sBuffer, charsmax(sBuffer), t_sText)
}

// Get and format a user's list of body hits from an attacker.
add_attacker_hits(id, iAttacker, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new iFound = 0

	if (iAttacker && iAttacker != id)
	{
		new izStats[8], izBody[8], iLen

		izStats[STATS_HITS] = 0
		get_user_astats(id, iAttacker, izStats, izBody)

		if (izStats[STATS_HITS])
		{
			iFound = 1
			iLen = strlen(sBuffer)
			get_user_name(iAttacker, t_sName, charsmax(t_sName))

			iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%L:^n", id, "HITS_YOU_IN", t_sName)

			for (new i = 1; i < sizeof(izBody); i++)
			{
				if (!izBody[i])
					continue

				iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%L: %d^n", id, BODY_PART[i], izBody[i])
			}
		}
	}

	return iFound
}

// Get and format killed stats: killer hp, ap, hits.
format_kill_ainfo(id, iKiller, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new iFound = 0

	if (iKiller && iKiller != id)
	{
		new izStats[8], izBody[8]
		new iLen

		iFound = 1
		get_user_name(iKiller, t_sName, charsmax(t_sName))
		izStats[STATS_HITS] = 0
		get_user_astats(id, iKiller, izStats, izBody, t_sWpn, charsmax(t_sWpn))

		iLen = formatex(sBuffer, charsmax(sBuffer), "%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])

		if (izStats[STATS_HITS])
		{
			for (new i = 1; i < sizeof(izBody); i++)
			{
				if (!izBody[i])
					continue

				iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, " %L: %d", id, BODY_PART[i], izBody[i])
			}
		}
		else
			iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, " %L", id, "NO_HITS")
	}
	else
		formatex(sBuffer, charsmax(sBuffer), "%L", id, "YOU_NO_KILLER")

	return iFound
}

// Get and format killed stats: hits, damage on killer.
format_kill_vinfo(id, iKiller, sBuffer[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(id, iKiller, izStats, izBody)

	if (iKiller && iKiller != id)
	{
		iFound = 1
		get_user_name(iKiller, t_sName, charsmax(t_sName))
		iLen = formatex(sBuffer, charsmax(sBuffer), "%L >>", id, "YOU_HIT", t_sName, izStats[STATS_HITS], izStats[STATS_DAMAGE])
	}
	else
		iLen = formatex(sBuffer, charsmax(sBuffer), "%L >>", id, "LAST_RES", izStats[STATS_HITS], izStats[STATS_DAMAGE])

	if (izStats[STATS_HITS])
	{
		for (new i = 1; i < sizeof(izBody); i++)
		{
			if (!izBody[i])
				continue

			iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, " %L: %d", id, BODY_PART[i], izBody[i])
		}
	}
	else
		iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, " %L", id, "NO_HITS")

	return iFound
}

// Get and format top 15.
format_top15(sBuffer[MAX_BUFFER_LENGTH + 1], sayi)
{
	new izStats[8], izBody[8], istate[4]
	new bombalar[4]
	new iLen = 0
	new gorsel[40]
	
	if(sayi == 15 || sayi <= 0 || sayi == 10){
		sayi = 10
		formatex(gorsel, charsmax(gorsel), "%s",TOP10)
	}
	else {
		formatex(gorsel, charsmax(gorsel), "%s",TOPDEF)
	}

	iLen = formatex(sBuffer, charsmax(sBuffer), "<META http-equiv=Content-Type content='text/html; charset=UTF-8'><style>table{background-color: #000000 !important; margin: 0; padding: 0;}body{background:#000000;margin:5pt;padding:2pt;font-family:Tahoma;color:#ccc}.A{background-color:#262626;opacity:0.6;filter:alpha(opacity=60);}.B{background-color:#0b0b0b;opacity:0.6;filter:alpha(opacity=60);}td{font-size:14px}</style><center><table width=600>",gorsel)
	iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
                  "#", "Nick", "Öldürme(HS)", "Ölme","NET", "Isabet Oranı","C4Kurma(P)","C4Çözme")
		  
	new size = min(get_statsnum(),sayi)
	for(new i = size - 10 < 0 ? 0 : size - 10; i < size ; i++)
	{
		get_stats(i, izStats, izBody, t_sName, 22)
		get_stats2(i,bombalar)
		if (equal(istate,"A")) copy(istate,3,"B")
			else copy(istate,3,"A")
			
		while( contain ( t_sName, "<" ) != -1 )
			replace_string( t_sName,charsmax(t_sName),"<", "[" )
		while( contain ( t_sName, ">" ) != -1 )
			replace_string( t_sName,charsmax(t_sName),">", "]" )
		
		if(izStats[STATS_KILLS]-izStats[STATS_DEATHS] >= 0){
			iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "<tr class=%s><td>%d<td>%s <td>%6d(%d)<td>%6d<td>%6d<td>%0.2f%%<td>%d(%d)<td>%d",istate, (i + 1) , t_sName, izStats[STATS_KILLS], 
					izStats[STATS_HS],izStats[STATS_DEATHS],izStats[STATS_KILLS]-izStats[STATS_DEATHS], accuracy(izStats),bombalar[2],bombalar[3],bombalar[1])
		}
		else{
			iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "<tr class=%s><td>%d<td>%s <td>%6d(%d)<td>%6d<td>%s<td>%0.2f%%<td>%d(%d)<td>%d",istate, (i + 1) , t_sName, izStats[STATS_KILLS], 
					izStats[STATS_HS],izStats[STATS_DEATHS],"-", accuracy(izStats),bombalar[2],bombalar[3],bombalar[1])
		}
				
				
	}
	copy(sBuffer[iLen],charsmax(sBuffer) - iLen,"</table></center>")
}

// Get and format rank stats.
format_rankstats(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	new izStats[8] = {0, ...}
	new izBody[8]
	new iRankPos, iLen

	new gorsel[40]
	if(get_user_team(id) == 1)
		formatex(gorsel, charsmax(gorsel), "%s",RANKSTATSTE)
	else
		formatex(gorsel, charsmax(gorsel), "%s",RANKSTATSCT)


	iRankPos = get_user_stats(id, izStats, izBody)
	
	iLen = formatex(sBuffer, charsmax(sBuffer), "<META http-equiv=Content-Type content='text/html; charset=UTF-8'><link href=^"http://mrgaming.org/statsdosya/csmileface.css^" rel=stylesheet type=text/css><center><table width=600 background=^"%s^"><tr><td><br/><tr><td><br/><tr><td><br/><tr><td><br/> <td></tr><tr><td><br/> ",gorsel)
	iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<td>&nbsp;&nbsp;%d Kişi arasında %d. sıradasın.",get_statsnum(), iRankPos)
	
	iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "<tr><td><td class=B>Öldürme <td class=A> %d<tr><td><td class=B>Ölme <td class=A> %d<tr><td><td class=B>HS <td class=A> %d<tr><td><td class=B>Hits<td class=A> %d<tr><td><td class=B>Harcadığın Mermiler <td class=A> %d<tr><td><td class=B>Hasar <td class=A> %d<tr><td><td class=B>Eff <td class=A> %0.2f%%<tr><td><td class=B>İsabet Oranı <td class=A> %0.2f%%",
					izStats[STATS_KILLS], izStats[STATS_DEATHS], izStats[STATS_HS], izStats[STATS_HITS], izStats[STATS_SHOTS],
					izStats[STATS_DAMAGE], effec(izStats), accuracy(izStats))

	new bombalar[4] = {0, ...}
	iRankPos = get_user_stats2(id, bombalar)

	

	iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "<tr><td><td class=B>C4 Kurma <td class=A> %d (%d Başarılı)<tr><td><td class=B>C4 Çözme <td class=A> %d (%d Başarılı)<tr><td><tr><td><tr><td><tr><td><tr><td><tr><td><tr><td></table></center>",
					bombalar[2],bombalar[3],bombalar[0],bombalar[1])
}

// Get and format stats.
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]

	formatex(lKills, charsmax(lKills), "%L", id, "KILLS")
	formatex(lDeaths, charsmax(lDeaths), "%L", id, "DEATHS")
	formatex(lHits, charsmax(lHits), "%L", id, "HITS")
	formatex(lShots, charsmax(lShots), "%L", id, "SHOTS")
	formatex(lDamage, charsmax(lDamage), "%L", id, "DAMAGE")
	formatex(lEff, charsmax(lEff), "%L", id, "EFF")
	formatex(lAcc, charsmax(lAcc), "%L", id, "ACC")
	formatex(lWeapon, charsmax(lWeapon), "%L", id, "WEAPON")

	ucfirst(lEff)
	ucfirst(lAcc)

	get_user_wstats(id, 0, izStats, izBody)

	iLen = formatex(sBuffer, charsmax(sBuffer), "<meta charset=utf-8><body bgcolor=#000000><font color=#FFB000><pre>")
	iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - 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",
					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 += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%-12.12s  %6s  %6s  %6s  %6s  %6s  %4s^n", lWeapon, lKills, lDeaths, lHits, lShots, lDamage, lAcc)

	for (iWeapon = 1; iWeapon < xmod_get_maxweapons() && charsmax(sBuffer) - iLen > 0 ; iWeapon++)
	{
		if (get_user_wstats(id, iWeapon, izStats, izBody))
		{
			xmod_get_wpnname(iWeapon, t_sWpn, charsmax(t_sWpn))
			iLen += formatex(sBuffer[iLen], charsmax(sBuffer) - iLen, "%-12.12s  %6d  %6d  %6d  %6d  %6d  %3.0f%%^n", t_sWpn, izStats[STATS_KILLS], izStats[STATS_DEATHS],
							izStats[STATS_HITS], izStats[STATS_SHOTS], izStats[STATS_DAMAGE], accuracy(izStats))
		}
	}
}

// Format round end stats
format_roundend_hudstats(id, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	sBuffer[0] = 0

	// Create round awards.
	if (ShowMostDisruptive)
		add_most_disruptive(id, sBuffer)
	if (ShowBestScore)
		add_best_score(id, sBuffer)

	// Create round score.
	// Compensate HUD message if awards are disabled.
	if (ShowTeamScore || ShowTotalStats)
	{
		if (ShowMostDisruptive && ShowBestScore)
			add(sBuffer, charsmax(sBuffer), "^n^n")
		else if (ShowMostDisruptive || ShowBestScore)
			add(sBuffer, charsmax(sBuffer), "^n^n^n^n")
		else
			add(sBuffer, charsmax(sBuffer), "^n^n^n^n^n^n")

		if (ShowTeamScore)
			add_team_score(id, sBuffer)

		if (ShowTotalStats)
			add_total_stats(id, sBuffer)
	}
}

// Show round end stats. If gametime is zero then use default duration time.
show_roundend_hudstats(id, Float:fGameTime, sBuffer[MAX_BUFFER_LENGTH + 1])
{
	// 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 (!sBuffer[0]) return

	// If round end timer is zero clear round end stats.
	if (g_fShowStatsTime == 0.0)
	{
		ClearSyncHud(id, g_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(id, g_HudSync_EndRound, "%s", sBuffer)
#if defined STATSX_DEBUG
		log_amx("Show %1.2fs round end HUD stats for #%d", fDuration, id)
#endif
	}
}

// Show round end stats.
show_user_hudstats(id, Float: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(id, iKiller, g_sBuffer)
			add_attacker_hits(id, iKiller, g_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", fDuration, g_sBuffer[0] ? "" : "no ", id)
#endif
		}

		if (ShowVictims)
		{
			get_victims(id, g_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", fDuration, g_sBuffer[0] ? "" : "no ", id)
#endif
		}

		if (ShowAttackers)
		{
			get_attackers(id, g_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", fDuration, g_sBuffer[0] ? "" : "no ", id)
#endif
		}
	}
}

//------------------------------------------------------------
// Plugin commands
//------------------------------------------------------------

// Set or get plugin config flags.
public cmdPluginMode(id, level, cid)
{
	if (!cmd_access(id, level, cid, 1))
		return PLUGIN_HANDLED

	if (read_argc() > 1)
		read_argv(1, g_sBuffer, charsmax(g_sBuffer))
	else
		g_sBuffer[0] = 0

	set_plugin_mode(id, g_sBuffer)

	return PLUGIN_HANDLED
}

// Display MOTD stats.
public cmdStatsMe(id)
{
	if (!SayStatsMe)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}

	format_stats(id, g_sBuffer)
	get_user_name(id, t_sName, charsmax(t_sName))
	show_motd(id, g_sBuffer, t_sName)

	return PLUGIN_CONTINUE
}

// Display MOTD rank.
public cmdRankStats(id)
{
	if (!SayRankStats)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}

	format_rankstats(id, g_sBuffer)
	get_user_name(id, t_sName, charsmax(t_sName))
	show_motd(id, g_sBuffer, t_sName)

	return PLUGIN_CONTINUE
}

// Display MOTD top15 ranked.
public cmdTop(id, sayi)
{
	if (!SayTopXX)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}
	format_top15(g_sBuffer, sayi)
	if(sayi == 15 || sayi <= 0 || sayi == 10){
		show_motd(id, g_sBuffer, "En iyiler")
	}
	else {
		show_motd(id, g_sBuffer, "Istatistikler")
	}
	return PLUGIN_CONTINUE
}

// Display killer information.
public cmdHp(id)
{
	if (!SayHP)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}

	new iKiller = g_izKilled[id][KILLED_KILLER_ID]

	format_kill_ainfo(id, iKiller, g_sBuffer)
	client_print(id, print_chat, "* %s", g_sBuffer)

	return PLUGIN_CONTINUE
}

// Display user stats.
public cmdMe(id)
{
	if (!SayMe)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}
	if(get_pcvar_num(mecanlikapaliacik) == 1 && is_user_alive(id))
	{
		ChatColor(id, "%s Bu komutu ancak canli degil iken kullanabilirsiniz.", TAG)
		return PLUGIN_HANDLED
	}
	format_kill_vinfo(id, 0, g_sBuffer)
	ChatColor(id, "%s %s", TAG, g_sBuffer)

	return PLUGIN_CONTINUE
}

// Display user rank
public cmdRank(id)
{
	if (!SayRank)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}

	new izStats[8], izBody[8]
	new iRankPos, iRankMax
	new Float:fEff, Float:fAcc

	iRankPos = get_user_stats(id, izStats, izBody)
	iRankMax = get_statsnum()

	fEff = effec(izStats)
	fAcc = accuracy(izStats)

	if(is_user_steam(id)){
		ChatColor(id, "%s %d kişi arasından %d. öldürdüğünüz %d, hit %d, %0.2f%% eff. ve %0.2f%% isabet", TAG, iRankMax, iRankPos, izStats[STATS_KILLS], izStats[STATS_HITS], fEff, fAcc)
	}
	else {
		ChatColor(id, "%s %d kisi arasindan %d. oldurdugunuz %d, hit %d, %0.2f%% eff. ve %0.2f%% isabet", TAG, iRankMax, iRankPos, izStats[STATS_KILLS], izStats[STATS_HITS], fEff, fAcc)
	}

	return PLUGIN_CONTINUE
}

// Report user weapon status to team.
public cmdReport(id)
{
	if (!SayReport)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}

	new iWeapon, iClip, iAmmo, iHealth, iArmor

	iWeapon = get_user_weapon(id, iClip, iAmmo)

	if (iWeapon != 0)
		xmod_get_wpnname(iWeapon, t_sWpn, charsmax(t_sWpn))

	iHealth = get_user_health(id)
	iArmor = get_user_armor(id)

	new lWeapon[16]

	formatex(lWeapon, charsmax(lWeapon), "%L", LANG_SERVER, "WEAPON")
	strtolower(lWeapon)

	if (iClip >= 0)
	{
		formatex(g_sBuffer, charsmax(g_sBuffer), "%s: %s, %L: %d/%d, %L: %d, %L: %d", lWeapon, t_sWpn, LANG_SERVER, "AMMO", iClip, iAmmo, LANG_SERVER, "HEALTH", iHealth, LANG_SERVER, "ARMOR", iArmor)
	}
	else
		formatex(g_sBuffer, charsmax(g_sBuffer), "%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
}

// Display team map score
public cmdScore(id)
{
	if (!SayScore)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}

	save_team_chatscore(id, g_sScore)
	client_print(id, print_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]) ? 0 : -1
	num_to_str(g_izStatsSwitch[id], t_sText, charsmax(t_sText))
	client_cmd(id, "setinfo _amxstatsx %s", t_sText)

	new lEnDis[32]

	formatex(lEnDis, charsmax(lEnDis), "%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)
	{
		ChatColor(id, "%s Bu komut ayarlardan kapalidir.", TAG)
		return PLUGIN_HANDLED
	}

	showStatsMenu(id, g_izUserMenuPosition[id] = 0)

	return PLUGIN_CONTINUE
}

//--------------------------------
// Menu
//--------------------------------

public actionStatsMenu(id, key)
{
	switch (key)
	{
		// Key '1' to '7', execute action on this option
		case 0..6:
		{
			new iOption, iIndex
			iOption = (g_izUserMenuPosition[id] * PPL_MENU_OPTIONS) + key

			if (iOption >= 0 && iOption < 32)
			{
				iIndex = g_izUserMenuPlayers[id][iOption]

				if (is_user_connected(iIndex))
				{
					switch (g_izUserMenuAction[id])
					{
						case 0: format_stats(iIndex, g_sBuffer)
						case 1: format_rankstats(iIndex, g_sBuffer)
						default: g_sBuffer[0] = 0
					}

					if (g_sBuffer[0])
					{
						get_user_name(iIndex, t_sName, charsmax(t_sName))
						show_motd(id, g_sBuffer, t_sName)
					}
				}
			}

			showStatsMenu(id, g_izUserMenuPosition[id])
		}
		// Key '8', change action
		case 7:
		{
			g_izUserMenuAction[id]++

			if (g_izUserMenuAction[id] >= MAX_PPL_MENU_ACTIONS)
				g_izUserMenuAction[id] = 0

			showStatsMenu(id, g_izUserMenuPosition[id])
		}
		// Key '9', select next page of options
		case 8: showStatsMenu(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(id, iMenuPos)
{
	new iLen, iKeyMask, iPlayers
	new iUserIndex, iMenuPosMax, iMenuOption, iMenuOptionMax

	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 = formatex(g_sBuffer, charsmax(g_sBuffer), "\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

	for (iMenuOption = 0; iMenuOption < iMenuOptionMax; iMenuOption++)
	{
		get_user_name(g_izUserMenuPlayers[id][iUserIndex++], t_sName, charsmax(t_sName))
		iKeyMask |= (1<<iMenuOption)
		iLen += formatex(g_sBuffer[iLen], charsmax(g_sBuffer) - iLen, "%d. %s^n\w", iMenuOption + 1, t_sName)
	}

	iKeyMask |= MENU_KEY_8|MENU_KEY_0
	iLen += formatex(g_sBuffer[iLen], charsmax(g_sBuffer) - iLen, "^n8. %s^n\w", g_izUserMenuActionText[g_izUserMenuAction[id]])

	if (iPlayers > iUserIndex)
	{
		iLen += formatex(g_sBuffer[iLen], charsmax(g_sBuffer) - iLen, "^n9. %L...", id, "MORE")
		iKeyMask |= MENU_KEY_9
	}

	if (iMenuPos > 0)
		iLen += formatex(g_sBuffer[iLen], charsmax(g_sBuffer) - iLen, "^n0. %L", id, "BACK")
	else
		iLen += formatex(g_sBuffer[iLen], charsmax(g_sBuffer) - iLen, "^n0. %L", id, "EXIT")

	show_menu(id, iKeyMask, g_sBuffer, -1, "Server Stats")

	return PLUGIN_HANDLED
}

//------------------------------------------------------------
// Plugin events
//------------------------------------------------------------

// Reset game stats on game start and restart.
public eventStartGame()
{
	read_data(2, t_sText, charsmax(t_sText))

	if (t_sText[6] == 'w')
	{
		read_data(3, t_sText, charsmax(t_sText))
		g_fStartGame = get_gametime() + float(str_to_num(t_sText))
	}
	else
		g_fStartGame = get_gametime()

	return PLUGIN_CONTINUE
}

// Round start
public eventStartRound()
{
	new iTeam, id, i

	new Float:roundtime = get_pcvar_float(g_pRoundTime)
	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 = 0; iTeam < MAX_TEAMS; iTeam++)
			{
				g_izTeamEventScore[iTeam] = 0

				for (i = 0; i < sizeof(g_izTeamGameStats[]); i++)
					g_izTeamGameStats[iTeam][i] = 0
			}

			// Clear game stats, incl '0' that is sum of all users.
			for (id = 0; id <= MaxClients; id++)
			{
				for (i = 0; i < sizeof(g_izUserGameStats[]); i++)
					g_izUserGameStats[id][i] = 0
			}
		}

		// Update team score with "TeamScore" event values and
		// clear team round stats.
		for (iTeam = 0; iTeam < MAX_TEAMS; iTeam++)
		{
			g_izTeamScore[iTeam] = g_izTeamEventScore[iTeam]

			for (i = 0; i < sizeof(g_izTeamRndStats[]); i++)
				g_izTeamRndStats[iTeam][i] = 0
		}

		// Clear user round stats, incl '0' that is sum of all users.
		for (id = 0; id <= MaxClients; id++)
		{
			g_izUserRndName[id][0] = 0

			for (i = 0; i < sizeof(g_izUserRndStats[]); i++)
				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 eventSpawn(id)
{
	if (!is_user_alive(id))
		return HAM_IGNORED

	new args[1]
	args[0] = id

	if (g_iPluginMode & MODE_HUD_DELAY)
		set_task(0.1, "delay_spawn", 200 + id, args, sizeof(args))
	else
		delay_spawn(args)

	return HAM_IGNORED
}

public delay_spawn(args[])
{
	new id = args[0]
	new Float:fGameTime

	// Show user and score round stats after spawn
#if defined STATSX_DEBUG
	log_amx("Spawn for #%d", id)
#endif
	fGameTime = get_gametime()
	show_user_hudstats(id, fGameTime)

	if (g_izStatsSwitch[id] && g_sAwardAndScore[0])
	{
		format_roundend_hudstats(id, g_sAwardAndScore)
		show_roundend_hudstats(id, fGameTime, g_sAwardAndScore)
	}

	// 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 i = 1; i <= MaxClients; i++)
		g_izUserVictimDistance[id][i] = 0

	return PLUGIN_CONTINUE
}

// Save killer info on death.
public client_death(killer, victim, wpnindex, hitplace, TK)
{
	// Bail out if no killer.
	if (!killer)
		return PLUGIN_CONTINUE

	if (killer != victim)
	{
		new iaVOrigin[3], iaKOrigin[3]
		new iDistance

		get_user_origin(victim, iaVOrigin)
		get_user_origin(killer, iaKOrigin)

		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(iaVOrigin, iaKOrigin)
		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 < 1 || 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 iTeam, i
	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(id, g_izUserRndName[id], charsmax(g_izUserRndName[]))

	if (get_user_rstats(id, izStats, izBody))
	{
		// Update user's team round stats
		if (iTeam >= 0 && iTeam < MAX_TEAMS)
		{
			for (i = 0; i < sizeof(izStats); i++)
			{
				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 (i = 0; i < sizeof(izStats); i++)
			{
				g_izUserRndStats[id][i] += izStats[i]
				g_izUserGameStats[id][i] += izStats[i]
			}
		} else {
			g_izUserUserID[id] = get_user_userid(id)

			for (i = 0; i < sizeof(izStats); i++)
			{
				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(id, iKiller, g_sBuffer))
		{
			client_print(id, print_chat, "* %s", g_sBuffer)
			format_kill_vinfo(id, iKiller, g_sBuffer)
		}

		client_print(id, print_chat, "* %s", g_sBuffer)
	}

	// Display player stats info.
#if defined STATSX_DEBUG
	log_amx("Kill stats for #%d", id)
#endif
	show_user_hudstats(id, 0.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(2, t_sText, charsmax(t_sText))

		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[MAX_PLAYERS], iPlayer, iPlayers, id

	get_players(iaPlayers, iPlayers)

	// 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

	// Get and save round end stats time.
	g_fShowStatsTime = get_gametime()

	for (iPlayer = 0; iPlayer < iPlayers; iPlayer++)
	{
		id = iaPlayers[iPlayer]

		if (g_fzShowUserStatsTime[id] == 0.0)
		{
			kill_stats(id)
		}

		if (!g_izStatsSwitch[id])
			continue

		format_roundend_hudstats(id, g_sAwardAndScore)
		show_roundend_hudstats(id, 0.0, g_sAwardAndScore)
	}

	// Flag round end processed.
	g_iRoundEndProcessed = 1
}

public eventTeamScore()
{
	new sTeamID[1 + 1], iTeamScore
	read_data(1, sTeamID, charsmax(sTeamID))
	iTeamScore = read_data(2)
	g_izTeamEventScore[(sTeamID[0] == 'C') ? 1 : 0] = iTeamScore

	return PLUGIN_CONTINUE
}

public eventIntermission()
{
	if (EndPlayer || EndTop15)
		set_task(1.0, "end_game_stats", 900)
}

public end_game_stats()
{
	new iaPlayers[MAX_PLAYERS], iPlayer, iPlayers, id

	if (EndPlayer)
	{
		get_players(iaPlayers, iPlayers)

		for (iPlayer = 0; iPlayer < iPlayers; iPlayer++)
		{
			id = iaPlayers[iPlayer]

			if (!g_izStatsSwitch[id])
				continue	// Do not show any stats

			cmdStatsMe(id)
		}
	}
	else if (EndTop15)
	{
		get_players(iaPlayers, iPlayers)
		format_top15(g_sBuffer, 10)

		for (iPlayer = 0; iPlayer < iPlayers; iPlayer++)
		{
			id = iaPlayers[iPlayer]

			if (!g_izStatsSwitch[id])
				continue	// Do not show any stats

			show_motd(id, g_sBuffer, "Top 15")
		}
	}

	return PLUGIN_CONTINUE
}

public eventSpecMode(id)
{
	new sData[12]
	read_data(2, sData, charsmax(sData))
	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 iRankPos, iRankMax

			get_user_name(iPlayer, t_sName, charsmax(t_sName))

			iRankPos = get_user_stats(iPlayer, izStats, izBody)
			iRankMax = get_statsnum()

			set_hudtype_specmode()
			ShowSyncHudMsg(id, g_HudSync_SpecInfo, "%L", id, "X_RANK_IS", t_sName, iRankPos, iRankMax)
		}
	}

	return PLUGIN_CONTINUE
}

public client_connect(id)
{
	if (ShowStats)
	{
		get_user_info(id, "_amxstatsx", t_sText, charsmax(t_sText))
		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
}
stock bool:is_user_steam(id)
{
	static dp_pointer;
	
	if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
	{
		server_cmd("dp_clientinfo %d", id);
		server_exec();
		return (get_pcvar_num(dp_pointer) == 2) ? true : false;
	}
	
	new szAuthid[34];
	get_user_authid(id, szAuthid, charsmax(szAuthid));
	
	return (containi(szAuthid, "LAN") < 0);
}
stock ChatColor(const id, const input[], any:...)
{
	new count = 1, players[32]
	static msg[191]
	vformat(msg, 190, input, 3)
	format(msg, sizeof(msg), "%s", msg)
	replace_all(msg, 190, "!g", "^4")
	replace_all(msg, 190, "!y", "^1")
	replace_all(msg, 190, "!team", "^3")
	
	if (id) players[0] = id; else get_players(players, count, "ch")
	{
		for (new i = 0; i < count; i++)
		{
			if (is_user_connected(players[i]))
			{
				message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
				write_byte(players[i]);
				write_string(msg); 
				message_end();
			}
		}
	}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1055\\ f0\\ fs16 \n\\ par }
*/

Link:
Linklerini gizle
Linki Kopyala

0nurd0gann
Mesajlar: 742
Kayıt: Cmt Ara 23, 2017 10:20 pm
Clan İsmi: BLOODY GAMING
İletişim:

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen 0nurd0gann »

yeni sunucuma kurdum bile :roll:
BLOODY GAMING WORLD

- 213.238.173.X / PRO PUBLIC -

Link:
Linklerini gizle
Linki Kopyala
Kullanıcı avatarı

Konu Sahibi
Yek'-ta
Mesajlar: 9624
Kayıt: Cmt Eyl 12, 2015 12:40 pm
İletişim:

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen Yek'-ta »

cazi53 yazdı: Prş Ağu 01, 2019 4:16 am Buna geçiş yapmak şart oldu.

Ben de 2.2'de şu şekilde kullanıyordum, banner olan kısmı bir arkadaşa kapattırmıştım :roll:
Banner kısmı güzel ve hoş duruyor da, gereksiz olduğunun farkına vardım. Onun yerine sunucu ismini yazdım en tepeye.

Link:
Linklerini gizle
Linki Kopyala

quadfor75
Yasaklı Üye
Yasaklı Üye
Mesajlar: 528
Kayıt: Cum Şub 09, 2018 12:53 pm

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen quadfor75 »

Yek'-ta yazdı: Prş Ağu 01, 2019 12:37 pm
cazi53 yazdı: Prş Ağu 01, 2019 4:16 am Buna geçiş yapmak şart oldu.

Ben de 2.2'de şu şekilde kullanıyordum, banner olan kısmı bir arkadaşa kapattırmıştım :roll:
Banner kısmı güzel ve hoş duruyor da, gereksiz olduğunun farkına vardım. Onun yerine sunucu ismini yazdım en tepeye.
Sizden ricam c4kurma ve c4çözmeyi kaldırırmısınız?

Link:
Linklerini gizle
Linki Kopyala

arda34
Yasaklı Üye
Yasaklı Üye
Mesajlar: 4
Kayıt: Çrş Eyl 25, 2019 1:37 pm

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen arda34 »

cs3.csduragi.net serverimize kurma şansiniz varmı kurmaya çalışıyorum ama hala eskisi duruyor yetkililerin panele kurma şansi yokmu

Link:
Linklerini gizle
Linki Kopyala

arda34
Yasaklı Üye
Yasaklı Üye
Mesajlar: 4
Kayıt: Çrş Eyl 25, 2019 1:37 pm

CSM StatsX v2.3 [Steam Özel]

Mesaj gönderen arda34 »

@Yek@Yek'-ta

Link:
Linklerini gizle
Linki Kopyala
Cevapla