/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <fakemeta>
#include <cstrike>
#include <fun>
#include <biohazard>
#include <engine>
#include <fakemeta_util>
#include <xs>


#define PLUGIN "Biohazard Gelismis Menu"
#define VERSION "1.4"
#define AUTHOR "crunch98/PowereXe"
#define START_DISTANCE  32
#define MAX_ATTEMPTS    128
#define MAX_CLIENTS     32
#define sNo "buttons/button11.wav"
#define ADMIN_FLAG	ADMIN_BAN
#define OFFSET_NVGOGGLES    129
#define HAS_NVGS (1<<0)
#define USES_NVGS (1<<8)

#define TASK_KESINTI  5001
#define NO_RECOIL_WEAPONS_BITSUM    ( 1<<2 | 1<<CSW_KNIFE | 1<<CSW_HEGRENADE | 1<<CSW_FLASHBANG | 1<<CSW_SMOKEGRENADE | 1<<CSW_C4 )
#define TASK_FINISH_QUAKE 4071
#define TASK_QUAKE_PERSECOND 4072
#define MAX_SIZES	3
#define OFFSET_NVGOGGLES    129
#define HAS_NVGS (1<<0)
#define USES_NVGS (1<<8)
#define PA_LOW  25.0
#define PA_HIGH 50.0

new gmsgNVGToggle, g_maxplayers, cvar_multi

new g_recoil, g_duration,g_msgidScreenShake,cvar_speed_fiyat,cvar_god_fiyat,cvar_elektrik_fiyat,cvar_yuksek_zip_fiyat,cvar_renk_deg_glow_fiyat,cvar_deprem_fiyat,cvar_saglik_fiyat,cvar_gorunmez_fiyat
new bool:deprembaslat = false
new Float:cl_pushangle[33][3]

#if defined _colorchat_included
  #endinput
#endif
#define _colorchat_included

enum Color
{
	NORMAL = 1, // clients scr_concolor cvar color
	GREEN, // Green Color
	TEAM_COLOR, // Red, grey, blue
	GREY, // grey
	RED, // Red
	BLUE, // Blue
}

new TeamName[][] = 
{
	"",
	"TERRORIST",
	"CT",
	"SPECTATOR"
}

ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)
{
	if( !get_playersnum() ) return;
	
	new message[256];

	switch(type)
	{
		case NORMAL: // clients scr_concolor cvar color
		{
			message[0] = 0x01;
		}
		case GREEN: // Green
		{
			message[0] = 0x04;
		}
		default: // White, Red, Blue
		{
			message[0] = 0x03;
		}
	}

	vformat(message[1], 251, msg, 4);

	// Make sure message is not longer than 192 character. Will crash the server.
	message[192] = '^0';

	new team, ColorChange, index, MSG_Type;
	
	if(id)
	{
		MSG_Type = MSG_ONE;
		index = id;
	} else {
		index = FindPlayer();
		MSG_Type = MSG_ALL;
	}
	
	team = get_user_team(index);
	ColorChange = ColorSelection(index, MSG_Type, type);

	ShowColorMessage(index, MSG_Type, message);
		
	if(ColorChange)
	{
		Team_Info(index, MSG_Type, TeamName[team]);
	}
}

ShowColorMessage(id, type, message[])
{
	static bool:saytext_used;
	static get_user_msgid_saytext;
	if(!saytext_used)
	{
		get_user_msgid_saytext = get_user_msgid("SayText");
		saytext_used = true;
	}
	message_begin(type, get_user_msgid_saytext, _, id);
	write_byte(id)		
	write_string(message);
	message_end();	
}

Team_Info(id, type, team[])
{
	static bool:teaminfo_used;
	static get_user_msgid_teaminfo;
	if(!teaminfo_used)
	{
		get_user_msgid_teaminfo = get_user_msgid("TeamInfo");
		teaminfo_used = true;
	}
	message_begin(type, get_user_msgid_teaminfo, _, id);
	write_byte(id);
	write_string(team);
	message_end();

	return 1;
}

ColorSelection(index, type, Color:Type)
{
	switch(Type)
	{
		case RED:
		{
			return Team_Info(index, type, TeamName[1]);
		}
		case BLUE:
		{
			return Team_Info(index, type, TeamName[2]);
		}
		case GREY:
		{
			return Team_Info(index, type, TeamName[0]);
		}
	}

	return 0;
}

FindPlayer()
{
	new i = -1;

	while(i <= get_maxplayers())
	{
		if(is_user_connected(++i))
			return i;
	}

	return -1;
}

new Float:gf_LastCmdTime[ MAX_CLIENTS + 1 ];
new gp_UnstuckFrequency;
    
// --| Just for readability.
enum Coord_e { Float:x, Float:y, Float:z };

//PLUGININ TUM HAKLARI crunch98'e AITTIR.
//Creative Commons Alıntı-Gayriticari-Türetilemez Lisansı İle Korumaya Alınmış Olup Alıntı Yapılması, Paylaşılması, Dağıtılması ve Ticari Amaçla Kullanılması Telif Hakkının İhlali Olarak Kabul Edilir.

// --| Macro.
#define GetPlayerHullSize(%1)  ( ( pev ( %1, pev_flags ) & FL_DUCKING ) ? HULL_HEAD : HULL_HUMAN )

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd("say !biomenu","AnaMenu")
    register_clcmd("say /biomenu","AnaMenu")
    register_clcmd("say .biomenu","AnaMenu")
    register_clcmd("biomenu","AnaMenu")
    register_clcmd("unstuck", "ClientCommand_UnStick")
	
    gp_UnstuckFrequency = register_cvar ( "amx_unstuck_frequency", "4.0" );
	
    register_clcmd("say /bioadminmenu","CreateAdminBioMenu")

    register_logevent("TurSonu", 2, "1=Round_End")
	
    gmsgNVGToggle = get_user_msgid("NVGToggle")
    cvar_multi = register_cvar("bio_multi_enfeksiyon", "0")

    g_maxplayers = get_maxplayers()
    register_clcmd("chooseteam","MenuM");
	
    register_clcmd("say /ozelmenu","CreateSpecialMenu")
    register_clcmd("say_team /ozelmenu","CreateSpecialMenu")
    register_clcmd("say /ozel","CreateSpecialMenu")
    register_clcmd("say_team /ozel","CreateSpecialMenu")
    cvar_speed_fiyat = register_cvar("bio_speed_fiyat","5000")
    cvar_god_fiyat = register_cvar("bio_godmode_fiyat","14000")
    cvar_elektrik_fiyat = register_cvar("bio_elektrik_fiyat","15000")
    cvar_yuksek_zip_fiyat = register_cvar("bio_yuksek_ziplama_fiyat","8000")
    cvar_renk_deg_glow_fiyat = register_cvar("bio_renk_degistiren_glow_fiyat","1000")
    cvar_deprem_fiyat = register_cvar("bio_deprem_fiyat","10000")
    cvar_saglik_fiyat = register_cvar("bio_saglik_fiyat","5000")
    cvar_gorunmez_fiyat = register_cvar("bio_gorunmez_fiyat","16000")
    RegisterHam(Ham_Spawn,"player","OyuncuDogunca",1)
    gmsgNVGToggle = get_user_msgid("NVGToggle")
    g_msgidScreenShake = get_user_msgid("ScreenShake")
    g_duration = register_cvar("amx_deprem_ sure","15")
	
    new weapon_name[20] 
    for (new i=CSW_P228;i<=CSW_P90;i++) 
	{         
		if(!(NO_RECOIL_WEAPONS_BITSUM & (1<<i)) && get_weaponname(i, weapon_name, charsmax(weapon_name))) 
		{ 
			RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_primary_attack")
			RegisterHam(Ham_Weapon_PrimaryAttack, weapon_name, "fw_primary_attack_post",1) 
		} 
	}		
}

public MenuM(id){ 
	AnaMenu(id);
}

public OyuncuDogunca(id) {
//	set_user_rendering(id,kRenderFxGlowShell,0,0,0,kRenderNormal,25)
//	set_user_godmode(id,0)
//	set_user_maxspeed(id, 240.0)
//	set_user_gravity(id,1.0)
	deprembaslat = false
}
public CreateSpecialMenu(id,level,cid) {
	if(!is_user_alive(id)) {
		ColorChat(id,NORMAL,"^4[Biohazard]:^1 ^3Ozel Menuyu^1 kullanabilmek icin ^4Hayatta^1 olmaniz gerekir.!")
		return PLUGIN_HANDLED
	}
	
	if(is_user_zombie(id)) {
		new menu, Menuz[512]
		
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] Zombi Menu:")
		menu = menu_create(Menuz, "MenuHandler")
		
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Insana Donusme (AntiDot) \r[ 16000 TL ]")
		menu_additem(menu, Menuz, "1", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> JetPack (Olene Kadar) \r[ 2500 TL ]")
		menu_additem(menu, Menuz, "2", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Enerji Patlamasi (10 Saniye) \r[ 5000 TL ]")
		menu_additem(menu, Menuz, "3", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Godmode (3 Saniye) \r[ 14000 TL ]")
		menu_additem(menu, Menuz, "4", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Elektrikleri Kes \r[ 15000 TL ]")
		menu_additem(menu, Menuz, "5", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Yuksek Ziplama(El Boyunca) \r[ 8000 TL ]")
		menu_additem(menu, Menuz, "6", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Renk \rDegistiren Glow \y(Map Boyunca) \r[ 1000 TL ]")
		menu_additem(menu, Menuz, "7", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Deprem Baslat \r[ 10000 TL ]")
		menu_additem(menu, Menuz, "8", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Saglik Kutusu +75 HP \r[ 5000 TL ]")
		menu_additem(menu, Menuz, "9", 0)
		formatex(Menuz, charsmax(Menuz), "\y[CSAilesi] ~> Gorunmez Ol (10 Saniye) \r[ 16000 TL ]")
		menu_additem(menu, Menuz, "10", 0)
		formatex(Menuz, charsmax(Menuz), "\yGeri")
		menu_setprop(menu, MPROP_BACKNAME ,Menuz)
		formatex(Menuz, charsmax(Menuz), "\yIleri")
		menu_setprop(menu,MPROP_NEXTNAME ,Menuz)
		formatex(Menuz, charsmax(Menuz), "\r[CSAilesi] \wCikis")
		menu_setprop(menu,MPROP_EXITNAME,Menuz)
		
		
		menu_setprop(menu,MPROP_EXIT, MEXIT_ALL)
		
		
		menu_display(id, menu, 0)
		} else {
		ColorChat(id,NORMAL,"^4[CSAilesi]:^1 ^3Ozel Menuyu^1 Kullanabilmek icin ^4Zombi^1 Olmaniz Gerekir.!")
	}
	return PLUGIN_HANDLED;
}
public MenuHandler(id, menu ,item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	
	new data[6], iIsim[64], oyuncu_isim[32]
	new access,callback
	get_user_name(id,oyuncu_isim,31)
	menu_item_getinfo(menu,item,access,data,5,iIsim,63,callback)
	new para = cs_get_user_money(id)
	
	new key = str_to_num(data)
	
	switch(key) {
		case 1: {
            set_user_human(id);
        }
		case 2: {
			client_cmd(id, "say /jetpack") 
		}
		case 3: {
			if(para >= get_pcvar_num(cvar_speed_fiyat)) {
				cs_set_user_money(id, para - get_pcvar_num(cvar_speed_fiyat))
				set_user_maxspeed(id, 500.0)
				set_task(10.0,"RemoveSpeed",id)
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Enerji Patlamasi Satin Aldiniz.")
				} else {
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^3%d^1 TL",get_pcvar_num(cvar_speed_fiyat))
			}
		}
		case 4: {
			if(para >= get_pcvar_num(cvar_god_fiyat)) {
				cs_set_user_money(id, para - get_pcvar_num(cvar_god_fiyat))
				set_user_godmode(id, 1)
				set_task(3.0,"RemoveGodMode",id)
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 GodMode Satin Aldiniz.")
				} else {
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^3%d^1 TL",get_pcvar_num(cvar_god_fiyat))
			}
		}
		case 5: {
			if(para >= get_pcvar_num(cvar_elektrik_fiyat)) {
				cs_set_user_money(id, para - get_pcvar_num(cvar_elektrik_fiyat))
				set_lights("a")
				set_task(5.0, "elektrikAc", TASK_KESINTI)
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Elektrikleri Kestiniz.")
				} else {
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^3%d^1 TL",get_pcvar_num(cvar_elektrik_fiyat))
			}
		}
		case 6: {
			if(para >= get_pcvar_num(cvar_yuksek_zip_fiyat)) {
				cs_set_user_money(id, para - get_pcvar_num(cvar_yuksek_zip_fiyat))
				set_user_gravity(id, 0.3)
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Yuksek Ziplama Satin Aldiniz.")
				} else {
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^3%d^1 TL",get_pcvar_num(cvar_yuksek_zip_fiyat))
			}
		}
		case 7: {
			if(para >= get_pcvar_num(cvar_renk_deg_glow_fiyat)) {
				cs_set_user_money(id, para - get_pcvar_num(cvar_renk_deg_glow_fiyat))
				set_task(0.5,"Glow1",id,_,_,"b")
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Renk Degistiren Glow Satin Aldiniz.")
				} else {
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^3%d^1 TL",get_pcvar_num(cvar_renk_deg_glow_fiyat))
			}
		}
		case 8: {
			depremsatinal(id)
		} 
		case 9: {
			if(para >= get_pcvar_num(cvar_saglik_fiyat)) {
				cs_set_user_money(id, para - get_pcvar_num(cvar_saglik_fiyat))
				set_user_health(id, get_user_health(id) + 75)
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 +75 HP Cantasi Satin Aldiniz.")
				} else {
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^4%d^1 TL",get_pcvar_num(cvar_saglik_fiyat))
			}
		}
		case 10: {
			if(para >= get_pcvar_num(cvar_gorunmez_fiyat)) {
				cs_set_user_money(id, para - get_pcvar_num(cvar_gorunmez_fiyat))
				set_user_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0)
				set_task(10.0,"RemoveInvis",id)
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 10 Saniye Gorunmezlik Satin Aldiniz.")
				} else {
				ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^4%d^1 TL",get_pcvar_num(cvar_gorunmez_fiyat))
			}
		}
	}
	return PLUGIN_HANDLED
}
public RemoveSpeed(id) {
	set_user_maxspeed(id, 240.0)
	ColorChat(id, GREEN,"^4[CSAilesi]:^1 Enerjin Bitti.")
}
public RemoveGodMode(id) {
	set_user_godmode(id,0)
	ColorChat(id,GREEN,"^4[CSAilesi]:^1 GodMode Suresi Bitti.")
}
public elektrikAc(TaskID) {
	set_lights("#OFF")
	remove_task(TaskID)
}
public RemoveInvis(id) {
	set_user_rendering(id, _, 0, 0, 0, _, 0)
	ColorChat(id,GREEN,"^4[CSAilesi]:^1 Gorunmezlik Suresi Bitti.")
}
public Glow1(id) {
	set_user_rendering(id,kRenderFxGlowShell,255,0,0,kRenderNormal,25)
	set_task(5.0,"Glow2",id)
}
public Glow2(id) {
	set_user_rendering(id,kRenderFxGlowShell,255,140,0,kRenderNormal,25)
	set_task(4.0,"Glow3",id)
}
public Glow3(id) {
	set_user_rendering(id,kRenderFxGlowShell,0,255,0,kRenderNormal,25)
	set_task(3.0,"Glow4",id)
}
public Glow4(id) {
	set_user_rendering(id,kRenderFxGlowShell,0,0,255,kRenderNormal,25)
	set_task(2.0,"Glow5",id)
}
public Glow5(id) {
	set_user_rendering(id,kRenderFxGlowShell,192,192,192,kRenderNormal,25)
	set_task(1.0,"Glow1",id)
}
public depremsatinal(id) {
	if(!(is_user_alive(id) || is_user_zombie(id) || deprembaslat)) return PLUGIN_HANDLED
	
	new para = cs_get_user_money(id)
	
	if(para >= get_pcvar_num(cvar_deprem_fiyat)) {
		cs_set_user_money(id, para - get_pcvar_num(cvar_deprem_fiyat))
		deprembaslat = true
		new isim[32]
		get_user_name(id, isim, charsmax(isim))
		set_hudmessage(255, 255, 255, 0.27, 0.29, 0, 6.0, 5.0,_,_,-1)
		show_hudmessage(0, "%s Deprem Oluyor..!!",isim)
		set_task(0.2,"ShakeTheScreen",TASK_QUAKE_PERSECOND,"",0,"b")
		set_task(float(get_pcvar_num(g_duration)),"StopQuake",TASK_FINISH_QUAKE)
		ColorChat(id, GREEN, "^4[CSAilesi]:^1 Deprem Baslattiniz.")
		} else {
		ColorChat(id, GREEN,"^4[CSAilesi]:^1 Satin Almak Icin ^4Yeterli Paraniz^1 Yok.^4Gerekli Olan Miktar:^1^3%d^1 TL",get_pcvar_num(cvar_deprem_fiyat))
	}
	return PLUGIN_HANDLED
}
public StopQuake(TaskID) {
	if(deprembaslat) {
		remove_task(TASK_FINISH_QUAKE)
		deprembaslat = false
		remove_task(TaskID)	
	}
}
public ShakeTheScreen(TaskID) {
	for(new i = 1; i < 33; i++) {
		if(is_user_connected(i) && is_user_alive(i) && deprembaslat) {
			message_begin(MSG_ONE_UNRELIABLE, g_msgidScreenShake, {0,0,0}, i)  
			write_short(0xFFFF)
			write_short(1<<13)
			write_short(0xFFFF) 
			message_end()
		}
	}
}
public fw_primary_attack(ent) {
	new id = pev(ent,pev_owner)
	pev(id,pev_punchangle,cl_pushangle[id])
	return HAM_IGNORED
}
public fw_primary_attack_post(ent) {
	if(deprembaslat && get_pcvar_num(g_recoil)) {
		new id = pev(ent,pev_owner)
		new Float:push[3]
		pev(id,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[id],push)
		
		xs_vec_mul_scalar(push,3.5,push)
		xs_vec_add(push,cl_pushangle[id],push)
		set_pev(id,pev_punchangle,push)
		return HAM_IGNORED
	}
	
	return HAM_IGNORED
}
Nvgs_Sil(id) {
	new iNvgs = get_pdata_int(id, OFFSET_NVGOGGLES, 5)
	if( !iNvgs ) {
		return
	}
	if( iNvgs & USES_NVGS ) {
		emit_sound(id, CHAN_ITEM, "items/nvg_off.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		
		emessage_begin(MSG_ONE, gmsgNVGToggle, _, id)
		ewrite_byte(0)
		emessage_end()
	}
	set_pdata_int(id, OFFSET_NVGOGGLES, 0, 5)
} 

public CreateAdminBioMenu(id) {
	if(get_user_flags(id) & ADMIN_FLAG) {
		new menu, Menuz[512]
		
		formatex(Menuz, charsmax(Menuz), "\g[Biohazard]: \rAdmin Menu:")
		menu = menu_create(Menuz, "biomenu_handler")
		
		formatex(Menuz, charsmax(Menuz), "\wInsan Yap")
		menu_additem(menu, Menuz, "1", ADMIN_FLAG)
		formatex(Menuz, charsmax(Menuz), "\wZombi Yap")
		menu_additem(menu, Menuz, "2", ADMIN_FLAG)
		formatex(Menuz, charsmax(Menuz), "\wOyuncu Oldur")
		menu_additem(menu, Menuz, "3", ADMIN_FLAG)
		formatex(Menuz, charsmax(Menuz), "\wOyuncu Canlandir")
		menu_additem(menu, Menuz, "4", ADMIN_FLAG)
		formatex(Menuz, charsmax(Menuz), "\wCoklu Enfeksiyon \r[Baslat]")
		menu_additem(menu, Menuz, "5", ADMIN_FLAG)
		formatex(Menuz, charsmax(Menuz), "\yGeri")
		menu_setprop(menu, MPROP_BACKNAME ,Menuz)
		formatex(Menuz, charsmax(Menuz), "\yIleri")
		menu_setprop(menu,MPROP_NEXTNAME ,Menuz)
		formatex(Menuz, charsmax(Menuz), "\rCikis")
		menu_setprop(menu,MPROP_EXITNAME,Menuz)
		
		menu_setprop(menu,MPROP_EXIT, MEXIT_ALL)
		
		menu_display(id, menu, 0)
	}
	return PLUGIN_HANDLED
}
public TurSonu() {
	set_cvar_num("bio_multi_enfeksiyon",0)
}
public biomenu_handler(id,menu,item) {	
	if(item == MENU_EXIT) {
	menu_destroy(menu)
	return PLUGIN_HANDLED
	}
	new data[6],iName[64],oyuncu_isim[32]
	new access,callback
	get_user_name(id,oyuncu_isim,31)
	menu_item_getinfo(menu,item,access,data,5,iName,63,callback)
	
	new key = str_to_num(data)
	
	switch(key) {
		case 1:{
			InsanYap(id)
		}
		case 2:{
			ZombiYap(id)
		}
		case 3:{
			Oldur(id)
		} 
		case 4: {
			Canlandir(id)
		}
		case 5: {
			set_cvar_num("bio_multi_enfeksiyon",1)
		}
	}
	return PLUGIN_HANDLED
}
public InsanYap(id) {
	if(get_user_flags(id) & ADMIN_FLAG) {
		new insanmenu = menu_create("\g[Biohazard]: Insan Yap","insanmenu_handler")
		
		new oyuncular[32],oyuncusayisi;
		static tempid,szName[32],szID[6]
		get_players(oyuncular,oyuncusayisi,"aeh","TERRORIST")
		for(new i;i<oyuncusayisi;i++) {
			tempid = oyuncular[i]
			get_user_name(tempid,szName,31)
			num_to_str(tempid,szID,5)
			menu_additem(insanmenu,szName,szID)
		}
		menu_setprop(insanmenu,MPROP_EXIT,MEXIT_ALL)
		menu_display(id,insanmenu,0)
	}
	return PLUGIN_HANDLED
}
public insanmenu_handler(id,menu,item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	new access,callback;
	new isim[32],data[6];
	
	menu_item_getinfo(menu,item,access,data,charsmax(data),isim,charsmax(isim),callback)
	
	new Uid = str_to_num(data);
	new uname[32],admin[32];
	get_user_name(id,admin,31)
	
	if(is_user_connected(Uid)) {
		get_user_name(Uid,uname,31)
		set_user_human(Uid)
		set_hudmessage(0, 0, 255, -1.0, 0.53)
		show_hudmessage(Uid, "TEKRAR INSANSIN")
	}
	InsanYap(id)
	return PLUGIN_HANDLED
}
public ZombiYap(id) {
	if(get_user_flags(id) & ADMIN_FLAG) {
		new zombimenu = menu_create("\g[Biohazard]: Zombi Yap","zombimenu_handler")
		
		new oyuncular[32],oyuncusayisi;
		static tempid,szName[32],szID[6]
		get_players(oyuncular,oyuncusayisi,"aeh","CT")
		for(new i;i<oyuncusayisi;i++) {
			tempid = oyuncular[i]
			get_user_name(tempid,szName,31)
			num_to_str(tempid,szID,5)
			menu_additem(zombimenu,szName,szID)
		}
		menu_setprop(zombimenu,MPROP_EXIT,MEXIT_ALL)
		menu_display(id,zombimenu,0)
	}
	return PLUGIN_HANDLED
}
public zombimenu_handler(id,menu,item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	new access,callback;
	new isim[32],data[6];
	
	menu_item_getinfo(menu,item,access,data,charsmax(data),isim,charsmax(isim),callback)
	
	new Uid = str_to_num(data);
	new uname[32],admin[32];
	get_user_name(id,admin,31)
	
	if(is_user_connected(Uid)) {
		get_user_name(Uid,uname,31)
		set_user_zombi(Uid)
	}
	ZombiYap(id)
	return PLUGIN_HANDLED
}
public Canlandir(id) {
	if(get_user_flags(id) & ADMIN_FLAG) {
		new canmenu = menu_create("\g[Biohazard]: Oyuncu Canlandir","revmenu_handler")
		
		new oyuncular[32],oyuncusayisi;
		static tempid,szName[32],szID[6]
		get_players(oyuncular,oyuncusayisi,"bh")
		for(new i;i<oyuncusayisi;i++) {
			tempid = oyuncular[i]
			get_user_name(tempid,szName,31)
			num_to_str(tempid,szID,5)
			menu_additem(canmenu,szName,szID)
		}
		menu_setprop(canmenu,MPROP_EXIT,MEXIT_ALL)
		menu_display(id,canmenu,0)
	}
	return PLUGIN_HANDLED
}
public revmenu_handler(id,menu,item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	new access,callback;
	new isim[32],data[6];
	
	menu_item_getinfo(menu,item,access,data,charsmax(data),isim,charsmax(isim),callback)
	
	new Uid = str_to_num(data);
	
	if(!is_user_alive(Uid) && is_user_connected(Uid)) {
		ExecuteHamB(Ham_CS_RoundRespawn,Uid)
	}
	new admin[32];
	get_user_name(id,admin,31)
	ColorChat(0,NORMAL,"^4[Biohazard]:^1 ^4Admin:^1 ^3%s^1: ^4%s ^1 Adli Oyuncuyu Canlandirdi !",admin,isim)
	
	Canlandir(id)
	return PLUGIN_HANDLED
}
public Oldur(id) {
	if(get_user_flags(id) & ADMIN_FLAG) {
		new oldurmenu = menu_create("\g[Biohazard]: Oyuncu Oldur","killmenu_handler")
		
		new oyuncular[32],oyuncusayisi;
		static tempid,szName[32],szID[6]
		get_players(oyuncular,oyuncusayisi,"ah")
		for(new i;i<oyuncusayisi;i++) {
		tempid = oyuncular[i]
		get_user_name(tempid,szName,31)
		num_to_str(tempid,szID,5)
		menu_additem(oldurmenu,szName,szID)
		}
		menu_setprop(oldurmenu,MPROP_EXIT,MEXIT_ALL)
		menu_display(id,oldurmenu,0)
	}
	return PLUGIN_HANDLED
}
public killmenu_handler(id,menu,item) {
	if(item == MENU_EXIT) {
		menu_destroy(menu)
		return PLUGIN_HANDLED
	}
	new access,callback;
	new isim[32],data[6];
	
	menu_item_getinfo(menu,item,access,data,5,isim,31,callback)
	
	new Uid = str_to_num(data);

	new admin[32];
	get_user_name(id,admin,31)
	user_kill(Uid,1)
	ColorChat(0,NORMAL,"^4[Biohazard]:^1 ^4Admin:^1 ^3%s^1: ^4%s ^1 Adli Oyuncuyu Oldurdu !",admin,isim)
	
	Oldur(id)
	return PLUGIN_HANDLED
}
public multi_enfeksiyon() {
	new id, iZombies, iMaxZombies = min(get_pcvar_num(cvar_multi), fnGetAlive()-2)
	while (iZombies < iMaxZombies) {
		if(++id > g_maxplayers) id = 1

		if(!is_user_alive(id) || is_user_zombie(id))
			continue;
		if(random_num(0, 10) == 0) {
			infect_user(id,id)
			iZombies++
		}
	}
}
stock set_user_human(id) {
	cure_user(id)
	Nvgs_Sil(id)
	set_user_health(id, 100)
	cs_set_user_team(id, CS_TEAM_CT)
	cs_reset_user_model(id)
	give_item(id, "weapon_m4a1")
	give_item(id, "weapon_deagle")
	cs_set_user_bpammo(id, CSW_M4A1, 90)
	cs_set_user_bpammo(id, CSW_DEAGLE, 35)
	give_item(id, "weapon_hegrenade")
	give_item(id, "weapon_flashbang")
	give_item(id, "weapon_smokegrenade")
}
stock set_user_zombi(id) {
	infect_user(id,id)
}
fnGetAlive() {
	new iAlive, id
	for(id = 1; id <= g_maxplayers; id++) {
		if(is_user_alive(id))
			iAlive++
	}
	return iAlive;
}

public AnaMenu(id) {
        new menu = menu_create("\r* [CSAilesi | Bio Menu] * ","AnaMenuHandle")
    
	menu_additem(menu , "Ozel Silah Menusu", "1", 0)
	menu_additem(menu , "Ozel Zombi Menusu", "2", 0)
	menu_additem(menu , "Zombi Sinif Menusu", "3", 0)
	menu_additem(menu , "Bugdan Kurtul", "4", 0)
	menu_additem(menu , "Ayar Menusu", "5", 0)
	menu_additem(menu , "Lazer Menusu", "6", 0)
	menu_additem(menu , "Admin Menusu", "7", ADMIN_LEVEL_B)
    
	menu_setprop(menu,MPROP_EXITNAME,"Cikis ^n^n\yby \rPowereXe");
      
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL);
	
        menu_display(id,menu)
        return PLUGIN_HANDLED
}
public AnaMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            SilahMenu(id);
        }
        case 1: {
            client_cmd(id, "say /ozelmenu")
        }
	case 2: {
            client_cmd(id, "say /class")
        }
	case 3: {
            ClientCommand_UnStick(id);client_cmd(id, "-dellaser")
        }
	case 4: {
            YardimMenu(id);
        }
	case 5: {
            LazerMenu(id);
        }
	case 6: {
            AdMenu(id);
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
public SilahMenu(id) {	

if(!is_user_alive(id)) {
	ColorChat(id,NORMAL,"^4[Biohazard]:^1 ^3Ozel Menuyu^1 Kullanabilmek Icin ^4Hayatta^1 Olmaniz Gerekiyor.!")
	client_cmd(id, "spk %s", sNo)
	return PLUGIN_HANDLED
}
if(!is_user_zombie(id)) {
    new menu = menu_create("\r[Biohazard] \yOzel Silah Menusu","SilahMenuHandle")
    
    menu_additem(menu , "Altin XM1014 \yPompali \r$14000", "1", 0)
    menu_additem(menu , "Altin AK47 \r$12000", "2", 0)
    menu_additem(menu , "Altin M4A1 \r$12000", "3", 0)
    menu_additem(menu , "Ethereal \yEsirci \r$15000", "4", 0)
    menu_additem(menu , "Rock Guitar \r$15000", "5", 0)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
else
{
    ColorChat(id,NORMAL,"^4[Biohazard]:^1 ^3Ozel Menuyu^1 Kullanabilmek Icin ^4Zombi^1 Olmamaniz Gerekiyor.!")
    client_cmd(id, "spk %s", sNo)
}
return PLUGIN_HANDLED
}

public SilahMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "say /pompali")
        }
        case 1: {
            client_cmd(id, "say /goldenak")
        }
	case 2: {
            client_cmd(id, "say /goldenm4")
        }
	case 3: {
            client_cmd(id, "say /eth")
        }
	case 4: {
            client_cmd(id, "say /gitar")
        }
        case MENU_EXIT: {
            AnaMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}  

public YardimMenu(id) {
    new menu = menu_create("\r[Biohazard] \yAyar ve Yardim Menusu: ","YardimMenuHandle")
    
    menu_additem(menu , "TS3 Baglan", "1", 0)
    menu_additem(menu , "Adminlik Satisi", "2", 0)
    menu_additem(menu , "Bunny Ayari", "3", 0)
    menu_additem(menu , "Radar Ayari", "4", 0)
    menu_additem(menu , "Gece Gorusu Rengi", "5", 0)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public YardimMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "say /ts3")
        }
        case 1: {
	    fiyatmenu(id);
        }
        case 2: {
	    BunnyMenu(id);
        }
	case 3: {
	    RadarMenu(id);
	}
	case 4: {
	    client_cmd(id, "say /nvg")
	}
        case MENU_EXIT: {
            AnaMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}  

public RadarMenu(id) {
    new menu = menu_create("\r[Biohazard] \yRadar Menusu: ","RadarMenuHandle")
    
    menu_additem(menu , "Radari Goster", "1", 0)
    menu_additem(menu , "Radari Gizle", "2", 0)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public RadarMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "drawradar");RadarMenu(id);
        }
        case 1: {
            client_cmd(id, "hideradar");RadarMenu(id);
        }
        case MENU_EXIT: {
            YardimMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}

public BunnyMenu(id) {
    new menu = menu_create("\r[Biohazard] \yBunny Ayari Menusu: ","BunnyMenuHandle")
    
    menu_additem(menu , "Bunny Ayarini Yap", "1", 0)
    menu_additem(menu , "Ayarlari Normal Yap", "2", 0)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public BunnyMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "gl_fog 0");BunnyMenu(id);
        }
        case 1: {
            client_cmd(id, "gl_fog 1");BunnyMenu(id);
        }
        case MENU_EXIT: {
            YardimMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}  
public LazerMenu(id) {
    new menu = menu_create("\r[Biohazard] \yLazer Bolumu: ","LazerMenuHandle")
    
    menu_additem(menu , "Lazer Kur", "1", 0)
    menu_additem(menu , "Lazeri Geri Al", "2", 0)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public LazerMenuHandle(id, menu, item) {
    switch(item) {
	case 0 :{
	    client_cmd(id, "+setlaser")
	}
	case 1 :{
            client_cmd(id,"+dellaser")
	    set_task(2.1,"lazerbug")
	    return PLUGIN_HANDLED;
	}
        case MENU_EXIT: {
            AnaMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}  

public lazerbug(id) {
   client_cmd(id,"-dellaser")
}

public fiyatmenu(id) {
    new menu = menu_create("\r[Biohazard] \yAdminlik Fiyat Bilgisi: ","FiyatMenuHandle")
    
    menu_additem(menu , "1 Ay Normal Adminlik \r[8TL]", "1", 0)
    menu_additem(menu , "1 AY VIP Adminlik \r[12TL]", "2", 0)
    menu_additem(menu , "3 AY VIP Adminlik \r[25TL]", "3", 0)
    menu_additem(menu , "Sinirsiz VIP Adminlik \r[40TL]", "4", 0)
	
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public FiyatMenuHandle(id, menu, item) {
    switch(item) {
	case 0 :{
	    fiyatmenu(id);
	}
	case 1 :{
	    fiyatmenu(id);
        }
	case 2 :{
	    fiyatmenu(id);
	}
	case 3 :{
	    fiyatmenu(id);
	}
    case MENU_EXIT: {
	    YardimMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
	
public AdMenu(id) {
    new menu = menu_create("\r* [CSAilesi | Bio Admin Menu] *","AdMenuHandle")
    
    menu_additem(menu, "Zombi/Insan Menusu", "1", ADMIN_ALL)
    menu_additem(menu , "Respawn Ac Kapa", "2", ADMIN_ALL)
    menu_additem(menu , "Lazer Ac Kapa", "3", ADMIN_ALL)
    menu_additem(menu , "Bio Ayari Yap", "4", ADMIN_ALL)
    menu_additem(menu , "Super Menu", "5", ADMIN_ALL)
    menu_additem(menu , "Harita Oyla", "6", ADMIN_ALL)
	
    menu_setprop(menu, MPROP_NEXTNAME, "Ileri");  
    menu_setprop(menu, MPROP_BACKNAME, "Geri");
    menu_setprop(menu, MPROP_EXITNAME, "Cikis");
    menu_setprop(menu, MPROP_EXIT, MEXIT_ALL);
    
    menu_display(id,menu)
    return PLUGIN_HANDLED
}
public AdMenuHandle(id, menu, item) {
	switch(item) {
	case 0 :{
	    CreateAdminBioMenu(id);
	}
	case 1 :{
	    ResMenu(id);
	}
	case 2 :{
	    LazerYonetimMenu(id);
    	}
	case 3 :{
	    AyarMenu(id);
	}
	case 4: {
	    client_cmd(id, "amx_supermenu")
	}
	case 5 :{
	    client_cmd(id, "amx_votemapmenu")
	}
}
	menu_destroy(menu)
	return PLUGIN_HANDLED
}
public ResMenu(id) {
    new menu = menu_create("\r[CSAilesi] \yRespawn Acma Kapama Menusu:","ResMenuHandle")
    
    menu_additem(menu, "Respawn Aktif Et", "1", ADMIN_MAP)
    menu_additem(menu, "Respawn Devre Disi Birak", "2", ADMIN_MAP)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public ResMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "amx_cvar bh_respawn 1");ResMenu(id);
        }
        case 1: {
            client_cmd(id, "amx_cvar bh_respawn 0");ResMenu(id);
        }
        case MENU_EXIT: {
            AdMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}  
public AyarMenu(id) {
    new menu = menu_create("\r[CSAilesi] \yBiohazard Ayar Menusu:","AyarMenuHandle")
    
    menu_additem(menu, "Gravity Ayarini Yap", "1", ADMIN_MAP)
    menu_additem(menu, "Bunny Ayarini Yap", "2", ADMIN_MAP)
    menu_additem(menu, "Round Ayarini Yap", "3", ADMIN_MAP)
    menu_additem(menu, "Oyunu Yeniden Baslat", "4", ADMIN_MAP)
    menu_additem(menu, "Top15/Stats Sifirla \r[KURUCU]", "5", ADMIN_RCON)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public AyarMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            GravityMenu(id)	
        }
        case 1: {
            client_cmd(id, "amx_cvar sv_airaccelerate 9999");AyarMenu(id)
		}
        case 2: {
            RoundMenu(id)
        }
	case 3: {
            client_cmd(id, "amx_cvar sv_restart 3");AyarMenu(id)
	}
	case 4: {
            client_cmd(id, "amx_rcon csstats_reset 1");AyarMenu(id);set_dhudmessage(255, 0, 0, -1.0, 0.30, 1, 6.0, 4.2, 1.0, 0.5);show_dhudmessage(id, "CSD/Oynucaz v.b Guard Plugini Yuklu Ise Calismayacaktir ^nAksi Durumda Panelden Plugini Kaldirin")	
		}
        case MENU_EXIT: {
            AdMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
} 
public RoundMenu(id) {
    new menu = menu_create("\r[CSAilesi] \yRound Suresi Ayar Menusu:","RoundMenuHandle")
    
    menu_additem(menu, "Round Suresini 2.6 Yap", "1", ADMIN_MAP)
    menu_additem(menu, "Round Suresini 2.8 Yap", "2", ADMIN_MAP)
    menu_additem(menu, "Round Suresini 3.0 Yap \r[Onerilen]", "3", ADMIN_MAP)
    menu_additem(menu, "Round Suresini 3.2 Yap", "4", ADMIN_MAP)
    menu_additem(menu, "Round Suresini 3.4 Yap", "5", ADMIN_MAP)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public RoundMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "amx_cvar mp_roundtime 2.60");RoundMenu(id)
        }
        case 1: {
            client_cmd(id, "amx_cvar mp_roundtime 2.80");RoundMenu(id)
		}
        case 2: {
            client_cmd(id, "amx_cvar mp_roundtime 3.0");RoundMenu(id)
        }
	case 3: {
            client_cmd(id, "amx_cvar mp_roundtime 3.20");RoundMenu(id)
	}
	case 4: {
            client_cmd(id, "amx_cvar mp_roundtime 3.40");RoundMenu(id)
	}
        case MENU_EXIT: {
            AyarMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}   
public GravityMenu(id) {
    new menu = menu_create("\r[CSAilesi] \yGravity Ayar Menusu:","GravityMenuHandle")
    
    menu_additem(menu, "Yercekimini 800 Yap", "1", ADMIN_MAP)
    menu_additem(menu, "Yercekimini 750 Yap", "2", ADMIN_MAP)
    menu_additem(menu, "Yercekimini 700 Yap", "3", ADMIN_MAP)
    menu_additem(menu, "Yercekimini 650 Yap \r[Onerilen]", "4", ADMIN_MAP)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public GravityMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "amx_cvar sv_gravity 800");GravityMenu(id)	
        }
        case 1: {
            client_cmd(id, "amx_cvar sv_gravity 750");GravityMenu(id)
	}
        case 2: {
            client_cmd(id, "amx_cvar sv_gravity 700");GravityMenu(id)
        }
	case 3: {
            client_cmd(id, "amx_cvar sv_gravity 650");GravityMenu(id)
	}
        case MENU_EXIT: {
            AyarMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}  
public LazerYonetimMenu(id) {
    new menu = menu_create("\r[CSAilesi] \yLazer Acma Kapama Menusu:","LazerYonetimMenuHandle")
    
    menu_additem(menu, "Lazeri Aktif Et", "1", ADMIN_MAP)
    menu_additem(menu, "Lazeri Devre Disi Birak", "2", ADMIN_MAP)
    
    menu_setprop(menu,MPROP_EXITNAME,"Geri")
    menu_display(id,menu)
}
public LazerYonetimMenuHandle(id, menu, item) {
    switch(item) {
        case 0: {
            client_cmd(id, "amx_cvar zp_ltm 1;amx_cvar amx_ltm 1;amx_cvar bio_ltm 1");LazerYonetimMenu(id);
        }
        case 1: {
            client_cmd(id, "amx_cvar zp_ltm 0;amx_cvar amx_ltm 0;amx_cvar bio_ltm 0");LazerYonetimMenu(id);
        }
        case MENU_EXIT: {
            AdMenu(id)
        }
    }
    menu_destroy(menu)
    return PLUGIN_HANDLED
}
  
public ClientCommand_UnStick ( const id )
    {
        new Float:f_MinFrequency = get_pcvar_float ( gp_UnstuckFrequency );
        new Float:f_ElapsedCmdTime = get_gametime () - gf_LastCmdTime[ id ];
        
        if ( f_ElapsedCmdTime < f_MinFrequency ) 
        {
            client_print ( id, print_chat, "[AMXX] You must wait %.1f seconds before trying to free yourself.", f_MinFrequency - f_ElapsedCmdTime );
            return PLUGIN_HANDLED;
        }
        
        gf_LastCmdTime[ id ] = get_gametime ();
    
        new i_Value;
        
        if ( ( i_Value = UTIL_UnstickPlayer ( id, START_DISTANCE, MAX_ATTEMPTS ) ) != 1 )
        {
            switch ( i_Value )
            {
                case 0  : client_print ( id, print_chat, "[AMXX] Couldn't find a free spot to move you too" );
                case -1 : client_print ( id, print_chat, "[AMXX] You cannot free yourself as dead player" );
            }
        }
        
        return PLUGIN_CONTINUE;
    }
    
    
    UTIL_UnstickPlayer ( const id, const i_StartDistance, const i_MaxAttempts )
    {
        // --| Not alive, ignore.
        if ( !is_user_alive ( id ) )  return -1
        
        static Float:vf_OriginalOrigin[ Coord_e ], Float:vf_NewOrigin[ Coord_e ];
        static i_Attempts, i_Distance;
        
        // --| Get the current player's origin.
        pev ( id, pev_origin, vf_OriginalOrigin );
        
        i_Distance = i_StartDistance;
        
        while ( i_Distance < 1000 )
        {
            i_Attempts = i_MaxAttempts;
            
            while ( i_Attempts-- )
            {
                vf_NewOrigin[ x ] = random_float ( vf_OriginalOrigin[ x ] - i_Distance, vf_OriginalOrigin[ x ] + i_Distance );
                vf_NewOrigin[ y ] = random_float ( vf_OriginalOrigin[ y ] - i_Distance, vf_OriginalOrigin[ y ] + i_Distance );
                vf_NewOrigin[ z ] = random_float ( vf_OriginalOrigin[ z ] - i_Distance, vf_OriginalOrigin[ z ] + i_Distance );
            
                engfunc ( EngFunc_TraceHull, vf_NewOrigin, vf_NewOrigin, DONT_IGNORE_MONSTERS, GetPlayerHullSize ( id ), id, 0 );
            
                // --| Free space found.
                if ( get_tr2 ( 0, TR_InOpen ) && !get_tr2 ( 0, TR_AllSolid ) && !get_tr2 ( 0, TR_StartSolid ) )
                {
                    // --| Set the new origin .
                    engfunc ( EngFunc_SetOrigin, id, vf_NewOrigin );
                    return 1;
                }
            }
            
            i_Distance += i_StartDistance;
        }
        
        // --| Could not be found.
        return 0;
    }    