- #include <amxmodx>  
- #include <amxmisc>  
- #include <fakemeta> 
- #include <engine> 
-   
- // Sprite Index 
- new ls_dot, fire, white, sprSmoke, sprLightning, sprBflare, sprRflare, sprGflare, sprTflare, sprOflare, sprPflare, sprYflare, garbgibs, flare3, sprFlare6, shockwave 
-   
- // Has Sound Index 
- new has_rocket = 0, has_drop = 0 
-   
- new player_fireworks[33] = 0; 
- new bool:allowed_fireworks[33] = false; 
-   
- public check_fireworks(id,mode){ 
- 	new amount; 
- 	if(get_cvar_num("fireworks_enable") == 0) { 
- 		if(!allowed_fireworks[id]) return 0; 
- 		return 1; 
- 	} 
-   
- 	if(mode == 0) { 
- 		if(!access(id,ADMIN_LEVEL_G)) return 0; 
- 		return 1; 
- 	} 
-   
- 	if(mode) { 
- 		if(access(id,ADMIN_LEVEL_G)) amount = get_cvar_num("fireworks_amaxcount") 
- 		else amount = get_cvar_num("fireworks_maxcount") 
-   
- 		if( (player_fireworks[id]) >= amount) return 0; 
- 	} 
-   
- 	return amount; 
- } 
-   
- public check_password(id){ 
- 	new arg[200],password[200] 
- 	read_argv(1,arg,199) 
- 	get_cvar_string("fireworks",password,199) 
- 	trim(password) 
-   
- 	if(equali(arg,password,strlen(password))){ 
- 		allowed_fireworks[id] = true; 
- 		client_print(id,print_chat,"[FIRE] Password Accepted") 
- 	} 
- 	else { 
- 		allowed_fireworks[id] = false; 
- 		client_print(id,print_chat,"[FIRE] Password Denied") 
- 	} 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
-   
- public spawn_shooter(id){ 
- 	if(!check_fireworks(id,0)){ 
- 		client_print(id,print_chat,"[FIRE] You are not allowed to throw shooters.") 
- 		return PLUGIN_HANDLED; 
- 	} 
-   
- 	new arg[30] 
- 	read_argv(1,arg,29) 
- 	new shots = str_to_num(arg) 
- 	if(!shots) shots = 5; 
-   
- 	read_argv(2,arg,29) 
- 	new Float:time2 = floatstr(arg) 
- 	if(time2 == 0.0) time2 = 5.0 
-   
- 	read_argv(3,arg,29) 
- 	new r = str_to_num(arg) 
-   
- 	read_argv(4,arg,29) 
- 	new g = str_to_num(arg) 
-   
- 	read_argv(5,arg,29) 
- 	new b = str_to_num(arg) 
-   
- 	read_argv(6,arg,29) 
- 	new type = read_flags(arg) 
- 	if(!type ) format(arg,29,"abcdefsz") 
-   
- 	shooter_spawn(id,time2,shots,r,g,b,arg) 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
- public shooter_spawn(id,Float:tasktime,shots,r,g,b,effects[]){ 
- 	new Float:Origin[3] 
-   
- 	pev(id,pev_origin,Origin) 
-   
- 	new Ent = create_entity("info_target")  
- 	if (!Ent) return PLUGIN_HANDLED; 
-   
- 	engfunc(EngFunc_SetOrigin,Ent,Origin) 
- 	engfunc(EngFunc_SetModel,Ent,"models/w_rpgammo.mdl") 
- 	entity_set_string(Ent,EV_SZ_target,effects) 
- 	entity_set_string(Ent,EV_SZ_classname,"fireworks_shooter") 
- 	set_pev(Ent,pev_owner,id) 
- 	entity_set_int(Ent, EV_INT_movetype, MOVETYPE_TOSS)  
-   
- 	entity_set_int(Ent,EV_INT_iuser1,shots) 
- 	shots = entity_get_int(Ent,EV_INT_iuser1) 
- 	set_pev(Ent,pev_iuser2,r) 
- 	set_pev(Ent,pev_iuser3,g) 
- 	set_pev(Ent,pev_iuser4,b) 
-   
- 	dllfunc(DLLFunc_Spawn,Ent) 
-   
- 	if (has_drop) emit_sound(Ent, CHAN_WEAPON, "fireworks/weapondrop1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
- 	else emit_sound(Ent, CHAN_WEAPON, "items/weapondrop1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
-   
- 	set_task(tasktime,"shooter_think",Ent,"",0,"a",shots) 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
- public shooter_think(id){ 
- 	new shots,r,g,b, effects[30], Float:origin[3] 
- 	shots = entity_get_int(id,EV_INT_iuser1) 
- 	pev(id,pev_iuser2,r) 
- 	pev(id,pev_iuser3,g) 
- 	pev(id,pev_iuser4,b) 
- 	entity_get_string(id,EV_SZ_target,effects,29) 
-   
- 	pev(id,pev_origin,origin) 
- 	origin[2] += 10 
- 	touch_effect(origin,255,255,255) 
-   
- 	fireworks_spawn(id,"firework_normal",effects,r,g,b) 
- 	shoot_firework(id) 
-   
- 	shots = shots - 1 
- 	if(shots < 1) detonate_shooter(id) 
- 	else set_pev(id,pev_iuser1,shots); 
-   
- 	return 1; 
- } 
-   
- public detonate_shooter(id){ 
- 	explode(id) 
- 	remove_entity(id) 
- 	remove_task(id) 
-   
- 	return 1; 
- } 
-   
- public spawn_firework(id){ 
- 	if(!check_fireworks(id,1)){ 
- 		client_print(id,print_chat,"[FIRE] You are not allowed to throw more fireworks.") 
- 		return PLUGIN_HANDLED; 
- 	} 
- 	new arg[30],type2[30] 
-   
- 	read_argv(0,type2,29) 
- 	if(equali(type2,"firework")) format(type2,29,"firework_normal"); 
-   
- 	read_argv(1,arg,29) 
- 	new r = str_to_num(arg) 
-   
- 	read_argv(2,arg,29) 
- 	new g = str_to_num(arg) 
-   
- 	read_argv(3,arg,29) 
- 	new b = str_to_num(arg) 
-   
- 	read_argv(4,arg,29) 
- 	new type = read_flags(arg) 
- 	if(!type ) format(arg,29,"abcdefsz") 
-   
- 	fireworks_spawn(id,type2,arg,r,g,b) 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
- public fireworks_spawn(id,type[],effects[],r,g,b) { 
- 	new Float:Origin[3] 
- 	new Float:Angles[3] 
-   
- 	Angles[0] = 90.0 
- 	Angles[1] = random_float(0.0,360.0) 
- 	Angles[2] = 0.0 
-   
- 	pev(id,pev_origin,Origin) 
-   
- 	new Float:Mins[3] = {-4.0, -4.0, -1.0} 
- 	new Float:Maxs[3] = {4.0, 4.0, 12.0} 
-   
- 	new Ent = create_entity("info_target")  
- 	if (!Ent) return PLUGIN_HANDLED; 
-   
- 	engfunc(EngFunc_SetOrigin,Ent,Origin) 
- 	engfunc(EngFunc_SetSize,Ent,Mins,Maxs) 
- 	engfunc(EngFunc_SetModel,Ent,"models/rpgrocket.mdl") 
-   
- 	entity_set_string(Ent,EV_SZ_classname,"nrm_fireworks") 
- 	entity_set_string(Ent,EV_SZ_target,effects) 
- 	entity_set_string(Ent,EV_SZ_targetname,type) 
- 	set_pev(Ent,pev_angles,Angles) 
- 	set_pev(Ent,pev_owner,id) 
- 	set_pev(Ent,pev_solid,3) 
- 	set_pev(Ent,pev_movetype,6) 
-   
- 	dllfunc(DLLFunc_Spawn,Ent) 
-   
- 	if(r != 0 || g != 0 || b != 0) client_cmd(id,"speak beep.wav") 
- 	else if (get_cvar_num("fireworks_colortype")) { 
- 		switch(random_num(0,6)) { 
- 			case 0: r = 255 
- 			case 1: g = 255 
- 			case 2: b = 255 
- 			case 3:  
- 			{ 
- 				g = 255 
- 				b = 255 
- 			} 
- 			case 4: 
- 			{ 
- 				r = 255 
- 				b = 255 
- 			} 
- 			case 5:  
- 			{ 
- 				r = 255 
- 				g = 255 
- 			} 
- 			case 6:  
- 			{ 
- 				r = 255 
- 				g = 128 
- 			} 
- 		} 
- 	}  
- 	else  
- 	{ 
- 		r = random_num(0,255) 
- 		g = random_num(0,255) 
- 		b = random_num(0,255) 
- 	} 
- 	set_rendering(Ent,kRenderFxGlowShell,r,g,b,kRenderNormal,20) 
- 	set_pev(Ent,pev_iuser2,r) 
- 	set_pev(Ent,pev_iuser3,g) 
- 	set_pev(Ent,pev_iuser4,b) 
-   
- 	if (has_drop) emit_sound(Ent, CHAN_WEAPON, "fireworks/weapondrop1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
- 	else emit_sound(Ent, CHAN_WEAPON, "items/weapondrop1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
-   
- 	entity_set_float(Ent,EV_FL_nextthink,halflife_time() + 5.0) 
- 	if( (id < 33) && (id > -1) ) player_fireworks[id] += 1; 
-   
- 	return PLUGIN_HANDLED 
- } 
-   
- public shoot_firework(id){ 
- 	detonate_fireworks(id,"firework_rc") 
- 	detonate_fireworks(id,"firework_rv") 
- 	detonate_fireworks(id,"firework_normal") 
- 	fireworks_shoot(id,"nrm_fireworks") 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
- public fireworks_shoot(id,class[]) { 
- 	new ent = find_ent_by_owner(-1,class,id,0); 
- 	if(!ent) return 0; 
-   
- 	while ( ent != 0 )  
- 	{ 
- 		new tname[200] 
- 		entity_get_string(ent,EV_SZ_targetname,tname,199) 
-   
- 		entity_set_string(ent,EV_SZ_classname,tname) 
- 		set_pev(ent,pev_effects,64) 
-   
- 		emit_sound(ent, CHAN_WEAPON, "weapons/rocketfire1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
-   
- 		if (has_rocket) emit_sound(ent, CHAN_VOICE, "fireworks/rocket1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
- 		else emit_sound(ent, CHAN_VOICE, "weapons/rocket1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
-   
- 		new r,g,b 
- 		set_pev(ent,pev_iuser1,get_cvar_num("fireworks_maxlife")) 
- 		r = pev(ent,pev_iuser2) 
- 		g = pev(ent,pev_iuser3) 
- 		b = pev(ent,pev_iuser4) 
- 		set_pev(ent,pev_movetype,5) 
-   
- 		message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
- 		write_byte(22) 
- 		write_short(ent) 
- 		write_short(sprSmoke) 
- 		write_byte(45) 
- 		write_byte(4) 
- 		write_byte(r) 
- 		write_byte(g) 
- 		write_byte(b) 
- 		write_byte(255) 
- 		message_end() 
-   
-  		new Float:vVelocity[3] 
- 		vVelocity[2] = random_float(400.0,1000.0) 
- 		set_pev(ent,pev_velocity,vVelocity) 
-   
- 		entity_set_float(ent,EV_FL_nextthink,halflife_time() + 0.1) 
-   
- 		ent = find_ent_by_owner(ent, class, id, 0); 
- 	} 
- 	return PLUGIN_HANDLED 
- } 
-   
- public detonate_fireworks(id,class[]) { 
- 	new ent = find_ent_by_owner(-1,class,id,0); 
- 	if(!ent) return 0; 
-   
- 	while ( ent != 0 )  
- 	{ 
- 		explode(ent) 
- 		if( (id < 33) && (id > 0) ) attach_view(id,id) 
- 		new ent2 = find_ent_by_owner(ent, class, id, 0); 
- 		remove_entity(ent) 
- 		ent = ent2 
-   
- 	} 
- 	return PLUGIN_HANDLED 
- } 
-   
- public fireworks_think(id){ 
- 	new classname[32], owner 
- 	owner = pev(id,pev_owner) 
- 	entity_get_string(id,EV_SZ_classname,classname,31) 
- 	if(equali(classname,"nrm_fireworks")){ 
- 		set_pev(id,pev_velocity,{0.0,0.0,450.0}) 
- 		entity_set_float(id,EV_FL_nextthink,halflife_time() + 5.0) 
- 	} 
- 	else if(equali(classname,"firework_normal")){ 
- 		new Float:velo[3] 
- 		pev(id,pev_velocity,velo) 
-   
- 		new Float:x = get_cvar_float("fireworks_xvelocity") 
- 		new Float:y = get_cvar_float("fireworks_yvelocity") 
- 		velo[0] += random_float((-1.0*x),x) 
- 		velo[1] += random_float((-1.0*y),y) 
- 		velo[2] += random_float(10.0,200.0) 
- 		set_pev(id,pev_velocity,velo) 
- 		entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.1) 
- 	} 
- 	else if(equali(classname,"firework_rc")){ 
-   
- 		new Float:vOrigin[3] 
- 		new aimvec[3], uorigin[3] 
- 		entity_get_vector(id,EV_VEC_origin,vOrigin) 
- 		get_user_origin(owner,aimvec,3) 
-   
- 		make_dot(aimvec) 
-   
- 		uorigin[0] = floatround(vOrigin[0]) 
- 		uorigin[1] = floatround(vOrigin[1]) 
- 		uorigin[2] = floatround(vOrigin[2]) 
-   
- 		new velocityvec[3],length 
- 		velocityvec[0]=aimvec[0]-uorigin[0]  
- 		velocityvec[1]=aimvec[1]-uorigin[1] 
- 		velocityvec[2]=aimvec[2]-uorigin[2] 
-   
- 		length=sqrt(velocityvec[0]*velocityvec[0]+velocityvec[1]*velocityvec[1]+velocityvec[2]*velocityvec[2]) 
- 		velocityvec[0]=velocityvec[0]*1000/length  
- 		velocityvec[1]=velocityvec[1]*1000/length  
- 		velocityvec[2]=velocityvec[2]*1000/length  
-   
- 		new Float:fl_iNewVelocity[3], iNewVelocity[3] 
- 		iNewVelocity[0] = (velocityvec[0]) 
- 		iNewVelocity[1] = (velocityvec[1]) 
- 		iNewVelocity[2] = (velocityvec[2]) 
-   
- 		fl_iNewVelocity[0] = iNewVelocity[0] + 0.0 
- 		fl_iNewVelocity[1] = iNewVelocity[1] + 0.0 
- 		fl_iNewVelocity[2] = iNewVelocity[2] + 0.0 
- 		entity_set_vector(id, EV_VEC_velocity, fl_iNewVelocity) 
- 		entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.1) 
-   
- 	} 
- 	else if(equali(classname,"firework_rv")){ 
- 		attach_view(owner,id) 
- 		new Float:fl_iNewVelocity[3]  
- 		velocity_by_aim(owner, 750, fl_iNewVelocity) 
- 		entity_set_vector(id, EV_VEC_velocity, fl_iNewVelocity) 
-   
- 		new Float:vAngles[3] 
- 		entity_get_vector(owner, EV_VEC_v_angle, vAngles) 
- 		entity_set_vector(id, EV_VEC_angles, vAngles) 
-   
- 		entity_set_float(id,EV_FL_nextthink,halflife_time() + 0.01) 
- 	} 
- 	return 1; 
- } 
-   
- public fireworks_touch(tid,id){ 
- 	new classname[32] 
- 	entity_get_string(id,EV_SZ_classname,classname,31) 
-   
- 	new Float:origin[3] 
- 	pev(id,pev_origin,origin) 
-   
- 	new r = pev(id,pev_iuser2) 
- 	new g = pev(id,pev_iuser3) 
- 	new b = pev(id,pev_iuser4) 
-   
- 	if(equali(classname,"firework_normal")){ 
- 		explode(id) 
- 		remove_entity(id) 
- 	} 
- 	else if(equali(classname,"firework_rc")){ 
- 		new owner 
- 		owner = pev(id,pev_owner) 
- 		attach_view(owner,owner) 
- 		explode(id) 
- 		remove_entity(id) 
- 	} 
- 	else if(equali(classname,"firework_rv")){ 
- 		new owner 
- 		owner = pev(id,pev_owner) 
- 		attach_view(owner,owner) 
- 		explode(id) 
- 		remove_entity(id) 
- 	} 
- 	else if(equali(classname,"nrm_fireworks")) emit_sound(id,CHAN_ITEM, "fvox/bell.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) 
-   
- 	touch_effect(origin,r,g,b) 
- 	return 1; 
- } 
-   
- public touch_effect(Float:Origin[3],r,g,b){ 
- 	// blast circles 
- 	new origin[3]; 
- 	origin[0] = floatround(Origin[0]) 
- 	origin[1] = floatround(Origin[1]) 
- 	origin[2] = floatround(Origin[2]) 
-   
- 	message_begin( MSG_PAS, SVC_TEMPENTITY, origin ); 
- 	write_byte( 21 ); 
- 	write_coord( origin[0]); 
- 	write_coord( origin[1]); 
- 	write_coord( origin[2] + 16); 
- 	write_coord( origin[0]); 
- 	write_coord( origin[1]); 
- 	write_coord( origin[2] + 16 + 348); // reach damage radius over .3 seconds 
- 	write_short( shockwave ); 
-   
- 	write_byte( 0 ); // startframe 
- 	write_byte( 0 ); // framerate 
- 	write_byte( 3 ); // life 
- 	write_byte( 30 );  // width 
- 	write_byte( 0 );   // noise 
-   
- 	write_byte(r) 
- 	write_byte(g) 
- 	write_byte(b) 
-   
- 	write_byte( 255 ); //brightness 
- 	write_byte( 0 );		// speed 
- 	message_end(); 
-   
- 	message_begin( MSG_PAS, SVC_TEMPENTITY, origin ); 
- 	write_byte( 21 ); 
- 	write_coord( origin[0]); 
- 	write_coord( origin[1]); 
- 	write_coord( origin[2] + 16); 
- 	write_coord( origin[0]); 
- 	write_coord( origin[1]); 
- 	write_coord( origin[2] + 16 + ( 384 / 2 )); // reach damage radius over .3 seconds 
- 	write_short( shockwave ); 
-   
- 	write_byte( 0 ); // startframe 
- 	write_byte( 0 ); // framerate 
- 	write_byte( 3 ); // life 
- 	write_byte( 30 );  // width 
- 	write_byte( 0 );   // noise 
-   
- 	write_byte(256-r) 
- 	write_byte(256-g) 
- 	write_byte(256-b) 
-   
- 	write_byte( 255 ); //brightness 
- 	write_byte( 0 );		// speed 
- 	message_end(); 
-   
-   
- 	return 1; 
- } 
-   
- // Explode Function 
- public explode(id) { 
- 	if(!id) return 0; 
- 	new Float:ent_origin2[3] 
- 	pev(id,pev_origin,ent_origin2) 
-   
- 	new owner 
- 	owner = pev(id,pev_owner) 
- 	if( (owner < 33) && (owner > -1) ) player_fireworks[owner]-- 
-   
- 	new ent_origin[3]; 
- 	new multi = get_cvar_num("fireworks_multiplier") 
- 	for(new i; i < 3; i++) ent_origin[i] = floatround(ent_origin2[i]) 
-   
- 	new szType[64],type 
- 	entity_get_string(id,EV_SZ_target,szType,63) 
- 	type = read_flags(szType) 
-   
- 	new r = pev(id,pev_iuser2) 
- 	new g = pev(id,pev_iuser3) 
- 	new b = pev(id,pev_iuser4) 
-   
- 	if (type&(1<<0)) { //a -- Voogru Effect 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte(20) 				// TE_BEAMDISK 
- 		write_coord(ent_origin[0])			// coord coord coord (center position) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_coord(0)			// coord coord coord (axis and radius) 
- 		write_coord(0) 
- 		write_coord(100) 
- 		switch(random_num(0,1)) { 
- 			case 0: write_short(sprFlare6)			// short (sprite index) 
- 			case 1: write_short(sprLightning)			// short (sprite index) 
- 		} 
- 		write_byte(0)				// byte (starting frame) 
- 		write_byte(0)				// byte (frame rate in 0.1's) 
- 		write_byte(50)				// byte (life in 0.1's) 
- 		write_byte(0)				// byte (line width in 0.1's) 
- 		write_byte(150)				// byte (noise amplitude in 0.01's) 
- 		write_byte(r)				// byte,byte,byte (color) 
- 		write_byte(g) 
- 		write_byte(b) 
- 		write_byte(255)				// byte (brightness) 
- 		write_byte(0)				// byte (scroll speed in 0.1's) 
- 		message_end() 
- 	} 
- 	if (type&(1<<1)){ //b -- Flares 
- 		if (get_cvar_num("fireworks_colortype")) { 
- 			message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 			write_byte(15)				// TE_SPRITETRAIL 
- 			write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 			write_coord(ent_origin[1]) 
- 			write_coord(ent_origin[2]-20) 
- 			write_coord(ent_origin[0])			// coord, coord, coord (end) 
- 			write_coord(ent_origin[1]) 
- 			write_coord(ent_origin[2]+20) 
- 			if ((r > 128) && (g < 127) && (b < 127)) write_short(sprRflare) 
- 			else if ((r < 127) && (g > 128) && (b < 127)) write_short(sprGflare) 
- 			else if ((r < 127) && (g < 127) && (b > 128)) write_short(sprBflare) 
- 			else if ((r < 127) && (g > 128) && (b > 128)) write_short(sprTflare) 
- 			else if ((r > 128) && (g < 127) && (b < 200) && (b > 100)) write_short(sprPflare) 
- 			else if ((r > 128) && (g > 128) && (b < 127)) write_short(sprYflare) 
- 			else if ((r > 128) && (g > 100) && (g < 200) && (b < 127))write_short(sprOflare) 
-   
- 			else write_short(sprBflare) 
- 			write_byte(get_cvar_num("fireworks_flare_count"))				// byte (count) 
- 			write_byte(10)				// byte (life in 0.1's) 
- 			write_byte(10)				// byte (scale in 0.1's) 
- 			write_byte(random_num(40,100))		// byte (velocity along vector in 10's) 
- 			write_byte(40)				// byte (randomness of velocity in 10's) 
- 			message_end() 
- 		}else{ 
- 			message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 			write_byte(15)				// TE_SPRITETRAIL 
- 			write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 			write_coord(ent_origin[1]) 
- 			write_coord(ent_origin[2]-20) 
- 			write_coord(ent_origin[0])			// coord, coord, coord (end) 
- 			write_coord(ent_origin[1]) 
- 			write_coord(ent_origin[2]+20) 
- 			if ((r > 128) && (g < 127) && (b < 127)) write_short(sprRflare) 
- 			else if ((r < 127) && (g > 128) && (b < 127)) write_short(sprGflare) 
- 			else if ((r < 127) && (g < 127) && (b > 128)) write_short(sprBflare) 
- 			else if ((r < 127) && (g > 128) && (b > 128)) write_short(sprTflare) 
- 			else if ((r > 128) && (g < 127) && (b < 200) && (b > 100)) write_short(sprPflare) 
- 			else if ((r > 128) && (g > 128) && (b < 127)) write_short(sprYflare) 
- 			else if ((r > 128) && (g > 100) && (g < 200) && (b < 127))write_short(sprOflare) 
- 			else write_short(sprBflare) 
-   
- 			write_byte(get_cvar_num("fireworks_flare_count"))				// byte (count) 
- 			write_byte(2)				// byte (life in 0.1's) 
- 			write_byte(5)				// byte (scale in 0.1's) 
- 			write_byte(random_num(40,100))		// byte (velocity along vector in 10's) 
- 			write_byte(40)				// byte (randomness of velocity in 10's) 
- 			message_end() 
- 		} 
- 	} 
- 	if (type&(1<<2)) { //c -- Falling flares 
- 		new velo = random_num(30,70) 
- 		new spr 
- 		new choosespr = random_num(0,3)  
-   
- 		switch(choosespr) 
- 		{ 
- 			case 0: spr = flare3 
- 			case 1: spr = sprBflare 
- 			case 2: spr = sprFlare6 
- 			case 3: spr = sprRflare	 
- 		} 
-   
- 		//TE_SPRITETRAIL 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte (15)	// line of moving glow sprites with gravity, fadeout, and collisions 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]-80) 
- 		write_short(spr) // (sprite index) 
- 		write_byte(50*multi) // (count) 
- 		write_byte(random_num(1,3)) // (life in 0.1's)  
- 		write_byte(10) // byte (scale in 0.1's)  
- 		write_byte(velo) // (velocity along vector in 10's) 
- 		write_byte(40) // (randomness of velocity in 10's) 
-   
- 		message_end() 
- 	} 
- 	if (type&(1<<3)) { //d - lightening 
- 		//Lightning  
- 		message_begin( MSG_BROADCAST,SVC_TEMPENTITY)  
- 		write_byte( 0 )  
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]-50) 
- 		write_coord(ent_origin[0])			// coord, coord, coord (End) 
- 		write_coord(ent_origin[1]) 
- 		write_coord((ent_origin[2]-2000)) 
- 		write_short( sprLightning )  
- 		write_byte( 1 ) // framestart  
- 		write_byte( 5 ) // framerate  
- 		write_byte( 3 ) // life  
- 		write_byte( 150*multi ) // width  
- 		write_byte( 30 ) // noise  
- 		write_byte( 200 ) // r, g, b  
- 		write_byte( 200 ) // r, g, b  
- 		write_byte( 200 ) // r, g, b  
- 		write_byte( 200 ) // brightness  
- 		write_byte( 100 ) // speed  
- 		message_end()  
-   
- 		//Sparks  
- 		message_begin( MSG_PVS, SVC_TEMPENTITY)  
- 		write_byte( 9 )  
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord((ent_origin[2]-1000)) 
- 		message_end() 	 
- 	} 
- 	if (type&(1<<4)) { //e -- Lights 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte(27) 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_byte(60)			// byte (radius in 10's)  
- 		write_byte(r)			// byte byte byte (color) 
- 		write_byte(g) 
- 		write_byte(b) 
- 		write_byte(100)			// byte (life in 10's) 
- 		write_byte(15)			// byte (decay rate in 10's) 
- 		message_end() 
- 	} 
- 	if (type&(1<<5)) { //f -- Effect upward 
- 		message_begin(MSG_BROADCAST, SVC_TEMPENTITY); 
- 		write_byte( 100 ); 
- 		write_coord( ent_origin[0] ); 
- 		write_coord( ent_origin[1] ); 
- 		write_coord( ent_origin[2] - 64); 
- 		write_short(sprFlare6); 
- 		write_short(1); 
- 		message_end(); 
- 	} 
- 	if (type&(1<<6)) { //g -- Throw ents 
- 		new velo = random_num(300,700) 
-   
- 		//define TE_EXPLODEMODEL 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte(107) // spherical shower of models, picks from set 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]-50) 
- 		write_coord(velo) //(velocity) 
- 		write_short (garbgibs) //(model index) 
- 		write_short (25*multi) // (count) 
- 		write_byte (15) // (life in 0.1's)		 
- 		message_end() 
- 	} 
- 	if (type&(1<<7)) { //h 
- 		//TE_TAREXPLOSION 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte( 4) // Quake1 "tarbaby" explosion with sound 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord((ent_origin[2]-40)) 
- 		message_end() 
- 	} 
- 	if (type&(1<<8)) { //i 
- 		new color = random_num(0,255) 
- 		new width = random_num(400,1000) 
- 		//TE_PARTICLEBURST 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte(122) // very similar to lavasplash. 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_short (width) 
- 		write_byte (color) // (particle color) 
- 		write_byte (40) // (duration * 10) (will be randomized a bit) 
- 		message_end() 
- 	} 
- 	if (type&(1<<9)) { //j...for random...blood 
- 		message_begin( MSG_BROADCAST,SVC_TEMPENTITY)  
- 		write_byte( 10 )  
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		message_end()  
- 	} 
- 	if (type&(1<<10)) { //k 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte(14) 
- 		write_coord(ent_origin[0]) 
- 		write_coord(ent_origin[1]) 
- 		write_coord((ent_origin[2]-100)) 
- 		write_byte(5000) // radius 
- 		write_byte(80) 
- 		write_byte(20) 
- 		message_end() 
- 	} 
- 	if (type&(1<<11))  { //l Sprite field 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte(123); 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_short(256); 
- 		if ((r > 128) && (g < 127) && (b < 127)) write_short(sprRflare) 
- 		else if ((r < 127) && (g > 128) && (b < 127)) write_short(sprGflare) 
- 		else if ((r < 127) && (g < 127) && (b > 128)) write_short(sprBflare) 
- 		else if ((r < 127) && (g > 128) && (b > 128)) write_short(sprTflare) 
- 		else if ((r > 128) && (g < 127) && (b < 200) && (b > 100)) write_short(sprPflare) 
- 		else if ((r > 128) && (g > 128) && (b < 127)) write_short(sprYflare) 
- 		else if ((r > 128) && (g > 100) && (g < 200) && (b < 127))write_short(sprOflare) 
- 		else write_short(sprBflare) 
- 		write_byte(10); 
- 		write_byte(1); 
- 		write_byte(20); 
- 		message_end() 
- 	} 
- 	if (type&(1<<18)) { //s 
- 		message_begin(MSG_BROADCAST,SVC_TEMPENTITY) 
- 		write_byte(20) 				// TE_BEAMDISK 
- 		write_coord(ent_origin[0])			// coord coord coord (center position) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_coord(ent_origin[0])			// coord coord coord (axis and radius) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]+random_num(250,750)) 
- 		switch(random_num(0,1)) { 
- 			case 0: write_short(sprFlare6)			// short (sprite index) 
- 			case 1: write_short(sprLightning)			// short (sprite index) 
- 		} 
- 		write_byte(0)				// byte (starting frame) 
- 		write_byte(0)				// byte (frame rate in 0.1's) 
- 		write_byte(25)				// byte (life in 0.1's) 
- 		write_byte(150)				// byte (line width in 0.1's) 
- 		write_byte(0)				// byte (noise amplitude in 0.01's) 
- 		write_byte(r)				// byte,byte,byte (color) 
- 		write_byte(g) 
- 		write_byte(b) 
- 		write_byte(255)				// byte (brightness) 
- 		write_byte(0)				// byte (scroll speed in 0.1's) 
- 		message_end() 
- 	} 
- 	if (type&(1<<19)) { //t 
- 		message_begin( MSG_BROADCAST, SVC_TEMPENTITY ) 
- 		write_byte( 17 ) 
- 		write_coord( ent_origin[0] ) 
- 		write_coord( ent_origin[1] ) 
- 		write_coord( ent_origin[2] ) 
- 		write_short( sprSmoke ) 
- 		write_byte( 10 ) 
- 		write_byte( 150 ) 
- 		message_end( ) 
- 	} 
- 	if (type&(1<<20)) { //u 
- 		message_begin( MSG_BROADCAST,SVC_TEMPENTITY)  
- 		write_byte( 21 )  
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]-70) 
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]+136) 
- 		write_short( white )  
- 		write_byte( 0 ) // startframe  
- 		write_byte( 0 ) // framerate  
- 		write_byte( 2 ) // life 2  
- 		write_byte( 20 ) // width 16  
- 		write_byte( 0 ) // noise  
- 		write_byte( 188 ) // r  
- 		write_byte( 220 ) // g  
- 		write_byte( 255 ) // b  
- 		write_byte( 255 ) //brightness  
- 		write_byte( 0 ) // speed  
- 		message_end()  
-   
- 		//Explosion2  
- 		message_begin( MSG_BROADCAST,SVC_TEMPENTITY)  
- 		write_byte( 12 )  
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_byte( 188 ) // byte (scale in 0.1's) 188  
- 		write_byte( 10 ) // byte (framerate)  
- 		message_end()  
-   
- 		//TE_Explosion  
- 		message_begin( MSG_BROADCAST,SVC_TEMPENTITY)  
- 		write_byte( 3 )  
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_short( fire )  
- 		write_byte( 60 ) // byte (scale in 0.1's) 188  
- 		write_byte( 10 ) // byte (framerate)  
- 		write_byte( 0 ) // byte flags  
- 		message_end()  
-   
- 		//Smoke  
- 		message_begin( MSG_BROADCAST,SVC_TEMPENTITY)  
- 		write_byte( 5 ) // 5  
- 		write_coord(ent_origin[0])			// coord, coord, coord (start) 
- 		write_coord(ent_origin[1]) 
- 		write_coord(ent_origin[2]) 
- 		write_short( sprSmoke )  
- 		write_byte( 10 ) // 2  
- 		write_byte( 10 ) // 10  
- 		message_end()  
- 	} 
-   
- 	if (type&(1<<21)) emit_sound(id,CHAN_ITEM, "ambience/thunder_clap.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)//v 
- 	if (type&(1<<22)) emit_sound(id, CHAN_VOICE, "weapons/explode3.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) // w 
- 	if (type&(1<<23)) emit_sound(id, CHAN_VOICE, "weapons/explode4.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) //x 
- 	if (type&(1<<24)) emit_sound(id, CHAN_VOICE, "weapons/explode5.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) //y 
- 	if (type&(1<<25)) emit_sound(id, CHAN_VOICE, "weapons/mortarhit.wav", 1.0, ATTN_NORM, 0, PITCH_NORM) //z 
-   
- 	return 1; 
- } 
-   
- public remove_fireworks(id){ 
- 	player_fireworks[id] = 0; 
- 	remove_by_class(id,"nrm_fireworks") 
- 	remove_by_class(id,"firework_normal") 
- 	remove_by_class(id,"firework_rv") 
- 	remove_by_class(id,"firework_rc") 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
- public remove_shooters(id){ 
- 	remove_by_class(id,"fireworks_shooter") 
- 	return PLUGIN_HANDLED; 
- } 
-   
- public amx_remove_fireworks(id){ 
- 	if(!access(id,ADMIN_LEVEL_G)) return 0; 
- 	remove_entity_name("nrm_fireworks") 
- 	remove_entity_name("firework_normal") 
- 	remove_entity_name("firework_rv") 
- 	remove_entity_name("firework_rc") 
- 	for(new i=0; i < 33; i++) player_fireworks[i] = 0; 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
- public amx_remove_shooters(id){ 
- 	if(!access(id,ADMIN_LEVEL_G)) return 0; 
- 	remove_entity_name("fireworks_shooter") 
- 	return PLUGIN_HANDLED; 
- } 
-   
- public remove_by_class(id,class[]){ 
- 	new ent = find_ent_by_owner(-1,class,id,0); 
- 	if(!ent) return 0; 
-   
- 	while ( ent != 0 )  
- 	{ 
- 		new ent2 = find_ent_by_owner(ent, class, id, 0); 
- 		remove_task(ent) 
- 		remove_entity(ent) 
- 		ent = ent2 
-   
- 	} 
- 	return 1; 
- } 
-   
- public sqrt(num)  
- {  
- 	// Cool - Newton's Method - Ludwig  
- 	new div = num, result = 1  
- 	while (div > result)  
- 	{  // end when div == result, or just below  
- 		div = (div + result) / 2 // take mean value as new divisor  
- 		result = num / div  
- 	}  
- 	return div  
- }  
-   
- public make_dot(vec[]) 
- { 
- 	message_begin( MSG_BROADCAST,SVC_TEMPENTITY)   
- 	write_byte( 17 )  
- 	write_coord(vec[0])  
- 	write_coord(vec[1])  
- 	write_coord(vec[2]) 
- 	write_short( ls_dot )  
- 	write_byte( 10 )  
- 	write_byte( 255 )  
- 	message_end() 
- } 
-   
- public plugin_precache() { 
- 	precache_sound("weapons/explode3.wav")	 
- 	precache_sound("weapons/explode4.wav") 
- 	precache_sound("weapons/explode5.wav") 
-   
- 	precache_sound("weapons/rocketfire1.wav") 
- 	precache_sound("weapons/mortarhit.wav") 
- 	precache_sound( "ambience/thunder_clap.wav") 
-   
- 	flare3 = precache_model("sprites/flare3.spr") 
- 	garbgibs = precache_model("models/garbagegibs.mdl") 
- 	//l_tube = precache_model("models/w_flare.mdl") 
-   
- 	if (file_exists("sound/fireworks/rocket1.wav")) { 
- 		precache_sound("fireworks/rocket1.wav") 
- 		has_rocket = 1 
- 	} else { 
- 		precache_sound("weapons/rocket1.wav") 
- 		has_rocket = 0 
- 	} 
-   
- 	if (file_exists("sound/fireworks/weapondrop1.wav")) { 
- 		precache_sound("fireworks/weapondrop1.wav") 
- 		has_drop = 1 
- 	} else { 
- 		precache_sound("items/weapondrop1.wav") 
- 		has_drop = 0 
- 	} 
-   
- 	precache_model("models/rpgrocket.mdl") 
- 	precache_model("models/w_rpgammo.mdl") 
-   
- 	sprSmoke = precache_model("sprites/smoke.spr") 
- 	sprFlare6 = precache_model("sprites/Flare6.spr") 
- 	sprLightning = precache_model("sprites/lgtning.spr") 
- 	white = precache_model("sprites/white.spr")  
- 	fire = precache_model("sprites/explode1.spr")  
-   
- 	sprBflare = precache_model("sprites/fireworks/bflare.spr") 
- 	sprRflare = precache_model("sprites/fireworks/rflare.spr") 
- 	sprGflare = precache_model("sprites/fireworks/gflare.spr") 
- 	sprTflare = precache_model("sprites/fireworks/tflare.spr") 
- 	sprOflare = precache_model("sprites/fireworks/oflare.spr") 
- 	sprPflare = precache_model("sprites/fireworks/pflare.spr") 
- 	sprYflare = precache_model("sprites/fireworks/yflare.spr") 
- 	ls_dot = precache_model("sprites/laserdot.spr") 
-   
- 	precache_sound("fvox/bell.wav"); 
- 	shockwave = precache_model("sprites/shockwave.spr") 
-   
- 	return PLUGIN_CONTINUE 
- } 
-   
-   
- public fireworks_menu(id) { 
- 	new amount; 
- 	if(check_fireworks(id,1) == 0){ 
- 		shoot_firework(id)  
- 		client_print(id,print_chat,"[FIRE] You are not allowed to use the menu.") 
- 		return PLUGIN_HANDLED; 
- 	}		 
-   
- 	if(access(id,ADMIN_LEVEL_G)) amount = get_cvar_num("fireworks_amaxcount") 
- 	else amount = get_cvar_num("fireworks_maxcount") 
-   
- 	new menu[1024] 
- 	format(menu,sizeof(menu),"Fireworks Menu: (%i of %i)^n^n",player_fireworks[id],amount) 
- 	add(menu,sizeof(menu),"1. Spawn Normal Rocket^n") 
- 	add(menu,sizeof(menu),"2. Spawn Laser Guided Rocket^n") 
- 	add(menu,sizeof(menu),"3. Spawn Remote View Rocket^n^n") 
- 	add(menu,sizeof(menu),"4. Fire Rockets^n") 
- 	add(menu,sizeof(menu),"5. Spawn Shooter^n^n") 
- 	add(menu,sizeof(menu),"6. Remove All Your Rockets^n") 
- 	add(menu,sizeof(menu),"7. Remove All Your Shooters^n^n") 
- 	add(menu,sizeof(menu),"0. Cancel^n") 
-   
- 	show_menu(id,1023,menu) 
-   
- 	return PLUGIN_HANDLED; 
- } 
-   
- public fireworks_keys(id,key){ 
- 	switch(key){ 
- 		case 0: fireworks_spawn(id,"firework_normal","abcdefsz",0,0,0) 
- 		case 1: fireworks_spawn(id,"firework_rc","abcdefsz",0,0,0) 
- 		case 2: fireworks_spawn(id,"firework_rv","abcdefsz",0,0,0) 
- 		case 3: shoot_firework(id)  
- 		case 4: 
- 		{ 
- 			if(check_fireworks(id,0)) shooter_spawn(id,5.0,5,0,0,0,"abcdz") 
- 			else { 
- 				client_print(id,print_chat,"[FIRE] You cannot spawn shooters") 
- 				return 0; 
- 			} 
- 		} 
- 		case 5: remove_fireworks(id); 
- 		case 6: remove_shooters(id); 
- 		case 7: return 0; 
- 		case 8: return 0; 
- 		case 9: return 0; 
-   
- 	} 
- 	fireworks_menu(id) 
- 	return PLUGIN_HANDLED; 
- } 
-   
-   
- public client_connect(id){ 
- 	player_fireworks[id] = 0; 
- 	allowed_fireworks[id] = false; 
- } 
-   
- public client_putinserver(id) if (!is_user_bot(id)) set_task(15.0,"display_info",id) 
-   
- public display_info(id) 
- { 
- 	client_print(id,print_chat,"") 
- 	client_cmd(id,"bind 1 slot1") 
- 	client_cmd(id,"bind 2 slot2") 
- 	client_cmd(id,"bind 3 slot3") 
- 	client_cmd(id,"bind 4 slot4") 
- 	client_cmd(id,"bind 5 slot5") 
- 	client_cmd(id,"bind 6 slot6") 
- 	client_cmd(id,"bind 7 slot7") 
- 	client_cmd(id,"bind 8 slot8") 
- 	client_cmd(id,"bind 9 slot9") 
- 	client_cmd(id,"bind 0 slot10") 
- } 
-   
- public handle_say(id) { 
- 	new arg1[32] 
- 	new arg2[32] 
- 	read_argv(1,arg1,sizeof(arg1)) 
- 	read_argv(2,arg2,sizeof(arg2)) 
-   
- 	if (equali(arg1,"fireworks menu") || equali(arg1,"fireworks_menu") || equali(arg1,"fireworks")) 
- 		fireworks_menu(id) 
-   
- 	return PLUGIN_CONTINUE 
- } 
-   
-   
- public changelights(id)  
- {  
-   
- 	new arg[3]  
- 	read_argv(1,arg,2)  
- 	set_lights(arg)  
- 	console_print(id,"[AMXX] Light Change Successful.") 
-   
- 	return PLUGIN_HANDLED  
- }  
-   
-   
-   
- public plugin_modules() 
- { 
- 	require_module("FakeMeta") 
- 	require_module("Engine") 
- } 
-   
- public plugin_init() { 
- 	register_plugin("Fireworks++","2.5","Twilight Suzuka") 
-   
- 	register_menucmd(register_menuid("Fireworks Menu:"),1023,"fireworks_keys") 
-   
- 	register_think("nrm_fireworks","fireworks_think"); 
- 	register_think("firework_rc","fireworks_think"); 
- 	register_think("firework_rv","fireworks_think"); 
- 	register_think("firework_normal","fireworks_think"); 
-   
- 	register_touch("*","firework_rc","fireworks_touch"); 
- 	register_touch("*","firework_rv","fireworks_touch"); 
- 	register_touch("*","firework_normal","fireworks_touch"); 
- 	register_touch("*","nrm_fireworks","fireworks_touch"); 
-   
- 	register_concmd("say","handle_say") 
- 	register_srvcmd("set_lights","changelights") 
- 	register_concmd("firework","spawn_firework") 
- 	register_concmd("firework_rv","spawn_firework") 
- 	register_concmd("firework_rc","spawn_firework") 
-   
- 	register_concmd("firework_shooter","spawn_shooter") 
- 	register_concmd("shoot_fireworks","shoot_firework") 
-   
- 	register_concmd("fireworks_password","check_password") 
-   
- 	register_concmd("remove_fireworks","remove_fireworks") 
- 	register_concmd("remove_shooters","remove_shooters") 
-   
- 	register_concmd("amx_remove_fireworks","amx_remove_fireworks") 
- 	register_concmd("amx_remove_shooters","amx_remove_shooters") 
-   
- 	register_cvar("fireworks_enable","1") 
- 	register_cvar("fireworks_flare_count","30") 
- 	register_cvar("fireworks_maxcount","4") 
- 	register_cvar("fireworks_amaxcount","16") 
- 	register_cvar("fireworks_colortype","0") 
- 	register_cvar("fireworks_multiplier","2") 
-   
- 	register_cvar("fireworks_xvelocity","100") 
- 	register_cvar("fireworks_yvelocity","100") 
-   
- 	register_cvar("fireworks","tsx") 
- } 
-   
-