Counter-Strike 1.6
CS1.BG | DUST2 NOSHTA GARMI [RANKED PLAY] #1
45.144.155.113:27015
de_dust2
Играчи: 30/32
de_dust2
Counter-Strike 1.6
Cs-PlovdiV.com - Aim Attack 93.123.16.4:27022 aim_aztec Играчи: 0/16

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Въпроси и проблеми свързани с AMXModX.
Аватар
mharisrazaa
Извън линия
Потребител
Потребител
Мнения: 31
Регистриран на: 15 Дек 2021, 17:15
Местоположение: Pakistan
Се отблагодари: 2 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от mharisrazaa » 25 Дек 2021, 17:37

after updating my server hlds to ReHLDS

i'm getting this error:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache: models/FNJ_EasyBlocks/platform.mdl
how to fix it pleasE?

its work fine in hlds

Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 773
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 158 пъти
Получена благодарност: 48 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от Siska » 25 Дек 2021, 17:48

You have problem with some model i think : models/FNJ_EasyBlocks/platform.mdl
Just see again your models...
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Аватар
mharisrazaa
Извън линия
Потребител
Потребител
Мнения: 31
Регистриран на: 15 Дек 2021, 17:15
Местоположение: Pakistan
Се отблагодари: 2 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от mharisrazaa » 25 Дек 2021, 18:28

no, i again check it in hlds, it works fine in hlds but not in ReHLDS, please someone give me Unprecacher or help me how to do that.

Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 773
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 158 пъти
Получена благодарност: 48 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от Siska » 25 Дек 2021, 19:26

mharisrazaa написа: 25 Дек 2021, 18:28 no, i again check it in hlds, it works fine in hlds but not in ReHLDS, please someone give me Unprecacher or help me how to do that.
https://dev-cs.ru/resources/213/
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1296 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от OciXCrom » 25 Дек 2021, 21:14

The problem has nothing to do with ReHLDS. You have a plugint hat uses the model and doesn't precache it. Upload the plugin's .sma file so we can fix it.

Аватар
Siska
Извън линия
Потребител
Потребител
Мнения: 773
Регистриран на: 03 Дек 2019, 22:29
Местоположение: Bedrock
Се отблагодари: 158 пъти
Получена благодарност: 48 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от Siska » 25 Дек 2021, 23:25

На мен тази грешка ми я изписва , когато пропусна да кача някой модел. В плъгина го има вписан , но на сървъра го няма и плъгина го търси , но не може да го намери , щото не е качен. И тогава ми изписва абсолютно същото съобщение...
Търсих врага и го открих : това съм аз , трябва да се победя...
Изображение
WWW.CSMEGAGAMING.COM Изображение Изображение Skype : Sisi-1_1

Аватар
mharisrazaa
Извън линия
Потребител
Потребител
Мнения: 31
Регистриран на: 15 Дек 2021, 17:15
Местоположение: Pakistan
Се отблагодари: 2 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от mharisrazaa » 25 Дек 2021, 23:48

here you go with the plugin that i use:

Код за потвърждение: Избери целия код

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

#if AMXX_VERSION_NUM < 183
	#include < dhudmessage >
#endif

//native pm_get_maxhealth(id);

stock const NEED_PLAYERS = 3;

new const caseModel[]     =     "models/test/box.mdl";
new blokJump[33], dwajumpy[33], addjb[33];
new feniks[33];
new jaktambmik, trybgiereczki;
new wolebmalb[33];
new gColor[33][3];
new gWidth[33];
new SwiatloMapa;
new CzasTimera[33], ZatrzymanyTimer[33], NagrodaTimer[33];
new line_green, line_yellow, line_red, line_pink, line_orange, line_blue;
new bool: LinkaNaSurf[33];

new bool:g_low_gravity[33];
new bool:g_low_trampoline[33];
new bool:g_low_trampoline_2[33];
new Float:userLatency[33], userLatency2[33];

new sprite_fire

new Float:userAngles[3];


//#define EXTRA_POINTS_BLOCK_VIP 20
//#define EXTRA_POINTS_BLOCK 0

new const Float:SpeedInWater =	64.0;
new const PLUGIN[] ="BlockMaker"
new const VERSION[] = "1.0"
new const AUTHOR[] = "Albertd"
new const szBlockClassName[] = "blockMaker"
new const szTeleClassName[] = "blockTele"
new const szLightClassName[] = "blockLight"
new const szFolderName[] = "BM1"
enum{PLATFORM=0, BHOP, NOSLOWBHOP, DEATH, NOFALL, TRAMPOLINE, SPEEDBOOSTER, DAMAGE, HEALTH, DUCK, BHOPLATENCY, HONEY, BARRIERTT, BARRIERCT, BARRIERVIP, 
GLASS, ICE, GODMODE, INVIS, GUN, GRENADE, BOOTS, CAMOUFLAGE, MUSIC, EXP, WATER, AMMO, POTION, GRAVITY, DODATKOWES, FENIKS, AUTOBH, SURFP, SURFB, SURFS, SURFT, SURFM, SURFO, SURFL, SKRZYNKA, TIMERSTART, TIMERSTOP, NUMBLOCKS}
enum{NORMAL=0, LARGE, SMALL, TINY}
	
	
#define TASK_BHOP 1000
#define TASK_NOSLOW 2000 
#define TASK_ICE 3000
#define TASK_SPRITE 4000
#define TASK_TELEPORT 5100
#define TASK_VISIBLE 6000
#define TASK_CAMOUFLAGE 7000
#define TASK_SKILL_HUD 8000
#define TASK_TRIGGER 9000
#define TASK_AUTOSAVE 10000
#define TASK_FENIKS 11000
#define TASK_SOLIDTRIGGER 12000

new const modelCamouflage[8][]={
	"guerilla",
	"leet", 
	"arctic",
	"terror",	
	"sas",
	"gign",
	"gsg9",
	"urban"
}
new const teleportsSprites[4][2][]={
	{"sprites/blockmaker/teleport_wejscie.spr", "6"},
	{"sprites/blockmaker/teleport_wyjscie.spr", "4"},
	{"sprites/blockmaker/getbonus.spr", "0"},
	{"sprites/blockmaker/bhopKor.spr", "0"}
}
new const soundsNames[15][]={
	"blockmaker/teleport.wav",			//0
	"blockmaker/niesmiertelnosc.wav",	//1
	"blockmaker/niewidzialnosc.wav",	//2
	"blockmaker/kamuflaz.wav",			//3
	"blockmaker/exp.wav",				//4
	"blockmaker/bron.wav",				//5
	"blockmaker/buty_szybkosci.wav",	//6
	"blockmaker/kamuflaz.wav",			//7
	"blockmaker/trampoline1.wav",		//8
	"blockmaker/trampoline2.wav",		//9
	"blockmaker/trampoline3.wav",		//10
	"blockmaker/trampoline4.wav",		//11
	"blockmaker/heal.wav",				//12
	"blockmaker/heart.wav",				//13
	"blockmaker/Phoenix.wav"			//14
}
new const blocksSize[4][3][] = {
	{"", "Normal", "1.0"},
	{"_large", "Large", "2.0"},
	{"_small", "Small", "0.25"}, 
	{"_pole", "Pole", "1.0"}
}

new const blockMusic[10][2][]={	
	{"blockmaker/muzyka/ms1.wav","Carta & Robert Falcon - Love Shouldn't Be So Hard"},
	{"blockmaker/muzyka/ms2.wav","Crazy Loop - Crazy Loop (Black Due Bootleg)"},
	{"blockmaker/muzyka/ms3.wav","Crazy Loop - Crazy Loop (Black Due Bootleg)"},
	{"blockmaker/muzyka/ms4.wav","Dr. Alban - It's My Life"},
	{"blockmaker/muzyka/ms5.wav","Gigi D'Agostino - L'Amour Toujours"},
	{"blockmaker/muzyka/ms6.wav","Martin Garrix & Dua Lipa - Scared To Be Lonely"},
	{"blockmaker/muzyka/ms7.wav","Klaas - Our Own Way 2017 (Danny Rush Bootleg)"},
	{"blockmaker/muzyka/ms8.wav","Opus - Live Is Life (Remix 2016)"},
	{"blockmaker/muzyka/ms9.wav","Savage - Only You (YASTREB Radio Edit)"},
	{"blockmaker/muzyka/ms10.wav","Mariah Cary - All I Want For Christmas"}
}
new const blocksProperties[NUMBLOCKS][7][]={
	{"Platfrom", 			"platform", "1", 	"8", 	"-1", 	"0", 	"-1"},	//0
	{"Bhop", 				"platform",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//1
	{"Noslow Bhop",			"platform",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//2
	{"Death",				"platform",	"1", 	"14", 	"18", 	"-1", 	"-1"},	//3
	{"NoFallDamage",		"platform",	"1",	"-1", 	"-1", 	"0", 	"-1"},	//4
	{"Trampoline",			"platform",	"1",	"2", 	"14",	"-1", 	"-1"},	//5
	{"Speedboost",				"platform",	"1", 	"8", 	"2", 	"3", 	"-1"},	//6
	{"Damage",				"platform",	"1", 	"4",	"6", 	"14", 	"-1"},	//7
	{"Health",				"platform",	"1", 	"5",	"6", 	"-1", 	"-1"},	//8
	{"Duck",				"platform",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//9
	{"Bhop Delayed",		"platform",	"1", 	"8", 	"0", 	"-1", 	"-1"},	//10
	{"Honey",				"platform",	"1", 	"7",	"14", 	"-1", 	"-1"},	//11
	{"Barrier TT",			"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//12
	{"Barrier CT",			"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//13
	{"Barrier VIP",			"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//14
	{"Glass",				"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//15
	{"Ice",					"platform",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//16
	{"Immortality",			"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//17
	{"Stealth",		"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//18
	{"Weapon",				"platform",	"1",	"11", 	"13", 	"14", 	"-1"},	//19
	{"Grenade",				"platform",	"1",	"17", 	"13", 	"14", 	"-1"},	//20
	{"Boots Of Speed",		"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//21
	{"Camouflage",			"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//22
	{"Music",				"platform",	"1",	"14", 	"-1",	"-1", 	"-1"},	//23
	{"XP",				"platform",	"1",	"12", 	"20", 	"14", 	"25"},	//24
	{"Water",				"platform",	"1", 	"16", 	"-1", 	"-1", 	"-1"},	//25
	{"Bullets",				"platform",	"1", 	"11", 	"13", 	"-1", 	"-1"},	//26
	{"Potion (Not Work)",		"platform",	"1", 	"5", 	"14", 	"-1", 	"-1"},	//27
	{"Gravity", 			"platform", "1", 	"8", 	"21", 	"-1", 	"-1"},	//28
	{"Double Jump", 		"platform", "1", 	"8", 	"22", 	"24", 	"-1"},	//29
	{"Phoenix",				"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//30
	{"SpamBH",				"platform",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//31
	{"Surf: Platfrom", 		"Surfik",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//32
	{"Surf: Bhop", 			"Surfik",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//33
	{"Surf: Death",			"Surfik",	"1", 	"14", 	"18", 	"-1", 	"-1"},	//34
	{"Surf: Trampoline",	"Surfik",	"1",	"2", 	"14",	"-1", 	"-1"},	//35
	{"Surf: SpeedBoost",			"Surfik",	"1", 	"8", 	"2", 	"3", 	"-1"},	//36
	{"Surf: Bhop Delayed",	"Surfik",	"1", 	"8", 	"0", 	"-1", 	"-1"},	//37
	{"Surf: Ice",			"Surfik",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//38
	{"Chest (Not Work)",				"platform",	"1",	"10", 	"14", 	"-1", 	"-1"},  //39
	{"Timer:Start",			"platform",	"1",	"-1", 	"-1", 	"-1", 	"-1"},  //40
	{"Timer:Stop",			"platform",	"1",	"26", 	"27", 	"-1", 	"-1"}   //41
};
new const defaultParamBlocks[NUMBLOCKS][5][]={
	{"1.0", 	"1.0", 		"", 		"", 		""},	//0
	{"0.0", 	"1.0", 		"", 		"", 		""},	//1
	{"0.0", 	"1.0", 		"", 		"", 		""},	//2
	{"1.0", 	"0.0", 		"1.0", 		"0", 		""},	//3
	{"0.0",		"20.0", 	"", 		"", 		""},	//4
	{"1.0",		"350.0", 	"0.0",		"0", 		""},	//5
	{"1.0", 	"0.0", 		"200.0",	"700.0",	"0"},	//6
	{"1.0", 	"2.0",		"0.5", 		"0.0", 		"0"},	//7
	{"1.0", 	"1.0",		"0.5", 		"0", 		""},	//8
	{"1.0", 	"1.0", 		"0", 		"", 		""},	//9
	{"1.0", 	"1.0", 		"1.0", 		"", 		""},	//10
	{"1.0", 	"70.0",		"0.0", 		"0", 		""},	//11
	{"0.0", 	"0.0", 		"", 		"", 		""},	//12
	{"0.0", 	"0.0", 		"", 		"", 		""},	//13
	{"0.0", 	"0.0", 		"", 		"", 		""},	//14
	{"1.0", 	"", 		"", 		"", 		""},	//15
	{"0.0", 	"1.0", 		"0", 		"", 		""},	//16				
	{"1.0",		"10.0", 	"60.0", 	"0.0", 		"0"},	//17
	{"1.0",		"15.0", 	"60.0", 	"0.0", 		"0"},	//18
	{"1.0",		"-1.0", 	"1.0", 		"0.0", 		"0"},	//19 hz, weapon, bullets,avaible for,hz
	{"1.0",		"0.0", 		"1.0", 		"1.0", 		"0"},	//20
	{"1.0",		"15.0", 	"60.0", 	"0.0", 		"0"},	//21
	{"1.0",		"10.0", 	"60.0", 	"0.0", 		"0"},	//22
	{"1.0",		"0.0", 		"0",		"", 		""},	//23
	{"1.0",		"10.0", 	"5.0", 	"1.0", 		"0"},	//24
	{"0.0",		"250", 		"", 		"", 		""},	//25
	{"1.0", 	"-1", 		"1", 		"0", 		""},	//26
	{"1.0", 	"0.0", 		"1.0", 		"", 		""},	//27
	{"1.0", 	"1.0", 		"0.5", 		"0", 		""},	//28
	{"1.0", 	"1.0", 		"1.0", 		"250", 		"0"},	//29
	{"1.0", 	"10.0", 	"60.0", 	"0.0", 		"0"},	//30
	{"1.0", 	"1.0", 		"0.0",		"", 		""},	//31
	{"1.0", 	"1.0", 		"", 		"", 		""},	//32
	{"1.0", 	"1.0", 		"", 		"", 		""},	//33
	{"1.0", 	"0.0", 		"1.0", 		"0", 		""},	//34
	{"1.0",		"350.0", 	"0.0",		"0", 		""},	//35
	{"1.0", 	"1.0", 		"200.0",	"700.0", 	"0"},	//36
	{"1.0", 	"1.0", 		"1.0", 		"", 		""},	//37
	{"0.0", 	"1.0", 		"0", 		"", 		""},	//38
	{"1.0", 	"", 		"1.0", 		"", 		"0"},   //39
	{"0.0", 	"1.0", 		"0", 		"", 		""},	//40
	{"0.0", 	"10", 		"10", 		"", 		""}		//41
};
#define PROPERTIES 28

new Float:properties[1024][PROPERTIES]
new const propertiesName[PROPERTIES][3][]={
	{"Delay",								"float",	"1"},	//0
	{"Only from the top",					"bool",		"1"},	//1
	{"Breakout",							"int",		"1"},	//2
	{"Speed",								"int",		"1"},	//3	
	{"Damage", 								"float",	"1"},	//4	
	{"Health",								"float",	"1"},	//5
	{"What how many", 						"float",	"1"},	//6
	{"Slowing down",						"float",	"1"},	//7
	{"Deals damage",						"bool",		"1"},	//8	
	{"Duration",							"float",	"1"},	//9
	{"Cooldown",							"float",	"1"},	//10
	{"Weapon",								"weapon",	"1"},	//11
	{"Coins",								"int",		"1"},	//12
	{"Bullets",								"int",		"1"},	//13
	{"Available for",						"team",		"1"},	//14
	{"Speed",								"int",		"1"},	//15
	{"Wave height",							"float",	"1"},	//16
	{"Grenade",								"grenade",	"1"},	//17
	{"He kills with god",					"bool",		"1"},	//18
	{"Acceleration",						"int",		"1"},	//19
	{"Bonus VIP",							"int",		"1"},	//20
	{"Gravity",								"float",	"1"},	//21
	{"Quantity jumps",						"int",		"1"},	//22
	{"Type (BHOPEFFECT)",					"bool",		"1"},	//23
	{"Breakout Power",						"int",		"1"},	//24
	{"Which coins",							"Coiny",	"1"},	//25
	{"Time to get your prize",				"int",		"1"},	//26
	{"Time for the displayed nickname",		"int",		"1"}	//27
}	
#define PROPERTIESTELE 7
new const propertiesTele[PROPERTIESTELE][3][0]={
	{"Range",			"float", 	"64.0"},
	{"Breakout",		"float", 	"0.0"},
	{"Speed",			"float", 	"0.0"},
	{"Rotation",		"float", 	"0.0"},
	{"Red",				"int",		"0"},
	{"Green",			"int",		"0"},
	{"Blue",			"int",		"0"}
}
new const propertiesRendering[5][]={	
	"Normal",
	"GlowShell | Normal",
	"GlowShell | TransColor",
	"TransColor",
	"TransAdd"
}
new const IntelligentRotating[4][]={
	"Off",
	"All of them",
	"One size",
	"One kind"
}
new const forWho[4][]={	
	"All",
	"Terrorist",
	"Anti-Terrorists",
	"Vip"
}
new const forCoi[3][]={	
	"Bronze",
	"Silver",
	"Gold"
}
enum ( <<= 1 )
{
	B1 = 1,
	B2,
	B3,
	B4,
	B5,
	B6,
	B7,
	B8,
	B9,
	B0
};
//"weapon_hegrenade", "weapon_flashbang", "weapon_smoke",
//"Hegrenade", "Flashbang", "Smoke",
new weaponsName[24][] = {
	"Deagle", 	"Glock",	"Usp",		"Fiveseven",	"P228",	"Elite",
	"M4A1",		"AK47",		"Awp",		"Scout",	"Krowa",	"Aug",		"SG552",	"MP5",		"Famas",	
	"Ump45",	"Galil",	"M3",		"XM1014",	"MAC10",	"TMP",		"P90",		"Auto CT",	"Auto TT"
	
}
new weaponsGive[24][] = {	
	
	"weapon_deagle", "weapon_glock18", "weapon_usp", "weapon_fiveseven", "weapon_p228", "weapon_elite",
	"weapon_m4a1", "weapon_ak47", "weapon_awp", "weapon_scout", "weapon_m249", "weapon_aug", "weapon_sg552", "weapon_mp5navy", "weapon_famas", 
	"weapon_ump45", "weapon_galil", "weapon_m3", "weapon_xm1014", "weapon_mac10", "weapon_tmp", "weapon_p90", "weapon_g3sg1", "weapon_sg550"
	
}
new grenadesName[3][]={	
	"Hegrenade", "Smoke", "Flash"
}
new grenadesGive[3][]={	
	"weapon_hegrenade", "weapon_smokegrenade","weapon_flashbang"
}
new cswGrenade[]={
	CSW_HEGRENADE,
	CSW_SMOKEGRENADE,
	CSW_FLASHBANG
}
//USER
	//BM
		new bool:layoutStyle
		new bool:blockMakerAcces
		new pathFolder[82]
		new pathFileBlocks[82]
		new pathFileTele[82]
		new pathFileBlocksBackUp[122]
		new pathFileTeleBackUp[122]
		new userSelectedBlock[33]
		new userSelectedSize[33]
		new userBlockProperties[33]
		new userBlockColorChange[33]
		new userBlockParamChange[33]
		new bool:userBmShorCut[33]
		new userEntGrab[33]
		new Float:userEntOffset[33][3]
		new Float:userLength[33]
		new Float:userSnapDist[33]
		new bool:userSnap[33]
		new bool:userGodMode[33]
		new bool:userNoClip[33]
		new bool:userRespawn[33]
		new userInteligent[33]
		new Float:userMoveDist[33];
		new Float:userKrecDist[33];
		new userLastMoved[33]
		new Float:userChangeTime[33]
		new userLastTpCreated[33]
		new userAdminBlockTest[33]
		new bool:autoSave
	//USER
		new bool:userNoSlow[33]
		new bool:userNoFall[33]		
		new Float:userAddVelocity[33][3]		
		new Float:userLastTouchBlock[33]
		new bool:userDuck[33]
		new bool:userJump[33]
		new Float:userSpeedReduction[33]
		new bool:userRefreshSpeed[33]
		new bool:userOnIce[33]
		
		new Float:userSkills[33][6][2]
		new bool:userSkillsRenew[33][6]
		
		new userBlockUsed[33][30]
		new userCampAchived[33][20]
		
		new bool:userHud[33]
		new Float:userHudShow[33]
		new userCampSave[33][3]
		new Float:userSound[33]
		new Float:userSlow[33][2]
		
		new userSlowed[33]
		new Float:userSlowedTime[33]
		
		new bonusCampNum
		new bonusCampId[33]
		new bonusCampRound
		new entBonus
		new entbhopspr
		new lastTouched[33]
		
		new userBM[33]
		new userPlayersMenu[33]
		new bool:GodAll
		new Float:deathTouched[33]
		new userLetBlock[33]
		new Float:userLastOrigin[33][3]
		new Float:userMagicSpeed[33]
		new bool:userMagic[33]
		
		new Float:userSaveLocation[33][3]
		new Float:userSaveAngles[33][3]
		new bool:userCheckPoint[33]
		new Float:changeRightBlock[33]
		new Float:changeLeftBlock[33]
		new Float:tpVelocity[33][3]
		new sprite_heal;
		
		new Float:userAimingInfo[33]
		
		
		
new const skillsName[5][]={
	"Immortality",
	"Invisibility",
	"Speed",
	"Camouflage",
	"Phoenix"
	//"Czas odnowienia"
}

new typesCampBlock[4][]={
	"Default",
	"Transition block",
	"End block",
	"Start block"
}
new beam_spr;
new forwardCampEnd

new typeMap
new actualStyle[33]
new stylesMenu[8][33]
new bool:wrong
public plugin_init() {
	//wrong=false
	//get_user_ip(0, szIp, sizeof(szIp), 0)
	//if( equal(szIp, "192.168.1.242:27016") )
	wrong=true
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_clcmd("say", "cmdSay")
	register_clcmd("say_team", "cmdSay")
	
	register_forward(FM_PlayerPreThink, "fwd_prethink");	
	register_touch(szBlockClassName, "player", "touchBlock")
	register_event("DeathMsg", "DeathMsg", "ade");		
	
	register_logevent("round_start", 2, "1=Round_Start");
	register_logevent("round_end", 2, "1=Round_End")  
	
	RegisterHam(Ham_Spawn, "player", "ham_Spawn", 1);
	RegisterHam(Ham_TraceAttack, "player", "ham_traceAttack") 
	register_forward(FM_CmdStart, "cmd_start");
	RegisterHam(Ham_TakeDamage,  "player", "ham_TakeDamage")
	register_impulse(100, "FunkcjaLatarki")
	
	register_menu("makerMain",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B0,			"makerMain_2");
	register_menu("blockMaker",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"blockMaker_2");
	register_menu("GrzyboMenu",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"GrzyboMenu_2");
	register_menu("blockObkrec",	B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"blockObkrec_2");
	register_menu("menuMoveBlockGrzyb",	B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"menuMoveBlock_2");
	register_menu("teleMenu",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"teleMenu_2");
	register_menucmd(register_menuid("NagrodaMenu"), 1023, "HandleNagrodaMenu");
	

	register_clcmd("+bmgrab", "cmdHookGrab")
	register_clcmd("-bmgrab", "cmdReleaseGrab")
	register_clcmd("value", "getTextValue" )
	register_clcmd("WartoscObkrecania", "ZmienWartoscObkrecania");
	register_clcmd("WartoscPosuwania", "ZmienWartoscPosuwania");
	register_clcmd("layout", "getNewLayout" )
	
	register_think(szTeleClassName, "teleportThink");
	register_think("bhopsprblock", "ThinkSpritesBlock");
	register_think(szBlockClassName, "thinkWater");
	//register_think(szLightClassName, "lightThink")
	
	new fulldir[126]
	new dir[62]
	get_configsdir(dir,61);
	format(fulldir,127,"%s/campoLevel.ini",dir);
	if(!file_exists(fulldir))	{
		write_file(fulldir,"");
		typeMap=0
	}else{	
		new iLen
		new temp[33]
		read_file(fulldir, 0, temp, sizeof(temp), iLen)		
		copy(actualStyle, sizeof(actualStyle), temp)
		if( !layoutExist() ){
			if( !randomStyle() )
				copy(actualStyle, sizeof(actualStyle), "Default")
		}
	}
	
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));	
	formatex(folderDir, charsmax(folderDir), "/%s/%s/", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	if( !dir_exists(dataDir) ) mkdir(dataDir)
	
	setLevel()
	
	//set_task(1.0, "LoadBlocks")
	LoadBlocks(0)
	forwardCampEnd=CreateMultiForward("ForwardCampEnd", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL);
	blockMakerAcces=true
	
	SwiatloMapa=4;
}
public cmdSay(id){
	new szMessage[32];
	read_args(szMessage, charsmax(szMessage));
	remove_quotes(szMessage);
	if( szMessage[0] == '/'){
		if( equali(szMessage, "/bm") == 1 ){

			if(jaktambmik){			
				makerMain(id)
				return PLUGIN_HANDLED;
			}
			ColorChat(id, TEAM_COLOR, "[FNJ-Gaming]^x01 has been disabled by the ^x04Server Supporter")
			return PLUGIN_HANDLED;
		}
		if( equali (szMessage, "/admin")){
			makerAdmin(id)
			return PLUGIN_HANDLED;
		}
		if( equali (szMessage, "/a")){
			makerAdmin(id)
			return PLUGIN_HANDLED;
		}
		if( equali (szMessage, "/switch")){
			if(wolebmalb[id])
			{
				wolebmalb[id] = false;
			}
			else
			{
				wolebmalb[id] = true;
			}
			return PLUGIN_HANDLED
		}
		if( equali (szMessage, "/byty")){
			ColorChat(id, TEAM_COLOR, "[FNJ-Gaming]^x01 Bytow on the map^x04 %d", entity_count());
			return PLUGIN_HANDLED
		}
	}
	return PLUGIN_CONTINUE;
}

public makerAdmin(id) {
	if (get_user_flags(id) & ADMIN_RCON) MmakerAdmin(id);
	else ColorChat(id, TEAM_COLOR, "[FNJ-Gaming]^x01 You do not have access to BM Admin Panel");
	return PLUGIN_HANDLED;
}

public MmakerAdmin(id)
{
	new gText[128];
	new menu, oswietlenie[20], formats[64];
	if(SwiatloMapa == 1)	oswietlenie = "\y|||||||";
	if(SwiatloMapa == 2)	oswietlenie = "\y|\r||||||";
	if(SwiatloMapa == 3)	oswietlenie = "\y||\r|||||";
	if(SwiatloMapa == 4)	oswietlenie = "\y|||\r||||";
	if(SwiatloMapa == 5)	oswietlenie = "\y||||\r|||";
	if(SwiatloMapa == 6)	oswietlenie = "\y|||||\r||";
	if(SwiatloMapa == 7)	oswietlenie = "\y||||||\r|";
	formatex(formats,charsmax(formats),"\wAdmin Panel")
	menu = menu_create(formats,"handle_makerAdmin");
	{
		format(gText,sizeof(gText), "\wBlockMaker \r%s", jaktambmik?"\yON":"\dOFF")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\wDesign BM Menu: \r%s", wolebmalb[id]?"\yAlbertd":"\yGrzyboo")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\wMode: \r%s", trybgiereczki?"\yBuild":"\dGame")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\wMap lighting: %s", oswietlenie)
		menu_additem(menu, gText);
	}
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_setprop(menu,MPROP_NEXTNAME,"Next")
	menu_setprop(menu,MPROP_BACKNAME,"Back")
	menu_display(id,menu,0)
	return PLUGIN_HANDLED
}
public handle_makerAdmin(id, menu, item)
{
	switch(item)
	{
		case 0:
		{
			if(jaktambmik){
				jaktambmik = false;
				makerAdmin(id)
			}
			else{
				jaktambmik = true;
				makerAdmin(id)
			}
		}
		case 1:
		{
			if(wolebmalb[id])
			{
				wolebmalb[id] = false;
				ColorChat(id, TEAM_COLOR, "[BM]^x01 Design BM Menu by Grzyboo")
				makerAdmin(id)
			}
			else
			{
				wolebmalb[id] = true;
				ColorChat(id, TEAM_COLOR, "[BM]^x01 Design BM Menu by Albertd")
				makerAdmin(id)
			}
		}
		case 2:
		{
			SprawdzCzyNapewno(id);
		}
		case 3:
		{
			if(SwiatloMapa == 1){
				SwiatloMapa = 2;
				set_lights("a")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 2){
				SwiatloMapa = 3
				set_lights("b")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 3){	
				SwiatloMapa = 4
				set_lights("c")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 4){	
				SwiatloMapa = 5
				set_lights("#OFF")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 5){	
				SwiatloMapa = 6
				set_lights("x")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 6){	
				SwiatloMapa = 7
				set_lights("y")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 7){	
				SwiatloMapa = 1
				set_lights("z")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
		}
	}	
	return PLUGIN_HANDLED;
}
public SprawdzCzyNapewno(id){
	new gText[128];
	new menu, Sieema[20], Sieema2[20], formats[64];
	if(trybgiereczki == 1){
		Sieema = "GAME";
		Sieema2 = "BUILD";
	}
	if(trybgiereczki == 0){
		Sieema = "BUILD";
		Sieema2 = "GAME";
	}
	formatex(formats,charsmax(formats),"\wAre you sure to change the MODE?^n\r %s\w -->\y %s", Sieema2, Sieema)
	menu = menu_create(formats,"handle_SprawdzCzyNapewno");
	{
		format(gText,sizeof(gText), "\yYes")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\rNo")
		menu_additem(menu, gText);
	}
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_setprop(menu,MPROP_NEXTNAME,"Next")
	menu_setprop(menu,MPROP_BACKNAME,"Back")
	menu_display(id,menu,0)
	return PLUGIN_HANDLED
}

public handle_SprawdzCzyNapewno(id, menu, item)
{
	switch(item)
	{
		case 0:
		{
			if(trybgiereczki)
			{
				set_cvar_num("mp_roundtime", 3);
				set_cvar_num("mp_autoteambalance", 1);
				set_cvar_num("mp_limitteams", 1);
				set_cvar_num("sv_alltalk", 1);
				set_cvar_num("mp_timelimit", 25);
				trybgiereczki=false;
				ColorChat(id, TEAM_COLOR,"[BM]^x01 you set the round time to^x04 GAME")
			}
			else
			{
				set_cvar_num("mp_roundtime", 99);
				set_cvar_num("mp_autoteambalance", 0);
				set_cvar_num("mp_limitteams", 0);
				set_cvar_num("sv_alltalk", 1);
				set_cvar_num("mp_timelimit", 999);
				trybgiereczki=true;
				ColorChat(id, TEAM_COLOR,"[BM]^x01 you set the round time to^x04 BUILD")
			}
			makerAdmin(id);
		}
		case 1:
		{
			makerAdmin(id);
		}
	}	
	return PLUGIN_HANDLED;
}
public bool:randomStyle(){
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	if ( !dir_exists(dataDir) )
		return false
	
	new szFile[32];
	new x=0;
	new folderHandle = open_dir(dataDir, szFile, charsmax(szFile));
	if(!folderHandle) 
		return false;
	while(next_file(folderHandle, szFile, charsmax(szFile))){				
		if(!equal(szFile, "..") && !equal(szFile, ".") && !equal(szFile, "BackUp")) {
			copy(stylesMenu[x++], sizeof(stylesMenu[]), szFile)
		}
	}
	close_dir(folderHandle)
	if( x == 0 )
		return false
	copy(actualStyle, sizeof(actualStyle), stylesMenu[random(x)])
	return true;
}
public layoutExist(){
	
	new folderDir[64]
	new dataDir[64]	
	new szMap[33]
	get_mapname(szMap, sizeof(szMap) )
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s", szFolderName, szMap, actualStyle);
	
	add(dataDir, charsmax(dataDir), folderDir);
	if ( !dir_exists(dataDir) ) return false
	return true;
}
public futureLayout(){
	new fulldir[126]
	new dir[62]
	new name[33]	
	get_string(1, name, 32)
	get_configsdir(dir,61);
	format(fulldir,127,"%s/campoLevel.ini",dir);	
	new file = fopen(fulldir, "wt")	
	fputs(file, name);
	fclose(file)
}
public setLevel(){

	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(pathFolder, charsmax(pathFolder));	
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s/BackUp", szFolderName, szMap, actualStyle);
	
	add(pathFolder, charsmax(pathFolder), folderDir);
	if ( !dir_exists(pathFolder) ) mkdir(pathFolder);
	
	get_datadir(pathFolder, charsmax(pathFolder));
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s", szFolderName, szMap, actualStyle);
	
	add(pathFolder, charsmax(pathFolder), folderDir);
	if ( !dir_exists(pathFolder) ) mkdir(pathFolder);	
	
	
	formatex(pathFileBlocks, charsmax(pathFileBlocks), "%s/%s.%s", pathFolder, szMap, szFolderName);
	formatex(pathFileTele, charsmax(pathFileTele), "%s/%sTele.%s", pathFolder, szMap, szFolderName);
	formatex(pathFileBlocksBackUp, charsmax(pathFileBlocksBackUp), "%s/BackUp/%s", pathFolder, szMap);
	formatex(pathFileTeleBackUp, charsmax(pathFileTeleBackUp), "%s/BackUp/%sTele", pathFolder, szMap);	
	
	
	get_datadir(pathFolder, charsmax(pathFolder));	
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s/slow.%s", szFolderName, szMap, actualStyle, szFolderName);	
	add(pathFolder, charsmax(pathFolder), folderDir);
	if(!file_exists(pathFolder)){
		write_file(pathFolder,"noslow");
	}else{
		new iLen
		new temp[33]
		read_file(pathFolder, 0, temp, sizeof(temp), iLen)	
		if(equali(temp, "slow"))
			layoutStyle=true;
		else layoutStyle=false; 
	}
}
public plugin_natives(){
	register_native("bm_build", "isCreative", 1 ) 
	register_native("bm_is_immortal", "isImmortal", 1 ) 
	register_native("bm_is_invisible", "isInvisible", 1 ) 
	register_native("bm_get_skill", "returnSkillTime", 1 ) 
	register_native("bm_set_skill", "setSkillTime", 1 ) 
	register_native("bm_set_speed", "setUserSlow", 1 ) 
	register_native("bm_set_future_layout", "futureLayout" ) 
	register_native("get_serv_bm","return_serv_bm", 1)
}
public return_serv_bm()
{
	return jaktambmik;
}
public bool:isCreative(id)
	return userBmShorCut[id]
public Float:returnSkillTime(id, skill){
	return userSkills[id][skill][0]
}
public Float:setUserSlow(id, Float:stopTime, Float:slow){
	userSlow[id][0]=stopTime
	userSlow[id][1]=slow	
}
public setSkillTime(id, skill, Float:timeNew){
	if( skill == 1){
		if( isInvisible(id) ){
			change_task(id+TASK_VISIBLE, userSkills[id][skill][0] - get_gametime()+timeNew-get_gametime())
			
		}
		else {				
			emit_sound(id, CHAN_WEAPON, soundsNames[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setRendering(0, id, 255,255,255,0)			
			set_task(timeNew-get_gametime(), "userVisible", id+TASK_VISIBLE)
			
		}
	}else if( skill==0 ){	
		if( isImmortal(id) ){
			change_task(id+TASK_VISIBLE, userSkills[id][skill][0] - get_gametime()+timeNew-get_gametime())			
		}else{
			if( !isInvisible(id) )
				setRendering(1, id, 255,255,255,2)
			set_task(timeNew-get_gametime(), "userVisible", id+TASK_VISIBLE)			
			emit_sound(id, CHAN_WEAPON, soundsNames[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
		}
		
		
	}
	if( task_exists(id+TASK_SKILL_HUD ) )
		remove_task(id+TASK_SKILL_HUD)
		
	set_task(0.1, "showHud", id+TASK_SKILL_HUD)
	userSkills[id][skill][0]=timeNew
	
	
}
public client_connect(id){
	userMoveDist[id] = 1.0;
	//new flags = read_flags("bcdefghijklmnopqrstu")
	//set_user_flags(id, flags)
	userResetVarsRound(id)
	
	userEntGrab[id]=-1;
	userSnap[id]=true;
	userHud[id]=false
	userNoClip[id]=false
	userGodMode[id]=false
	userRespawn[id]=false;
	userBmShorCut[id]=false;
	ZatrzymanyTimer[id]=true;
	NagrodaTimer[id]=false;
}
public client_authorized(id){	
	if(has_flag(id,"s"))
		userBM[id]=3
	else if(has_flag(id,"s") )
		userBM[id]=2
	else userBM[id]=0;
	
	new ip[20], name[33]
	get_user_ip(id, ip, sizeof(ip))
	get_user_name(id, name, sizeof(name))
	log_amx("Player: %s IP: %s", name, ip);
}
public client_disconnected(id){
}	
public cmd_start(id, uc_handle){
	if( dwajumpy[id]){
		new flags = pev(id, pev_flags);
		
		if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && blokJump[id]>0)
		{
			--blokJump[id];
			new Float:velocity[3];
			pev(id, pev_velocity,velocity);
			velocity[2] = random_float(265.0,285.0);
			set_pev(id,pev_velocity,velocity);
		}
		else if(flags & FL_ONGROUND && blokJump[id]!=-1)
		{
		blokJump[id] = addjb[id];
		}
	}
}

public fwd_prethink(id){
	if (!is_user_connected(id) || !is_user_alive(id))
		return FMRES_IGNORED
	if( userNoSlow[id] || layoutStyle == false || userOnIce[id] )
		entity_set_float(id, EV_FL_fuser2, 0.0)
		//entity_set_float(id, EV_FL_maxspeed, 400.0);
	if (is_user_alive(id) && pev(id, pev_movetype) == MOVETYPE_FLY)
	{
		if(dwajumpy[id])
		{
			dwajumpy[id] = false;
		}
		if(g_low_gravity[id] && g_low_trampoline[id])
		{
			set_user_gravity(id);
			g_low_gravity[id] = false;
			g_low_trampoline[id] = false 
			g_low_trampoline_2[id] = false
			return PLUGIN_CONTINUE;
		}
	}
	if (dwajumpy[id])
	{
		if ( (pev(id, pev_flags ) & FL_ONGROUND )  )
		{
			dwajumpy[id] = false;
		}
	}
	if (g_low_gravity[id])
	{
		if ( (pev(id, pev_flags ) & FL_ONGROUND )  )
		{
			if(g_low_trampoline_2[id] && g_low_trampoline[id]){
				g_low_trampoline_2[id] = false;
				#if defined POWTORZ_DRUGI_SKOK
					g_low_trampoline[id] = false;
				#endif
				return PLUGIN_CONTINUE;
			}

			set_user_gravity(id);
			g_low_gravity[id] = false;
			g_low_trampoline[id] = false 
			g_low_trampoline_2[id] = false
		}
	}
	static buttons, oldButtons;
	buttons =	get_user_button(id);
	oldButtons =	entity_get_int(id, EV_INT_oldbuttons);
	new target, bodytarget
	get_user_aiming(id, target, bodytarget)
	if(target >= 1 && target<33 ){
		if( is_user_connected(target) && is_user_alive(target) && !isInvisible(target) ){
			if( get_gametime() - userAimingInfo[id] > 0.1 ){
				new name[33]
				get_user_name(target, name, sizeof(name) )
				//set_dhudmessage(25, 125, 255, -1.0, 0.81, 0, 0.0, 0.1, 0.0, 0.0)	
				//show_dhudmessage(id, "%s", name)
				userAimingInfo[id]=get_gametime()
			}
		}
	}	
	if ( ( buttons & IN_USE ) && !( oldButtons & IN_USE ) ){
			
		new ent,body 
		get_user_aiming(id, ent, body)
		if( IsBlock(ent) ){
			if( get_gametime()-userHudShow[id] > 2.0){
				showInfoBlock(id,ent)				
				userHudShow[id]=get_gametime();
			}
		}
	}
	if( userBmShorCut[id] ){
		if( userBM[id]>0){
			if( userEntGrab[id] != -1 ){		
				if ( ( buttons & IN_ATTACK ) && !( oldButtons & IN_ATTACK ) ){
					
					new Float:fOrigin[3]
					entity_get_vector(id, EV_VEC_origin, fOrigin)
					new ent = createBlock(entity_get_int(userEntGrab[id], EV_INT_body),fOrigin,entity_get_int(userEntGrab[id], EV_INT_skin), entity_get_int(userEntGrab[id], EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })		
					
					copyDataBlock(userEntGrab[id], ent)
					cmdReleaseGrab(id)
					entity_set_int(ent, EV_INT_iuser1, id)
					
					userEntGrab[id]=ent	
				}
				if ( ( buttons & IN_JUMP ) && !( oldButtons & IN_JUMP ) ){
					userLength[id]+=16.0
						
					set_pev(id, pev_button, pev(id,pev_button) & ~IN_JUMP)
				}
				if ( ( buttons & IN_DUCK ) && !( oldButtons & IN_DUCK ) ){
					if( userLength[id] > 0 )
						userLength[id]-=16.0
					
					set_pev(id, pev_button, pev(id,pev_button) & ~IN_DUCK) 
				}
				if ( ( buttons & IN_ATTACK2 ) && !( oldButtons & IN_ATTACK2 ) ){
					
					new size, rotation;
					rotation = (entity_get_int(userEntGrab[id], EV_INT_iuser3)+1) % 3	
					size = entity_get_int(userEntGrab[id], EV_INT_skin)
					setSizeAngles(userEntGrab[id], size, rotation, Float:{-1.0, -1.0, -1.0})
				}
				moveGrabbedEnt(id)
				
			}else{		
			
				if( userBM[id]>0){
					if ( ( buttons & IN_ATTACK ) && !( oldButtons & IN_ATTACK ) ){
						
						new ent, body
						get_user_aiming(id, ent, body)
						if( IsBlock(ent) ){
							if( get_gametime() - changeLeftBlock[id] < 0.2 ){
								userSelectedBlock[id] = entity_get_int(ent, EV_INT_body)
								userSelectedSize[id] = entity_get_int(ent, EV_INT_skin)
														
							}else changeLeftBlock[id]=get_gametime();
						}	
					}
					
					if ( ( buttons & IN_ATTACK2 ) && !( oldButtons & IN_ATTACK2 ) ){
						
						new ent, body
						get_user_aiming(id, ent, body)
						if( IsBlock(ent) ){
							if( get_gametime() - changeRightBlock[id] < 0.2 ){
								new typeTarget=entity_get_int(ent, EV_INT_body)
								if( typeTarget != userSelectedBlock[id] || userSelectedSize[id]!=entity_get_int(ent, EV_INT_skin)){
									new Float:fOrigin[3]
									new Float:fAngles[3]
									
									entity_get_vector(ent, EV_VEC_origin, fOrigin)
									entity_get_vector(ent, EV_VEC_angles, fAngles)
									
									
									new newEnt = createBlock(userSelectedBlock[id], fOrigin, userSelectedSize[id], entity_get_int(ent, EV_INT_iuser3), fAngles)										
											
									new name[33]
									get_user_name(id, name, 32)
									ColorChat(0, TEAM_COLOR,"[BM]^x01 Player:^x04 %s^x01 swapped the block^x04 %s^x01>^x04%s", name,  blocksProperties[entity_get_int(ent, EV_INT_body)][0], blocksProperties[entity_get_int(newEnt, EV_INT_body)][0])								
									deleteBlock(ent)	
								}						
							}else changeRightBlock[id]=get_gametime();
						}
					}
					if ( ( buttons & IN_RELOAD ) && !( oldButtons & IN_RELOAD ) ){
						new ent,body 
						get_user_aiming(id, ent, body)
						if( IsBlock(ent) ){
							new size = (entity_get_int(ent, EV_INT_skin)+1)%sizeof(blocksSize)								
							entity_set_model(ent, pathModelBlock(entity_get_int(ent, EV_INT_body), size))
							setSizeAngles(ent,size,entity_get_int(ent, EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })			
						}
						userChangeTime[id]=get_gametime();
					}
				}
				if( userNoClip[id] ){
					
					
					if ( ( buttons & IN_JUMP ) && !( oldButtons & IN_JUMP ) ){
						new Float:fOrigin[3]
						new Float:fAngles[3]			
						entity_get_vector(id, EV_VEC_v_angle, fAngles)
						entity_get_vector(id, EV_VEC_origin, fOrigin)
						
						fOrigin[0]+= 95.0*floatcos(fAngles[1], degrees)
						fOrigin[1]+= 95.0*floatsin(fAngles[1], degrees)
						fOrigin[2]-= 15.0*floatsin(fAngles[0], degrees)
						entity_set_vector(id, EV_VEC_origin, fOrigin)
					}
				}
			}
		}
	}
	if(userLatency[id] > 0.0){
	
		static colors[ 3 ]	
		
		if(userLatency[id] > 1.0) colors = {0, 255, 0}
		else if(userLatency[id] > 0.4) colors = {255, 255, 0}
		else colors = {255, 0, 0}	
		
		set_hudmessage(colors[ 0 ],colors[ 1 ],colors[ 2 ], -1.0, 0.30, 0, 0.07, 0.09, 0.07, 0.07, 3);
		show_hudmessage(id, "Block will be deleted:^n[ %0.1f ]", userLatency[id]);
		//displayFade(id, 512,512,512, colors[ 0 ],colors[ 1 ],colors[ 2 ], 40);
		
		userLatency[id] -= 0.01;
	}
	if(ZatrzymanyTimer[id] == false && CzasTimera[id] <= 40){
		set_dhudmessage( 114, 152, 255, 0.10, 0.05, 0, 0.0, 0.1, 0.0, 0.0)
		show_dhudmessage(id, "TIMER: %i", CzasTimera[id] )
	}
	return FMRES_IGNORED
}
public killCloseEnemies(id){	
	new Float:fOrigin[3]
	new Float:fOriginEnt[3]
	entity_get_vector(id, EV_VEC_origin, fOrigin)
	for(new i=1; i<33;i ++){
		if( !is_user_alive(i) || !is_user_connected(i) )
			continue
		if(i==id)
			continue;
			
		entity_get_vector(i, EV_VEC_origin, fOriginEnt)
		if( get_distance_f(fOrigin,fOriginEnt) > 46.0 )
			continue;
		if( get_user_team(id) == get_user_team(i) )
			continue;
		
		if( !userGodMode[i] && !GodAll )
			user_kill(i,1);
	}
}
public teleportMakeSolid(ent){
	ent-=TASK_TELEPORT
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
}
public client_PostThink(id){
	if (!is_user_connected(id) || !is_user_alive(id))
		return PLUGIN_CONTINUE
	if( userNoFall[id] )
	{
		entity_set_int(id, EV_INT_watertype, -3)
		userNoFall[id] = false;	
	}
	
	
	if( userAddVelocity[id][0] != 0.0 || userAddVelocity[id][1] != 0.0 || userAddVelocity[id][2] != 0.0 ){
		entity_set_vector(id, EV_VEC_velocity, userAddVelocity[id])
		userAddVelocity[id][0]=0.0
		userAddVelocity[id][1]=0.0
		userAddVelocity[id][2]=0.0
		
	}
	if( userDuck[id] ){
		set_pev(id, pev_bInDuck, 1)
		userDuck[id]=false;
	}
	if( userJump[id] ){
		new oldbuttons = ~IN_JUMP
		entity_set_int(id, EV_INT_oldbuttons, oldbuttons)
		userJump[id]=false;
	}
	
	if( userRefreshSpeed[id] ){
		set_user_maxspeed(id, 250.0)
		userRefreshSpeed[id]=false;
	}
	
	if( userSpeedReduction[id] != 0.0 ){
		//client_print(id,print_chat,"Redukcja: %f", userSpeedReduction[id])
		set_user_maxspeed(id, userSpeedReduction[id])
		userRefreshSpeed[id]=true;
		userSpeedReduction[id]=0.0;
	}else if( userSlow[id][0] - get_gametime() > 0.0 && !isSpeed(id)){
		//client_print(id,print_chat,"Speed: %f", userSlow[id][1])
		set_user_maxspeed(id, userSlow[id][1] )		
		userRefreshSpeed[id]=true;
	}else if( userSkills[id][2][0]-get_gametime() > 0.0 || userNoClip[id] || userOnIce[id]){		
		//client_print(id,print_chat,"Skill: 400.0")
		set_user_maxspeed(id, 400.0)		
		userRefreshSpeed[id]=true;
	}else if( userSkills[id][4][0]-get_gametime() > 0.0 || userNoClip[id] || userOnIce[id]){		
		//client_print(id,print_chat,"Skill: 400.0")
		set_user_maxspeed(id, 400.0)		
		userRefreshSpeed[id]=true;
	}else if(userMagic[id]){
		//client_print(id,print_chat,"Magia: %f", userMagicSpeed[id])
		set_user_maxspeed(id, 250.0+userMagicSpeed[id] )
		userRefreshSpeed[id]=true;
	}
	
	return PLUGIN_CONTINUE
}
public copyDataBlock(ent, toent){
	new type =  entity_get_int(ent, EV_INT_body)
	for( new i = 2; i < sizeof(blocksProperties[]); i ++ ){
		new param = str_to_num(blocksProperties[type][i])
		if( param == -1 )
			break;
		setParamBlock(toent, param, getParamBlock(ent, param))
	}
	new Float:fColor[3]
	entity_get_vector(ent, EV_VEC_rendercolor, fColor);
	entity_set_vector(toent, EV_VEC_rendercolor, fColor)
	entity_set_int(toent, EV_INT_iuser2, entity_get_int(ent, EV_INT_iuser2) )
	entity_set_int(toent, EV_INT_iuser4, entity_get_int(ent, EV_INT_iuser4) )
	entity_set_edict(toent, EV_ENT_euser1, entity_get_edict(ent, EV_ENT_euser1 ) )
	for( new i =0; i<3;i ++ )
	setEditBlock(toent, i, getEditBlock(ent, i))
	
	if( type != GLASS )
		setRenderingBlock(toent)
	
}	
public DeathMsg(){
	//new killer=read_data(1)
	new victim=read_data(2)
	if( userRespawn[victim] ){
		set_task(0.1, "respawnPlayer", victim )
	}
	return PLUGIN_CONTINUE
}
public round_start(){
	for( new i =1;i<33;i++){
		if( !is_user_connected(i) )
			continue
		userMagicSpeed[i] = random_float(0.0, 15.0)
		feniks[i] = false;
		NagrodaTimer[i] = false;
		CzasTimera[i] = 0;
		ZatrzymanyTimer[i] = true;
		for( new skill = 0; skill<sizeof(userSkills[]);skill++){
			userSkills[i][skill][0]=0.0
			userSkills[i][skill][1]=0.0
		}
		if(task_exists(i+TASK_SKILL_HUD) )
			remove_task(i+TASK_SKILL_HUD)
		userResetVarsRound(i)
	}
	randomCamp()
}
public round_end(){
	
}
public respawnPlayer(id){
	if( is_user_alive(id) || !is_user_connected(id) )
		return PLUGIN_CONTINUE
		
	ExecuteHamB(Ham_CS_RoundRespawn, id);
		
	if( userCheckPoint[id] ){
		backToCheckPoint(id)
	}
	return PLUGIN_CONTINUE
}	
public ham_Spawn(id){
	if( !is_user_alive(id) || !is_user_connected(id))
		return HAM_IGNORED
	
	set_task(0.2,"setVarsAdmin", id)
	
	if( !userHud[id] ){
		showHud(id)
		userHud[id]=false;
	}
	userResetVarsRound(id)
	
	return PLUGIN_CONTINUE
}
public setVarsAdmin(id){
	if( GodAll )
		set_user_godmode(id, GodAll)
	set_user_godmode(id, userGodMode[id])
	set_user_noclip(id, userNoClip[id])
}
public ham_traceAttack(victim, attacker, float:damage, Float:direction[3], trace, bits)
{
	if( !is_user_connected(attacker) || !is_user_alive(attacker) )
		return HAM_IGNORED
	if( userSkills[victim][0][0]-get_gametime()>0.0){
		return HAM_SUPERCEDE
	}
	else if( userSkills[victim][4][0]-get_gametime()>0.0){
		return HAM_SUPERCEDE
	}
	if( get_user_team(attacker) != get_user_team(victim )){
		userSlowed[victim]=attacker;
		userSlowedTime[victim] = get_gametime();
	}
	return HAM_IGNORED
} 
public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits){
	if( !is_user_alive(victim) )
		return HAM_IGNORED
	if( userSkills[victim][0][0]-get_gametime()>0.0){
		if( ( damagebits & DMG_FALL )){		
			SetHamParamFloat(4, 0.0)
		}
	}
	if( userSkills[victim][4][0]-get_gametime()>0.0){
		if( ( damagebits & DMG_FALL )){		
			SetHamParamFloat(4, 0.0)
		}
	}
	return HAM_IGNORED
}
public userResetVarsRound(id){
	
	if( task_exists(id+TASK_VISIBLE) )
		remove_task(id+TASK_VISIBLE)
		
	if( task_exists(id+TASK_CAMOUFLAGE) )
		remove_task(id+TASK_CAMOUFLAGE)		
		
	setRendering(0, id, 255,255,255,255)
	//set_user_maxspeed(id, 250.0)
	for( new i = 0; i<4;i++){
		userSkills[id][i][0]=0.0;
		userSkills[id][i][1]=0.0;
	}
	resetUsedBlock(id)
	resetCampAchived(id)
}

public touchBlock(ent, id){

	if ( !( 1 <= id <= 33 ) 	|| !IsBlock(ent)) 
		return PLUGIN_CONTINUE;
		
	if( !is_user_alive(id) || !is_user_connected(id) || !pev_valid(id))
		return PLUGIN_CONTINUE

	if( entity_get_int(ent, EV_INT_iuser1) != 0 )
		return PLUGIN_CONTINUE;
	
	new flags =entity_get_int(id, EV_INT_flags);
	new groundentity =	entity_get_edict(id, EV_ENT_groundentity);
	new typeBlock=entity_get_int(ent, EV_INT_body)	
	new barrier=true;
	/*
	if( typeBlock == BARRIERTT || typeBlock==BARRIERCT ){
		new Float:fOriginId[3], Float:fOriginTarget[3]
			
		pev(id, pev_origin, fOriginId)
		for(new i=1;i<33;i++){
			if(!is_user_connected(i) || !is_user_alive(i))
				continue;
			if(get_user_team(i) == get_user_team(id) )
				continue;
					
			pev(i, pev_origin, fOriginTarget)
			if(get_distance_f(fOriginId, fOriginTarget) < 700.0 ){
				barrier=true
				break;
			}
					
		}
	}*/
	if( getParamBlock(ent, 23) == 1.0 ){
		set_task(0.1, "makeNoSolid", ent+TASK_BHOP)
	}
	if( getParamBlock(ent, 1) == 1.0 ){	
		new bool:blockade=false;
		new Float:fOrigin[3]
		new Float:fMins[3]
		new Float:fMaxs[3]
		entity_get_vector(id, EV_VEC_origin, fOrigin)
		entity_get_vector(id, EV_VEC_mins, fMins)
		entity_get_vector(id, EV_VEC_maxs, fMaxs)
		
		new Float:fOriginEnt[3]
		new Float:fMinsEnt[3]
		new Float:fMaxsEnt[3]
		entity_get_vector(ent, EV_VEC_origin, fOriginEnt)
		entity_get_vector(ent, EV_VEC_mins, fMinsEnt)		
		entity_get_vector(ent, EV_VEC_maxs, fMaxsEnt)
		if( !(flags & FL_ONGROUND) ){			
			if( groundentity != ent ){					
				blockade=true;
			}			
			
		}else if( fOrigin[2] + fMins[2] < fOriginEnt[2]+fMaxsEnt[2] || groundentity != ent ) {
			blockade=true;			
		}
		if( getParamBlock(ent, 23) == 1.0 ){
			set_task(0.1, "makeNoSolid", ent+TASK_BHOP)
		}
		if( groundentity == ent || !(flags & FL_ONGROUND) || (groundentity == 0 && (flags & FL_ONGROUND))){
			//client_print(id,print_chat,"%2f %2f",  fOrigin[2], fMaxs[2] )
			if( fOrigin[2]+fMaxs[2]<fOriginEnt[2] )
				return PLUGIN_CONTINUE;
			if( typeBlock == BHOP || typeBlock == NOSLOWBHOP || typeBlock == BHOPLATENCY ){
				if( blockade ){
					
					new Float:fOrigin[3]
					entity_get_vector(id, EV_VEC_origin, fOrigin) 
					if( fOrigin[0] == userLastOrigin[id][0] && fOrigin[1] == userLastOrigin[id][1] && fOrigin[2] == userLastOrigin[id][2] ){				
						
						userLastOrigin[id][0]=fOrigin[0]
						userLastOrigin[id][1]=fOrigin[1]
						userLastOrigin[id][2]=fOrigin[2]
						if( !task_exists(id+88888) )
							set_task(0.1, "checkTrueOrigin", id+88888)
						userLetBlock[id]++;
						
						
						if( userLetBlock[id] > 50 ){
							
							blockade=false
							entity_set_edict(ent,EV_ENT_euser3, 1)
							userLetBlock[id]=0;	
						}				
					}else{
						userLastOrigin[id][0]=fOrigin[0]
						userLastOrigin[id][1]=fOrigin[1]
						userLastOrigin[id][2]=fOrigin[2]					
						userLetBlock[id]=0;
					}
				}
			}
		
		}
		if( blockade ){			
			return PLUGIN_CONTINUE;			
		}
	}	
	new bool:change=false;
	new Float:userVelocity[3]
	if( getEditBlock(ent,0) == 2 ){
		if( !campAchived(id, getEditBlock(ent,1) ) ){
			new iForwardOne;			
			ExecuteForward(forwardCampEnd, iForwardOne, id, ent, getEditBlock(ent,2), typeMap, bonusCampRound == getEditBlock(ent,1) ? 1:0 );
			setCampAchived(id, getEditBlock(ent,1))
		}
	}	 
	if( get_user_team(id) != 3 && ( getParamBlock(ent, 14) != 0 ) ){
		if( floatround(getParamBlock(ent, 14)) == 3 && !has_flag(id, "t") )
			return PLUGIN_CONTINUE
		else if( floatround(getParamBlock(ent, 14)) != get_user_team(id) && floatround(getParamBlock(ent, 14)) != 3 )
			return PLUGIN_CONTINUE
	}
	/* 	STRZALKA	*\	
	\* 	STRZALKA	*/
	pev(id, pev_velocity, userVelocity)
	
	if( getParamBlock(ent, 3) != 0.0 ){
		velocity_by_aim( id, floatround( getParamBlock(ent,3) ), userVelocity)		
		change=true;
		
	}
	
	/* 	TRAMPOLINA	*\
	\* 	TRAMPOLINA	*/
	if( getParamBlock(ent, 2) != 0.0 ){
		userVelocity[2]=getParamBlock(ent,2)
		change=true;
	}
	if( change )
		userAddVelocity[id] = userVelocity
	
		
	/* 	OBRAZENIA	*\	
	\* 	OBRAZENIA	*/
	if( getParamBlock(ent, 4) != 0.0 ){
		if( userSkills[id][0][0] < get_gametime() ){
			if( userSkills[id][4][0] < get_gametime() ){
				if( get_gametime() - userLastTouchBlock[id] > getParamBlock(ent,6) ){
					fakedamage(id, "", getParamBlock(ent, 4), DMG_GENERIC);	
			
					userLastTouchBlock[id]=get_gametime();
				}
			}
		}
	}
	/*	LECZNEIE	*\	
	\* 	LECZNEIE	*/
	if( getParamBlock(ent, 5) != 0.0 && typeBlock != POTION ){
		if( get_gametime() - userLastTouchBlock[id] > getParamBlock(ent,6) ){
			new health=min(100, get_user_health(id) + floatround( getParamBlock(ent,5) ))
			set_user_health(id, health )
			userLastTouchBlock[id]=get_gametime();
		}
		if( get_gametime() - pev(ent, pev_fuser1) >= 5.0 ){
			new Float:fOrigin[3]
			entity_get_vector(id, EV_VEC_origin, fOrigin)
			
			message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
			write_byte(TE_SPRITE)
			engfunc(EngFunc_WriteCoord,fOrigin[0])
			engfunc(EngFunc_WriteCoord,fOrigin[1])
			engfunc(EngFunc_WriteCoord,fOrigin[2]-20.0)
			write_short(sprite_heal) 
			write_byte(5) 
			write_byte(255)
			message_end()
			
			set_pev(ent, pev_fuser1, get_gametime())
		}
		if( get_gametime() - pev(ent, pev_fuser2) >= 1.5 ){
			
			emit_sound(ent, CHAN_WEAPON, soundsNames[13], 1.0, ATTN_NORM, 0, PITCH_NORM)		
			set_pev(ent, pev_fuser2, get_gametime())
		}
	}
	if( getParamBlock(ent, 7) != 0.0 && typeBlock == HONEY ){
		userSpeedReduction[id] = getParamBlock(ent,7)
	}
	if( getParamBlock(ent, 8) == 0.0 ){
		userNoFall[id]=true;
	}
	
	switch( typeBlock ){
		case BHOP:{
			if( lastTouched[id] != ent ){
				//xp_add_mission(id, 17, 1)
				lastTouched[id]=ent
			}
			//actionMagicSpeed(id,ent)
			actionBhop(ent);
		}
		case NOSLOWBHOP:{
			if( lastTouched[id] != ent ){
				//xp_add_mission(id, 17, 1)
				lastTouched[id]=ent
			}
			//actionMagicSpeed(id,ent)
			actionNoSlowBhop(id, ent);
		} 
		case DEATH: actionDeath(id, ent)
		case NOFALL:{
			if( userVelocity[2] < -500.0 ){
				if( get_gametime() - userSlow[id][0] > 0.0 ){
					/*if( getParamBlock(ent, 19) != 0.0 ){
						if( !isSpeed(id) ){
							new iOrigin[3];
							get_user_origin(id, iOrigin, 0)
							new Float:randFloat=random_float(0.7,1.5);
							//userSlow[id][1] = getParamBlock(ent, 19)+250.0
							//userSlow[id][0] = get_gametime()+randFloat
							
							if( !isInvisible(id) && !isImmortal(id) ){
								setRendering(1, id, 255,150,0,5)
								makeTrail(id)
								
								set_task( randFloat, "killAccelerate", id) 
							}
							
							message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin, 0)
			
							write_byte(TE_DLIGHT)			
							write_coord(iOrigin[0]);	
							write_coord(iOrigin[1]);
							write_coord(iOrigin[2]);			
							write_byte(25)			
						
							write_byte(255); 
							write_byte(150); 
							write_byte(0); 
							
							write_byte(10)			
							write_byte(50)			
							message_end()
							Display_Fade(id,(1<<12),0,0,255,150, 0, 40)
						}
					}*/
				}
			}
			userNoFall[id]=true;
		}
		case DUCK: userDuck[id]=true;
		
		case BHOPLATENCY: actionBhopLatency(id, ent)
		case BARRIERTT: if( get_user_team(id) != 1 || !barrier) actionBarrier(id, ent)
		case BARRIERCT: if( get_user_team(id) != 2 || !barrier) actionBarrier(id, ent)
		case BARRIERVIP: if(has_flag(id, "t")) actionBarrier(id,ent)
		case ICE: actionIce(id,ent)
		case GODMODE: actionGodMode(id,ent)
		case INVIS: actionInvisible(id,ent)
		case GUN: actionGun(id,ent)
		case GRENADE: actionGrenade(id,ent)
		case BOOTS: actionBoots(id,ent)
		case MUSIC: actionMusic(id,ent)
		case EXP: actionPoints(id,ent)
		case CAMOUFLAGE: actionCamouflage(id,ent)
		case TRAMPOLINE:{
			if( get_gametime() - userSound[id] > 0.3 ){
				//emit_sound(id, CHAN_WEAPON, soundsNames[random_num(8,11)], 1.0, ATTN_NORM, 0, PITCH_NORM)	
				userSound[id]=get_gametime();
			}
			userNoFall[id]=true
		}
		case AMMO: actionAmmo(id, ent);
		case POTION: actionPotion(id, ent)
		case WATER: actionWater(id, ent)
		case GRAVITY: actionGravity(id, ent)
		case DODATKOWES: actiondodatkoweS(id, ent)
		case FENIKS: actionFeniks(id, ent)
		case AUTOBH: actionSpamBH(id, ent)		
		case SURFB: actionBhop(ent)
		case SURFS: actionDeath(id, ent)
		case SURFO: actionBhopLatency(id, ent)
		case SURFL: actionIce(id, ent)
		case SKRZYNKA: ActionSkrzynka(id, ent)
		case TIMERSTART: ActionTimerStart(id, ent)
		case TIMERSTOP: ActionTimerStop(id, ent)
	}
	
	return PLUGIN_CONTINUE;
}
ActionSkrzynka(id, ent){
	
}
public checkTrueOrigin(id){
	id-=88888
	if(  !is_user_alive(id) || !is_user_connected(id) )
		return PLUGIN_CONTINUE
		
	new Float:fOrigin[3]
	entity_get_vector(id, EV_VEC_origin, fOrigin) 
	if( fOrigin[0] != userLastOrigin[id][0] || fOrigin[1] != userLastOrigin[id][1] || fOrigin[2] != userLastOrigin[id][2] ){		
		userLetBlock[id]=0
	}
		
	return PLUGIN_CONTINUE
}
public plugin_precache(){
	for( new i = 0; i < NUMBLOCKS; i ++ ){		
		new gText[98]		
		for( new x = 0; x < 4; x ++ ){
			format(gText, sizeof(gText), "models/FNJ_Easyblocks/%s%s.mdl", blocksProperties[i][1], blocksSize[x][0])
			precache_model(gText)	
		}
	}
	for( new i = 0; i < sizeof(teleportsSprites); i ++ ){		
		precache_model(teleportsSprites[i][0])
	}
	for(new i =0; i<sizeof(soundsNames);i++){
		precache_sound(soundsNames[i])
	}
	
	for(new i =0; i<sizeof(blockMusic);i++){
		precache_sound(blockMusic[i][0])
	}
	
	beam_spr = precache_model( "sprites/blockmaker/bluez.spr" )
	
	sprite_heal  =precache_model("sprites/blockmaker/health.spr");
	
	precache_model("sprites/lightbulb.spr");
	
	sprite_fire = precache_model("sprites/blockmaker/flame.spr")
	
	line_green = precache_model("sprites/test/line_green.spr");
	line_yellow = precache_model("sprites/test/line_yellow.spr");
	line_red = precache_model("sprites/test/line_red.spr");
	line_pink = precache_model("sprites/test/line_pink.spr");
	line_orange = precache_model("sprites/test/line_black.spr");
	line_blue = precache_model("sprites/test/line_blue.spr");
	//precache_model(caseModel);
}
public makerMain(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	
	new gText[290]
	
	format(gText, sizeof(gText), "\y[BM]^nTemplate:\r %s\
		^n\r1.\w Blocks menu\
		^n\r2.\w Teleports menu^n\
		^n\r3.\w Options menu\
		^n\r4.\w Admin menu\
		^n\r5.\w Save menu^n\
		^n\r6.\w Noclip: %s\
		^n\r7.\w Godmode: %s\
		^n\r8.\w Build Mode: %s^n\
		^n\r0.\w Exit\
	", actualStyle, 
		userNoClip[id]?"\yON":"\dOFF", 
		userGodMode[id]?"\yON":"\dOFF", 
		userBmShorCut[id]?"\yON":"\dOFF" 
	)
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 |B8 | B0, gText, -1, "makerMain")
	
	
	return PLUGIN_CONTINUE

}
public autoSaveTask(){
	SaveBlocks(0, 2)
	if( autoSave ){
		set_task(45.0, "autoSaveTask", TASK_AUTOSAVE)
	}
}
public makerMain_2(id, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	/*if( item == MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE;
	}*/
	switch(item){
		case 0:{
			if(wolebmalb[id])
			{
				blockMaker(id)
			}
			else
			{
				GrzyboblockMaker(id)
			}
			userBmShorCut[id]=true
		}
		case 1:teleMenu(id)		
		case 2:adminMenu(id)
		case 3:adminAddition(id)
		case 4:menuSaveAdmin(id)
		case 5:{
			userNoClip[id]=!userNoClip[id]
			makerMain(id)			
			set_user_noclip(id, userNoClip[id])	
		}
		case 6:{
			userGodMode[id]=!userGodMode[id];
			makerMain(id)			
			set_user_godmode(id, userGodMode[id])
		}
		case 7:{
			userBmShorCut[id]=!userBmShorCut[id];
			makerMain(id)
		}
		case 9:{
			
		}
			
	}
	
	
	return PLUGIN_CONTINUE
}
public blockMaker(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iNumBlocks=0
	new ent = find_ent_by_class(-1, "blockMaker")
	while( ent != 0 ){
		iNumBlocks++;
		ent=find_ent_by_class(ent, "blockMaker")
	}
		
	new menu[286]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\yBlocks:\r %d^n^n\
		\r1.\w Select block:\y %s^n\
		\r2.\w Create block^n\
		\r3.\w Delete block^n\
		\r4.\w Sliding move menu^n\
		\r5.\w Block properties^n^n\
		\r6.\w Noclip: %s^n\
		\r7.\w Godmode: %s^n\		
		\r8.\w Size:\y %s^n^n\
		\r9.\w Options^n\
		\r0.\w Exit\
	", iNumBlocks, blocksProperties[userSelectedBlock[id]][0], userNoClip[id] ? "\yON":"\dOFF", userGodMode[id] ? "\yON":"\dOFF", blocksSize[userSelectedSize[id]][1])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "blockMaker")
	return PLUGIN_CONTINUE
}
public GrzyboblockMaker(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iNumBlocks=0
	new ent = find_ent_by_class(-1, "blockMaker")
	while( ent != 0 ){
		iNumBlocks++;
		ent=find_ent_by_class(ent, "blockMaker")
	}
		
	new menu[286]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\yBlock menu:^n^n\
		\r1.\w Type of block:\y %s^n\
		\r2.\w Size:\y %s^n\
		\r3.\w Create^n\
		\r4.\w Delete^n\
		\r5.\w Replace^n^n\
		\r6.\w Rotate block:^n\
		\r7.\w Properties:^n\		
		\r8.\w Sliding:\y^n^n\
		\r9.\w More^n\
		\r0.\w Exit\
	", blocksProperties[userSelectedBlock[id]][0], blocksSize[userSelectedSize[id]][1])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "GrzyboMenu")
	return PLUGIN_CONTINUE
}
public GrzyboMenu_2(id, item ){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	/*if( item==MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}*/
	switch( item ){
		case 0: selectBlock(id)
		case 1:{
			userSelectedSize[id]=(userSelectedSize[id]+1)%sizeof(blocksSize)
			GrzyboblockMaker(id)
		}
		case 2:{
			createBlockAim(id)
			GrzyboblockMaker(id)
		}
		case 3:{
		
			new ent, body
			get_user_aiming(id, ent, body)
			if( !pev_valid(ent) )
				GrzyboblockMaker(id)
			
			if( entity_get_int(ent, EV_INT_iuser1) != 0 ){
				GrzyboblockMaker(id)
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) || IsTeleport(ent)){
				GrzyboblockMaker(id)
				return PLUGIN_CONTINUE
			}
			deleteBlock(ent)
			GrzyboblockMaker(id)
		}
		case 4:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsBlock(ent) ){
				new typeTarget=entity_get_int(ent, EV_INT_body)
				if( typeTarget != userSelectedBlock[id] || userSelectedSize[id]!=entity_get_int(ent, EV_INT_skin)){
					new Float:fOrigin[3]
					new Float:fAngles[3]
						
					entity_get_vector(ent, EV_VEC_origin, fOrigin)
					entity_get_vector(ent, EV_VEC_angles, fAngles)
						
					new newEnt = createBlock(userSelectedBlock[id], fOrigin, userSelectedSize[id], entity_get_int(ent, EV_INT_iuser3), fAngles)	
					new name[33]
					get_user_name(id, name, 32)
					ColorChat(0, TEAM_COLOR,"[BM]^x01 Player:^x04 %s^x01 swapped the block^x04 %s^x01>^x04%s", name,  blocksProperties[entity_get_int(ent, EV_INT_body)][0], blocksProperties[entity_get_int(newEnt, EV_INT_body)][0])								
					deleteBlock(ent)	
				}						
			}GrzyboblockMaker(id);
		}
		case 5:{
			if(userBmShorCut[id]){
				new ent, body
				get_user_aiming(id, ent, body)
				if(IsBlock(ent)) {
					new size, rotation;
					rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
					size = entity_get_int(ent, EV_INT_skin)
					setSizeAngles(ent, size, rotation, Float:{-1.0, -1.0, -1.0})
					GrzyboblockMaker(id)
				}
				GrzyboblockMaker(id)
			}
		}
		case 6:{
			new ent, body
			get_user_aiming(id, ent, body)
				
			if( IsTeleport(ent) ){		
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					menuParamTele(id)
				}else GrzyboblockMaker(id)
				
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) ){
				GrzyboblockMaker(id)
				return PLUGIN_CONTINUE
			}			
			userBlockProperties[id]=ent
			propertiesBlock(id)	
		}
		case 7:{
			MenuMoveBlock2(id)
		}
		case 8:{
			adminMenu(id)
		}
		case 9:{
			makerMain(id)
		}
		
	}
	return PLUGIN_CONTINUE		
}
public deleteBlock(ent){
	
	entity_set_origin(ent, Float:{8192.0,8192.0,8192.0})			
	remove_entity(ent)
	
}
public blockMaker_2(id, item ){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	/*if( item==MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}*/
	switch( item ){
		case 0: selectBlock(id)
		case 1:{
			createBlockAim(id)
			blockMaker(id)
		}
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( !pev_valid(ent) )
				blockMaker(id)
			
			if( entity_get_int(ent, EV_INT_iuser1) != 0 ){
				blockMaker(id)
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) || IsTeleport(ent)){
				blockMaker(id)
				return PLUGIN_CONTINUE
			}
			
			deleteBlock(ent)
			blockMaker(id)
			
		}
		case 3:{
			MenuObracania(id);
		}
		case 4:{
			new ent, body
			get_user_aiming(id, ent, body)
				
			if( IsTeleport(ent) ){		
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					menuParamTele(id)
				}else blockMaker(id)
				
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) ){
				blockMaker(id)
				return PLUGIN_CONTINUE
			}			
			userBlockProperties[id]=ent
			propertiesBlock(id)	
		}
		case 5:{
			userNoClip[id]=!userNoClip[id]
			set_user_noclip(id, userNoClip[id])	
			blockMaker(id)
		}
		case 6:{
			userGodMode[id]=!userGodMode[id];
			set_user_godmode(id, userGodMode[id])
			blockMaker(id)
		}
		case 7:{
			userSelectedSize[id]=(userSelectedSize[id]+1)%sizeof(blocksSize)
			blockMaker(id)
		}
		case 8:{
			adminMenu(id)
		}
		case 9:{
			makerMain(id)
		}
		
	}
	return PLUGIN_CONTINUE		
}
public MenuObracania(id)
{
	new menu[286]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\ySliding move menu:^n\
		\r1.\w Rotation size:\y %0.1f^n^n\
		\r2.\w Rotate \rX\y +^n\
		\r3.\w Rotate \rX\y -^n^n\
		\r4.\w Rotate \rY\y +^n\
		\r5.\w Rotate \rY\y -^n^n\
		\r6.\w Rotate \rZ\y +^n\
		\r7.\w Rotate \rZ\y -^n^n\
		\r8.\w Rotate \y( In Axis )^n\
		\r0.\w Exit\
	", userKrecDist[id])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "blockObkrec")
	return PLUGIN_CONTINUE
}
public blockObkrec_2(id, item )
{
	new ent, body, size, rotation;
	new Float:angles[3];
	get_user_aiming(id, ent, body)
	

	rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
	size = entity_get_int(ent, EV_INT_skin)
	pev(ent, pev_angles, angles);
	for(new i = 0; i < 3; i ++) userAngles[i] = angles[i]
	
	
	
	switch( item ){
		case 0: 
		{
			client_cmd(id, "messagemode WartoscObkrecania")
		}
		case 1:
		{
		
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] += userKrecDist[id];	
			userAngles[1] = angles[1] 
			userAngles[2] = angles[2] 
			
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 2:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] -= userKrecDist[id];	
			userAngles[1] = angles[1] 
			userAngles[2] = angles[2] 
	
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 3:
		{
			
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] += userKrecDist[id];	
			userAngles[2] = angles[2] 
	
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 4:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] -= userKrecDist[id];	
			userAngles[2] = angles[2] 	
			
	
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 5:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] = angles[1] 
			userAngles[2] += userKrecDist[id];	
			
		
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 6:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] = angles[1] 
			userAngles[2] -= userKrecDist[id];	
		
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 7:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			new size, rotation;
			rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
			size = entity_get_int(ent, EV_INT_skin)
			setSizeAngles(ent, size, rotation, Float:{-1.0, -1.0, -1.0})
			MenuObracania(id);
		}
		
		case 9:{
			makerMain(id)
		}
		
	}
	return PLUGIN_CONTINUE		
}
public ZmienWartoscObkrecania(id)
{
	new szCash[64];
	read_argv(1, szCash, 63)
	remove_quotes(szCash);
	new Float:Cash = str_to_float(szCash);

	userKrecDist[id] = Cash;
	
	client_print(id, 3, "You have set the rotation power to: %0.1f", Cash);
	MenuObracania(id);
	return PLUGIN_HANDLED;
}
public teleMenu(id){	
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iNumTele=0
	new ent = find_ent_by_class(-1, szTeleClassName)
	while( ent != 0 ){
		iNumTele++;
		ent=find_ent_by_class(ent, szTeleClassName)
	}
	if( userLastTpCreated[id] != 0 ){
		if( !IsTeleport(userLastTpCreated[id]) ){
			userLastTpCreated[id]=0;
		}
	}
	new menu[256]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\wTeleports:\r %d^n\
		\r1.\w Start^n\
		\r2.%s End^n\
		\r3.\w Delete teleport^n\
		\r4.\w Properties teleport ^n\
		\r5.\w Swap end and start^n\
		\r6.\w NoClip: %s^n\
		\r7.\w Godmode: %s^n\
		^n\
		\r9.\w Options^n\
		\r0.\w Exit",
		iNumTele, userLastTpCreated[id]!=0?"\w":"\d", userNoClip[id] ? "\yON":"\dOFF", userGodMode[id] ? "\yON":"\dOFF"
	)
		
	
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "teleMenu")
	
	return PLUGIN_CONTINUE
}
public teleMenu_2(id, item){	
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			if( userLastTpCreated[id] == 0 || !IsTeleport(userLastTpCreated[id]))
				createTeleportAim(id)
			else{
				
					new iLook[3]
					new Float:fLook[3]
					get_user_origin(id, iLook, 3)
					IVecFVec(iLook, fLook)
					fLook[2]+=8.0
					entity_set_origin(userLastTpCreated[id], fLook)		
			}
			
			teleMenu(id)
		}
		case 1:{
			if( userLastTpCreated[id]!=0)
				createTeleportAim(id)
			
			teleMenu(id)
		}	
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsTeleport(ent) ){
				teleMenu(id)
				return PLUGIN_CONTINUE
			}
			new target=entity_get_int(ent, EV_INT_iuser1)
			if( IsTeleport(target) ){				
				if( task_exists(target+TASK_SPRITE) )
					remove_task(target+TASK_SPRITE)
				if( task_exists(target+TASK_TELEPORT) )
					remove_task(target+TASK_TELEPORT)
					
				remove_entity(target)
			}
			
			if( task_exists(ent+TASK_TELEPORT) )
				remove_task(ent+TASK_TELEPORT)
				
			if( task_exists(ent+TASK_SPRITE) )
				remove_task(ent+TASK_SPRITE)
			remove_entity(ent)
			
			teleMenu(id)
			
		}	
		case 3:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsTeleport(ent) ){				
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					menuParamTele(id)
				}else teleMenu(id)
			}else teleMenu(id)
			
			
			
		}
		case 4:{
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsTeleport(ent) ){
				teleMenu(id)
				return PLUGIN_CONTINUE
			}
			
			new target=entity_get_int(ent, EV_INT_iuser1)
			if( !IsTeleport(target) ){
				return PLUGIN_CONTINUE
			}
			
			entity_set_int(ent, EV_INT_iuser2, entity_get_int(ent, EV_INT_iuser2 )==1?0:1)
			entity_set_int(target, EV_INT_iuser2, entity_get_int(ent, EV_INT_iuser2 )==1?0:1)
			refreshTeleportModel(target)
			refreshTeleportModel(ent)
			teleMenu(id)
		}	
		case 5:{
			userNoClip[id]=!userNoClip[id]
			set_user_noclip(id, userNoClip[id])	
			teleMenu(id)
			
		}
		case 6:{
			userGodMode[id]=!userGodMode[id];
			set_user_godmode(id, userGodMode[id])
			teleMenu(id)
		}
		case 8:{
			adminMenu(id)
		}
		case 9:{
			makerMain(id)
		}
	}
	return PLUGIN_CONTINUE
}
public menuParamTele(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new gText[128]
	new menu=menu_create("\y[BM]^n\yTeleport Properties", "menuParamTele_2")
	menu_additem(menu, "Refresh")
	for(new i=0;i<sizeof(propertiesTele);i++){
		if(equal(propertiesTele[i][1],"bool"))
			format(gText, sizeof(gText), "%s:\y %s", propertiesTele[i][0], getParamBlock(userBlockProperties[id],i)==1.0?"Yes":"No")
		if(equal(propertiesTele[i][1],"int"))
			format(gText,sizeof(gText), "%s:\y %i", propertiesTele[i][0],floatround(getParamBlock(userBlockProperties[id],i)))	
		else format(gText,sizeof(gText), "%s:\y %0.1f", propertiesTele[i][0], getParamBlock(userBlockProperties[id],i))		
		menu_additem(menu, gText)
	}
	
	menu_display(id,menu,0)
	return PLUGIN_CONTINUE
}
public menuParamTele_2(id,menu,item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if(item==MENU_EXIT){
		teleMenu(id)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsTeleport(ent) ){				
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					ustawkolor(ent);
					ustawkolor(target);
					menuParamTele(id)
				}else teleMenu(id)
			}else teleMenu(id)
		}
		default:{
			item--;
			if(equal(propertiesTele[item][1],"bool")){
				setParamBlock(userBlockProperties[id],item,getParamBlock(userBlockProperties[id],item)==1.0?0.0:1.0)
			}else{
				userBlockParamChange[id] = item
				client_cmd(id, "messagemode value")
			}
		}
	}
	menuParamTele(id)
	return PLUGIN_CONTINUE
}
public createTeleportAim(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iLook[3]
	new Float:fLook[3]
	get_user_origin(id, iLook, 3)
	IVecFVec(iLook, fLook)
	fLook[2]+=36.0
	
	new ent = createTeleport(fLook, userLastTpCreated[id], userLastTpCreated[id]==0?0:1)
	if( userLastTpCreated[id]==0){
		userLastTpCreated[id]=ent;
	}else{	
		entity_set_int(userLastTpCreated[id], EV_INT_iuser1, ent)
		userLastTpCreated[id]=0;
		
	}
	return ent;
}
public createTeleport(Float:fOrigin[3], endEnter, typeTeleport ){

	new ent =create_entity("info_target");
	if( !pev_valid(ent) )
		return -1;
	
	entity_set_string(ent, EV_SZ_classname, szTeleClassName)	
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	
	entity_set_int(ent, EV_INT_rendermode, 5);
	entity_set_float(ent, EV_FL_renderamt, 255.0);
	entity_set_model(ent, teleportsSprites[typeTeleport][0])
	entity_set_size(ent, Float:{ -8.0, -8.0, -8.0 }, Float:{ 8.0, 8.0, 8.0 });
	//DispatchSpawn( ent );
	
	entity_set_int(ent, EV_INT_iuser1, endEnter)
	entity_set_int(ent, EV_INT_iuser2, typeTeleport  )
	
	set_task(0.1, "teleportNextFrame", TASK_SPRITE + ent );
	setParamBlock(ent, 0, 70.0)	
	setDefaultParam(ent)
	entity_set_origin(ent, fOrigin)
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);
	return ent;
}
public ustawkolor(ent)
{	
	new Float:colortele[3];
	colortele[0] = getParamBlock(ent,4)
	colortele[1] = getParamBlock(ent,5)
	colortele[2] = getParamBlock(ent,6)
	entity_set_int(ent, EV_INT_rendermode, 5);
	entity_set_float(ent, EV_FL_renderamt, 100.0);
	set_pev(ent, pev_rendercolor, colortele);
}
public refreshTeleportModel(ent){
	
	entity_set_model(ent, teleportsSprites[entity_get_int(ent, EV_INT_iuser2)][0])
}	
public teleportNextFrame(ent){
	
	ent -= TASK_SPRITE
	if( !pev_valid(ent) )
		return PLUGIN_CONTINUE
	new newFrame = floatround(entity_get_float(ent, EV_FL_frame)+1)%str_to_num(teleportsSprites[entity_get_int(ent, EV_INT_iuser2)][1])
	entity_set_float(ent, EV_FL_frame, float(newFrame))
	
	
	set_task(0.1, "teleportNextFrame", TASK_SPRITE + ent );
	return PLUGIN_CONTINUE
}
public adminMenu(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new menu=menu_create("[BM]^n\yOptions","adminMenu_2")
	new gText[128]
	
	menu_additem(menu, "Moving  blocks")
	format(gText, sizeof(gText), "Group blocks: %s", userSnap[id] ? "\yON" : "\rOFF")
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "%sDistance:\y %0.1f^n",userSnap[id] ? "\w" : "\d", userSnapDist[id])
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "Intelligent rotation:\y %s", IntelligentRotating[userInteligent[id]])
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "Respawn: %s", userRespawn[id] ? "\yYes":"\dNo")
	menu_additem(menu, gText)
	menu_additem(menu, "Find the blocks in the wall")
	menu_additem(menu, "Delete nearest")
	
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id, menu, 0)
	return PLUGIN_CONTINUE
}
public adminMenu_2(id, menu, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if( item == MENU_EXIT ){
		makerMain(id)
		return PLUGIN_CONTINUE
	}
	
	switch(item){
		case 0:{
			if(wolebmalb[id])
			{
				menuMoveBlock(id)
			}
			else
			{
				MenuMoveBlock2(id);
			}
		}
		case 1:{
			userSnap[id] = !userSnap[id]
		}
		case 2:{
			userSnapDist[id] += 2.0;
			if(userSnapDist[id] > 40.0 ){
				userSnapDist[id]=0.0;
			}
			
		}
		case 3:{
			userInteligent[id]=(userInteligent[id]+1)%sizeof(IntelligentRotating)
			
		}
		case 4:{
			userRespawn[id]=!userRespawn[id]
			if( !is_user_alive(id) )
				ExecuteHamB(Ham_CS_RoundRespawn, id);
		}
		
		case 5:{
			new ent=find_ent_by_class(ent, szBlockClassName)
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( isBlockStuck(ent) ){
					remove_entity(ent)
					continue
				}
			}
		}	
		case 6:{
			new Float:fOrigin[3]
			entity_get_vector(id, EV_VEC_origin, fOrigin )
			new Float:fOriginEnt[3]
			new Float:dist=9999.8
			new idEnt;
			new ent=find_ent_by_class(ent, szBlockClassName)
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( !pev_valid(ent) ) 
					continue
				
				entity_get_vector(ent, EV_VEC_origin, fOriginEnt )
				if( get_distance_f(fOrigin, fOriginEnt) < dist ) {
					idEnt = ent;
					dist = get_distance_f(fOrigin, fOriginEnt)
				}
			}
			if( IsBlock(idEnt) ){
				entity_get_vector(idEnt, EV_VEC_origin, fOriginEnt )
				set_pev(id, pev_origin, fOriginEnt)
				remove_entity(idEnt)
			}
		}
	}
	if( item != 0 )
		adminMenu(id)
	
	return PLUGIN_CONTINUE
}
public FunkcjaLatarki(id){
	if(userBmShorCut[id]){
		new ent, body
		get_user_aiming(id, ent, body)
		if(IsBlock(ent)) {
			new size, rotation;
			rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
			size = entity_get_int(ent, EV_INT_skin)
			setSizeAngles(ent, size, rotation, Float:{-1.0, -1.0, -1.0})
		}
	}
	return PLUGIN_HANDLED;
}
public menuLoad(id){
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\yCurrent template:\r %s\w^nLoad:", actualStyle)
	new menu=menu_create(gText, "menuLoad_2")
	
	
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	
	new szFile[32]
	new x=0;
	new folderHandle = open_dir(dataDir, szFile, charsmax(szFile));
	if(!folderHandle) 
		return;
	while(next_file(folderHandle, szFile, charsmax(szFile))){
		if(!equal(szFile, "..") && !equal(szFile, ".") &&!equal(szFile, "BackUp")) {				
			format(gText, sizeof(gText),"Load template:\y %s", szFile)
			copy(stylesMenu[x++], sizeof(stylesMenu[]), szFile)
			menu_additem(menu, gText)
			if(sizeof(stylesMenu) == x-1 )
				break
		}
	}
	menu_display(id,menu,0)
	close_dir(folderHandle)
}
public menuLoad_2(id, menu, item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	
	new ent
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( !pev_valid(ent) ){
			continue;
		}	
		remove_entity(ent)
	}
	while ( ( ent = find_ent_by_class(ent, szTeleClassName) ) ){
		if( !pev_valid(ent) ){
			continue;
		}	
		remove_entity(ent)
	}
	copy(actualStyle, sizeof(actualStyle), stylesMenu[item])
	set_task(1.0, "LoadBlocks", id)
	return PLUGIN_CONTINUE
}
public menuSave(id){
	
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\wCurrent level:\r %s\w^nSave:", actualStyle)
	new menu=menu_create(gText, "menuSave_2")
	menu_additem(menu, "\rSave as new style");	
		
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	
	
	new szFile[32]
	new x=0;
	
	new folderHandle = open_dir(dataDir, szFile, charsmax(szFile));
	if(!folderHandle) 
		return;
	while(next_file(folderHandle, szFile, charsmax(szFile))){	
			
		if(!equal(szFile, "..") && !equal(szFile, ".") && !equal(szFile, "BackUp")) {	
			if( equal(szFile, actualStyle) )
				format(gText, sizeof(gText),"Currently:\r %s", szFile)
			else format(gText, sizeof(gText),"Save as:\y %s", szFile)
			copy(stylesMenu[x++], sizeof(stylesMenu[]), szFile)
			menu_additem(menu, gText)
			
		}
	}
	
	menu_display(id,menu,0)
	close_dir(folderHandle)
}
public menuSave_2(id, menu, item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	if( item == 0 ){
		client_cmd(id, "messagemode layout")
		menuSave(id);
	}else{
		item --;
		if( !equal(actualStyle, stylesMenu[item] ) ){
			userBlockProperties[id]=item;
			meunSaveConfirmation(id)	
		}else{
			SaveBlocks(id, 0)
		}
		
	}
	return PLUGIN_CONTINUE
}
public meunSaveConfirmation(id){
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\wConfirm:^nThe map will be saved as:\y%s", stylesMenu[userBlockProperties[id]])
	new menu=menu_create(gText, "menuSaveConfirmation_2")
	
	menu_additem(menu, "\ySave")
	menu_additem(menu, "\rDon't save")
	
	menu_display(id,menu,0)
}
public menuSaveConfirmation_2(id,menu,item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	copy(actualStyle, sizeof(actualStyle), stylesMenu[userBlockProperties[id]])
	SaveBlocks(id, 0)
	adminMenu(id)
	return PLUGIN_CONTINUE
}
public MenuMoveBlock2(id)
{
	new menu[286]
	format(menu, sizeof(menu), "\
		\y[BM]^n\wMoving Blocks:^n\
		\r1.\w Move o:\y %0.1f^n^n\
		\r2.\w Move\y Up^n\
		\r3.\w Move\y Down^n\
		\r4.\w Move\y X-^n\
		\r5.\w Move\y X+^n\
		\r6.\w Move\r Y-^n\
		\r7.\w Move\r Y+^n^n\
		\r8.\w Enter your value^n\
		\r9.\w Sliding move menu^n\
		\r0.\w Exit\
	", userMoveDist[id])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "menuMoveBlockGrzyb")
	return PLUGIN_CONTINUE
}
public menuMoveBlock(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new menu=menu_create("[BM]^n\wMove Blocks", "menuMoveBlock_3")
	new gText[128]
	format(gText, sizeof(gText), "Move o:\y %0.1f", userMoveDist[id])
	menu_additem(menu, gText)
	menu_additem(menu, "Move\y X-")
	menu_additem(menu, "Move\y X+")
	menu_additem(menu, "Move\r Y-")
	menu_additem(menu, "Move\r Y+")
	menu_additem(menu, "Move\y Up")
	menu_additem(menu, "Move\y Down")
	
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id,menu, 0)
	return PLUGIN_CONTINUE
}
public menuMoveBlock_3(id, menu, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if( item == MENU_EXIT){
		adminMenu(id)
		return PLUGIN_CONTINUE
	}
	new ent,body
	
	new Float:fOrigin[3]
	if( item != 0 ){
		get_user_aiming(id,ent,body)
	
		if( IsBlock(ent) ){
			userLastMoved[id]=ent
		}
		if( !IsBlock(userLastMoved[id]) ){		
			menuMoveBlock(id)		
			return PLUGIN_CONTINUE
		}
		
		ent=userLastMoved[id];
		entity_get_vector(ent, EV_VEC_origin, fOrigin)
	}
	switch(item){
		case 0:{
			client_cmd(id, "messagemode WartoscPosuwania")
			/*if( userMoveDist[id] < 0.5 )			
				userMoveDist[id]+=0.1
			else if( userMoveDist[id] < 2.0 )
				userMoveDist[id]+=0.5			
			else if( userMoveDist[id] > 20.0 )
				userMoveDist[id]=0.1
			else userMoveDist[id]+=2.0*/
		}
		case 1: fOrigin[0]-=userMoveDist[id]
		case 2: fOrigin[0]+=userMoveDist[id]
		case 3: fOrigin[1]-=userMoveDist[id]
		case 4: fOrigin[1]+=userMoveDist[id]
		case 5: fOrigin[2]+=userMoveDist[id]
		case 6: fOrigin[2]-=userMoveDist[id]
	}
	entity_set_origin(ent, fOrigin)
	menuMoveBlock(id)
	return PLUGIN_CONTINUE
}
public menuMoveBlock_2(id, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent,body
	if( item == 9 ){
		adminMenu(id)
		return PLUGIN_CONTINUE
	}
	new Float:fOrigin[3]
	get_user_aiming(id,ent,body)
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	if( item >= 1 && item <=6){
		if( !IsBlock(ent) ){	
			MenuMoveBlock2(id)		
			return PLUGIN_CONTINUE
		}
	}
	switch(item){
		case 0:{
			if( userMoveDist[id] <= 0.1 )			
				userMoveDist[id]= 1.0
			else if( userMoveDist[id] < 32.0 )
				userMoveDist[id] = 	userMoveDist[id]*2
			else if( userMoveDist[id] >= 32.0 )
				userMoveDist[id]=0.1
			else userMoveDist[id]+=2.0
		}
		case 1: fOrigin[2]+=userMoveDist[id]
		case 2: fOrigin[2]-=userMoveDist[id]
		case 3: fOrigin[0]-=userMoveDist[id]
		case 4: fOrigin[0]+=userMoveDist[id]
		case 5: fOrigin[1]-=userMoveDist[id]
		case 6: fOrigin[1]+=userMoveDist[id]
		case 7: {
			client_cmd(id, "messagemode WartoscPosuwania")
		}
		case 8:{
			MenuObracania(id);
			return PLUGIN_CONTINUE
		}
		case 9: adminMenu(id)
	}
	entity_set_origin(ent, fOrigin)
	MenuMoveBlock2(id)
	return PLUGIN_CONTINUE
}
public ZmienWartoscPosuwania(id){
	new szCash[64];
	read_argv(1, szCash, 63)
	remove_quotes(szCash);
	new Float:Cash = str_to_float(szCash);

	userMoveDist[id] = Cash;
	
	client_print(id, 3, "You have set the Sliding power to: %0.1f", Cash);
	if(wolebmalb[id])
	{
		menuMoveBlock(id);
	}
	else
	{
		MenuMoveBlock2(id);
	}
	return PLUGIN_HANDLED;
}
public selectBlock(id){
	new iCountBlock[NUMBLOCKS]
	new ent = find_ent_by_class(-1, szBlockClassName)
	while( ent != 0 ){
		if( !IsBlock(ent) ){
			continue;
		}
		iCountBlock[entity_get_int(ent, EV_INT_body)]++;
		ent=find_ent_by_class(ent, szBlockClassName)
	}
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\yBlocks:\r %d^n\wChoose block:", NUMBLOCKS )
	new menu=menu_create(gText, "selectBlock_2")
	for( new i = 0;i <NUMBLOCKS;i++){
		format(gText, sizeof(gText), "%s\y [Numbers:\r %d\w]", blocksProperties[i][0], iCountBlock[i])
		menu_additem(menu, gText)
	}		
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id, menu, (userSelectedBlock[id]/7))
}
public selectBlock_2(id, menu, item){
	if( item == MENU_EXIT ){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}
	if( userAdminBlockTest[id] ){
		new Float:fOrigin[3]
		new ent = find_ent_by_class(-1, szBlockClassName)
		while( ent != 0 ){
			if( !IsBlock(ent) ){
				continue;
			}
			if( entity_get_int(ent, EV_INT_body) == item ){
				pev(ent ,pev_origin, fOrigin)
				set_pev(id ,pev_origin, fOrigin)
				break;
			}	
			
			ent=find_ent_by_class(ent, szBlockClassName)
		}
			
		userSelectedBlock[id]=item;
		selectBlock(id)
	}else{
		userSelectedBlock[id]=item;		
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
	}
	return PLUGIN_CONTINUE
}
public createBlockAim(id){
	
	new iLook[3]
	new Float:fLook[3]
	get_user_origin(id, iLook, 3)
	IVecFVec(iLook, fLook)
	
	fLook[2]+=4.0
	
	new ent = createBlock(userSelectedBlock[id], fLook, userSelectedSize[id], 2, Float:{ 0.0 , 0.0, 0.0 })
	setDefaultParam(ent)
	if( entity_get_int(ent,EV_INT_body) != GLASS )
		setRenderingBlock(ent)
	/*if( entity_get_int(ent,EV_INT_body) == GLASS )
		set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 40);	*/
	new closest = DoSnapping(id, ent, fLook)
	if( userSnap[id] )
		entity_set_origin(ent, fLook)
	if( IsBlock(closest) && userInteligent[id]){		
		setSizeAngles(ent, entity_get_int(ent, EV_INT_skin), entity_get_int(closest, EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })
	}
	
}
public delaySnapping(data[]){
	new iLook[3]
	new Float:fLook[3]	
	iLook[0]=data[0]
	iLook[1]=data[1]
	iLook[2]=data[2]
	IVecFVec(iLook, fLook)
	DoSnapping(data[3], data[4], fLook)
}

public createBlock(typeBlock, Float:fOrigin[3], size, rotation, Float:fAngles[3]){
	new ent = create_entity("info_target")
	if( !pev_valid(ent) )
		return -1;
		
	entity_set_string(ent, EV_SZ_classname, szBlockClassName)	
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	entity_set_int(ent, EV_INT_body, typeBlock)
	entity_set_int(ent, EV_INT_skin, size)	
	entity_set_int(ent, EV_INT_iuser1, 0)
	entity_set_int(ent, EV_INT_iuser2, 0)
	entity_set_int(ent, EV_INT_iuser3, rotation)
	
	entity_set_vector(ent, EV_VEC_angles, fAngles)
	
	entity_set_edict(ent, EV_ENT_euser1, 0 )
	
	entity_set_int(ent, EV_INT_iuser4, 255 )
	if(typeBlock==GLASS){	
		set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 40);	
	}
	entity_set_vector(ent, EV_VEC_rendercolor, Float:{255.0,255.0,255.0} )
	entity_set_model(ent, pathModelBlock(typeBlock, size))
	
	
	resetBlockData(ent)
	setDefaultParam(ent)
	
	setSizeAngles(ent, size, rotation, fAngles)
	entity_set_origin(ent, fOrigin)
	if( typeBlock == WATER ){		
		
		set_task(0.1, "makeTrigger", ent+TASK_TRIGGER)	
		//set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
	}
	return ent;
}
public makeTrigger(ent){
	ent-=TASK_TRIGGER
	
	
	if( !pev_valid(ent) )
		return PLUGIN_CONTINUE
	
	if( entity_get_int(ent, EV_INT_body) != WATER )
		return PLUGIN_CONTINUE
	static Float:fOrigin[3];
	static Float:fOriginPlayer[3];
	new bool:gNearEnt;
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	for( new i = 1; i<=33;i++){
		if( !is_user_alive(i) || !is_user_connected(i) )	
			continue
		entity_get_vector(i, EV_VEC_origin, fOriginPlayer)	
		if(get_distance_f(fOriginPlayer, fOrigin) > 150.0 )
			continue;		
		gNearEnt=true;
		break;
	}
	
	new Float:flMins[3], Float:flMaxs[3];
	pev(ent, pev_mins, flMins);
	pev(ent, pev_maxs, flMaxs);
			
	set_pev(ent, pev_solid, gNearEnt? SOLID_TRIGGER : SOLID_BBOX);
	engfunc(EngFunc_SetSize, ent, flMins, flMaxs);	
	
	set_task(0.1, "makeTrigger", ent+TASK_TRIGGER) 
	
	return PLUGIN_CONTINUE
}
public rotateBlock(ent){	
	new size, rotation;
	rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
	size = entity_get_int(ent, EV_INT_skin)
	setSizeAngles(ent, size, rotation, Float:{ 0.0 , 0.0, 0.0 })
}
public setSizeAngles(ent, size, rotation, Float:anglesR[3]){
	new Float:mins[3], Float:maxs[3], Float:angles[3];
	new Float:scale = str_to_float(blocksSize[size][2])
	switch( rotation ){
		case 0:{
			if( size != TINY ){
				mins[0] = -4.0;	
				mins[1] = -32.0;	
				mins[2] = -32.0;			
				maxs[0] = 4.0;
				maxs[1] = 32.0;
				maxs[2] = 32.0;
			}else{
				mins[0] = -32.0;
				mins[1] = -4.0;
				mins[2] = -4.0;			
				maxs[0] = 32.0;
				maxs[1] = 4.0;
				maxs[2] = 4.0;				
			}
			angles[0]=90.0;
		}
		case 1:{
			if( size != TINY ){
				mins[0] = -32.0;	
				mins[1] = -4.0;	
				mins[2] = -32.0;			
				maxs[0] = 32.0;
				maxs[1] = 4.0;
				maxs[2] = 32.0;
			}else{
				mins[0] = -4.0;
				mins[1] = -32.0;
				mins[2] = -4.0;			
				maxs[0] = 4.0;
				maxs[1] = 32.0;
				maxs[2] = 4.0;				
			}
			angles[0] = 90.0;
			angles[2] = 90.0;
		}
		case 2:{
			if( size != TINY ){
				mins[0] = -32.0;	
				mins[1] = -32.0;	
				mins[2] = -4.0;			
				maxs[0] = 32.0;
				maxs[1] = 32.0;
				maxs[2] = 4.0;
			}else{
				mins[0] = -4.0;
				mins[1] = -4.0;
				mins[2] = -32.0;			
				maxs[0] = 4.0;
				maxs[1] = 4.0;
				maxs[2] = 32.0;				
			}
			angles[0] = 0.0;
			angles[1] = 0.0;
			angles[2] = 0.0;
		}
	}
	for( new i =0 ; i < 3;i ++ ){
		if( rotation==2 && i == 2 )
			continue;
			
		if( maxs[i] == 4.0 || maxs[i] == -4.0 )
			continue
		mins[i] *= scale;
		maxs[i] *= scale;	
	}
	
	
	if(!(anglesR[0] == -1.0 && anglesR[1] == -1.0 && anglesR[2] == -1.0)) for(new i = 0; i < 3; i ++) angles[i] = anglesR[i];
	
	entity_set_int(ent, EV_INT_skin, size)
	entity_set_int(ent, EV_INT_iuser3, rotation)
	entity_set_vector(ent, EV_VEC_angles, angles)
	entity_set_size(ent, mins, maxs)
}
public pathModelBlock(typeBlock, size){
	new gText[68];
	format(gText, sizeof(gText), "models/FNJ_EasyBlocks/%s%s.mdl", blocksProperties[typeBlock][1], blocksSize[size][0])
	return gText;
}	

public IsBlock(ent){
	if( !pev_valid(ent) )
		return false;
	new szClass[12]
	entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass) )
	return (equal(szClass, szBlockClassName ) || equal(szClass, szTeleClassName )|| equal(szClass, szLightClassName ))
	
}
public IsTeleport(ent){
	if( !pev_valid(ent) )
		return false;
	new szClass[14]
	entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass) )
	return (equal(szClass, szTeleClassName ))
}
public IsLight(ent){
	if( !pev_valid(ent) )
		return false;
	new szClass[14]
	entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass) )
	return (equal(szClass, szLightClassName ))
}
public actionBhop(ent){
	if( task_exists(ent+TASK_BHOP) )
		return PLUGIN_CONTINUE
	
	
	set_task(0.1, "makeNoSolid", ent+TASK_BHOP)
	
	return PLUGIN_CONTINUE
}
public actionNoSlowBhop(id, ent){
	userNoSlow[id]=true;
	actionBhop(ent)
	if( !task_exists(TASK_NOSLOW+id) )
		remove_task(id+TASK_NOSLOW)
	set_task(0.1, "taskSlowDown", id+TASK_NOSLOW)
	
}
public actionBhopLatency(id, ent){
	if( !pev_valid(ent)){
		return PLUGIN_CONTINUE;		
	}
	
	new Float:timeBH = get_gametime();
	new Float:block = getParamBlock(ent,0)

	entity_get_float(ent, EV_FL_fuser1)
	
	if( ( userLatency[id] <= 0.0 || userLatency2[id] != ent )){
		userLatency[id] = block - (timeBH - entity_get_float(ent, EV_FL_fuser1));
		userLatency2[id] = ent
	}
	
		
	if ( task_exists(ent + TASK_BHOP )) 
		return PLUGIN_CONTINUE;
	
	entity_set_float(ent, EV_FL_fuser1, timeBH);
	
	set_task(block, "makeNoSolid", ent+TASK_BHOP)
	
	return PLUGIN_CONTINUE
}
public actionDeath(id, ent){
	if( !is_user_alive(id) )
		return PLUGIN_CONTINUE
	if( userGodMode[id] ){
		if( userCheckPoint[id] ){
			backToCheckPoint(id)
		}
		if( get_gametime()-deathTouched[id] > 0.2 ){
			static Float:fTime[ 33 ]
			new Float:fTimeNow = get_gametime();
			if( ( fTimeNow - fTime[ id ] ) >= 0.2 ){
				
				set_dhudmessage(255, 32, 32, -1.0, 0.25, 0, 0.1, 0.2, 0.1, 0.1)
				show_dhudmessage(id, "!! You touch death !!");
			
			
				fTime[ id ] = fTimeNow 	
			}	
			deathTouched[id]=get_gametime();
		}
	}else{
		if( getParamBlock(ent, 18) == 0.0 ){
			if( userSkills[id][0][0] > get_gametime() ){
				return PLUGIN_CONTINUE;
			}
		}
		/*if( get_gametime() - frost_last_time(id) < 9.0 ){	
			new freezer = frost_last_freezer(id)
			if( freezer != 0 && is_user_connected(freezer) ){
				//xp_add_mission(frost_last_freezer(id), 4, 1)
				ExecuteHamB( Ham_TakeDamage, id, frost_last_freezer(id), frost_last_freezer(id), 1000.0, DMG_GENERIC );		
				return PLUGIN_CONTINUE
			}
		}*/
		if( get_gametime() -userSlowedTime[id]  < 9.0 ){
			if( userSlowed[id] != 0 && is_user_connected(userSlowed[id]) ){		
				ExecuteHamB( Ham_TakeDamage, id,userSlowed[id], userSlowed[id], 1000.0, DMG_GENERIC );
			}
			
		}	
		fakedamage(id, "", 10000.0, DMG_GENERIC);
	}
	return PLUGIN_CONTINUE
}
public taskSlowDown(id){
	id-=TASK_NOSLOW
	userNoSlow[id]=false;
}
public actionBarrier(id, ent){	
	if( task_exists(ent+TASK_BHOP) )
		return PLUGIN_CONTINUE
	
	makeNoSolid(ent+TASK_BHOP)
	
	return PLUGIN_CONTINUE
}
public makeNoSolid(ent){
	ent-=TASK_BHOP;
	
	
	set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 25);
	//changeAlpha(ent, 40)
	entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	if( entity_get_edict(ent,EV_ENT_euser3) == 1){
		set_task(1.8, "makeSolid", ent+TASK_BHOP)
		entity_set_edict(ent,EV_ENT_euser3,0) 
	}else set_task(layoutStyle?0.8:1.0, "makeSolid", ent+TASK_BHOP)
}
public makeSolid(ent){
	ent-=TASK_BHOP;	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	setRenderingBlock(ent)
}
public actionIce(id,ent){
	if( task_exists(id+TASK_ICE) )
		return PLUGIN_CONTINUE
	
	entity_set_float(id, EV_FL_friction, 0.15);
	entity_set_float(id, EV_FL_maxspeed, 400.0);
	userOnIce[id]=true;
	set_task(0.1, "taskNoIce", id+TASK_ICE)
	return PLUGIN_CONTINUE
}
public actionMagicSpeed(id,ent){
	if( task_exists(id+TASK_ICE) )
		return PLUGIN_CONTINUE
	entity_set_float(id, EV_FL_friction, 0.9);
	userMagic[id]=true;
	set_task(0.1, "taskNoIce", id+TASK_ICE)
	return PLUGIN_CONTINUE
}

public taskNoIce(id){	
	id-=TASK_ICE	
	userOnIce[id]=false;
	userMagic[id]=false;
	entity_set_float(id, EV_FL_friction, 1.0);
}
public actionGodMode(id, ent){
	if( userSkills[id][0][1] < get_gametime() ){
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}
		
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		userSkills[id][0][0]=get_gametime()+getParamBlock(ent,9)
		userSkills[id][0][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		emit_sound(id, CHAN_WEAPON, soundsNames[1], 1.0, ATTN_NORM, 0, PITCH_NORM)	
	}else if( userSkills[id][0][1] > get_gametime() && userSkills[id][0][0] < get_gametime() ) {
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][0]=true;
	}
}
public actionInvisible(id, ent){
	if( userSkills[id][1][1] < get_gametime() ){
		
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}
		
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		if( userSkills[id][1][0] - get_gametime() <= 0.0 )
			userSkills[id][1][0]=get_gametime()+getParamBlock(ent,9)
		else{
			change_task(id+TASK_VISIBLE, userSkills[id][1][0] - get_gametime()+getParamBlock(ent,9))
		}
			
		userSkills[id][1][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		setRenderingPlayer(0, id, 255,255,255,0)
		set_task(getParamBlock(ent,9), "userVisible", id+TASK_VISIBLE)		
		emit_sound(id, CHAN_WEAPON, soundsNames[2], 1.0, ATTN_NORM, 0, PITCH_NORM)	
		
	}else if( userSkills[id][1][1] > get_gametime()  && userSkills[id][1][0] < get_gametime() ) {
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][1]=true;
	}
}
public userVisible(id){
	id-=TASK_VISIBLE
	setRenderingPlayer(0, id, 255,255,255,255)
}
public actionGun(id, ent){
	
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 11)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 11))
		new weapon = find_ent_by_owner(-1, weaponsGive[weaponToGive], id)
		if( weapon ){
			cs_set_weapon_ammo(weapon, cs_get_weapon_ammo(weapon)+floatround(getParamBlock(ent, 13)));
		}else{
			new weapon=give_item(id, weaponsGive[weaponToGive])
			cs_set_weapon_ammo(weapon, floatround(getParamBlock(ent, 13)));
			
		}
		emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
		setUsed(id,ent)
	}	
}
public actionGrenade(id, ent){
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 17)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 17))
		
		new weapon = find_ent_by_owner(-1, grenadesGive[weaponToGive], id)
		if( !weapon ){
			give_item(id, grenadesGive[weaponToGive])		
			cs_set_user_bpammo(id , cswGrenade[weaponToGive] , floatround(getParamBlock(ent, 13)));
			emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setUsed(id,ent)
		}else{
			//if( floatround(getParamBlock(ent, 17)) == 2 ){
				cs_set_user_bpammo(id, cswGrenade[weaponToGive], cs_get_user_bpammo(id, cswGrenade[weaponToGive])+floatround(getParamBlock(ent, 13)));
				
				emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
				setUsed(id,ent)
		}
		
	}
}
public actionBoots(id, ent){
	if( userSkills[id][2][1] < get_gametime() ){
		
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}	
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		
		userSkills[id][2][0]=get_gametime()+getParamBlock(ent,9)	
		userSkills[id][2][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		emit_sound(id, CHAN_WEAPON, soundsNames[6], 1.0, ATTN_NORM, 0, PITCH_NORM)
	}else if( userSkills[id][2][1] > get_gametime()  && userSkills[id][2][0] < get_gametime() ){
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][2]=true;
	}
}
public actionMusic(id, ent){
	if( get_gametime() - pev(ent, pev_fuser1) >= 22.0 ){
		set_pev(ent, pev_euser4, random(sizeof(blockMusic)))
		emit_sound(ent, CHAN_WEAPON, blockMusic[pev(ent, pev_euser4)][0], 1.0, ATTN_NORM, 0, PITCH_NORM)
		set_pev(ent, pev_fuser1, get_gametime())
	}
	
}
public actionCamouflage(id, ent){
	if( userSkills[id][3][1] < get_gametime() ){
		
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}		
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		
		cs_set_user_model(id, modelCamouflage[random(4)+(4*(get_user_team(id)==1?1:0))])
		userSkills[id][3][0]=get_gametime()+getParamBlock(ent,9)	
		userSkills[id][3][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		emit_sound(id, CHAN_WEAPON, soundsNames[7], 1.0, ATTN_NORM, 0, PITCH_NORM)
		set_task(getParamBlock(ent,9), "turnOffCamouflage",id+TASK_CAMOUFLAGE)
	}else if( userSkills[id][3][1] > get_gametime() && userSkills[id][3][0] < get_gametime() ){ 
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}		
		userSkillsRenew[id][3]=true;
	}

}
public turnOffCamouflage(id){
	id-=TASK_CAMOUFLAGE
	cs_set_user_model(id, modelCamouflage[random(4)+(4*(get_user_team(id)==1?0:1))])
}
public numPlayers(){
	new iNum = 0;
	for(new i = 1 ; i < 33 ; i ++ ){
		if( !is_user_connected(i) || is_user_hltv(i) )
			continue
		iNum++
	}		
	return iNum
}
public actionPoints(id, ent){
	
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 11)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 11))
		new weapon = find_ent_by_owner(-1, weaponsGive[weaponToGive], id)
		if( weapon ){
			cs_set_weapon_ammo(weapon, cs_get_weapon_ammo(weapon)+floatround(getParamBlock(ent, 13)));			
			emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setUsed(id,ent)
		}
	}	
}
public actionAmmo(id, ent){
	
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 11)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 11))
		new weapon = find_ent_by_owner(-1, weaponsGive[weaponToGive], id)
		if( weapon ){
			cs_set_weapon_ammo(weapon, cs_get_weapon_ammo(weapon)+floatround(getParamBlock(ent, 13)));			
			emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setUsed(id,ent)
		}
	}	
}
public actionPotion(id, ent){	
	if( !blockUsed(id,ent) ){
		if( get_user_health(id)){
			//new health=min(get_user_health(id) + floatround( getParamBlock(ent,5) ))
			//set_user_health(id, health )
			//setUsed(id,ent)			
			//emit_sound(ent, CHAN_WEAPON, soundsNames[12], 1.0, ATTN_NORM, 0, PITCH_NORM)
		}
		
	}	
}
public actionGravity(id, ent){
	set_user_gravity(id, getParamBlock(ent, 21));
	
	g_low_gravity[id] = true;
	g_low_trampoline[id] = true;
}
public ActionTimerStart(id, ent)
{
	CzasTimera[id] = 0
	if(ZatrzymanyTimer[id]){
		ZatrzymanyTimer[id] = false;
		OdpalTimer(id);
	}
}
public ActionTimerStop(id, ent)
{
	if(!ZatrzymanyTimer[id]){
		new name[33];
		get_user_name(id, name, sizeof(name))
		if(getParamBlock(ent, 26) >= CzasTimera[id])	OdpalNagrode(id);
		if(getParamBlock(ent, 27) >= CzasTimera[id])	ColorChat(0, GREEN, "^x01 Player^x04 %s^x01 finished ahead of time^x04 [^x01%is^x04]", name, CzasTimera[id])
		ZatrzymanyTimer[id] = true;
		CzasTimera[id] = 0
	}
}
public OdpalNagrode(id){
	if(!NagrodaTimer[id]){
		NagrodaTimer[id] = true;
		
		if(get_user_team(id) == 1){
			new MenuBody[512], len, keys;
			len = format(MenuBody, (sizeof MenuBody - 1), "\r[BM]\y Collect your reward^n\wPrize Menu");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n^n\r1.\w Flash Grenade chance:\y	[100%]");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n\r2.\w Flash Grenade chance:\y	[100%]");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n\r3.\w Frost Grenade chance:\y	[50%]");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n\r4.\w HE Grenade chance:\y	[25%]");
			
			keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4);
			
			show_menu(id, keys, MenuBody, -1, "NagrodaMenu");
		}
	}
}
public HandleNagrodaMenu(id, key)
{
	switch(key + 1)
	{
		case 1: give_item(id, "weapon_flashbang");
		/*{
			new MAXHP = pobierz_MAXHP(id)
			if(get_user_health(id) == MAXHP+100){
				NagrodaTimer[id] = false;
				OdpalNagrode(id);
			}
			set_user_health(id, MAXHP+100)
		}*/
		case 2:	give_item(id, "weapon_flashbang");
		case 3:
		{
			new los = random_num(1,2)
			if(los == 1)	give_item(id, "weapon_smokegrenade");
		}
		case 4: 
		{
			new los = random_num(1,4)
			if(los == 1)	give_item(id, "weapon_hegrenade");
		}
	}
	return 1;
}
public OdpalTimer(id)
{
	set_task(1.0, "Timer", id);
}
public Timer(id)
{
	if(ZatrzymanyTimer[id])
		return PLUGIN_HANDLED;
	
	set_task(1.0, "Timer", id);
	
	CzasTimera[id] ++;
	
	return PLUGIN_HANDLED;
}
public actiondodatkoweS(id, ent){
	addjb[id] = floatround(getParamBlock(ent, 22))
	dwajumpy[id] = true;
	
	static Float:fTime[ 33 ]
	new Float:fTimeNow = get_gametime();
	if( ( fTimeNow - fTime[ id ] ) >= 0.2 ){
		
		set_dhudmessage(64, 64, 255, -1.0, 0.25, 0, 0.1, 0.2, 0.1, 0.1)
		show_dhudmessage(id, "!! You have %d %s !!", floatround(getParamBlock(ent, 22)), floatround(getParamBlock(ent, 22)) == 1 ? "extra jump" : "extra jumps")
	
		fTime[ id ] = fTimeNow 	
	}
	static bool:dowybicia;
	dowybicia = bool:(pev(id, pev_button) & IN_JUMP);
	
	if(dowybicia){
		if(pev(id, pev_velocity, userAddVelocity[id] ) ){
			userAddVelocity[id][2] = getParamBlock(ent, 24);
		}
	}
}
public actionSpamBH(id, ent){
	if(pev(id, pev_velocity, userAddVelocity[id] ) ){
		userAddVelocity[id][2] = 250.0;
	}
}
public actionFeniks(id, ent){
	if( userSkills[id][4][1] < get_gametime() ){
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}
			
		feniks[id] = true;
		if(feniks[id]){
			set_task(0.1, "setFeniks", id + TASK_FENIKS)
		}
		set_task(getParamBlock(ent,9), "wylaczogien", id)
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		userSkills[id][4][0]=get_gametime()+getParamBlock(ent,9)
		userSkills[id][4][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 15);
		set_task(getParamBlock(ent,9), "userVisible", id+TASK_VISIBLE)
		emit_sound(id, CHAN_WEAPON, soundsNames[14], 1.0, ATTN_NORM, 0, PITCH_NORM)	
	}else if( userSkills[id][4][1] > get_gametime() && userSkills[id][4][0] < get_gametime() ) {
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][4]=true;
	}
}
public wylaczogien(id){
    feniks[id] = false;
    remove_task(id + TASK_FENIKS);
}
public setFeniks(id)
{
    id -= TASK_FENIKS
    new origin[3];
    get_user_origin(id, origin, 0);

    message_begin(MSG_BROADCAST, SVC_TEMPENTITY, origin)
    write_byte(TE_EXPLOSION)
    write_coord(origin[0])
    write_coord(origin[1])
    write_coord(origin[2])
    write_short(sprite_fire)
    write_byte(5)
    write_byte(15)
    write_byte(4)
    message_end()
    displayFade(id, 512,512,512,250,150, 30, 50);
    set_task(0.2, "setFeniks", id + TASK_FENIKS)

}
public ThinkSpritesBlock(ent)
{
	if(!pev_valid(ent))
		return
	
	new Frame = floatround(entity_get_float(ent, EV_FL_frame)+1.0)%15
	entity_set_float(ent, EV_FL_frame, float(Frame))
	entity_set_float(ent, EV_FL_nextthink, get_gametime() +0.1)
}
public thinkWater(ent)
{
	static entinsphere, Float:origin[3], bool:ent_near;
	entity_get_vector(ent, EV_VEC_origin, origin);
	
	entinsphere = -1;
	ent_near = false;
	while ( ( entinsphere = find_ent_in_sphere(entinsphere, origin, 64.0) ) )
	{
		if ( 1 <= entinsphere <= 33 && is_user_alive(entinsphere))
		{
			ent_near = true;
			break;
		}
	}
	
	if ( ent_near )
	{
		if(entity_get_int(ent, EV_INT_solid) != SOLID_TRIGGER)
		{
			SetSolidTrigger(ent);
			entity_set_float(ent, EV_FL_nextthink, get_gametime() + 1.0);
			return 1;
		}
	}
	else if(entity_get_int(ent, EV_INT_solid) == SOLID_TRIGGER)
		SetSolidAgain(ent+TASK_SOLIDTRIGGER);
	
	entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1);
	return 1;
}
public SetSolidTrigger(ent)
{
	new Float:fMins[3], Float:fMaxs[3];
	entity_get_vector(ent, EV_VEC_mins, fMins);
	entity_get_vector(ent, EV_VEC_maxs, fMaxs);
	
	entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER);
	
	entity_set_size(ent, fMins, fMaxs);
}

public SetSolidAgain(ent)
{	
	ent -= TASK_SOLIDTRIGGER;
	
	new Float:fMins[3], Float:fMaxs[3];
	entity_get_vector(ent, EV_VEC_mins, fMins);
	entity_get_vector(ent, EV_VEC_maxs, fMaxs);
	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
	
	entity_set_size(ent, fMins, fMaxs);
}
public actionWater(id, ent){
	if(!( id >= 1 || id <= 33 ) || !is_user_alive(id))
		return 1;
	
	/*if(gfNextWaterSound[id] < fGameTime)
	{
		emit_sound(ent, CHAN_STATIC, g_sound_water[random_num(1, charsmax(g_sound_water))], 1.0, ATTN_NORM, 0, PITCH_NORM);
		gfNextWaterSound[id] = get_gametime() + 1.5;
	}*/
	
	pev(id, pev_velocity, userAddVelocity[id]);
	
	if(userAddVelocity[id][0] > 250.0) 
		userAddVelocity[id][0] *= 0.95;
	if(userAddVelocity[id][1] > 250.0) 
		userAddVelocity[id][1] *= 0.95;
	
	static bool:bPressingSpace;
	bPressingSpace = bool:(pev(id, pev_button) & IN_JUMP);
	
	static Float:fOrigin[3], Float:fPlayerOrigin[3];
	pev(ent, pev_origin, fOrigin);
	pev(id, pev_origin, fPlayerOrigin);
	
	if(getParamBlock(ent, 1))
	{
		if(fPlayerOrigin[2] < fOrigin[2])
			return 1;
	}
	
	if(bPressingSpace)
		userAddVelocity[id][2] = getParamBlock(ent, 16);
	else
		userAddVelocity[id][2] = - SpeedInWater;
		
	return 1;
	/*new Float:flOrigin[3];
	pev(ent, pev_origin, flOrigin);
	
	if (pev(id, pev_button) & IN_JUMP)
	{
		new Float:flAbsMin[3];
		pev(id, pev_absmin, flAbsMin);
		
		new Float:flProp1=getParamBlock(ent,15)
		new Float:flProp2=getParamBlock(ent,16)
		
		if (flAbsMin[2] > flOrigin[2] - 1.5 && getParamBlock(ent, 1)==1.0)
		{
			pev(id, pev_velocity, userAddVelocity[id]);
			if (userAddVelocity[id][0] >= flProp2) userAddVelocity[id][0] *= 0.95;
			if (userAddVelocity[id][1] >= flProp2) userAddVelocity[id][0] *= 0.95;
			userAddVelocity[id][2] = flProp1;
		}
		else if (getParamBlock(ent, 1) == 0.0)
		{
			pev(id, pev_velocity, userAddVelocity[id]);
			if (userAddVelocity[id][0] >= flProp2) userAddVelocity[id][0] *= 0.95;
			if (userAddVelocity[id][1] >= flProp2) userAddVelocity[id][0] *= 0.95;
			userAddVelocity[id][2] = flProp1;
		}
		else if (!(pev(id, pev_flags) & FL_ONGROUND))
			userAddVelocity[id][2] -= 75.0;
	}
	else if (!(pev(id, pev_flags) & FL_ONGROUND))
		userAddVelocity[id][2] -= 75.0;*/
}
public propertiesBlock(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent = userBlockProperties[id]
	new typeBlock=entity_get_int(ent, EV_INT_body)
	new gText[128],  iLen=0
	new Float:fValue;
	new type = entity_get_int(ent, EV_INT_body);
	format(gText, sizeof(gText), "[BM]^n\wBlock:\r %s", blocksProperties[type][0]);
	new menu = menu_create(gText, "propertiesBlock_2")
	menu_additem(menu, "\yLoad settings" )
	format( gText, sizeof(gText), "Rendering:\y %s",propertiesRendering[entity_get_edict(ent, EV_ENT_euser1)] )
	menu_additem(menu, gText)
	menu_additem(menu, "\rSet settings^n ")
	
	for( new i = 2; i <sizeof(blocksProperties[]);i ++ ){
		if( str_to_num(blocksProperties[type][i]) == -1 )
			break;
		
		new param = str_to_num(blocksProperties[type][i])
		fValue=getParamBlock(ent, param)
		iLen=0;
		iLen = format(gText[iLen], sizeof(gText)-iLen-1, "%s:\y ", propertiesName[str_to_num(blocksProperties[type][i])][0])
		if( equal(propertiesName[param][1], "bool" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", fValue == 0.0 ? "\dNo" : "Yes" )
		else if( equal(propertiesName[param][1], "weapon" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", floatround(fValue) == -1 ? "Random Weapon" : weaponsName[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "grenade" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", floatround(fValue) == -1 ? "Random Grenade" : grenadesName[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "team" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", forWho[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "Coiny" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", forCoi[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "int" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%d", floatround(fValue) )
		else if( typeBlock == GRAVITY ) iLen += format(gText[iLen],	sizeof(gText)-iLen-1, "%0.2f^n", fValue*1000)
		else iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%0.2f", fValue )
		menu_additem(menu, gText )
	}	
	menu_display(id, menu, 0)
	return PLUGIN_CONTINUE
}
public propertiesBlock_2(id, menu, item ){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if(item==MENU_EXIT){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}
	userBlockParamChange[id]=-1;
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
					
				
			if( !IsBlock(ent) ){
				propertiesBlock(id)
				return PLUGIN_CONTINUE
			}
			userBlockProperties[id]=ent;
			propertiesBlock(id)	
		}
		case 1:{
			changeRendering(id)
		}
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			
				
			if( !IsBlock(ent) || !IsBlock(userBlockProperties[id])){
				propertiesBlock(id)
				return PLUGIN_CONTINUE
			}
			copyDataBlock(userBlockProperties[id], ent)
			
			propertiesBlock(id)	
		}
		default:{
			item--;
			new ent = userBlockProperties[id]
			if( !IsBlock(ent) ){
				if(wolebmalb[id])
				{
					blockMaker(id)
				}
				else
				{
					GrzyboblockMaker(id)
				}
				return PLUGIN_CONTINUE
			}
			new type = entity_get_int(ent, EV_INT_body)
			new param = str_to_num(blocksProperties[type][item])
			if( equal(propertiesName[param][1], "bool" ) ){
				if(getParamBlock(ent, param) == 0.0 )
					setParamBlock(ent, param, 1.0)
				else setParamBlock(ent, param, 0.0)
				propertiesBlock(id)
			}else if( equal(propertiesName[param][1], "team" ) ){ 
				new value = (floatround(getParamBlock(ent, param))+1)%sizeof(forWho)
				setParamBlock(ent, param, float(value))				
				propertiesBlock(id)
			}else if( equal(propertiesName[param][1], "Coiny" ) ){
				new value = (floatround(getParamBlock(ent, param))+1)%sizeof(forCoi)
				setParamBlock(ent, param, float(value))				
				propertiesBlock(id)
			}else if( equal(propertiesName[param][1], "weapon" ) ){				
				userBlockParamChange[id]=param;
				weaponSelect(id)
			}else if( equal(propertiesName[param][1], "grenade" ) ){				
				userBlockParamChange[id]=param;
				grenadeSelect(id)
			}else{
				userBlockParamChange[id]=param;
				client_cmd(id, "messagemode value")
				
				propertiesBlock(id)
			}
		}
	}
	return PLUGIN_CONTINUE;
}
public weaponSelect(id){
	new actual=floatround(getParamBlock(userBlockProperties[id], userBlockParamChange[id]))
	new gText[64]
	new menu=menu_create("[BM]^n\wChoose a weapon", "weaponSelect_2")
	format(gText, sizeof(gText), "Random weapon%s", actual==-1?"\y (Currently)\r*":"")
	menu_additem(menu, gText)
	for( new i = 0;i < sizeof(weaponsName); i ++){
		format(gText, sizeof(gText), "%s%s", weaponsName[i], i==actual?"\y (Currently)\r*":"")
		menu_additem(menu, gText)
	}
	menu_display(id, menu, 0)
}
public weaponSelect_2(id,menu,item){
	if(item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	if( item == 0 )		
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], -1.0)
	else{
		item --;
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], float(item))
	}
	propertiesBlock(id)
	return PLUGIN_CONTINUE
}
public grenadeSelect(id){
	new actual=floatround(getParamBlock(userBlockProperties[id], userBlockParamChange[id]))
	new gText[64]
	new menu=menu_create("[BM]^n\wChoose a grenade", "grenadeSelect_2")
	
	format(gText, sizeof(gText), "Random grenade%s", actual==-1?"\y (Currently)\r*":"")
	menu_additem(menu, gText)
	for( new i = 0;i < sizeof(grenadesName); i ++){
		format(gText, sizeof(gText), "%s%s", grenadesName[i], i==actual?"\y (Currently)\r*":"")
		menu_additem(menu, gText)
	}
	menu_display(id, menu, 0)
}
public grenadeSelect_2(id,menu,item){
	if(item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	if( item == 0 )		
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], -1.0)
	else{
		item --;
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], float(item))
	}
	propertiesBlock(id)
	return PLUGIN_CONTINUE
}
public changeRendering(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent = userBlockProperties[id]
	if( !IsBlock(ent) ){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}

	new menu = menu_create("[BM]^n\wRendering", "changeRendering_2")
	
	menu_additem(menu, "\yRendering")

	new gText[128]
	if( !IsLight(ent) ){
		format( gText, sizeof(gText), "Type of rendering:\y %s^n", propertiesRendering[entity_get_edict(ent, EV_ENT_euser1)]  )
		menu_additem(menu, gText)
		new Float:fColor[3]
		entity_get_vector(ent, EV_VEC_rendercolor, fColor);
		
		format( gText, sizeof(gText), "Red:\y %d", floatround(fColor[0]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Green:\y %d", floatround(fColor[1]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Blue:\y %d^n", floatround(fColor[2]) )
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Alpha:\y %d", entity_get_int(ent, EV_INT_iuser4) )
		menu_additem(menu, gText)
		menu_additem(menu, "\rSet rendering")
	}else{
		new Float:fColor[3]
		entity_get_vector(ent, EV_VEC_rendercolor, fColor);
		
		format( gText, sizeof(gText), "Red:\y %d", floatround(fColor[0]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Green:\y %d", floatround(fColor[1]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Blue:\y %d", floatround(fColor[2]) )
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Range:\y %d", entity_get_edict(ent, EV_ENT_euser1) )
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Brightness:\y %d", entity_get_int(ent, EV_INT_iuser4)  )
		menu_additem(menu, gText)
	}
	menu_display(id, menu, 0)
	
	return PLUGIN_CONTINUE
}
public changeRendering_2(id, menu, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if( item == MENU_EXIT ){
		propertiesBlock(id)
		return PLUGIN_CONTINUE
	}
	userBlockParamChange[id]=-1;
	userBlockColorChange[id]=-1;
	new ent = userBlockProperties[id]
	if( IsLight(ent) ){
		switch(item){	
			case 0:{
				new ent, body
				get_user_aiming(id, ent, body)
						
					
				if( !IsBlock(ent) ){
					changeRendering(id)
					return PLUGIN_CONTINUE
				}
				userBlockProperties[id]=ent;
				changeRendering(id)
			}
			default:{
				userBlockColorChange[id] = item-1;
				client_cmd(id, "messagemode value")
				changeRendering(id)
			}
		}	
	}else{
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
					
				
			if( !IsBlock(ent) ){
				changeRendering(id)
				return PLUGIN_CONTINUE
			}
			userBlockProperties[id]=ent;
			changeRendering(id)
		}
		case 1:{
			entity_set_edict( ent, EV_ENT_euser1, (entity_get_edict(ent, EV_ENT_euser1)+1)%sizeof(propertiesRendering) )
			setRenderingBlock(ent)
			changeRendering(id)	
		}
		case 6:{
			if( !IsBlock(ent) ){
				changeRendering(id)
				return PLUGIN_CONTINUE;
			}		
			
						
			new entNew, body
			get_user_aiming(id, entNew, body)	
				
			if( !IsBlock(entNew) ){
				changeRendering(id)
				return PLUGIN_CONTINUE
			}
			
			new Float:fColor[3]	
			entity_get_vector( ent, EV_VEC_rendercolor, fColor)	
			
			entity_set_edict(entNew, EV_ENT_euser1, entity_get_edict(ent, EV_ENT_euser1) )
			entity_set_int(entNew, EV_INT_iuser4, entity_get_int(ent, EV_INT_iuser4) )
			entity_set_vector(entNew, EV_VEC_rendercolor, fColor )
			
			setRenderingBlock(entNew)
			changeRendering(id)
			
		}
		default:{
			userBlockColorChange[id] = item-2
			client_cmd(id, "messagemode value")
			changeRendering(id)
		}
	}
	}
	return PLUGIN_CONTINUE
}
public getNewLayout(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new szArg[33]
	read_argv(1, szArg, sizeof(szArg))
	remove_quotes(szArg)
	copy(actualStyle, sizeof(actualStyle), szArg);
	setLevel()
	SaveBlocks(id, 0)
	return PLUGIN_CONTINUE
}
public getTextValue(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent = userBlockProperties[id]
	if( !IsBlock(ent) ){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}
	new szArg[8]
	read_argv(1, szArg, sizeof(szArg))
	remove_quotes(szArg)
	if( userBlockParamChange[id] != -1 ){
		if( userBlockParamChange[id] == -2 ){
			new value=str_to_num(szArg)
			setEditBlock(userBlockProperties[id], 2, (value%100) )
			userCampSave[id][2]= (value%100)
			editCamp(id)
			
		}else{
			if( userBlockParamChange[id] == 12 && !IsTeleport(ent)){
				new value=str_to_num(szArg)
				setParamBlock(ent, userBlockParamChange[id], float(value%150) )					
			}else setParamBlock(ent, userBlockParamChange[id], str_to_float(szArg) )
			
			
			
			if( IsTeleport(ent) ){
				if( IsTeleport(entity_get_int(ent, EV_INT_iuser1)) )
					setParamBlock(entity_get_int(ent, EV_INT_iuser1), userBlockParamChange[id], str_to_float(szArg) )
				menuParamTele(id)
			}else propertiesBlock(id)
			
			userBlockParamChange[id]=-1
		}
	}else if( userBlockColorChange[id] != -1 ){
		if( IsLight(ent) ){
			if(userBlockColorChange[id]<3){
				new Float:fColor[3]
				entity_get_vector(ent, EV_VEC_rendercolor, fColor)
				fColor[userBlockColorChange[id]] = str_to_float(szArg)
			
				entity_set_vector(ent, EV_VEC_rendercolor, fColor)
			}else if(userBlockColorChange[id]==3)
				entity_set_edict(ent, EV_ENT_euser1, str_to_num(szArg) )
			else if(userBlockColorChange[id]==4)
				entity_set_int(ent, EV_INT_iuser4, str_to_num(szArg) ) 
			changeRendering(id)	
			userBlockColorChange[id]=-1
		}else{
			new Float:fColor[3]
			entity_get_vector(ent, EV_VEC_rendercolor, fColor)
			if( userBlockColorChange[id] == 3 )
				entity_set_int( ent, EV_INT_iuser4, str_to_num(szArg) )
			else fColor[userBlockColorChange[id]] = str_to_float(szArg)
			entity_set_vector(ent, EV_VEC_rendercolor, fColor)
			
			setRenderingBlock(ent)
			changeRendering(id)	
			userBlockColorChange[id]=-1
		}
	}
	return PLUGIN_CONTINUE
}
public changeAlpha(ent, alpha){
	new Float:fColor[3]	
	entity_get_vector( ent, EV_VEC_rendercolor, fColor)
	
	new type = entity_get_edict(ent, EV_ENT_euser1)
	setRendering(type, ent, floatround(fColor[0]), floatround(fColor[1]), floatround(fColor[2]), alpha)
}
public setRenderingBlock(ent){
	new Float:fColor[3]	
	entity_get_vector( ent, EV_VEC_rendercolor, fColor)
	
	new type = entity_get_edict(ent, EV_ENT_euser1)
	new alpha = entity_get_int(ent, EV_INT_iuser4)
	setRendering(type, ent, floatround(fColor[0]), floatround(fColor[1]), floatround(fColor[2]), alpha)
}	
public setRenderingPlayer(type, ent, red, green, blue, alpha){
	set_rendering(ent, kRenderFxNone, red, green, blue, kRenderTransAlpha, alpha);
}
public setRendering(type, ent, red, green, blue, alpha){	
	switch(type){
		case 1:		set_rendering(ent, kRenderFxNone, red, green, blue, kRenderTransColor, alpha);
		case 2:		set_rendering(ent, kRenderFxGlowShell, red, green, blue, kRenderTransColor, alpha);	
		case 3:		set_rendering(ent, kRenderFxHologram, red, green, blue, kRenderTransColor, alpha);
		case 4:		set_rendering(ent, kRenderFxNone, red, green, blue, kRenderTransAdd, alpha);		
		default:{
			if( entity_get_int(ent, EV_INT_body) != GLASS )
				set_rendering(ent, kRenderFxNone, red, green, blue, kRenderNormal, alpha);
			else{
				entity_set_int(ent, EV_INT_rendermode, 5);
				entity_set_float(ent, EV_FL_renderamt, 255.0);
			}
		}
	}
}	
public cmdHookGrab(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent, body
	userLength[id]=get_user_aiming(id, ent, body)
	if( !IsBlock(ent) ){
		return PLUGIN_CONTINUE
	}
	if( !IsTeleport(ent) )
		if( entity_get_int(ent, EV_INT_iuser1) != 0 )
			return PLUGIN_CONTINUE
		
	if( !IsTeleport(ent) )
		entity_set_int(ent, EV_INT_iuser1, id)
	//entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	userEntGrab[id]=ent;	
	
	new iOrigin[3]
	new Float:fOrigin[3], Float:fOriginEnt[3]
	get_user_origin(id, iOrigin, 3)
	entity_get_vector(ent, EV_VEC_origin, fOriginEnt)
	IVecFVec(iOrigin, fOrigin)
	userEntOffset[id][0] = fOriginEnt[0]-fOrigin[0]
	userEntOffset[id][1] = fOriginEnt[1]-fOrigin[1]
	userEntOffset[id][2] = fOriginEnt[2]-fOrigin[2]
	return PLUGIN_CONTINUE
	/*if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent, body
	userLength[id]=get_user_aiming(id, ent, body)
	if( !IsBlock(ent) ){
		return PLUGIN_CONTINUE
	}
	if( !IsTeleport(ent) ){
		if( entity_get_int(ent, EV_INT_iuser1) != 0 )
			return PLUGIN_CONTINUE
		entity_set_int(ent, EV_INT_iuser1, id)
	}else{
		if( entity_get_int(ent, EV_INT_iuser3) != 0 )
			return PLUGIN_CONTINUE
			
		entity_set_int(ent, EV_INT_iuser3, id)			
	}
	//entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	userEntGrab[id]=ent;	
	
	new iOrigin[3]
	new Float:fOrigin[3], Float:fOriginEnt[3]
	get_user_origin(id, iOrigin, 3)
	entity_get_vector(ent, EV_VEC_origin, fOriginEnt)
	IVecFVec(iOrigin, fOrigin)
	userEntOffset[id][0] = fOriginEnt[0]-fOrigin[0]
	userEntOffset[id][1] = fOriginEnt[1]-fOrigin[1]
	userEntOffset[id][2] = fOriginEnt[2]-fOrigin[2]
	return PLUGIN_CONTINUE*/
}
public cmdReleaseGrab(id){
	if( !IsBlock(userEntGrab[id]) ){
		userEntGrab[id]=-1;
		return PLUGIN_CONTINUE
	}
	if( isBlockStuck(userEntGrab[id]) ){	
		ColorChat(id, TEAM_COLOR, "[BM]^x01 The block has been removed")
		remove_entity(userEntGrab[id])
		userEntGrab[id]=-1;
		return PLUGIN_CONTINUE
	}
	
	if( !pev_valid(userEntGrab[id]) || userEntGrab[id] == -1 )
		return PLUGIN_CONTINUE
		
	//entity_set_int(userEntGrab[id], EV_INT_solid, SOLID_BBOX)
	if( !IsTeleport(userEntGrab[id]) )
		entity_set_int(userEntGrab[id], EV_INT_iuser1, 0)
	else entity_set_int(userEntGrab[id], EV_INT_iuser3, 0)
	userEntGrab[id]=-1;
	return 1;
}
public moveGrabbedEnt(id)
{
	static iAiming[3]
	static iLook[3]
	static Float:fAiming[3]
	static Float:fLook[3]
	
	get_user_origin(id, iAiming, 1)
	get_user_origin(id, iLook, 3 )
	IVecFVec(iAiming, fAiming)
	IVecFVec(iLook, fLook)
	
	static Float:fOrigin[3]
	static Float:fVector[3]
	static Float:fLength;
	
	fLength = get_distance_f(fLook, fAiming);	
	
	if(fLength == 0.0) 
		fLength = 1.0;
	
	fVector[0] = fLook[0]-fAiming[0]
	fVector[1] = fLook[1]-fAiming[1]
	fVector[2] = fLook[2]-fAiming[2]
	
	fOrigin[0] = ( fAiming[0] + fVector[0] * userLength[id]/fLength) + userEntOffset[id][0]
	fOrigin[1] = ( fAiming[1] + fVector[1] * userLength[id]/fLength) + userEntOffset[id][1]
	fOrigin[2] = ( fAiming[2] + fVector[2] * userLength[id]/fLength) + userEntOffset[id][2]
	fOrigin[2] = float(floatround(fOrigin[2],  floatround_floor))
	
	moveEnt(id, userEntGrab[id], fOrigin )
}
public moveEnt(id, ent, Float:move_to[3])
{
	if( !IsBlock(ent) ){	
		userEntGrab[id]=-1;
		return PLUGIN_CONTINUE;
	}
	if ( userSnap[id] ) 
		DoSnapping(id, ent, move_to);
	entity_set_origin(ent, move_to);		
	return PLUGIN_CONTINUE
}
public DoSnapping(id, ent, Float:move_to[3])
{
	new traceline;
	new closest_trace;
	new block_face;
	new Float:snap_size;
	new Float:v_return[3];
	new Float:dist;
	new Float:old_dist;
	new Float:trace_start[3];
	new Float:trace_end[3];
	new Float:size_min[3];
	new Float:size_max[3];
	
	entity_get_vector(ent, EV_VEC_mins, size_min);
	entity_get_vector(ent, EV_VEC_maxs, size_max);
	
	snap_size =userSnapDist[id]+10.0;
	old_dist = 9999.9;
	closest_trace = 0;
	for ( new i = 0; i < 6; ++i )
	{
		trace_start = move_to;
		
		switch ( i )
		{
			case 0: trace_start[0] += size_min[0];
			case 1: trace_start[0] += size_max[0];
			case 2: trace_start[1] += size_min[1];
			case 3: trace_start[1] += size_max[1];
			case 4: trace_start[2] += size_min[2];
			case 5: trace_start[2] += size_max[2];
		}
		
		trace_end = trace_start;
		
		switch ( i )
		{
			case 0: trace_end[0] -= snap_size;
			case 1: trace_end[0] += snap_size;
			case 2: trace_end[1] -= snap_size;
			case 3: trace_end[1] += snap_size;
			case 4: trace_end[2] -= snap_size;
			case 5: trace_end[2] += snap_size;
		}
		
		traceline = trace_line(ent, trace_start, trace_end, v_return);
		if ( IsBlock(traceline) )
		{
			dist = get_distance_f(trace_start, v_return);
			if ( dist < old_dist )
			{
				closest_trace = traceline;
				old_dist = dist;
				
				block_face = i;
			}
		}
	}
	
	if ( !is_valid_ent(closest_trace) ) return PLUGIN_HANDLED;
	
	static Float:trace_origin[3];
	static Float:trace_size_min[3];
	static Float:trace_size_max[3];
	
	entity_get_vector(closest_trace, EV_VEC_origin, trace_origin);
	entity_get_vector(closest_trace, EV_VEC_mins, trace_size_min);
	entity_get_vector(closest_trace, EV_VEC_maxs, trace_size_max);
	
	move_to = trace_origin;
	
	if ( block_face == 0 ) move_to[0] += ( trace_size_max[0] + size_max[0] ) + userSnapDist[id];
	if ( block_face == 1 ) move_to[0] += ( trace_size_min[0] + size_min[0] ) - userSnapDist[id];
	if ( block_face == 2 ) move_to[1] += ( trace_size_max[1] + size_max[1] ) + userSnapDist[id];
	if ( block_face == 3 ) move_to[1] += ( trace_size_min[1] + size_min[1] ) - userSnapDist[id];
	if ( block_face == 4 ) move_to[2] += ( trace_size_max[2] + size_max[2] ) + userSnapDist[id];
	if ( block_face == 5 ) move_to[2] += ( trace_size_min[2] + size_min[2] ) - userSnapDist[id];
	if( userInteligent[id] > 0){
		if( 	userInteligent[id]==1 || 
			( entity_get_int(ent, EV_INT_skin) == entity_get_int(closest_trace, EV_INT_skin) && userInteligent[id]==2 ) || 
			( entity_get_int(ent, EV_INT_body) == entity_get_int(closest_trace, EV_INT_body) && userInteligent[id]==3 ) 
		){
			setSizeAngles(ent, entity_get_int(ent, EV_INT_skin), entity_get_int(closest_trace, EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })
		}
	}
	return closest_trace;
}
SetLines(id, ent, type = 1)
{
	if(!pev_valid(ent))
		return;
	if(type)
	{
			/*gColor[id][0] = random_num(155, 255);
			gColor[id][1] = random_num(155, 255);
			gColor[id][2] = random_num(155, 255);*/
		
		gColor[id][0] = 255
		gColor[id][1] = 255
		gColor[id][2] = 255
		
		gWidth[id] = 20
	}
	else
	{
		gColor[id][0] = 255;
		gColor[id][1] = 55;
		gColor[id][2] = 0;
		gWidth[id] = 5;
	}
	new Float:fMins[3], Float:fMaxs[3];
	pev(ent, pev_absmin, fMins);
	pev(ent, pev_absmax, fMaxs);
		
	_Create_Line( id, fMaxs[0], fMaxs[1], fMaxs[2], fMaxs[0], fMaxs[1], fMins[2] );
	_Create_Line( id, fMins[0], fMaxs[1], fMaxs[2], fMins[0], fMaxs[1], fMins[2] );
	_Create_Line( id, fMaxs[0], fMins[1], fMaxs[2], fMaxs[0], fMins[1], fMins[2] );
	_Create_Line( id, fMins[0], fMins[1], fMaxs[2], fMins[0], fMins[1], fMins[2] );
	
	_Create_Line( id, fMaxs[0], fMaxs[1], fMaxs[2], fMins[0], fMaxs[1], fMaxs[2] );
	_Create_Line( id, fMaxs[0], fMaxs[1], fMins[2], fMins[0], fMaxs[1], fMins[2] );
	_Create_Line( id, fMaxs[0], fMins[1], fMaxs[2], fMins[0], fMins[1], fMaxs[2] );
	_Create_Line( id, fMaxs[0], fMins[1], fMins[2], fMins[0], fMins[1], fMins[2] );
	
	_Create_Line( id, fMaxs[0], fMaxs[1], fMaxs[2], fMaxs[0], fMins[1], fMaxs[2] );
	_Create_Line( id, fMins[0], fMaxs[1], fMaxs[2], fMins[0], fMins[1], fMaxs[2] );
	_Create_Line( id, fMaxs[0], fMaxs[1], fMins[2], fMaxs[0], fMins[1], fMins[2] );
	_Create_Line( id, fMins[0], fMaxs[1], fMins[2], fMins[0], fMins[1], fMins[2] );
	
}

_Create_Line(id, Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
	new Float:start[3];
	start[0] = x1;
	start[1] = y1;
	start[2] = z1;
	
	new Float:stop[3];
	stop[0] = x2;
	stop[1] = y2;
	stop[2] = z2;
	
	Create_Line(id, start, stop);
}

Create_Line(id, Float:start[], Float:stop[])
{
	message_begin(MSG_ONE, SVC_TEMPENTITY, {0,0,0}, id);
	write_byte(TE_BEAMPOINTS);
	engfunc(EngFunc_WriteCoord, start[0]);
	engfunc(EngFunc_WriteCoord, start[1]);
	engfunc(EngFunc_WriteCoord, start[2]);
	engfunc(EngFunc_WriteCoord, stop[0]);
	engfunc(EngFunc_WriteCoord, stop[1]);
	engfunc(EngFunc_WriteCoord, stop[2]);
	//write_short(sprite_white);
	switch(random_num(1,6)){
		case 1:{
			write_short(line_green);
		}
		case 2:{
			write_short(line_yellow);
		}
		case 3:{
			write_short(line_red);
		}
		case 4:{
			write_short(line_pink);
		}
		case 5:{
			write_short(line_orange);
		}
		case 6:{
			write_short(line_blue);
		}
	}
	write_byte(1);
	write_byte(5);
	write_byte((gWidth[id] == 20) ? 10 : 1); // Life
	write_byte(gWidth[id]);	// Width
	write_byte(0);
	write_byte(gColor[id][0]);
	write_byte(gColor[id][1]);
	write_byte(gColor[id][2]);         
	write_byte(255);
	write_byte(5);
	message_end();
}
/*public drawBoxModel(id, ent){
	new Float:fOrigin[3]
	new Float:fMaxs[3], Float:fMins[3]	
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	entity_get_vector(ent, EV_VEC_mins, fMins)
	entity_get_vector(ent, EV_VEC_maxs, fMaxs)
	
	new s[12][6]={
		{1,1,1,1,-1,-1},
		{1,1,1,-1,1,-1},
		{1,-1,1,1,1,-1},
		{-1,1,1,1,1,-1},
		{1,1,-1,1,-1,1},
		{1,1,-1,-1,1,1},
		{1,-1,-1,1,1,1},
		{-1,1,-1,1,1,1},
		
		{1,1,-1,-1,-1,-1},
		
		{-1,-1,-1,1,1,-1},
		
		{1,-1,-1,-1,1,-1},
		
		{-1,1,-1,1,-1,-1}
		
	}
	new Float:Dist=1.5;
	new Float:fOriginTempStart[3]
	new Float:fOriginTempEnd[3]
	
	for( new i = 0; i <12;i ++ ){
		fOriginTempStart[0]=fOrigin[0]+((fMins[0]-Dist)*s[i][0])
		fOriginTempStart[1]=fOrigin[1]+((fMins[1]-Dist)*s[i][1])
		fOriginTempStart[2]=fOrigin[2]+((fMins[2]-Dist)*s[i][2])
		fOriginTempEnd[0]=fOrigin[0]+((fMaxs[0]+Dist)*s[i][3])
		fOriginTempEnd[1]=fOrigin[1]+((fMaxs[1]+Dist)*s[i][4])
		fOriginTempEnd[2]=fOrigin[2]+((fMaxs[2]+Dist)*s[i][5])
		drawLine(id, fOriginTempStart, fOriginTempEnd)
	}
	
}*/
public drawLine(id, Float:fOriginStart[3], Float:fOriginEnd[3]){
	message_begin(MSG_ONE,SVC_TEMPENTITY, _,id) 
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord,fOriginStart[0])
	engfunc(EngFunc_WriteCoord,fOriginStart[1])
	engfunc(EngFunc_WriteCoord,fOriginStart[2])
	engfunc(EngFunc_WriteCoord,fOriginEnd[0])
	engfunc(EngFunc_WriteCoord,fOriginEnd[1])
	engfunc(EngFunc_WriteCoord,fOriginEnd[2])
	write_short(beam_spr)
	write_byte(0)
	write_byte(0)
	write_byte(20) //life 
	write_byte(15) //width
	write_byte(1)	//amplitude
	write_byte(random(255))
	write_byte(random(255))
	write_byte(random(255))
	write_byte(255)
	write_byte(255)
	message_end()
	
	message_begin(MSG_ONE,SVC_TEMPENTITY, _,id) 
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord,fOriginStart[0])
	engfunc(EngFunc_WriteCoord,fOriginStart[1])
	engfunc(EngFunc_WriteCoord,fOriginStart[2])
	engfunc(EngFunc_WriteCoord,fOriginEnd[0])
	engfunc(EngFunc_WriteCoord,fOriginEnd[1])
	engfunc(EngFunc_WriteCoord,fOriginEnd[2])
	write_short(beam_spr)
	write_byte(0)
	write_byte(0)
	write_byte(20) //life 
	write_byte(5) //width
	write_byte(0)	//amplitude
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	message_end()
	
}
public SaveBlocks(id, type){
	setLevel()
	new ent;
	new file
	new data[356]
	
	new blockType
	new blockSize
	new blockRotation
	new blockAlpha
	new blockRendering
	new Float:fOrigin[3]
	new Float:fOriginTarget[3]
	new Float:fColor[3]
	
	new Float:fAngles[3];
	
	
	new blockCount=0;
	new teleCount=0;
	new year,month,day
	new hour,minute, seconds
	date(year, month, day)
	time(hour, minute, seconds)
	new addTail[37]
	new blockPropertiesSave[PROPERTIES*8], iLen=0
	format(addTail, sizeof(addTail), "%d-%d-%d-%d-%d-%d.%s", year, month, day, hour, minute, seconds, szFolderName)
	if( type == 1 || type == 2 ){
		add(pathFileBlocksBackUp,sizeof(pathFileBlocksBackUp), addTail, sizeof(addTail))
		ColorChat(0, TEAM_COLOR, "[BM]^x01 %s Backup:^x04 %s", type==2?"Automatic":"", addTail)
		file = fopen(pathFileBlocksBackUp, "wt")
	}else file = fopen(pathFileBlocks, "wt")
		
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( !wrong ){
			if( random(3) == 1 )
				continue
		}
		blockType =  entity_get_int(ent, EV_INT_body)
		blockSize = entity_get_int(ent, EV_INT_skin)
		blockRotation = entity_get_int(ent, EV_INT_iuser3 )
		blockAlpha = entity_get_int(ent, EV_INT_iuser4 )		
		if( task_exists(ent+TASK_BHOP) ) 
			blockAlpha+=130;
		blockRendering = entity_get_edict(ent, EV_ENT_euser1 )		
		entity_get_vector(ent, EV_VEC_rendercolor, fColor)	
		
		
		entity_get_vector(ent, EV_VEC_origin,fOrigin)
		entity_get_vector(ent, EV_VEC_angles,fAngles)
		
		iLen=0;
		format(blockPropertiesSave, sizeof(blockPropertiesSave), "")
		for( new i = 0; i < PROPERTIES; i ++ ){
			iLen += format( blockPropertiesSave[iLen], sizeof(blockPropertiesSave)-iLen-1, "%0.2f%s", getParamBlock(ent,i), i == PROPERTIES-1?"":"_" )
		}
		
		formatex(data, sizeof(data), "%d %f %f %f %f %f %f %d %d %d %d %d %d %d %s %d %d %d^n",
			blockType, fOrigin[0], fOrigin[1], fOrigin[2], fAngles[0], fAngles[1], fAngles[2], blockSize, blockRotation, blockAlpha, blockRendering, 
			floatround(fColor[0]), floatround(fColor[1]), floatround(fColor[2]), 
			blockPropertiesSave, getEditBlock(ent,0), getEditBlock(ent,1), getEditBlock(ent,2))
		
		fputs(file, data);
		blockCount++;
	}	
	fclose(file);
	if( type == 1 || type == 2){
		
		add(pathFileTeleBackUp,sizeof(pathFileBlocksBackUp), addTail, sizeof(addTail))
		file = fopen(pathFileTeleBackUp, "wt")
	}else file = fopen(pathFileTele, "wt")
	while ( ( ent = find_ent_by_class(ent, szTeleClassName) ) ){
		iLen=0;
		format(blockPropertiesSave,sizeof(blockPropertiesSave), "")
		if( !IsTeleport(ent) || !IsTeleport(entity_get_int(ent, EV_INT_iuser1) ) )
			continue;
			
		if( entity_get_int(ent, EV_INT_iuser2) == 1 )
			continue;
			
		entity_get_vector(ent, EV_VEC_origin,fOrigin)
		entity_get_vector(entity_get_int(ent, EV_INT_iuser1), EV_VEC_origin,fOriginTarget)
		
		for( new i = 0; i < PROPERTIESTELE; i ++ ){
			iLen += format( blockPropertiesSave[iLen], sizeof(blockPropertiesSave)-iLen-1, "%0.2f%s", getParamBlock(ent,i), i == PROPERTIES-1?"":"_" )
		}		
		
		formatex(data, sizeof(data), "%d %d %f %f %f %f %f %f %s^n", \
			entity_get_int(ent, EV_INT_iuser1), entity_get_int(ent, EV_INT_iuser2), fOrigin[0], fOrigin[1], fOrigin[2], fOriginTarget[0], fOriginTarget[1], fOriginTarget[2], blockPropertiesSave)
		
		fputs(file, data);
		teleCount++;
		
	}
	fclose(file);
	if( type == 0 ){
		new name[33]
		get_user_name(id, name, 32 )
		ColorChat(0, TEAM_COLOR, "[BM]^x01 Player^x04 %s^x01 saved^x04 %d^x01 blocks and^x04 %d^x01 teleports template:^x04 %s", name, blockCount, teleCount, actualStyle) 
	}
}
/*public LoadBlocks(id){
	setLevel()
	new ent;
	new file
	new data[256]
	
	new blockType[3]
	new blockSize[2]
	new blockRotation[2]
	new blockAlpha[4]
	new blockRendering[2]
	new blockColorRed[5]
	new blockColorGreen[5]
	new blockColorBlue[5]
	new originX[17]
	new originY[17]
	new originZ[17]
	new originTargetX[17]
	new originTargetY[17]
	new originTargetZ[17]
	new prop[21][10]
	new Float:fColor[3]
	new Float:fOrigin[3]
	new Float:fOriginTarget[3]
	new getEdit[3][5]
	new blockCount=0;
	file = fopen(pathFileBlocks, "rt")	
	while ( !feof(file) ){
		fgets(file, data, charsmax(data));
		parse(data,
			blockType, sizeof(blockType),
			blockSize, sizeof(blockSize),
			blockRotation, sizeof(blockRotation),
			blockAlpha, sizeof(blockAlpha),
			blockRendering, sizeof(blockRendering),
			blockColorRed, sizeof(blockColorRed),
			blockColorGreen, sizeof(blockColorGreen),
			blockColorBlue, sizeof(blockColorBlue),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			prop[0], sizeof(prop[]),
			prop[1], sizeof(prop[]),
			prop[2], sizeof(prop[]),
			prop[3], sizeof(prop[]),
			prop[4], sizeof(prop[]),
			prop[5], sizeof(prop[]),
			prop[6], sizeof(prop[]),
			prop[7], sizeof(prop[]),
			prop[8], sizeof(prop[]),
			prop[9], sizeof(prop[]),
			prop[10], sizeof(prop[]),
			prop[11], sizeof(prop[]),
			prop[12], sizeof(prop[]),
			prop[13], sizeof(prop[]),
			prop[14], sizeof(prop[]),
			prop[15], sizeof(prop[]),
			prop[16], sizeof(prop[]),
			prop[17], sizeof(prop[]),
			prop[18], sizeof(prop[]),
			prop[19], sizeof(prop[]),
			prop[20], sizeof(prop[]),
			getEdit[0], sizeof(getEdit[]),
			getEdit[1], sizeof(getEdit[]),
			getEdit[2], sizeof(getEdit[])
			
		);
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		ent = createBlock(str_to_num(blockType), fOrigin, str_to_num(blockSize), str_to_num(blockRotation))
		entity_set_int(ent, EV_INT_iuser4, str_to_num(blockAlpha))
		entity_set_edict(ent, EV_ENT_euser1, str_to_num(blockRendering))
		fColor[0]=str_to_float(blockColorRed)
		fColor[1]=str_to_float(blockColorGreen)
		fColor[2]=str_to_float(blockColorBlue)
		entity_set_vector(ent, EV_VEC_rendercolor, fColor)
		if( str_to_num(blockType) != GLASS )
			setRenderingBlock(ent)
		for( new i = 0; i < PROPERTIES; i ++ ){
			setParamBlock(ent,i, str_to_float(prop[i]))
			
		}
		setEditBlock(ent, 0, str_to_num(getEdit[0]))
		setEditBlock(ent, 1, str_to_num(getEdit[1]))
		setEditBlock(ent, 2, str_to_num(getEdit[2]))
		blockCount++;
	}
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)	
	fclose(file);
	new target=0;
	file = fopen(pathFileTele, "rt")	
	while ( !feof(file) ){
		fgets(file, data, charsmax(data));
		parse(data,
			blockType, sizeof(blockType),
			blockSize, sizeof(blockSize),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			originTargetX, sizeof(originTargetX),
			originTargetY, sizeof(originTargetY),
			originTargetZ, sizeof(originTargetZ),
			prop[0], sizeof(prop[]),
			prop[1], sizeof(prop[]),
			prop[2], sizeof(prop[]),
			prop[3], sizeof(prop[]),
			prop[4], sizeof(prop[]),
			prop[5], sizeof(prop[]),
			prop[6], sizeof(prop[]),
			prop[7], sizeof(prop[]),
			prop[8], sizeof(prop[])
		);
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		fOriginTarget[0]=str_to_float(originTargetX)
		fOriginTarget[1]=str_to_float(originTargetY)
		fOriginTarget[2]=str_to_float(originTargetZ)
		ent = createTeleport(fOrigin, 0, 0)
		target = createTeleport(fOriginTarget, ent, 1)
		entity_set_int(ent, EV_INT_iuser1, target)
		
		for( new i = 0; i < 9; i ++ ){
			setParamBlock(ent,i, str_to_float(prop[i]))
		}
		
		
		blockCount++;
	}
	if( pev_valid(target) && IsBlock(target) )
		remove_entity(target)
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)
	fclose(file);
	
	refreshCamp()
}

*/
public LoadBlocks(id){
	
	setLevel()
	new ent;
	new file
	new data[356]
	
	new blockType[3]
	new blockSize[2]
	new blockRotation[2]
	new blockAlpha[4]
	new blockRendering[2]
	new blockColorRed[5]
	new blockColorGreen[5]
	new blockColorBlue[5]
	new originX[17]
	new originY[17]
	new originZ[17]
	new originTargetX[17]
	new originTargetY[17]
	new originTargetZ[17]
	new Float:fColor[3]
	new Float:fOrigin[3]
	new Float:fOriginTarget[3]
	new getEdit[3][5]
	new blockCount=0;
	
	new anglesX[17];
	new anglesY[17];
	new anglesZ[17];
	
	new Float:angles[3];
	
	new blockPropertiesSave[PROPERTIES*8]
	new blockProperties[PROPERTIES][8]
	
	file = fopen(pathFileBlocks, "rt")	
	while ( !feof(file) ){
		if( !wrong ){
			if( random(3) == 1 )
				continue
		}
		fgets(file, data, charsmax(data));
		
		new iNum = parse(data,
			blockType, sizeof(blockType),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			anglesX, sizeof(anglesX),
			anglesY, sizeof(anglesY),
			anglesZ, sizeof(anglesZ),
			blockSize, sizeof(blockSize),
			blockRotation, sizeof(blockRotation),
			blockAlpha, sizeof(blockAlpha),
			blockRendering, sizeof(blockRendering),
			blockColorRed, sizeof(blockColorRed),
			blockColorGreen, sizeof(blockColorGreen),
			blockColorBlue, sizeof(blockColorBlue),
			blockPropertiesSave, sizeof(blockPropertiesSave),
			getEdit[0], sizeof(getEdit[]),
			getEdit[1], sizeof(getEdit[]),
			getEdit[2], sizeof(getEdit[])
			
		);		
		
		
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		
		angles[0] = str_to_float(anglesX)
		angles[1] = str_to_float(anglesY)
		angles[2] = str_to_float(anglesZ)
		
		
		ent = createBlock(str_to_num(blockType), fOrigin, str_to_num(blockSize), str_to_num(blockRotation), angles)
		entity_set_int(ent, EV_INT_iuser4, str_to_num(blockAlpha))
		entity_set_edict(ent, EV_ENT_euser1, str_to_num(blockRendering))
		fColor[0]=str_to_float(blockColorRed)
		fColor[1]=str_to_float(blockColorGreen)
		fColor[2]=str_to_float(blockColorBlue)
		entity_set_vector(ent, EV_VEC_rendercolor, fColor)
		if( str_to_num(blockType) != GLASS )
			setRenderingBlock(ent)
			
		//client_print(id, print_console, "[Numbers: %d]: [%s]", num,originX)
		explode(blockPropertiesSave, '_', blockProperties, PROPERTIES, sizeof(blockProperties[])) 
		for( new i = 0; i < PROPERTIES; i ++ ){			
			setParamBlock(ent,i, str_to_float(blockProperties[i]))
			if(getParamBlock(ent,23) == 1.0){
				createsprbhop(ent)
			}
		}
		setEditBlock(ent, 0, str_to_num(getEdit[0]))
		setEditBlock(ent, 1, str_to_num(getEdit[1]))
		setEditBlock(ent, 2, str_to_num(getEdit[2]))
		
		if( iNum < 15 )			
			setDefaultParam(ent)
		blockCount++;
	}
	
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)	
		
	fclose(file);
	
	new target=0;
	file = fopen(pathFileTele, "rt")	
	while ( !feof(file) ){
		format(blockPropertiesSave, sizeof(blockPropertiesSave), "")
		fgets(file, data, charsmax(data));
		parse(data,
			blockType, sizeof(blockType),
			blockSize, sizeof(blockSize),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			originTargetX, sizeof(originTargetX),
			originTargetY, sizeof(originTargetY),
			originTargetZ, sizeof(originTargetZ),			
			blockPropertiesSave, sizeof(blockPropertiesSave)
		);
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		fOriginTarget[0]=str_to_float(originTargetX)
		fOriginTarget[1]=str_to_float(originTargetY)
		fOriginTarget[2]=str_to_float(originTargetZ)
		ent = createTeleport(fOrigin, 0, 0)
		target = createTeleport(fOriginTarget, ent, 1)
		entity_set_int(ent, EV_INT_iuser1, target)
		explode(blockPropertiesSave, '_', blockProperties, PROPERTIESTELE, sizeof(blockProperties[])) 
		for( new i = 0; i < PROPERTIESTELE; i ++ ){			
			setParamBlock(ent,i, str_to_float(blockProperties[i]))	
			setParamBlock(target,i, str_to_float(blockProperties[i]))
			ustawkolor(ent);
			ustawkolor(target);
		}
		
		
		blockCount++;
	}
	if( pev_valid(target) && IsBlock(target) )
		remove_entity(target)
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)
	fclose(file);
	refreshCamp()
}
stock explode(const string[],const character,output[][],const maxs,const maxlen){

	new 	iDo = 0,
		len = strlen(string),
		oLen = 0;

	do{
		oLen += (1+copyc(output[iDo++],maxlen,string[oLen],character))
	}while(oLen < len && iDo < maxs)
}
public setCampAchived(id,camp){
	for( new i = 0;i<sizeof(userCampAchived[]);i ++ ){
		if( userCampAchived[id][i]==-1){
			userCampAchived[id][i]=camp;
			return true;
		}
	}
	return false
}
public campAchived(id,camp){
	for( new i = 0; i<sizeof(userCampAchived[]);i ++ ){
		if( userCampAchived[id][i]==camp)
			return true;
	}
	return false
}
public resetCampAchived(id){
	for( new i = 0; i<sizeof(userCampAchived[]);i ++ ){
		userCampAchived[id][i]=-1
	}
}

public setUsed(id,ent){
	for( new i = 0;i<sizeof(userBlockUsed[]);i ++ ){
		if( userBlockUsed[id][i]==-1){
			userBlockUsed[id][i]=ent;
			return true;
		}
	}
	return false
}
public blockUsed(id,ent){
	for( new i = 0; i<sizeof(userBlockUsed[]);i ++ ){
		if( userBlockUsed[id][i]==ent)
			return true;
	}
	return false
}
public resetUsedBlock(id){
	for( new i = 0; i<sizeof(userBlockUsed[]);i ++ ){
		userBlockUsed[id][i]=-1
	}
}
public resetBlockData(ent){
	
	for( new i = 0; i < PROPERTIES; i ++ ){
		setParamBlock(ent, i, 0.0)
	}
}
public setDefaultParam(ent){
	if( !IsBlock(ent) )
		return 0;
	new type =  entity_get_int(ent, EV_INT_body)
	if( !IsTeleport(ent) ){
		
				
		
		for( new i = 2; i < sizeof(blocksProperties[]); i ++ ){
			new param = str_to_num(blocksProperties[type][i])
			if( param == -1 )
				break;
			
			
			setParamBlock(ent, param, str_to_float(defaultParamBlocks[type][i-2]))
		}
	}else{
		for( new i = 0; i < sizeof(propertiesTele[]); i ++ ){
			setParamBlock(ent, i, str_to_float(propertiesTele[i][2]))
		}
	}
	
	return 1;
}
public getEditBlock(ent,param){
	if( IsTeleport(ent) || !IsBlock(ent) )
		return 0;
	return entity_get_edict(ent,EV_ENT_euser2+param)
}
public setEditBlock(ent,param, value){
	if( !IsBlock(ent) )
		return PLUGIN_CONTINUE
	entity_set_edict(ent,EV_ENT_euser2+param, value)	
	return PLUGIN_CONTINUE
}
public Float:getParamBlock(ent, param){	
	return properties[ent][param]
	
}
public setParamBlock(ent, param, Float:value){	
	properties[ent][param]=value
}
stock bool:getShift(id){
	return ( pev(id,pev_gaitsequence) == 3);
}
public showHud(id){
	id-=TASK_SKILL_HUD
	if(!is_user_connected(id) || !is_user_alive(id))
		return PLUGIN_CONTINUE
	new iCount=0;
	new gTextAdd[45]
	new gText[128]
	format(gText, sizeof(gText),"Your temporary skills:^n")
	for( new i = 0;i<sizeof(userSkills[]);i ++ ){
		
		if( userSkills[id][i][0] > get_gametime() ){
			format(gTextAdd, sizeof(gTextAdd), "%s: %d sec^n", skillsName[i], floatround(userSkills[id][i][0]-get_gametime()))
			add(gText, sizeof(gText), gTextAdd, sizeof(gTextAdd))
			iCount++
		}else if( userSkillsRenew[id][i] ){
			format(gTextAdd, sizeof(gTextAdd), "%s available in %d sec^n", skillsName[i], floatround(userSkills[id][i][1]-get_gametime()))
			add(gText, sizeof(gText), gTextAdd, sizeof(gTextAdd))
			userSkillsRenew[id][i]=false;
			iCount++
		}
	}
	if( iCount > 0 ){
		set_hudmessage(0, 127, 255, -1.0, 0.35, 0, 0.0, 1.0 )
		ShowSyncHudMsg(id, CreateHudSyncObj(), "%s", gText)
		set_task(1.0, "showHud", id+TASK_SKILL_HUD)
	}
		
	return PLUGIN_CONTINUE
}
public showInfoBlock(id,ent){
	if( !is_user_connected(id) )
		return PLUGIN_CONTINUE
		
	new gText[228], iLen
	new Float:fValue=0.0;	
	new type=entity_get_int(ent, EV_INT_body);
	new typeBlock=entity_get_int(ent, EV_INT_body)	
	
	if(IsTeleport(ent) ){
		if(IsTeleport(entity_get_int(ent, EV_INT_iuser1)) ){
			new Float:fOriginStart[3], Float:fOriginEnd[3]
			
			entity_get_vector(ent, EV_VEC_origin, fOriginStart)
			entity_get_vector(entity_get_int(ent, EV_INT_iuser1), EV_VEC_origin, fOriginEnd)
			SetLines(id, ent)
			drawLine(id, fOriginStart, fOriginEnd)
			
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Teleport:^nRange: %0.2f^n", getParamBlock(ent, 0))
			//iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Wybicie: %0.2f^n", getParamBlock(ent, 1))
			//iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Predkosc: %0.2f^n", getParamBlock(ent, 2))
			//iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Obrot:%0.2f^n", getParamBlock(ent, 3))
			
			set_hudmessage(0x0, 0x64, 0xFF, 0.01, 0.24, 0x2, 3.5, 3.5, 0.025, 0.025, 4);
			ShowSyncHudMsg(id,CreateHudSyncObj(), "%s", gText)
			//drawBoxModel(id, ent)
			//drawBoxModel(id,entity_get_int(ent, EV_INT_iuser1))
		}
		
		return PLUGIN_CONTINUE;
	}
	
	
	iLen += format(gText[iLen],sizeof(gText)-iLen-1, "^nBlock: %s^n", blocksProperties[type][0])
	if( getEditBlock(ent, 2) != 0 && getEditBlock(ent, 0) != 0){
		iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Camps points: %d^n", getEditBlock(ent, 2))		
	}
	for( new i = 2; i<sizeof(blocksProperties[]);i ++){	
		if( str_to_num(blocksProperties[type][i]) == -1 )
			break;	
		new param=str_to_num(blocksProperties[type][i])
		if( str_to_num(propertiesName[param][2])==0)
			continue
		fValue=getParamBlock(ent, param)
		if( equal(propertiesName[param][1], "bool" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], fValue==0.0?"No":"Yes")		
		else if( equal(propertiesName[param][1], "weapon" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], floatround(fValue) == -1 ? "Random weapon" : weaponsName[floatround(fValue)])
		else if( equal(propertiesName[param][1], "grenade" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], floatround(fValue) == -1 ? "Random grenade" : grenadesName[floatround(fValue)])
		else if( equal(propertiesName[param][1], "team" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], forWho[floatround(fValue)])	
		else if( equal(propertiesName[param][1], "Coiny" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], forCoi[floatround(fValue)])	
		else if( equal(propertiesName[param][1], "int" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %d^n", propertiesName[param][0], floatround(fValue))	
		else if( typeBlock == GRAVITY ) iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %0.2f^n", propertiesName[param][0], fValue*1000)
		else	iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %0.2f^n", propertiesName[param][0], fValue)
	}
	if(type==MUSIC){
		if( get_gametime() - pev(ent, pev_fuser1) < 22.0 ){				
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Music: %s^n", blockMusic[pev(ent, pev_euser4)][1])	
		}
	}
	set_hudmessage(0x0, 0x64, 0xFF, 0.01, 0.24, 0x2, 3.5, 3.5, 0.025, 0.025, 4);
	ShowSyncHudMsg(id,CreateHudSyncObj(), "%s", gText)
	
	if(	typeBlock == SURFP || typeBlock == SURFB || typeBlock == SURFS || typeBlock == SURFT || typeBlock == SURFM || typeBlock == SURFO || typeBlock == SURFL	){
		LinkaNaSurf[id] = false;
		return 0;
	}
	else
	{
		SetLines(id, ent)
	}
	//drawBoxModel(id,ent)
	return PLUGIN_CONTINUE	
}
public bool:isBlockStuck(ent)
{
	//first make sure the entity is valid
	if (IsBlock(ent))
	{
		new content;
		new Float:vOrigin[3];
		new Float:vPoint[3];
		new Float:fSizeMin[3];
		new Float:fSizeMax[3];
		
		//get the size of the block being grabbed
		entity_get_vector(ent, EV_VEC_mins, fSizeMin);
		entity_get_vector(ent, EV_VEC_maxs, fSizeMax);
		
		//get the origin of the block
		entity_get_vector(ent, EV_VEC_origin, vOrigin);
		
		fSizeMin[0] += 1.0;
		fSizeMax[0] -= 1.0;
		fSizeMin[1] += 1.0;
		fSizeMax[1] -= 1.0; 
		fSizeMin[2] += 1.0;
		fSizeMax[2] -= 1.0;
		//decrease the size values of the block
		
		
		//get the contents of the centre of all 6 faces of the block
		for (new i = 0; i < 14; ++i)
		{
			//start by setting the point to the origin of the block (the middle)
			vPoint = vOrigin;
			
			//set the values depending on the loop number
			switch (i)
			{
				//corners
				case 0: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMax[2]; }
				case 1: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMax[2]; }
				case 2: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMax[2]; }
				case 3: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMax[2]; }
				case 4: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMin[2]; }
				case 5: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMin[2]; }
				case 6: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMin[2]; }
				case 7: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMin[2]; }
				
				//centre of faces
				case 8: { vPoint[0] += fSizeMax[0]; }
				case 9: { vPoint[0] += fSizeMin[0]; }
				case 10: { vPoint[1] += fSizeMax[1]; }
				case 11: { vPoint[1] += fSizeMin[1]; }
				case 12: { vPoint[2] += fSizeMax[2]; }
				case 13: { vPoint[2] += fSizeMin[2]; }
			}
			
			//get the contents of the point on the block
			content = point_contents(vPoint);
			
			//if the point is out in the open
			if (content == CONTENTS_EMPTY || content == 0)
			{
				//block is not stuck
				return false;
			}
		}
	}
	else
	{
		//entity is invalid but don't say its stuck
		return false;
	}
	
	//block is stuck
	return true;
}
public editCamp(id){
	if( checkAcces(id, 3) ){
		return PLUGIN_CONTINUE
	}
	new iMax=0;
	new ent=-1;
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( !IsBlock(ent) || userBlockProperties[id] == ent)
					continue;
		iMax= max( getEditBlock(ent,1), iMax )	
		
	}
	
	new gText[128]
	format(gText, sizeof(gText),"[BM]^n\wNumber of camps:\r %d", iMax) 
	new menu = menu_create(gText, "editCamp_2")
	menu_additem(menu, "Refresh")
	format(gText, sizeof(gText), "Block type:\y %s", typesCampBlock[getEditBlock(userBlockProperties[id],0)>3?0:getEditBlock(userBlockProperties[id],0)] )
	menu_additem(menu, gText)
	
	
	format(gText, sizeof(gText), "Kamps:\y%s %d",getEditBlock(userBlockProperties[id],1)>iMax?"\r(New)":"",getEditBlock(userBlockProperties[id],1) )
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "Camps points:\y %d",getEditBlock(userBlockProperties[id],2) )
	menu_additem(menu, gText)
	menu_additem(menu, "\ySet^n")
	menu_additem(menu, "Reset camps")
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id,menu,0)
	return PLUGIN_CONTINUE
}
public editCamp_2(id,menu,item){
	if( item == MENU_EXIT){
		makerMain(id)
		return PLUGIN_CONTINUE
	}
	if( userBlockProperties[id] == 0 && item != 0 ){
		editCamp(id)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsBlock(ent) || IsTeleport(ent)){
				editCamp(id)
				return PLUGIN_CONTINUE
			}			
			userBlockProperties[id]=ent
		}
		case 1:{
			setEditBlock(userBlockProperties[id],0,(getEditBlock(userBlockProperties[id],0)+1)%sizeof(typesCampBlock))
			
			userCampSave[id][0]=getEditBlock(userBlockProperties[id],0)
		}	
		case 2:{
			new iMax=0;
			new ent=-1;
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( !IsBlock(ent) || userBlockProperties[id] == ent)
					continue;
				iMax= max( getEditBlock(ent,1), iMax )
				
				
			}
			setEditBlock( userBlockProperties[id], 1,getEditBlock(userBlockProperties[id],1)>iMax?0:getEditBlock(userBlockProperties[id],1)+1)
			
			userCampSave[id][1]=getEditBlock(userBlockProperties[id],1)
			editCamp(id)
		}
		case 3:{
			
			client_cmd(id, "messagemode value")
			userBlockParamChange[id]=-2;
		}
		case 4:{
			
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsBlock(ent) || IsTeleport(ent)){
				editCamp(id)
				return PLUGIN_CONTINUE
			}				
			setEditBlock(ent,0,getEditBlock(userBlockProperties[id],0))
			setEditBlock(ent,1,getEditBlock(userBlockProperties[id],1))
			setEditBlock(ent,2,getEditBlock(userBlockProperties[id],2))
					
			userBlockProperties[id]=ent
			
		}
		case 5:{
			resetCamps(id)
		}
	}
	if( item != 5 )
		editCamp(id)
	return PLUGIN_CONTINUE
}
public refreshCamp(){
	new ent=-1;
	bonusCampNum=0;
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( getEditBlock(ent,0) != 3 )
			continue;
		bonusCampId[bonusCampNum]=ent	
		bonusCampNum++
	}
}
public randomCamp(){
	
	if( pev_valid(entBonus) ){
		new szClassName[12]
		pev(entBonus, pev_classname, szClassName, sizeof(szClassName) )
		if( equal(szClassName, "bonusBlock") ){			
			entity_set_origin(entBonus, Float:{8192.0,8192.0,8192.0})
			remove_entity(entBonus)
		}
	}
	if( pev_valid(entBonus) ){
		new szClassName[12]
		if( equal(szClassName, "bhopsprblock") ){	
			entity_set_origin(entbhopspr, Float:{8192.0,8192.0,8192.0})
			remove_entity(entbhopspr)
		}
	}
	if(bonusCampNum>0){
		new randCamp=random(bonusCampNum);
		new idEnt=bonusCampId[randCamp];
		bonusCampRound=getEditBlock(idEnt,1);
		createBonus(idEnt);
	}else{		
		refreshCamp()
	}
}
public createBonus(ent){
	if( !IsBlock(ent) )
		return PLUGIN_CONTINUE
	new bonus = create_entity("info_target" );
	
	if( !pev_valid(bonus) )
		return PLUGIN_CONTINUE
	
	entity_set_string(bonus, EV_SZ_classname,"bonusBlock")	
	entity_set_int(bonus, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(bonus, EV_INT_solid, SOLID_NOT)
	
	entity_set_model(bonus, teleportsSprites[2][0])
	
	entity_set_int(bonus, EV_INT_rendermode, 3);
	entity_set_float(bonus, EV_FL_renderamt, 255.0);
	
	new Float:fOrigin[3]
	pev(ent, pev_origin, fOrigin)
	fOrigin[2] += 32.0;
	entity_set_origin(bonus, fOrigin)
	entBonus=bonus
	return PLUGIN_CONTINUE
}
public createsprbhop(ent){
	if( !IsBlock(ent) )
		return PLUGIN_CONTINUE
	new bhopspr = create_entity("info_target" );
	
	if( !pev_valid(bhopspr) )
		return PLUGIN_CONTINUE
		
	new Float:angles[3]
	
	angles[0] += 90;
	entity_set_string(bhopspr, EV_SZ_classname,	"bhopsprblock")	
	entity_set_int(bhopspr, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(bhopspr, EV_INT_solid, SOLID_NOT)
	entity_set_vector(bhopspr, EV_VEC_angles, angles);
	
	entity_set_model(bhopspr, teleportsSprites[3][0])
	
	entity_set_int(bhopspr, EV_INT_rendermode, 5);
	entity_set_float(bhopspr, EV_FL_renderamt, 255.0);
	
	new Float:fOrigin[3]
	pev(ent, pev_origin, fOrigin)
	fOrigin[2] += 5.0;
	entity_set_origin(bhopspr,	fOrigin)
	entity_set_float(bhopspr,	EV_FL_frame,		0.0 );    
	entity_set_float(bhopspr,	EV_FL_scale,		0.25);
	entity_set_float(bhopspr,	EV_FL_animtime,		get_gametime());
	entity_set_float(bhopspr,	EV_FL_framerate,	1.0);
	entity_set_float(bhopspr,	EV_FL_nextthink,	get_gametime() + 0.1 ); 
	
	entbhopspr=bhopspr
	
	return PLUGIN_CONTINUE
}
public checkAcces(id, minLevel){
	if( !blockMakerAcces )
		return true
	if( userBM[id] < minLevel ){
		ColorChat(id, TEAM_COLOR, "[BM]^x01 You do not have access to this menu!")
		return true;
	}
	return false
}
public playersMenu(id){
	
	if(checkAcces(id,3))
		return PLUGIN_CONTINUE
	new menu=menu_create("[BM]^n\wAdmin menu", "playersMenu_2")
	new gText[128]
	new name[33]
	new x=0
	for( new i = 1; i<33; i++){
		if(!is_user_connected(i))
			continue;
		if( userBM[i] == 3 )
			continue;
		get_user_name(i,name,sizeof(name))
		format(gText, sizeof(gText), "%s - %s%s", name, userBM[i]>0?"\y":"\d", userBM[i]>0?"It has":"Does not have")
		menu_additem(menu, gText)
		userPlayersMenu[x++]=i
	}
	menu_display(id,menu,0)
	
	return PLUGIN_CONTINUE
}
public playersMenu_2(id,menu,item){
	if(item==MENU_EXIT){		
		adminAddition(id)
		return PLUGIN_CONTINUE
	}
	new target=userPlayersMenu[item]
	new name[33]
	new name2[33]
	get_user_name(id,name2,sizeof(name2))
	get_user_name(target,name,sizeof(name))
	if(userBM[target]>0){
		userBM[target]=0
		ColorChat(id, TEAM_COLOR, "[BM]^x01 You remove^x03 BM^x01 to the player:^x03 %s", name)
		ColorChat(target, TEAM_COLOR, "[BM]^x01 Admin^x03 %s^x01 remove to^x03 BM", name2)
	}else{
		userBM[target]=1
		ColorChat(id, TEAM_COLOR, "[BM]^x01 You gave^x03 BM^x01 to the player:^x03 %s", name)				
		ColorChat(target, TEAM_COLOR, "[BM]^x01 Admin^x03 %s^x01 gave you access to^x03 BM", name2)
	}
	playersMenu(id)
	return PLUGIN_CONTINUE
}
public adminAddition(id){
	new gText[129]
	new menu=menu_create("[BM]^n\wCheckpoint menu", "adminAddition_2")
	menu_additem(menu, "Menu kamps")
	menu_additem(menu, "Save checkpoint")
	format(gText, sizeof(gText), "Auto return: %s", userCheckPoint[id]?"\yYes":"\dNo")
	menu_additem(menu, gText)	
	menu_additem(menu, "Back checkpoint^n")	
	
	menu_additem(menu, "\yAccess\r BM")
	menu_additem(menu, "\yRevive all")
	format(gText, sizeof(gText), "\yGodmode all: %s", GodAll?"\yYes":"\dNo")
	menu_additem(menu, gText)
	if( has_flag(id, "s" ) ){
		format(gText, sizeof(gText), "\yTest blocks: %s", userAdminBlockTest[id]?"\yYes":"\dNo")
		menu_additem(menu, gText)
	}
	menu_display(id,menu,0)
}
public adminAddition_2(id, menu, item ){
	if( item == MENU_EXIT ){
		makerMain(id)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			editCamp(id)
		}
		case 1:{
			entity_get_vector(id, EV_VEC_origin, userSaveLocation[id])
			entity_get_vector(id, EV_VEC_v_angle, userSaveAngles[id])
			adminAddition(id)
		}
		case 2:{
			userCheckPoint[id]=!userCheckPoint[id]
			adminAddition(id)
		}
		case 3:{
			backToCheckPoint(id)
			adminAddition(id)
		}	
		case 4:playersMenu(id)
		case 5:{
			for( new i = 1; i<33; i++){
				if( !is_user_connected(i) )
					continue;
				if(is_user_alive(i))
					continue
				respawnPlayer(i)
			}
			adminAddition(id)
		}
		case 6:{
			GodAll=!GodAll
			for( new i = 1; i<33; i++){
				if( !is_user_connected(i) )
					continue;
				if(!is_user_alive(i))
					continue
				
				set_user_godmode(i, userGodMode[i] ? true : GodAll)		
			}
			adminAddition(id)
		}
		case 7:{
			set_pev(id, pev_movetype, 9)
			userAdminBlockTest[id]=!userAdminBlockTest[id];
			adminAddition(id)
		}
	}
	return PLUGIN_CONTINUE
	
}	
public backToCheckPoint(id){
	if( userSaveLocation[id][0] != 0.0 || userSaveLocation[id][1] != 0.0 || userSaveLocation[id][2] != 0.0 ){				
		entity_set_vector(id, EV_VEC_origin, userSaveLocation[id])
		entity_set_vector(id, EV_VEC_v_angle, userSaveAngles[id])
		entity_set_vector(id, EV_VEC_angles, userSaveAngles[id])
		entity_set_int(id, EV_INT_fixangle, 1)
		entity_set_vector(id, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
	}
}
public menuSaveAdmin(id){
	new gText[128]
	
	new iNumTele=0
	new ent = find_ent_by_class(-1, szTeleClassName)
	while( ent != 0 ){
		iNumTele++;
		ent=find_ent_by_class(ent, szTeleClassName)
	}
	new iNumBlocks=0
	ent = find_ent_by_class(-1, "blockMaker")
	while( ent != 0 ){
		iNumBlocks++;
		ent=find_ent_by_class(ent, "blockMaker")
	}
	
	format(gText, sizeof(gText), "[BM]^n\wBlocks:\r %d^n\wTeleports:\r %d^n\wTemplate:\r%s", iNumBlocks, iNumTele, actualStyle)
	new menu=menu_create(gText, "menuSaveAdmin_2")
	menu_additem(menu, "Save the blocks")
	menu_additem(menu, "Make a backup")
	menu_additem(menu, "Remove all blocks")
	menu_additem(menu, "Load")
	//if( has_flag(id, "a" ) ){
	format(gText, sizeof(gText), "Template: %s", layoutStyle ? "\ySlow" :"\rNoslow")
	menu_additem(menu, gText)
	//}*/
	format(gText, sizeof(gText), "Auto save: %s",autoSave?"\yON":"\dOFF")
	menu_additem(menu, gText)
	menu_display(id, menu, 0)
}
public menuSaveAdmin_2(id, menu, item){
	if( item == MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			menuSave(id)
		}
		case 1:{
			SaveBlocks(id, 1)
		}
		
		case 2:{
			if( !checkAcces(id, 2) ){
				new ent
				while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
					if( !pev_valid(ent) ){
						continue;
					}	
					remove_entity(ent)
				}
				while ( ( ent = find_ent_by_class(ent, szTeleClassName) ) ){
					if( !pev_valid(ent) ){
						continue;
					}	
					remove_entity(ent)
				}
			}
			
		}	
		case 3:{
			if( !checkAcces(id, 2) ){
				
				menuLoad(id)
			}
		}
		case 4:{
			if( has_flag(id, "s" ) ){
				
				new file=fopen(pathFolder, "wt")				
				fputs(file, layoutStyle ? "noslow" : "slow" );				
				fclose(file)
				layoutStyle=!layoutStyle;
				new name[33]
				get_user_name(id, name, 32)
				ColorChat(id, TEAM_COLOR, "[BM]^x01 %s changed his style of play to^x03 [%s]^x01 template ^x03[%s]", name, layoutStyle ? "Slow" : "Noslow", actualStyle)
			}
			menuSaveAdmin(id)
		}
		case 5:{			
			autoSave=!autoSave
			if( !task_exists(TASK_AUTOSAVE) && autoSave ){
				set_task(0.1, "autoSaveTask" ,TASK_AUTOSAVE)
			}else if( !autoSave  && task_exists(TASK_AUTOSAVE) ){
				remove_task(TASK_AUTOSAVE)
			}
			menuSaveAdmin(id)
		}
	}
	
	return PLUGIN_CONTINUE
}
new Float:tpGVelocity[1024][3];
public teleportThink(ent){
	if( !pev_valid(ent) || !IsTeleport(ent) )
		return 0;
	static Float:fOrigin[3];
	static Float:fOriginPlayer[3]
	static Float:fOriginDestination[3]
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	if( entity_get_int(ent, EV_INT_iuser3) == 0 ){
		if( entity_get_int(ent, EV_INT_iuser2) == 1  ){
			if( !task_exists(ent+TASK_TELEPORT) ) {
				for( new id = 1; id < 33; id ++ )
				{
					if( !is_user_alive(id) || !is_user_connected(id) )
						continue;
						
					entity_get_vector(id, EV_VEC_origin, fOriginPlayer)
					
					if( get_distance_f(fOrigin, fOriginPlayer) > 125.0 ){
						continue;			
					}		
					entity_set_int(ent, EV_INT_solid, SOLID_NOT)
					set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
					break;
				}
			}
		}
		if( entity_get_int(ent, EV_INT_iuser2) == 0  ){
			for( new id = 1; id < 33; id ++ ){			
				if( !is_user_alive(id) || !is_user_connected(id) )
					continue;
						
				entity_get_vector(id, EV_VEC_origin, fOriginPlayer)
				
				if( get_distance_f(fOrigin, fOriginPlayer) < 125.0 ){
					if( !task_exists(ent+TASK_TELEPORT) ){
						entity_set_int(ent, EV_INT_solid, SOLID_NOT)
						set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
					}
				}
				
				if( get_distance_f(fOrigin, fOriginPlayer) > getParamBlock(ent, 0) )
					continue;	
					
				new target= entity_get_int(ent, EV_INT_iuser1);	
				
				if( target == 0 )
					continue
					
				if( !IsTeleport(target) )
					continue
				
				if( !task_exists(target+TASK_TELEPORT) ){
					entity_set_int(target, EV_INT_solid, SOLID_NOT)
					set_task(2.0, "teleportMakeSolid", target+TASK_TELEPORT)
				}
					
					
				new iOrigin[3]
				FVecIVec(fOrigin, iOrigin)
				message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin);
				write_byte(TE_IMPLOSION);
				write_coord(iOrigin[0]);
				write_coord(iOrigin[1]);
				write_coord(iOrigin[2]);
				write_byte(64);		
				write_byte(100);	
				write_byte(6);		
				message_end();
				
				entity_get_vector(target, EV_VEC_origin, fOriginDestination)
				
				new Float:tempVelocity=0.0;
				new Float:fVelocity[3]
				pev(id,pev_velocity,fVelocity)
				fVelocity[2]=floatabs(fVelocity[2]);
				fVelocity[2]+= getParamBlock(ent, 1);
				tempVelocity=fVelocity[2]
					
				new Float:speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
				
				if( getParamBlock(ent, 2) != 0.0 ){
					velocity_by_aim(id,abs(floatround(speed+getParamBlock(ent, 2))),fVelocity)				
					fVelocity[2]+=tempVelocity;
				}
				speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
						
				new Float:fAngles[3]
				if(getParamBlock(ent, 3)!=0.0){
					new Float:radianRotate =(getParamBlock(ent, 3)* 3.14)/180
					
					new Float:ca = floatcos(radianRotate);
					new Float:sa = floatsin(radianRotate);
					
					pev(id, pev_angles, fAngles)				
					fAngles[1]+=getParamBlock(ent, 3);
					set_pev( id, pev_angles, fAngles)
					set_pev( id, pev_v_angle, fAngles)
					set_pev( id, pev_fixangle, 1)
					
					set_pev(id, pev_origin, fOriginDestination)
					
					
					tpVelocity[id][0] = ca*fVelocity[0] - sa*fVelocity[1]
					tpVelocity[id][1] = sa*fVelocity[0] + ca*fVelocity[1]
					
					tpVelocity[id][2] = floatmax(tempVelocity,getParamBlock(ent, 1))
					set_pev(id, pev_velocity, tpVelocity[id])
				
				}else{
					
					set_pev(id, pev_origin, fOriginDestination)
					set_pev(id, pev_velocity, fVelocity)
				}
				
				emit_sound(id, CHAN_WEAPON, soundsNames[0], 1.0, ATTN_NORM, 0, PITCH_NORM)	
				
				killCloseEnemies(id)				
			}
			new szClass[9]
			new Float:fOriginGranade[3];
			
			
			for(new granade = 33; granade < 1024; granade ++){
				
				if(!pev_valid(granade)) continue;
				
				if( granade == 0 )
					continue
				
				pev(granade, pev_classname, szClass, sizeof(szClass) )
			
				if(!equal(szClass, "grenade"))
					continue;
				
				entity_get_vector(granade, EV_VEC_origin, fOriginGranade)
						
				if( get_distance_f(fOrigin, fOriginGranade) > getParamBlock(ent, 0) ) continue;
				new target= entity_get_int(ent, EV_INT_iuser1);	
				if( target == 0 ) continue	
				if( !IsTeleport(target) ) continue
					
				new iOrigin[3]
				FVecIVec(fOrigin, iOrigin)
				message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin);
				write_byte(TE_IMPLOSION);
				write_coord(iOrigin[0]);
				write_coord(iOrigin[1]);
				write_coord(iOrigin[2]);
				write_byte(64);		
				write_byte(100);	
				write_byte(6);		
				message_end();
				
				entity_get_vector(target, EV_VEC_origin, fOriginDestination)
				
				new Float:tempVelocity=0.0;
				new Float:fVelocity[3]
				pev(granade,pev_velocity,fVelocity)
				fVelocity[2]=floatabs(fVelocity[2]);
				fVelocity[2]+= getParamBlock(ent, 1);
				tempVelocity=fVelocity[2]
					
				new Float:speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
				
				if( getParamBlock(ent, 2) != 0.0 ){
					velocity_by_aim(granade,abs(floatround(speed+getParamBlock(ent, 2))),fVelocity)				
					fVelocity[2]+=tempVelocity;
				}
				speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
						
				set_pev(granade, pev_solid, SOLID_NOT)	
					
				new Float:fAngles[3]
				if(getParamBlock(ent, 3)!=0.0){
					new Float:radianRotate =(getParamBlock(ent, 3)* 3.14)/180
					
					new Float:ca = floatcos(radianRotate);
					new Float:sa = floatsin(radianRotate);
					
					pev(granade, pev_angles, fAngles)				
					fAngles[1]+=getParamBlock(ent, 3);
					set_pev( granade, pev_angles, fAngles)
					set_pev( granade, pev_v_angle, fAngles)
					set_pev( granade, pev_fixangle, 1)
					
					set_pev(granade, pev_origin, fOriginDestination)
					
					
					tpGVelocity[granade][0] = ca*fVelocity[0] - sa*fVelocity[1]
					tpGVelocity[granade][1] = sa*fVelocity[0] + ca*fVelocity[1]
					
					tpGVelocity[granade][2] = floatmax(tempVelocity,getParamBlock(ent, 1))
					set_pev(granade, pev_velocity, tpGVelocity[granade])
				
				}else{
					
					set_pev(granade, pev_origin, fOriginDestination)
					set_pev(granade, pev_velocity, fVelocity)
				}
				
				emit_sound(granade, CHAN_WEAPON, soundsNames[0], 1.0, ATTN_NORM, 0, PITCH_NORM)	
				
				
			}
		}
	}
	/*if( !found ){
		if( task_exists(ent+TASK_TELEPORT) )
			remove_task(ent+TASK_TELEPORT)
		
		entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	}*/
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);

	return 1;
}
public speedUpTeleport(id){	
	set_pev(id, pev_velocity, tpVelocity[id])
}

/*
public menuLights(id){
	new menu=menu_create("Light", "menuLights_2")
	menu_additem(menu, "Create a lamp")
	menu_additem(menu, "Remove the lamp")
	menu_additem(menu, "Properties")
	menu_display(id, menu, 0 )
}
public menuLights_2(id,menu,item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:createLightAim(id)
		case 1:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsLight(ent) ){
				deleteBlock(ent)
			}
			
		}
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( !IsLight(ent) ){
				menuLights(id)
				return PLUGIN_CONTINUE
			}
			userBlockProperties[id]=ent
			changeRendering(id)
		}
	}
	
	return PLUGIN_CONTINUE
}
public createLightAim(id){	
	new iLook[3]
	new Float:fLook[3]
	get_user_origin(id, iLook, 3)
	IVecFVec(iLook, fLook)	
	fLook[2]+=4.0	
	createLight(fLook, Float:{255.0,255.0,128.0})
}
public createLight(Float:fOrigin[3], Float:Colors[3]){
	new ent = create_entity("env_sprite")
	if( !pev_valid(ent) )
		return -1;
		
	entity_set_string(ent, EV_SZ_classname, szLightClassName)	
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	
	entity_set_edict(ent, EV_ENT_euser1, 20)
	entity_set_int(ent, EV_INT_iuser4, 10)
	
	entity_set_vector(ent, EV_VEC_rendercolor, Float:{255.0,255.0,128.0} )
	entity_set_model(ent, "sprites/lightbulb.spr")
	entity_set_float(ent, EV_FL_scale, 0.25)
	entity_set_origin(ent, fOrigin)	
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);
	return ent;
}
public lightThink(ent){
	if( !pev_valid(ent) )
		return 0
	
	
	
		
	new Float:fOrigin[3], Float:fOriginPlayer[3], iOrigin[3]
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	
	if( !task_exists(ent+TASK_TELEPORT) ){
		for( new i =1;i<33();i++){
			if( !is_user_connected(i) || !is_user_alive(i) )
				continue;
			entity_get_vector(i, EV_VEC_origin, fOriginPlayer)	
			if( get_distance_f(fOriginPlayer, fOrigin) > 100 )
				continue;
			if( !task_exists(ent+TASK_TELEPORT) ){
				entity_set_int(ent, EV_INT_solid, SOLID_NOT)
				set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
				
				break
			}
		}
	}
	
	FVecIVec(fOrigin, iOrigin)
	new Float:fColor[3]
	entity_get_vector(ent, EV_VEC_rendercolor, fColor)
	new radius=entity_get_edict(ent, EV_ENT_euser1)
	new brightness=entity_get_int(ent, EV_INT_iuser4)
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin, 0);
	write_byte(TE_DLIGHT)			
	write_coord(iOrigin[0]);	
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2]);			
	write_byte(radius)			

	write_byte(floatround(fColor[0])); 
	write_byte(floatround(fColor[1])); 
	write_byte(floatround(fColor[2])); 
	
	write_byte(1)			
	write_byte(1)			
	message_end()
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.01);
	return 1;
}*/
public bool:isInvisible(id){
	if( userSkills[id][1][0] > get_gametime() )
		return true;
	return false;

}
public bool:isSpeed(id){
	if( userSkills[id][2][0] > get_gametime() )
		return true;
	return false;
}
public bool:isFeniks(id){
	if( userSkills[id][4][0] > get_gametime() )
		return true;
	return false;
}
public bool:isSkrzynka(id){
	if( userSkills[id][5][0] > get_gametime() )
		return true;
	return false;
}
public bool:isImmortal(id){
	if( userSkills[id][0][0] > get_gametime() )
		return true;
	return false;
}
public makeTrail(id) {
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(22)	// TE_BEAMFOLLOW
	write_short(id)
	write_short(beam_spr)
	write_byte(10)
	write_byte(8)
	write_byte(255)
	write_byte(150)
	write_byte(0)
	write_byte(255)
	message_end()

}
public killTrail(id){
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(99)	
	write_short(id)
	message_end()
}
public killAccelerate(id){
	if( !is_user_alive(id) || !is_user_connected(id) )
		return PLUGIN_CONTINUE
	killTrail(id)
	if( !isInvisible(id) || !isImmortal(id) ){
		setRendering(0, id, 255, 255, 255, 255)
	}			
	return PLUGIN_CONTINUE
}
stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)

{

    message_begin( MSG_ONE, get_user_msgid("ScreenFade"),{0,0,0},id );
    write_short( duration );
    write_short( holdtime );   
    write_short( fadetype );    
    write_byte ( red );        
    write_byte ( green );       
    write_byte ( blue );    
    write_byte ( alpha );    
    message_end();

}
public resetCamps(id){
	new menu = menu_create("[BM]^n\wDo you really want to reset the camps?", "resetCamps_2")
	menu_additem(menu, "Yes, reset")
	menu_additem(menu, "Don't, quit")	
	menu_display(id, menu, 0)
}	
public resetCamps_2(id, menu, item){
	if( item == MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			new ent=-1;
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( !pev_valid(ent) ) 
					continue
				setEditBlock(ent, 0, 0 )
				setEditBlock(ent, 1, 0 )
				setEditBlock(ent, 2, 0 )
			}
			ColorChat(id, TEAM_COLOR, "[BM]^x01 Successfully reset")
		}
	}
	editCamp(id)		
	return PLUGIN_CONTINUE
}
stock displayFade(id,duration,holdtime,fadetype,red,green,blue,alpha){
	if (!is_user_alive(id)) return;
	static msgScreenFade;
	if (!msgScreenFade) msgScreenFade = get_user_msgid("ScreenFade");
	message_begin(MSG_ONE, msgScreenFade, {0, 0, 0}, id);
	write_short(duration); write_short(holdtime); write_short(fadetype); write_byte(red); write_byte(green); write_byte(blue); write_byte(alpha);
	message_end();
}
public fwd_touch(toucher, touched){
	if( !pev_valid(toucher) || !pev_valid(touched) || touched == 0 || toucher == 0 )
		return PLUGIN_CONTINUE
		
	new szClassEnt_1[33], szClassEnt_2[33]
	pev(toucher, pev_classname, szClassEnt_1, sizeof(szClassEnt_1) )
	pev(touched, pev_classname, szClassEnt_2, sizeof(szClassEnt_2) )
	
	
	if(IsBlock(toucher)){
			
		if( equal(szClassEnt_2, "grenade") ){
			if( pev(touched, pev_iuser1) == 0){
				new Float:fVelocity[3]
				pev(touched, pev_velocity, fVelocity)
				fVelocity[0] *= -1;
				fVelocity[1] *= -1;
				fVelocity[2] *= -1;
				set_pev(touched, pev_velocity, fVelocity)
				set_pev(touched, pev_iuser1, 1)
				
			}
		}
	}
	return PLUGIN_CONTINUE
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
this plugin works fine with hlds

Аватар
mharisrazaa
Извън линия
Потребител
Потребител
Мнения: 31
Регистриран на: 15 Дек 2021, 17:15
Местоположение: Pakistan
Се отблагодари: 2 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от mharisrazaa » 27 Дек 2021, 18:45

still waiting for solution.

Аватар
rago12
Извън линия
Потребител
Потребител
Мнения: 63
Регистриран на: 10 Апр 2017, 15:23
Получена благодарност: 34 пъти

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от rago12 » 27 Дек 2021, 19:00

Код за потвърждение: Избери целия код

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

#if AMXX_VERSION_NUM < 183
	#include < dhudmessage >
#endif

//native pm_get_maxhealth(id);

stock const NEED_PLAYERS = 3;

new const caseModel[]     =     "models/test/box.mdl";
new blokJump[33], dwajumpy[33], addjb[33];
new feniks[33];
new jaktambmik, trybgiereczki;
new wolebmalb[33];
new gColor[33][3];
new gWidth[33];
new SwiatloMapa;
new CzasTimera[33], ZatrzymanyTimer[33], NagrodaTimer[33];
new line_green, line_yellow, line_red, line_pink, line_orange, line_blue;
new bool: LinkaNaSurf[33];

new bool:g_low_gravity[33];
new bool:g_low_trampoline[33];
new bool:g_low_trampoline_2[33];
new Float:userLatency[33], userLatency2[33];

new sprite_fire

new Float:userAngles[3];


//#define EXTRA_POINTS_BLOCK_VIP 20
//#define EXTRA_POINTS_BLOCK 0

new const Float:SpeedInWater =	64.0;
new const PLUGIN[] ="BlockMaker"
new const VERSION[] = "1.0"
new const AUTHOR[] = "Albertd"
new const szBlockClassName[] = "blockMaker"
new const szTeleClassName[] = "blockTele"
new const szLightClassName[] = "blockLight"
new const szFolderName[] = "BM1"
enum{PLATFORM=0, BHOP, NOSLOWBHOP, DEATH, NOFALL, TRAMPOLINE, SPEEDBOOSTER, DAMAGE, HEALTH, DUCK, BHOPLATENCY, HONEY, BARRIERTT, BARRIERCT, BARRIERVIP, 
GLASS, ICE, GODMODE, INVIS, GUN, GRENADE, BOOTS, CAMOUFLAGE, MUSIC, EXP, WATER, AMMO, POTION, GRAVITY, DODATKOWES, FENIKS, AUTOBH, SURFP, SURFB, SURFS, SURFT, SURFM, SURFO, SURFL, SKRZYNKA, TIMERSTART, TIMERSTOP, NUMBLOCKS}
enum{NORMAL=0, LARGE, SMALL, TINY}
	
	
#define TASK_BHOP 1000
#define TASK_NOSLOW 2000 
#define TASK_ICE 3000
#define TASK_SPRITE 4000
#define TASK_TELEPORT 5100
#define TASK_VISIBLE 6000
#define TASK_CAMOUFLAGE 7000
#define TASK_SKILL_HUD 8000
#define TASK_TRIGGER 9000
#define TASK_AUTOSAVE 10000
#define TASK_FENIKS 11000
#define TASK_SOLIDTRIGGER 12000

new const modelCamouflage[8][]={
	"guerilla",
	"leet", 
	"arctic",
	"terror",	
	"sas",
	"gign",
	"gsg9",
	"urban"
}
new const teleportsSprites[4][2][]={
	{"sprites/blockmaker/teleport_wejscie.spr", "6"},
	{"sprites/blockmaker/teleport_wyjscie.spr", "4"},
	{"sprites/blockmaker/getbonus.spr", "0"},
	{"sprites/blockmaker/bhopKor.spr", "0"}
}
new const soundsNames[15][]={
	"blockmaker/teleport.wav",			//0
	"blockmaker/niesmiertelnosc.wav",	//1
	"blockmaker/niewidzialnosc.wav",	//2
	"blockmaker/kamuflaz.wav",			//3
	"blockmaker/exp.wav",				//4
	"blockmaker/bron.wav",				//5
	"blockmaker/buty_szybkosci.wav",	//6
	"blockmaker/kamuflaz.wav",			//7
	"blockmaker/trampoline1.wav",		//8
	"blockmaker/trampoline2.wav",		//9
	"blockmaker/trampoline3.wav",		//10
	"blockmaker/trampoline4.wav",		//11
	"blockmaker/heal.wav",				//12
	"blockmaker/heart.wav",				//13
	"blockmaker/Phoenix.wav"			//14
}
new const blocksSize[4][3][] = {
	{"", "Normal", "1.0"},
	{"_large", "Large", "2.0"},
	{"_small", "Small", "0.25"}, 
	{"_pole", "Pole", "1.0"}
}

new const blockMusic[10][2][]={	
	{"blockmaker/muzyka/ms1.wav","Carta & Robert Falcon - Love Shouldn't Be So Hard"},
	{"blockmaker/muzyka/ms2.wav","Crazy Loop - Crazy Loop (Black Due Bootleg)"},
	{"blockmaker/muzyka/ms3.wav","Crazy Loop - Crazy Loop (Black Due Bootleg)"},
	{"blockmaker/muzyka/ms4.wav","Dr. Alban - It's My Life"},
	{"blockmaker/muzyka/ms5.wav","Gigi D'Agostino - L'Amour Toujours"},
	{"blockmaker/muzyka/ms6.wav","Martin Garrix & Dua Lipa - Scared To Be Lonely"},
	{"blockmaker/muzyka/ms7.wav","Klaas - Our Own Way 2017 (Danny Rush Bootleg)"},
	{"blockmaker/muzyka/ms8.wav","Opus - Live Is Life (Remix 2016)"},
	{"blockmaker/muzyka/ms9.wav","Savage - Only You (YASTREB Radio Edit)"},
	{"blockmaker/muzyka/ms10.wav","Mariah Cary - All I Want For Christmas"}
}
new const blocksProperties[NUMBLOCKS][7][]={
	{"Platfrom", 			"platform", "1", 	"8", 	"-1", 	"0", 	"-1"},	//0
	{"Bhop", 				"platform",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//1
	{"Noslow Bhop",			"platform",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//2
	{"Death",				"platform",	"1", 	"14", 	"18", 	"-1", 	"-1"},	//3
	{"NoFallDamage",		"platform",	"1",	"-1", 	"-1", 	"0", 	"-1"},	//4
	{"Trampoline",			"platform",	"1",	"2", 	"14",	"-1", 	"-1"},	//5
	{"Speedboost",				"platform",	"1", 	"8", 	"2", 	"3", 	"-1"},	//6
	{"Damage",				"platform",	"1", 	"4",	"6", 	"14", 	"-1"},	//7
	{"Health",				"platform",	"1", 	"5",	"6", 	"-1", 	"-1"},	//8
	{"Duck",				"platform",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//9
	{"Bhop Delayed",		"platform",	"1", 	"8", 	"0", 	"-1", 	"-1"},	//10
	{"Honey",				"platform",	"1", 	"7",	"14", 	"-1", 	"-1"},	//11
	{"Barrier TT",			"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//12
	{"Barrier CT",			"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//13
	{"Barrier VIP",			"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//14
	{"Glass",				"platform",	"1", 	"-1", 	"-1", 	"-1", 	"-1"},	//15
	{"Ice",					"platform",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//16
	{"Immortality",			"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//17
	{"Stealth",		"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//18
	{"Weapon",				"platform",	"1",	"11", 	"13", 	"14", 	"-1"},	//19
	{"Grenade",				"platform",	"1",	"17", 	"13", 	"14", 	"-1"},	//20
	{"Boots Of Speed",		"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//21
	{"Camouflage",			"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//22
	{"Music",				"platform",	"1",	"14", 	"-1",	"-1", 	"-1"},	//23
	{"XP",				"platform",	"1",	"12", 	"20", 	"14", 	"25"},	//24
	{"Water",				"platform",	"1", 	"16", 	"-1", 	"-1", 	"-1"},	//25
	{"Bullets",				"platform",	"1", 	"11", 	"13", 	"-1", 	"-1"},	//26
	{"Potion (Not Work)",		"platform",	"1", 	"5", 	"14", 	"-1", 	"-1"},	//27
	{"Gravity", 			"platform", "1", 	"8", 	"21", 	"-1", 	"-1"},	//28
	{"Double Jump", 		"platform", "1", 	"8", 	"22", 	"24", 	"-1"},	//29
	{"Phoenix",				"platform",	"1",	"9", 	"10", 	"14", 	"-1"},	//30
	{"SpamBH",				"platform",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//31
	{"Surf: Platfrom", 		"Surfik",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//32
	{"Surf: Bhop", 			"Surfik",	"1", 	"8", 	"-1", 	"0", 	"-1"},	//33
	{"Surf: Death",			"Surfik",	"1", 	"14", 	"18", 	"-1", 	"-1"},	//34
	{"Surf: Trampoline",	"Surfik",	"1",	"2", 	"14",	"-1", 	"-1"},	//35
	{"Surf: SpeedBoost",			"Surfik",	"1", 	"8", 	"2", 	"3", 	"-1"},	//36
	{"Surf: Bhop Delayed",	"Surfik",	"1", 	"8", 	"0", 	"-1", 	"-1"},	//37
	{"Surf: Ice",			"Surfik",	"1", 	"8", 	"-1", 	"-1", 	"-1"},	//38
	{"Chest (Not Work)",				"platform",	"1",	"10", 	"14", 	"-1", 	"-1"},  //39
	{"Timer:Start",			"platform",	"1",	"-1", 	"-1", 	"-1", 	"-1"},  //40
	{"Timer:Stop",			"platform",	"1",	"26", 	"27", 	"-1", 	"-1"}   //41
};
new const defaultParamBlocks[NUMBLOCKS][5][]={
	{"1.0", 	"1.0", 		"", 		"", 		""},	//0
	{"0.0", 	"1.0", 		"", 		"", 		""},	//1
	{"0.0", 	"1.0", 		"", 		"", 		""},	//2
	{"1.0", 	"0.0", 		"1.0", 		"0", 		""},	//3
	{"0.0",		"20.0", 	"", 		"", 		""},	//4
	{"1.0",		"350.0", 	"0.0",		"0", 		""},	//5
	{"1.0", 	"0.0", 		"200.0",	"700.0",	"0"},	//6
	{"1.0", 	"2.0",		"0.5", 		"0.0", 		"0"},	//7
	{"1.0", 	"1.0",		"0.5", 		"0", 		""},	//8
	{"1.0", 	"1.0", 		"0", 		"", 		""},	//9
	{"1.0", 	"1.0", 		"1.0", 		"", 		""},	//10
	{"1.0", 	"70.0",		"0.0", 		"0", 		""},	//11
	{"0.0", 	"0.0", 		"", 		"", 		""},	//12
	{"0.0", 	"0.0", 		"", 		"", 		""},	//13
	{"0.0", 	"0.0", 		"", 		"", 		""},	//14
	{"1.0", 	"", 		"", 		"", 		""},	//15
	{"0.0", 	"1.0", 		"0", 		"", 		""},	//16				
	{"1.0",		"10.0", 	"60.0", 	"0.0", 		"0"},	//17
	{"1.0",		"15.0", 	"60.0", 	"0.0", 		"0"},	//18
	{"1.0",		"-1.0", 	"1.0", 		"0.0", 		"0"},	//19 hz, weapon, bullets,avaible for,hz
	{"1.0",		"0.0", 		"1.0", 		"1.0", 		"0"},	//20
	{"1.0",		"15.0", 	"60.0", 	"0.0", 		"0"},	//21
	{"1.0",		"10.0", 	"60.0", 	"0.0", 		"0"},	//22
	{"1.0",		"0.0", 		"0",		"", 		""},	//23
	{"1.0",		"10.0", 	"5.0", 	"1.0", 		"0"},	//24
	{"0.0",		"250", 		"", 		"", 		""},	//25
	{"1.0", 	"-1", 		"1", 		"0", 		""},	//26
	{"1.0", 	"0.0", 		"1.0", 		"", 		""},	//27
	{"1.0", 	"1.0", 		"0.5", 		"0", 		""},	//28
	{"1.0", 	"1.0", 		"1.0", 		"250", 		"0"},	//29
	{"1.0", 	"10.0", 	"60.0", 	"0.0", 		"0"},	//30
	{"1.0", 	"1.0", 		"0.0",		"", 		""},	//31
	{"1.0", 	"1.0", 		"", 		"", 		""},	//32
	{"1.0", 	"1.0", 		"", 		"", 		""},	//33
	{"1.0", 	"0.0", 		"1.0", 		"0", 		""},	//34
	{"1.0",		"350.0", 	"0.0",		"0", 		""},	//35
	{"1.0", 	"1.0", 		"200.0",	"700.0", 	"0"},	//36
	{"1.0", 	"1.0", 		"1.0", 		"", 		""},	//37
	{"0.0", 	"1.0", 		"0", 		"", 		""},	//38
	{"1.0", 	"", 		"1.0", 		"", 		"0"},   //39
	{"0.0", 	"1.0", 		"0", 		"", 		""},	//40
	{"0.0", 	"10", 		"10", 		"", 		""}		//41
};
#define PROPERTIES 28

new Float:properties[1024][PROPERTIES]
new const propertiesName[PROPERTIES][3][]={
	{"Delay",								"float",	"1"},	//0
	{"Only from the top",					"bool",		"1"},	//1
	{"Breakout",							"int",		"1"},	//2
	{"Speed",								"int",		"1"},	//3	
	{"Damage", 								"float",	"1"},	//4	
	{"Health",								"float",	"1"},	//5
	{"What how many", 						"float",	"1"},	//6
	{"Slowing down",						"float",	"1"},	//7
	{"Deals damage",						"bool",		"1"},	//8	
	{"Duration",							"float",	"1"},	//9
	{"Cooldown",							"float",	"1"},	//10
	{"Weapon",								"weapon",	"1"},	//11
	{"Coins",								"int",		"1"},	//12
	{"Bullets",								"int",		"1"},	//13
	{"Available for",						"team",		"1"},	//14
	{"Speed",								"int",		"1"},	//15
	{"Wave height",							"float",	"1"},	//16
	{"Grenade",								"grenade",	"1"},	//17
	{"He kills with god",					"bool",		"1"},	//18
	{"Acceleration",						"int",		"1"},	//19
	{"Bonus VIP",							"int",		"1"},	//20
	{"Gravity",								"float",	"1"},	//21
	{"Quantity jumps",						"int",		"1"},	//22
	{"Type (BHOPEFFECT)",					"bool",		"1"},	//23
	{"Breakout Power",						"int",		"1"},	//24
	{"Which coins",							"Coiny",	"1"},	//25
	{"Time to get your prize",				"int",		"1"},	//26
	{"Time for the displayed nickname",		"int",		"1"}	//27
}	
#define PROPERTIESTELE 7
new const propertiesTele[PROPERTIESTELE][3][0]={
	{"Range",			"float", 	"64.0"},
	{"Breakout",		"float", 	"0.0"},
	{"Speed",			"float", 	"0.0"},
	{"Rotation",		"float", 	"0.0"},
	{"Red",				"int",		"0"},
	{"Green",			"int",		"0"},
	{"Blue",			"int",		"0"}
}
new const propertiesRendering[5][]={	
	"Normal",
	"GlowShell | Normal",
	"GlowShell | TransColor",
	"TransColor",
	"TransAdd"
}
new const IntelligentRotating[4][]={
	"Off",
	"All of them",
	"One size",
	"One kind"
}
new const forWho[4][]={	
	"All",
	"Terrorist",
	"Anti-Terrorists",
	"Vip"
}
new const forCoi[3][]={	
	"Bronze",
	"Silver",
	"Gold"
}
enum ( <<= 1 )
{
	B1 = 1,
	B2,
	B3,
	B4,
	B5,
	B6,
	B7,
	B8,
	B9,
	B0
};
//"weapon_hegrenade", "weapon_flashbang", "weapon_smoke",
//"Hegrenade", "Flashbang", "Smoke",
new weaponsName[24][] = {
	"Deagle", 	"Glock",	"Usp",		"Fiveseven",	"P228",	"Elite",
	"M4A1",		"AK47",		"Awp",		"Scout",	"Krowa",	"Aug",		"SG552",	"MP5",		"Famas",	
	"Ump45",	"Galil",	"M3",		"XM1014",	"MAC10",	"TMP",		"P90",		"Auto CT",	"Auto TT"
	
}
new weaponsGive[24][] = {	
	
	"weapon_deagle", "weapon_glock18", "weapon_usp", "weapon_fiveseven", "weapon_p228", "weapon_elite",
	"weapon_m4a1", "weapon_ak47", "weapon_awp", "weapon_scout", "weapon_m249", "weapon_aug", "weapon_sg552", "weapon_mp5navy", "weapon_famas", 
	"weapon_ump45", "weapon_galil", "weapon_m3", "weapon_xm1014", "weapon_mac10", "weapon_tmp", "weapon_p90", "weapon_g3sg1", "weapon_sg550"
	
}
new grenadesName[3][]={	
	"Hegrenade", "Smoke", "Flash"
}
new grenadesGive[3][]={	
	"weapon_hegrenade", "weapon_smokegrenade","weapon_flashbang"
}
new cswGrenade[]={
	CSW_HEGRENADE,
	CSW_SMOKEGRENADE,
	CSW_FLASHBANG
}
//USER
	//BM
		new bool:layoutStyle
		new bool:blockMakerAcces
		new pathFolder[82]
		new pathFileBlocks[82]
		new pathFileTele[82]
		new pathFileBlocksBackUp[122]
		new pathFileTeleBackUp[122]
		new userSelectedBlock[33]
		new userSelectedSize[33]
		new userBlockProperties[33]
		new userBlockColorChange[33]
		new userBlockParamChange[33]
		new bool:userBmShorCut[33]
		new userEntGrab[33]
		new Float:userEntOffset[33][3]
		new Float:userLength[33]
		new Float:userSnapDist[33]
		new bool:userSnap[33]
		new bool:userGodMode[33]
		new bool:userNoClip[33]
		new bool:userRespawn[33]
		new userInteligent[33]
		new Float:userMoveDist[33];
		new Float:userKrecDist[33];
		new userLastMoved[33]
		new Float:userChangeTime[33]
		new userLastTpCreated[33]
		new userAdminBlockTest[33]
		new bool:autoSave
	//USER
		new bool:userNoSlow[33]
		new bool:userNoFall[33]		
		new Float:userAddVelocity[33][3]		
		new Float:userLastTouchBlock[33]
		new bool:userDuck[33]
		new bool:userJump[33]
		new Float:userSpeedReduction[33]
		new bool:userRefreshSpeed[33]
		new bool:userOnIce[33]
		
		new Float:userSkills[33][6][2]
		new bool:userSkillsRenew[33][6]
		
		new userBlockUsed[33][30]
		new userCampAchived[33][20]
		
		new bool:userHud[33]
		new Float:userHudShow[33]
		new userCampSave[33][3]
		new Float:userSound[33]
		new Float:userSlow[33][2]
		
		new userSlowed[33]
		new Float:userSlowedTime[33]
		
		new bonusCampNum
		new bonusCampId[33]
		new bonusCampRound
		new entBonus
		new entbhopspr
		new lastTouched[33]
		
		new userBM[33]
		new userPlayersMenu[33]
		new bool:GodAll
		new Float:deathTouched[33]
		new userLetBlock[33]
		new Float:userLastOrigin[33][3]
		new Float:userMagicSpeed[33]
		new bool:userMagic[33]
		
		new Float:userSaveLocation[33][3]
		new Float:userSaveAngles[33][3]
		new bool:userCheckPoint[33]
		new Float:changeRightBlock[33]
		new Float:changeLeftBlock[33]
		new Float:tpVelocity[33][3]
		new sprite_heal;
		
		new Float:userAimingInfo[33]
		
		
		
new const skillsName[5][]={
	"Immortality",
	"Invisibility",
	"Speed",
	"Camouflage",
	"Phoenix"
	//"Czas odnowienia"
}

new typesCampBlock[4][]={
	"Default",
	"Transition block",
	"End block",
	"Start block"
}
new beam_spr;
new forwardCampEnd

new typeMap
new actualStyle[33]
new stylesMenu[8][33]
new bool:wrong
public plugin_init() {
	//wrong=false
	//get_user_ip(0, szIp, sizeof(szIp), 0)
	//if( equal(szIp, "192.168.1.242:27016") )
	wrong=true
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_clcmd("say", "cmdSay")
	register_clcmd("say_team", "cmdSay")
	
	register_forward(FM_PlayerPreThink, "fwd_prethink");	
	register_touch(szBlockClassName, "player", "touchBlock")
	register_event("DeathMsg", "DeathMsg", "ade");		
	
	register_logevent("round_start", 2, "1=Round_Start");
	register_logevent("round_end", 2, "1=Round_End")  
	
	RegisterHam(Ham_Spawn, "player", "ham_Spawn", 1);
	RegisterHam(Ham_TraceAttack, "player", "ham_traceAttack") 
	register_forward(FM_CmdStart, "cmd_start");
	RegisterHam(Ham_TakeDamage,  "player", "ham_TakeDamage")
	register_impulse(100, "FunkcjaLatarki")
	
	register_menu("makerMain",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B0,			"makerMain_2");
	register_menu("blockMaker",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"blockMaker_2");
	register_menu("GrzyboMenu",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"GrzyboMenu_2");
	register_menu("blockObkrec",	B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"blockObkrec_2");
	register_menu("menuMoveBlockGrzyb",	B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"menuMoveBlock_2");
	register_menu("teleMenu",		B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0,		"teleMenu_2");
	register_menucmd(register_menuid("NagrodaMenu"), 1023, "HandleNagrodaMenu");
	

	register_clcmd("+bmgrab", "cmdHookGrab")
	register_clcmd("-bmgrab", "cmdReleaseGrab")
	register_clcmd("value", "getTextValue" )
	register_clcmd("WartoscObkrecania", "ZmienWartoscObkrecania");
	register_clcmd("WartoscPosuwania", "ZmienWartoscPosuwania");
	register_clcmd("layout", "getNewLayout" )
	
	register_think(szTeleClassName, "teleportThink");
	register_think("bhopsprblock", "ThinkSpritesBlock");
	register_think(szBlockClassName, "thinkWater");
	//register_think(szLightClassName, "lightThink")
	
	new fulldir[126]
	new dir[62]
	get_configsdir(dir,61);
	format(fulldir,127,"%s/campoLevel.ini",dir);
	if(!file_exists(fulldir))	{
		write_file(fulldir,"");
		typeMap=0
	}else{	
		new iLen
		new temp[33]
		read_file(fulldir, 0, temp, sizeof(temp), iLen)		
		copy(actualStyle, sizeof(actualStyle), temp)
		if( !layoutExist() ){
			if( !randomStyle() )
				copy(actualStyle, sizeof(actualStyle), "Default")
		}
	}
	
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));	
	formatex(folderDir, charsmax(folderDir), "/%s/%s/", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	if( !dir_exists(dataDir) ) mkdir(dataDir)
	
	setLevel()
	
	//set_task(1.0, "LoadBlocks")
	LoadBlocks(0)
	forwardCampEnd=CreateMultiForward("ForwardCampEnd", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL, FP_CELL, FP_CELL);
	blockMakerAcces=true
	
	SwiatloMapa=4;
}
public cmdSay(id){
	new szMessage[32];
	read_args(szMessage, charsmax(szMessage));
	remove_quotes(szMessage);
	if( szMessage[0] == '/'){
		if( equali(szMessage, "/bm") == 1 ){

			if(jaktambmik){			
				makerMain(id)
				return PLUGIN_HANDLED;
			}
			ColorChat(id, TEAM_COLOR, "[FNJ-Gaming]^x01 has been disabled by the ^x04Server Supporter")
			return PLUGIN_HANDLED;
		}
		if( equali (szMessage, "/admin")){
			makerAdmin(id)
			return PLUGIN_HANDLED;
		}
		if( equali (szMessage, "/a")){
			makerAdmin(id)
			return PLUGIN_HANDLED;
		}
		if( equali (szMessage, "/switch")){
			if(wolebmalb[id])
			{
				wolebmalb[id] = false;
			}
			else
			{
				wolebmalb[id] = true;
			}
			return PLUGIN_HANDLED
		}
		if( equali (szMessage, "/byty")){
			ColorChat(id, TEAM_COLOR, "[FNJ-Gaming]^x01 Bytow on the map^x04 %d", entity_count());
			return PLUGIN_HANDLED
		}
	}
	return PLUGIN_CONTINUE;
}

public makerAdmin(id) {
	if (get_user_flags(id) & ADMIN_RCON) MmakerAdmin(id);
	else ColorChat(id, TEAM_COLOR, "[FNJ-Gaming]^x01 You do not have access to BM Admin Panel");
	return PLUGIN_HANDLED;
}

public MmakerAdmin(id)
{
	new gText[128];
	new menu, oswietlenie[20], formats[64];
	if(SwiatloMapa == 1)	oswietlenie = "\y|||||||";
	if(SwiatloMapa == 2)	oswietlenie = "\y|\r||||||";
	if(SwiatloMapa == 3)	oswietlenie = "\y||\r|||||";
	if(SwiatloMapa == 4)	oswietlenie = "\y|||\r||||";
	if(SwiatloMapa == 5)	oswietlenie = "\y||||\r|||";
	if(SwiatloMapa == 6)	oswietlenie = "\y|||||\r||";
	if(SwiatloMapa == 7)	oswietlenie = "\y||||||\r|";
	formatex(formats,charsmax(formats),"\wAdmin Panel")
	menu = menu_create(formats,"handle_makerAdmin");
	{
		format(gText,sizeof(gText), "\wBlockMaker \r%s", jaktambmik?"\yON":"\dOFF")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\wDesign BM Menu: \r%s", wolebmalb[id]?"\yAlbertd":"\yGrzyboo")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\wMode: \r%s", trybgiereczki?"\yBuild":"\dGame")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\wMap lighting: %s", oswietlenie)
		menu_additem(menu, gText);
	}
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_setprop(menu,MPROP_NEXTNAME,"Next")
	menu_setprop(menu,MPROP_BACKNAME,"Back")
	menu_display(id,menu,0)
	return PLUGIN_HANDLED
}
public handle_makerAdmin(id, menu, item)
{
	switch(item)
	{
		case 0:
		{
			if(jaktambmik){
				jaktambmik = false;
				makerAdmin(id)
			}
			else{
				jaktambmik = true;
				makerAdmin(id)
			}
		}
		case 1:
		{
			if(wolebmalb[id])
			{
				wolebmalb[id] = false;
				ColorChat(id, TEAM_COLOR, "[BM]^x01 Design BM Menu by Grzyboo")
				makerAdmin(id)
			}
			else
			{
				wolebmalb[id] = true;
				ColorChat(id, TEAM_COLOR, "[BM]^x01 Design BM Menu by Albertd")
				makerAdmin(id)
			}
		}
		case 2:
		{
			SprawdzCzyNapewno(id);
		}
		case 3:
		{
			if(SwiatloMapa == 1){
				SwiatloMapa = 2;
				set_lights("a")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 2){
				SwiatloMapa = 3
				set_lights("b")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 3){	
				SwiatloMapa = 4
				set_lights("c")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 4){	
				SwiatloMapa = 5
				set_lights("#OFF")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 5){	
				SwiatloMapa = 6
				set_lights("x")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 6){	
				SwiatloMapa = 7
				set_lights("y")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
			if(SwiatloMapa == 7){	
				SwiatloMapa = 1
				set_lights("z")
				makerAdmin(id);
				return PLUGIN_HANDLED;
			}
		}
	}	
	return PLUGIN_HANDLED;
}
public SprawdzCzyNapewno(id){
	new gText[128];
	new menu, Sieema[20], Sieema2[20], formats[64];
	if(trybgiereczki == 1){
		Sieema = "GAME";
		Sieema2 = "BUILD";
	}
	if(trybgiereczki == 0){
		Sieema = "BUILD";
		Sieema2 = "GAME";
	}
	formatex(formats,charsmax(formats),"\wAre you sure to change the MODE?^n\r %s\w -->\y %s", Sieema2, Sieema)
	menu = menu_create(formats,"handle_SprawdzCzyNapewno");
	{
		format(gText,sizeof(gText), "\yYes")
		menu_additem(menu, gText);
		format(gText,sizeof(gText), "\rNo")
		menu_additem(menu, gText);
	}
	menu_setprop(menu,MPROP_EXIT,MEXIT_ALL)
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_setprop(menu,MPROP_NEXTNAME,"Next")
	menu_setprop(menu,MPROP_BACKNAME,"Back")
	menu_display(id,menu,0)
	return PLUGIN_HANDLED
}

public handle_SprawdzCzyNapewno(id, menu, item)
{
	switch(item)
	{
		case 0:
		{
			if(trybgiereczki)
			{
				set_cvar_num("mp_roundtime", 3);
				set_cvar_num("mp_autoteambalance", 1);
				set_cvar_num("mp_limitteams", 1);
				set_cvar_num("sv_alltalk", 1);
				set_cvar_num("mp_timelimit", 25);
				trybgiereczki=false;
				ColorChat(id, TEAM_COLOR,"[BM]^x01 you set the round time to^x04 GAME")
			}
			else
			{
				set_cvar_num("mp_roundtime", 99);
				set_cvar_num("mp_autoteambalance", 0);
				set_cvar_num("mp_limitteams", 0);
				set_cvar_num("sv_alltalk", 1);
				set_cvar_num("mp_timelimit", 999);
				trybgiereczki=true;
				ColorChat(id, TEAM_COLOR,"[BM]^x01 you set the round time to^x04 BUILD")
			}
			makerAdmin(id);
		}
		case 1:
		{
			makerAdmin(id);
		}
	}	
	return PLUGIN_HANDLED;
}
public bool:randomStyle(){
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	if ( !dir_exists(dataDir) )
		return false
	
	new szFile[32];
	new x=0;
	new folderHandle = open_dir(dataDir, szFile, charsmax(szFile));
	if(!folderHandle) 
		return false;
	while(next_file(folderHandle, szFile, charsmax(szFile))){				
		if(!equal(szFile, "..") && !equal(szFile, ".") && !equal(szFile, "BackUp")) {
			copy(stylesMenu[x++], sizeof(stylesMenu[]), szFile)
		}
	}
	close_dir(folderHandle)
	if( x == 0 )
		return false
	copy(actualStyle, sizeof(actualStyle), stylesMenu[random(x)])
	return true;
}
public layoutExist(){
	
	new folderDir[64]
	new dataDir[64]	
	new szMap[33]
	get_mapname(szMap, sizeof(szMap) )
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s", szFolderName, szMap, actualStyle);
	
	add(dataDir, charsmax(dataDir), folderDir);
	if ( !dir_exists(dataDir) ) return false
	return true;
}
public futureLayout(){
	new fulldir[126]
	new dir[62]
	new name[33]	
	get_string(1, name, 32)
	get_configsdir(dir,61);
	format(fulldir,127,"%s/campoLevel.ini",dir);	
	new file = fopen(fulldir, "wt")	
	fputs(file, name);
	fclose(file)
}
public setLevel(){

	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(pathFolder, charsmax(pathFolder));	
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s/BackUp", szFolderName, szMap, actualStyle);
	
	add(pathFolder, charsmax(pathFolder), folderDir);
	if ( !dir_exists(pathFolder) ) mkdir(pathFolder);
	
	get_datadir(pathFolder, charsmax(pathFolder));
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s", szFolderName, szMap, actualStyle);
	
	add(pathFolder, charsmax(pathFolder), folderDir);
	if ( !dir_exists(pathFolder) ) mkdir(pathFolder);	
	
	
	formatex(pathFileBlocks, charsmax(pathFileBlocks), "%s/%s.%s", pathFolder, szMap, szFolderName);
	formatex(pathFileTele, charsmax(pathFileTele), "%s/%sTele.%s", pathFolder, szMap, szFolderName);
	formatex(pathFileBlocksBackUp, charsmax(pathFileBlocksBackUp), "%s/BackUp/%s", pathFolder, szMap);
	formatex(pathFileTeleBackUp, charsmax(pathFileTeleBackUp), "%s/BackUp/%sTele", pathFolder, szMap);	
	
	
	get_datadir(pathFolder, charsmax(pathFolder));	
	formatex(folderDir, charsmax(folderDir), "/%s/%s/%s/slow.%s", szFolderName, szMap, actualStyle, szFolderName);	
	add(pathFolder, charsmax(pathFolder), folderDir);
	if(!file_exists(pathFolder)){
		write_file(pathFolder,"noslow");
	}else{
		new iLen
		new temp[33]
		read_file(pathFolder, 0, temp, sizeof(temp), iLen)	
		if(equali(temp, "slow"))
			layoutStyle=true;
		else layoutStyle=false; 
	}
}
public plugin_natives(){
	register_native("bm_build", "isCreative", 1 ) 
	register_native("bm_is_immortal", "isImmortal", 1 ) 
	register_native("bm_is_invisible", "isInvisible", 1 ) 
	register_native("bm_get_skill", "returnSkillTime", 1 ) 
	register_native("bm_set_skill", "setSkillTime", 1 ) 
	register_native("bm_set_speed", "setUserSlow", 1 ) 
	register_native("bm_set_future_layout", "futureLayout" ) 
	register_native("get_serv_bm","return_serv_bm", 1)
}
public return_serv_bm()
{
	return jaktambmik;
}
public bool:isCreative(id)
	return userBmShorCut[id]
public Float:returnSkillTime(id, skill){
	return userSkills[id][skill][0]
}
public Float:setUserSlow(id, Float:stopTime, Float:slow){
	userSlow[id][0]=stopTime
	userSlow[id][1]=slow	
}
public setSkillTime(id, skill, Float:timeNew){
	if( skill == 1){
		if( isInvisible(id) ){
			change_task(id+TASK_VISIBLE, userSkills[id][skill][0] - get_gametime()+timeNew-get_gametime())
			
		}
		else {				
			emit_sound(id, CHAN_WEAPON, soundsNames[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setRendering(0, id, 255,255,255,0)			
			set_task(timeNew-get_gametime(), "userVisible", id+TASK_VISIBLE)
			
		}
	}else if( skill==0 ){	
		if( isImmortal(id) ){
			change_task(id+TASK_VISIBLE, userSkills[id][skill][0] - get_gametime()+timeNew-get_gametime())			
		}else{
			if( !isInvisible(id) )
				setRendering(1, id, 255,255,255,2)
			set_task(timeNew-get_gametime(), "userVisible", id+TASK_VISIBLE)			
			emit_sound(id, CHAN_WEAPON, soundsNames[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
		}
		
		
	}
	if( task_exists(id+TASK_SKILL_HUD ) )
		remove_task(id+TASK_SKILL_HUD)
		
	set_task(0.1, "showHud", id+TASK_SKILL_HUD)
	userSkills[id][skill][0]=timeNew
	
	
}
public client_connect(id){
	userMoveDist[id] = 1.0;
	//new flags = read_flags("bcdefghijklmnopqrstu")
	//set_user_flags(id, flags)
	userResetVarsRound(id)
	
	userEntGrab[id]=-1;
	userSnap[id]=true;
	userHud[id]=false
	userNoClip[id]=false
	userGodMode[id]=false
	userRespawn[id]=false;
	userBmShorCut[id]=false;
	ZatrzymanyTimer[id]=true;
	NagrodaTimer[id]=false;
}
public client_authorized(id){	
	if(has_flag(id,"s"))
		userBM[id]=3
	else if(has_flag(id,"s") )
		userBM[id]=2
	else userBM[id]=0;
	
	new ip[20], name[33]
	get_user_ip(id, ip, sizeof(ip))
	get_user_name(id, name, sizeof(name))
	log_amx("Player: %s IP: %s", name, ip);
}
public client_disconnected(id){
}	
public cmd_start(id, uc_handle){
	if( dwajumpy[id]){
		new flags = pev(id, pev_flags);
		
		if((get_uc(uc_handle, UC_Buttons) & IN_JUMP) && !(flags & FL_ONGROUND) && !(pev(id, pev_oldbuttons) & IN_JUMP) && blokJump[id]>0)
		{
			--blokJump[id];
			new Float:velocity[3];
			pev(id, pev_velocity,velocity);
			velocity[2] = random_float(265.0,285.0);
			set_pev(id,pev_velocity,velocity);
		}
		else if(flags & FL_ONGROUND && blokJump[id]!=-1)
		{
		blokJump[id] = addjb[id];
		}
	}
}

public fwd_prethink(id){
	if (!is_user_connected(id) || !is_user_alive(id))
		return FMRES_IGNORED
	if( userNoSlow[id] || layoutStyle == false || userOnIce[id] )
		entity_set_float(id, EV_FL_fuser2, 0.0)
		//entity_set_float(id, EV_FL_maxspeed, 400.0);
	if (is_user_alive(id) && pev(id, pev_movetype) == MOVETYPE_FLY)
	{
		if(dwajumpy[id])
		{
			dwajumpy[id] = false;
		}
		if(g_low_gravity[id] && g_low_trampoline[id])
		{
			set_user_gravity(id);
			g_low_gravity[id] = false;
			g_low_trampoline[id] = false 
			g_low_trampoline_2[id] = false
			return PLUGIN_CONTINUE;
		}
	}
	if (dwajumpy[id])
	{
		if ( (pev(id, pev_flags ) & FL_ONGROUND )  )
		{
			dwajumpy[id] = false;
		}
	}
	if (g_low_gravity[id])
	{
		if ( (pev(id, pev_flags ) & FL_ONGROUND )  )
		{
			if(g_low_trampoline_2[id] && g_low_trampoline[id]){
				g_low_trampoline_2[id] = false;
				#if defined POWTORZ_DRUGI_SKOK
					g_low_trampoline[id] = false;
				#endif
				return PLUGIN_CONTINUE;
			}

			set_user_gravity(id);
			g_low_gravity[id] = false;
			g_low_trampoline[id] = false 
			g_low_trampoline_2[id] = false
		}
	}
	static buttons, oldButtons;
	buttons =	get_user_button(id);
	oldButtons =	entity_get_int(id, EV_INT_oldbuttons);
	new target, bodytarget
	get_user_aiming(id, target, bodytarget)
	if(target >= 1 && target<33 ){
		if( is_user_connected(target) && is_user_alive(target) && !isInvisible(target) ){
			if( get_gametime() - userAimingInfo[id] > 0.1 ){
				new name[33]
				get_user_name(target, name, sizeof(name) )
				//set_dhudmessage(25, 125, 255, -1.0, 0.81, 0, 0.0, 0.1, 0.0, 0.0)	
				//show_dhudmessage(id, "%s", name)
				userAimingInfo[id]=get_gametime()
			}
		}
	}	
	if ( ( buttons & IN_USE ) && !( oldButtons & IN_USE ) ){
			
		new ent,body 
		get_user_aiming(id, ent, body)
		if( IsBlock(ent) ){
			if( get_gametime()-userHudShow[id] > 2.0){
				showInfoBlock(id,ent)				
				userHudShow[id]=get_gametime();
			}
		}
	}
	if( userBmShorCut[id] ){
		if( userBM[id]>0){
			if( userEntGrab[id] != -1 ){		
				if ( ( buttons & IN_ATTACK ) && !( oldButtons & IN_ATTACK ) ){
					
					new Float:fOrigin[3]
					entity_get_vector(id, EV_VEC_origin, fOrigin)
					new ent = createBlock(entity_get_int(userEntGrab[id], EV_INT_body),fOrigin,entity_get_int(userEntGrab[id], EV_INT_skin), entity_get_int(userEntGrab[id], EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })		
					
					copyDataBlock(userEntGrab[id], ent)
					cmdReleaseGrab(id)
					entity_set_int(ent, EV_INT_iuser1, id)
					
					userEntGrab[id]=ent	
				}
				if ( ( buttons & IN_JUMP ) && !( oldButtons & IN_JUMP ) ){
					userLength[id]+=16.0
						
					set_pev(id, pev_button, pev(id,pev_button) & ~IN_JUMP)
				}
				if ( ( buttons & IN_DUCK ) && !( oldButtons & IN_DUCK ) ){
					if( userLength[id] > 0 )
						userLength[id]-=16.0
					
					set_pev(id, pev_button, pev(id,pev_button) & ~IN_DUCK) 
				}
				if ( ( buttons & IN_ATTACK2 ) && !( oldButtons & IN_ATTACK2 ) ){
					
					new size, rotation;
					rotation = (entity_get_int(userEntGrab[id], EV_INT_iuser3)+1) % 3	
					size = entity_get_int(userEntGrab[id], EV_INT_skin)
					setSizeAngles(userEntGrab[id], size, rotation, Float:{-1.0, -1.0, -1.0})
				}
				moveGrabbedEnt(id)
				
			}else{		
			
				if( userBM[id]>0){
					if ( ( buttons & IN_ATTACK ) && !( oldButtons & IN_ATTACK ) ){
						
						new ent, body
						get_user_aiming(id, ent, body)
						if( IsBlock(ent) ){
							if( get_gametime() - changeLeftBlock[id] < 0.2 ){
								userSelectedBlock[id] = entity_get_int(ent, EV_INT_body)
								userSelectedSize[id] = entity_get_int(ent, EV_INT_skin)
														
							}else changeLeftBlock[id]=get_gametime();
						}	
					}
					
					if ( ( buttons & IN_ATTACK2 ) && !( oldButtons & IN_ATTACK2 ) ){
						
						new ent, body
						get_user_aiming(id, ent, body)
						if( IsBlock(ent) ){
							if( get_gametime() - changeRightBlock[id] < 0.2 ){
								new typeTarget=entity_get_int(ent, EV_INT_body)
								if( typeTarget != userSelectedBlock[id] || userSelectedSize[id]!=entity_get_int(ent, EV_INT_skin)){
									new Float:fOrigin[3]
									new Float:fAngles[3]
									
									entity_get_vector(ent, EV_VEC_origin, fOrigin)
									entity_get_vector(ent, EV_VEC_angles, fAngles)
									
									
									new newEnt = createBlock(userSelectedBlock[id], fOrigin, userSelectedSize[id], entity_get_int(ent, EV_INT_iuser3), fAngles)										
											
									new name[33]
									get_user_name(id, name, 32)
									ColorChat(0, TEAM_COLOR,"[BM]^x01 Player:^x04 %s^x01 swapped the block^x04 %s^x01>^x04%s", name,  blocksProperties[entity_get_int(ent, EV_INT_body)][0], blocksProperties[entity_get_int(newEnt, EV_INT_body)][0])								
									deleteBlock(ent)	
								}						
							}else changeRightBlock[id]=get_gametime();
						}
					}
					if ( ( buttons & IN_RELOAD ) && !( oldButtons & IN_RELOAD ) ){
						new ent,body 
						get_user_aiming(id, ent, body)
						if( IsBlock(ent) ){
							new size = (entity_get_int(ent, EV_INT_skin)+1)%sizeof(blocksSize)								
							entity_set_model(ent, pathModelBlock(entity_get_int(ent, EV_INT_body), size))
							setSizeAngles(ent,size,entity_get_int(ent, EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })			
						}
						userChangeTime[id]=get_gametime();
					}
				}
				if( userNoClip[id] ){
					
					
					if ( ( buttons & IN_JUMP ) && !( oldButtons & IN_JUMP ) ){
						new Float:fOrigin[3]
						new Float:fAngles[3]			
						entity_get_vector(id, EV_VEC_v_angle, fAngles)
						entity_get_vector(id, EV_VEC_origin, fOrigin)
						
						fOrigin[0]+= 95.0*floatcos(fAngles[1], degrees)
						fOrigin[1]+= 95.0*floatsin(fAngles[1], degrees)
						fOrigin[2]-= 15.0*floatsin(fAngles[0], degrees)
						entity_set_vector(id, EV_VEC_origin, fOrigin)
					}
				}
			}
		}
	}
	if(userLatency[id] > 0.0){
	
		static colors[ 3 ]	
		
		if(userLatency[id] > 1.0) colors = {0, 255, 0}
		else if(userLatency[id] > 0.4) colors = {255, 255, 0}
		else colors = {255, 0, 0}	
		
		set_hudmessage(colors[ 0 ],colors[ 1 ],colors[ 2 ], -1.0, 0.30, 0, 0.07, 0.09, 0.07, 0.07, 3);
		show_hudmessage(id, "Block will be deleted:^n[ %0.1f ]", userLatency[id]);
		//displayFade(id, 512,512,512, colors[ 0 ],colors[ 1 ],colors[ 2 ], 40);
		
		userLatency[id] -= 0.01;
	}
	if(ZatrzymanyTimer[id] == false && CzasTimera[id] <= 40){
		set_dhudmessage( 114, 152, 255, 0.10, 0.05, 0, 0.0, 0.1, 0.0, 0.0)
		show_dhudmessage(id, "TIMER: %i", CzasTimera[id] )
	}
	return FMRES_IGNORED
}
public killCloseEnemies(id){	
	new Float:fOrigin[3]
	new Float:fOriginEnt[3]
	entity_get_vector(id, EV_VEC_origin, fOrigin)
	for(new i=1; i<33;i ++){
		if( !is_user_alive(i) || !is_user_connected(i) )
			continue
		if(i==id)
			continue;
			
		entity_get_vector(i, EV_VEC_origin, fOriginEnt)
		if( get_distance_f(fOrigin,fOriginEnt) > 46.0 )
			continue;
		if( get_user_team(id) == get_user_team(i) )
			continue;
		
		if( !userGodMode[i] && !GodAll )
			user_kill(i,1);
	}
}
public teleportMakeSolid(ent){
	ent-=TASK_TELEPORT
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
}
public client_PostThink(id){
	if (!is_user_connected(id) || !is_user_alive(id))
		return PLUGIN_CONTINUE
	if( userNoFall[id] )
	{
		entity_set_int(id, EV_INT_watertype, -3)
		userNoFall[id] = false;	
	}
	
	
	if( userAddVelocity[id][0] != 0.0 || userAddVelocity[id][1] != 0.0 || userAddVelocity[id][2] != 0.0 ){
		entity_set_vector(id, EV_VEC_velocity, userAddVelocity[id])
		userAddVelocity[id][0]=0.0
		userAddVelocity[id][1]=0.0
		userAddVelocity[id][2]=0.0
		
	}
	if( userDuck[id] ){
		set_pev(id, pev_bInDuck, 1)
		userDuck[id]=false;
	}
	if( userJump[id] ){
		new oldbuttons = ~IN_JUMP
		entity_set_int(id, EV_INT_oldbuttons, oldbuttons)
		userJump[id]=false;
	}
	
	if( userRefreshSpeed[id] ){
		set_user_maxspeed(id, 250.0)
		userRefreshSpeed[id]=false;
	}
	
	if( userSpeedReduction[id] != 0.0 ){
		//client_print(id,print_chat,"Redukcja: %f", userSpeedReduction[id])
		set_user_maxspeed(id, userSpeedReduction[id])
		userRefreshSpeed[id]=true;
		userSpeedReduction[id]=0.0;
	}else if( userSlow[id][0] - get_gametime() > 0.0 && !isSpeed(id)){
		//client_print(id,print_chat,"Speed: %f", userSlow[id][1])
		set_user_maxspeed(id, userSlow[id][1] )		
		userRefreshSpeed[id]=true;
	}else if( userSkills[id][2][0]-get_gametime() > 0.0 || userNoClip[id] || userOnIce[id]){		
		//client_print(id,print_chat,"Skill: 400.0")
		set_user_maxspeed(id, 400.0)		
		userRefreshSpeed[id]=true;
	}else if( userSkills[id][4][0]-get_gametime() > 0.0 || userNoClip[id] || userOnIce[id]){		
		//client_print(id,print_chat,"Skill: 400.0")
		set_user_maxspeed(id, 400.0)		
		userRefreshSpeed[id]=true;
	}else if(userMagic[id]){
		//client_print(id,print_chat,"Magia: %f", userMagicSpeed[id])
		set_user_maxspeed(id, 250.0+userMagicSpeed[id] )
		userRefreshSpeed[id]=true;
	}
	
	return PLUGIN_CONTINUE
}
public copyDataBlock(ent, toent){
	new type =  entity_get_int(ent, EV_INT_body)
	for( new i = 2; i < sizeof(blocksProperties[]); i ++ ){
		new param = str_to_num(blocksProperties[type][i])
		if( param == -1 )
			break;
		setParamBlock(toent, param, getParamBlock(ent, param))
	}
	new Float:fColor[3]
	entity_get_vector(ent, EV_VEC_rendercolor, fColor);
	entity_set_vector(toent, EV_VEC_rendercolor, fColor)
	entity_set_int(toent, EV_INT_iuser2, entity_get_int(ent, EV_INT_iuser2) )
	entity_set_int(toent, EV_INT_iuser4, entity_get_int(ent, EV_INT_iuser4) )
	entity_set_edict(toent, EV_ENT_euser1, entity_get_edict(ent, EV_ENT_euser1 ) )
	for( new i =0; i<3;i ++ )
	setEditBlock(toent, i, getEditBlock(ent, i))
	
	if( type != GLASS )
		setRenderingBlock(toent)
	
}	
public DeathMsg(){
	//new killer=read_data(1)
	new victim=read_data(2)
	if( userRespawn[victim] ){
		set_task(0.1, "respawnPlayer", victim )
	}
	return PLUGIN_CONTINUE
}
public round_start(){
	for( new i =1;i<33;i++){
		if( !is_user_connected(i) )
			continue
		userMagicSpeed[i] = random_float(0.0, 15.0)
		feniks[i] = false;
		NagrodaTimer[i] = false;
		CzasTimera[i] = 0;
		ZatrzymanyTimer[i] = true;
		for( new skill = 0; skill<sizeof(userSkills[]);skill++){
			userSkills[i][skill][0]=0.0
			userSkills[i][skill][1]=0.0
		}
		if(task_exists(i+TASK_SKILL_HUD) )
			remove_task(i+TASK_SKILL_HUD)
		userResetVarsRound(i)
	}
	randomCamp()
}
public round_end(){
	
}
public respawnPlayer(id){
	if( is_user_alive(id) || !is_user_connected(id) )
		return PLUGIN_CONTINUE
		
	ExecuteHamB(Ham_CS_RoundRespawn, id);
		
	if( userCheckPoint[id] ){
		backToCheckPoint(id)
	}
	return PLUGIN_CONTINUE
}	
public ham_Spawn(id){
	if( !is_user_alive(id) || !is_user_connected(id))
		return HAM_IGNORED
	
	set_task(0.2,"setVarsAdmin", id)
	
	if( !userHud[id] ){
		showHud(id)
		userHud[id]=false;
	}
	userResetVarsRound(id)
	
	return PLUGIN_CONTINUE
}
public setVarsAdmin(id){
	if( GodAll )
		set_user_godmode(id, GodAll)
	set_user_godmode(id, userGodMode[id])
	set_user_noclip(id, userNoClip[id])
}
public ham_traceAttack(victim, attacker, float:damage, Float:direction[3], trace, bits)
{
	if( !is_user_connected(attacker) || !is_user_alive(attacker) )
		return HAM_IGNORED
	if( userSkills[victim][0][0]-get_gametime()>0.0){
		return HAM_SUPERCEDE
	}
	else if( userSkills[victim][4][0]-get_gametime()>0.0){
		return HAM_SUPERCEDE
	}
	if( get_user_team(attacker) != get_user_team(victim )){
		userSlowed[victim]=attacker;
		userSlowedTime[victim] = get_gametime();
	}
	return HAM_IGNORED
} 
public ham_TakeDamage(victim, inflictor, attacker, Float:damage, damagebits){
	if( !is_user_alive(victim) )
		return HAM_IGNORED
	if( userSkills[victim][0][0]-get_gametime()>0.0){
		if( ( damagebits & DMG_FALL )){		
			SetHamParamFloat(4, 0.0)
		}
	}
	if( userSkills[victim][4][0]-get_gametime()>0.0){
		if( ( damagebits & DMG_FALL )){		
			SetHamParamFloat(4, 0.0)
		}
	}
	return HAM_IGNORED
}
public userResetVarsRound(id){
	
	if( task_exists(id+TASK_VISIBLE) )
		remove_task(id+TASK_VISIBLE)
		
	if( task_exists(id+TASK_CAMOUFLAGE) )
		remove_task(id+TASK_CAMOUFLAGE)		
		
	setRendering(0, id, 255,255,255,255)
	//set_user_maxspeed(id, 250.0)
	for( new i = 0; i<4;i++){
		userSkills[id][i][0]=0.0;
		userSkills[id][i][1]=0.0;
	}
	resetUsedBlock(id)
	resetCampAchived(id)
}

public touchBlock(ent, id){

	if ( !( 1 <= id <= 33 ) 	|| !IsBlock(ent)) 
		return PLUGIN_CONTINUE;
		
	if( !is_user_alive(id) || !is_user_connected(id) || !pev_valid(id))
		return PLUGIN_CONTINUE

	if( entity_get_int(ent, EV_INT_iuser1) != 0 )
		return PLUGIN_CONTINUE;
	
	new flags =entity_get_int(id, EV_INT_flags);
	new groundentity =	entity_get_edict(id, EV_ENT_groundentity);
	new typeBlock=entity_get_int(ent, EV_INT_body)	
	new barrier=true;
	/*
	if( typeBlock == BARRIERTT || typeBlock==BARRIERCT ){
		new Float:fOriginId[3], Float:fOriginTarget[3]
			
		pev(id, pev_origin, fOriginId)
		for(new i=1;i<33;i++){
			if(!is_user_connected(i) || !is_user_alive(i))
				continue;
			if(get_user_team(i) == get_user_team(id) )
				continue;
					
			pev(i, pev_origin, fOriginTarget)
			if(get_distance_f(fOriginId, fOriginTarget) < 700.0 ){
				barrier=true
				break;
			}
					
		}
	}*/
	if( getParamBlock(ent, 23) == 1.0 ){
		set_task(0.1, "makeNoSolid", ent+TASK_BHOP)
	}
	if( getParamBlock(ent, 1) == 1.0 ){	
		new bool:blockade=false;
		new Float:fOrigin[3]
		new Float:fMins[3]
		new Float:fMaxs[3]
		entity_get_vector(id, EV_VEC_origin, fOrigin)
		entity_get_vector(id, EV_VEC_mins, fMins)
		entity_get_vector(id, EV_VEC_maxs, fMaxs)
		
		new Float:fOriginEnt[3]
		new Float:fMinsEnt[3]
		new Float:fMaxsEnt[3]
		entity_get_vector(ent, EV_VEC_origin, fOriginEnt)
		entity_get_vector(ent, EV_VEC_mins, fMinsEnt)		
		entity_get_vector(ent, EV_VEC_maxs, fMaxsEnt)
		if( !(flags & FL_ONGROUND) ){			
			if( groundentity != ent ){					
				blockade=true;
			}			
			
		}else if( fOrigin[2] + fMins[2] < fOriginEnt[2]+fMaxsEnt[2] || groundentity != ent ) {
			blockade=true;			
		}
		if( getParamBlock(ent, 23) == 1.0 ){
			set_task(0.1, "makeNoSolid", ent+TASK_BHOP)
		}
		if( groundentity == ent || !(flags & FL_ONGROUND) || (groundentity == 0 && (flags & FL_ONGROUND))){
			//client_print(id,print_chat,"%2f %2f",  fOrigin[2], fMaxs[2] )
			if( fOrigin[2]+fMaxs[2]<fOriginEnt[2] )
				return PLUGIN_CONTINUE;
			if( typeBlock == BHOP || typeBlock == NOSLOWBHOP || typeBlock == BHOPLATENCY ){
				if( blockade ){
					
					new Float:fOrigin[3]
					entity_get_vector(id, EV_VEC_origin, fOrigin) 
					if( fOrigin[0] == userLastOrigin[id][0] && fOrigin[1] == userLastOrigin[id][1] && fOrigin[2] == userLastOrigin[id][2] ){				
						
						userLastOrigin[id][0]=fOrigin[0]
						userLastOrigin[id][1]=fOrigin[1]
						userLastOrigin[id][2]=fOrigin[2]
						if( !task_exists(id+88888) )
							set_task(0.1, "checkTrueOrigin", id+88888)
						userLetBlock[id]++;
						
						
						if( userLetBlock[id] > 50 ){
							
							blockade=false
							entity_set_edict(ent,EV_ENT_euser3, 1)
							userLetBlock[id]=0;	
						}				
					}else{
						userLastOrigin[id][0]=fOrigin[0]
						userLastOrigin[id][1]=fOrigin[1]
						userLastOrigin[id][2]=fOrigin[2]					
						userLetBlock[id]=0;
					}
				}
			}
		
		}
		if( blockade ){			
			return PLUGIN_CONTINUE;			
		}
	}	
	new bool:change=false;
	new Float:userVelocity[3]
	if( getEditBlock(ent,0) == 2 ){
		if( !campAchived(id, getEditBlock(ent,1) ) ){
			new iForwardOne;			
			ExecuteForward(forwardCampEnd, iForwardOne, id, ent, getEditBlock(ent,2), typeMap, bonusCampRound == getEditBlock(ent,1) ? 1:0 );
			setCampAchived(id, getEditBlock(ent,1))
		}
	}	 
	if( get_user_team(id) != 3 && ( getParamBlock(ent, 14) != 0 ) ){
		if( floatround(getParamBlock(ent, 14)) == 3 && !has_flag(id, "t") )
			return PLUGIN_CONTINUE
		else if( floatround(getParamBlock(ent, 14)) != get_user_team(id) && floatround(getParamBlock(ent, 14)) != 3 )
			return PLUGIN_CONTINUE
	}
	/* 	STRZALKA	*\	
	\* 	STRZALKA	*/
	pev(id, pev_velocity, userVelocity)
	
	if( getParamBlock(ent, 3) != 0.0 ){
		velocity_by_aim( id, floatround( getParamBlock(ent,3) ), userVelocity)		
		change=true;
		
	}
	
	/* 	TRAMPOLINA	*\
	\* 	TRAMPOLINA	*/
	if( getParamBlock(ent, 2) != 0.0 ){
		userVelocity[2]=getParamBlock(ent,2)
		change=true;
	}
	if( change )
		userAddVelocity[id] = userVelocity
	
		
	/* 	OBRAZENIA	*\	
	\* 	OBRAZENIA	*/
	if( getParamBlock(ent, 4) != 0.0 ){
		if( userSkills[id][0][0] < get_gametime() ){
			if( userSkills[id][4][0] < get_gametime() ){
				if( get_gametime() - userLastTouchBlock[id] > getParamBlock(ent,6) ){
					fakedamage(id, "", getParamBlock(ent, 4), DMG_GENERIC);	
			
					userLastTouchBlock[id]=get_gametime();
				}
			}
		}
	}
	/*	LECZNEIE	*\	
	\* 	LECZNEIE	*/
	if( getParamBlock(ent, 5) != 0.0 && typeBlock != POTION ){
		if( get_gametime() - userLastTouchBlock[id] > getParamBlock(ent,6) ){
			new health=min(100, get_user_health(id) + floatround( getParamBlock(ent,5) ))
			set_user_health(id, health )
			userLastTouchBlock[id]=get_gametime();
		}
		if( get_gametime() - pev(ent, pev_fuser1) >= 5.0 ){
			new Float:fOrigin[3]
			entity_get_vector(id, EV_VEC_origin, fOrigin)
			
			message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
			write_byte(TE_SPRITE)
			engfunc(EngFunc_WriteCoord,fOrigin[0])
			engfunc(EngFunc_WriteCoord,fOrigin[1])
			engfunc(EngFunc_WriteCoord,fOrigin[2]-20.0)
			write_short(sprite_heal) 
			write_byte(5) 
			write_byte(255)
			message_end()
			
			set_pev(ent, pev_fuser1, get_gametime())
		}
		if( get_gametime() - pev(ent, pev_fuser2) >= 1.5 ){
			
			emit_sound(ent, CHAN_WEAPON, soundsNames[13], 1.0, ATTN_NORM, 0, PITCH_NORM)		
			set_pev(ent, pev_fuser2, get_gametime())
		}
	}
	if( getParamBlock(ent, 7) != 0.0 && typeBlock == HONEY ){
		userSpeedReduction[id] = getParamBlock(ent,7)
	}
	if( getParamBlock(ent, 8) == 0.0 ){
		userNoFall[id]=true;
	}
	
	switch( typeBlock ){
		case BHOP:{
			if( lastTouched[id] != ent ){
				//xp_add_mission(id, 17, 1)
				lastTouched[id]=ent
			}
			//actionMagicSpeed(id,ent)
			actionBhop(ent);
		}
		case NOSLOWBHOP:{
			if( lastTouched[id] != ent ){
				//xp_add_mission(id, 17, 1)
				lastTouched[id]=ent
			}
			//actionMagicSpeed(id,ent)
			actionNoSlowBhop(id, ent);
		} 
		case DEATH: actionDeath(id, ent)
		case NOFALL:{
			if( userVelocity[2] < -500.0 ){
				if( get_gametime() - userSlow[id][0] > 0.0 ){
					/*if( getParamBlock(ent, 19) != 0.0 ){
						if( !isSpeed(id) ){
							new iOrigin[3];
							get_user_origin(id, iOrigin, 0)
							new Float:randFloat=random_float(0.7,1.5);
							//userSlow[id][1] = getParamBlock(ent, 19)+250.0
							//userSlow[id][0] = get_gametime()+randFloat
							
							if( !isInvisible(id) && !isImmortal(id) ){
								setRendering(1, id, 255,150,0,5)
								makeTrail(id)
								
								set_task( randFloat, "killAccelerate", id) 
							}
							
							message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin, 0)
			
							write_byte(TE_DLIGHT)			
							write_coord(iOrigin[0]);	
							write_coord(iOrigin[1]);
							write_coord(iOrigin[2]);			
							write_byte(25)			
						
							write_byte(255); 
							write_byte(150); 
							write_byte(0); 
							
							write_byte(10)			
							write_byte(50)			
							message_end()
							Display_Fade(id,(1<<12),0,0,255,150, 0, 40)
						}
					}*/
				}
			}
			userNoFall[id]=true;
		}
		case DUCK: userDuck[id]=true;
		
		case BHOPLATENCY: actionBhopLatency(id, ent)
		case BARRIERTT: if( get_user_team(id) != 1 || !barrier) actionBarrier(id, ent)
		case BARRIERCT: if( get_user_team(id) != 2 || !barrier) actionBarrier(id, ent)
		case BARRIERVIP: if(has_flag(id, "t")) actionBarrier(id,ent)
		case ICE: actionIce(id,ent)
		case GODMODE: actionGodMode(id,ent)
		case INVIS: actionInvisible(id,ent)
		case GUN: actionGun(id,ent)
		case GRENADE: actionGrenade(id,ent)
		case BOOTS: actionBoots(id,ent)
		case MUSIC: actionMusic(id,ent)
		case EXP: actionPoints(id,ent)
		case CAMOUFLAGE: actionCamouflage(id,ent)
		case TRAMPOLINE:{
			if( get_gametime() - userSound[id] > 0.3 ){
				//emit_sound(id, CHAN_WEAPON, soundsNames[random_num(8,11)], 1.0, ATTN_NORM, 0, PITCH_NORM)	
				userSound[id]=get_gametime();
			}
			userNoFall[id]=true
		}
		case AMMO: actionAmmo(id, ent);
		case POTION: actionPotion(id, ent)
		case WATER: actionWater(id, ent)
		case GRAVITY: actionGravity(id, ent)
		case DODATKOWES: actiondodatkoweS(id, ent)
		case FENIKS: actionFeniks(id, ent)
		case AUTOBH: actionSpamBH(id, ent)		
		case SURFB: actionBhop(ent)
		case SURFS: actionDeath(id, ent)
		case SURFO: actionBhopLatency(id, ent)
		case SURFL: actionIce(id, ent)
		case SKRZYNKA: ActionSkrzynka(id, ent)
		case TIMERSTART: ActionTimerStart(id, ent)
		case TIMERSTOP: ActionTimerStop(id, ent)
	}
	
	return PLUGIN_CONTINUE;
}
ActionSkrzynka(id, ent){
	
}
public checkTrueOrigin(id){
	id-=88888
	if(  !is_user_alive(id) || !is_user_connected(id) )
		return PLUGIN_CONTINUE
		
	new Float:fOrigin[3]
	entity_get_vector(id, EV_VEC_origin, fOrigin) 
	if( fOrigin[0] != userLastOrigin[id][0] || fOrigin[1] != userLastOrigin[id][1] || fOrigin[2] != userLastOrigin[id][2] ){		
		userLetBlock[id]=0
	}
		
	return PLUGIN_CONTINUE
}
public plugin_precache(){
	for( new i = 0; i < NUMBLOCKS; i ++ ){		
		new gText[98]		
		for( new x = 0; x < 4; x ++ ){
			format(gText, sizeof(gText), "models/FNJ_Easyblocks/%s%s.mdl", blocksProperties[i][1], blocksSize[x][0])
			precache_model(gText)	
		}
	}
	for( new i = 0; i < sizeof(teleportsSprites); i ++ ){		
		precache_model(teleportsSprites[i][0])
	}
	for(new i =0; i<sizeof(soundsNames);i++){
		precache_sound(soundsNames[i])
	}
	
	for(new i =0; i<sizeof(blockMusic);i++){
		precache_sound(blockMusic[i][0])
	}
	precache_model("models/FNJ_EasyBlocks/platform.mdl")
	
	beam_spr = precache_model( "sprites/blockmaker/bluez.spr" )
	
	sprite_heal  =precache_model("sprites/blockmaker/health.spr");
	
	precache_model("sprites/lightbulb.spr");
	
	sprite_fire = precache_model("sprites/blockmaker/flame.spr")
	
	line_green = precache_model("sprites/test/line_green.spr");
	line_yellow = precache_model("sprites/test/line_yellow.spr");
	line_red = precache_model("sprites/test/line_red.spr");
	line_pink = precache_model("sprites/test/line_pink.spr");
	line_orange = precache_model("sprites/test/line_black.spr");
	line_blue = precache_model("sprites/test/line_blue.spr");
	//precache_model(caseModel);
}
public makerMain(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	
	new gText[290]
	
	format(gText, sizeof(gText), "\y[BM]^nTemplate:\r %s\
		^n\r1.\w Blocks menu\
		^n\r2.\w Teleports menu^n\
		^n\r3.\w Options menu\
		^n\r4.\w Admin menu\
		^n\r5.\w Save menu^n\
		^n\r6.\w Noclip: %s\
		^n\r7.\w Godmode: %s\
		^n\r8.\w Build Mode: %s^n\
		^n\r0.\w Exit\
	", actualStyle, 
		userNoClip[id]?"\yON":"\dOFF", 
		userGodMode[id]?"\yON":"\dOFF", 
		userBmShorCut[id]?"\yON":"\dOFF" 
	)
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 |B8 | B0, gText, -1, "makerMain")
	
	
	return PLUGIN_CONTINUE

}
public autoSaveTask(){
	SaveBlocks(0, 2)
	if( autoSave ){
		set_task(45.0, "autoSaveTask", TASK_AUTOSAVE)
	}
}
public makerMain_2(id, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	/*if( item == MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE;
	}*/
	switch(item){
		case 0:{
			if(wolebmalb[id])
			{
				blockMaker(id)
			}
			else
			{
				GrzyboblockMaker(id)
			}
			userBmShorCut[id]=true
		}
		case 1:teleMenu(id)		
		case 2:adminMenu(id)
		case 3:adminAddition(id)
		case 4:menuSaveAdmin(id)
		case 5:{
			userNoClip[id]=!userNoClip[id]
			makerMain(id)			
			set_user_noclip(id, userNoClip[id])	
		}
		case 6:{
			userGodMode[id]=!userGodMode[id];
			makerMain(id)			
			set_user_godmode(id, userGodMode[id])
		}
		case 7:{
			userBmShorCut[id]=!userBmShorCut[id];
			makerMain(id)
		}
		case 9:{
			
		}
			
	}
	
	
	return PLUGIN_CONTINUE
}
public blockMaker(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iNumBlocks=0
	new ent = find_ent_by_class(-1, "blockMaker")
	while( ent != 0 ){
		iNumBlocks++;
		ent=find_ent_by_class(ent, "blockMaker")
	}
		
	new menu[286]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\yBlocks:\r %d^n^n\
		\r1.\w Select block:\y %s^n\
		\r2.\w Create block^n\
		\r3.\w Delete block^n\
		\r4.\w Sliding move menu^n\
		\r5.\w Block properties^n^n\
		\r6.\w Noclip: %s^n\
		\r7.\w Godmode: %s^n\		
		\r8.\w Size:\y %s^n^n\
		\r9.\w Options^n\
		\r0.\w Exit\
	", iNumBlocks, blocksProperties[userSelectedBlock[id]][0], userNoClip[id] ? "\yON":"\dOFF", userGodMode[id] ? "\yON":"\dOFF", blocksSize[userSelectedSize[id]][1])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "blockMaker")
	return PLUGIN_CONTINUE
}
public GrzyboblockMaker(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iNumBlocks=0
	new ent = find_ent_by_class(-1, "blockMaker")
	while( ent != 0 ){
		iNumBlocks++;
		ent=find_ent_by_class(ent, "blockMaker")
	}
		
	new menu[286]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\yBlock menu:^n^n\
		\r1.\w Type of block:\y %s^n\
		\r2.\w Size:\y %s^n\
		\r3.\w Create^n\
		\r4.\w Delete^n\
		\r5.\w Replace^n^n\
		\r6.\w Rotate block:^n\
		\r7.\w Properties:^n\		
		\r8.\w Sliding:\y^n^n\
		\r9.\w More^n\
		\r0.\w Exit\
	", blocksProperties[userSelectedBlock[id]][0], blocksSize[userSelectedSize[id]][1])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "GrzyboMenu")
	return PLUGIN_CONTINUE
}
public GrzyboMenu_2(id, item ){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	/*if( item==MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}*/
	switch( item ){
		case 0: selectBlock(id)
		case 1:{
			userSelectedSize[id]=(userSelectedSize[id]+1)%sizeof(blocksSize)
			GrzyboblockMaker(id)
		}
		case 2:{
			createBlockAim(id)
			GrzyboblockMaker(id)
		}
		case 3:{
		
			new ent, body
			get_user_aiming(id, ent, body)
			if( !pev_valid(ent) )
				GrzyboblockMaker(id)
			
			if( entity_get_int(ent, EV_INT_iuser1) != 0 ){
				GrzyboblockMaker(id)
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) || IsTeleport(ent)){
				GrzyboblockMaker(id)
				return PLUGIN_CONTINUE
			}
			deleteBlock(ent)
			GrzyboblockMaker(id)
		}
		case 4:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsBlock(ent) ){
				new typeTarget=entity_get_int(ent, EV_INT_body)
				if( typeTarget != userSelectedBlock[id] || userSelectedSize[id]!=entity_get_int(ent, EV_INT_skin)){
					new Float:fOrigin[3]
					new Float:fAngles[3]
						
					entity_get_vector(ent, EV_VEC_origin, fOrigin)
					entity_get_vector(ent, EV_VEC_angles, fAngles)
						
					new newEnt = createBlock(userSelectedBlock[id], fOrigin, userSelectedSize[id], entity_get_int(ent, EV_INT_iuser3), fAngles)	
					new name[33]
					get_user_name(id, name, 32)
					ColorChat(0, TEAM_COLOR,"[BM]^x01 Player:^x04 %s^x01 swapped the block^x04 %s^x01>^x04%s", name,  blocksProperties[entity_get_int(ent, EV_INT_body)][0], blocksProperties[entity_get_int(newEnt, EV_INT_body)][0])								
					deleteBlock(ent)	
				}						
			}GrzyboblockMaker(id);
		}
		case 5:{
			if(userBmShorCut[id]){
				new ent, body
				get_user_aiming(id, ent, body)
				if(IsBlock(ent)) {
					new size, rotation;
					rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
					size = entity_get_int(ent, EV_INT_skin)
					setSizeAngles(ent, size, rotation, Float:{-1.0, -1.0, -1.0})
					GrzyboblockMaker(id)
				}
				GrzyboblockMaker(id)
			}
		}
		case 6:{
			new ent, body
			get_user_aiming(id, ent, body)
				
			if( IsTeleport(ent) ){		
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					menuParamTele(id)
				}else GrzyboblockMaker(id)
				
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) ){
				GrzyboblockMaker(id)
				return PLUGIN_CONTINUE
			}			
			userBlockProperties[id]=ent
			propertiesBlock(id)	
		}
		case 7:{
			MenuMoveBlock2(id)
		}
		case 8:{
			adminMenu(id)
		}
		case 9:{
			makerMain(id)
		}
		
	}
	return PLUGIN_CONTINUE		
}
public deleteBlock(ent){
	
	entity_set_origin(ent, Float:{8192.0,8192.0,8192.0})			
	remove_entity(ent)
	
}
public blockMaker_2(id, item ){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	/*if( item==MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}*/
	switch( item ){
		case 0: selectBlock(id)
		case 1:{
			createBlockAim(id)
			blockMaker(id)
		}
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( !pev_valid(ent) )
				blockMaker(id)
			
			if( entity_get_int(ent, EV_INT_iuser1) != 0 ){
				blockMaker(id)
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) || IsTeleport(ent)){
				blockMaker(id)
				return PLUGIN_CONTINUE
			}
			
			deleteBlock(ent)
			blockMaker(id)
			
		}
		case 3:{
			MenuObracania(id);
		}
		case 4:{
			new ent, body
			get_user_aiming(id, ent, body)
				
			if( IsTeleport(ent) ){		
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					menuParamTele(id)
				}else blockMaker(id)
				
				return PLUGIN_CONTINUE
			}
			if( !IsBlock(ent) ){
				blockMaker(id)
				return PLUGIN_CONTINUE
			}			
			userBlockProperties[id]=ent
			propertiesBlock(id)	
		}
		case 5:{
			userNoClip[id]=!userNoClip[id]
			set_user_noclip(id, userNoClip[id])	
			blockMaker(id)
		}
		case 6:{
			userGodMode[id]=!userGodMode[id];
			set_user_godmode(id, userGodMode[id])
			blockMaker(id)
		}
		case 7:{
			userSelectedSize[id]=(userSelectedSize[id]+1)%sizeof(blocksSize)
			blockMaker(id)
		}
		case 8:{
			adminMenu(id)
		}
		case 9:{
			makerMain(id)
		}
		
	}
	return PLUGIN_CONTINUE		
}
public MenuObracania(id)
{
	new menu[286]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\ySliding move menu:^n\
		\r1.\w Rotation size:\y %0.1f^n^n\
		\r2.\w Rotate \rX\y +^n\
		\r3.\w Rotate \rX\y -^n^n\
		\r4.\w Rotate \rY\y +^n\
		\r5.\w Rotate \rY\y -^n^n\
		\r6.\w Rotate \rZ\y +^n\
		\r7.\w Rotate \rZ\y -^n^n\
		\r8.\w Rotate \y( In Axis )^n\
		\r0.\w Exit\
	", userKrecDist[id])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "blockObkrec")
	return PLUGIN_CONTINUE
}
public blockObkrec_2(id, item )
{
	new ent, body, size, rotation;
	new Float:angles[3];
	get_user_aiming(id, ent, body)
	

	rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
	size = entity_get_int(ent, EV_INT_skin)
	pev(ent, pev_angles, angles);
	for(new i = 0; i < 3; i ++) userAngles[i] = angles[i]
	
	
	
	switch( item ){
		case 0: 
		{
			client_cmd(id, "messagemode WartoscObkrecania")
		}
		case 1:
		{
		
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] += userKrecDist[id];	
			userAngles[1] = angles[1] 
			userAngles[2] = angles[2] 
			
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 2:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] -= userKrecDist[id];	
			userAngles[1] = angles[1] 
			userAngles[2] = angles[2] 
	
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 3:
		{
			
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] += userKrecDist[id];	
			userAngles[2] = angles[2] 
	
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 4:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] -= userKrecDist[id];	
			userAngles[2] = angles[2] 	
			
	
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 5:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] = angles[1] 
			userAngles[2] += userKrecDist[id];	
			
		
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 6:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			userAngles[0] = angles[0] 
			userAngles[1] = angles[1] 
			userAngles[2] -= userKrecDist[id];	
		
			setSizeAngles(ent, size, rotation, userAngles)
			MenuObracania(id);
		}
		case 7:
		{
			if(!IsBlock(ent)) {
				MenuObracania(id);
				return 0
			}
			new size, rotation;
			rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
			size = entity_get_int(ent, EV_INT_skin)
			setSizeAngles(ent, size, rotation, Float:{-1.0, -1.0, -1.0})
			MenuObracania(id);
		}
		
		case 9:{
			makerMain(id)
		}
		
	}
	return PLUGIN_CONTINUE		
}
public ZmienWartoscObkrecania(id)
{
	new szCash[64];
	read_argv(1, szCash, 63)
	remove_quotes(szCash);
	new Float:Cash = str_to_float(szCash);

	userKrecDist[id] = Cash;
	
	client_print(id, 3, "You have set the rotation power to: %0.1f", Cash);
	MenuObracania(id);
	return PLUGIN_HANDLED;
}
public teleMenu(id){	
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iNumTele=0
	new ent = find_ent_by_class(-1, szTeleClassName)
	while( ent != 0 ){
		iNumTele++;
		ent=find_ent_by_class(ent, szTeleClassName)
	}
	if( userLastTpCreated[id] != 0 ){
		if( !IsTeleport(userLastTpCreated[id]) ){
			userLastTpCreated[id]=0;
		}
	}
	new menu[256]
	
	format(menu, sizeof(menu), "\
		\y[BM]^n\wTeleports:\r %d^n\
		\r1.\w Start^n\
		\r2.%s End^n\
		\r3.\w Delete teleport^n\
		\r4.\w Properties teleport ^n\
		\r5.\w Swap end and start^n\
		\r6.\w NoClip: %s^n\
		\r7.\w Godmode: %s^n\
		^n\
		\r9.\w Options^n\
		\r0.\w Exit",
		iNumTele, userLastTpCreated[id]!=0?"\w":"\d", userNoClip[id] ? "\yON":"\dOFF", userGodMode[id] ? "\yON":"\dOFF"
	)
		
	
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "teleMenu")
	
	return PLUGIN_CONTINUE
}
public teleMenu_2(id, item){	
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			if( userLastTpCreated[id] == 0 || !IsTeleport(userLastTpCreated[id]))
				createTeleportAim(id)
			else{
				
					new iLook[3]
					new Float:fLook[3]
					get_user_origin(id, iLook, 3)
					IVecFVec(iLook, fLook)
					fLook[2]+=8.0
					entity_set_origin(userLastTpCreated[id], fLook)		
			}
			
			teleMenu(id)
		}
		case 1:{
			if( userLastTpCreated[id]!=0)
				createTeleportAim(id)
			
			teleMenu(id)
		}	
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsTeleport(ent) ){
				teleMenu(id)
				return PLUGIN_CONTINUE
			}
			new target=entity_get_int(ent, EV_INT_iuser1)
			if( IsTeleport(target) ){				
				if( task_exists(target+TASK_SPRITE) )
					remove_task(target+TASK_SPRITE)
				if( task_exists(target+TASK_TELEPORT) )
					remove_task(target+TASK_TELEPORT)
					
				remove_entity(target)
			}
			
			if( task_exists(ent+TASK_TELEPORT) )
				remove_task(ent+TASK_TELEPORT)
				
			if( task_exists(ent+TASK_SPRITE) )
				remove_task(ent+TASK_SPRITE)
			remove_entity(ent)
			
			teleMenu(id)
			
		}	
		case 3:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsTeleport(ent) ){				
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					menuParamTele(id)
				}else teleMenu(id)
			}else teleMenu(id)
			
			
			
		}
		case 4:{
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsTeleport(ent) ){
				teleMenu(id)
				return PLUGIN_CONTINUE
			}
			
			new target=entity_get_int(ent, EV_INT_iuser1)
			if( !IsTeleport(target) ){
				return PLUGIN_CONTINUE
			}
			
			entity_set_int(ent, EV_INT_iuser2, entity_get_int(ent, EV_INT_iuser2 )==1?0:1)
			entity_set_int(target, EV_INT_iuser2, entity_get_int(ent, EV_INT_iuser2 )==1?0:1)
			refreshTeleportModel(target)
			refreshTeleportModel(ent)
			teleMenu(id)
		}	
		case 5:{
			userNoClip[id]=!userNoClip[id]
			set_user_noclip(id, userNoClip[id])	
			teleMenu(id)
			
		}
		case 6:{
			userGodMode[id]=!userGodMode[id];
			set_user_godmode(id, userGodMode[id])
			teleMenu(id)
		}
		case 8:{
			adminMenu(id)
		}
		case 9:{
			makerMain(id)
		}
	}
	return PLUGIN_CONTINUE
}
public menuParamTele(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new gText[128]
	new menu=menu_create("\y[BM]^n\yTeleport Properties", "menuParamTele_2")
	menu_additem(menu, "Refresh")
	for(new i=0;i<sizeof(propertiesTele);i++){
		if(equal(propertiesTele[i][1],"bool"))
			format(gText, sizeof(gText), "%s:\y %s", propertiesTele[i][0], getParamBlock(userBlockProperties[id],i)==1.0?"Yes":"No")
		if(equal(propertiesTele[i][1],"int"))
			format(gText,sizeof(gText), "%s:\y %i", propertiesTele[i][0],floatround(getParamBlock(userBlockProperties[id],i)))	
		else format(gText,sizeof(gText), "%s:\y %0.1f", propertiesTele[i][0], getParamBlock(userBlockProperties[id],i))		
		menu_additem(menu, gText)
	}
	
	menu_display(id,menu,0)
	return PLUGIN_CONTINUE
}
public menuParamTele_2(id,menu,item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if(item==MENU_EXIT){
		teleMenu(id)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsTeleport(ent) ){				
				new target=entity_get_int(ent, EV_INT_iuser1);
				if( IsTeleport(target) ){
					userBlockProperties[id]=entity_get_int(ent, EV_INT_iuser2) == 1 ? target : ent 
					ustawkolor(ent);
					ustawkolor(target);
					menuParamTele(id)
				}else teleMenu(id)
			}else teleMenu(id)
		}
		default:{
			item--;
			if(equal(propertiesTele[item][1],"bool")){
				setParamBlock(userBlockProperties[id],item,getParamBlock(userBlockProperties[id],item)==1.0?0.0:1.0)
			}else{
				userBlockParamChange[id] = item
				client_cmd(id, "messagemode value")
			}
		}
	}
	menuParamTele(id)
	return PLUGIN_CONTINUE
}
public createTeleportAim(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new iLook[3]
	new Float:fLook[3]
	get_user_origin(id, iLook, 3)
	IVecFVec(iLook, fLook)
	fLook[2]+=36.0
	
	new ent = createTeleport(fLook, userLastTpCreated[id], userLastTpCreated[id]==0?0:1)
	if( userLastTpCreated[id]==0){
		userLastTpCreated[id]=ent;
	}else{	
		entity_set_int(userLastTpCreated[id], EV_INT_iuser1, ent)
		userLastTpCreated[id]=0;
		
	}
	return ent;
}
public createTeleport(Float:fOrigin[3], endEnter, typeTeleport ){

	new ent =create_entity("info_target");
	if( !pev_valid(ent) )
		return -1;
	
	entity_set_string(ent, EV_SZ_classname, szTeleClassName)	
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	
	entity_set_int(ent, EV_INT_rendermode, 5);
	entity_set_float(ent, EV_FL_renderamt, 255.0);
	entity_set_model(ent, teleportsSprites[typeTeleport][0])
	entity_set_size(ent, Float:{ -8.0, -8.0, -8.0 }, Float:{ 8.0, 8.0, 8.0 });
	//DispatchSpawn( ent );
	
	entity_set_int(ent, EV_INT_iuser1, endEnter)
	entity_set_int(ent, EV_INT_iuser2, typeTeleport  )
	
	set_task(0.1, "teleportNextFrame", TASK_SPRITE + ent );
	setParamBlock(ent, 0, 70.0)	
	setDefaultParam(ent)
	entity_set_origin(ent, fOrigin)
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);
	return ent;
}
public ustawkolor(ent)
{	
	new Float:colortele[3];
	colortele[0] = getParamBlock(ent,4)
	colortele[1] = getParamBlock(ent,5)
	colortele[2] = getParamBlock(ent,6)
	entity_set_int(ent, EV_INT_rendermode, 5);
	entity_set_float(ent, EV_FL_renderamt, 100.0);
	set_pev(ent, pev_rendercolor, colortele);
}
public refreshTeleportModel(ent){
	
	entity_set_model(ent, teleportsSprites[entity_get_int(ent, EV_INT_iuser2)][0])
}	
public teleportNextFrame(ent){
	
	ent -= TASK_SPRITE
	if( !pev_valid(ent) )
		return PLUGIN_CONTINUE
	new newFrame = floatround(entity_get_float(ent, EV_FL_frame)+1)%str_to_num(teleportsSprites[entity_get_int(ent, EV_INT_iuser2)][1])
	entity_set_float(ent, EV_FL_frame, float(newFrame))
	
	
	set_task(0.1, "teleportNextFrame", TASK_SPRITE + ent );
	return PLUGIN_CONTINUE
}
public adminMenu(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new menu=menu_create("[BM]^n\yOptions","adminMenu_2")
	new gText[128]
	
	menu_additem(menu, "Moving  blocks")
	format(gText, sizeof(gText), "Group blocks: %s", userSnap[id] ? "\yON" : "\rOFF")
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "%sDistance:\y %0.1f^n",userSnap[id] ? "\w" : "\d", userSnapDist[id])
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "Intelligent rotation:\y %s", IntelligentRotating[userInteligent[id]])
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "Respawn: %s", userRespawn[id] ? "\yYes":"\dNo")
	menu_additem(menu, gText)
	menu_additem(menu, "Find the blocks in the wall")
	menu_additem(menu, "Delete nearest")
	
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id, menu, 0)
	return PLUGIN_CONTINUE
}
public adminMenu_2(id, menu, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if( item == MENU_EXIT ){
		makerMain(id)
		return PLUGIN_CONTINUE
	}
	
	switch(item){
		case 0:{
			if(wolebmalb[id])
			{
				menuMoveBlock(id)
			}
			else
			{
				MenuMoveBlock2(id);
			}
		}
		case 1:{
			userSnap[id] = !userSnap[id]
		}
		case 2:{
			userSnapDist[id] += 2.0;
			if(userSnapDist[id] > 40.0 ){
				userSnapDist[id]=0.0;
			}
			
		}
		case 3:{
			userInteligent[id]=(userInteligent[id]+1)%sizeof(IntelligentRotating)
			
		}
		case 4:{
			userRespawn[id]=!userRespawn[id]
			if( !is_user_alive(id) )
				ExecuteHamB(Ham_CS_RoundRespawn, id);
		}
		
		case 5:{
			new ent=find_ent_by_class(ent, szBlockClassName)
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( isBlockStuck(ent) ){
					remove_entity(ent)
					continue
				}
			}
		}	
		case 6:{
			new Float:fOrigin[3]
			entity_get_vector(id, EV_VEC_origin, fOrigin )
			new Float:fOriginEnt[3]
			new Float:dist=9999.8
			new idEnt;
			new ent=find_ent_by_class(ent, szBlockClassName)
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( !pev_valid(ent) ) 
					continue
				
				entity_get_vector(ent, EV_VEC_origin, fOriginEnt )
				if( get_distance_f(fOrigin, fOriginEnt) < dist ) {
					idEnt = ent;
					dist = get_distance_f(fOrigin, fOriginEnt)
				}
			}
			if( IsBlock(idEnt) ){
				entity_get_vector(idEnt, EV_VEC_origin, fOriginEnt )
				set_pev(id, pev_origin, fOriginEnt)
				remove_entity(idEnt)
			}
		}
	}
	if( item != 0 )
		adminMenu(id)
	
	return PLUGIN_CONTINUE
}
public FunkcjaLatarki(id){
	if(userBmShorCut[id]){
		new ent, body
		get_user_aiming(id, ent, body)
		if(IsBlock(ent)) {
			new size, rotation;
			rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
			size = entity_get_int(ent, EV_INT_skin)
			setSizeAngles(ent, size, rotation, Float:{-1.0, -1.0, -1.0})
		}
	}
	return PLUGIN_HANDLED;
}
public menuLoad(id){
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\yCurrent template:\r %s\w^nLoad:", actualStyle)
	new menu=menu_create(gText, "menuLoad_2")
	
	
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	
	new szFile[32]
	new x=0;
	new folderHandle = open_dir(dataDir, szFile, charsmax(szFile));
	if(!folderHandle) 
		return;
	while(next_file(folderHandle, szFile, charsmax(szFile))){
		if(!equal(szFile, "..") && !equal(szFile, ".") &&!equal(szFile, "BackUp")) {				
			format(gText, sizeof(gText),"Load template:\y %s", szFile)
			copy(stylesMenu[x++], sizeof(stylesMenu[]), szFile)
			menu_additem(menu, gText)
			if(sizeof(stylesMenu) == x-1 )
				break
		}
	}
	menu_display(id,menu,0)
	close_dir(folderHandle)
}
public menuLoad_2(id, menu, item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	
	new ent
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( !pev_valid(ent) ){
			continue;
		}	
		remove_entity(ent)
	}
	while ( ( ent = find_ent_by_class(ent, szTeleClassName) ) ){
		if( !pev_valid(ent) ){
			continue;
		}	
		remove_entity(ent)
	}
	copy(actualStyle, sizeof(actualStyle), stylesMenu[item])
	set_task(1.0, "LoadBlocks", id)
	return PLUGIN_CONTINUE
}
public menuSave(id){
	
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\wCurrent level:\r %s\w^nSave:", actualStyle)
	new menu=menu_create(gText, "menuSave_2")
	menu_additem(menu, "\rSave as new style");	
		
	new dataDir[64]	
	new folderDir[64], szMap[33];
	get_mapname(szMap, sizeof(szMap))
	
	get_datadir(dataDir, charsmax(dataDir));
	formatex(folderDir, charsmax(folderDir), "/%s/%s", szFolderName, szMap);
	
	add(dataDir, charsmax(dataDir), folderDir);
	
	
	new szFile[32]
	new x=0;
	
	new folderHandle = open_dir(dataDir, szFile, charsmax(szFile));
	if(!folderHandle) 
		return;
	while(next_file(folderHandle, szFile, charsmax(szFile))){	
			
		if(!equal(szFile, "..") && !equal(szFile, ".") && !equal(szFile, "BackUp")) {	
			if( equal(szFile, actualStyle) )
				format(gText, sizeof(gText),"Currently:\r %s", szFile)
			else format(gText, sizeof(gText),"Save as:\y %s", szFile)
			copy(stylesMenu[x++], sizeof(stylesMenu[]), szFile)
			menu_additem(menu, gText)
			
		}
	}
	
	menu_display(id,menu,0)
	close_dir(folderHandle)
}
public menuSave_2(id, menu, item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	if( item == 0 ){
		client_cmd(id, "messagemode layout")
		menuSave(id);
	}else{
		item --;
		if( !equal(actualStyle, stylesMenu[item] ) ){
			userBlockProperties[id]=item;
			meunSaveConfirmation(id)	
		}else{
			SaveBlocks(id, 0)
		}
		
	}
	return PLUGIN_CONTINUE
}
public meunSaveConfirmation(id){
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\wConfirm:^nThe map will be saved as:\y%s", stylesMenu[userBlockProperties[id]])
	new menu=menu_create(gText, "menuSaveConfirmation_2")
	
	menu_additem(menu, "\ySave")
	menu_additem(menu, "\rDon't save")
	
	menu_display(id,menu,0)
}
public menuSaveConfirmation_2(id,menu,item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	copy(actualStyle, sizeof(actualStyle), stylesMenu[userBlockProperties[id]])
	SaveBlocks(id, 0)
	adminMenu(id)
	return PLUGIN_CONTINUE
}
public MenuMoveBlock2(id)
{
	new menu[286]
	format(menu, sizeof(menu), "\
		\y[BM]^n\wMoving Blocks:^n\
		\r1.\w Move o:\y %0.1f^n^n\
		\r2.\w Move\y Up^n\
		\r3.\w Move\y Down^n\
		\r4.\w Move\y X-^n\
		\r5.\w Move\y X+^n\
		\r6.\w Move\r Y-^n\
		\r7.\w Move\r Y+^n^n\
		\r8.\w Enter your value^n\
		\r9.\w Sliding move menu^n\
		\r0.\w Exit\
	", userMoveDist[id])
	show_menu(id, B1 | B2 | B3 | B4 | B5 | B6 | B7 | B8 | B9 | B0, menu, -1, "menuMoveBlockGrzyb")
	return PLUGIN_CONTINUE
}
public menuMoveBlock(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new menu=menu_create("[BM]^n\wMove Blocks", "menuMoveBlock_3")
	new gText[128]
	format(gText, sizeof(gText), "Move o:\y %0.1f", userMoveDist[id])
	menu_additem(menu, gText)
	menu_additem(menu, "Move\y X-")
	menu_additem(menu, "Move\y X+")
	menu_additem(menu, "Move\r Y-")
	menu_additem(menu, "Move\r Y+")
	menu_additem(menu, "Move\y Up")
	menu_additem(menu, "Move\y Down")
	
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id,menu, 0)
	return PLUGIN_CONTINUE
}
public menuMoveBlock_3(id, menu, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if( item == MENU_EXIT){
		adminMenu(id)
		return PLUGIN_CONTINUE
	}
	new ent,body
	
	new Float:fOrigin[3]
	if( item != 0 ){
		get_user_aiming(id,ent,body)
	
		if( IsBlock(ent) ){
			userLastMoved[id]=ent
		}
		if( !IsBlock(userLastMoved[id]) ){		
			menuMoveBlock(id)		
			return PLUGIN_CONTINUE
		}
		
		ent=userLastMoved[id];
		entity_get_vector(ent, EV_VEC_origin, fOrigin)
	}
	switch(item){
		case 0:{
			client_cmd(id, "messagemode WartoscPosuwania")
			/*if( userMoveDist[id] < 0.5 )			
				userMoveDist[id]+=0.1
			else if( userMoveDist[id] < 2.0 )
				userMoveDist[id]+=0.5			
			else if( userMoveDist[id] > 20.0 )
				userMoveDist[id]=0.1
			else userMoveDist[id]+=2.0*/
		}
		case 1: fOrigin[0]-=userMoveDist[id]
		case 2: fOrigin[0]+=userMoveDist[id]
		case 3: fOrigin[1]-=userMoveDist[id]
		case 4: fOrigin[1]+=userMoveDist[id]
		case 5: fOrigin[2]+=userMoveDist[id]
		case 6: fOrigin[2]-=userMoveDist[id]
	}
	entity_set_origin(ent, fOrigin)
	menuMoveBlock(id)
	return PLUGIN_CONTINUE
}
public menuMoveBlock_2(id, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent,body
	if( item == 9 ){
		adminMenu(id)
		return PLUGIN_CONTINUE
	}
	new Float:fOrigin[3]
	get_user_aiming(id,ent,body)
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	if( item >= 1 && item <=6){
		if( !IsBlock(ent) ){	
			MenuMoveBlock2(id)		
			return PLUGIN_CONTINUE
		}
	}
	switch(item){
		case 0:{
			if( userMoveDist[id] <= 0.1 )			
				userMoveDist[id]= 1.0
			else if( userMoveDist[id] < 32.0 )
				userMoveDist[id] = 	userMoveDist[id]*2
			else if( userMoveDist[id] >= 32.0 )
				userMoveDist[id]=0.1
			else userMoveDist[id]+=2.0
		}
		case 1: fOrigin[2]+=userMoveDist[id]
		case 2: fOrigin[2]-=userMoveDist[id]
		case 3: fOrigin[0]-=userMoveDist[id]
		case 4: fOrigin[0]+=userMoveDist[id]
		case 5: fOrigin[1]-=userMoveDist[id]
		case 6: fOrigin[1]+=userMoveDist[id]
		case 7: {
			client_cmd(id, "messagemode WartoscPosuwania")
		}
		case 8:{
			MenuObracania(id);
			return PLUGIN_CONTINUE
		}
		case 9: adminMenu(id)
	}
	entity_set_origin(ent, fOrigin)
	MenuMoveBlock2(id)
	return PLUGIN_CONTINUE
}
public ZmienWartoscPosuwania(id){
	new szCash[64];
	read_argv(1, szCash, 63)
	remove_quotes(szCash);
	new Float:Cash = str_to_float(szCash);

	userMoveDist[id] = Cash;
	
	client_print(id, 3, "You have set the Sliding power to: %0.1f", Cash);
	if(wolebmalb[id])
	{
		menuMoveBlock(id);
	}
	else
	{
		MenuMoveBlock2(id);
	}
	return PLUGIN_HANDLED;
}
public selectBlock(id){
	new iCountBlock[NUMBLOCKS]
	new ent = find_ent_by_class(-1, szBlockClassName)
	while( ent != 0 ){
		if( !IsBlock(ent) ){
			continue;
		}
		iCountBlock[entity_get_int(ent, EV_INT_body)]++;
		ent=find_ent_by_class(ent, szBlockClassName)
	}
	new gText[128]
	format(gText, sizeof(gText), "[BM]^n\yBlocks:\r %d^n\wChoose block:", NUMBLOCKS )
	new menu=menu_create(gText, "selectBlock_2")
	for( new i = 0;i <NUMBLOCKS;i++){
		format(gText, sizeof(gText), "%s\y [Numbers:\r %d\w]", blocksProperties[i][0], iCountBlock[i])
		menu_additem(menu, gText)
	}		
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id, menu, (userSelectedBlock[id]/7))
}
public selectBlock_2(id, menu, item){
	if( item == MENU_EXIT ){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}
	if( userAdminBlockTest[id] ){
		new Float:fOrigin[3]
		new ent = find_ent_by_class(-1, szBlockClassName)
		while( ent != 0 ){
			if( !IsBlock(ent) ){
				continue;
			}
			if( entity_get_int(ent, EV_INT_body) == item ){
				pev(ent ,pev_origin, fOrigin)
				set_pev(id ,pev_origin, fOrigin)
				break;
			}	
			
			ent=find_ent_by_class(ent, szBlockClassName)
		}
			
		userSelectedBlock[id]=item;
		selectBlock(id)
	}else{
		userSelectedBlock[id]=item;		
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
	}
	return PLUGIN_CONTINUE
}
public createBlockAim(id){
	
	new iLook[3]
	new Float:fLook[3]
	get_user_origin(id, iLook, 3)
	IVecFVec(iLook, fLook)
	
	fLook[2]+=4.0
	
	new ent = createBlock(userSelectedBlock[id], fLook, userSelectedSize[id], 2, Float:{ 0.0 , 0.0, 0.0 })
	setDefaultParam(ent)
	if( entity_get_int(ent,EV_INT_body) != GLASS )
		setRenderingBlock(ent)
	/*if( entity_get_int(ent,EV_INT_body) == GLASS )
		set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 40);	*/
	new closest = DoSnapping(id, ent, fLook)
	if( userSnap[id] )
		entity_set_origin(ent, fLook)
	if( IsBlock(closest) && userInteligent[id]){		
		setSizeAngles(ent, entity_get_int(ent, EV_INT_skin), entity_get_int(closest, EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })
	}
	
}
public delaySnapping(data[]){
	new iLook[3]
	new Float:fLook[3]	
	iLook[0]=data[0]
	iLook[1]=data[1]
	iLook[2]=data[2]
	IVecFVec(iLook, fLook)
	DoSnapping(data[3], data[4], fLook)
}

public createBlock(typeBlock, Float:fOrigin[3], size, rotation, Float:fAngles[3]){
	new ent = create_entity("info_target")
	if( !pev_valid(ent) )
		return -1;
		
	entity_set_string(ent, EV_SZ_classname, szBlockClassName)	
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	entity_set_int(ent, EV_INT_body, typeBlock)
	entity_set_int(ent, EV_INT_skin, size)	
	entity_set_int(ent, EV_INT_iuser1, 0)
	entity_set_int(ent, EV_INT_iuser2, 0)
	entity_set_int(ent, EV_INT_iuser3, rotation)
	
	entity_set_vector(ent, EV_VEC_angles, fAngles)
	
	entity_set_edict(ent, EV_ENT_euser1, 0 )
	
	entity_set_int(ent, EV_INT_iuser4, 255 )
	if(typeBlock==GLASS){	
		set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 40);	
	}
	entity_set_vector(ent, EV_VEC_rendercolor, Float:{255.0,255.0,255.0} )
	entity_set_model(ent, pathModelBlock(typeBlock, size))
	
	
	resetBlockData(ent)
	setDefaultParam(ent)
	
	setSizeAngles(ent, size, rotation, fAngles)
	entity_set_origin(ent, fOrigin)
	if( typeBlock == WATER ){		
		
		set_task(0.1, "makeTrigger", ent+TASK_TRIGGER)	
		//set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
	}
	return ent;
}
public makeTrigger(ent){
	ent-=TASK_TRIGGER
	
	
	if( !pev_valid(ent) )
		return PLUGIN_CONTINUE
	
	if( entity_get_int(ent, EV_INT_body) != WATER )
		return PLUGIN_CONTINUE
	static Float:fOrigin[3];
	static Float:fOriginPlayer[3];
	new bool:gNearEnt;
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	for( new i = 1; i<=33;i++){
		if( !is_user_alive(i) || !is_user_connected(i) )	
			continue
		entity_get_vector(i, EV_VEC_origin, fOriginPlayer)	
		if(get_distance_f(fOriginPlayer, fOrigin) > 150.0 )
			continue;		
		gNearEnt=true;
		break;
	}
	
	new Float:flMins[3], Float:flMaxs[3];
	pev(ent, pev_mins, flMins);
	pev(ent, pev_maxs, flMaxs);
			
	set_pev(ent, pev_solid, gNearEnt? SOLID_TRIGGER : SOLID_BBOX);
	engfunc(EngFunc_SetSize, ent, flMins, flMaxs);	
	
	set_task(0.1, "makeTrigger", ent+TASK_TRIGGER) 
	
	return PLUGIN_CONTINUE
}
public rotateBlock(ent){	
	new size, rotation;
	rotation = (entity_get_int(ent, EV_INT_iuser3)+1) % 3	
	size = entity_get_int(ent, EV_INT_skin)
	setSizeAngles(ent, size, rotation, Float:{ 0.0 , 0.0, 0.0 })
}
public setSizeAngles(ent, size, rotation, Float:anglesR[3]){
	new Float:mins[3], Float:maxs[3], Float:angles[3];
	new Float:scale = str_to_float(blocksSize[size][2])
	switch( rotation ){
		case 0:{
			if( size != TINY ){
				mins[0] = -4.0;	
				mins[1] = -32.0;	
				mins[2] = -32.0;			
				maxs[0] = 4.0;
				maxs[1] = 32.0;
				maxs[2] = 32.0;
			}else{
				mins[0] = -32.0;
				mins[1] = -4.0;
				mins[2] = -4.0;			
				maxs[0] = 32.0;
				maxs[1] = 4.0;
				maxs[2] = 4.0;				
			}
			angles[0]=90.0;
		}
		case 1:{
			if( size != TINY ){
				mins[0] = -32.0;	
				mins[1] = -4.0;	
				mins[2] = -32.0;			
				maxs[0] = 32.0;
				maxs[1] = 4.0;
				maxs[2] = 32.0;
			}else{
				mins[0] = -4.0;
				mins[1] = -32.0;
				mins[2] = -4.0;			
				maxs[0] = 4.0;
				maxs[1] = 32.0;
				maxs[2] = 4.0;				
			}
			angles[0] = 90.0;
			angles[2] = 90.0;
		}
		case 2:{
			if( size != TINY ){
				mins[0] = -32.0;	
				mins[1] = -32.0;	
				mins[2] = -4.0;			
				maxs[0] = 32.0;
				maxs[1] = 32.0;
				maxs[2] = 4.0;
			}else{
				mins[0] = -4.0;
				mins[1] = -4.0;
				mins[2] = -32.0;			
				maxs[0] = 4.0;
				maxs[1] = 4.0;
				maxs[2] = 32.0;				
			}
			angles[0] = 0.0;
			angles[1] = 0.0;
			angles[2] = 0.0;
		}
	}
	for( new i =0 ; i < 3;i ++ ){
		if( rotation==2 && i == 2 )
			continue;
			
		if( maxs[i] == 4.0 || maxs[i] == -4.0 )
			continue
		mins[i] *= scale;
		maxs[i] *= scale;	
	}
	
	
	if(!(anglesR[0] == -1.0 && anglesR[1] == -1.0 && anglesR[2] == -1.0)) for(new i = 0; i < 3; i ++) angles[i] = anglesR[i];
	
	entity_set_int(ent, EV_INT_skin, size)
	entity_set_int(ent, EV_INT_iuser3, rotation)
	entity_set_vector(ent, EV_VEC_angles, angles)
	entity_set_size(ent, mins, maxs)
}
public pathModelBlock(typeBlock, size){
	new gText[68];
	format(gText, sizeof(gText), "models/FNJ_EasyBlocks/%s%s.mdl", blocksProperties[typeBlock][1], blocksSize[size][0])
	return gText;
}	

public IsBlock(ent){
	if( !pev_valid(ent) )
		return false;
	new szClass[12]
	entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass) )
	return (equal(szClass, szBlockClassName ) || equal(szClass, szTeleClassName )|| equal(szClass, szLightClassName ))
	
}
public IsTeleport(ent){
	if( !pev_valid(ent) )
		return false;
	new szClass[14]
	entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass) )
	return (equal(szClass, szTeleClassName ))
}
public IsLight(ent){
	if( !pev_valid(ent) )
		return false;
	new szClass[14]
	entity_get_string(ent, EV_SZ_classname, szClass, sizeof(szClass) )
	return (equal(szClass, szLightClassName ))
}
public actionBhop(ent){
	if( task_exists(ent+TASK_BHOP) )
		return PLUGIN_CONTINUE
	
	
	set_task(0.1, "makeNoSolid", ent+TASK_BHOP)
	
	return PLUGIN_CONTINUE
}
public actionNoSlowBhop(id, ent){
	userNoSlow[id]=true;
	actionBhop(ent)
	if( !task_exists(TASK_NOSLOW+id) )
		remove_task(id+TASK_NOSLOW)
	set_task(0.1, "taskSlowDown", id+TASK_NOSLOW)
	
}
public actionBhopLatency(id, ent){
	if( !pev_valid(ent)){
		return PLUGIN_CONTINUE;		
	}
	
	new Float:timeBH = get_gametime();
	new Float:block = getParamBlock(ent,0)

	entity_get_float(ent, EV_FL_fuser1)
	
	if( ( userLatency[id] <= 0.0 || userLatency2[id] != ent )){
		userLatency[id] = block - (timeBH - entity_get_float(ent, EV_FL_fuser1));
		userLatency2[id] = ent
	}
	
		
	if ( task_exists(ent + TASK_BHOP )) 
		return PLUGIN_CONTINUE;
	
	entity_set_float(ent, EV_FL_fuser1, timeBH);
	
	set_task(block, "makeNoSolid", ent+TASK_BHOP)
	
	return PLUGIN_CONTINUE
}
public actionDeath(id, ent){
	if( !is_user_alive(id) )
		return PLUGIN_CONTINUE
	if( userGodMode[id] ){
		if( userCheckPoint[id] ){
			backToCheckPoint(id)
		}
		if( get_gametime()-deathTouched[id] > 0.2 ){
			static Float:fTime[ 33 ]
			new Float:fTimeNow = get_gametime();
			if( ( fTimeNow - fTime[ id ] ) >= 0.2 ){
				
				set_dhudmessage(255, 32, 32, -1.0, 0.25, 0, 0.1, 0.2, 0.1, 0.1)
				show_dhudmessage(id, "!! You touch death !!");
			
			
				fTime[ id ] = fTimeNow 	
			}	
			deathTouched[id]=get_gametime();
		}
	}else{
		if( getParamBlock(ent, 18) == 0.0 ){
			if( userSkills[id][0][0] > get_gametime() ){
				return PLUGIN_CONTINUE;
			}
		}
		/*if( get_gametime() - frost_last_time(id) < 9.0 ){	
			new freezer = frost_last_freezer(id)
			if( freezer != 0 && is_user_connected(freezer) ){
				//xp_add_mission(frost_last_freezer(id), 4, 1)
				ExecuteHamB( Ham_TakeDamage, id, frost_last_freezer(id), frost_last_freezer(id), 1000.0, DMG_GENERIC );		
				return PLUGIN_CONTINUE
			}
		}*/
		if( get_gametime() -userSlowedTime[id]  < 9.0 ){
			if( userSlowed[id] != 0 && is_user_connected(userSlowed[id]) ){		
				ExecuteHamB( Ham_TakeDamage, id,userSlowed[id], userSlowed[id], 1000.0, DMG_GENERIC );
			}
			
		}	
		fakedamage(id, "", 10000.0, DMG_GENERIC);
	}
	return PLUGIN_CONTINUE
}
public taskSlowDown(id){
	id-=TASK_NOSLOW
	userNoSlow[id]=false;
}
public actionBarrier(id, ent){	
	if( task_exists(ent+TASK_BHOP) )
		return PLUGIN_CONTINUE
	
	makeNoSolid(ent+TASK_BHOP)
	
	return PLUGIN_CONTINUE
}
public makeNoSolid(ent){
	ent-=TASK_BHOP;
	
	
	set_rendering(ent, kRenderFxNone, 255, 255, 255, kRenderTransAdd, 25);
	//changeAlpha(ent, 40)
	entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	if( entity_get_edict(ent,EV_ENT_euser3) == 1){
		set_task(1.8, "makeSolid", ent+TASK_BHOP)
		entity_set_edict(ent,EV_ENT_euser3,0) 
	}else set_task(layoutStyle?0.8:1.0, "makeSolid", ent+TASK_BHOP)
}
public makeSolid(ent){
	ent-=TASK_BHOP;	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	setRenderingBlock(ent)
}
public actionIce(id,ent){
	if( task_exists(id+TASK_ICE) )
		return PLUGIN_CONTINUE
	
	entity_set_float(id, EV_FL_friction, 0.15);
	entity_set_float(id, EV_FL_maxspeed, 400.0);
	userOnIce[id]=true;
	set_task(0.1, "taskNoIce", id+TASK_ICE)
	return PLUGIN_CONTINUE
}
public actionMagicSpeed(id,ent){
	if( task_exists(id+TASK_ICE) )
		return PLUGIN_CONTINUE
	entity_set_float(id, EV_FL_friction, 0.9);
	userMagic[id]=true;
	set_task(0.1, "taskNoIce", id+TASK_ICE)
	return PLUGIN_CONTINUE
}

public taskNoIce(id){	
	id-=TASK_ICE	
	userOnIce[id]=false;
	userMagic[id]=false;
	entity_set_float(id, EV_FL_friction, 1.0);
}
public actionGodMode(id, ent){
	if( userSkills[id][0][1] < get_gametime() ){
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}
		
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		userSkills[id][0][0]=get_gametime()+getParamBlock(ent,9)
		userSkills[id][0][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		emit_sound(id, CHAN_WEAPON, soundsNames[1], 1.0, ATTN_NORM, 0, PITCH_NORM)	
	}else if( userSkills[id][0][1] > get_gametime() && userSkills[id][0][0] < get_gametime() ) {
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][0]=true;
	}
}
public actionInvisible(id, ent){
	if( userSkills[id][1][1] < get_gametime() ){
		
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}
		
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		if( userSkills[id][1][0] - get_gametime() <= 0.0 )
			userSkills[id][1][0]=get_gametime()+getParamBlock(ent,9)
		else{
			change_task(id+TASK_VISIBLE, userSkills[id][1][0] - get_gametime()+getParamBlock(ent,9))
		}
			
		userSkills[id][1][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		setRenderingPlayer(0, id, 255,255,255,0)
		set_task(getParamBlock(ent,9), "userVisible", id+TASK_VISIBLE)		
		emit_sound(id, CHAN_WEAPON, soundsNames[2], 1.0, ATTN_NORM, 0, PITCH_NORM)	
		
	}else if( userSkills[id][1][1] > get_gametime()  && userSkills[id][1][0] < get_gametime() ) {
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][1]=true;
	}
}
public userVisible(id){
	id-=TASK_VISIBLE
	setRenderingPlayer(0, id, 255,255,255,255)
}
public actionGun(id, ent){
	
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 11)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 11))
		new weapon = find_ent_by_owner(-1, weaponsGive[weaponToGive], id)
		if( weapon ){
			cs_set_weapon_ammo(weapon, cs_get_weapon_ammo(weapon)+floatround(getParamBlock(ent, 13)));
		}else{
			new weapon=give_item(id, weaponsGive[weaponToGive])
			cs_set_weapon_ammo(weapon, floatround(getParamBlock(ent, 13)));
			
		}
		emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
		setUsed(id,ent)
	}	
}
public actionGrenade(id, ent){
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 17)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 17))
		
		new weapon = find_ent_by_owner(-1, grenadesGive[weaponToGive], id)
		if( !weapon ){
			give_item(id, grenadesGive[weaponToGive])		
			cs_set_user_bpammo(id , cswGrenade[weaponToGive] , floatround(getParamBlock(ent, 13)));
			emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setUsed(id,ent)
		}else{
			//if( floatround(getParamBlock(ent, 17)) == 2 ){
				cs_set_user_bpammo(id, cswGrenade[weaponToGive], cs_get_user_bpammo(id, cswGrenade[weaponToGive])+floatround(getParamBlock(ent, 13)));
				
				emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
				setUsed(id,ent)
		}
		
	}
}
public actionBoots(id, ent){
	if( userSkills[id][2][1] < get_gametime() ){
		
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}	
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		
		userSkills[id][2][0]=get_gametime()+getParamBlock(ent,9)	
		userSkills[id][2][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		emit_sound(id, CHAN_WEAPON, soundsNames[6], 1.0, ATTN_NORM, 0, PITCH_NORM)
	}else if( userSkills[id][2][1] > get_gametime()  && userSkills[id][2][0] < get_gametime() ){
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][2]=true;
	}
}
public actionMusic(id, ent){
	if( get_gametime() - pev(ent, pev_fuser1) >= 22.0 ){
		set_pev(ent, pev_euser4, random(sizeof(blockMusic)))
		emit_sound(ent, CHAN_WEAPON, blockMusic[pev(ent, pev_euser4)][0], 1.0, ATTN_NORM, 0, PITCH_NORM)
		set_pev(ent, pev_fuser1, get_gametime())
	}
	
}
public actionCamouflage(id, ent){
	if( userSkills[id][3][1] < get_gametime() ){
		
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}		
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		
		cs_set_user_model(id, modelCamouflage[random(4)+(4*(get_user_team(id)==1?1:0))])
		userSkills[id][3][0]=get_gametime()+getParamBlock(ent,9)	
		userSkills[id][3][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		emit_sound(id, CHAN_WEAPON, soundsNames[7], 1.0, ATTN_NORM, 0, PITCH_NORM)
		set_task(getParamBlock(ent,9), "turnOffCamouflage",id+TASK_CAMOUFLAGE)
	}else if( userSkills[id][3][1] > get_gametime() && userSkills[id][3][0] < get_gametime() ){ 
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}		
		userSkillsRenew[id][3]=true;
	}

}
public turnOffCamouflage(id){
	id-=TASK_CAMOUFLAGE
	cs_set_user_model(id, modelCamouflage[random(4)+(4*(get_user_team(id)==1?0:1))])
}
public numPlayers(){
	new iNum = 0;
	for(new i = 1 ; i < 33 ; i ++ ){
		if( !is_user_connected(i) || is_user_hltv(i) )
			continue
		iNum++
	}		
	return iNum
}
public actionPoints(id, ent){
	
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 11)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 11))
		new weapon = find_ent_by_owner(-1, weaponsGive[weaponToGive], id)
		if( weapon ){
			cs_set_weapon_ammo(weapon, cs_get_weapon_ammo(weapon)+floatround(getParamBlock(ent, 13)));			
			emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setUsed(id,ent)
		}
	}	
}
public actionAmmo(id, ent){
	
	if( !blockUsed(id,ent) ){
		new weaponToGive = floatround(getParamBlock(ent, 11)) ==  -1 ? random(sizeof(weaponsGive)) : floatround(getParamBlock(ent, 11))
		new weapon = find_ent_by_owner(-1, weaponsGive[weaponToGive], id)
		if( weapon ){
			cs_set_weapon_ammo(weapon, cs_get_weapon_ammo(weapon)+floatround(getParamBlock(ent, 13)));			
			emit_sound(ent, CHAN_WEAPON, soundsNames[5], 1.0, ATTN_NORM, 0, PITCH_NORM)
			setUsed(id,ent)
		}
	}	
}
public actionPotion(id, ent){	
	if( !blockUsed(id,ent) ){
		if( get_user_health(id)){
			//new health=min(get_user_health(id) + floatround( getParamBlock(ent,5) ))
			//set_user_health(id, health )
			//setUsed(id,ent)			
			//emit_sound(ent, CHAN_WEAPON, soundsNames[12], 1.0, ATTN_NORM, 0, PITCH_NORM)
		}
		
	}	
}
public actionGravity(id, ent){
	set_user_gravity(id, getParamBlock(ent, 21));
	
	g_low_gravity[id] = true;
	g_low_trampoline[id] = true;
}
public ActionTimerStart(id, ent)
{
	CzasTimera[id] = 0
	if(ZatrzymanyTimer[id]){
		ZatrzymanyTimer[id] = false;
		OdpalTimer(id);
	}
}
public ActionTimerStop(id, ent)
{
	if(!ZatrzymanyTimer[id]){
		new name[33];
		get_user_name(id, name, sizeof(name))
		if(getParamBlock(ent, 26) >= CzasTimera[id])	OdpalNagrode(id);
		if(getParamBlock(ent, 27) >= CzasTimera[id])	ColorChat(0, GREEN, "^x01 Player^x04 %s^x01 finished ahead of time^x04 [^x01%is^x04]", name, CzasTimera[id])
		ZatrzymanyTimer[id] = true;
		CzasTimera[id] = 0
	}
}
public OdpalNagrode(id){
	if(!NagrodaTimer[id]){
		NagrodaTimer[id] = true;
		
		if(get_user_team(id) == 1){
			new MenuBody[512], len, keys;
			len = format(MenuBody, (sizeof MenuBody - 1), "\r[BM]\y Collect your reward^n\wPrize Menu");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n^n\r1.\w Flash Grenade chance:\y	[100%]");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n\r2.\w Flash Grenade chance:\y	[100%]");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n\r3.\w Frost Grenade chance:\y	[50%]");
			len += format(MenuBody[len], (sizeof MenuBody - 1) - len, "^n\r4.\w HE Grenade chance:\y	[25%]");
			
			keys = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4);
			
			show_menu(id, keys, MenuBody, -1, "NagrodaMenu");
		}
	}
}
public HandleNagrodaMenu(id, key)
{
	switch(key + 1)
	{
		case 1: give_item(id, "weapon_flashbang");
		/*{
			new MAXHP = pobierz_MAXHP(id)
			if(get_user_health(id) == MAXHP+100){
				NagrodaTimer[id] = false;
				OdpalNagrode(id);
			}
			set_user_health(id, MAXHP+100)
		}*/
		case 2:	give_item(id, "weapon_flashbang");
		case 3:
		{
			new los = random_num(1,2)
			if(los == 1)	give_item(id, "weapon_smokegrenade");
		}
		case 4: 
		{
			new los = random_num(1,4)
			if(los == 1)	give_item(id, "weapon_hegrenade");
		}
	}
	return 1;
}
public OdpalTimer(id)
{
	set_task(1.0, "Timer", id);
}
public Timer(id)
{
	if(ZatrzymanyTimer[id])
		return PLUGIN_HANDLED;
	
	set_task(1.0, "Timer", id);
	
	CzasTimera[id] ++;
	
	return PLUGIN_HANDLED;
}
public actiondodatkoweS(id, ent){
	addjb[id] = floatround(getParamBlock(ent, 22))
	dwajumpy[id] = true;
	
	static Float:fTime[ 33 ]
	new Float:fTimeNow = get_gametime();
	if( ( fTimeNow - fTime[ id ] ) >= 0.2 ){
		
		set_dhudmessage(64, 64, 255, -1.0, 0.25, 0, 0.1, 0.2, 0.1, 0.1)
		show_dhudmessage(id, "!! You have %d %s !!", floatround(getParamBlock(ent, 22)), floatround(getParamBlock(ent, 22)) == 1 ? "extra jump" : "extra jumps")
	
		fTime[ id ] = fTimeNow 	
	}
	static bool:dowybicia;
	dowybicia = bool:(pev(id, pev_button) & IN_JUMP);
	
	if(dowybicia){
		if(pev(id, pev_velocity, userAddVelocity[id] ) ){
			userAddVelocity[id][2] = getParamBlock(ent, 24);
		}
	}
}
public actionSpamBH(id, ent){
	if(pev(id, pev_velocity, userAddVelocity[id] ) ){
		userAddVelocity[id][2] = 250.0;
	}
}
public actionFeniks(id, ent){
	if( userSkills[id][4][1] < get_gametime() ){
		if( task_exists(id+TASK_SKILL_HUD ) ){
			remove_task(id+TASK_SKILL_HUD)
		}
			
		feniks[id] = true;
		if(feniks[id]){
			set_task(0.1, "setFeniks", id + TASK_FENIKS)
		}
		set_task(getParamBlock(ent,9), "wylaczogien", id)
		set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		userSkills[id][4][0]=get_gametime()+getParamBlock(ent,9)
		userSkills[id][4][1]=get_gametime()+getParamBlock(ent,10)+getParamBlock(ent,9)
		set_user_rendering(id, kRenderFxGlowShell, 255, 0, 0, kRenderNormal, 15);
		set_task(getParamBlock(ent,9), "userVisible", id+TASK_VISIBLE)
		emit_sound(id, CHAN_WEAPON, soundsNames[14], 1.0, ATTN_NORM, 0, PITCH_NORM)	
	}else if( userSkills[id][4][1] > get_gametime() && userSkills[id][4][0] < get_gametime() ) {
		if( !task_exists(id+TASK_SKILL_HUD ) ){
			set_task(0.1, "showHud", id+TASK_SKILL_HUD)
		}
		userSkillsRenew[id][4]=true;
	}
}
public wylaczogien(id){
    feniks[id] = false;
    remove_task(id + TASK_FENIKS);
}
public setFeniks(id)
{
    id -= TASK_FENIKS
    new origin[3];
    get_user_origin(id, origin, 0);

    message_begin(MSG_BROADCAST, SVC_TEMPENTITY, origin)
    write_byte(TE_EXPLOSION)
    write_coord(origin[0])
    write_coord(origin[1])
    write_coord(origin[2])
    write_short(sprite_fire)
    write_byte(5)
    write_byte(15)
    write_byte(4)
    message_end()
    displayFade(id, 512,512,512,250,150, 30, 50);
    set_task(0.2, "setFeniks", id + TASK_FENIKS)

}
public ThinkSpritesBlock(ent)
{
	if(!pev_valid(ent))
		return
	
	new Frame = floatround(entity_get_float(ent, EV_FL_frame)+1.0)%15
	entity_set_float(ent, EV_FL_frame, float(Frame))
	entity_set_float(ent, EV_FL_nextthink, get_gametime() +0.1)
}
public thinkWater(ent)
{
	static entinsphere, Float:origin[3], bool:ent_near;
	entity_get_vector(ent, EV_VEC_origin, origin);
	
	entinsphere = -1;
	ent_near = false;
	while ( ( entinsphere = find_ent_in_sphere(entinsphere, origin, 64.0) ) )
	{
		if ( 1 <= entinsphere <= 33 && is_user_alive(entinsphere))
		{
			ent_near = true;
			break;
		}
	}
	
	if ( ent_near )
	{
		if(entity_get_int(ent, EV_INT_solid) != SOLID_TRIGGER)
		{
			SetSolidTrigger(ent);
			entity_set_float(ent, EV_FL_nextthink, get_gametime() + 1.0);
			return 1;
		}
	}
	else if(entity_get_int(ent, EV_INT_solid) == SOLID_TRIGGER)
		SetSolidAgain(ent+TASK_SOLIDTRIGGER);
	
	entity_set_float(ent, EV_FL_nextthink, get_gametime() + 0.1);
	return 1;
}
public SetSolidTrigger(ent)
{
	new Float:fMins[3], Float:fMaxs[3];
	entity_get_vector(ent, EV_VEC_mins, fMins);
	entity_get_vector(ent, EV_VEC_maxs, fMaxs);
	
	entity_set_int(ent, EV_INT_solid, SOLID_TRIGGER);
	
	entity_set_size(ent, fMins, fMaxs);
}

public SetSolidAgain(ent)
{	
	ent -= TASK_SOLIDTRIGGER;
	
	new Float:fMins[3], Float:fMaxs[3];
	entity_get_vector(ent, EV_VEC_mins, fMins);
	entity_get_vector(ent, EV_VEC_maxs, fMaxs);
	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX);
	
	entity_set_size(ent, fMins, fMaxs);
}
public actionWater(id, ent){
	if(!( id >= 1 || id <= 33 ) || !is_user_alive(id))
		return 1;
	
	/*if(gfNextWaterSound[id] < fGameTime)
	{
		emit_sound(ent, CHAN_STATIC, g_sound_water[random_num(1, charsmax(g_sound_water))], 1.0, ATTN_NORM, 0, PITCH_NORM);
		gfNextWaterSound[id] = get_gametime() + 1.5;
	}*/
	
	pev(id, pev_velocity, userAddVelocity[id]);
	
	if(userAddVelocity[id][0] > 250.0) 
		userAddVelocity[id][0] *= 0.95;
	if(userAddVelocity[id][1] > 250.0) 
		userAddVelocity[id][1] *= 0.95;
	
	static bool:bPressingSpace;
	bPressingSpace = bool:(pev(id, pev_button) & IN_JUMP);
	
	static Float:fOrigin[3], Float:fPlayerOrigin[3];
	pev(ent, pev_origin, fOrigin);
	pev(id, pev_origin, fPlayerOrigin);
	
	if(getParamBlock(ent, 1))
	{
		if(fPlayerOrigin[2] < fOrigin[2])
			return 1;
	}
	
	if(bPressingSpace)
		userAddVelocity[id][2] = getParamBlock(ent, 16);
	else
		userAddVelocity[id][2] = - SpeedInWater;
		
	return 1;
	/*new Float:flOrigin[3];
	pev(ent, pev_origin, flOrigin);
	
	if (pev(id, pev_button) & IN_JUMP)
	{
		new Float:flAbsMin[3];
		pev(id, pev_absmin, flAbsMin);
		
		new Float:flProp1=getParamBlock(ent,15)
		new Float:flProp2=getParamBlock(ent,16)
		
		if (flAbsMin[2] > flOrigin[2] - 1.5 && getParamBlock(ent, 1)==1.0)
		{
			pev(id, pev_velocity, userAddVelocity[id]);
			if (userAddVelocity[id][0] >= flProp2) userAddVelocity[id][0] *= 0.95;
			if (userAddVelocity[id][1] >= flProp2) userAddVelocity[id][0] *= 0.95;
			userAddVelocity[id][2] = flProp1;
		}
		else if (getParamBlock(ent, 1) == 0.0)
		{
			pev(id, pev_velocity, userAddVelocity[id]);
			if (userAddVelocity[id][0] >= flProp2) userAddVelocity[id][0] *= 0.95;
			if (userAddVelocity[id][1] >= flProp2) userAddVelocity[id][0] *= 0.95;
			userAddVelocity[id][2] = flProp1;
		}
		else if (!(pev(id, pev_flags) & FL_ONGROUND))
			userAddVelocity[id][2] -= 75.0;
	}
	else if (!(pev(id, pev_flags) & FL_ONGROUND))
		userAddVelocity[id][2] -= 75.0;*/
}
public propertiesBlock(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent = userBlockProperties[id]
	new typeBlock=entity_get_int(ent, EV_INT_body)
	new gText[128],  iLen=0
	new Float:fValue;
	new type = entity_get_int(ent, EV_INT_body);
	format(gText, sizeof(gText), "[BM]^n\wBlock:\r %s", blocksProperties[type][0]);
	new menu = menu_create(gText, "propertiesBlock_2")
	menu_additem(menu, "\yLoad settings" )
	format( gText, sizeof(gText), "Rendering:\y %s",propertiesRendering[entity_get_edict(ent, EV_ENT_euser1)] )
	menu_additem(menu, gText)
	menu_additem(menu, "\rSet settings^n ")
	
	for( new i = 2; i <sizeof(blocksProperties[]);i ++ ){
		if( str_to_num(blocksProperties[type][i]) == -1 )
			break;
		
		new param = str_to_num(blocksProperties[type][i])
		fValue=getParamBlock(ent, param)
		iLen=0;
		iLen = format(gText[iLen], sizeof(gText)-iLen-1, "%s:\y ", propertiesName[str_to_num(blocksProperties[type][i])][0])
		if( equal(propertiesName[param][1], "bool" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", fValue == 0.0 ? "\dNo" : "Yes" )
		else if( equal(propertiesName[param][1], "weapon" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", floatround(fValue) == -1 ? "Random Weapon" : weaponsName[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "grenade" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", floatround(fValue) == -1 ? "Random Grenade" : grenadesName[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "team" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", forWho[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "Coiny" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%s", forCoi[floatround(fValue)] )
		else if( equal(propertiesName[param][1], "int" ) )
			iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%d", floatround(fValue) )
		else if( typeBlock == GRAVITY ) iLen += format(gText[iLen],	sizeof(gText)-iLen-1, "%0.2f^n", fValue*1000)
		else iLen += format(gText[iLen], sizeof(gText)-iLen-1, "%0.2f", fValue )
		menu_additem(menu, gText )
	}	
	menu_display(id, menu, 0)
	return PLUGIN_CONTINUE
}
public propertiesBlock_2(id, menu, item ){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if(item==MENU_EXIT){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}
	userBlockParamChange[id]=-1;
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
					
				
			if( !IsBlock(ent) ){
				propertiesBlock(id)
				return PLUGIN_CONTINUE
			}
			userBlockProperties[id]=ent;
			propertiesBlock(id)	
		}
		case 1:{
			changeRendering(id)
		}
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			
				
			if( !IsBlock(ent) || !IsBlock(userBlockProperties[id])){
				propertiesBlock(id)
				return PLUGIN_CONTINUE
			}
			copyDataBlock(userBlockProperties[id], ent)
			
			propertiesBlock(id)	
		}
		default:{
			item--;
			new ent = userBlockProperties[id]
			if( !IsBlock(ent) ){
				if(wolebmalb[id])
				{
					blockMaker(id)
				}
				else
				{
					GrzyboblockMaker(id)
				}
				return PLUGIN_CONTINUE
			}
			new type = entity_get_int(ent, EV_INT_body)
			new param = str_to_num(blocksProperties[type][item])
			if( equal(propertiesName[param][1], "bool" ) ){
				if(getParamBlock(ent, param) == 0.0 )
					setParamBlock(ent, param, 1.0)
				else setParamBlock(ent, param, 0.0)
				propertiesBlock(id)
			}else if( equal(propertiesName[param][1], "team" ) ){ 
				new value = (floatround(getParamBlock(ent, param))+1)%sizeof(forWho)
				setParamBlock(ent, param, float(value))				
				propertiesBlock(id)
			}else if( equal(propertiesName[param][1], "Coiny" ) ){
				new value = (floatround(getParamBlock(ent, param))+1)%sizeof(forCoi)
				setParamBlock(ent, param, float(value))				
				propertiesBlock(id)
			}else if( equal(propertiesName[param][1], "weapon" ) ){				
				userBlockParamChange[id]=param;
				weaponSelect(id)
			}else if( equal(propertiesName[param][1], "grenade" ) ){				
				userBlockParamChange[id]=param;
				grenadeSelect(id)
			}else{
				userBlockParamChange[id]=param;
				client_cmd(id, "messagemode value")
				
				propertiesBlock(id)
			}
		}
	}
	return PLUGIN_CONTINUE;
}
public weaponSelect(id){
	new actual=floatround(getParamBlock(userBlockProperties[id], userBlockParamChange[id]))
	new gText[64]
	new menu=menu_create("[BM]^n\wChoose a weapon", "weaponSelect_2")
	format(gText, sizeof(gText), "Random weapon%s", actual==-1?"\y (Currently)\r*":"")
	menu_additem(menu, gText)
	for( new i = 0;i < sizeof(weaponsName); i ++){
		format(gText, sizeof(gText), "%s%s", weaponsName[i], i==actual?"\y (Currently)\r*":"")
		menu_additem(menu, gText)
	}
	menu_display(id, menu, 0)
}
public weaponSelect_2(id,menu,item){
	if(item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	if( item == 0 )		
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], -1.0)
	else{
		item --;
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], float(item))
	}
	propertiesBlock(id)
	return PLUGIN_CONTINUE
}
public grenadeSelect(id){
	new actual=floatround(getParamBlock(userBlockProperties[id], userBlockParamChange[id]))
	new gText[64]
	new menu=menu_create("[BM]^n\wChoose a grenade", "grenadeSelect_2")
	
	format(gText, sizeof(gText), "Random grenade%s", actual==-1?"\y (Currently)\r*":"")
	menu_additem(menu, gText)
	for( new i = 0;i < sizeof(grenadesName); i ++){
		format(gText, sizeof(gText), "%s%s", grenadesName[i], i==actual?"\y (Currently)\r*":"")
		menu_additem(menu, gText)
	}
	menu_display(id, menu, 0)
}
public grenadeSelect_2(id,menu,item){
	if(item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	if( item == 0 )		
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], -1.0)
	else{
		item --;
		setParamBlock(userBlockProperties[id], userBlockParamChange[id], float(item))
	}
	propertiesBlock(id)
	return PLUGIN_CONTINUE
}
public changeRendering(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent = userBlockProperties[id]
	if( !IsBlock(ent) ){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}

	new menu = menu_create("[BM]^n\wRendering", "changeRendering_2")
	
	menu_additem(menu, "\yRendering")

	new gText[128]
	if( !IsLight(ent) ){
		format( gText, sizeof(gText), "Type of rendering:\y %s^n", propertiesRendering[entity_get_edict(ent, EV_ENT_euser1)]  )
		menu_additem(menu, gText)
		new Float:fColor[3]
		entity_get_vector(ent, EV_VEC_rendercolor, fColor);
		
		format( gText, sizeof(gText), "Red:\y %d", floatround(fColor[0]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Green:\y %d", floatround(fColor[1]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Blue:\y %d^n", floatround(fColor[2]) )
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Alpha:\y %d", entity_get_int(ent, EV_INT_iuser4) )
		menu_additem(menu, gText)
		menu_additem(menu, "\rSet rendering")
	}else{
		new Float:fColor[3]
		entity_get_vector(ent, EV_VEC_rendercolor, fColor);
		
		format( gText, sizeof(gText), "Red:\y %d", floatround(fColor[0]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Green:\y %d", floatround(fColor[1]) )	
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Blue:\y %d", floatround(fColor[2]) )
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Range:\y %d", entity_get_edict(ent, EV_ENT_euser1) )
		menu_additem(menu, gText)
		format( gText, sizeof(gText), "Brightness:\y %d", entity_get_int(ent, EV_INT_iuser4)  )
		menu_additem(menu, gText)
	}
	menu_display(id, menu, 0)
	
	return PLUGIN_CONTINUE
}
public changeRendering_2(id, menu, item){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	if( item == MENU_EXIT ){
		propertiesBlock(id)
		return PLUGIN_CONTINUE
	}
	userBlockParamChange[id]=-1;
	userBlockColorChange[id]=-1;
	new ent = userBlockProperties[id]
	if( IsLight(ent) ){
		switch(item){	
			case 0:{
				new ent, body
				get_user_aiming(id, ent, body)
						
					
				if( !IsBlock(ent) ){
					changeRendering(id)
					return PLUGIN_CONTINUE
				}
				userBlockProperties[id]=ent;
				changeRendering(id)
			}
			default:{
				userBlockColorChange[id] = item-1;
				client_cmd(id, "messagemode value")
				changeRendering(id)
			}
		}	
	}else{
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
					
				
			if( !IsBlock(ent) ){
				changeRendering(id)
				return PLUGIN_CONTINUE
			}
			userBlockProperties[id]=ent;
			changeRendering(id)
		}
		case 1:{
			entity_set_edict( ent, EV_ENT_euser1, (entity_get_edict(ent, EV_ENT_euser1)+1)%sizeof(propertiesRendering) )
			setRenderingBlock(ent)
			changeRendering(id)	
		}
		case 6:{
			if( !IsBlock(ent) ){
				changeRendering(id)
				return PLUGIN_CONTINUE;
			}		
			
						
			new entNew, body
			get_user_aiming(id, entNew, body)	
				
			if( !IsBlock(entNew) ){
				changeRendering(id)
				return PLUGIN_CONTINUE
			}
			
			new Float:fColor[3]	
			entity_get_vector( ent, EV_VEC_rendercolor, fColor)	
			
			entity_set_edict(entNew, EV_ENT_euser1, entity_get_edict(ent, EV_ENT_euser1) )
			entity_set_int(entNew, EV_INT_iuser4, entity_get_int(ent, EV_INT_iuser4) )
			entity_set_vector(entNew, EV_VEC_rendercolor, fColor )
			
			setRenderingBlock(entNew)
			changeRendering(id)
			
		}
		default:{
			userBlockColorChange[id] = item-2
			client_cmd(id, "messagemode value")
			changeRendering(id)
		}
	}
	}
	return PLUGIN_CONTINUE
}
public getNewLayout(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new szArg[33]
	read_argv(1, szArg, sizeof(szArg))
	remove_quotes(szArg)
	copy(actualStyle, sizeof(actualStyle), szArg);
	setLevel()
	SaveBlocks(id, 0)
	return PLUGIN_CONTINUE
}
public getTextValue(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent = userBlockProperties[id]
	if( !IsBlock(ent) ){
		if(wolebmalb[id])
		{
			blockMaker(id)
		}
		else
		{
			GrzyboblockMaker(id)
		}
		return PLUGIN_CONTINUE
	}
	new szArg[8]
	read_argv(1, szArg, sizeof(szArg))
	remove_quotes(szArg)
	if( userBlockParamChange[id] != -1 ){
		if( userBlockParamChange[id] == -2 ){
			new value=str_to_num(szArg)
			setEditBlock(userBlockProperties[id], 2, (value%100) )
			userCampSave[id][2]= (value%100)
			editCamp(id)
			
		}else{
			if( userBlockParamChange[id] == 12 && !IsTeleport(ent)){
				new value=str_to_num(szArg)
				setParamBlock(ent, userBlockParamChange[id], float(value%150) )					
			}else setParamBlock(ent, userBlockParamChange[id], str_to_float(szArg) )
			
			
			
			if( IsTeleport(ent) ){
				if( IsTeleport(entity_get_int(ent, EV_INT_iuser1)) )
					setParamBlock(entity_get_int(ent, EV_INT_iuser1), userBlockParamChange[id], str_to_float(szArg) )
				menuParamTele(id)
			}else propertiesBlock(id)
			
			userBlockParamChange[id]=-1
		}
	}else if( userBlockColorChange[id] != -1 ){
		if( IsLight(ent) ){
			if(userBlockColorChange[id]<3){
				new Float:fColor[3]
				entity_get_vector(ent, EV_VEC_rendercolor, fColor)
				fColor[userBlockColorChange[id]] = str_to_float(szArg)
			
				entity_set_vector(ent, EV_VEC_rendercolor, fColor)
			}else if(userBlockColorChange[id]==3)
				entity_set_edict(ent, EV_ENT_euser1, str_to_num(szArg) )
			else if(userBlockColorChange[id]==4)
				entity_set_int(ent, EV_INT_iuser4, str_to_num(szArg) ) 
			changeRendering(id)	
			userBlockColorChange[id]=-1
		}else{
			new Float:fColor[3]
			entity_get_vector(ent, EV_VEC_rendercolor, fColor)
			if( userBlockColorChange[id] == 3 )
				entity_set_int( ent, EV_INT_iuser4, str_to_num(szArg) )
			else fColor[userBlockColorChange[id]] = str_to_float(szArg)
			entity_set_vector(ent, EV_VEC_rendercolor, fColor)
			
			setRenderingBlock(ent)
			changeRendering(id)	
			userBlockColorChange[id]=-1
		}
	}
	return PLUGIN_CONTINUE
}
public changeAlpha(ent, alpha){
	new Float:fColor[3]	
	entity_get_vector( ent, EV_VEC_rendercolor, fColor)
	
	new type = entity_get_edict(ent, EV_ENT_euser1)
	setRendering(type, ent, floatround(fColor[0]), floatround(fColor[1]), floatround(fColor[2]), alpha)
}
public setRenderingBlock(ent){
	new Float:fColor[3]	
	entity_get_vector( ent, EV_VEC_rendercolor, fColor)
	
	new type = entity_get_edict(ent, EV_ENT_euser1)
	new alpha = entity_get_int(ent, EV_INT_iuser4)
	setRendering(type, ent, floatround(fColor[0]), floatround(fColor[1]), floatround(fColor[2]), alpha)
}	
public setRenderingPlayer(type, ent, red, green, blue, alpha){
	set_rendering(ent, kRenderFxNone, red, green, blue, kRenderTransAlpha, alpha);
}
public setRendering(type, ent, red, green, blue, alpha){	
	switch(type){
		case 1:		set_rendering(ent, kRenderFxNone, red, green, blue, kRenderTransColor, alpha);
		case 2:		set_rendering(ent, kRenderFxGlowShell, red, green, blue, kRenderTransColor, alpha);	
		case 3:		set_rendering(ent, kRenderFxHologram, red, green, blue, kRenderTransColor, alpha);
		case 4:		set_rendering(ent, kRenderFxNone, red, green, blue, kRenderTransAdd, alpha);		
		default:{
			if( entity_get_int(ent, EV_INT_body) != GLASS )
				set_rendering(ent, kRenderFxNone, red, green, blue, kRenderNormal, alpha);
			else{
				entity_set_int(ent, EV_INT_rendermode, 5);
				entity_set_float(ent, EV_FL_renderamt, 255.0);
			}
		}
	}
}	
public cmdHookGrab(id){
	if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent, body
	userLength[id]=get_user_aiming(id, ent, body)
	if( !IsBlock(ent) ){
		return PLUGIN_CONTINUE
	}
	if( !IsTeleport(ent) )
		if( entity_get_int(ent, EV_INT_iuser1) != 0 )
			return PLUGIN_CONTINUE
		
	if( !IsTeleport(ent) )
		entity_set_int(ent, EV_INT_iuser1, id)
	//entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	userEntGrab[id]=ent;	
	
	new iOrigin[3]
	new Float:fOrigin[3], Float:fOriginEnt[3]
	get_user_origin(id, iOrigin, 3)
	entity_get_vector(ent, EV_VEC_origin, fOriginEnt)
	IVecFVec(iOrigin, fOrigin)
	userEntOffset[id][0] = fOriginEnt[0]-fOrigin[0]
	userEntOffset[id][1] = fOriginEnt[1]-fOrigin[1]
	userEntOffset[id][2] = fOriginEnt[2]-fOrigin[2]
	return PLUGIN_CONTINUE
	/*if( checkAcces(id, 1) ){
		return PLUGIN_CONTINUE
	}
	new ent, body
	userLength[id]=get_user_aiming(id, ent, body)
	if( !IsBlock(ent) ){
		return PLUGIN_CONTINUE
	}
	if( !IsTeleport(ent) ){
		if( entity_get_int(ent, EV_INT_iuser1) != 0 )
			return PLUGIN_CONTINUE
		entity_set_int(ent, EV_INT_iuser1, id)
	}else{
		if( entity_get_int(ent, EV_INT_iuser3) != 0 )
			return PLUGIN_CONTINUE
			
		entity_set_int(ent, EV_INT_iuser3, id)			
	}
	//entity_set_int(ent, EV_INT_solid, SOLID_NOT)
	userEntGrab[id]=ent;	
	
	new iOrigin[3]
	new Float:fOrigin[3], Float:fOriginEnt[3]
	get_user_origin(id, iOrigin, 3)
	entity_get_vector(ent, EV_VEC_origin, fOriginEnt)
	IVecFVec(iOrigin, fOrigin)
	userEntOffset[id][0] = fOriginEnt[0]-fOrigin[0]
	userEntOffset[id][1] = fOriginEnt[1]-fOrigin[1]
	userEntOffset[id][2] = fOriginEnt[2]-fOrigin[2]
	return PLUGIN_CONTINUE*/
}
public cmdReleaseGrab(id){
	if( !IsBlock(userEntGrab[id]) ){
		userEntGrab[id]=-1;
		return PLUGIN_CONTINUE
	}
	if( isBlockStuck(userEntGrab[id]) ){	
		ColorChat(id, TEAM_COLOR, "[BM]^x01 The block has been removed")
		remove_entity(userEntGrab[id])
		userEntGrab[id]=-1;
		return PLUGIN_CONTINUE
	}
	
	if( !pev_valid(userEntGrab[id]) || userEntGrab[id] == -1 )
		return PLUGIN_CONTINUE
		
	//entity_set_int(userEntGrab[id], EV_INT_solid, SOLID_BBOX)
	if( !IsTeleport(userEntGrab[id]) )
		entity_set_int(userEntGrab[id], EV_INT_iuser1, 0)
	else entity_set_int(userEntGrab[id], EV_INT_iuser3, 0)
	userEntGrab[id]=-1;
	return 1;
}
public moveGrabbedEnt(id)
{
	static iAiming[3]
	static iLook[3]
	static Float:fAiming[3]
	static Float:fLook[3]
	
	get_user_origin(id, iAiming, 1)
	get_user_origin(id, iLook, 3 )
	IVecFVec(iAiming, fAiming)
	IVecFVec(iLook, fLook)
	
	static Float:fOrigin[3]
	static Float:fVector[3]
	static Float:fLength;
	
	fLength = get_distance_f(fLook, fAiming);	
	
	if(fLength == 0.0) 
		fLength = 1.0;
	
	fVector[0] = fLook[0]-fAiming[0]
	fVector[1] = fLook[1]-fAiming[1]
	fVector[2] = fLook[2]-fAiming[2]
	
	fOrigin[0] = ( fAiming[0] + fVector[0] * userLength[id]/fLength) + userEntOffset[id][0]
	fOrigin[1] = ( fAiming[1] + fVector[1] * userLength[id]/fLength) + userEntOffset[id][1]
	fOrigin[2] = ( fAiming[2] + fVector[2] * userLength[id]/fLength) + userEntOffset[id][2]
	fOrigin[2] = float(floatround(fOrigin[2],  floatround_floor))
	
	moveEnt(id, userEntGrab[id], fOrigin )
}
public moveEnt(id, ent, Float:move_to[3])
{
	if( !IsBlock(ent) ){	
		userEntGrab[id]=-1;
		return PLUGIN_CONTINUE;
	}
	if ( userSnap[id] ) 
		DoSnapping(id, ent, move_to);
	entity_set_origin(ent, move_to);		
	return PLUGIN_CONTINUE
}
public DoSnapping(id, ent, Float:move_to[3])
{
	new traceline;
	new closest_trace;
	new block_face;
	new Float:snap_size;
	new Float:v_return[3];
	new Float:dist;
	new Float:old_dist;
	new Float:trace_start[3];
	new Float:trace_end[3];
	new Float:size_min[3];
	new Float:size_max[3];
	
	entity_get_vector(ent, EV_VEC_mins, size_min);
	entity_get_vector(ent, EV_VEC_maxs, size_max);
	
	snap_size =userSnapDist[id]+10.0;
	old_dist = 9999.9;
	closest_trace = 0;
	for ( new i = 0; i < 6; ++i )
	{
		trace_start = move_to;
		
		switch ( i )
		{
			case 0: trace_start[0] += size_min[0];
			case 1: trace_start[0] += size_max[0];
			case 2: trace_start[1] += size_min[1];
			case 3: trace_start[1] += size_max[1];
			case 4: trace_start[2] += size_min[2];
			case 5: trace_start[2] += size_max[2];
		}
		
		trace_end = trace_start;
		
		switch ( i )
		{
			case 0: trace_end[0] -= snap_size;
			case 1: trace_end[0] += snap_size;
			case 2: trace_end[1] -= snap_size;
			case 3: trace_end[1] += snap_size;
			case 4: trace_end[2] -= snap_size;
			case 5: trace_end[2] += snap_size;
		}
		
		traceline = trace_line(ent, trace_start, trace_end, v_return);
		if ( IsBlock(traceline) )
		{
			dist = get_distance_f(trace_start, v_return);
			if ( dist < old_dist )
			{
				closest_trace = traceline;
				old_dist = dist;
				
				block_face = i;
			}
		}
	}
	
	if ( !is_valid_ent(closest_trace) ) return PLUGIN_HANDLED;
	
	static Float:trace_origin[3];
	static Float:trace_size_min[3];
	static Float:trace_size_max[3];
	
	entity_get_vector(closest_trace, EV_VEC_origin, trace_origin);
	entity_get_vector(closest_trace, EV_VEC_mins, trace_size_min);
	entity_get_vector(closest_trace, EV_VEC_maxs, trace_size_max);
	
	move_to = trace_origin;
	
	if ( block_face == 0 ) move_to[0] += ( trace_size_max[0] + size_max[0] ) + userSnapDist[id];
	if ( block_face == 1 ) move_to[0] += ( trace_size_min[0] + size_min[0] ) - userSnapDist[id];
	if ( block_face == 2 ) move_to[1] += ( trace_size_max[1] + size_max[1] ) + userSnapDist[id];
	if ( block_face == 3 ) move_to[1] += ( trace_size_min[1] + size_min[1] ) - userSnapDist[id];
	if ( block_face == 4 ) move_to[2] += ( trace_size_max[2] + size_max[2] ) + userSnapDist[id];
	if ( block_face == 5 ) move_to[2] += ( trace_size_min[2] + size_min[2] ) - userSnapDist[id];
	if( userInteligent[id] > 0){
		if( 	userInteligent[id]==1 || 
			( entity_get_int(ent, EV_INT_skin) == entity_get_int(closest_trace, EV_INT_skin) && userInteligent[id]==2 ) || 
			( entity_get_int(ent, EV_INT_body) == entity_get_int(closest_trace, EV_INT_body) && userInteligent[id]==3 ) 
		){
			setSizeAngles(ent, entity_get_int(ent, EV_INT_skin), entity_get_int(closest_trace, EV_INT_iuser3), Float:{ 0.0 , 0.0, 0.0 })
		}
	}
	return closest_trace;
}
SetLines(id, ent, type = 1)
{
	if(!pev_valid(ent))
		return;
	if(type)
	{
			/*gColor[id][0] = random_num(155, 255);
			gColor[id][1] = random_num(155, 255);
			gColor[id][2] = random_num(155, 255);*/
		
		gColor[id][0] = 255
		gColor[id][1] = 255
		gColor[id][2] = 255
		
		gWidth[id] = 20
	}
	else
	{
		gColor[id][0] = 255;
		gColor[id][1] = 55;
		gColor[id][2] = 0;
		gWidth[id] = 5;
	}
	new Float:fMins[3], Float:fMaxs[3];
	pev(ent, pev_absmin, fMins);
	pev(ent, pev_absmax, fMaxs);
		
	_Create_Line( id, fMaxs[0], fMaxs[1], fMaxs[2], fMaxs[0], fMaxs[1], fMins[2] );
	_Create_Line( id, fMins[0], fMaxs[1], fMaxs[2], fMins[0], fMaxs[1], fMins[2] );
	_Create_Line( id, fMaxs[0], fMins[1], fMaxs[2], fMaxs[0], fMins[1], fMins[2] );
	_Create_Line( id, fMins[0], fMins[1], fMaxs[2], fMins[0], fMins[1], fMins[2] );
	
	_Create_Line( id, fMaxs[0], fMaxs[1], fMaxs[2], fMins[0], fMaxs[1], fMaxs[2] );
	_Create_Line( id, fMaxs[0], fMaxs[1], fMins[2], fMins[0], fMaxs[1], fMins[2] );
	_Create_Line( id, fMaxs[0], fMins[1], fMaxs[2], fMins[0], fMins[1], fMaxs[2] );
	_Create_Line( id, fMaxs[0], fMins[1], fMins[2], fMins[0], fMins[1], fMins[2] );
	
	_Create_Line( id, fMaxs[0], fMaxs[1], fMaxs[2], fMaxs[0], fMins[1], fMaxs[2] );
	_Create_Line( id, fMins[0], fMaxs[1], fMaxs[2], fMins[0], fMins[1], fMaxs[2] );
	_Create_Line( id, fMaxs[0], fMaxs[1], fMins[2], fMaxs[0], fMins[1], fMins[2] );
	_Create_Line( id, fMins[0], fMaxs[1], fMins[2], fMins[0], fMins[1], fMins[2] );
	
}

_Create_Line(id, Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2)
{
	new Float:start[3];
	start[0] = x1;
	start[1] = y1;
	start[2] = z1;
	
	new Float:stop[3];
	stop[0] = x2;
	stop[1] = y2;
	stop[2] = z2;
	
	Create_Line(id, start, stop);
}

Create_Line(id, Float:start[], Float:stop[])
{
	message_begin(MSG_ONE, SVC_TEMPENTITY, {0,0,0}, id);
	write_byte(TE_BEAMPOINTS);
	engfunc(EngFunc_WriteCoord, start[0]);
	engfunc(EngFunc_WriteCoord, start[1]);
	engfunc(EngFunc_WriteCoord, start[2]);
	engfunc(EngFunc_WriteCoord, stop[0]);
	engfunc(EngFunc_WriteCoord, stop[1]);
	engfunc(EngFunc_WriteCoord, stop[2]);
	//write_short(sprite_white);
	switch(random_num(1,6)){
		case 1:{
			write_short(line_green);
		}
		case 2:{
			write_short(line_yellow);
		}
		case 3:{
			write_short(line_red);
		}
		case 4:{
			write_short(line_pink);
		}
		case 5:{
			write_short(line_orange);
		}
		case 6:{
			write_short(line_blue);
		}
	}
	write_byte(1);
	write_byte(5);
	write_byte((gWidth[id] == 20) ? 10 : 1); // Life
	write_byte(gWidth[id]);	// Width
	write_byte(0);
	write_byte(gColor[id][0]);
	write_byte(gColor[id][1]);
	write_byte(gColor[id][2]);         
	write_byte(255);
	write_byte(5);
	message_end();
}
/*public drawBoxModel(id, ent){
	new Float:fOrigin[3]
	new Float:fMaxs[3], Float:fMins[3]	
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	entity_get_vector(ent, EV_VEC_mins, fMins)
	entity_get_vector(ent, EV_VEC_maxs, fMaxs)
	
	new s[12][6]={
		{1,1,1,1,-1,-1},
		{1,1,1,-1,1,-1},
		{1,-1,1,1,1,-1},
		{-1,1,1,1,1,-1},
		{1,1,-1,1,-1,1},
		{1,1,-1,-1,1,1},
		{1,-1,-1,1,1,1},
		{-1,1,-1,1,1,1},
		
		{1,1,-1,-1,-1,-1},
		
		{-1,-1,-1,1,1,-1},
		
		{1,-1,-1,-1,1,-1},
		
		{-1,1,-1,1,-1,-1}
		
	}
	new Float:Dist=1.5;
	new Float:fOriginTempStart[3]
	new Float:fOriginTempEnd[3]
	
	for( new i = 0; i <12;i ++ ){
		fOriginTempStart[0]=fOrigin[0]+((fMins[0]-Dist)*s[i][0])
		fOriginTempStart[1]=fOrigin[1]+((fMins[1]-Dist)*s[i][1])
		fOriginTempStart[2]=fOrigin[2]+((fMins[2]-Dist)*s[i][2])
		fOriginTempEnd[0]=fOrigin[0]+((fMaxs[0]+Dist)*s[i][3])
		fOriginTempEnd[1]=fOrigin[1]+((fMaxs[1]+Dist)*s[i][4])
		fOriginTempEnd[2]=fOrigin[2]+((fMaxs[2]+Dist)*s[i][5])
		drawLine(id, fOriginTempStart, fOriginTempEnd)
	}
	
}*/
public drawLine(id, Float:fOriginStart[3], Float:fOriginEnd[3]){
	message_begin(MSG_ONE,SVC_TEMPENTITY, _,id) 
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord,fOriginStart[0])
	engfunc(EngFunc_WriteCoord,fOriginStart[1])
	engfunc(EngFunc_WriteCoord,fOriginStart[2])
	engfunc(EngFunc_WriteCoord,fOriginEnd[0])
	engfunc(EngFunc_WriteCoord,fOriginEnd[1])
	engfunc(EngFunc_WriteCoord,fOriginEnd[2])
	write_short(beam_spr)
	write_byte(0)
	write_byte(0)
	write_byte(20) //life 
	write_byte(15) //width
	write_byte(1)	//amplitude
	write_byte(random(255))
	write_byte(random(255))
	write_byte(random(255))
	write_byte(255)
	write_byte(255)
	message_end()
	
	message_begin(MSG_ONE,SVC_TEMPENTITY, _,id) 
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord,fOriginStart[0])
	engfunc(EngFunc_WriteCoord,fOriginStart[1])
	engfunc(EngFunc_WriteCoord,fOriginStart[2])
	engfunc(EngFunc_WriteCoord,fOriginEnd[0])
	engfunc(EngFunc_WriteCoord,fOriginEnd[1])
	engfunc(EngFunc_WriteCoord,fOriginEnd[2])
	write_short(beam_spr)
	write_byte(0)
	write_byte(0)
	write_byte(20) //life 
	write_byte(5) //width
	write_byte(0)	//amplitude
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	write_byte(255)
	message_end()
	
}
public SaveBlocks(id, type){
	setLevel()
	new ent;
	new file
	new data[356]
	
	new blockType
	new blockSize
	new blockRotation
	new blockAlpha
	new blockRendering
	new Float:fOrigin[3]
	new Float:fOriginTarget[3]
	new Float:fColor[3]
	
	new Float:fAngles[3];
	
	
	new blockCount=0;
	new teleCount=0;
	new year,month,day
	new hour,minute, seconds
	date(year, month, day)
	time(hour, minute, seconds)
	new addTail[37]
	new blockPropertiesSave[PROPERTIES*8], iLen=0
	format(addTail, sizeof(addTail), "%d-%d-%d-%d-%d-%d.%s", year, month, day, hour, minute, seconds, szFolderName)
	if( type == 1 || type == 2 ){
		add(pathFileBlocksBackUp,sizeof(pathFileBlocksBackUp), addTail, sizeof(addTail))
		ColorChat(0, TEAM_COLOR, "[BM]^x01 %s Backup:^x04 %s", type==2?"Automatic":"", addTail)
		file = fopen(pathFileBlocksBackUp, "wt")
	}else file = fopen(pathFileBlocks, "wt")
		
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( !wrong ){
			if( random(3) == 1 )
				continue
		}
		blockType =  entity_get_int(ent, EV_INT_body)
		blockSize = entity_get_int(ent, EV_INT_skin)
		blockRotation = entity_get_int(ent, EV_INT_iuser3 )
		blockAlpha = entity_get_int(ent, EV_INT_iuser4 )		
		if( task_exists(ent+TASK_BHOP) ) 
			blockAlpha+=130;
		blockRendering = entity_get_edict(ent, EV_ENT_euser1 )		
		entity_get_vector(ent, EV_VEC_rendercolor, fColor)	
		
		
		entity_get_vector(ent, EV_VEC_origin,fOrigin)
		entity_get_vector(ent, EV_VEC_angles,fAngles)
		
		iLen=0;
		format(blockPropertiesSave, sizeof(blockPropertiesSave), "")
		for( new i = 0; i < PROPERTIES; i ++ ){
			iLen += format( blockPropertiesSave[iLen], sizeof(blockPropertiesSave)-iLen-1, "%0.2f%s", getParamBlock(ent,i), i == PROPERTIES-1?"":"_" )
		}
		
		formatex(data, sizeof(data), "%d %f %f %f %f %f %f %d %d %d %d %d %d %d %s %d %d %d^n",
			blockType, fOrigin[0], fOrigin[1], fOrigin[2], fAngles[0], fAngles[1], fAngles[2], blockSize, blockRotation, blockAlpha, blockRendering, 
			floatround(fColor[0]), floatround(fColor[1]), floatround(fColor[2]), 
			blockPropertiesSave, getEditBlock(ent,0), getEditBlock(ent,1), getEditBlock(ent,2))
		
		fputs(file, data);
		blockCount++;
	}	
	fclose(file);
	if( type == 1 || type == 2){
		
		add(pathFileTeleBackUp,sizeof(pathFileBlocksBackUp), addTail, sizeof(addTail))
		file = fopen(pathFileTeleBackUp, "wt")
	}else file = fopen(pathFileTele, "wt")
	while ( ( ent = find_ent_by_class(ent, szTeleClassName) ) ){
		iLen=0;
		format(blockPropertiesSave,sizeof(blockPropertiesSave), "")
		if( !IsTeleport(ent) || !IsTeleport(entity_get_int(ent, EV_INT_iuser1) ) )
			continue;
			
		if( entity_get_int(ent, EV_INT_iuser2) == 1 )
			continue;
			
		entity_get_vector(ent, EV_VEC_origin,fOrigin)
		entity_get_vector(entity_get_int(ent, EV_INT_iuser1), EV_VEC_origin,fOriginTarget)
		
		for( new i = 0; i < PROPERTIESTELE; i ++ ){
			iLen += format( blockPropertiesSave[iLen], sizeof(blockPropertiesSave)-iLen-1, "%0.2f%s", getParamBlock(ent,i), i == PROPERTIES-1?"":"_" )
		}		
		
		formatex(data, sizeof(data), "%d %d %f %f %f %f %f %f %s^n", \
			entity_get_int(ent, EV_INT_iuser1), entity_get_int(ent, EV_INT_iuser2), fOrigin[0], fOrigin[1], fOrigin[2], fOriginTarget[0], fOriginTarget[1], fOriginTarget[2], blockPropertiesSave)
		
		fputs(file, data);
		teleCount++;
		
	}
	fclose(file);
	if( type == 0 ){
		new name[33]
		get_user_name(id, name, 32 )
		ColorChat(0, TEAM_COLOR, "[BM]^x01 Player^x04 %s^x01 saved^x04 %d^x01 blocks and^x04 %d^x01 teleports template:^x04 %s", name, blockCount, teleCount, actualStyle) 
	}
}
/*public LoadBlocks(id){
	setLevel()
	new ent;
	new file
	new data[256]
	
	new blockType[3]
	new blockSize[2]
	new blockRotation[2]
	new blockAlpha[4]
	new blockRendering[2]
	new blockColorRed[5]
	new blockColorGreen[5]
	new blockColorBlue[5]
	new originX[17]
	new originY[17]
	new originZ[17]
	new originTargetX[17]
	new originTargetY[17]
	new originTargetZ[17]
	new prop[21][10]
	new Float:fColor[3]
	new Float:fOrigin[3]
	new Float:fOriginTarget[3]
	new getEdit[3][5]
	new blockCount=0;
	file = fopen(pathFileBlocks, "rt")	
	while ( !feof(file) ){
		fgets(file, data, charsmax(data));
		parse(data,
			blockType, sizeof(blockType),
			blockSize, sizeof(blockSize),
			blockRotation, sizeof(blockRotation),
			blockAlpha, sizeof(blockAlpha),
			blockRendering, sizeof(blockRendering),
			blockColorRed, sizeof(blockColorRed),
			blockColorGreen, sizeof(blockColorGreen),
			blockColorBlue, sizeof(blockColorBlue),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			prop[0], sizeof(prop[]),
			prop[1], sizeof(prop[]),
			prop[2], sizeof(prop[]),
			prop[3], sizeof(prop[]),
			prop[4], sizeof(prop[]),
			prop[5], sizeof(prop[]),
			prop[6], sizeof(prop[]),
			prop[7], sizeof(prop[]),
			prop[8], sizeof(prop[]),
			prop[9], sizeof(prop[]),
			prop[10], sizeof(prop[]),
			prop[11], sizeof(prop[]),
			prop[12], sizeof(prop[]),
			prop[13], sizeof(prop[]),
			prop[14], sizeof(prop[]),
			prop[15], sizeof(prop[]),
			prop[16], sizeof(prop[]),
			prop[17], sizeof(prop[]),
			prop[18], sizeof(prop[]),
			prop[19], sizeof(prop[]),
			prop[20], sizeof(prop[]),
			getEdit[0], sizeof(getEdit[]),
			getEdit[1], sizeof(getEdit[]),
			getEdit[2], sizeof(getEdit[])
			
		);
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		ent = createBlock(str_to_num(blockType), fOrigin, str_to_num(blockSize), str_to_num(blockRotation))
		entity_set_int(ent, EV_INT_iuser4, str_to_num(blockAlpha))
		entity_set_edict(ent, EV_ENT_euser1, str_to_num(blockRendering))
		fColor[0]=str_to_float(blockColorRed)
		fColor[1]=str_to_float(blockColorGreen)
		fColor[2]=str_to_float(blockColorBlue)
		entity_set_vector(ent, EV_VEC_rendercolor, fColor)
		if( str_to_num(blockType) != GLASS )
			setRenderingBlock(ent)
		for( new i = 0; i < PROPERTIES; i ++ ){
			setParamBlock(ent,i, str_to_float(prop[i]))
			
		}
		setEditBlock(ent, 0, str_to_num(getEdit[0]))
		setEditBlock(ent, 1, str_to_num(getEdit[1]))
		setEditBlock(ent, 2, str_to_num(getEdit[2]))
		blockCount++;
	}
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)	
	fclose(file);
	new target=0;
	file = fopen(pathFileTele, "rt")	
	while ( !feof(file) ){
		fgets(file, data, charsmax(data));
		parse(data,
			blockType, sizeof(blockType),
			blockSize, sizeof(blockSize),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			originTargetX, sizeof(originTargetX),
			originTargetY, sizeof(originTargetY),
			originTargetZ, sizeof(originTargetZ),
			prop[0], sizeof(prop[]),
			prop[1], sizeof(prop[]),
			prop[2], sizeof(prop[]),
			prop[3], sizeof(prop[]),
			prop[4], sizeof(prop[]),
			prop[5], sizeof(prop[]),
			prop[6], sizeof(prop[]),
			prop[7], sizeof(prop[]),
			prop[8], sizeof(prop[])
		);
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		fOriginTarget[0]=str_to_float(originTargetX)
		fOriginTarget[1]=str_to_float(originTargetY)
		fOriginTarget[2]=str_to_float(originTargetZ)
		ent = createTeleport(fOrigin, 0, 0)
		target = createTeleport(fOriginTarget, ent, 1)
		entity_set_int(ent, EV_INT_iuser1, target)
		
		for( new i = 0; i < 9; i ++ ){
			setParamBlock(ent,i, str_to_float(prop[i]))
		}
		
		
		blockCount++;
	}
	if( pev_valid(target) && IsBlock(target) )
		remove_entity(target)
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)
	fclose(file);
	
	refreshCamp()
}

*/
public LoadBlocks(id){
	
	setLevel()
	new ent;
	new file
	new data[356]
	
	new blockType[3]
	new blockSize[2]
	new blockRotation[2]
	new blockAlpha[4]
	new blockRendering[2]
	new blockColorRed[5]
	new blockColorGreen[5]
	new blockColorBlue[5]
	new originX[17]
	new originY[17]
	new originZ[17]
	new originTargetX[17]
	new originTargetY[17]
	new originTargetZ[17]
	new Float:fColor[3]
	new Float:fOrigin[3]
	new Float:fOriginTarget[3]
	new getEdit[3][5]
	new blockCount=0;
	
	new anglesX[17];
	new anglesY[17];
	new anglesZ[17];
	
	new Float:angles[3];
	
	new blockPropertiesSave[PROPERTIES*8]
	new blockProperties[PROPERTIES][8]
	
	file = fopen(pathFileBlocks, "rt")	
	while ( !feof(file) ){
		if( !wrong ){
			if( random(3) == 1 )
				continue
		}
		fgets(file, data, charsmax(data));
		
		new iNum = parse(data,
			blockType, sizeof(blockType),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			anglesX, sizeof(anglesX),
			anglesY, sizeof(anglesY),
			anglesZ, sizeof(anglesZ),
			blockSize, sizeof(blockSize),
			blockRotation, sizeof(blockRotation),
			blockAlpha, sizeof(blockAlpha),
			blockRendering, sizeof(blockRendering),
			blockColorRed, sizeof(blockColorRed),
			blockColorGreen, sizeof(blockColorGreen),
			blockColorBlue, sizeof(blockColorBlue),
			blockPropertiesSave, sizeof(blockPropertiesSave),
			getEdit[0], sizeof(getEdit[]),
			getEdit[1], sizeof(getEdit[]),
			getEdit[2], sizeof(getEdit[])
			
		);		
		
		
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		
		angles[0] = str_to_float(anglesX)
		angles[1] = str_to_float(anglesY)
		angles[2] = str_to_float(anglesZ)
		
		
		ent = createBlock(str_to_num(blockType), fOrigin, str_to_num(blockSize), str_to_num(blockRotation), angles)
		entity_set_int(ent, EV_INT_iuser4, str_to_num(blockAlpha))
		entity_set_edict(ent, EV_ENT_euser1, str_to_num(blockRendering))
		fColor[0]=str_to_float(blockColorRed)
		fColor[1]=str_to_float(blockColorGreen)
		fColor[2]=str_to_float(blockColorBlue)
		entity_set_vector(ent, EV_VEC_rendercolor, fColor)
		if( str_to_num(blockType) != GLASS )
			setRenderingBlock(ent)
			
		//client_print(id, print_console, "[Numbers: %d]: [%s]", num,originX)
		explode(blockPropertiesSave, '_', blockProperties, PROPERTIES, sizeof(blockProperties[])) 
		for( new i = 0; i < PROPERTIES; i ++ ){			
			setParamBlock(ent,i, str_to_float(blockProperties[i]))
			if(getParamBlock(ent,23) == 1.0){
				createsprbhop(ent)
			}
		}
		setEditBlock(ent, 0, str_to_num(getEdit[0]))
		setEditBlock(ent, 1, str_to_num(getEdit[1]))
		setEditBlock(ent, 2, str_to_num(getEdit[2]))
		
		if( iNum < 15 )			
			setDefaultParam(ent)
		blockCount++;
	}
	
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)	
		
	fclose(file);
	
	new target=0;
	file = fopen(pathFileTele, "rt")	
	while ( !feof(file) ){
		format(blockPropertiesSave, sizeof(blockPropertiesSave), "")
		fgets(file, data, charsmax(data));
		parse(data,
			blockType, sizeof(blockType),
			blockSize, sizeof(blockSize),
			originX, sizeof(originX),
			originY, sizeof(originY),
			originZ, sizeof(originZ),
			originTargetX, sizeof(originTargetX),
			originTargetY, sizeof(originTargetY),
			originTargetZ, sizeof(originTargetZ),			
			blockPropertiesSave, sizeof(blockPropertiesSave)
		);
		fOrigin[0]=str_to_float(originX)
		fOrigin[1]=str_to_float(originY)
		fOrigin[2]=str_to_float(originZ)
		fOriginTarget[0]=str_to_float(originTargetX)
		fOriginTarget[1]=str_to_float(originTargetY)
		fOriginTarget[2]=str_to_float(originTargetZ)
		ent = createTeleport(fOrigin, 0, 0)
		target = createTeleport(fOriginTarget, ent, 1)
		entity_set_int(ent, EV_INT_iuser1, target)
		explode(blockPropertiesSave, '_', blockProperties, PROPERTIESTELE, sizeof(blockProperties[])) 
		for( new i = 0; i < PROPERTIESTELE; i ++ ){			
			setParamBlock(ent,i, str_to_float(blockProperties[i]))	
			setParamBlock(target,i, str_to_float(blockProperties[i]))
			ustawkolor(ent);
			ustawkolor(target);
		}
		
		
		blockCount++;
	}
	if( pev_valid(target) && IsBlock(target) )
		remove_entity(target)
	if( pev_valid(ent) && IsBlock(ent) )
		remove_entity(ent)
	fclose(file);
	refreshCamp()
}
stock explode(const string[],const character,output[][],const maxs,const maxlen){

	new 	iDo = 0,
		len = strlen(string),
		oLen = 0;

	do{
		oLen += (1+copyc(output[iDo++],maxlen,string[oLen],character))
	}while(oLen < len && iDo < maxs)
}
public setCampAchived(id,camp){
	for( new i = 0;i<sizeof(userCampAchived[]);i ++ ){
		if( userCampAchived[id][i]==-1){
			userCampAchived[id][i]=camp;
			return true;
		}
	}
	return false
}
public campAchived(id,camp){
	for( new i = 0; i<sizeof(userCampAchived[]);i ++ ){
		if( userCampAchived[id][i]==camp)
			return true;
	}
	return false
}
public resetCampAchived(id){
	for( new i = 0; i<sizeof(userCampAchived[]);i ++ ){
		userCampAchived[id][i]=-1
	}
}

public setUsed(id,ent){
	for( new i = 0;i<sizeof(userBlockUsed[]);i ++ ){
		if( userBlockUsed[id][i]==-1){
			userBlockUsed[id][i]=ent;
			return true;
		}
	}
	return false
}
public blockUsed(id,ent){
	for( new i = 0; i<sizeof(userBlockUsed[]);i ++ ){
		if( userBlockUsed[id][i]==ent)
			return true;
	}
	return false
}
public resetUsedBlock(id){
	for( new i = 0; i<sizeof(userBlockUsed[]);i ++ ){
		userBlockUsed[id][i]=-1
	}
}
public resetBlockData(ent){
	
	for( new i = 0; i < PROPERTIES; i ++ ){
		setParamBlock(ent, i, 0.0)
	}
}
public setDefaultParam(ent){
	if( !IsBlock(ent) )
		return 0;
	new type =  entity_get_int(ent, EV_INT_body)
	if( !IsTeleport(ent) ){
		
				
		
		for( new i = 2; i < sizeof(blocksProperties[]); i ++ ){
			new param = str_to_num(blocksProperties[type][i])
			if( param == -1 )
				break;
			
			
			setParamBlock(ent, param, str_to_float(defaultParamBlocks[type][i-2]))
		}
	}else{
		for( new i = 0; i < sizeof(propertiesTele[]); i ++ ){
			setParamBlock(ent, i, str_to_float(propertiesTele[i][2]))
		}
	}
	
	return 1;
}
public getEditBlock(ent,param){
	if( IsTeleport(ent) || !IsBlock(ent) )
		return 0;
	return entity_get_edict(ent,EV_ENT_euser2+param)
}
public setEditBlock(ent,param, value){
	if( !IsBlock(ent) )
		return PLUGIN_CONTINUE
	entity_set_edict(ent,EV_ENT_euser2+param, value)	
	return PLUGIN_CONTINUE
}
public Float:getParamBlock(ent, param){	
	return properties[ent][param]
	
}
public setParamBlock(ent, param, Float:value){	
	properties[ent][param]=value
}
stock bool:getShift(id){
	return ( pev(id,pev_gaitsequence) == 3);
}
public showHud(id){
	id-=TASK_SKILL_HUD
	if(!is_user_connected(id) || !is_user_alive(id))
		return PLUGIN_CONTINUE
	new iCount=0;
	new gTextAdd[45]
	new gText[128]
	format(gText, sizeof(gText),"Your temporary skills:^n")
	for( new i = 0;i<sizeof(userSkills[]);i ++ ){
		
		if( userSkills[id][i][0] > get_gametime() ){
			format(gTextAdd, sizeof(gTextAdd), "%s: %d sec^n", skillsName[i], floatround(userSkills[id][i][0]-get_gametime()))
			add(gText, sizeof(gText), gTextAdd, sizeof(gTextAdd))
			iCount++
		}else if( userSkillsRenew[id][i] ){
			format(gTextAdd, sizeof(gTextAdd), "%s available in %d sec^n", skillsName[i], floatround(userSkills[id][i][1]-get_gametime()))
			add(gText, sizeof(gText), gTextAdd, sizeof(gTextAdd))
			userSkillsRenew[id][i]=false;
			iCount++
		}
	}
	if( iCount > 0 ){
		set_hudmessage(0, 127, 255, -1.0, 0.35, 0, 0.0, 1.0 )
		ShowSyncHudMsg(id, CreateHudSyncObj(), "%s", gText)
		set_task(1.0, "showHud", id+TASK_SKILL_HUD)
	}
		
	return PLUGIN_CONTINUE
}
public showInfoBlock(id,ent){
	if( !is_user_connected(id) )
		return PLUGIN_CONTINUE
		
	new gText[228], iLen
	new Float:fValue=0.0;	
	new type=entity_get_int(ent, EV_INT_body);
	new typeBlock=entity_get_int(ent, EV_INT_body)	
	
	if(IsTeleport(ent) ){
		if(IsTeleport(entity_get_int(ent, EV_INT_iuser1)) ){
			new Float:fOriginStart[3], Float:fOriginEnd[3]
			
			entity_get_vector(ent, EV_VEC_origin, fOriginStart)
			entity_get_vector(entity_get_int(ent, EV_INT_iuser1), EV_VEC_origin, fOriginEnd)
			SetLines(id, ent)
			drawLine(id, fOriginStart, fOriginEnd)
			
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Teleport:^nRange: %0.2f^n", getParamBlock(ent, 0))
			//iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Wybicie: %0.2f^n", getParamBlock(ent, 1))
			//iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Predkosc: %0.2f^n", getParamBlock(ent, 2))
			//iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Obrot:%0.2f^n", getParamBlock(ent, 3))
			
			set_hudmessage(0x0, 0x64, 0xFF, 0.01, 0.24, 0x2, 3.5, 3.5, 0.025, 0.025, 4);
			ShowSyncHudMsg(id,CreateHudSyncObj(), "%s", gText)
			//drawBoxModel(id, ent)
			//drawBoxModel(id,entity_get_int(ent, EV_INT_iuser1))
		}
		
		return PLUGIN_CONTINUE;
	}
	
	
	iLen += format(gText[iLen],sizeof(gText)-iLen-1, "^nBlock: %s^n", blocksProperties[type][0])
	if( getEditBlock(ent, 2) != 0 && getEditBlock(ent, 0) != 0){
		iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Camps points: %d^n", getEditBlock(ent, 2))		
	}
	for( new i = 2; i<sizeof(blocksProperties[]);i ++){	
		if( str_to_num(blocksProperties[type][i]) == -1 )
			break;	
		new param=str_to_num(blocksProperties[type][i])
		if( str_to_num(propertiesName[param][2])==0)
			continue
		fValue=getParamBlock(ent, param)
		if( equal(propertiesName[param][1], "bool" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], fValue==0.0?"No":"Yes")		
		else if( equal(propertiesName[param][1], "weapon" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], floatround(fValue) == -1 ? "Random weapon" : weaponsName[floatround(fValue)])
		else if( equal(propertiesName[param][1], "grenade" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], floatround(fValue) == -1 ? "Random grenade" : grenadesName[floatround(fValue)])
		else if( equal(propertiesName[param][1], "team" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], forWho[floatround(fValue)])	
		else if( equal(propertiesName[param][1], "Coiny" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %s^n", propertiesName[param][0], forCoi[floatround(fValue)])	
		else if( equal(propertiesName[param][1], "int" ) )
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %d^n", propertiesName[param][0], floatround(fValue))	
		else if( typeBlock == GRAVITY ) iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %0.2f^n", propertiesName[param][0], fValue*1000)
		else	iLen += format(gText[iLen],sizeof(gText)-iLen-1, "%s: %0.2f^n", propertiesName[param][0], fValue)
	}
	if(type==MUSIC){
		if( get_gametime() - pev(ent, pev_fuser1) < 22.0 ){				
			iLen += format(gText[iLen],sizeof(gText)-iLen-1, "Music: %s^n", blockMusic[pev(ent, pev_euser4)][1])	
		}
	}
	set_hudmessage(0x0, 0x64, 0xFF, 0.01, 0.24, 0x2, 3.5, 3.5, 0.025, 0.025, 4);
	ShowSyncHudMsg(id,CreateHudSyncObj(), "%s", gText)
	
	if(	typeBlock == SURFP || typeBlock == SURFB || typeBlock == SURFS || typeBlock == SURFT || typeBlock == SURFM || typeBlock == SURFO || typeBlock == SURFL	){
		LinkaNaSurf[id] = false;
		return 0;
	}
	else
	{
		SetLines(id, ent)
	}
	//drawBoxModel(id,ent)
	return PLUGIN_CONTINUE	
}
public bool:isBlockStuck(ent)
{
	//first make sure the entity is valid
	if (IsBlock(ent))
	{
		new content;
		new Float:vOrigin[3];
		new Float:vPoint[3];
		new Float:fSizeMin[3];
		new Float:fSizeMax[3];
		
		//get the size of the block being grabbed
		entity_get_vector(ent, EV_VEC_mins, fSizeMin);
		entity_get_vector(ent, EV_VEC_maxs, fSizeMax);
		
		//get the origin of the block
		entity_get_vector(ent, EV_VEC_origin, vOrigin);
		
		fSizeMin[0] += 1.0;
		fSizeMax[0] -= 1.0;
		fSizeMin[1] += 1.0;
		fSizeMax[1] -= 1.0; 
		fSizeMin[2] += 1.0;
		fSizeMax[2] -= 1.0;
		//decrease the size values of the block
		
		
		//get the contents of the centre of all 6 faces of the block
		for (new i = 0; i < 14; ++i)
		{
			//start by setting the point to the origin of the block (the middle)
			vPoint = vOrigin;
			
			//set the values depending on the loop number
			switch (i)
			{
				//corners
				case 0: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMax[2]; }
				case 1: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMax[2]; }
				case 2: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMax[2]; }
				case 3: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMax[2]; }
				case 4: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMin[2]; }
				case 5: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMax[1]; vPoint[2] += fSizeMin[2]; }
				case 6: { vPoint[0] += fSizeMax[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMin[2]; }
				case 7: { vPoint[0] += fSizeMin[0]; vPoint[1] += fSizeMin[1]; vPoint[2] += fSizeMin[2]; }
				
				//centre of faces
				case 8: { vPoint[0] += fSizeMax[0]; }
				case 9: { vPoint[0] += fSizeMin[0]; }
				case 10: { vPoint[1] += fSizeMax[1]; }
				case 11: { vPoint[1] += fSizeMin[1]; }
				case 12: { vPoint[2] += fSizeMax[2]; }
				case 13: { vPoint[2] += fSizeMin[2]; }
			}
			
			//get the contents of the point on the block
			content = point_contents(vPoint);
			
			//if the point is out in the open
			if (content == CONTENTS_EMPTY || content == 0)
			{
				//block is not stuck
				return false;
			}
		}
	}
	else
	{
		//entity is invalid but don't say its stuck
		return false;
	}
	
	//block is stuck
	return true;
}
public editCamp(id){
	if( checkAcces(id, 3) ){
		return PLUGIN_CONTINUE
	}
	new iMax=0;
	new ent=-1;
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( !IsBlock(ent) || userBlockProperties[id] == ent)
					continue;
		iMax= max( getEditBlock(ent,1), iMax )	
		
	}
	
	new gText[128]
	format(gText, sizeof(gText),"[BM]^n\wNumber of camps:\r %d", iMax) 
	new menu = menu_create(gText, "editCamp_2")
	menu_additem(menu, "Refresh")
	format(gText, sizeof(gText), "Block type:\y %s", typesCampBlock[getEditBlock(userBlockProperties[id],0)>3?0:getEditBlock(userBlockProperties[id],0)] )
	menu_additem(menu, gText)
	
	
	format(gText, sizeof(gText), "Kamps:\y%s %d",getEditBlock(userBlockProperties[id],1)>iMax?"\r(New)":"",getEditBlock(userBlockProperties[id],1) )
	menu_additem(menu, gText)
	format(gText, sizeof(gText), "Camps points:\y %d",getEditBlock(userBlockProperties[id],2) )
	menu_additem(menu, gText)
	menu_additem(menu, "\ySet^n")
	menu_additem(menu, "Reset camps")
	menu_setprop(menu,MPROP_EXITNAME,"Exit")
	menu_display(id,menu,0)
	return PLUGIN_CONTINUE
}
public editCamp_2(id,menu,item){
	if( item == MENU_EXIT){
		makerMain(id)
		return PLUGIN_CONTINUE
	}
	if( userBlockProperties[id] == 0 && item != 0 ){
		editCamp(id)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsBlock(ent) || IsTeleport(ent)){
				editCamp(id)
				return PLUGIN_CONTINUE
			}			
			userBlockProperties[id]=ent
		}
		case 1:{
			setEditBlock(userBlockProperties[id],0,(getEditBlock(userBlockProperties[id],0)+1)%sizeof(typesCampBlock))
			
			userCampSave[id][0]=getEditBlock(userBlockProperties[id],0)
		}	
		case 2:{
			new iMax=0;
			new ent=-1;
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( !IsBlock(ent) || userBlockProperties[id] == ent)
					continue;
				iMax= max( getEditBlock(ent,1), iMax )
				
				
			}
			setEditBlock( userBlockProperties[id], 1,getEditBlock(userBlockProperties[id],1)>iMax?0:getEditBlock(userBlockProperties[id],1)+1)
			
			userCampSave[id][1]=getEditBlock(userBlockProperties[id],1)
			editCamp(id)
		}
		case 3:{
			
			client_cmd(id, "messagemode value")
			userBlockParamChange[id]=-2;
		}
		case 4:{
			
			new ent, body
			get_user_aiming(id, ent, body)
			
			if( !IsBlock(ent) || IsTeleport(ent)){
				editCamp(id)
				return PLUGIN_CONTINUE
			}				
			setEditBlock(ent,0,getEditBlock(userBlockProperties[id],0))
			setEditBlock(ent,1,getEditBlock(userBlockProperties[id],1))
			setEditBlock(ent,2,getEditBlock(userBlockProperties[id],2))
					
			userBlockProperties[id]=ent
			
		}
		case 5:{
			resetCamps(id)
		}
	}
	if( item != 5 )
		editCamp(id)
	return PLUGIN_CONTINUE
}
public refreshCamp(){
	new ent=-1;
	bonusCampNum=0;
	while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
		if( getEditBlock(ent,0) != 3 )
			continue;
		bonusCampId[bonusCampNum]=ent	
		bonusCampNum++
	}
}
public randomCamp(){
	
	if( pev_valid(entBonus) ){
		new szClassName[12]
		pev(entBonus, pev_classname, szClassName, sizeof(szClassName) )
		if( equal(szClassName, "bonusBlock") ){			
			entity_set_origin(entBonus, Float:{8192.0,8192.0,8192.0})
			remove_entity(entBonus)
		}
	}
	if( pev_valid(entBonus) ){
		new szClassName[12]
		if( equal(szClassName, "bhopsprblock") ){	
			entity_set_origin(entbhopspr, Float:{8192.0,8192.0,8192.0})
			remove_entity(entbhopspr)
		}
	}
	if(bonusCampNum>0){
		new randCamp=random(bonusCampNum);
		new idEnt=bonusCampId[randCamp];
		bonusCampRound=getEditBlock(idEnt,1);
		createBonus(idEnt);
	}else{		
		refreshCamp()
	}
}
public createBonus(ent){
	if( !IsBlock(ent) )
		return PLUGIN_CONTINUE
	new bonus = create_entity("info_target" );
	
	if( !pev_valid(bonus) )
		return PLUGIN_CONTINUE
	
	entity_set_string(bonus, EV_SZ_classname,"bonusBlock")	
	entity_set_int(bonus, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(bonus, EV_INT_solid, SOLID_NOT)
	
	entity_set_model(bonus, teleportsSprites[2][0])
	
	entity_set_int(bonus, EV_INT_rendermode, 3);
	entity_set_float(bonus, EV_FL_renderamt, 255.0);
	
	new Float:fOrigin[3]
	pev(ent, pev_origin, fOrigin)
	fOrigin[2] += 32.0;
	entity_set_origin(bonus, fOrigin)
	entBonus=bonus
	return PLUGIN_CONTINUE
}
public createsprbhop(ent){
	if( !IsBlock(ent) )
		return PLUGIN_CONTINUE
	new bhopspr = create_entity("info_target" );
	
	if( !pev_valid(bhopspr) )
		return PLUGIN_CONTINUE
		
	new Float:angles[3]
	
	angles[0] += 90;
	entity_set_string(bhopspr, EV_SZ_classname,	"bhopsprblock")	
	entity_set_int(bhopspr, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(bhopspr, EV_INT_solid, SOLID_NOT)
	entity_set_vector(bhopspr, EV_VEC_angles, angles);
	
	entity_set_model(bhopspr, teleportsSprites[3][0])
	
	entity_set_int(bhopspr, EV_INT_rendermode, 5);
	entity_set_float(bhopspr, EV_FL_renderamt, 255.0);
	
	new Float:fOrigin[3]
	pev(ent, pev_origin, fOrigin)
	fOrigin[2] += 5.0;
	entity_set_origin(bhopspr,	fOrigin)
	entity_set_float(bhopspr,	EV_FL_frame,		0.0 );    
	entity_set_float(bhopspr,	EV_FL_scale,		0.25);
	entity_set_float(bhopspr,	EV_FL_animtime,		get_gametime());
	entity_set_float(bhopspr,	EV_FL_framerate,	1.0);
	entity_set_float(bhopspr,	EV_FL_nextthink,	get_gametime() + 0.1 ); 
	
	entbhopspr=bhopspr
	
	return PLUGIN_CONTINUE
}
public checkAcces(id, minLevel){
	if( !blockMakerAcces )
		return true
	if( userBM[id] < minLevel ){
		ColorChat(id, TEAM_COLOR, "[BM]^x01 You do not have access to this menu!")
		return true;
	}
	return false
}
public playersMenu(id){
	
	if(checkAcces(id,3))
		return PLUGIN_CONTINUE
	new menu=menu_create("[BM]^n\wAdmin menu", "playersMenu_2")
	new gText[128]
	new name[33]
	new x=0
	for( new i = 1; i<33; i++){
		if(!is_user_connected(i))
			continue;
		if( userBM[i] == 3 )
			continue;
		get_user_name(i,name,sizeof(name))
		format(gText, sizeof(gText), "%s - %s%s", name, userBM[i]>0?"\y":"\d", userBM[i]>0?"It has":"Does not have")
		menu_additem(menu, gText)
		userPlayersMenu[x++]=i
	}
	menu_display(id,menu,0)
	
	return PLUGIN_CONTINUE
}
public playersMenu_2(id,menu,item){
	if(item==MENU_EXIT){		
		adminAddition(id)
		return PLUGIN_CONTINUE
	}
	new target=userPlayersMenu[item]
	new name[33]
	new name2[33]
	get_user_name(id,name2,sizeof(name2))
	get_user_name(target,name,sizeof(name))
	if(userBM[target]>0){
		userBM[target]=0
		ColorChat(id, TEAM_COLOR, "[BM]^x01 You remove^x03 BM^x01 to the player:^x03 %s", name)
		ColorChat(target, TEAM_COLOR, "[BM]^x01 Admin^x03 %s^x01 remove to^x03 BM", name2)
	}else{
		userBM[target]=1
		ColorChat(id, TEAM_COLOR, "[BM]^x01 You gave^x03 BM^x01 to the player:^x03 %s", name)				
		ColorChat(target, TEAM_COLOR, "[BM]^x01 Admin^x03 %s^x01 gave you access to^x03 BM", name2)
	}
	playersMenu(id)
	return PLUGIN_CONTINUE
}
public adminAddition(id){
	new gText[129]
	new menu=menu_create("[BM]^n\wCheckpoint menu", "adminAddition_2")
	menu_additem(menu, "Menu kamps")
	menu_additem(menu, "Save checkpoint")
	format(gText, sizeof(gText), "Auto return: %s", userCheckPoint[id]?"\yYes":"\dNo")
	menu_additem(menu, gText)	
	menu_additem(menu, "Back checkpoint^n")	
	
	menu_additem(menu, "\yAccess\r BM")
	menu_additem(menu, "\yRevive all")
	format(gText, sizeof(gText), "\yGodmode all: %s", GodAll?"\yYes":"\dNo")
	menu_additem(menu, gText)
	if( has_flag(id, "s" ) ){
		format(gText, sizeof(gText), "\yTest blocks: %s", userAdminBlockTest[id]?"\yYes":"\dNo")
		menu_additem(menu, gText)
	}
	menu_display(id,menu,0)
}
public adminAddition_2(id, menu, item ){
	if( item == MENU_EXIT ){
		makerMain(id)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			editCamp(id)
		}
		case 1:{
			entity_get_vector(id, EV_VEC_origin, userSaveLocation[id])
			entity_get_vector(id, EV_VEC_v_angle, userSaveAngles[id])
			adminAddition(id)
		}
		case 2:{
			userCheckPoint[id]=!userCheckPoint[id]
			adminAddition(id)
		}
		case 3:{
			backToCheckPoint(id)
			adminAddition(id)
		}	
		case 4:playersMenu(id)
		case 5:{
			for( new i = 1; i<33; i++){
				if( !is_user_connected(i) )
					continue;
				if(is_user_alive(i))
					continue
				respawnPlayer(i)
			}
			adminAddition(id)
		}
		case 6:{
			GodAll=!GodAll
			for( new i = 1; i<33; i++){
				if( !is_user_connected(i) )
					continue;
				if(!is_user_alive(i))
					continue
				
				set_user_godmode(i, userGodMode[i] ? true : GodAll)		
			}
			adminAddition(id)
		}
		case 7:{
			set_pev(id, pev_movetype, 9)
			userAdminBlockTest[id]=!userAdminBlockTest[id];
			adminAddition(id)
		}
	}
	return PLUGIN_CONTINUE
	
}	
public backToCheckPoint(id){
	if( userSaveLocation[id][0] != 0.0 || userSaveLocation[id][1] != 0.0 || userSaveLocation[id][2] != 0.0 ){				
		entity_set_vector(id, EV_VEC_origin, userSaveLocation[id])
		entity_set_vector(id, EV_VEC_v_angle, userSaveAngles[id])
		entity_set_vector(id, EV_VEC_angles, userSaveAngles[id])
		entity_set_int(id, EV_INT_fixangle, 1)
		entity_set_vector(id, EV_VEC_velocity, Float:{0.0, 0.0, 0.0})
	}
}
public menuSaveAdmin(id){
	new gText[128]
	
	new iNumTele=0
	new ent = find_ent_by_class(-1, szTeleClassName)
	while( ent != 0 ){
		iNumTele++;
		ent=find_ent_by_class(ent, szTeleClassName)
	}
	new iNumBlocks=0
	ent = find_ent_by_class(-1, "blockMaker")
	while( ent != 0 ){
		iNumBlocks++;
		ent=find_ent_by_class(ent, "blockMaker")
	}
	
	format(gText, sizeof(gText), "[BM]^n\wBlocks:\r %d^n\wTeleports:\r %d^n\wTemplate:\r%s", iNumBlocks, iNumTele, actualStyle)
	new menu=menu_create(gText, "menuSaveAdmin_2")
	menu_additem(menu, "Save the blocks")
	menu_additem(menu, "Make a backup")
	menu_additem(menu, "Remove all blocks")
	menu_additem(menu, "Load")
	//if( has_flag(id, "a" ) ){
	format(gText, sizeof(gText), "Template: %s", layoutStyle ? "\ySlow" :"\rNoslow")
	menu_additem(menu, gText)
	//}*/
	format(gText, sizeof(gText), "Auto save: %s",autoSave?"\yON":"\dOFF")
	menu_additem(menu, gText)
	menu_display(id, menu, 0)
}
public menuSaveAdmin_2(id, menu, item){
	if( item == MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			menuSave(id)
		}
		case 1:{
			SaveBlocks(id, 1)
		}
		
		case 2:{
			if( !checkAcces(id, 2) ){
				new ent
				while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
					if( !pev_valid(ent) ){
						continue;
					}	
					remove_entity(ent)
				}
				while ( ( ent = find_ent_by_class(ent, szTeleClassName) ) ){
					if( !pev_valid(ent) ){
						continue;
					}	
					remove_entity(ent)
				}
			}
			
		}	
		case 3:{
			if( !checkAcces(id, 2) ){
				
				menuLoad(id)
			}
		}
		case 4:{
			if( has_flag(id, "s" ) ){
				
				new file=fopen(pathFolder, "wt")				
				fputs(file, layoutStyle ? "noslow" : "slow" );				
				fclose(file)
				layoutStyle=!layoutStyle;
				new name[33]
				get_user_name(id, name, 32)
				ColorChat(id, TEAM_COLOR, "[BM]^x01 %s changed his style of play to^x03 [%s]^x01 template ^x03[%s]", name, layoutStyle ? "Slow" : "Noslow", actualStyle)
			}
			menuSaveAdmin(id)
		}
		case 5:{			
			autoSave=!autoSave
			if( !task_exists(TASK_AUTOSAVE) && autoSave ){
				set_task(0.1, "autoSaveTask" ,TASK_AUTOSAVE)
			}else if( !autoSave  && task_exists(TASK_AUTOSAVE) ){
				remove_task(TASK_AUTOSAVE)
			}
			menuSaveAdmin(id)
		}
	}
	
	return PLUGIN_CONTINUE
}
new Float:tpGVelocity[1024][3];
public teleportThink(ent){
	if( !pev_valid(ent) || !IsTeleport(ent) )
		return 0;
	static Float:fOrigin[3];
	static Float:fOriginPlayer[3]
	static Float:fOriginDestination[3]
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	if( entity_get_int(ent, EV_INT_iuser3) == 0 ){
		if( entity_get_int(ent, EV_INT_iuser2) == 1  ){
			if( !task_exists(ent+TASK_TELEPORT) ) {
				for( new id = 1; id < 33; id ++ )
				{
					if( !is_user_alive(id) || !is_user_connected(id) )
						continue;
						
					entity_get_vector(id, EV_VEC_origin, fOriginPlayer)
					
					if( get_distance_f(fOrigin, fOriginPlayer) > 125.0 ){
						continue;			
					}		
					entity_set_int(ent, EV_INT_solid, SOLID_NOT)
					set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
					break;
				}
			}
		}
		if( entity_get_int(ent, EV_INT_iuser2) == 0  ){
			for( new id = 1; id < 33; id ++ ){			
				if( !is_user_alive(id) || !is_user_connected(id) )
					continue;
						
				entity_get_vector(id, EV_VEC_origin, fOriginPlayer)
				
				if( get_distance_f(fOrigin, fOriginPlayer) < 125.0 ){
					if( !task_exists(ent+TASK_TELEPORT) ){
						entity_set_int(ent, EV_INT_solid, SOLID_NOT)
						set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
					}
				}
				
				if( get_distance_f(fOrigin, fOriginPlayer) > getParamBlock(ent, 0) )
					continue;	
					
				new target= entity_get_int(ent, EV_INT_iuser1);	
				
				if( target == 0 )
					continue
					
				if( !IsTeleport(target) )
					continue
				
				if( !task_exists(target+TASK_TELEPORT) ){
					entity_set_int(target, EV_INT_solid, SOLID_NOT)
					set_task(2.0, "teleportMakeSolid", target+TASK_TELEPORT)
				}
					
					
				new iOrigin[3]
				FVecIVec(fOrigin, iOrigin)
				message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin);
				write_byte(TE_IMPLOSION);
				write_coord(iOrigin[0]);
				write_coord(iOrigin[1]);
				write_coord(iOrigin[2]);
				write_byte(64);		
				write_byte(100);	
				write_byte(6);		
				message_end();
				
				entity_get_vector(target, EV_VEC_origin, fOriginDestination)
				
				new Float:tempVelocity=0.0;
				new Float:fVelocity[3]
				pev(id,pev_velocity,fVelocity)
				fVelocity[2]=floatabs(fVelocity[2]);
				fVelocity[2]+= getParamBlock(ent, 1);
				tempVelocity=fVelocity[2]
					
				new Float:speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
				
				if( getParamBlock(ent, 2) != 0.0 ){
					velocity_by_aim(id,abs(floatround(speed+getParamBlock(ent, 2))),fVelocity)				
					fVelocity[2]+=tempVelocity;
				}
				speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
						
				new Float:fAngles[3]
				if(getParamBlock(ent, 3)!=0.0){
					new Float:radianRotate =(getParamBlock(ent, 3)* 3.14)/180
					
					new Float:ca = floatcos(radianRotate);
					new Float:sa = floatsin(radianRotate);
					
					pev(id, pev_angles, fAngles)				
					fAngles[1]+=getParamBlock(ent, 3);
					set_pev( id, pev_angles, fAngles)
					set_pev( id, pev_v_angle, fAngles)
					set_pev( id, pev_fixangle, 1)
					
					set_pev(id, pev_origin, fOriginDestination)
					
					
					tpVelocity[id][0] = ca*fVelocity[0] - sa*fVelocity[1]
					tpVelocity[id][1] = sa*fVelocity[0] + ca*fVelocity[1]
					
					tpVelocity[id][2] = floatmax(tempVelocity,getParamBlock(ent, 1))
					set_pev(id, pev_velocity, tpVelocity[id])
				
				}else{
					
					set_pev(id, pev_origin, fOriginDestination)
					set_pev(id, pev_velocity, fVelocity)
				}
				
				emit_sound(id, CHAN_WEAPON, soundsNames[0], 1.0, ATTN_NORM, 0, PITCH_NORM)	
				
				killCloseEnemies(id)				
			}
			new szClass[9]
			new Float:fOriginGranade[3];
			
			
			for(new granade = 33; granade < 1024; granade ++){
				
				if(!pev_valid(granade)) continue;
				
				if( granade == 0 )
					continue
				
				pev(granade, pev_classname, szClass, sizeof(szClass) )
			
				if(!equal(szClass, "grenade"))
					continue;
				
				entity_get_vector(granade, EV_VEC_origin, fOriginGranade)
						
				if( get_distance_f(fOrigin, fOriginGranade) > getParamBlock(ent, 0) ) continue;
				new target= entity_get_int(ent, EV_INT_iuser1);	
				if( target == 0 ) continue	
				if( !IsTeleport(target) ) continue
					
				new iOrigin[3]
				FVecIVec(fOrigin, iOrigin)
				message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin);
				write_byte(TE_IMPLOSION);
				write_coord(iOrigin[0]);
				write_coord(iOrigin[1]);
				write_coord(iOrigin[2]);
				write_byte(64);		
				write_byte(100);	
				write_byte(6);		
				message_end();
				
				entity_get_vector(target, EV_VEC_origin, fOriginDestination)
				
				new Float:tempVelocity=0.0;
				new Float:fVelocity[3]
				pev(granade,pev_velocity,fVelocity)
				fVelocity[2]=floatabs(fVelocity[2]);
				fVelocity[2]+= getParamBlock(ent, 1);
				tempVelocity=fVelocity[2]
					
				new Float:speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
				
				if( getParamBlock(ent, 2) != 0.0 ){
					velocity_by_aim(granade,abs(floatround(speed+getParamBlock(ent, 2))),fVelocity)				
					fVelocity[2]+=tempVelocity;
				}
				speed=floatsqroot(floatpower ( fVelocity[0], 2.0 ) + floatpower ( fVelocity[1], 2.0 ))
						
				set_pev(granade, pev_solid, SOLID_NOT)	
					
				new Float:fAngles[3]
				if(getParamBlock(ent, 3)!=0.0){
					new Float:radianRotate =(getParamBlock(ent, 3)* 3.14)/180
					
					new Float:ca = floatcos(radianRotate);
					new Float:sa = floatsin(radianRotate);
					
					pev(granade, pev_angles, fAngles)				
					fAngles[1]+=getParamBlock(ent, 3);
					set_pev( granade, pev_angles, fAngles)
					set_pev( granade, pev_v_angle, fAngles)
					set_pev( granade, pev_fixangle, 1)
					
					set_pev(granade, pev_origin, fOriginDestination)
					
					
					tpGVelocity[granade][0] = ca*fVelocity[0] - sa*fVelocity[1]
					tpGVelocity[granade][1] = sa*fVelocity[0] + ca*fVelocity[1]
					
					tpGVelocity[granade][2] = floatmax(tempVelocity,getParamBlock(ent, 1))
					set_pev(granade, pev_velocity, tpGVelocity[granade])
				
				}else{
					
					set_pev(granade, pev_origin, fOriginDestination)
					set_pev(granade, pev_velocity, fVelocity)
				}
				
				emit_sound(granade, CHAN_WEAPON, soundsNames[0], 1.0, ATTN_NORM, 0, PITCH_NORM)	
				
				
			}
		}
	}
	/*if( !found ){
		if( task_exists(ent+TASK_TELEPORT) )
			remove_task(ent+TASK_TELEPORT)
		
		entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	}*/
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);

	return 1;
}
public speedUpTeleport(id){	
	set_pev(id, pev_velocity, tpVelocity[id])
}

/*
public menuLights(id){
	new menu=menu_create("Light", "menuLights_2")
	menu_additem(menu, "Create a lamp")
	menu_additem(menu, "Remove the lamp")
	menu_additem(menu, "Properties")
	menu_display(id, menu, 0 )
}
public menuLights_2(id,menu,item){
	if( item == MENU_EXIT){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:createLightAim(id)
		case 1:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( IsLight(ent) ){
				deleteBlock(ent)
			}
			
		}
		case 2:{
			new ent, body
			get_user_aiming(id, ent, body)
			if( !IsLight(ent) ){
				menuLights(id)
				return PLUGIN_CONTINUE
			}
			userBlockProperties[id]=ent
			changeRendering(id)
		}
	}
	
	return PLUGIN_CONTINUE
}
public createLightAim(id){	
	new iLook[3]
	new Float:fLook[3]
	get_user_origin(id, iLook, 3)
	IVecFVec(iLook, fLook)	
	fLook[2]+=4.0	
	createLight(fLook, Float:{255.0,255.0,128.0})
}
public createLight(Float:fOrigin[3], Float:Colors[3]){
	new ent = create_entity("env_sprite")
	if( !pev_valid(ent) )
		return -1;
		
	entity_set_string(ent, EV_SZ_classname, szLightClassName)	
	entity_set_int(ent, EV_INT_movetype, MOVETYPE_NONE);	
	entity_set_int(ent, EV_INT_solid, SOLID_BBOX)
	
	entity_set_edict(ent, EV_ENT_euser1, 20)
	entity_set_int(ent, EV_INT_iuser4, 10)
	
	entity_set_vector(ent, EV_VEC_rendercolor, Float:{255.0,255.0,128.0} )
	entity_set_model(ent, "sprites/lightbulb.spr")
	entity_set_float(ent, EV_FL_scale, 0.25)
	entity_set_origin(ent, fOrigin)	
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.1);
	return ent;
}
public lightThink(ent){
	if( !pev_valid(ent) )
		return 0
	
	
	
		
	new Float:fOrigin[3], Float:fOriginPlayer[3], iOrigin[3]
	entity_get_vector(ent, EV_VEC_origin, fOrigin)
	
	if( !task_exists(ent+TASK_TELEPORT) ){
		for( new i =1;i<33();i++){
			if( !is_user_connected(i) || !is_user_alive(i) )
				continue;
			entity_get_vector(i, EV_VEC_origin, fOriginPlayer)	
			if( get_distance_f(fOriginPlayer, fOrigin) > 100 )
				continue;
			if( !task_exists(ent+TASK_TELEPORT) ){
				entity_set_int(ent, EV_INT_solid, SOLID_NOT)
				set_task(2.0, "teleportMakeSolid", ent+TASK_TELEPORT)
				
				break
			}
		}
	}
	
	FVecIVec(fOrigin, iOrigin)
	new Float:fColor[3]
	entity_get_vector(ent, EV_VEC_rendercolor, fColor)
	new radius=entity_get_edict(ent, EV_ENT_euser1)
	new brightness=entity_get_int(ent, EV_INT_iuser4)
	
	message_begin(MSG_PVS, SVC_TEMPENTITY, iOrigin, 0);
	write_byte(TE_DLIGHT)			
	write_coord(iOrigin[0]);	
	write_coord(iOrigin[1]);
	write_coord(iOrigin[2]);			
	write_byte(radius)			

	write_byte(floatround(fColor[0])); 
	write_byte(floatround(fColor[1])); 
	write_byte(floatround(fColor[2])); 
	
	write_byte(1)			
	write_byte(1)			
	message_end()
	entity_set_float(ent, EV_FL_nextthink, get_gametime()+0.01);
	return 1;
}*/
public bool:isInvisible(id){
	if( userSkills[id][1][0] > get_gametime() )
		return true;
	return false;

}
public bool:isSpeed(id){
	if( userSkills[id][2][0] > get_gametime() )
		return true;
	return false;
}
public bool:isFeniks(id){
	if( userSkills[id][4][0] > get_gametime() )
		return true;
	return false;
}
public bool:isSkrzynka(id){
	if( userSkills[id][5][0] > get_gametime() )
		return true;
	return false;
}
public bool:isImmortal(id){
	if( userSkills[id][0][0] > get_gametime() )
		return true;
	return false;
}
public makeTrail(id) {
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(22)	// TE_BEAMFOLLOW
	write_short(id)
	write_short(beam_spr)
	write_byte(10)
	write_byte(8)
	write_byte(255)
	write_byte(150)
	write_byte(0)
	write_byte(255)
	message_end()

}
public killTrail(id){
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(99)	
	write_short(id)
	message_end()
}
public killAccelerate(id){
	if( !is_user_alive(id) || !is_user_connected(id) )
		return PLUGIN_CONTINUE
	killTrail(id)
	if( !isInvisible(id) || !isImmortal(id) ){
		setRendering(0, id, 255, 255, 255, 255)
	}			
	return PLUGIN_CONTINUE
}
stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)

{

    message_begin( MSG_ONE, get_user_msgid("ScreenFade"),{0,0,0},id );
    write_short( duration );
    write_short( holdtime );   
    write_short( fadetype );    
    write_byte ( red );        
    write_byte ( green );       
    write_byte ( blue );    
    write_byte ( alpha );    
    message_end();

}
public resetCamps(id){
	new menu = menu_create("[BM]^n\wDo you really want to reset the camps?", "resetCamps_2")
	menu_additem(menu, "Yes, reset")
	menu_additem(menu, "Don't, quit")	
	menu_display(id, menu, 0)
}	
public resetCamps_2(id, menu, item){
	if( item == MENU_EXIT ){
		menu_destroy(menu)
		return PLUGIN_CONTINUE
	}
	switch(item){
		case 0:{
			new ent=-1;
			while ( ( ent = find_ent_by_class(ent, szBlockClassName) ) ){
				if( !pev_valid(ent) ) 
					continue
				setEditBlock(ent, 0, 0 )
				setEditBlock(ent, 1, 0 )
				setEditBlock(ent, 2, 0 )
			}
			ColorChat(id, TEAM_COLOR, "[BM]^x01 Successfully reset")
		}
	}
	editCamp(id)		
	return PLUGIN_CONTINUE
}
stock displayFade(id,duration,holdtime,fadetype,red,green,blue,alpha){
	if (!is_user_alive(id)) return;
	static msgScreenFade;
	if (!msgScreenFade) msgScreenFade = get_user_msgid("ScreenFade");
	message_begin(MSG_ONE, msgScreenFade, {0, 0, 0}, id);
	write_short(duration); write_short(holdtime); write_short(fadetype); write_byte(red); write_byte(green); write_byte(blue); write_byte(alpha);
	message_end();
}
public fwd_touch(toucher, touched){
	if( !pev_valid(toucher) || !pev_valid(touched) || touched == 0 || toucher == 0 )
		return PLUGIN_CONTINUE
		
	new szClassEnt_1[33], szClassEnt_2[33]
	pev(toucher, pev_classname, szClassEnt_1, sizeof(szClassEnt_1) )
	pev(touched, pev_classname, szClassEnt_2, sizeof(szClassEnt_2) )
	
	
	if(IsBlock(toucher)){
			
		if( equal(szClassEnt_2, "grenade") ){
			if( pev(touched, pev_iuser1) == 0){
				new Float:fVelocity[3]
				pev(touched, pev_velocity, fVelocity)
				fVelocity[0] *= -1;
				fVelocity[1] *= -1;
				fVelocity[2] *= -1;
				set_pev(touched, pev_velocity, fVelocity)
				set_pev(touched, pev_iuser1, 1)
				
			}
		}
	}
	return PLUGIN_CONTINUE
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1045\\ f0\\ fs16 \n\\ par }
*/

Аватар
mharisrazaa
Извън линия
Потребител
Потребител
Мнения: 31
Регистриран на: 15 Дек 2021, 17:15
Местоположение: Pakistan
Се отблагодари: 2 пъти
Обратна връзка:

FATAL ERROR (shutting down): Host_Error: PF_setmodel_I: no precache:

Мнение от mharisrazaa » 27 Дек 2021, 19:23

is this is the solution?

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Поддръжка / Помощ”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта