#include <amxmodx> 
#include <amxmisc>
#include <engine>
#include <zombieplague>

new g_radio


public Ass_CreateRadio(id,level,cid){ 
	if (!cmd_access(id,level,cid,1)) 
		return PLUGIN_HANDLED

	if(entity_get_int(id, EV_INT_deadflag) != 0)
		return PLUGIN_HANDLED

	new Float:vOrigin[3]
	new Float:vAngles[3]
	entity_get_vector(id, EV_VEC_origin, vOrigin)
	entity_get_vector(id, EV_VEC_v_angle, vAngles)

        new NewEnt
        NewEnt = create_entity("info_target")

        if(NewEnt == 0) {
            return PLUGIN_HANDLED_MAIN
        }

	entity_set_string(NewEnt, EV_SZ_classname, "ass_radio")
	entity_set_model(NewEnt, "models/w_transistor.mdl")
	entity_set_int(NewEnt, EV_INT_body, 1)
	entity_set_int(NewEnt, EV_INT_sequence, 1)
	entity_set_int(NewEnt, EV_INT_solid, 2)

	new Float:MinBox[3]
	new Float:MaxBox[3]

	MinBox[0] = -8.0
	MinBox[1] = -8.0
	MinBox[2] = -8.0
	MaxBox[0] = 8.0
	MaxBox[1] = 8.0
	MaxBox[2] = 8.0

	entity_set_vector(NewEnt, EV_VEC_mins, MinBox)
	entity_set_vector(NewEnt, EV_VEC_maxs, MaxBox)

	new Float:vNewOrigin[3]
	new Float:vNormal[3]
	new Float:vTraceDirection[3]
	new Float:vTraceEnd[3]
	new Float:vTraceResult[3]
	new Float:vEntAngles[3]

	VelocityByAim(id, 64, vTraceDirection)
	
	vTraceEnd[0] = vTraceDirection[0] + vOrigin[0]
	vTraceEnd[1] = vTraceDirection[1] + vOrigin[1]
	vTraceEnd[2] = vTraceDirection[2] + vOrigin[2]

	trace_line(id, vOrigin, vTraceEnd, vTraceResult)

	if(trace_normal(id, vOrigin, vTraceEnd, vNormal) == 0) {
		remove_entity(NewEnt)
		console_print(id, "[Radio] You must plant the radio on a wall!")
		return PLUGIN_HANDLED_MAIN
	}


	vNewOrigin[0] = vTraceResult[0] + (vNormal[0] * 8.0)
	vNewOrigin[1] = vTraceResult[1] + (vNormal[1] * 8.0)
	vNewOrigin[2] = vTraceResult[2] + (vNormal[2] * 8.0)

	entity_set_origin(NewEnt, vNewOrigin)
	vector_to_angle(vNormal, vEntAngles)

	entity_set_vector(NewEnt, EV_VEC_angles, vEntAngles)


	new Float:vBeamEnd[3]
	new Float:vTracedBeamEnd[3]
	vBeamEnd[0] = vNewOrigin[0] + (vNormal[0] * 8192)
	vBeamEnd[1] = vNewOrigin[1] + (vNormal[1] * 8192)
	vBeamEnd[2] = vNewOrigin[2] + (vNormal[2] * 8192)
	trace_line(-1, vNewOrigin, vBeamEnd, vTracedBeamEnd)
	entity_set_vector(NewEnt, EV_VEC_vuser1, vTracedBeamEnd)

	entity_set_int(NewEnt, EV_INT_movetype, 5) //5 = movetype_fly, No grav, but collides.


	emit_sound(NewEnt, CHAN_WEAPON, "weapons/mine_deploy.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)

	new args[4]
	num_to_str(NewEnt, args, 4)

	set_task(3.0, "RadioActivate", 0, args, 4)

	return PLUGIN_HANDLED_MAIN
}

public RadioActivate(RadioID[]) {
	new EntID = str_to_num(RadioID)
	
	new Station = get_cvar_num("radio_station")
	if (Station==1) {
		emit_sound(EntID, CHAN_VOICE, "ambience/arabmusic.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(107.0, "StartSoundAgain", EntID+22)
	} else if (Station==2) {
		emit_sound(EntID, CHAN_VOICE, "ambience/Opera.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(72.0, "StartSoundAgain", EntID+22)
	} else {
		emit_sound(EntID, CHAN_VOICE, "ambience/lv_jubilee.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(6.0, "StartSoundAgain", EntID+22)
	} 
}

public StartSoundAgain(TaskID) {
	new EntID = TaskID-22
	
	new Station = get_cvar_num("radio_station")
	if (Station==1) {
		emit_sound(EntID, CHAN_VOICE, "ambience/arabmusic.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(107.0, "StartSoundAgain", EntID+22)
	} else if (Station==2) {
		emit_sound(EntID, CHAN_VOICE, "ambience/Opera.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(72.0, "StartSoundAgain", EntID+22)
	} else {
		emit_sound(EntID, CHAN_VOICE, "ambience/lv_jubilee.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(6.0, "StartSoundAgain", EntID+22)
	}
	
}

public Ass_DelRadios(id,level,cid){ 
	if (!cmd_access(id,level,cid,1)) 
		return PLUGIN_HANDLED

	new iEntity = find_ent_by_class(-1, "ass_radio")
	while(iEntity > 0)
	{
		emit_sound(iEntity, CHAN_VOICE, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		remove_task(iEntity+22)
		remove_entity(iEntity)
		iEntity = find_ent_by_class(-1, "ass_radio")
	}

	return PLUGIN_CONTINUE
}

public Ass_ResRadios(id,level,cid){ 
	if (!cmd_access(id,level,cid,1)) 
		return PLUGIN_HANDLED
	
	new iEntity = find_ent_by_class(-1, "ass_radio")
	while(iEntity > 0)
	{
		remove_task(iEntity+22)
		emit_sound(iEntity, CHAN_VOICE, "common/null.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(3.0, "StartSoundAgain", iEntity+22)
		iEntity = find_ent_by_class(iEntity, "ass_radio")
	}

	return PLUGIN_CONTINUE
}

public plugin_init(){ 
	register_plugin("[ZP] Trasistor Radio","1.0","AssKicR") 
	register_cvar("radio_station","1")
	g_radio = zp_register_extra_item("Radio", 3, ZP_TEAM_HUMAN)
	return PLUGIN_CONTINUE 
}

public plugin_precache() {
	precache_sound("weapons/mine_deploy.wav")	// Radio Place
	precache_sound("common/null.wav")			// Radio Off
	precache_sound("ambience/arabmusic.wav")	// Jihad Channel (1)
	precache_sound("ambience/Opera.wav")		// Opera Channel (2)
	precache_sound("ambience/lv_jubilee.wav")	// New Wave Channel (3)
	precache_model("models/w_transistor.mdl")
	precache_model("models/w_transistort.mdl")
	return PLUGIN_CONTINUE 
}

public zp_extra_item_selected(id, itemid)
{
	if (itemid == g_radio)
	{
		set_task(0.0, "Ass_CreateRadio", id)
	}
}

public zp_round_ended()
{
        set_task(0.0, "Ass_DelRadios")
}

