Raised This Month: $32 Target: $400
 8% 

(Paid) ProKreedv2.4 Edit


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Mark.uG
AlliedModders Donor
Join Date: Oct 2014
Old 11-10-2019 , 23:35   (Paid) ProKreedv2.4 Edit
Reply With Quote #1

$10

I just need this to save both ways SQL and Non SQL Way.

Want to display info in server and on website but for some reason the server will not display the webpage right thru SQL.


Code:
/* Plugin generated by AMXX-Studio */

// uncomment this line for top15 sql database saving
//#define USING_SQL

// uncomment this line for recieving grenades on cmd /weapons
//#define GIVE_GRENADES

#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#include <fun>

#if defined USING_SQL
#include <sqlx>
#endif

#define PLUGIN "ProKreedz Ultimativ"
#define VERSION "v2.4"
#define AUTHOR "vato loco [GE-S]"
#define PLUGIN_CVAR "prokreedz_ultimativ"

#define PLUGIN_HOOK    "PK_Hook_v2.4.amxx"
#define PLUGIN_JETPACK "PK_Jetpack_v2.4.amxx"
#define KZ_HOOK        "kz_prize_hook"
#define KZ_JETPACK     "kz_prize_jetpack"
#define KZ_HOOK_OFF    "HookOff"
#define KZ_JET_OFF     "JetPackOff"

#define KZ_ACCESS         ADMIN_KICK
#define KZ_ADMIN_MENU     ADMIN_RCON
#define CP_MAX_PRO        get_pcvar_num(g_kz_maxpro_cp)
#define CP_DISTANCE       35.0
#define DISTANCE          120
#define M_RADIOS_LEFT     192 

#define TASK_INFO         12222
#define TASK_RESPAWN      13333
#define TASK_AUTOJOIN     14444
#define TASK_ADMINGLOW    15555
#define TASK_CREATEBOT    16666
#define TASK_FUNCTIONS    17777 
#define TASK_NVG          18888

#define MENU_KEYS MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_0
#define MENU_KEYS_ADMIN MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_8|MENU_KEY_9|MENU_KEY_0

// Kz ColorChat          
enum color {
	normal = 1, // clients scr_concolor cvar color
	green,      // Green Color
	team        // Red, grey, blue
}

#if !defined USING_SQL
new const g_iTopColors[][] = {
	"#ff0000",
	"#07fcff",
	"#fff007"
}
#endif

#if !defined GIVE_GRENADES
new const SKIP_WEAPONS = (1<<CSW_HEGRENADE) | (1<<CSW_FLASHBANG) | (1<<CSW_SMOKEGRENADE)
#endif

new const SayCmdsClient[][64] = {
	"menu","KzPlayerMenu","usp", "cmd_usp","scout", "cmd_scout","spawn","cmd_restart",
	"respawn","cmd_restart","start","cmd_restart","restart","cmd_restart","reset","cmd_reset",
	"checkpoint","cmd_checkpoint","cp","cmd_checkpoint","check","cmd_checkpoint",
	"gocheck","cmd_gocheck","gc","cmd_gocheck","tp","cmd_gocheck",
	"stuck","cmd_stuck","unstuck","cmd_stuck","showkeys", "cmd_showplayerkeys",
	"spec","cmd_spec","unspec","cmd_spec","pause","cmd_pause","unpause","cmd_pause","help", "cmd_help",
	"top10","cmd_top15","top15","cmd_top15","nub10","show_nub15","nub15","show_nub15",
	"pro10","show_pro15","pro15","show_pro15","weapons", "cmd_weapons", "drop", "cmd_drop"
}

new const SayCmdsAdmin[][64] = { 
	"amenu","KzAdminMenuShow", "adminmenu","KzAdminMenuShow", 
	"setstart","cmd_admin_setstart", "delstart","cmd_admin_delstart" 
}

new const g_start_sounds[][] = {
	"barney/beertopside",
	"scientist/c3a2_sci_portopen",
	"barney/c1a2_ba_climb"
}

new const g_block_commands[][] = {
	"chooseteam", "buy", "buyammo1", "buyammo2", "buyequip",
	"cl_autobuy", "cl_rebuy", "cl_setautobuy", "cl_setrebuy"
}

new const g_radio_commands[][] = {"radio1", "radio2", "radio3"}

new const KZ_PROKREEDZ_DIR[] = "addons/amxmodx/configs/prokreedz"
new const KZ_TOP15_DIR[] = "addons/amxmodx/configs/prokreedz/kz_top15"
new const KZ_START_DIR[] = "addons/amxmodx/configs/prokreedz/kz_start"
new const KZ_CONFIG[] = "prokreedz/ProKreedz.cfg"

new const Float:VEC_DUCK_HULL_MIN[3] = {-16.0, -16.0, -18.0}
new const Float:VEC_DUCK_HULL_MAX[3] = {16.0, 16.0, 18.0}

#if defined USING_SQL
new Handle:g_hSqlTuple
#else
new pro15_names[24][32], pro15_authid[24][32], Float:pro15_times[24], pro15_cp[24], pro15_gocp[24]
new nub15_names[24][32], nub15_authid[24][32], Float:nub15_times[24], nub15_cp[24], nub15_gocp[24]
#endif

new Float:g_fStartPosition[3]
new bool:g_bStartPos
new g_StartFile[128]

new Float:g_fPlayerStartPosition[33][3]
new bool:g_bStartPosition[33] 

new Float:g_fCheckpoints[33][3]  
new Float: g_fCheckStuck[33][3]
new bool:g_bPlayerUsedStuck[33]
new g_iCheckpointNum[33]
new g_iGoCheckNum[33]

new is_plr_alive[33]
new is_plr_bot[33]
new is_plr_connected[33]

new bool:g_bFirstSpawn[33]
new bool:g_bHasScout[33]
new bool:g_bShowTimer[33]
new bool:g_bNoclip[33]
new g_iBunnyHop[33]
new g_iPlayerKeys[33]
new bool:g_bShowKeys[33]
new Float:fShowKeyTime
new plr_key[33][64]
new bool:g_bPlayerNvgUse[33]
new bool:g_bWeapons[33]
new g_iPlayerName[33][32]
new g_iTarget[33]

new Float:g_iPlayerTime[33]
new bool:g_bPlayerStart[33] 
new Float:g_iPlayerPauseTime[33]
new g_bPlayerPaused[33]
new g_bPlayerSpec[33]
new Float:g_fSpecPosition[33][3]
new Float:g_iPlayerHealth[33]

new g_iPlayerModel[33][32]
new g_iEntPlayerModel[33]                       
new g_iEntWeaponModel[33]
new g_bPlayerIsAdmin[33]

new g_szMapName[64]

new g_kz_modname_enable
new g_kz_checkpoints
new g_kz_semiclip
new g_kz_transparency
new g_kz_scout
new g_kz_pause
new g_kz_spec
new g_kz_sounds
new g_kz_vip
new g_kz_adminglow
new g_kz_money
new g_kz_autojoin
new g_kz_bhop
new g_kz_cheatdetect
new g_kz_godmode 
new g_kz_nokill
new g_kz_help
new g_kz_bot
new g_kz_prize
new g_kz_doorsound 
new g_kz_painsound
new g_kz_watersound
new g_kz_botname
new g_kz_tag
new g_kz_advert_time
new g_kz_autoheal
new g_kz_autoheal_hp
new g_kz_weaponspeed
new g_kz_weaponspeed_color
new g_kz_weaponspeed_xypos
new g_kz_showkeys
new g_kz_showkeys_color
new g_kz_showkeys_xypos
new g_kz_nvg_enabled
new g_kz_nvg_radius 
new g_kz_nvg_color  
new g_kz_time_color
new g_kz_status_color
new g_kz_showhealth_color
new g_kz_showhealth_xypos
new g_kz_maxpro_cp
new g_kz_weapons
new g_kz_autostart
new g_kz_statustext
new g_kz_statustext_color
new g_kz_statustext_xypos
#if defined USING_SQL
new g_kz_sql_host
new g_kz_sql_user
new g_kz_sql_pass
new g_kz_sql_db
new g_kz_weburl
#endif

new g_mp_fiendlyfire
new g_mp_autoteambalance
new g_mp_limitteams
new g_mp_freezetime
new g_mp_autokick
new g_mp_flashlight
new g_sv_airaccelerate
new g_sv_gravity

new g_SyncTimer
new g_SyncWeapon
new g_SyncShowKeys
new g_SyncShowHealth
new g_SyncStatusText

new g_SayText
new g_ScoreAttrib
new g_TeamInfo
new g_StatusValue
new g_StatusText
new g_Money
new g_ClCorpse
new g_ShowMenu
new g_VguiMenu
new g_RoundTime
new g_ScreenFade
new g_NVGToggle
new g_Health
new g_StatusIcon

new Trie:g_tStartTargets
new Trie:g_tFinishTargets
new Trie:g_tRemoveEntities
new Trie:g_tWeaponCommands
new Trie:g_tdoorSnd
new Trie:g_tpainSnd
new Trie:g_twaterSnd

new g_iMaxPlayers

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	register_cvar(PLUGIN_CVAR, VERSION, FCVAR_SERVER|FCVAR_SPONLY, 0.0)
	register_dictionary("prokreedz_v2.4.txt")
	register_menucmd(register_menuid("ProKreedz Ultimativ v2.4 - Adminmenu"),MENU_KEYS_ADMIN,"AdminMenuHandler")
	register_menucmd(register_menuid("ProKreedz v2.4 - Playermenu"),MENU_KEYS,"PlayerMenuHandler")
	
	RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn", 1)
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled", 1)
	RegisterHam(Ham_Player_PreThink, "player", "fw_PreThink_Post", 1)
	RegisterHam(Ham_Use, "func_button", "fw_UseButton", 0)
	RegisterHam(Ham_Spawn, "weaponbox", "fw_Weaponbox", 1)
	RegisterHam(Ham_Player_Jump, "player", "fw_PlayerJump")
	
	register_forward(FM_Think,"fw_ThinkEntity")
	register_forward(FM_EmitSound, "fw_EmitSound")
	register_forward(FM_ClientKill,"fw_ClientKill")
	register_forward(FM_StartFrame, "fw_StartFrame")
	register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1)
	
	register_event("CurWeapon", "ev_CheckWeapon", "be", "1=1")
	register_event("Health", "ev_Health", "be", "1>0")
	
	register_clcmd("nightvision","cmd_toggle_nvg")
	register_clcmd("kz_noclip","cmd_admin_noclip", KZ_ACCESS, "<name|#userid|steamid|@ALL> <on/off>")
	register_clcmd("kz_gravity", "cmd_admin_gravity", KZ_ACCESS, "<name|#userid|steamid|@ALL> <gravity>")
	
	new i
	kz_register_saycmd("noclip", "cmd_admin_noclip", KZ_ACCESS)
	for(i = 0; i < sizeof(SayCmdsAdmin); i = i+2)
		kz_register_saycmd(SayCmdsAdmin[i], SayCmdsAdmin[i+1], KZ_ADMIN_MENU)
	
	for(i = 0; i < sizeof(SayCmdsClient); i = i+2)
		kz_register_saycmd(SayCmdsClient[i], SayCmdsClient[i+1], 0)
	
	g_kz_modname_enable = register_cvar("kz_modname_enable","1")
	g_kz_checkpoints = register_cvar("kz_checkpoints","1")
	g_kz_semiclip = register_cvar("kz_semiclip","1")
	g_kz_transparency = register_cvar("kz_transparency","1")
	g_kz_scout = register_cvar("kz_scout","1")
	g_kz_pause = register_cvar("kz_pause","1")
	g_kz_spec = register_cvar("kz_spec","1")
	g_kz_sounds = register_cvar("kz_sounds","1")
	g_kz_vip = register_cvar("kz_vip","1") 
	g_kz_adminglow = register_cvar("kz_adminglow","1")
	g_kz_money = register_cvar("kz_money","1337")
	g_kz_autojoin = register_cvar("kz_autojoin","1")
	g_kz_bhop = register_cvar("kz_bhop","1")
	g_kz_cheatdetect = register_cvar("kz_cheatdetect","1")
	g_kz_godmode = register_cvar("kz_godmode","1")
	g_kz_nokill = register_cvar("kz_nokill","1")
	g_kz_help = register_cvar("kz_help","1")
	g_kz_bot = register_cvar("kz_bot","1")
	g_kz_prize = register_cvar("kz_prize","1")
	g_kz_doorsound = register_cvar("kz_doorsound","1")
	g_kz_painsound = register_cvar("kz_painsound","1")
	g_kz_watersound = register_cvar("kz_watersound","1")
	g_kz_botname = register_cvar("kz_botname", "ProKreedz Ultimativ v2.4")
	g_kz_tag = register_cvar("kz_tag", "[ProKreedz]")
	g_kz_advert_time = register_cvar("kz_advert_time","60")
	g_kz_autoheal = register_cvar("kz_autoheal", "1")
	g_kz_autoheal_hp = register_cvar("kz_autoheal_hp", "50")
	g_kz_weapons = register_cvar("kz_weapons","1") 
	g_kz_weaponspeed = register_cvar("kz_weaponspeed","1")
	g_kz_weaponspeed_color = register_cvar("kz_weaponspeed_color","0 255 255")
	g_kz_weaponspeed_xypos = register_cvar("kz_weaponspeed_xypos","0.35 0.75")
	g_kz_showkeys = register_cvar("kz_showkeys","1")
	g_kz_showkeys_color = register_cvar("kz_showkeys_color","0 255 255")
	g_kz_showkeys_xypos = register_cvar("kz_showkeys_xypos","-1.0 -0.40")
	g_kz_nvg_enabled = register_cvar("kz_nvg_enabled","1")
	g_kz_nvg_radius = register_cvar("kz_nvg_radius","70")
	g_kz_nvg_color = register_cvar("kz_nvg_color","0 255 255")
	g_kz_time_color = register_cvar("kz_time_color","0 255 255")
	g_kz_status_color = register_cvar("kz_status_color","255 0 0")
	g_kz_showhealth_color = register_cvar("kz_showhealth_color", "255 50 0")
	g_kz_showhealth_xypos = register_cvar("kz_showhealth_xypos ", "-1.0 0.9")
	g_kz_maxpro_cp = register_cvar("kz_maxpro_cp","10000")
	g_kz_autostart = register_cvar("kz_autostart","1")
	g_kz_statustext = register_cvar("kz_statustext","1")
	g_kz_statustext_color = register_cvar("kz_statustext_color","255 255 0")
	g_kz_statustext_xypos = register_cvar("kz_statustext_xypos","-1.0 0.52")
#if defined USING_SQL
	g_kz_sql_host = register_cvar("kz_sql_host", "")
	g_kz_sql_user = register_cvar("kz_sql_user", "")
	g_kz_sql_pass = register_cvar("kz_sql_pass", "", FCVAR_PROTECTED)
	g_kz_sql_db = register_cvar("kz_sql_db", "")
	g_kz_weburl = register_cvar("kz_weburl", "http://your.domain.com/path/to/top15.php")
#else
	register_cvar("kz_sql_host", "")
	register_cvar("kz_sql_user", "")
	register_cvar("kz_sql_pass", "", FCVAR_PROTECTED)
	register_cvar("kz_sql_db", "")
	register_cvar("kz_weburl", "")
#endif
	
	g_mp_fiendlyfire = get_cvar_pointer("mp_friendlyfire")
	g_mp_autoteambalance = get_cvar_pointer("mp_autoteambalance")
	g_mp_limitteams = get_cvar_pointer("mp_limitteams")
	g_mp_freezetime = get_cvar_pointer("mp_freezetime")
	g_mp_autokick = get_cvar_pointer("mp_autokick")
	g_mp_flashlight = get_cvar_pointer("mp_flashlight")
	g_sv_airaccelerate = get_cvar_pointer("sv_airaccelerate")
	g_sv_gravity = get_cvar_pointer("sv_gravity")
	
	set_pcvar_num(g_mp_fiendlyfire, 0)
	set_pcvar_num(g_mp_autoteambalance, 0)
	set_pcvar_num(g_mp_limitteams, 0)
	set_pcvar_num(g_mp_freezetime, 0)
	set_pcvar_num(g_mp_autokick, 0)
	set_pcvar_num(g_mp_flashlight, 1)
	set_pcvar_num(g_sv_airaccelerate, 10)
	
	g_Health = get_user_msgid("Health")
	g_ScreenFade = get_user_msgid("ScreenFade")
	g_NVGToggle = get_user_msgid("NVGToggle")
	g_SayText = get_user_msgid("SayText")
	g_ScoreAttrib = get_user_msgid("ScoreAttrib")
	g_TeamInfo = get_user_msgid("TeamInfo")
	g_StatusValue = get_user_msgid("StatusValue")
	g_StatusText = get_user_msgid("StatusText")
	g_Money = get_user_msgid("Money")
	g_ClCorpse = get_user_msgid("ClCorpse")
	g_ShowMenu = get_user_msgid("ShowMenu")
	g_VguiMenu = get_user_msgid("VGUIMenu")
	g_RoundTime = get_user_msgid("RoundTime")
	g_StatusIcon = get_user_msgid("StatusIcon")
	register_message(g_Health, "MsgHealth")
	register_message(g_Money, "MsgMoney")
	register_message(g_ClCorpse, "MsgClCorpse")
	register_message(g_ShowMenu, "MsgShowMenu")
	register_message(g_VguiMenu, "MsgVguiMenu")
	register_message(g_RoundTime,"MsgRoundTime")
	register_message(g_StatusIcon , "MsgStatusIcon")
	register_message(g_StatusValue , "MsgStatusValue")
	set_msg_block(g_ClCorpse, BLOCK_SET)
	set_msg_block(g_StatusText, BLOCK_SET)
	
	new iEnt
	iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "info_target"))
	set_pev(iEnt, pev_classname, "kz_time_think")
	set_pev(iEnt, pev_nextthink, get_gametime() + 1.0)
	
	iEnt = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "info_target"))
	set_pev(iEnt, pev_classname, "kz_player_statustext")
	set_pev(iEnt, pev_nextthink, get_gametime() + 1.0)
	
	set_task(5.0, "kz_CreateBot", TASK_CREATEBOT, _, _, "b")
	set_task(1.0, "kz_Functions", TASK_FUNCTIONS, _, _, "b")
	
	g_SyncTimer = CreateHudSyncObj()
	g_SyncWeapon = CreateHudSyncObj()
	g_SyncShowKeys = CreateHudSyncObj()
	g_SyncShowHealth = CreateHudSyncObj()
	g_SyncStatusText = CreateHudSyncObj()
	
	new const g_iStartTargets[][] = {
		"counter_start","clockstartbutton",
		"firsttimerelay","but_start",
		"counter_start_button","multi_start",
		"timer_startbutton","start_timer_emi",
		"gogogo" 
	}
	g_tStartTargets = TrieCreate()
	for(i = 0; i < sizeof(g_iStartTargets); i++)
	{
		TrieSetCell(g_tStartTargets, g_iStartTargets[i], i)
	}
	new const g_iFinishTargets[][] = {
		"counter_off","clockstopbutton",
		"clockstop","but_stop",
		"counter_stop_button","multi_stop",
		"stop_counter","m_counter_end_emi" 
	}
	g_tFinishTargets = TrieCreate()
	for(i = 0; i < sizeof(g_iFinishTargets); i++)
	{
		TrieSetCell(g_tFinishTargets, g_iFinishTargets[i], i)
	}
	new const g_iWeaponCommands[][] = {
		"usp", "glock", "deagle", "p228", "elites",
		"fn57", "m3", "xm1014", "mp5", "tmp", "p90",
		"mac10", "ump45", "ak47", "galil", "famas",
		"sg552", "m4a1", "aug", "scout", "awp", "g3sg1",
		"sg550", "m249", "vest", "vesthelm", "flash",
		"hegren", "sgren", "defuser", "nvgs", "shield",
		"primammo", "secammo", "km45", "9x19mm", "nighthawk",
		"228compact", "fiveseven", "12gauge", "autoshotgun",
		"mp", "c90", "cv47", "defender", "clarion", "krieg552",
		"bullpup", "magnum", "d3au1", "krieg550"
	}
	g_tWeaponCommands = TrieCreate()
	for(i = 0; i < sizeof(g_iWeaponCommands); i++)
	{
		TrieSetCell(g_tWeaponCommands, g_iWeaponCommands[i], i)
	}
	new const g_doorSnd[][] = {
		"doors/doorstop1.wav",
		"doors/doorstop2.wav",
		"doors/doorstop3.wav"
	}
	g_tdoorSnd = TrieCreate()
	for(i = 0; i < sizeof(g_doorSnd); i++)
	{
		TrieSetCell(g_tdoorSnd, g_doorSnd[i], i)
	}
	new const g_painSnd[][] = {
		"player/pl_pain2.wav", "player/pl_pain3.wav", 
		"player/pl_pain4.wav", "player/pl_pain5.wav",
		"player/pl_pain6.wav", "player/pl_pain7.wav", 
		"player/bhit_kevlar-1.wav", "player/bhit_flesh-1.wav",
		"player/bhit_flesh-2.wav", "player/bhit_flesh-3.wav"
	}
	g_tpainSnd = TrieCreate()
	for(i = 0; i < sizeof(g_painSnd); i++)
	{
		TrieSetCell(g_tpainSnd, g_painSnd[i], i)
	}
	new const g_waterSnd[][] = {
		"player/pl_swim1.wav", "player/pl_swim2.wav",
		"player/pl_swim3.wav", "player/pl_swim4.wav",
		"player/waterrun.wav"
	}
	g_twaterSnd = TrieCreate()
	for(i = 0; i < sizeof(g_waterSnd); i++)
	{
		TrieSetCell(g_twaterSnd, g_waterSnd[i], i)
	}
	get_mapname(g_szMapName, charsmax(g_szMapName))
	strtolower(g_szMapName)
	
	g_iMaxPlayers = get_maxplayers()
}

public plugin_cfg()
{
	new KzConfig[64], KzCfg[128]
	get_configsdir(KzConfig, 63)
	format(KzCfg, 127, "%s/%s", KzConfig, KZ_CONFIG)
	
	if(file_exists(KzCfg))
	{
		server_cmd("exec %s", KzCfg)
		server_exec()
	}
	else
	{
		kz_make_config(KzCfg)
	}
	
	if(!dir_exists(KZ_START_DIR))
	{
		mkdir(KZ_START_DIR)
	}
	format(g_StartFile, 127, "%s/%s.txt", KZ_START_DIR, g_szMapName)
	
	if(file_exists(g_StartFile))
	{
		g_bStartPos = true
		
		new Data[64], x[13], y[13], z[13]
		new f = fopen(g_StartFile, "rt")
		
		while(!feof(f))
		{
			fgets(f, Data, 63)
			parse(Data, x, 12, y, 12, z, 12)
			
			g_fStartPosition[0] = str_to_float(x)
			g_fStartPosition[1] = str_to_float(y)
			g_fStartPosition[2] = str_to_float(z)
		}
		fclose(f)
	}
	else
	{
		g_bStartPos = false
	}
	if(get_pcvar_num(g_kz_prize))
		set_task(get_pcvar_float(g_kz_advert_time),"Hook")
	
	if(get_pcvar_num(g_kz_autoheal))
		kz_create_healer()	
	
	if(get_pcvar_num(g_kz_modname_enable))
		register_forward(FM_GetGameDescription, "fw_GameDescription")
	
	for(new i = 0; i < sizeof(g_radio_commands); i++)
		register_clcmd(g_radio_commands[i], "BlockCommands")
	
	for(new i = 0; i < sizeof(g_block_commands) ; i++) 
		register_clcmd(g_block_commands[i], "BlockCommands")
	
#if defined USING_SQL
	new szHost[64], szUser[64], szPass[64], szDb[64]
	get_pcvar_string(g_kz_sql_host, szHost, charsmax(szHost))
	get_pcvar_string(g_kz_sql_user, szUser, charsmax(szUser))
	get_pcvar_string(g_kz_sql_pass, szPass, charsmax(szPass))
	get_pcvar_string(g_kz_sql_db, szDb, charsmax(szDb))
	
	g_hSqlTuple = SQL_MakeDbTuple(szHost, szUser, szPass, szDb)
	
	if(g_hSqlTuple == Empty_Handle)
	{
		log_amx("Failed to connect to SQL database. Please check login info.")
	}
	else
	{
		SQL_ThreadQuery(g_hSqlTuple, "QueryCreateTable", "CREATE TABLE IF NOT EXISTS kz_pro15 (name VARCHAR(32) NOT NULL, steamid VARCHAR(35) NOT NULL, map VARCHAR(64) NOT NULL, time DOUBLE NOT NULL, cp INT NOT NULL, gc INT NOT NULL, PRIMARY KEY (steamid, map));");
		SQL_ThreadQuery(g_hSqlTuple, "QueryCreateTable", "CREATE TABLE IF NOT EXISTS kz_nub15 (name VARCHAR(32) NOT NULL, steamid VARCHAR(35) NOT NULL, map VARCHAR(64) NOT NULL, time DOUBLE NOT NULL, cp INT NOT NULL, gc INT NOT NULL, PRIMARY KEY (steamid, map));");
	}
#else
	for(new i = 0 ; i < 15; ++i)
	{
		pro15_times[i] = 999999999.00000
		nub15_times[i] = 999999999.00000
	}
	read_pro15()
	read_nub15()
#endif
}

#if defined USING_SQL
public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:flQueueTime)
{
	switch(iFailState)
	{
		case TQUERY_CONNECT_FAILED:
		{
			log_amx("Failed to connect to database (%i): %s", iError, szError)
		}
		case TQUERY_QUERY_FAILED:
		{
			log_amx("Error on query for QueryCreateTable() (%i): %s", iError, szError)
		}
		default: {
			// successfully created tables
		}
	}
}
#endif

public plugin_precache() 
{
	register_forward(FM_Spawn, "fw_Spawn", 0)
	set_pev(0, pev_speed, 8192.0)
	
	new const g_iRemoveEntities[][] = {
		"func_bomb_target", "info_bomb_target", 
		"hostage_entity", "monster_scientist", 
		"func_hostage_rescue", "info_hostage_rescue",
		"info_vip_start", "func_vip_safetyzone", 
		"func_escapezone","armoury_entity", 
		"game_player_equip", "player_weaponstrip",
		"info_deathmatch_start" 
	}
	g_tRemoveEntities = TrieCreate()
	for(new i = 0; i < sizeof(g_iRemoveEntities); i++)
	{
		TrieSetCell(g_tRemoveEntities, g_iRemoveEntities[i], i)
	}
	if(!dir_exists(KZ_PROKREEDZ_DIR))
		mkdir(KZ_PROKREEDZ_DIR)
	
	if(!dir_exists(KZ_TOP15_DIR))
		mkdir(KZ_TOP15_DIR)
}

public plugin_end()
{
	TrieDestroy(g_tStartTargets)
	TrieDestroy(g_tFinishTargets)
	TrieDestroy(g_tWeaponCommands)
}

public client_connect(id) 
{
	g_iCheckpointNum[id] = 0
	g_iGoCheckNum[id] = 0
	g_bPlayerSpec[id] = false
	g_bPlayerPaused[id] = false
	g_iPlayerPauseTime[id] = 0.0
	g_iPlayerTime[id] = 0.0
	g_bPlayerStart[id] = false
	g_bFirstSpawn[id] = true
	g_bHasScout[id] = false
	g_iBunnyHop[id] = 0
	g_bShowTimer[id] = true
	g_bPlayerIsAdmin[id] = false
	g_bStartPosition[id] = false 
	g_iTarget[id] = 0
	get_user_name(id, g_iPlayerName[id], 31)
}

public client_putinserver(id)
{
	is_plr_connected[id] = true
	
	if(!is_user_bot(id))
	{
		if(get_user_flags(id) & KZ_ACCESS) 
		{	
			g_bPlayerIsAdmin[id] = true
		}
	}
	else
	{
		is_plr_bot[id] = true
	}
}

public client_disconnect(id)
{
	if(g_bPlayerIsAdmin[id])
		fm_remove_model_ents(id)
	g_bPlayerSpec[id] = false
	is_plr_alive[id] = false
	is_plr_bot[id] = false
	is_plr_connected[id] = false
}

public client_infochanged(id)
{ 
	get_user_info(id, "name", g_iPlayerName[id], 31)
}

public ev_CheckWeapon(id) 
{
	static weapon_used[33]             
	
	static weapon_active, weapon_num
	weapon_active = read_data(1)      
	weapon_num = read_data(2)       
	
	if(!g_bHasScout[id] && !g_bWeapons[id] && is_plr_alive[id]) 
	{
		if(weapon_num == CSW_SCOUT) 
		{
			ham_strip_weapon(id, "weapon_scout")
		}
	}
	if((weapon_num != weapon_used[id]) && weapon_active && get_pcvar_num(g_kz_weaponspeed)) 
	{
		weapon_used[id] = weapon_num
		
		static Float:maxspeed, r, g, b, Float:x, Float:y
		pev(id, pev_maxspeed, maxspeed)
		
		if(maxspeed < 0.0)
			maxspeed = 250.0
		
		GetCvarPosition(g_kz_weaponspeed_xypos, x, y)
		GetCvarColor(g_kz_weaponspeed_color, r, g, b)
		set_hudmessage(r, g, b, x, y, _, _, 1.0, _, _, 2)
		ShowSyncHudMsg(id, g_SyncWeapon, "%L", id, "PKU_WEAPON_SPEED", floatround( maxspeed, floatround_floor))
	}
	if(g_bPlayerIsAdmin[id]) 
	{
		fm_set_admin_weaponmodel(id)
	}
}

public ev_Health(id)
{
	if(!get_pcvar_num(g_kz_godmode))
	{
		new Float:fHealth
		pev(id, pev_health, fHealth)
		if(fHealth > 255.0)
		{
			static r, g, b, Float:x, Float:y
			GetCvarPosition(g_kz_showhealth_xypos, x, y)
			GetCvarColor(g_kz_showhealth_color, r, g, b)
			set_hudmessage(r, g, b, x, y, 0, _, 2.0, _, _, 2)
			ShowSyncHudMsg(id, g_SyncShowHealth, "HP: %d", floatround(fHealth))
		}
	}
}

public cmd_help(id)
{
	if(get_pcvar_num(g_kz_help))
	{
		static MOTD[2048], MLTITEL[24], Pos
		
		formatex(MLTITEL,23,"%L", id, "PKU_IMOTD_HELP_TITEL")
		
		Pos = formatex(MOTD,sizeof MOTD - 1,"<style type=^"text/css^"><!--.h1 { color:#228B22;font-weight:bold;}.h2 { color:#FFFFFF; font-weight:bold; };font-family: Times New Roman}--></style><body bgcolor=^"#000000^"><table width=^"100%%^" border=^"0^">")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_HELP_MENU")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /menu")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_SCOUT")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /scout")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_USP")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /usp")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_TOP15")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /nub15")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /pro15")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_CHECKPOINT")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /checkpoint")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /cp")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_GOCHECK")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /gocheck")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /tp")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_STUCK")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /stuck")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /unstuck")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_START")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /start")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /respawn")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_RESET")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /reset")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_PAUSE")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /pause")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_SPEC")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /spec")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_SHOWKEYS") 
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /showkeys")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"%L", id, "PKU_IMOTD_WEAPONS") 
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /weapons")
		Pos += formatex(MOTD[Pos],sizeof MOTD - 1 - Pos,"<tr><td class=h2>say /drop")
		
		show_motd(id,MOTD,MLTITEL)
	}
	return PLUGIN_CONTINUE
}

public cmd_top15(id)
{
	kz_colorchat(id, green,"^x03Top15: ^x01'^x04/pro15^x01'^x03 - ^x01'^x04/nub15^x01'")
}

public cmd_showplayerkeys(id)
{
	g_bShowKeys[id] = !g_bShowKeys[id]
}

public cmd_toggle_nvg(id) 
{ 
	g_bPlayerNvgUse[id] = !g_bPlayerNvgUse[id]
	
	if(get_pcvar_num(g_kz_nvg_enabled))
	{
		kz_set_nvg_msg(id, false)
		
		if(g_bPlayerNvgUse[id])
			kz_make_nvg(id)
		else 
			kz_remove_nvg(id)
	}
	else
	{
		kz_set_nvg_msg(id, g_bPlayerNvgUse[id])
	}
	if(g_bPlayerNvgUse[id])
		emit_sound(id, CHAN_ITEM, "items/nvg_on.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	else 
		emit_sound(id, CHAN_ITEM, "items/nvg_off.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	return PLUGIN_HANDLED
} 

public cmd_restart(id) 
{
	if(g_bPlayerPaused[id] || !is_plr_alive[id])
		return PLUGIN_HANDLED
	
	cmd_reset(id)
	if(g_bStartPos)
	{
		PlayerSpawnPost(id)
		set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
		engfunc(EngFunc_SetOrigin, id, g_fStartPosition)
	}
	else
	{
		if(g_bStartPosition[id])
		{
			PlayerSpawnPost(id)
			set_pev(id, pev_velocity, Float:{0.0, 0.0, 0.0})
			engfunc(EngFunc_SetOrigin, id, g_fPlayerStartPosition[id])
		}
		else
			ExecuteHamB(Ham_CS_RoundRespawn, id)
	}
	return PLUGIN_HANDLED
}

public cmd_reset(id)
{
	if(g_bPlayerPaused[id] || !is_plr_alive[id])
		return PLUGIN_HANDLED
	
	if(g_bPlayerStart[id])
		kz_colorchat(id, green,"%L", id, "PKU_CMD_RESET")
	
	g_iCheckpointNum[id] = 0
	g_iGoCheckNum[id] = 0
	g_iPlayerPauseTime[id] = 0.0
	g_iPlayerTime[id] = 0.0
	g_bPlayerStart[id] = false
	set_pev(id, pev_frags, 0.0)
	cs_set_user_deaths(id, 0)
	return PLUGIN_HANDLED
}

public cmd_drop(id)
{
	if(is_plr_alive[id] && g_bWeapons[id] && !g_bPlayerPaused[id])
		kz_set_weapons(id)
}

public cmd_weapons(id)
{
	if(!get_pcvar_num(g_kz_weapons))
		return PLUGIN_HANDLED
	
	if(is_plr_alive[id] && !g_bPlayerPaused[id])
	{
		new szWeaponName[20]
		for(new iCswId = CSW_P228; iCswId <= CSW_P90; iCswId++)
		{
#if !defined GIVE_GRENADES			
			if(SKIP_WEAPONS & (1<<iCswId))
				continue
#endif
			if(!user_has_weapon(id, iCswId) && get_weaponname(iCswId, szWeaponName, 19))
			{
				give_item(id, szWeaponName)
				g_bWeapons[id] = true
				DetectCheat(id,"Weapons")
			}
		}
	}
	return PLUGIN_HANDLED_MAIN
}

public cmd_scout(id) 
{
	if(!get_pcvar_num(g_kz_scout)) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_SCOUT_OFF")
		return PLUGIN_HANDLED
	}
	if(!is_plr_alive[id])
		return PLUGIN_HANDLED
	
	if(!g_bHasScout[id])
	{
		if(g_iCheckpointNum[id] > CP_MAX_PRO || !g_bPlayerStart[id])
		{	
			give_item(id,"weapon_scout")
			g_bHasScout[id] = true
		}
		else 
		{
			give_item(id,"weapon_scout")
			g_bHasScout[id] = true
			kz_colorchat(id, green,"%L", id, "PKU_PRO_OFF")
		}
	}
	else 
	{
		if(user_has_weapon(id, CSW_SCOUT)) 
		{
			g_bHasScout[id] = true
			kz_colorchat(id, green,"%L", id, "PKU_SCOUT_HAS")
		}
		else 
		{
			give_item(id,"weapon_scout")
			g_bHasScout[id] = true
		}
	}
	return PLUGIN_CONTINUE
}

public cmd_usp(id)
{ 
	if(!is_plr_alive[id])
		return PLUGIN_HANDLED
	
	if(user_has_weapon(id, CSW_USP)) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_USP_HAS")
	}
	else 
	{
		give_item(id,"weapon_usp")
	}
	return PLUGIN_CONTINUE
}

public cmd_pause(id) 
{
	if(!get_pcvar_num(g_kz_pause)) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_PAUSE_OFF")
		return PLUGIN_HANDLED
	}
	if(g_bPlayerStart[id] && is_plr_alive[id]) 
	{
		if(!g_bPlayerPaused[id]) 
		{
			g_iPlayerPauseTime[id] += (get_gametime() - g_iPlayerTime[id])
			g_bPlayerPaused[id] = true
			g_iPlayerTime[id] = 0.0
			
			set_pev(id, pev_flags, pev(id, pev_flags) | FL_FROZEN)
			if(!get_pcvar_num(g_kz_semiclip))
			{
				set_pev(id, pev_solid, SOLID_NOT)
			}
			if(g_bPlayerIsAdmin[id])
			{
				set_pev(id, pev_rendermode, kRenderTransTexture)
				set_pev(id, pev_renderamt, 0.0)
				set_rendering(g_iEntPlayerModel[id], kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 40)
				set_rendering(g_iEntWeaponModel[id], kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 40)
			}
			else
			{
				set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 40)
			}
		}
		else
		{
			g_bPlayerPaused[id] = false
			g_iPlayerTime[id] = get_gametime()
			
			set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
			
			if(!get_pcvar_num(g_kz_semiclip))
			{
				set_pev(id, pev_solid, SOLID_SLIDEBOX)
			}
			if(g_bPlayerIsAdmin[id])
			{
				set_rendering(g_iEntPlayerModel[id])
				set_rendering(g_iEntWeaponModel[id])
				if(get_pcvar_num(g_kz_adminglow))
					set_task(1.5,"AdminGlow", id + TASK_ADMINGLOW)
			}
			else
			{
				set_rendering(id)
			}
		}
	}
	else
	{
		kz_colorchat(id, green,"%L", id, "PKU_PAUSE_USE")
	}
	return PLUGIN_CONTINUE
}

public cmd_spec(id) 
{
	if(!get_pcvar_num(g_kz_spec)) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_SPEC_OFF")
		return PLUGIN_HANDLED
	}
	if(is_plr_alive[id]) 
	{
		if (g_bPlayerStart[id]) 
		{			
			if(!g_bPlayerPaused[id]) 
			{
				g_iPlayerPauseTime[id] += (get_gametime() - g_iPlayerTime[id])
				g_bPlayerPaused[id] = true
				g_iPlayerTime[id] = 0.0
			}
		}
		pev(id, pev_health, g_iPlayerHealth[id])  
		pev(id, pev_origin, g_fSpecPosition[id])
		cs_set_user_team(id, CS_TEAM_SPECTATOR)
		set_pev(id, pev_solid, SOLID_NOT)
		set_pev(id, pev_movetype, MOVETYPE_FLY)
		set_pev(id, pev_effects, EF_NODRAW)
		set_pev(id, pev_deadflag, DEAD_DEAD)
		set_pev(id, pev_flags, pev(id, pev_flags) & ~FL_FROZEN)
		set_user_teaminfo(id, "SPECTATOR")
		is_plr_alive[id] = false
		g_bPlayerSpec[id] = true
	}
	else
	{
		if(g_bPlayerStart[id]) 
		{
			if(g_bPlayerPaused[id]) 
			{
				g_bPlayerPaused[id] = false
				g_iPlayerTime[id] = get_gametime()
			}
		}
		cs_set_user_team(id, CS_TEAM_CT)
		set_user_teaminfo(id, "CT")
		fw_PlayerKilled(id)
	}
	return PLUGIN_CONTINUE
}

public cmd_checkpoint(id) 
{
	if (!get_pcvar_num(g_kz_checkpoints)) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_CP_OFF")
		return PLUGIN_HANDLED
	}
	if(!is_plr_alive[id] || g_bPlayerPaused[id]) 
		return PLUGIN_HANDLED
	
	new Float:vVelocity[3]
	pev(id, pev_velocity, vVelocity)
	
	if(vVelocity[2] != 0) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_CP_FALL")
		return PLUGIN_HANDLED
	}
	if(g_iCheckpointNum[id] == 0) 
	{
		pev(id,pev_origin,g_fCheckpoints[id])
	}
	else 
	{
		g_fCheckStuck[id] = g_fCheckpoints[id]
		pev(id,pev_origin,g_fCheckpoints[id])
	}
	g_iCheckpointNum[id]++
	kz_colorchat(id, green,"%L", id, "PKU_CP_CREATE")
	
	if(g_bPlayerUsedStuck[id])
		g_bPlayerUsedStuck[id] = false
	if(g_iCheckpointNum[id] == CP_MAX_PRO + 1 && g_bPlayerStart[id] && !g_bHasScout[id]) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_PRO_OFF")
		kz_colorchat(id, green,"%L", id, "PKU_CP_TO_MUCH")
	}	
	return PLUGIN_HANDLED
}

public cmd_gocheck(id) 
{
	if (!get_pcvar_num(g_kz_checkpoints)) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_CP_OFF")
		return PLUGIN_HANDLED
	}
	if(!is_plr_alive[id] || g_bPlayerPaused[id]) 
		return PLUGIN_HANDLED
	
	if(g_iCheckpointNum[id] == 0) 
	{
		kz_colorchat(id, green,"%L", id, "PKU_CP_NULL")
		return PLUGIN_HANDLED
	}
	if(!get_pcvar_num(g_kz_semiclip)) 
	{
		new Float:origin[3]
		for(new i = 1 ; i <= g_iMaxPlayers ; i++) 
		{
			if(id != i && is_plr_connected[i] && is_plr_alive[id]) 
			{
				pev(i,pev_origin,origin)
				if(get_distance_f(g_fCheckpoints[id],origin) <= CP_DISTANCE) 
				{
					kz_colorchat(id, green,"%L", id, "PKU_CP_BUSY")
					return PLUGIN_HANDLED
				}
			}
		}
	}
	engfunc(EngFunc_SetOrigin,id,g_fCheckpoints[id])
	set_pev(id,pev_velocity,Float:{0.0,0.0,0.0})
	set_user_duck(id)
	set_pev(id,pev_gravity,1.0)
	g_iGoCheckNum[id]++
	
	return PLUGIN_HANDLED
}

public cmd_stuck(id) 
{
	if (!get_pcvar_num(g_kz_checkpoints) || !is_plr_alive[id] || g_bPlayerPaused[id]) 
		return PLUGIN_HANDLED
	
	if(g_iCheckpointNum[id] > 1 && !g_bPlayerUsedStuck[id]) 
	{
		if(!get_pcvar_num(g_kz_semiclip)) 
		{
			new Float:origin[3]
			for(new i = 1 ; i <= g_iMaxPlayers ; i++) 
			{
				if(id != i && is_plr_connected[i] && is_plr_alive[id]) 
				{
					pev(i,pev_origin,origin)
					if(get_distance_f(g_fCheckStuck[id],origin) <= CP_DISTANCE) 
					{
						kz_colorchat(id, green,"%L", id, "PKU_CP_SOMEONE")
						return PLUGIN_HANDLED
					}
				}
			}
		}
		engfunc(EngFunc_SetOrigin,id,g_fCheckStuck[id])
		set_pev(id,pev_velocity,Float:{0.0,0.0,0.0})
		set_user_duck(id)
		set_pev(id,pev_gravity,1.0)
		g_iGoCheckNum[id]++
		
		g_fCheckpoints[id] = g_fCheckStuck[id] 
		g_bPlayerUsedStuck[id] = true
	}
	return PLUGIN_HANDLED
}

public cmd_admin_setstart(id, lvl, cid)
{
	if(!cmd_access(id, lvl, cid, 1))
		return PLUGIN_HANDLED
	
	if(is_plr_alive[id])
	{
		if(file_exists(g_StartFile))
		{
			delete_file(g_StartFile)
		}
		pev(id, pev_origin, g_fStartPosition)
		g_bStartPos = true
		kz_colorchat(id, green, "%L", id, "PKU_SET_START")
		
		new Data[128]
		formatex(Data, 127, "%f %f %f", g_fStartPosition[0], g_fStartPosition[1], g_fStartPosition[2])
		write_file(g_StartFile, Data, 0)
	}
	else
	{
		kz_colorchat(id, green, "%L", id, "PKU_BE_ALIVE")
	}
	return PLUGIN_HANDLED
}

public cmd_admin_delstart(id, lvl, cid)
{
	if(!cmd_access(id, lvl, cid, 1))
		return PLUGIN_HANDLED
	
	if(file_exists(g_StartFile))
	{
		delete_file(g_StartFile)
	}
	g_bStartPos = false
	kz_colorchat(id, green, "%L", id, "PKU_DEL_START")
	
	return PLUGIN_HANDLED
}

public cmd_admin_noclip(id, lvl, cid) 
{
	if(read_argc() == 1 || read_argc() == 2) 
	{
		if(!cmd_access(id, lvl, cid, 1)) 
		{
			set_pev(id, pev_movetype, MOVETYPE_WALK)
			g_bNoclip[id] = false
			return PLUGIN_HANDLED
		}
		g_bNoclip[id] = !g_bNoclip[id]
		set_pev(id, pev_movetype, g_bNoclip[id] ? MOVETYPE_NOCLIP : MOVETYPE_WALK)
		if(g_bNoclip[id])
			DetectCheat(id,"Noclip")
	}
	else if(read_argc() == 3) 
	{
		if(!cmd_access(id, lvl, cid, 3))
			return PLUGIN_HANDLED
		
		new name[32], PkGiveNoclip[192]
		get_user_name(id,name,31)
		
		new szarg1[32], szarg2[8], bool:mode
		read_argv(1,szarg1,31)
		read_argv(2,szarg2,7)
		if(equal(szarg2,"on"))
			mode = true
		
		if(equal(szarg1,"@ALL")) 
		{
			for(new i = 1; i <= g_iMaxPlayers; i++) 
			{
				if(is_plr_alive[i]) 
				{
					g_bNoclip[i] = mode
					set_pev(i, pev_movetype, g_bNoclip[i] ? MOVETYPE_NOCLIP : MOVETYPE_WALK )
					formatex(PkGiveNoclip,191,"%L", i, g_bNoclip[i] ? "PKU_NOCLIP_AT_ALL" : "PKU_NOCLIP_TAKE_ALL")
					kz_colorchat(i, green,"%L", i, "PKU_NOCLIP_GIVE", name, PkGiveNoclip)
					if(g_bNoclip[i])
					{
						DetectCheat(i,"Noclip")
						kz_colorchat(i, green,"%L", i, "PKU_NOCLIP_REMOVE") 
					}
				}
			}
		}
		else 
		{
			new pid = cmd_target(id,szarg1,2)
			if(pid > 0) 
			{
				g_bNoclip[pid] = mode
				set_pev(pid, pev_movetype, g_bNoclip[pid] ? MOVETYPE_NOCLIP : MOVETYPE_WALK )
				formatex(PkGiveNoclip,191,"%L", pid, g_bNoclip[pid] ? "PKU_NOCLIP_AT_TARGET" : "PKU_NOCLIP_TAKE_TARGET")
				kz_colorchat(pid, green,"%L", pid, "PKU_NOCLIP_GIVE", name, PkGiveNoclip)
				if(g_bNoclip[pid])
				{
					DetectCheat(pid,"Noclip")
					kz_colorchat(pid, green,"%L", pid, "PKU_NOCLIP_REMOVE")
				}
			}
		}
	}
	return PLUGIN_HANDLED
}

public cmd_admin_gravity(id, lvl, cid) 
{
	if(!cmd_access(id, lvl, cid, 3))
		return PLUGIN_HANDLED
	
	new name[32]
	get_user_name(id,name,31)
	
	new szarg1[32], szarg2[8], gravity, Float:fgravity
	read_argv(1,szarg1,31)
	read_argv(2,szarg2,7)
	gravity = str_to_num(szarg2)
	fgravity = gravity / float(get_pcvar_num(g_sv_gravity))
	
	if(equal(szarg1,"@ALL")) 
	{
		for(new i = 1; i <= g_iMaxPlayers; i++) 
		{
			if(is_plr_connected[i]) 
			{
				set_pev(i, pev_gravity, fgravity)
				kz_colorchat(i, green,"%L", i, "PKU_GRAVITY_ALL", name, gravity)
				if(fgravity != 1.0)
					DetectCheat(i,"Gravity")
			}
		}
	}
	else 
	{
		new pid = cmd_target(0, szarg1, 2)
		if(pid > 0) 
		{
			set_pev(pid, pev_gravity, fgravity)
			kz_colorchat(pid, green,"%L", pid, "PKU_GRAVITY_TARGET", name, gravity)
			if(fgravity != 1.0)
				DetectCheat(pid,"Gravity")
		}
	}
	return PLUGIN_HANDLED
}

public fw_PlayerKilled(id)
{
	if(pev_valid(g_iEntWeaponModel[id])) 
	{
		engfunc(EngFunc_RemoveEntity, g_iEntWeaponModel[id])
		g_iEntWeaponModel[id] = 0
	}
	is_plr_alive[id] = false
	set_task(0.5,"PlayerRespawn", id + TASK_RESPAWN)
}

public PlayerRespawn(id) 
{
	id -= TASK_RESPAWN
	ExecuteHamB(Ham_CS_RoundRespawn, id)
}

public fw_PlayerSpawn(id)
{
	if(!is_user_alive(id)) 
		return
	
	is_plr_alive[id] = true
	PlayerSpawnPost(id)
	cs_set_user_nvg(id)
	set_pdata_int(id, M_RADIOS_LEFT, 0, 5)
	
	if(!g_bPlayerSpec[id])
	{
		if(g_iCheckpointNum[id] > 0)
		{
			cmd_gocheck(id)
		}
	}
	else
	{
		set_pev(id, pev_origin, g_fSpecPosition[id])
		set_pev(id, pev_health, g_iPlayerHealth[id])
		set_user_duck(id)
		g_bPlayerSpec[id] = false
	}
	if(g_bPlayerIsAdmin[id])
	{
		// new g_vip = get_pcvar_num(g_kz_vip)
		// switch(g_vip)
		// {
			// case 0: fm_set_plr_model(id, "sas")
				
			// case 1:
			// {
				// fm_set_plr_model(id, "vip")
				// set_user_scoreattrib(id, 4)
			// }     
			// case 2:
			// {
				// fm_set_plr_model(id, "arctic")
				// set_user_scoreattrib(id, 4)
			// }
		// }
		AdminGlow(id)
	}
	if(get_pcvar_num(g_kz_godmode)) 
	{
		set_pev(id, pev_takedamage, 0.0)
	}
	else 
	{
		set_pev(id, pev_takedamage, 2.0)
	}
	if(g_bFirstSpawn[id]) 
	{
		if(get_pcvar_num(g_kz_help))
			set_task(10.0,"PlayerInfo",id + TASK_INFO)
	}
	g_bFirstSpawn[id] = false
} 

public PlayerSpawnPost(id)
{
	kz_set_weapons(id)
	kz_set_health(id)
	
	if(get_pcvar_num(g_kz_nvg_enabled) && g_bPlayerNvgUse[id])
	{
		kz_remove_nvg(id)
	}
}

public fw_UseButton(iEnt, id)
{
	if(!iEnt || id > 32)
		return HAM_IGNORED
	
	if(!is_user_alive(id))
		return HAM_IGNORED
	
	new target[32]
	pev(iEnt, pev_target, target, 31)
	
	if(TrieKeyExists(g_tStartTargets, target))
	{
		if((pev(id, pev_movetype) == MOVETYPE_NOCLIP)) 
		{
			kz_colorchat(id, green,"%L", id, "PKU_NOCLIP_ON")
			kz_colorchat(id, green,"%L", id, "PKU_NOCLIP_REMOVE") 
			return HAM_SUPERCEDE
		}
		g_bStartPosition[id] = false
		if(get_pcvar_num(g_kz_autostart) && !g_bStartPos)
		{
			pev(id, pev_origin, g_fPlayerStartPosition[id])
			g_bStartPosition[id] = true
		}
		cmd_reset(id)
		if(g_bWeapons[id])
			kz_set_weapons(id)
		set_pev(id, pev_gravity, 1.0)
		kz_set_health(id)
		
		if(!g_bPlayerIsAdmin[id])
		{
			kz_callfunc(id, KZ_HOOK , PLUGIN_HOOK, "0")
			kz_callfunc(id, KZ_JETPACK , PLUGIN_JETPACK, "0")
		}
		kz_callfunc(id, KZ_HOOK_OFF , PLUGIN_HOOK, "")
		kz_callfunc(id, KZ_JET_OFF , PLUGIN_JETPACK, "")
		
		if(user_has_weapon(id, CSW_SCOUT)) 
		{
			g_bHasScout[id] = true
			kz_colorchat(id, green,"%L", id, "PKU_START_AGAIN")
		} 
		else 
		{
			g_bHasScout[id] = false
		}
		g_bPlayerStart[id] = true
		g_iPlayerTime[id] = get_gametime()
		kz_colorchat(id, green,"%L", id, "PKU_TIMER_STARTED")
		
		if(get_pcvar_num(g_kz_sounds) == 1 || get_pcvar_num(g_kz_sounds) == 2) 
			client_cmd(id,"spk %s", g_start_sounds[random(sizeof(g_start_sounds))])
	}
	else if(TrieKeyExists(g_tFinishTargets, target))
	{
		if(g_bPlayerStart[id])
		{
			g_bPlayerStart[id] = false
			new Float:kreedztime, imin, Float:isec 
			kreedztime = get_gametime() - g_iPlayerTime[id] + g_iPlayerPauseTime[id]
			imin = floatround(kreedztime , floatround_floor)/60
			isec = kreedztime - (60*imin)
			
			new name[32]
			get_user_name(id, name, 31)
			kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_FINISH", name, imin, isec < 10 ? "0" : "", isec, g_iCheckpointNum[id], g_iCheckpointNum[id] == 1 ? "" : "s", g_iGoCheckNum[id], g_iGoCheckNum[id] == 1 ? "" : "s")
			
			if(get_pcvar_num(g_kz_sounds) == 1 || get_pcvar_num(g_kz_sounds) == 3)
				client_cmd(0, "spk vox/doop")
			
			if(get_pcvar_num(g_kz_prize)) 
			{
				kz_callfunc(id, KZ_HOOK , PLUGIN_HOOK, "1")
				if(g_iCheckpointNum[id] == 0)
					kz_callfunc(id, KZ_JETPACK , PLUGIN_JETPACK, "1")
					//kz_colorchat(id, green,"You won a JetPack! Bind <key> +jetpack to use!")
			}
			if(g_iCheckpointNum[id] > CP_MAX_PRO || g_bHasScout[id])
			{
				check_nub15(id)
			}
			else 
			{
				check_pro15(id)
			}
		}
	}
	return HAM_IGNORED
}

public fw_ThinkEntity(iEnt)
{
	if(pev_valid(iEnt)) 
	{ 
		static ClassName[32]
		pev(iEnt, pev_classname, ClassName, 31)
		
		if(equal(ClassName, "kz_time_think"))
		{
			fw_TimeThink() 
			set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
		}
		if(equal(ClassName, "kz_player_statustext"))
		{
			kz_PlayerStausText() 
			set_pev(iEnt, pev_nextthink, get_gametime() + 0.1)
		}
	}
}

public fw_TimeThink() 
{
	static id, r, g, b
	for(id = 1; id <= g_iMaxPlayers; id++)
	{	
		if(is_plr_connected[id] && is_plr_alive[id] && g_bPlayerStart[id] && !g_bPlayerPaused[id] && g_bShowTimer[id]) 
		{
			new Float:kreedztime, imin, Float:isec 
			kreedztime = get_gametime() - g_iPlayerTime[id] + g_iPlayerPauseTime[id] 
			imin = floatround(kreedztime , floatround_floor)/60
			isec = kreedztime - (60*imin)
			GetCvarColor(g_kz_time_color, r, g, b)
			set_hudmessage(r, g, b, 0.3, 0.0, _, _, 0.4, _, _, 1)
			ShowSyncHudMsg(id, g_SyncTimer, "%L", id, "PKU_TIMER",imin, isec < 10 ? "0" : "", isec, g_iCheckpointNum[id], g_iGoCheckNum[id])
		}
	}
	return PLUGIN_CONTINUE
}

public kz_Functions()
{
	static id, r, g, b
	for(id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_plr_connected[id] && g_bPlayerStart[id] &&  g_bPlayerPaused[id])
		{
			GetCvarColor(g_kz_status_color, r, g, b)
			if(!g_bPlayerSpec[id])
			{
				set_hudmessage(r, g, b, -1.0, 0.40, _, _, 1.0, _, _, 1)
				ShowSyncHudMsg(id, g_SyncTimer, "%L", id, "PKU_PAUSE")
			}
			else 
			{
				set_hudmessage(r, g, b, -1.0, 0.8, _, _, 1.0, _, _, 1)
				ShowSyncHudMsg(id, g_SyncTimer, "%L", id, "PKU_SPECTATOR_START")
			}
		}
		else if(is_plr_connected[id] && !g_bPlayerStart[id] && g_bPlayerSpec[id])
		{
			GetCvarColor(g_kz_status_color, r, g, b)
			set_hudmessage(r, g, b, -1.0, 0.8, _, _, 1.0, _, _, 1)
			ShowSyncHudMsg(id, g_SyncTimer, "%L", id, "PKU_SPECTATOR")
		}
		if(g_bPlayerIsAdmin[id] && is_plr_alive[id] && get_pcvar_num(g_kz_vip) != 0) 
		{
			set_user_scoreattrib(id, 4)
		}
	}
	return PLUGIN_CONTINUE
}

public kz_PlayerStausText() 
{
	static id, target, iCvar
	iCvar = get_pcvar_num(g_kz_statustext)
	
	for(id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_plr_alive[id] || g_iTarget[id] != 0)
		{
			target = g_iTarget[id]
			
			switch(iCvar)
			{
				case 0:
				{
					static r, g, b, Float:x, Float:y
					GetCvarPosition(g_kz_statustext_xypos, x, y)			
					GetCvarColor(g_kz_statustext_color, r, g, b)
					set_hudmessage(r, g, b, x, y, _, _, 5.0, _, _, -1)
					ShowSyncHudMsg(id, g_SyncStatusText, "%s", g_iPlayerName[target])	
				}
				case 1:
				{
					static const szStatusText[] = "1 %p2"
					message_begin(MSG_ONE_UNRELIABLE, g_StatusText, _, id)
					write_byte(0)
					write_string(szStatusText)
					message_end()
				}
			}
		}
		else
		{
			if(!iCvar)
				ClearSyncHud(id, g_SyncStatusText)
		}
	}
}

public kz_CreateBot() 
{
	if(get_pcvar_num(g_kz_bot))
	{
		new players[32],cl
		get_players(players,cl,"ach")
		new id = find_player("i")
		
		if(get_playersnum() < g_iMaxPlayers - 2 && !id) 
		{
			new BotName[32] 
			get_pcvar_string(g_kz_botname, BotName, 31)
			id = engfunc(EngFunc_CreateFakeClient, BotName)
			
			if(pev_valid(id)) 
			{
				engfunc(EngFunc_FreeEntPrivateData, id)
				dllfunc(MetaFunc_CallGameEntity, "player", id)
				set_user_info(id, "rate", "3500")
				set_user_info(id, "cl_updaterate", "25")
				set_user_info(id, "cl_lw", "1")
				set_user_info(id, "cl_lc", "1")
				set_user_info(id, "cl_dlmax", "128")
				set_user_info(id, "cl_righthand", "1")
				set_user_info(id, "_vgui_menus", "0")
				set_user_info(id, "_ah", "0")
				set_user_info(id, "dm", "0")
				set_user_info(id, "tracker", "0")
				set_user_info(id, "friends", "0")
				set_user_info(id, "*bot", "1")
				set_pev(id, pev_flags, pev(id, pev_flags) | FL_FAKECLIENT)
				set_pev(id, pev_colormap, id)
				
				new MsgBot[128]
				dllfunc(DLLFunc_ClientConnect, id, BotName, "127.0.0.1", MsgBot)
				dllfunc(DLLFunc_ClientPutInServer, id)
				cs_set_user_team(id, CS_TEAM_CT)
				dllfunc(DLLFunc_Spawn,id)
			}
		}
		else if(get_playersnum() == g_iMaxPlayers - 1 && id) 
		{
			set_pev(id, pev_effects, (pev(id, pev_effects) | 1))
			server_cmd("kick #%d",get_user_userid(id))
		}
		else if(is_plr_bot[id] && id) 
		{
			set_pev(id, pev_effects, (pev(id, pev_effects) | 128))    
			set_pev(id, pev_solid, SOLID_NOT) 
			set_pev(id, pev_takedamage, 0.0)
			engfunc(EngFunc_SetOrigin, id, Float:{999999,999999,999999})
			set_user_teaminfo(id, "SPECTATOR")
		}
	}
}

public fw_PlayerJump(id) 
{
	if(is_plr_alive[id])
	{	
		if(get_pcvar_num(g_kz_bhop) != 0 && g_iBunnyHop[id] != 0)
		{
			set_pev(id, pev_fuser2, 0.0)
			DetectCheat(id,"BunnyHop")
		}
		if(get_pcvar_num(g_kz_bhop) == 2 && g_iBunnyHop[id] == 2)
		{
			static OldButtons 
			OldButtons = pev(id, pev_oldbuttons)
			if(OldButtons & IN_JUMP)
			{
				static Flags 
				Flags = pev(id, pev_flags)
				if(Flags & FL_ONGROUND && !(Flags & FL_WATERJUMP) && pev(id, pev_waterlevel) < 2)
				{
					static Float:vVelocity[3]
					pev(id, pev_velocity, vVelocity)
					vVelocity[2] += 250.0
					set_pev(id, pev_velocity, vVelocity)
					set_pev(id, pev_oldbuttons, OldButtons & ~IN_JUMP)
					set_pev(id, pev_gaitsequence, 6)
				}
			}
		}
	}
}

public fw_Weaponbox(iEnt) 
{
	set_pev(iEnt, pev_flags, FL_KILLME)
	dllfunc(DLLFunc_Think, iEnt)
	return HAM_IGNORED
}

public fw_ClientKill(id) 
{
	if(get_pcvar_num(g_kz_nokill)) 
	{
		console_print(id,"%L", id, "PKU_KILL_OFF")
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

public fw_PreThink_Post(id)
{
	if(get_pcvar_num(g_kz_semiclip))
	{
		if(!is_plr_alive[id])
			return
		
		static i
		for(i = 1; i <= g_iMaxPlayers; i++)
		{
			if(id != i)
			{
				if(is_plr_alive[i])
					set_pev(i, pev_solid, SOLID_NOT)
			}
		}
	}
}

public client_PostThink(id)
{
	if(get_pcvar_num(g_kz_semiclip))
	{
		if(!is_plr_alive[id])
			return
		
		static i
		for(i = 1; i <= g_iMaxPlayers; i++)
		{
			if(id != i)
			{	
				if(is_plr_alive[i])
					set_pev(i, pev_solid, SOLID_SLIDEBOX)
			}
		}
	}
}

public fw_AddToFullPack_Post(es, e, ent, host, hostflags, player, pSet)
{
	if(!get_orig_retval() || !is_plr_alive[host] && !g_bPlayerSpec[host] || !get_pcvar_num(g_kz_semiclip))
	{
		return FMRES_IGNORED
	}
	
	if(player)
	{
		if(host != ent)
		{
			set_es(es, ES_Solid, SOLID_NOT)
			
			if(get_pcvar_num(g_kz_transparency) && is_plr_connected[ent])   
			{    
				if(g_bPlayerIsAdmin[ent] || is_plr_bot[ent])
				{
					set_es(es, ES_RenderMode, kRenderTransTexture)
					set_es(es, ES_RenderAmt, 0)
					return FMRES_IGNORED
				}
				if(g_bPlayerPaused[ent])
					return FMRES_IGNORED
				
				static Float:flDistance
				flDistance = entity_range(host, ent)
				if(flDistance < 512.0) 
				{
					set_es(es, ES_RenderMode, kRenderTransAlpha)
					set_es(es, ES_RenderAmt, floatround(flDistance)/2)
				}
			}
		}
	}
	else
	{
		static owner ; owner = pev(ent, pev_owner)
		if((1 <= owner <= g_iMaxPlayers) && (ent == g_iEntPlayerModel[owner] || ent == g_iEntWeaponModel[owner]))
		{    
			set_es(es, ES_Solid, SOLID_NOT)
			
			if(get_pcvar_num(g_kz_transparency) && is_plr_connected[owner])  
			{    
				if(g_bPlayerPaused[owner])
					return FMRES_IGNORED
				
				static Float:flDistance
				flDistance = entity_range(host, owner)
				if(flDistance < 512.0)
				{
					set_es(es, ES_RenderMode, kRenderTransAlpha)
					set_es(es, ES_RenderAmt, floatround(flDistance)/2)
				}
			}
		}
	}
	return FMRES_IGNORED
} 

public client_command(id) 
{ 
	new sArg[13]
	read_argv(0, sArg, 12) 
	strtolower(sArg)
	
	if(TrieKeyExists(g_tWeaponCommands, sArg))
	{
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public fw_EmitSound(iEnt, channel, const sound[]) 
{
	if(TrieKeyExists(g_tdoorSnd, sound))
	{
		if(get_pcvar_num(g_kz_doorsound)) 
			return FMRES_SUPERCEDE
	}
	else if(TrieKeyExists(g_tpainSnd, sound))
	{
		if(get_pcvar_num(g_kz_painsound)) 
			return FMRES_SUPERCEDE
	}
	else if(TrieKeyExists(g_twaterSnd, sound))
	{
		if(get_pcvar_num(g_kz_watersound))
			return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

public fw_Spawn(iEnt)
{
	if(!pev_valid(iEnt))
	{
		return FMRES_IGNORED
	}
	new ClassName[32]
	pev(iEnt, pev_classname, ClassName, 31)
	
	if(TrieKeyExists(g_tRemoveEntities, ClassName))
	{
		engfunc(EngFunc_RemoveEntity, iEnt)
		return FMRES_SUPERCEDE
	}
	return FMRES_IGNORED
}

public fw_GameDescription()
{
	forward_return(FMV_STRING, "uG | BHOP/KZ")
	return FMRES_SUPERCEDE
}

public fw_StartFrame()
{
	if(!get_pcvar_num(g_kz_showkeys))
		return FMRES_IGNORED
	
	static Float:fGameTime, Float:fDelay
	fGameTime = get_gametime()
	fDelay = 0.1
	
	if((fShowKeyTime + fDelay) <= fGameTime)
	{
		kz_keyinfo()
		fShowKeyTime = fGameTime
	}
	static id
	for(id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_plr_alive[id])
		{
			new Button = pev(id, pev_button)
			if(Button & IN_FORWARD)
				g_iPlayerKeys[id] |= IN_FORWARD
			if(Button & IN_BACK)
				g_iPlayerKeys[id] |= IN_BACK
			if(Button & IN_MOVELEFT)
				g_iPlayerKeys[id] |= IN_MOVELEFT
			if(Button & IN_MOVERIGHT)
				g_iPlayerKeys[id] |= IN_MOVERIGHT
			if(Button & IN_DUCK)
				g_iPlayerKeys[id] |= IN_DUCK
			if(Button & IN_JUMP )
				g_iPlayerKeys[id] |= IN_JUMP
		}
	}
	return FMRES_IGNORED
}

public kz_keyinfo() 
{
	static id
	for(id = 1; id <= g_iMaxPlayers; id++)
	{
		if(is_plr_alive[id])
		{
			formatex(plr_key[id], 63, "%s^n            %s   %s   %s   %s ^n %s", 
			g_iPlayerKeys[id] & IN_FORWARD ? "W" : " .", 
			g_iPlayerKeys[id] & IN_MOVELEFT ? "A" : ".", 
			g_iPlayerKeys[id] & IN_BACK ? "S" : ".", 
			g_iPlayerKeys[id] & IN_MOVERIGHT ? "D" : ".", 
			g_iPlayerKeys[id] & IN_DUCK ? "DUCK" : "-      ", 
			g_iPlayerKeys[id] & IN_JUMP ? "JUMP" : "  .  ")
			
			g_iPlayerKeys[id] = 0
		}
	}
	static i, target
	for(i = 1; i <= g_iMaxPlayers; i++)
	{
		if(is_plr_alive[i])
		{
			if(g_bShowKeys[i])
				kz_showkeysmsg(i)
		}
		else
		{
			new specmode = pev(i, pev_iuser1)
			if(specmode == 2 || specmode == 4) 
			{
				target = pev(i, pev_iuser2)
				if(target && target != i)
					kz_showkeysmsg(i)
				
			}
		}
	}
	return PLUGIN_CONTINUE
}

public kz_showkeysmsg(id)
{
	if(!id) return
	
	new bool:g_bShowOwnKeys = false
	
	if(is_plr_alive[id] && g_bShowKeys[id]) 
		g_bShowOwnKeys = true
	
	new target
	if(g_bShowOwnKeys)
		target = id
	else
	{
		new specmode = pev(id, pev_iuser1)
		if(specmode == 2 || specmode == 4) 
		{
			target = pev(id, pev_iuser2)
		}
	}
	if(!target) 
		return
	
	new Msg[256]
	formatex(Msg, 255, "%s", plr_key[target][0])
	static r, g, b, Float:x, Float:y
	GetCvarPosition(g_kz_showkeys_xypos, x, y)
	GetCvarColor(g_kz_showkeys_color, r, g, b)
	set_hudmessage(r, g, b, x, y, 0, _, 0.1, _, _, 3)
	ShowSyncHudMsg(id, g_SyncShowKeys, Msg)
}

public DetectCheat(id, reason[]) 
{ 
	if(get_pcvar_num(g_kz_cheatdetect) && g_bPlayerStart[id]) 
	{
		kz_colorchat(id, green, "%L", id, "PKU_CHEAT_DETECTED", reason)
		g_bPlayerStart[id] = false
	}
}

public AdminGlow(id) 
{
	new pid = id < TASK_ADMINGLOW ? id : id - TASK_ADMINGLOW
	if(get_pcvar_num(g_kz_adminglow)) 
	{
		set_rendering(g_iEntPlayerModel[pid], kRenderFxGlowShell, random_num(0,255), random_num(0,255), random_num(0,255), kRenderNormal, 25)	
	}
	else 
	{
		set_rendering(g_iEntPlayerModel[pid])
	}
}

public kz_set_nvg(id) 
{ 
	id -= TASK_NVG
	
	if(get_pcvar_num(g_kz_nvg_enabled))
	{
		if(!is_plr_alive[id])
		{
			kz_remove_nvg(id)
			return
		}
		static Float:fOrigin[3], r, g, b 
		
		pev(id, pev_origin, fOrigin)
		GetCvarColor(g_kz_nvg_color, r, g, b)
		kz_make_lgt(id, fOrigin, r, g, b)
	}
	else
	{
		kz_remove_nvg(id)
	}
} 

public GetCvarColor(cvar, &r, &g, &b)
{
	static colors[16], piece[5]
	get_pcvar_string(cvar, colors, 15)
	
	strbreak(colors, piece, 4, colors, 15)
	r = str_to_num(piece)
	
	strbreak(colors, piece, 4, colors, 15)
	g = str_to_num(piece)
	b = str_to_num(colors)
}

public GetCvarPosition(cvar, &Float:x, &Float:y)
{
	static coords[16], piece[10]
	get_pcvar_string(cvar, coords, 15)
	
	strbreak(coords, piece, 9, coords, 15)
	x = str_to_float(piece)
	y = str_to_float(coords)
}

public PlayerInfo(id) 
{
	id -= TASK_INFO
	kz_colorchat(id, green, "%L", id, "PKU_HELP")
}

public BlockCommands(id)
{
	return PLUGIN_HANDLED
}

public Hook()
{
	kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_BEAT_MAP_A") 
	set_task(get_pcvar_float(g_kz_advert_time),"JetPack")
}

public JetPack()
{
	kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_BEAT_MAP_B")
	set_task(get_pcvar_float(g_kz_advert_time),"Hook")
}

public MsgHealth(Msgid, Dest, id)
{
	if(get_msg_arg_int(1) >= 255)
	{
		set_msg_arg_int(1, ARG_BYTE, 255)
	}
}

public MsgStatusIcon(Msgid, Dest, id)
{
	new szBuyzoneIcon[8]
	get_msg_arg_string(2, szBuyzoneIcon, 7)
	
	if(equal(szBuyzoneIcon, "buyzone"))
	{
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public MsgStatusValue(Msgid, Dest, id)
{
	if(get_msg_arg_int(1) == 2)
	{
		g_iTarget[id] = get_msg_arg_int(2)
	}
}

public MsgClCorpse() 
{
	static id ; id = get_msg_arg_int(12)
	
	if(g_bPlayerIsAdmin[id] && is_plr_alive[id]) 
	{
		set_msg_arg_string(1, g_iPlayerModel[id])
	}
}

public MsgRoundTime(Msgid, Dest, id)
{
	set_msg_arg_int(1, ARG_SHORT, 0)
}

public MsgMoney(Msgid, Dest, id)
{
	new iMoney = get_pcvar_num(g_kz_money)
	set_msg_arg_int(1, ARG_LONG, iMoney) 
	set_pdata_int(id, 115, 0)
}

public MsgShowMenu(Msgid, Dest, id) 
{
	static iTeamSelect[] = "#Team_Select"
	static sMenuCode[sizeof iTeamSelect]
	get_msg_arg_string(4, sMenuCode, sizeof sMenuCode - 1)
	
	if(equal(sMenuCode, iTeamSelect))
	{
		if(ShouldAutoJoin(id))
		{	
			kz_set_autojoin_task(id, Msgid)
			return PLUGIN_HANDLED
		}
	}
	return PLUGIN_CONTINUE 
}

public MsgVguiMenu(Msgid, Dest, id) 
{
	if (get_msg_arg_int(1) != 2 || !ShouldAutoJoin(id))
		return PLUGIN_CONTINUE
	
	kz_set_autojoin_task(id, Msgid)
	return PLUGIN_HANDLED
}

public PlayerTeamJoin(MenuMsgid[], id) 
{
	id -= TASK_AUTOJOIN
	
	if(get_user_team(id))
		return
	
	static g_autojoin ; g_autojoin = get_pcvar_num(g_kz_autojoin)
	switch(g_autojoin)
	{
		case 0: 
		{
			static Team[] = "2", Class[] = "0"
			kz_team_join(id, MenuMsgid[0], Team, Class)
		}
		case 1: 
		{
			static Team[] = "2", Class[] = "5"
			kz_team_join(id, MenuMsgid[0], Team, Class)
		}
	}
}

public KzPlayerMenu(id) 
{
	new menu[512], szbhop[64], sznoblock[64], szscout[64], szshowtime[64]
	
	new g_smiclip = get_pcvar_num(g_kz_semiclip)
	switch(g_smiclip)
	{
		case 0: formatex(sznoblock,63,"%L", id, "PKU_PM_SEMI_OFF")
			
		case 1: formatex(sznoblock,63,"%L", id, "PKU_PM_SEMI_ON")
			
	}
	new g_bhop = get_pcvar_num(g_kz_bhop)
	new g_bunny = g_iBunnyHop[id]
	switch(g_bhop)
	{
		case 0: formatex(szbhop,63,"%L", id, "PKU_PM_BHOP_OFF")
			
		case 1:
		{
			switch(g_bunny)
			{
				case 0: formatex(szbhop,63,"%L", id, "PKU_PM_BHOP")
					
				case 1: formatex(szbhop,63,"%L", id, "PKU_PM_BHOP_NOSLOW")
					
			}
		}
		case 2:
		{
			switch(g_bunny)
			{
				case 0: formatex(szbhop,63,"%L", id, "PKU_PM_BHOP")
					
				case 1: formatex(szbhop,63,"%L", id, "PKU_PM_BHOP_NOSLOW")
					
				case 2: formatex(szbhop,63,"%L", id, "PKU_PM_BHOP_AUTO")
					
			}
		}
	}
	new g_showtime = g_bShowTimer[id]
	switch(g_showtime)
	{
		case false: formatex(szshowtime,63,"%L", id, "PKU_PM_SHOWTIMER_OFF")
			
		case true: formatex(szshowtime,63,"%L", id, "PKU_PM_SHOWTIMER_ON")
			
	}
	new g_scout = get_pcvar_num(g_kz_scout)
	switch(g_scout)
	{
		case 0: formatex(szscout,63,"%L", id, "PKU_PM_SCOUT_OFF")
			
		case 1: formatex(szscout,63,"%L", id, "PKU_PM_SCOUT_ON")
			
	}
	formatex(menu,512,"%L", id, "PKU_PM_MENU",sznoblock, szbhop, szshowtime, szscout)
	show_menu(id,MENU_KEYS,menu, -1, "ProKreedz v2.4 - Playermenu")
}

public PlayerMenuHandler(id,key) 
{
	switch(key) 
	{
		case 0: KzPlayerMenu(id)
			
		case 1:
		{
			new g_bhop = get_pcvar_num(g_kz_bhop)
			new g_bunny = g_iBunnyHop[id]
			switch(g_bhop)
			{
				case 1:
				{
					switch(g_bunny)
					{
						case 0: g_iBunnyHop[id] = 1
							
						case 1: g_iBunnyHop[id] = 0
							
					}
				}
				case 2:
				{
					switch(g_bunny)
					{
						case 0: g_iBunnyHop[id] = 1
							
						case 1: g_iBunnyHop[id] = 2
							
						case 2: g_iBunnyHop[id] = 0
							
					}
				}
			}
			KzPlayerMenu(id)
		}
		case 2:
		{
			g_bShowTimer[id] = !g_bShowTimer[id] 
			KzPlayerMenu(id)
		}
		case 3: cmd_scout(id)
			
		case 4: cmd_usp(id)
			
		case 5: cmd_restart(id)
			
		case 6: cmd_reset(id)
			
		case 9: show_menu(id,0,"")
			
	}
}

public KzAdminMenuShow(id, lvl, cid) 
{
	if(cmd_access(id, lvl, cid, 1)) 
		KzAdminMenu(id) 
	return PLUGIN_HANDLED
}

public KzAdminMenu(id) 
{
	new menu[512], szcheckpoints[32], szgodmode[32], szautojoin[32], szscout[32], szadminglow[32], sznoblock[32], sztransparency[32], szcheatdetect[32], szbhop[32]
	
	new g_checkpoints = get_pcvar_num(g_kz_checkpoints)
	switch(g_checkpoints)
	{
		case 0: formatex(szcheckpoints,31,"%L", id, "PKU_AM_CP_OFF")
			
		case 1: formatex(szcheckpoints,31,"%L", id, "PKU_AM_CP_ON")
			
	}
	new g_godmode = get_pcvar_num(g_kz_godmode)
	switch(g_godmode)
	{
		case 0: formatex(szgodmode,31,"%L", id, "PKU_AM_GODMODE_OFF")
			
		case 1: formatex(szgodmode,31,"%L", id, "PKU_AM_GODMODE_ON")
			
	}
	new g_autojoin = get_pcvar_num(g_kz_autojoin)
	switch(g_autojoin)
	{
		case 0: formatex(szautojoin,31,"%L", id, "PKU_AM_AUTOJOIN_OFF")
			
		case 1: formatex(szautojoin,31,"%L", id, "PKU_AM_AUTOJOIN_ON")
			
	}
	new g_scout = get_pcvar_num(g_kz_scout)
	switch(g_scout)
	{
		case 0: formatex(szscout,31,"%L", id, "PKU_AM_SCOUT_OFF")
			
		case 1: formatex(szscout,31,"%L", id, "PKU_AM_SCOUT_ON")
			
	}
	new g_adminglow = get_pcvar_num(g_kz_adminglow)
	switch(g_adminglow)
	{
		case 0: formatex(szadminglow,31,"%L", id, "PKU_AM_GLOW_OFF")
			
		case 1: formatex(szadminglow,31,"%L", id, "PKU_AM_GLOW_ON")
			
	}
	new g_semiclip = get_pcvar_num(g_kz_semiclip)
	switch(g_semiclip)
	{
		case 0: formatex(sznoblock,31,"%L", id, "PKU_AM_SEMI_OFF")
			
		case 1: formatex(sznoblock,31,"%L", id, "PKU_AM_SEMI_ON")
			
	}
	new g_bhop = get_pcvar_num(g_kz_bhop)
	switch(g_bhop)
	{
		case 0: formatex(szbhop,31,"%L", id, "PKU_AM_BHOP")
			
		case 1: formatex(szbhop,31,"%L", id, "PKU_AM_BHOP_NOSLOW")
			
		case 2: formatex(szbhop,31,"%L", id, "PKU_AM_BHOP_AUTO")
			
	}
	new g_transparency = get_pcvar_num(g_kz_transparency)
	switch(g_transparency)
	{
		case 0: formatex(sztransparency,31,"%L", id, "PKU_AM_TRANS_OFF")
			
		case 1: formatex(sztransparency,31,"%L", id, "PKU_AM_TRANS_ON")
			
	}
	new g_cheatdetect = get_pcvar_num(g_kz_cheatdetect)
	switch(g_cheatdetect)
	{
		case 0: formatex(szcheatdetect,31,"%L", id, "PKU_AM_CHEATD_OFF")
			
		case 1: formatex(szcheatdetect,31,"%L", id, "PKU_AM_CHEATD_ON")
			
	}
	formatex(menu,512,"%L", id, "PKU_AM_MENU",szcheckpoints,szgodmode,szautojoin,szscout,szadminglow,sznoblock,szbhop,sztransparency,szcheatdetect)
	show_menu(id,MENU_KEYS_ADMIN,menu, -1, "ProKreedz Ultimativ v2.4 - Adminmenu")
}

public AdminMenuHandler(id,key) 
{
	switch(key) 
	{
		case 0:
		{
			new g_checkpoints = get_pcvar_num(g_kz_checkpoints)
			switch(g_checkpoints)
			{
				case 0: 
				{
					set_pcvar_num(g_kz_checkpoints, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_CP_ENABLED")
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_CP_INFO")
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_CP_GO_INFO")
				}
				case 1: 
				{
					set_pcvar_num(g_kz_checkpoints, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_CP_DISABLED")
				}
			}
			KzAdminMenu(id) 
		}
		case 1:
		{
			new g_godmode = get_pcvar_num(g_kz_godmode)
			switch(g_godmode)
			{
				case 0:
				{
					set_pcvar_num(g_kz_godmode, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_GODMODE_ENABLED")
					
					for(new i = 1; i <= g_iMaxPlayers; i++) 
					{
						if(is_plr_connected[i] && !is_plr_bot[i])
							set_pev(i, pev_takedamage, 0.0)
					}
				}
				case 1: 
				{
					set_pcvar_num(g_kz_godmode, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_GODMODE_DISABLED")
					
					for(new i = 1; i <= g_iMaxPlayers; i++) 
					{
						if(is_plr_connected[i] && !is_plr_bot[i])
							set_pev(i, pev_takedamage, 2.0)
					}
				}
			}
			KzAdminMenu(id) 
		}
		case 2:
		{
			new g_autojoin = get_pcvar_num(g_kz_autojoin) 
			switch(g_autojoin)
			{
				case 0:
				{
					set_pcvar_num(g_kz_autojoin, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_AUTOJOIN_ENABLED") 
				}
				case 1: 
				{
					set_pcvar_num(g_kz_autojoin, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_AUTOJOIN_DISABLED")  
				}
			}
			KzAdminMenu(id) 
		}
		case 3:
		{
			new g_scout = get_pcvar_num(g_kz_scout) 
			switch(g_scout) 
			{
				case 0:
				{
					set_pcvar_num(g_kz_scout, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_SCOUT_ENABLED") 
				}
				case 1:
				{
					set_pcvar_num(g_kz_scout, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_SCOUT_DISABLED") 
				}
			}
			KzAdminMenu(id) 
		}
		case 4:
		{
			new g_adminglow = get_pcvar_num(g_kz_adminglow) 
			switch(g_adminglow) 
			{
				case 0:
				{
					set_pcvar_num(g_kz_adminglow, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_ADMINGLOW_ENABLED") 
					
					for(new i = 1; i <= g_iMaxPlayers; i++) 
					{
						if(is_plr_connected[i] && g_bPlayerIsAdmin[i])
							AdminGlow(i)
					}
				}
				case 1:
				{
					set_pcvar_num(g_kz_adminglow, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_ADMINGLOW_DISABLED") 
					
					for(new i = 1; i <= g_iMaxPlayers; i++) 
					{
						if(is_plr_connected[i] && g_bPlayerIsAdmin[i])
							AdminGlow(i)
					}
				}
			}
			KzAdminMenu(id) 
		}
		case 5:
		{
			new g_semiclip = get_pcvar_num(g_kz_semiclip) 
			switch(g_semiclip) 
			{
				case 0:
				{
					set_pcvar_num(g_kz_semiclip, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_SEMICLIP_ENABLED")  
				}
				case 1:
				{
					set_pcvar_num(g_kz_semiclip, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_SEMICLIP_DISABLED") 
				}
			}
			KzAdminMenu(id) 
		}
		case 6:
		{
			new g_bhop = get_pcvar_num(g_kz_bhop) 
			switch(g_bhop)
			{
				case 0:
				{
					set_pcvar_num(g_kz_bhop, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_BHOP_NOSLOW_DOWN") 
				}
				case 1: 
				{
					set_pcvar_num(g_kz_bhop, 2)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_BHOP_AUTOMATIC") 
				}
				case 2: 
				{
					set_pcvar_num(g_kz_bhop, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_BHOP_DISABLED") 
				}
			}
			KzAdminMenu(id) 
		}
		case 7:
		{
			new g_transparency = get_pcvar_num(g_kz_transparency) 
			switch(g_transparency)
			{
				case 0:
				{
					set_pcvar_num(g_kz_transparency, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_TRANSPARENCY_ENABLED") 
				}
				case 1: 
				{
					set_pcvar_num(g_kz_transparency, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_TRANSPARENCY_DISABLED") 
				}
			}
			KzAdminMenu(id) 
		}
		case 8:
		{
			new g_cheatdetect = get_pcvar_num(g_kz_cheatdetect) 
			switch(g_cheatdetect) 
			{
				case 0:
				{
					set_pcvar_num(g_kz_cheatdetect, 1)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_CHEATD_ENABLED") 
				}
				case 1: 
				{
					set_pcvar_num(g_kz_cheatdetect, 0)
					kz_colorchat(0, green, "%L", LANG_PLAYER , "PKU_CHEATD_DISABLED") 
				}
			}
			KzAdminMenu(id) 
		}
		case 9: show_menu(id,0,"")
			
	}
}

#if defined USING_SQL
public check_pro15(iPlayer)
{
	check_top15(iPlayer, true)
}

public show_pro15(iPlayer)
{
	return show_top15(iPlayer, true)
}
#else
public check_pro15(id)
{
	new name[32], authid[32]
	get_user_name(id, name, 31)
	get_user_authid(id, authid ,31)
	
	new bool:is_plr_pro15
	is_plr_pro15 = false
	
	for(new i = 0; i < 15; i++)
	{
		if(equali(pro15_authid[i], authid))
		{
			is_plr_pro15 = true
		}
	}
	new Float:kzTime, Float:FailTime, Float:BestTime, Float:OldTime
	for(new i = 0; i < 15; i++)
	{
		kzTime = get_gametime() - g_iPlayerTime[id] + g_iPlayerPauseTime[id]
		FailTime = kzTime - pro15_times[i]
		BestTime = pro15_times[i] - kzTime
		OldTime = pro15_times[i]
		
		if(kzTime < pro15_times[i])
		{
			new pos = i
			while(!equal(pro15_authid[pos], authid) && pos < 15)
			{
				pos++
			}
			for(new j = pos; j > i; j--)
			{
				formatex(pro15_authid[j], 31, pro15_authid[j-1])
				formatex(pro15_names[j], 31, pro15_names[j-1])
				pro15_times[j] = pro15_times[j-1]
				pro15_cp[j] = pro15_cp[j-1]
				pro15_gocp[j] = pro15_gocp[j-1]
			}
			formatex(pro15_authid[i], 31, authid)
			formatex(pro15_names[i], 31, name)
			pro15_times[i] = kzTime
			pro15_cp[i] = g_iCheckpointNum[id] 
			pro15_gocp[i] = g_iGoCheckNum[id]
			
			save_pro15()
			
			if(is_plr_pro15)
			{           
				if(kzTime < OldTime)
				{
					new imin, Float:isec
					imin = floatround(BestTime, floatround_floor)/60
					isec = BestTime - (60*imin)
					kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_TOP15_NPBT", name, imin, isec < 10 ? "0" : "", isec)
					
					if((i + 1) == 1)
					{
						client_cmd(0, "spk woop")
						kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_PRO15_LEET", name)
					} 
					else
					{
						kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_PRO15_RANK", name, (i+1))
					}
				}
			}
			else  
			{
				if((i + 1) == 1)
				{
					client_cmd(0, "spk woop")
					kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_PRO15_LEET", name)
				} 
				else
				{
					kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_PRO15_RANK", name, (i+1))
				}
			}
			return
		}
		if(equali(pro15_authid[i], authid))
		{
			if(kzTime > OldTime)
			{
				new imin, Float:isec
				imin = floatround(FailTime  , floatround_floor)/60
				isec = FailTime - (60*imin)
				kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_TOP15_FAIL", name, imin, isec < 10 ? "0" : "", isec)	
				return
			}
		}
	}
}

public save_pro15()  
{
	new profile[128]
	formatex(profile, 127, "%s/pro_%s.cfg", KZ_TOP15_DIR, g_szMapName)
	
	if(file_exists(profile))
	{
		delete_file(profile)
	}
	
	new Data[256]
	new f = fopen(profile, "at")
	
	for(new i = 0; i < 15; i++)
	{
		formatex(Data, 255, "^"%.5f^" ^"%s^" ^"%s^" ^"%d^" ^"%d^"^n", pro15_times[i], pro15_authid[i], pro15_names[i], pro15_cp[i], pro15_gocp[i])
		fputs(f, Data)
	}
	fclose(f)
}

public read_pro15()
{
	new profile[128], prodata[256]
	formatex(profile, 127, "%s/pro_%s.cfg", KZ_TOP15_DIR, g_szMapName)
	
	new f = fopen(profile, "rt")
	new i = 0
	while(!feof(f) && i < 16)
	{
		fgets(f, prodata, 255)
		new ReadKzTime[25], ReadChecks[5], ReadGoChecks[5]
		parse(prodata, ReadKzTime, 24, pro15_authid[i], 31, pro15_names[i], 31, ReadChecks, 4, ReadGoChecks, 4)
		pro15_times[i] = str_to_float(ReadKzTime)
		pro15_cp[i] = str_to_num(ReadChecks)
		pro15_gocp[i] = str_to_num(ReadGoChecks)
		i++;
	}
	fclose(f)
}

public show_pro15(id) 
{ 
	new buffer[2048], name[32]
	new len = formatex(buffer, sizeof buffer -1,"<body bgcolor=#94AEC6><table width=100%% cellpadding=2 cellspacing=0 border=0>")
	len += formatex(buffer[len], sizeof buffer -1 -len,"%L", id, "PKU_TOP15_MOTD")
	
	new iMaxColors = sizeof(g_iTopColors)
	
	for(new i = 0; i < 15; ++i) 
	{		
		if(pro15_times[i] > 9999999.0)
			len += formatex(buffer[len], sizeof buffer -1 -len, "<tr align=center %s><td>%d<td align=left>%s<td>%s<td>%s<td>%s", ((i%2)==0) ? "" : "bgcolor=#B0C4DE", (i + 1), "", "", "", "")
		else
		{
			name = pro15_names[i]
			new Float:kzTime, imin, Float:isec 
			kzTime = pro15_times[i]
			imin = floatround(kzTime  , floatround_floor)/60
			isec = kzTime  - (60*imin)
			
			while (containi(name, "<") != -1)
				replace(name, 63, "<", "&lt;")
			while (containi(name, ">") != -1)
				replace(name, 63, ">", "&gt;")
			
			if( i < iMaxColors )
			{
				len += formatex(buffer[len], sizeof buffer -1 -len, "<tr align=center bgcolor=%s><td>%d<td align=left>%s<td>%02d:%s%.2f<td>%d<td>%d", g_iTopColors[i], (i + 1), pro15_names[i], imin, isec < 10 ? "0" : "", isec, pro15_cp[i], pro15_gocp[i])
			}
			else
			{
				len += formatex(buffer[len], sizeof buffer -1 -len, "<tr align=center %s><td>%d<td align=left>%s<td>%02d:%s%.2f<td>%d<td>%d", ((i%2)==0) ? "" : "bgcolor=#B0C4DE", (i + 1), pro15_names[i], imin, isec < 10 ? "0" : "", isec, pro15_cp[i], pro15_gocp[i])
			}
		}
	}
	len += formatex(buffer[len], sizeof buffer -1 -len, "</table></body>")
	
	show_motd(id, buffer, "ProKreedz Pro15")
	return PLUGIN_HANDLED
}
#endif

#if defined USING_SQL
public check_nub15(iPlayer)
{
	check_top15(iPlayer, false)
}

public show_nub15(iPlayer)
{
	return show_top15(iPlayer, false)
}
#else
public check_nub15(id)
{
	new name[32], authid[32]
	get_user_name(id, name, 31)
	get_user_authid(id, authid ,31)
	
	new bool:is_plr_nub15
	is_plr_nub15 = false
	
	for(new i = 0; i < 15; i++)
	{
		if(equali(nub15_authid[i], authid))
		{
			is_plr_nub15 = true
		}
	}
	new Float:kzTime, Float:FailTime, Float:BestTime, Float:OldTime
	for(new i = 0; i < 15; i++)
	{
		kzTime = get_gametime() - g_iPlayerTime[id] + g_iPlayerPauseTime[id]
		FailTime = kzTime - nub15_times[i]
		BestTime = nub15_times[i] - kzTime
		OldTime = nub15_times[i]
		
		if(kzTime < nub15_times[i])
		{
			new pos = i
			while(!equal(nub15_authid[pos], authid) && pos < 15)
			{
				pos++
			}
			for(new j = pos; j > i; j--)
			{
				formatex(nub15_authid[j], 31, nub15_authid[j-1])
				formatex(nub15_names[j], 31, nub15_names[j-1])
				nub15_times[j] = nub15_times[j-1]
				nub15_cp[j] = nub15_cp[j-1]
				nub15_gocp[j] = nub15_gocp[j-1]
			}
			formatex(nub15_authid[i], 31, authid)
			formatex(nub15_names[i], 31, name)
			nub15_times[i] = kzTime
			nub15_cp[i] = g_iCheckpointNum[id] 
			nub15_gocp[i] = g_iGoCheckNum[id]
			
			save_nub15()
			
			if(is_plr_nub15)
			{           
				if(kzTime < OldTime)
				{
					new imin, Float:isec
					imin = floatround(BestTime, floatround_floor)/60
					isec = BestTime - (60*imin)
					kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_TOP15_NPBT", name, imin, isec < 10 ? "0" : "", isec)
					
					if((i + 1) == 1)
					{
						client_cmd(0, "spk woop")
						kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_NUB15_LEET", name)
					} 
					else
					{
						kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_NUB15_RANK", name, (i+1))
					}
				}
			}
			else  
			{
				if((i + 1) == 1)
				{
					client_cmd(0, "spk woop")
					kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_NUB15_LEET", name)
				}
				else
				{
					kz_colorchat(0, green, "%L", LANG_PLAYER,"PKU_NUB15_RANK", name, (i+1))
				}
			}
			return
		}
		if(equali(nub15_authid[i], authid))
		{
			if(kzTime > OldTime)
			{
				new imin, Float:isec
				imin = floatround(FailTime  , floatround_floor)/60
				isec = FailTime - (60*imin)
				kz_colorchat(0, green, "%L", LANG_PLAYER,"PKU_TOP15_FAIL", name, imin, isec < 10 ? "0" : "", isec)	
				return
			}
		}
	}
}

public save_nub15()  
{
	new nubfile[128]
	formatex(nubfile, 127, "%s/nub_%s.cfg", KZ_TOP15_DIR, g_szMapName)
	
	if(file_exists(nubfile))
	{
		delete_file(nubfile)
	}
	
	new Data[256]
	new f = fopen(nubfile, "at")
	
	for(new i = 0; i < 15; i++)
	{
		formatex(Data, 255, "^"%.5f^" ^"%s^" ^"%s^" ^"%d^" ^"%d^"^n", nub15_times[i], nub15_authid[i], nub15_names[i], nub15_cp[i], nub15_gocp[i])
		fputs(f, Data)
	}
	fclose(f)
}

public read_nub15()
{
	new nubfile[128], nubdata[256]
	formatex(nubfile, 127, "%s/nub_%s.cfg", KZ_TOP15_DIR, g_szMapName)
	
	new f = fopen(nubfile, "rt")
	new i = 0
	while(!feof(f) && i < 16)
	{
		fgets(f, nubdata, 255)
		new ReadKzTime[25], ReadChecks[5], ReadGoChecks[5]
		parse(nubdata, ReadKzTime, 24, nub15_authid[i], 31, nub15_names[i], 31, ReadChecks, 4, ReadGoChecks, 4)
		nub15_times[i] = str_to_float(ReadKzTime)
		nub15_cp[i] = str_to_num(ReadChecks)
		nub15_gocp[i] = str_to_num(ReadGoChecks)
		i++;
	}
	fclose(f)
}

public show_nub15(id) 
{ 
	new buffer[2048], name[32]
	new len = formatex(buffer, sizeof buffer -1,"<body bgcolor=#94AEC6><table width=100%% cellpadding=2 cellspacing=0 border=0>")
	len += formatex(buffer[len], sizeof buffer -1 -len,"%L", id, "PKU_TOP15_MOTD")
	
	new iMaxColors = sizeof(g_iTopColors)
	
	for(new i = 0; i < 15; ++i) 
	{		
		if(nub15_times[i] > 9999999.0)
			len += formatex(buffer[len], sizeof buffer -1 -len, "<tr align=center %s><td>%d<td align=left>%s<td>%s<td>%s<td>%s", ((i%2)==0) ? "" : "bgcolor=#B0C4DE", (i + 1), "", "", "", "")
		else
		{
			name = nub15_names[i]
			new Float:kzTime, imin, Float:isec 
			kzTime = nub15_times[i]
			imin = floatround(kzTime , floatround_floor)/60
			isec = kzTime  - (60*imin)
			
			while (containi(name, "<") != -1)
				replace(name, 63, "<", "&lt;")
			while (containi(name, ">") != -1)
				replace(name, 63, ">", "&gt;")
			
			if( i < iMaxColors )
			{
				len += formatex(buffer[len], sizeof buffer -1 -len, "<tr align=center bgcolor=%s><td>%d<td align=left>%s<td>%02d:%s%.2f<td>%d<td>%d", g_iTopColors[i], (i + 1), nub15_names[i], imin, isec < 10 ? "0" : "", isec, nub15_cp[i], nub15_gocp[i])
			}
			else
			{
				len += formatex(buffer[len], sizeof buffer -1 -len, "<tr align=center %s><td>%d<td align=left>%s<td>%02d:%s%.2f<td>%d<td>%d", ((i%2)==0) ? "" : "bgcolor=#B0C4DE", (i + 1), nub15_names[i], imin, isec < 10 ? "0" : "", isec, nub15_cp[i], nub15_gocp[i])
			}
		}
	}
	len += formatex(buffer[len], sizeof buffer -1 -len, "</table></body>")
	
	show_motd(id, buffer, "ProKreedz Nub15")
	return PLUGIN_HANDLED
}
#endif

#if defined USING_SQL
public check_top15(iPlayer, bool:bPro)
{
	if(g_hSqlTuple == Empty_Handle)
	{
		return
	}
	
	new iError, szError[128]
	new Handle:hDb = SQL_Connect(g_hSqlTuple, iError, szError, charsmax(szError))
	
	if(hDb == Empty_Handle)
	{
		log_amx("Failed connecting to database (%i): %s", iError, szError)
		return
	}
	
	new szName[32], szAuthID[35]
	get_user_name(iPlayer, szName ,charsmax(szName))
	get_user_authid(iPlayer, szAuthID, charsmax(szAuthID))
	
	new Float:flTime = get_gametime() - g_iPlayerTime[iPlayer] + g_iPlayerPauseTime[iPlayer]
	
	new iTopPos = 0;
	
	new Handle:hQuery = SQL_PrepareQuery(hDb, "SELECT * FROM kz_%s15 WHERE map = ^"%s^" ORDER BY time LIMIT 15;", bPro ? "pro" : "nub", g_szMapName)
	
	if(!SQL_Execute(hQuery))
	{
		SQL_QueryError(hQuery, szError, charsmax(szError))
		log_amx("Error on query selecting %s15: %s", bPro ? "pro" : "nub", szError)
	}
	else if(SQL_NumResults(hQuery))
	{
		new iFieldSteamID = SQL_FieldNameToNum(hQuery, "steamid")
		new iPos = 1, szDbAuthID[35]
		
		while(SQL_MoreResults(hQuery))
		{
			SQL_ReadResult(hQuery, iFieldSteamID, szDbAuthID, charsmax(szDbAuthID))
			
			if(equal(szAuthID, szDbAuthID))
			{
				iTopPos = iPos
				break
			}
			
			iPos++;
			
			SQL_NextRow(hQuery)
		}
		
		SQL_Rewind(hQuery)
		
		iPos = 1
		new iFieldTime = SQL_FieldNameToNum(hQuery, "time")
		new Float:flDbTime
		
		while(SQL_MoreResults(hQuery))
		{
			SQL_ReadResult(hQuery, iFieldTime, flDbTime)
			
			if(flTime < flDbTime)
			{
				if(iTopPos)
				{
					new Float:flTimeDiff = flDbTime - flTime
					new iMinutes = floatround(flTimeDiff, floatround_floor) / 60
					flTimeDiff -= (iMinutes * 60)
					
					kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_TOP15_NPBT", szName, iMinutes, flTimeDiff < 10 ? "0" : "", flTimeDiff)
				}
				
				if(iPos == 1)
				{
					client_cmd(0, "spk woop" )
					kz_colorchat(0, green, "%L", LANG_PLAYER, bPro ? "PKU_PRO15_LEET" : "PKU_NUB15_LEET", szName)
				}
				else
				{
					kz_colorchat(0, green, "%L", LANG_PLAYER, bPro ? "PKU_PRO15_RANK" : "PKU_NUB15_RANK", szName, iPos)
				}
				
				break
			}
			if(iTopPos == iPos)
			{
				if(flTime > flDbTime)
				{
					new Float:flTimeDiff = flTime - flDbTime
					new iMinutes = floatround(flTimeDiff, floatround_floor) / 60
					flTimeDiff -= (iMinutes * 60)
					
					kz_colorchat(0, green, "%L", LANG_PLAYER, "PKU_TOP15_FAIL", szName, iMinutes, flTimeDiff < 10 ? "0" : "", flTimeDiff)
				}
				
				break
			}
			
			iPos++;
			
			SQL_NextRow(hQuery)
		}
	}
	
	SQL_FreeHandle(hQuery)
	
	hQuery = SQL_PrepareQuery(hDb, "SELECT time FROM kz_%s15 WHERE steamid = ^"%s^" AND map = ^"%s^";", bPro ? "pro" : "nub", szAuthID, g_szMapName)
	
	if( !SQL_Execute(hQuery))
	{
		SQL_QueryError(hQuery, szError, charsmax(szError))
		log_amx("Error on query selecting player %s time: %s", bPro ? "pro" : "nub", szError)
	}
	else
	{
		new bool:bUpdate = true
		
		if(SQL_NumResults(hQuery))
		{
			new Float:flDbTime
			SQL_ReadResult(hQuery, SQL_FieldNameToNum(hQuery, "time"), flDbTime)
			
			if(flDbTime < flTime)
			{
				bUpdate = false
			}
		}
		
		if(bUpdate)
		{
			SQL_FreeHandle(hQuery)
			
			hQuery = SQL_PrepareQuery(hDb, "REPLACE INTO kz_%s15 (name, steamid, map, time, cp, gc) VALUES (^"%s^", ^"%s^", ^"%s^", %f, %i, %i);",
			bPro ? "pro" : "nub", szName, szAuthID, g_szMapName, flTime, g_iCheckpointNum[iPlayer], g_iGoCheckNum[iPlayer])
			
			if(!SQL_Execute(hQuery))
			{
				SQL_QueryError(hQuery, szError, charsmax( szError))
				log_amx("Error on query saving player %s time: %s", bPro ? "pro" : "nub", szError)
			}
		}
	}
	
	SQL_FreeHandle(hQuery)
	
	SQL_FreeHandle(hDb)
}

public show_top15(iPlayer, bool:bPro)
{
	new szURL[128]
	get_pcvar_string(g_kz_weburl, szURL, charsmax(szURL))
	
	new iLen = strlen(szURL)
	formatex(szURL[iLen], charsmax(szURL) - iLen, "?map=%s&pro=%i&a=%i", g_szMapName, bPro, random(15000))
	
	show_motd(iPlayer, szURL, bPro ? "ProKreedz Pro15" : "ProKreedz Nub15")
	
	return PLUGIN_HANDLED
}
#endif

kz_create_healer() {
	new iEntHealer, Float:fHealthValue = (get_pcvar_float(g_kz_autoheal_hp)*2.0)
	if(fHealthValue < 2.0)
		fHealthValue = 20.0
	iEntHealer = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString , "trigger_hurt"))
	dllfunc(DLLFunc_Spawn, iEntHealer)
	engfunc(EngFunc_SetSize, iEntHealer, Float:{-8192.0, -8192.0, -8192.0} , Float:{8192.0, 8192.0, 8192.0})
	set_pev(iEntHealer, pev_spawnflags, SF_TRIGGER_HURT_CLIENTONLYTOUCH)
	set_pev(iEntHealer, pev_dmg, -1.0 * fHealthValue)
}

kz_colorchat(id, color:type, const msg[], {Float,Sql,Result,_}:...) {
	
	static message[256], pkmsg[180], changed[8], argscount,j
	argscount = numargs()
	
	switch(type) 
	{
		case normal: message[0] = 0x01
			
		case green: message[0] = 0x04
			
		default: message[0] = 0x03
		
	}
	new pktag[32]
	get_pcvar_string(g_kz_tag, pktag, 31)
	
	if(id)
	{
		if(is_plr_connected[id])
		{
			vformat(pkmsg, 179, msg, 4)
			formatex(message[1], 255, "%s %s", pktag, pkmsg)
			message[192] = '^0'
			
			replace_all(message, 191, "!g", "^x04")
			replace_all(message, 191, "!n", "^x01")
			replace_all(message, 191, "!t", "^x03")
			kz_print_msg(id, message)
		}
	} 
	else 
	{
		for(new i = 1; i <= g_iMaxPlayers; i++)
		{
			if(is_plr_connected[i])
			{
				new changedcount = 0
				
				for(j = 2; j < argscount; j++)
				{
					if(getarg(j) == LANG_PLAYER)
					{
						setarg(j, 0, i);
						changed[changedcount++] = j;
					}
				}
				vformat(pkmsg, 179, msg, 4)
				formatex(message[1], 255, "%s %s", pktag, pkmsg)
				message[192] = '^0'
				
				replace_all(message, 191, "!g", "^x04")
				replace_all(message, 191, "!n", "^x01")
				replace_all(message, 191, "!t", "^x03")
				kz_print_msg(i, message)
				
				for(j = 0; j < changedcount; j++)
				{
					setarg(changed[j], 0, LANG_PLAYER)
				}
			}
		}
	}
}

stock kz_print_msg(id, const msg[])
{
	message_begin(MSG_ONE_UNRELIABLE, g_SayText, _, id)
	write_byte(id)		
	write_string(msg)
	message_end()
}

stock set_user_duck(id) 
{
	set_pev(id, pev_flags, pev(id, pev_flags) | FL_DUCKING)
	engfunc( EngFunc_SetSize, id, VEC_DUCK_HULL_MIN, VEC_DUCK_HULL_MAX)
}

stock set_user_scoreattrib(id, attrib = 0) 
{
	message_begin(MSG_BROADCAST, g_ScoreAttrib, _, 0)
	write_byte(id)
	write_byte(attrib)
	message_end()
}

stock set_user_teaminfo(id, teamstatus[]) 
{
	emessage_begin(MSG_BROADCAST, g_TeamInfo)
	ewrite_byte(id)
	ewrite_string(teamstatus)
	emessage_end()
} 

// stock fm_set_plr_model(id, const Model[])
// {
	// copy(g_iPlayerModel[id], charsmax(g_iPlayerModel[]), Model)
	// fm_set_admin_vipmodel(id, g_iPlayerModel[id])
// }

// stock fm_set_admin_vipmodel(id, const model[]) 
// {
	// set_pev(id, pev_rendermode, kRenderTransTexture)
	// set_pev(id, pev_renderamt, 1.0)
	
	// static modelpath[100]
	// formatex(modelpath, 99, "models/player/%s/%s.mdl", model, model)
	
	// if(!pev_valid(g_iEntPlayerModel[id])) 
	// {
		// g_iEntPlayerModel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
		
		// if (!pev_valid(g_iEntPlayerModel[id])) return
		
		// set_pev(g_iEntPlayerModel[id], pev_classname, "ent_playermodel")
		// set_pev(g_iEntPlayerModel[id], pev_movetype, MOVETYPE_FOLLOW)
		// set_pev(g_iEntPlayerModel[id], pev_aiment, id)
		// set_pev(g_iEntPlayerModel[id], pev_owner, id)
	// }
	// engfunc(EngFunc_SetModel, g_iEntPlayerModel[id], modelpath)
// }

stock fm_set_admin_weaponmodel(id) 
{
	static model[100]
	pev(id, pev_weaponmodel2, model, 99)
	
	if(!pev_valid(g_iEntWeaponModel[id])) 
	{
		g_iEntWeaponModel[id] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
		
		if (!pev_valid(g_iEntWeaponModel[id])) return
		
		set_pev(g_iEntWeaponModel[id], pev_classname, "ent_weaponmodel")
		set_pev(g_iEntWeaponModel[id], pev_movetype, MOVETYPE_FOLLOW)
		set_pev(g_iEntWeaponModel[id], pev_aiment, id)
		set_pev(g_iEntWeaponModel[id], pev_owner, id)
	}
	engfunc(EngFunc_SetModel, g_iEntWeaponModel[id], model)
}

stock fm_remove_model_ents(id) 
{
	set_pev(id, pev_rendermode, kRenderNormal)
	
	if(pev_valid(g_iEntPlayerModel[id])) 
	{
		engfunc(EngFunc_RemoveEntity, g_iEntPlayerModel[id])
		g_iEntPlayerModel[id] = 0
	}
	if(pev_valid(g_iEntWeaponModel[id])) 
	{
		engfunc(EngFunc_RemoveEntity, g_iEntWeaponModel[id])
		g_iEntWeaponModel[id] = 0
	}
}

stock ham_strip_weapon(id,weapon[])
{
	if(!equal(weapon,"weapon_",7)) return 0
	
	new wId = get_weaponid(weapon)
	if(!wId) return 0
	
	new wEnt
	while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
	if(!wEnt) return 0
	
	if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt)
	
	if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) return 0
	ExecuteHamB(Ham_Item_Kill,wEnt)
	
	set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId))
	
	return 1
}

stock kz_set_health(id)
{
	new Float:fHealth = 255.0
	if(pev(id, pev_health) < fHealth)
	{
		set_pev(id, pev_health, fHealth)
		set_pev(id, pev_max_health, fHealth)
	}
}

stock kz_set_weapons(id)
{
	if(!is_plr_bot[id])
	{
		strip_user_weapons(id)
		give_item(id, "weapon_knife")
		give_item(id, "weapon_usp")
		if(g_bHasScout[id])
			give_item(id, "weapon_scout")
		g_bWeapons[id] = false
	}
}

stock kz_team_join(id, MenuMsgid, Team[], Class[]) 
{
	static jointeam[] = "jointeam"
	if (Class[0] == '0' ) 
	{
		engclient_cmd(id, jointeam, Team)
		return
	}
	static MsgBlock, joinclass[] = "joinclass"
	MsgBlock = get_msg_block(MenuMsgid)
	set_msg_block(MenuMsgid, BLOCK_SET)
	engclient_cmd(id, jointeam, Team)
	engclient_cmd(id, joinclass, Class)
	set_msg_block(MenuMsgid, MsgBlock)
}

stock kz_set_autojoin_task(id, MenuMsgid) 
{
	static ParamMenuMsgid[2]
	ParamMenuMsgid[0] = MenuMsgid
	set_task(0.1, "PlayerTeamJoin", id + TASK_AUTOJOIN, ParamMenuMsgid, sizeof ParamMenuMsgid)
}

stock bool:ShouldAutoJoin(id)
{
	return (!get_user_team(id) && !task_exists(id + TASK_AUTOJOIN))
}

stock kz_callfunc(id, function[], plugin[], onoff[])
{		
	if(callfunc_begin(function, plugin) == 1) 
	{
		callfunc_push_int(id)
		callfunc_push_str(onoff)
		callfunc_end()
	}
}

stock kz_make_lgt(id, Float:origin[3], Red, Green, Blue)
{
	message_begin(MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, _, id) 
	write_byte(TE_DLIGHT)  
	engfunc(EngFunc_WriteCoord, origin[0]) 
	engfunc(EngFunc_WriteCoord, origin[1]) 
	engfunc(EngFunc_WriteCoord, origin[2]) 
	write_byte(get_pcvar_num(g_kz_nvg_radius))                
	write_byte(Red)   
	write_byte(Green)   
	write_byte(Blue)   
	write_byte(2)              
	write_byte(0)                
	message_end() 
}

stock kz_make_nvg(id)
{
	new r, g, b 
	GetCvarColor(g_kz_nvg_color, r, g, b)
	
	message_begin( MSG_ONE_UNRELIABLE, g_ScreenFade, _, id) 
	write_short(1<<0) 
	write_short(1<<0) 
	write_short(0x0004) 
	write_byte(r)
	write_byte(g)
	write_byte(b)
	write_byte(50) 
	message_end()
	
	set_task(0.1, "kz_set_nvg", id + TASK_NVG, _, _, "b") 
}

stock kz_remove_nvg(id)
{
	message_begin( MSG_ONE_UNRELIABLE, g_ScreenFade, _, id) 
	write_short(0)
	write_short(0)
	write_short(0x0000)
	write_byte(0)
	write_byte(0)
	write_byte(0)
	write_byte(0) 
	message_end()
	
	remove_task(id + TASK_NVG)
	g_bPlayerNvgUse[id] = false
}

stock kz_set_nvg_msg(id, bool:toggle)
{
	message_begin(MSG_ONE_UNRELIABLE, g_NVGToggle, _, id)
	write_byte(toggle)
	message_end()
}

stock kz_register_saycmd(const saycommand[], const function[], flags) 
{
	new temp[64]
	formatex(temp, 63, "say /%s", saycommand)
	register_clcmd(temp, function, flags)
	formatex(temp, 63, "say .%s", saycommand)
	register_clcmd(temp, function, flags)
	formatex(temp, 63, "say_team /%s", saycommand)
	register_clcmd(temp, function, flags)
	formatex(temp, 63, "say_team .%s", saycommand)
	register_clcmd(temp, function, flags)
}

kz_make_config(const sConfig[]) {
	
	new f = fopen(sConfig, "wt")
	
	new sCvarSrting[32] 
	
	fprintf(f, "// %s %s by %s - Cvars Config ^n^n", PLUGIN, VERSION, AUTHOR)
	
	fprintf(f, "// Game Description^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_modname_enable %i^n^n", get_pcvar_num(g_kz_modname_enable))
	
	fprintf(f, "// Recommend to set this Cvars via Admin Menu^n")
	fprintf(f, "// Type /amenu in chat to open the Admin Menu^n")
	fprintf(f, "// kz_checkpoints %i^n", get_pcvar_num(g_kz_checkpoints))
	fprintf(f, "// kz_godmode %i^n", get_pcvar_num(g_kz_godmode))
	fprintf(f, "// kz_autojoin %i^n", get_pcvar_num(g_kz_autojoin))
	fprintf(f, "// kz_scout %i^n", get_pcvar_num(g_kz_scout))
	fprintf(f, "// kz_adminglow %i^n", get_pcvar_num(g_kz_adminglow))
	fprintf(f, "// kz_semiclip %i^n", get_pcvar_num(g_kz_semiclip))
	fprintf(f, "// kz_bhop %i^n", get_pcvar_num(g_kz_bhop))
	fprintf(f, "// kz_transparency %i^n", get_pcvar_num(g_kz_transparency))
	fprintf(f, "// kz_cheatdetect %i^n^n", get_pcvar_num(g_kz_cheatdetect))
	
	fprintf(f, "// Set how many Checkpoint are allowed to use for^n")
	fprintf(f, "// pro climber to get on Pro15 rank^n")
	fprintf(f, "// 0 - Only climber with No Checks get on Pro15 rank^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 10000^n")
	fprintf(f, "kz_maxpro_cp %i^n^n", get_pcvar_num(g_kz_maxpro_cp))
	
	fprintf(f, "// Set Player Individually Auto-Start-Position^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_autostart %i^n^n", get_pcvar_num(g_kz_autostart))
	
	fprintf(f, "// Allows started Player to pause his time^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_pause %i^n^n", get_pcvar_num(g_kz_pause))
	
	fprintf(f, "// Allows Player to join team Spectator^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_spec %i^n^n", get_pcvar_num(g_kz_spec))
	
	fprintf(f, "// Kz Start and Finish sounds^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Start & Finish sound Enabled^n")
	fprintf(f, "// 2 - Only Start sound Enabled^n")
	fprintf(f, "// 3 - Only Finish sound Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_sounds %i^n^n", get_pcvar_num(g_kz_sounds))
	
	fprintf(f, "// Set Admin Model^n")
	fprintf(f, "// 0 - Sas Model^n")
	fprintf(f, "// 1 - Vip Model and Scoreboard Attribute Vip^n")
	fprintf(f, "// 2 - Arctic Model and Scoreboard Attribute Vip^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_vip %i^n^n", get_pcvar_num(g_kz_vip))
	
	fprintf(f, "// Kz Startmoney^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1337^n")
	fprintf(f, "kz_money %i^n^n", get_pcvar_num(g_kz_money))
	
	fprintf(f, "// Player self kill command^n")
	fprintf(f, "// 0 - Self kill allowed^n")
	fprintf(f, "// 1 - Self kill not allowed^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_nokill %i^n^n", get_pcvar_num(g_kz_nokill))
	
	fprintf(f, "// Help Motd with all kz commands^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_help %i^n^n", get_pcvar_num(g_kz_help))
	
	fprintf(f, "// Create Kz Bot^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_bot %i^n^n", get_pcvar_num(g_kz_bot))
	
	fprintf(f, "// Kz Bot Name^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: ProKreedz Ultimativ v2.4^n")
	get_pcvar_string(g_kz_botname, sCvarSrting, 31)
	fprintf(f, "kz_botname ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Player rewards Hook and Jetpack^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_prize %i^n^n", get_pcvar_num(g_kz_prize))
	
	fprintf(f, "// Info Msgs about receiving rewards^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 60^n")
	fprintf(f, "kz_advert_time %i^n^n", get_pcvar_num(g_kz_advert_time))
	
	fprintf(f, "// Door sounds^n")
	fprintf(f, "// 0 - Enabled^n")
	fprintf(f, "// 1 - Disabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_doorsound %i^n^n", get_pcvar_num(g_kz_doorsound))
	
	fprintf(f, "// Pain sounds^n")
	fprintf(f, "// 0 - Enabled^n")
	fprintf(f, "// 1 - Disabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_painsound %i^n^n", get_pcvar_num(g_kz_painsound))
	
	fprintf(f, "// Water sounds^n")
	fprintf(f, "// 0 - Enabled^n")
	fprintf(f, "// 1 - Disabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_watersound %i^n^n", get_pcvar_num(g_kz_watersound))
	
	fprintf(f, "// Kz chat prefix^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: [ProKreedz]^n")
	get_pcvar_string(g_kz_tag, sCvarSrting, 31)
	fprintf(f, "kz_tag ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Player Autohealing^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_autoheal %i^n^n", get_pcvar_num(g_kz_autoheal))
	
	fprintf(f, "// Set HP Amount for Autohealing^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 50^n")
	fprintf(f, "kz_autoheal_hp %i^n^n", get_pcvar_num(g_kz_autoheal_hp))
	
	fprintf(f, "// Give player all weapons^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_weapons %i^n^n", get_pcvar_num(g_kz_weapons))
	
	fprintf(f, "// Show maxspeed of weapons^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_weaponspeed %i^n^n", get_pcvar_num(g_kz_weaponspeed))
	
	fprintf(f, "// Set the color of weaponspeed Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 0 255 255^n")
	get_pcvar_string(g_kz_weaponspeed_color, sCvarSrting, 31)
	fprintf(f, "kz_weaponspeed_color ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Set the position of weaponspeed Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 0.35 0.75^n")
	get_pcvar_string(g_kz_weaponspeed_xypos, sCvarSrting, 31)
	fprintf(f, "kz_weaponspeed_xypos ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Show Player Keys^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_showkeys %i^n^n", get_pcvar_num(g_kz_showkeys))
	
	fprintf(f, "// Set the color of showkeys Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 0 255 255^n")
	get_pcvar_string(g_kz_showkeys_color, sCvarSrting, 31)
	fprintf(f, "kz_showkeys_color ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Set the position of showkeys Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: -1.0 -0.40^n")
	get_pcvar_string(g_kz_showkeys_xypos, sCvarSrting, 31)
	fprintf(f, "kz_showkeys_xypos ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Kz Custom Nightvision^n")
	fprintf(f, "// 0 - Disabled^n")
	fprintf(f, "// 1 - Enabled^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_nvg_enabled %i^n^n", get_pcvar_num(g_kz_nvg_enabled))
	
	fprintf(f, "// Kz Custom Nightvision Radius^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 70^n")
	fprintf(f, "kz_nvg_radius %i^n^n", get_pcvar_num(g_kz_nvg_radius))
	
	fprintf(f, "// Set the color of custom Nvg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 0 255 255^n")
	get_pcvar_string(g_kz_nvg_color, sCvarSrting, 31)
	fprintf(f, "kz_nvg_color ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Set the color of Palyer time Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 0 255 255^n")
	get_pcvar_string(g_kz_time_color, sCvarSrting, 31)
	fprintf(f, "kz_time_color ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Set the color of pause and spec Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 255 0 0^n")
	get_pcvar_string(g_kz_status_color, sCvarSrting, 31)
	fprintf(f, "kz_status_color ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Set the color of Health Msg^n")
	fprintf(f, "// Health Msg will be shown when Health is greater 255 HP^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 255 50 0^n")
	get_pcvar_string(g_kz_showhealth_color, sCvarSrting, 31)
	fprintf(f, "kz_showhealth_color ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Set the positionof Health Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: -1.0 0.9^n")
	get_pcvar_string(g_kz_showhealth_xypos, sCvarSrting, 31)
	fprintf(f, "kz_showhealth_xypos ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// StatusText Types^n")
	fprintf(f, "// 0 - Show Hud Msg as Staustext - (Show only player name)^n")
	fprintf(f, "// 1 - Show Original Staustext - (Show only player name)^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 1^n")
	fprintf(f, "kz_statustext %i^n^n", get_pcvar_num(g_kz_statustext))
	
	fprintf(f, "// Set the color of Statustext Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: 255 255 0^n")
	get_pcvar_string(g_kz_statustext_color, sCvarSrting, 31)
	fprintf(f, "kz_statustext_color ^"%s^"^n^n", sCvarSrting)
	
	fprintf(f, "// Set the position of Statustext Msg^n")
	fprintf(f, "//^n")
	fprintf(f, "// Default: -1.0 0.52^n")
	get_pcvar_string(g_kz_statustext_xypos, sCvarSrting, 31)
	fprintf(f, "kz_statustext_xypos ^"%s^"^n^n", sCvarSrting)
	
	fclose(f)
	
	server_cmd("exec %s", sConfig)
	server_exec()
}
Mark.uG is offline
Mark.uG
AlliedModders Donor
Join Date: Oct 2014
Old 11-11-2019 , 13:48   Re: (Paid) ProKreedv2.4 Edit
Reply With Quote #2

Nevermind I did it myself
Mark.uG is offline
Reply



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 18:18.


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