/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <codmod>
#include <hamsandwich>
#include <cstrike>
#include <engine>
#include <fakemeta>
#define DMG_BULLET (1<<1)
new bool:ma_klase[33];
//rakiety
new sprite_blast;
new ilosc_rakiet_gracza[33];
new poprzednia_rakieta_gracza[33];
//koniec rakiety
new CT_Skins[4][] = {"sas","gsg9","urban","gign"};
new Terro_Skins[4][] = {"arctic","leet","guerilla","terror"}
new const nazwa[] = "Terrorysta";
new const opis[] = "Ma 1 rakiete oraz 1/3 szansy na pojawienie sie na poczatku rundy na respie wroga oraz nieskonczonosc amunicji";
new const bronie = (1<<CSW_HEGRENADE)|(1<<CSW_UMP45);
new const zdrowie = 20;
new const kondycja = 5;
new const inteligencja = 0;
new const wytrzymalosc = 0;
public plugin_init()
{
		register_plugin(nazwa, "1.0", "PYRDYS");
  
		cod_register_class(nazwa, opis, bronie, zdrowie, kondycja, inteligencja, wytrzymalosc);
				
				register_event("CurWeapon","CurWeapon","be", "1=1");
		//rakiety
		register_touch("rocket", "*" , "DotykRakiety");
		register_event("ResetHUD", "ResetHUD", "abe");
		//koniec rakiety
		RegisterHam(Ham_Spawn, "player", "Spawn", 1);
}
//rakiety
public plugin_precache()
{
		sprite_blast = precache_model("sprites/dexplo.spr");
		precache_model("models/rpgrocket.mdl");
}
//koniec rakiety
public cod_class_enabled(id)
{
		if(!(get_user_flags(id) & ADMIN_LEVEL_G))
		{
				client_print(id, print_chat, "[Terrorysta] Nie masz uprawnien, aby uzywac tej klasy.")
				return COD_STOP;
		}
		ilosc_rakiet_gracza[id] = 1;
		ma_klase[id] = true;
		return COD_CONTINUE;
}
public cod_class_disabled(id)
{
		ZmienUbranie(id, 1);
		ma_klase[id] = false;
}
public Spawn(id)
{
		if(!is_user_alive(id))
				return;
		  
		if(!ma_klase[id])
				return;
		  
		if(random_num(1,3) == 1)
		{
				new CsTeams:team = cs_get_user_team(id);
		  
				cs_set_user_team(id, (team == CS_TEAM_CT)? CS_TEAM_T: CS_TEAM_CT);
				ExecuteHam(Ham_CS_RoundRespawn, id);
		  
				cs_set_user_team(id, team);
		}
		ZmienUbranie(id, 0);
}
public ZmienUbranie(id, reset)
{
		if (!is_user_connected(id))
				return PLUGIN_CONTINUE;
  
		if(reset)
				cs_reset_user_model(id);
		else
		{
				new num = random_num(0,3);
				cs_set_user_model(id, (get_user_team(id) == 1)? CT_Skins[num]: Terro_Skins[num]);
		}
  
		return PLUGIN_CONTINUE;
}
//rakiety
public cod_class_skill_used(id)
{
		if (!ilosc_rakiet_gracza[id])
		{
				client_print(id, print_center, "Wykorzystales juz wszystkie rakiety!");
				return PLUGIN_CONTINUE;
		}
  
		if(poprzednia_rakieta_gracza[id] + 2.0 > get_gametime())
		{
				client_print(id, print_center, "Rakiet mozesz uzywac co 2 sekundy!");
				return PLUGIN_CONTINUE;
		}
  
		if (is_user_alive(id))
		{
				poprzednia_rakieta_gracza[id] = floatround(get_gametime());
				ilosc_rakiet_gracza[id]--;
				new Float: Origin[3], Float: vAngle[3], Float: Velocity[3];
		  
				entity_get_vector(id, EV_VEC_v_angle, vAngle);
				entity_get_vector(id, EV_VEC_origin , Origin);
  
				new Ent = create_entity("info_target");
  
				entity_set_string(Ent, EV_SZ_classname, "rocket");
				entity_set_model(Ent, "models/rpgrocket.mdl");
  
				vAngle[0] *= -1.0;
  
				entity_set_origin(Ent, Origin);
				entity_set_vector(Ent, EV_VEC_angles, vAngle);
  
				entity_set_int(Ent, EV_INT_effects, 2);
				entity_set_int(Ent, EV_INT_solid, SOLID_BBOX);
				entity_set_int(Ent, EV_INT_movetype, MOVETYPE_FLY);
				entity_set_edict(Ent, EV_ENT_owner, id);
  
				VelocityByAim(id, 1000 , Velocity);
				entity_set_vector(Ent, EV_VEC_velocity ,Velocity);
		}  
		return PLUGIN_CONTINUE;
}
public DotykRakiety(ent)
{
		if (!is_valid_ent(ent))
				return;
		new attacker = entity_get_edict(ent, EV_ENT_owner);
  
		new Float:fOrigin[3];
		entity_get_vector(ent, EV_VEC_origin, fOrigin);  
  
		new iOrigin[3];
		for(new i=0;i<3;i++)
				iOrigin[i] = floatround(fOrigin[i]);
  
		message_begin(MSG_BROADCAST,SVC_TEMPENTITY, iOrigin);
		write_byte(TE_EXPLOSION);
		write_coord(iOrigin[0]);
		write_coord(iOrigin[1]);
		write_coord(iOrigin[2]);
		write_short(sprite_blast);
		write_byte(32);
		write_byte(20);
		write_byte(0);
		message_end();
		new entlist[33];
		new numfound = find_sphere_class(ent, "player", 190.0, entlist, 32);
  
		for (new i=0; i < numfound; i++)
		{		  
				new pid = entlist[i];
		  
				if (!is_user_alive(pid) || get_user_team(attacker) == get_user_team(pid))
						continue;
				cod_inflict_damage(attacker, pid, 55.0, 0.9, ent, (1<<24));
		}
		remove_entity(ent);
}  
public ResetHUD(id)
		ilosc_rakiet_gracza[id] = 1;
public client_disconnect(id)
{
		new ent = find_ent_by_class(0, "rocket");
		while(ent > 0)
		{
				if(entity_get_edict(id, EV_ENT_owner) == id)
						remove_entity(ent);
				ent = find_ent_by_class(ent, "rocket");
		}
}
//koniec rakiety
public CurWeapon(id)
{
				if(!is_user_connected(id))
								return;
		  
				if(!ma_klase[id])
								return;
		  
				set_user_clip(id, 2);
}
		  
stock set_user_clip(id, ammo)
{
				new weaponname[32], weaponid = -1, weapon = get_user_weapon(id, _, _);
				get_weaponname(weapon, weaponname, 31);
				while ((weaponid = engfunc(EngFunc_FindEntityByString, weaponid, "classname", weaponname)) != 0)
								if (pev(weaponid, pev_owner) == id) {
								set_pdata_int(weaponid, 51, ammo, 4);
								return weaponid;
				}
				return 0;
}