#include <amxmodx>
#include <codmod>
#include <hamsandwich>
#include <fakemeta>
#include <engine>
#include <colorchat>
new const perk_name[] = "Rakieta Balistyczna";
new const perk_desc[] = "Sterujesz Rakieta przez LW sek zadajaca max 165(+0.5 INT),&gdy kierujesz twoja widocznosc to 20/255";
new bool: blokada, bool: predator[26], bool:ma_perk[26], czas[26];
new sprite_blast, cache_trail, wartosc_perku[26], user_controllsem[26], posiadaczy;
public plugin_init(){
register_plugin(perk_name, "1.0", "cypis");
cod_register_perk(perk_name, perk_desc, 8, 13);
register_forward(FM_PlayerPreThink, "PreThink");
register_touch("predator_ent", "*", "touchedpredator");
register_event("HLTV", "BlokadaStart", "a", "1=0", "2=0");
}
public plugin_precache(){
sprite_blast = precache_model("sprites/dexplo.spr");
cache_trail = precache_model("sprites/smoke.spr");
precache_model("models/cod_predator.mdl");
}
public BlokadaStart(){
blokada = true;
set_task(12.0,"Odblokuj");
new iEnt = find_ent_by_class(-1, "predator_ent");
while(iEnt > 0)
{
remove_entity(iEnt);
iEnt = find_ent_by_class(iEnt, "predator_ent");
}
for(new id;id <= 25;id++){
if(ma_perk[id])
predator[id] = true;
}
}
public cod_perk_enabled(id, wartosc){
if(posiadaczy>1)
return COD_STOP;
posiadaczy++
wartosc_perku[id] = wartosc;
predator[id] = true;
ma_perk[id] = true;
return COD_CONTINUE;
}
public cod_perk_disabled(id){
posiadaczy--;
predator[id] = false;
ma_perk[id] = false;
}
public Odblokuj(){
blokada = false;
}
public brak_kontroli(id){
id-=6098
if(!ma_perk[id]) remove_task(id+6098)
czas[id]--;
client_print(id,print_center,"** %i **",czas[id]);
if(czas[id]<=0){
attach_view(id, id);
user_controllsem[id] = 0;
set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
remove_task(id+6098)
}
}
public cod_perk_used(id){
if(blokada){
client_print(id,print_center,"Rakiety mozna uzyc 10 sek po rozpoczeciu rundy!");
return PLUGIN_CONTINUE;
}
if(!predator[id]){
client_print(id,print_center,"Rakieta zostala juz zuzyta");
return PLUGIN_CONTINUE;
}
new name[33];
get_user_name(id, name, 32)
if (get_user_team(id) == 1)
ColorChat(0, GREY, "^x04 ~~^x03 Rakieta Balistyczna zostala wystrzelona przez^x04 %s^x03 [TT]",name);
else
ColorChat(0, GREY, "^x04 ~~^x03 Rakieta Balistyczna zostala wystrzelona przez^x04 %s^x03 [CT]",name);
czas[id] = wartosc_perku[id]
client_print(id,print_center,"** %i **",czas[id]);
set_rendering(id, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 20);
set_task(1.0, "brak_kontroli",id+6098, .flags="b")
new Float:Origin[3], Float:Angle[3], Float:Velocity[3];
velocity_by_aim(id, 650, Velocity);
entity_get_vector(id, EV_VEC_origin, Origin);
entity_get_vector(id, EV_VEC_v_angle, Angle);
Angle[0] *= -1.0;
new ent = create_entity("info_target");
entity_set_string(ent, EV_SZ_classname, "predator_ent");
entity_set_model(ent, "models/cod_predator.mdl");
entity_set_int(ent, EV_INT_solid, 2);
entity_set_int(ent, EV_INT_movetype, 5);
entity_set_edict(ent, EV_ENT_owner, id);
entity_set_origin(ent, Origin);
entity_set_vector(ent, EV_VEC_velocity, Velocity);
entity_set_vector(ent, EV_VEC_angles, Angle);
message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
write_byte(TE_BEAMFOLLOW);
write_short(ent);
write_short(cache_trail);
write_byte(10);
write_byte(5);
write_byte(205);
write_byte(237);
write_byte(163);
write_byte(200);
message_end();
predator[id] = false;
attach_view(id, ent);
user_controllsem[id] = ent;
return PLUGIN_CONTINUE;
}
public PreThink(id)
{
if(user_controllsem[id])
{
new ent = user_controllsem[id];
if(is_valid_ent(ent))
{
new Float:Velocity[3], Float:Angle[3];
velocity_by_aim(id, 500, Velocity);
entity_get_vector(id, EV_VEC_v_angle, Angle);
entity_set_vector(ent, EV_VEC_velocity, Velocity);
entity_set_vector(ent, EV_VEC_angles, Angle);
}
else
attach_view(id, id);
}
return FMRES_IGNORED;
}
public touchedpredator(ent, id)
{
if(!is_valid_ent(ent))
return PLUGIN_CONTINUE;
new owner = entity_get_edict(ent, EV_ENT_owner);
remove_task(owner+6098)
bombs_explode(ent, 171.0 + cod_get_user_intelligence(owner)*0.5 , 340.0);
if(is_user_alive(owner))
attach_view(owner, owner);
user_controllsem[owner] = 0;
set_rendering(owner, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 255);
return PLUGIN_CONTINUE;
}
bombs_explode(ent, Float:zadaje, Float:promien)
{
if(!is_valid_ent(ent))
return;
new attacker = entity_get_edict(ent, EV_ENT_owner);
new Float:entOrigin[3], Float:fDamage, Float:Origin[3];
entity_get_vector(ent, EV_VEC_origin, entOrigin);
entOrigin[2] += 1.0;
new entlist[33];
new team_attacker = get_user_team(attacker)
new numfound = find_sphere_class(ent, "player", promien, entlist, 32);
for(new i=0; i < numfound; i++)
{
new victim = entlist[i];
if(!is_user_alive(victim) || team_attacker == get_user_team(victim))
continue;
entity_get_vector(victim, EV_VEC_origin, Origin);
fDamage = zadaje - (0.5*get_distance_f(Origin, entOrigin));
ExecuteHam(Ham_TakeDamage, victim, ent, attacker, fDamage, DMG_BULLET);
}
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
write_byte(TE_EXPLOSION);
write_coord(floatround(entOrigin[0]));
write_coord(floatround(entOrigin[1]));
write_coord(floatround(entOrigin[2]));
write_short(sprite_blast);
write_byte(32);
write_byte(20);
write_byte(0);
message_end();
remove_entity(ent);
}