Raised This Month: $32 Target: $400
 8% 

[HELP] Need ideas for killstreak limits on Cypis's COD Killstreak


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Infractem
Member
Join Date: Dec 2016
Old 12-29-2016 , 16:34   [HELP] Need ideas for killstreak limits on Cypis's COD Killstreak
Reply With Quote #1

This is the 1.3.4 version of cypis' COD Killstreak. Quite an old plugin but really reliable for my COD MW2 mod that I am developing atm. The thing is this killstreak script does not have a "3 Killstreak Selection" feature where you can only select 3 killstreaks to use at a time. Imagine how chaotic having all eight killstreak rewards available for each player, with the minimum of about 3rd to 6th killstreaks having all rewards and the maximum killstreak of 25th as the final reward. In general, this could be VERY chaotic and lag inducing in a server full of real players.

I would like to come and request for help(or at least ideas) on how would I add this 3 killstreak menu. To give you an idea, the plugin uses boolean on its killstreak menu. Each killstreak(third, fourth, fifth, and so on) has a different reward. Once you get the specific killstreak, the options from the menu becomes available(obviously) and ready for use. My initial idea is to use a condition on each menu, and create another menu in which would allow you to choose specific.

Here's a copy of my current killstreak build, already translated and has modifications(though I have a more updated but still stable one). If you do have ideas, please do not hesitate to share in this thread. Thank you!



PHP Code:
#include <amxmodx>
#include <cstrike>
#include <csx>
#include <engine>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <xs>

#define PLUGIN "KillStreak"
#define VERSION "1.3.4"
#define AUTHOR "Cypis Edited"

#define MAX_DIST 8192.0
#define MAX 32

new const maxAmmo[31]={0,52,0,90,1,32,1,100,90,1,120,100,100,90,90,90,100,120,30,120,200,32,90,120,90,2,35,90,90,0,100};

new 
sprite_blastcache_trail;

new 
max_kills[MAX+1], bool:radar[2], bool:nalot[MAX+1], bool:predator[MAX+1], bool:nuke[MAX+1], bool:emp[MAX+1], bool:cuav[MAX+1], bool:uav[MAX+1], bool:pack[MAX+1], bool:sentrys[MAX+1];
new 
user_controll[MAX+1], emp_activebool:nuke_player[MAX+1];
new 
PobraneOrigin[3], MainKiller[2];

public 
plugin_init() 
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_think("sentry","SentryThink");
    
    
register_touch("predator""*""touchedpredator");
    
register_touch("bomb""*""touchedrocket");

    
register_forward(FM_ClientKill"cmdKill");
    
    
RegisterHam(Ham_TakeDamage"func_breakable""TakeDamage");

    
register_event("CurWeapon","CurWeapon","be""1=1");
    
register_event("HLTV""NowaRunda""a""1=0""2=0");
    
register_message(get_user_msgid("DeathMsg"), "message_DeathMsg")
    
    
register_cvar("ks_hpsentry""2500");
    
register_cvar("ks_sentry_remove""1");
    
    
register_clcmd("say /ks""Killstreak_Menu");
    
register_clcmd("say /killstreak""Killstreak_Menu");
    
register_clcmd("killstreak""Killstreak_Menu");
    
set_task(2.0,"radar_scan",_,_,_,"b");
}

public 
plugin_precache()
{
    
sprite_blast precache_model("sprites/dexplo.spr");
    
cache_trail precache_model("sprites/smoke.spr");
    
    
precache_model("models/p_hegrenade.mdl");
    
precache_model("models/cod_carepackage.mdl");
    
precache_model("models/cod_plane.mdl");
    
precache_model("models/cod_predator.mdl");
    
precache_model("models/cod_sentrygun.mdl");
    
    
precache_sound("mw/nuke_friend.wav");
    
precache_sound("mw/nuke_enemy.wav");
    
precache_sound("mw/nuke_give.wav");
    
    
precache_sound("mw/jet_fly1.wav");
    
//precache_sound("mw/jet_fly2.wav");
    
    
precache_sound("mw/emp_effect.wav");
    
precache_sound("mw/emp_friend.wav");
    
precache_sound("mw/emp_enemy.wav");
    
precache_sound("mw/emp_give.wav");
    
    
precache_sound("mw/counter_friend.wav");
    
precache_sound("mw/counter_enemy.wav");
    
precache_sound("mw/counter_give.wav");
    
    
precache_sound("mw/air_friend.wav");
    
precache_sound("mw/air_enemy.wav");
    
precache_sound("mw/air_give.wav");
    
    
precache_sound("mw/predator_friend.wav");
    
precache_sound("mw/predator_enemy.wav");
    
precache_sound("mw/predator_give.wav");
    
    
precache_sound("mw/uav_friend.wav");
    
precache_sound("mw/uav_enemy.wav");
    
precache_sound("mw/uav_give.wav");
    
    
precache_sound("mw/carepackage_friend.wav");
    
precache_sound("mw/carepackage_enemy.wav");
    
precache_sound("mw/carepackage_give.wav");
    
    
precache_sound("mw/firemw.wav");
    
precache_sound("mw/plant.wav");
    
precache_sound("mw/sentrygun_starts.wav");
    
precache_sound("mw/sentrygun_stops.wav");
    
precache_sound("mw/sentrygun_gone.wav");
    
precache_sound("mw/sentrygun_friend.wav");
    
precache_sound("mw/sentrygun_enemy.wav");
    
precache_sound("mw/sentrygun_give.wav");
    
    
precache_model("models/computergibs.mdl");
    
/*precache_sound("mw/emergairdrop_friend.wav");
    precache_sound("mw/emergairdrop_enemy.wav");
    precache_sound("mw/emergairdrop_give.wav");*/
}

public 
Killstreak_Menu(id)
{
    new 
menu menu_create("KillStreak:""Killstreak_Handler");
    new 
cb menu_makecallback("Killstreak_Callback");
    
menu_additem(menu"UAV"__cb);
    
menu_additem(menu"Care Package"__cb);
    
menu_additem(menu"Counter-UAV"__cb);
    
menu_additem(menu"Sentry Gun"__cb);
    
menu_additem(menu"Predator Missle"__cb);
    
menu_additem(menu"Airstrike"__cb);
    
menu_additem(menu"EMP"__cb);
    
menu_additem(menu"Tactical Nuke"__cb);
    
menu_setprop(menuMPROP_EXITNAME"Exit^n\yKill Streak v1.3.4 by \rPaolo");
    
menu_display(idmenu)
}

public 
Killstreak_Callback(idmenuitem)
{
    if(!
uav[id] && item == || !pack[id] && item == || !cuav[id] && item == || !sentrys[id] && item == || !predator[id] && item == || !nalot[id] && item == || !emp[id] && item == || !nuke[id] && item == 7)
        return 
ITEM_DISABLED;
    
    return 
ITEM_ENABLED;
}

public 
Killstreak_Handler(idmenuitem)
{
    if(!
is_user_alive(id))
        return 
PLUGIN_HANDLED;
    
    if(
item == MENU_EXIT)
    {
        
menu_destroy(menu);
        return 
PLUGIN_HANDLED;
    }
    
    switch(
item)
    {
        case 
0:{
            if(!
emp_active|| (emp_active && get_user_team(id) == get_user_team(emp_active)))
                
CreateUVA(id);
        }
        case 
1:{
            if(!
emp_active || (emp_active && get_user_team(id) == get_user_team(emp_active)))
                
CreatePack(id);
        } 
        case 
2:{
            if(!
emp_active || (emp_active && get_user_team(id) == get_user_team(emp_active)))
                
CreateCUVA(id);
        } 
        case 
3:{
            if(!
emp_active || (emp_active && get_user_team(id) == get_user_team(emp_active)))
                
CreateSentry(id);
        } 
        case 
4:{
            if(!
emp_active || (emp_active&& get_user_team(id) == get_user_team(emp_active)))
                
CreatePredator(id);
        } 
        case 
5:{
            if(!
emp_active|| (emp_active && get_user_team(id) == get_user_team(emp_active)))
                
CreateNalot(id);
        } 
        case 
6:{
            if(!
emp_active)
                
CreateEmp(id);
        } 
        case 
7CreateNuke(id);
    }        
    return 
PLUGIN_HANDLED;
}

public 
NowaRunda()
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numi++)
    {
        if(
task_exists(players[i]+997))
            
remove_task(players[i]+997);
    }
    
    
remove_entity_name("predator")
    
remove_entity_name("bomb")
    
    if(
get_cvar_num("ks_sentry_remove"))
        
remove_entity_name("sentry")
}

public 
client_putinserver(id){
    
max_kills[id] = 0;
    
user_controll[id] = 0;
    
nalot[id] = false;
    
predator[id] = false;
    
nuke[id] = false;
    
cuav[id] = false;
    
uav[id] = false;
    
emp[id] = false;
    
pack[id] = false;
    
sentrys[id] = false;
}

public 
client_disconnect(id)
{
    new 
ent = -1
    
while((ent find_ent_by_class(ent"sentry")))
    {
        if(
entity_get_int(entEV_INT_iuser2) == id)
            
remove_entity(ent);
    }
    return 
PLUGIN_CONTINUE;
}

public 
client_death(killer,victim,wpnindex,hitplace,TK)
{    
    if(!
is_user_alive(killer) || !is_user_connected(killer))
        return 
PLUGIN_CONTINUE;
        
    if(
get_user_team(killer) != get_user_team(victim) && !nuke_player[killer])
    {
        
max_kills[killer]++;
        switch(
max_kills[killer])
        {
            case 
3:
            {
                
uav[killer] = true;
                
Killstreak_Sound(killer"UAV^nPress V to use killstreak""uav");
            }
            case 
4:
            {
                switch(
random_num(0,1))
                {
                    case 
0:
                    {
                        
cuav[killer] = true;
                        
Killstreak_Sound(killer"Counter-Uav^nPress V to use killstreak""counter");
                    }
                    case 
1:
                    {
                        
pack[killer] = true;
                        
Killstreak_Sound(killer"Care Package^nPress V to use killstreak""carepackage");
                    }
                }
            }
            case 
5:
            {
                
predator[killer] = true;
                
Killstreak_Sound(killer"Predator Missible^nPress V to use killstreak""predator");
            }
            case 
6:
            {
                
nalot[killer] = true;
                
Killstreak_Sound(killer"Airstreak^nPress V to use killstreak""air");
            }
            case 
8:
            {
                
sentrys[killer] = true;
                
Killstreak_Sound(killer"Sentry Gun^nPress V to use killstreak""sentrygun");
            }
            case 
15:
            {
                
emp[killer] = true;
                
Killstreak_Sound(killer"EMP^nPress V to use killstreak""emp");
            }
            case 
25:
            {
                
nuke[killer] = true;
                
Killstreak_Sound(killer"Tactical Nuke^nPress V to use killstreak""nuke");
            }
        }
    }
    
max_kills[victim] = 0;
    
user_controll[victim] = 0;
            
    new 
ent find_drop_pack(victim"pack")
    if(
is_valid_ent(ent))
    {
        if(
task_exists(2571+ent))
        {
            
remove_task(2571+ent);
            
bartime(victim0);
        }
    }

    return 
PLUGIN_CONTINUE
}

public 
Killstreak_Sound(idszNazwa[], scieszka[])
{
    
set_hudmessage(255255255, -1.00.2506.07.0);
    
ShowSyncHudMsg(idCreateHudSyncObj(), szNazwa);
    
client_cmd(id"spk sound/mw/%s_give.wav"scieszka);
}

//uav
public CreateUVA(id)
{
    static 
TimeUav[2];
    new 
team get_user_team(id) == 101;
    
uav[id] = false;
    
radar[team] = true;
    
    new 
numplayers[32];
    
get_players(playersnum"gh")
    for(new 
0numa++)
    {
        new 
players[a]
        if(
get_user_team(id) != get_user_team(i))
            
client_cmd(i"spk sound/mw/uav_enemy.wav")
        else
            
client_cmd(i"spk sound/mw/uav_friend.wav")
    }
    
print_info(id"UAV");
    
radar_scan()
    
    if(
task_exists(7354+team))
    {
        new 
times = (TimeUav[team]-get_systime())+60
        change_task
(7354+teamfloat(times));
        
TimeUav[team] = TimeUav[team]+times;
    }
    else
    {
        new 
data[1];
        
data[0] = team;
        
set_task(60.0"deluav"7354+teamdata1);
        
TimeUav[team] = get_systime()+60;
    }
}

public 
deluav(data[1])
{
    
radar[data[0]] = false;
}

public 
radar_scan()
{
    new 
numplayers[32];
    
get_players(playersnum"gh")
    for(new 
i=0i<numi++)
    {
        new 
id players[i];
        if(!
is_user_alive(id) || !radar[get_user_team(id) == 101])
            continue;
        
        if(!
emp_active)
            
radar_continue(id)
        else if(
get_user_team(id) == get_user_team(emp_active))
            
radar_continue(id)
    }
}

radar_continue(id)
{
    new 
numplayers[32], PlayerCoords[3]
    
get_players(playersnum"gh")
    for(new 
a=0a<numa++)
    {
        new 
players[a]       
        if(!
is_user_alive(i) || get_user_team(i) == get_user_team(id)) 
            continue;
        
        
get_user_origin(iPlayerCoords)
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HostagePos"), {0,0,0}, id)
        
write_byte(id)
        
write_byte(i)           
        
write_coord(PlayerCoords[0])
        
write_coord(PlayerCoords[1])
        
write_coord(PlayerCoords[2])
        
message_end()
        
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HostageK"), {0,0,0}, id)
        
write_byte(i)
        
message_end()
    }    
}

//airpack
public CreatePack(id)
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
get_user_team(id) != get_user_team(i))
            
client_cmd(i"spk sound/mw/carepackage_enemy.wav");
        else
            
client_cmd(i"spk sound/mw/carepackage_friend.wav");
    }
    
print_info(id"Care Package");
    
CreatePlane(id)
    
pack[id] = false
    set_task
(1.0"CarePack"id+742)
}

public 
CarePack(taskid)
{
    new 
id = (taskid 742)
    
    
PobraneOrigin[2] += 150
    new 
Float:LocVecs[3];
    
IVecFVec(PobraneOriginLocVecs);
    
create_ent(id"pack""models/cod_carepackage.mdl"16LocVecs);
}

public 
pickup_pack(info[2])
{
    new 
id info[0];
    new 
ent info[1];
    
    if(!
is_user_connected(id) || !is_user_alive(id))
        return;
    
    new 
weapons[32], weaponsnum;
    
get_user_weapons(idweaponsweaponsnum);
    for(new 
i=0i<weaponsnumi++)
        if(
maxAmmo[weapons[i]] > 0)
            
cs_set_user_bpammo(idweapons[i], maxAmmo[weapons[i]]);
        
    
give_item(id"weapon_hegrenade");
    
give_item(id"weapon_flashbang");
    
give_item(id"weapon_flashbang");            
    
give_item(id"weapon_smokegrenade");
        
    switch(
random(5))    
    {
        case 
0:
        {
            
uav[id] = true;
            
client_cmd(id"spk sound/mw/uav_give.wav");
        }
        case 
1:
        {
            
cuav[id] = true;
            
client_cmd(id"spk sound/mw/counter_give.wav");
        }
        case 
2:
        {
            
predator[id] = true;
            
client_cmd(id"spk sound/mw/predator_give.wav");
        }
        case 
3:
        {
            
nalot[id] = true;
            
client_cmd(id"spk sound/mw/air_give.wav");
        }
        case 
4:
        {
            
sentrys[id] = true;
            
client_cmd(id"spk sound/mw/sentrygun_give.wav");
        }
        case 
5:
        {
            
emp[id] = true;
            
client_cmd(id"spk sound/mw/emp_give.wav");
        }
    }        
    
remove_entity(ent);
}

public 
client_PreThink(id)
{    
    if(!
is_user_alive(id))
        return 
PLUGIN_CONTINUE;                
    if(
user_controll[id])
    {
        new 
ent2 user_controll[id];
        if(
is_valid_ent(ent2))
        {
            new 
Float:Velocity[3], Float:Angle[3];
            
velocity_by_aim(id500Velocity);
            
entity_get_vector(idEV_VEC_v_angleAngle);
            
            
entity_set_vector(ent2EV_VEC_velocityVelocity);
            
entity_set_vector(ent2EV_VEC_anglesAngle);
        }
        else
            
attach_view(idid);
    }
    static 
ent_id[MAX+1];
    new 
ent find_drop_pack(id"pack");
    if(
is_valid_ent(ent))
    {
        if(!
task_exists(2571+ent))
        {
            
ent_id[id] = ent;
            
bartime(id3)    
        
            new 
info[2];
            
info[0] = id;
            
info[1] = ent;
            
set_task(3.0"pickup_pack"2571+entinfo2);
        }
    }
    else
    {
        if(
task_exists(2571+ent_id[id]))
        {
            
remove_task(2571+ent_id[id]);
            
bartime(id0);
            
ent_id[id] = 0;
        }
    }
    return 
PLUGIN_CONTINUE;
}

//counter-uva
public CreateCUVA(id)
{
    
cuav[id] = false;
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
get_user_team(id) != get_user_team(i))
            
client_cmd(i"spk sound/mw/counter_enemy.wav");
        else
            
client_cmd(i"spk sound/mw/counter_friend.wav");
    }
    
radar[get_user_team(id) == 110] = false;
    
print_info(id"Counter-UAV");
}

//emp
public CreateEmp(id)
{
    
client_cmd(0"spk sound/mw/emp_effect.wav");
    
emp[id] = false;
    new 
numplayers[32];
    
get_players(playersnum"gh")
    for(new 
0numa++)
    {
        new 
players[a];
        if(
get_user_team(id) != get_user_team(i))
        {
            if(
is_user_alive(i))
            {
                
Display_Fade(i,1<<12,1<<12,1<<16,255255,0,166);
                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _i);
                
write_byte((1<<0)|(1<<3)|(1<<5));
                
message_end();
            }
            
client_cmd(i"spk sound/mw/emp_enemy.wav");
        }
        else
            
client_cmd(i"spk sound/mw/emp_friend.wav");
    }
    
print_info(id"EMP""e");
    
emp_activeid;
    
set_task(90.0,"del_emp");
}

public 
del_emp()
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
get_user_team(emp_active) != get_user_team(i))
        {
            if(
is_user_alive(i))
            {
                
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _i); 
                
write_byte(0);
                
message_end();
            }
        }
    }
    
emp_active 0;
}

public 
CurWeapon(id)
{
    if(
get_user_team(id) != get_user_team(emp_active) && emp_active)
    {
        
message_begin(MSG_ONE_UNRELIABLEget_user_msgid("HideWeapon"), _id); 
        
write_byte(0x29); //(1<<0)|(1<<3)|(1<<5)
        
message_end(); 
    }
}

//nuke
public CreateNuke(id)
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
is_user_alive(i))
            
Display_Fade(i,(10<<12),(10<<12),(1<<16),2554242,171);
        
        if(
get_user_team(id) != get_user_team(i))
            
client_cmd(i"spk sound/mw/nuke_enemy.wav");
        else
            
client_cmd(i"spk sound/mw/nuke_friend.wav");
    }
    
print_info(id"Nuke""e");
    
set_task(10.0,"shakehud");
    
set_task(13.5,"del_nuke"id);
    
nuke[id] = false;
}

public 
shakehud()
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
is_user_alive(i))
        {
            
Display_Fade(i,(3<<12),(3<<12),(1<<16),2558542,215);
            
message_begin(MSG_ONEget_user_msgid("ScreenShake"), {0,0,0}, i);
            
write_short(255<<12);
            
write_short(4<<12);
            
write_short(255<<12);
            
message_end();
        }
    }
}

public 
del_nuke(id)
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
is_user_alive(i))
        {
            if(
get_user_team(id) != get_user_team(i))
            {
                
cs_set_user_armor(i0CS_ARMOR_NONE);
                
UTIL_Kill(idifloat(get_user_health(i)), DMG_BULLET)
            }
            else
                
user_silentkill(i);
        }
    }
    
nuke_player[id] = false;
    
max_kills[id] = 0;
}

//nalot
public CreateNalot(id)
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
get_user_team(id) != get_user_team(i))
            
client_cmd(i"spk sound/mw/air_enemy.wav");
        else
            
client_cmd(i"spk sound/mw/air_friend.wav");
    }
    
print_info(id"Airstrike");
    
set_task(1.0"CreateBombs"id+997__"a"3);
    
CreatePlane(id);
    
nalot[id] = false;
}

public 
CreateBombs(taskid)
{    
    new 
id = (taskid-997);
    
    new 
radlocation[3];
    
PobraneOrigin[0] += random_num(-300,300);
    
PobraneOrigin[1] += random_num(-300,300);
    
PobraneOrigin[2] += 50;
    
    for(new 
i=0i<15i++) 
    {
        
radlocation[0] = PobraneOrigin[0]+1*random_num(-150,150); 
        
radlocation[1] = PobraneOrigin[1]+1*random_num(-150,150); 
        
radlocation[2] = PobraneOrigin[2]; 
        
        new 
Float:LocVec[3]; 
        
IVecFVec(radlocationLocVec); 
        
create_ent(id"bomb""models/p_hegrenade.mdl"210LocVec);
    }
}  

public 
CreatePlane(id)
{
    new 
Float:Origin[3], Float:Angle[3], Float:Velocity[3], ent;
    
    
get_user_origin(idPobraneOrigin3);
    
    
velocity_by_aim(id1000Velocity);
    
entity_get_vector(idEV_VEC_originOrigin);
    
entity_get_vector(idEV_VEC_v_angleAngle);
    
    
Angle[0] = Velocity[2] = 0.0;
    
Origin[2] += 200.0;
    
    
create_ent(id"samolot""models/cod_plane.mdl"28Originent);
    
    
entity_set_vector(entEV_VEC_velocityVelocity);
    
entity_set_vector(entEV_VEC_anglesAngle);
    
    
emit_sound(entCHAN_ITEM"mw/jet_fly1.wav"1.0ATTN_NORM0PITCH_NORM);
    
set_task(4.5"del_plane"ent+5731);
}

public 
del_plane(taskid)
    
remove_entity(taskid-5731);

public 
touchedrocket(entid)
{
    if(!
is_valid_ent(ent))
        return 
PLUGIN_CONTINUE;
    
    
bombs_explode(ent100.0150.0);
    return 
PLUGIN_CONTINUE;
}

//predator
public CreatePredator(id)
{
    new 
numplayers[32];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
get_user_team(id) != get_user_team(i))
            
client_cmd(i"spk sound/mw/predator_enemy.wav");
        else
            
client_cmd(i"spk sound/mw/predator_friend.wav");
    }
    
print_info(id"Predator Missle");

    new 
Float:Origin[3], Float:Angle[3], Float:Velocity[3], ent;
    
    
velocity_by_aim(id700Velocity);
    
entity_get_vector(idEV_VEC_originOrigin);
    
entity_get_vector(idEV_VEC_v_angleAngle);
    
    
Angle[0] *= -1.0;
    
    
create_ent(id"predator""models/cod_predator.mdl"25Originent);
    
    
entity_set_vector(entEV_VEC_velocityVelocity);
    
entity_set_vector(entEV_VEC_anglesAngle);
    
    
message_begin(MSG_BROADCASTSVC_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(ident);
    
user_controll[id] = ent;


public 
touchedpredator(entid)
{
    if(!
is_valid_ent(ent))
        return 
PLUGIN_CONTINUE;
    
    new 
owner entity_get_edict(entEV_ENT_owner);
    
bombs_explode(ent220.0400.0);
    
attach_view(ownerowner);
    
user_controll[owner] = 0;
    return 
PLUGIN_CONTINUE;
}

//sentry gun
public CreateSentry(id
{
    if(!(
entity_get_int(idEV_INT_flags) & FL_ONGROUND)) 
        return;

    new 
entlist[3];
    if(
find_sphere_class(id"func_bomb_target"650.0entlist2))
    {
        
client_print(idprint_chat"[KillStreak] You can't place a Sentry near a Bombsite.");
        return;
    }
    if(
find_sphere_class(id"func_buyzone"650.0entlist2))
    {
        
client_print(idprint_chat"[KillStreak] You can't place a Sentry near a Buyzone.");
        return;
    }
    new 
numplayers[32], Float:Origin[3];
    
get_players(playersnum"gh");
    for(new 
0numa++)
    {
        new 
players[a];
        if(
get_user_team(id) != get_user_team(i))
            
client_cmd(i"spk sound/mw/sentrygun_enemy.wav");
        else
            
client_cmd(i"spk sound/mw/sentrygun_friend.wav");
    }
    
print_info(id"Sentry Gun");
    
    
entity_get_vector(idEV_VEC_originOrigin);
    
Origin[2] += 45.0;
    
    new 
health[12], ent create_entity("func_breakable");
    
get_cvar_string("ks_hpsentry",healthcharsmax(health));
    
    
DispatchKeyValue(ent"health"health);
    
DispatchKeyValue(ent"material""6");
    
    
entity_set_string(entEV_SZ_classname"sentry");
    
entity_set_model(ent"models/cod_sentrygun.mdl");
    
    
entity_set_float(entEV_FL_takedamageDAMAGE_YES);
    
    
entity_set_size(entFloat:{-16.0, -16.00.0}, Float:{16.016.048.0});
    
    
entity_set_origin(entOrigin);
    
entity_set_int(entEV_INT_solidSOLID_SLIDEBOX);
    
entity_set_int(entEV_INT_movetypeMOVETYPE_TOSS);
    
entity_set_int(entEV_INT_iuser2id);
    
entity_set_vector(entEV_VEC_anglesFloat:{0.00.00.0});
    
entity_set_byte(entEV_BYTE_controller2127);

    
entity_set_float(entEV_FL_nextthinkget_gametime()+1.0);
    
    
sentrys[id] = false;
    
emit_sound(entCHAN_ITEM"mw/plant.wav"1.0ATTN_NORM0PITCH_NORM);

    
set_task(60.0"del_sentry"ent); //jak tego nie dam to sentry jest jako byt i strzela
}

public 
SentryThink(ent)
{
    if(!
is_valid_ent(ent)) 
        return 
PLUGIN_CONTINUE;
    
    new 
Float:SentryOrigin[3], Float:closestOrigin[3];
    
entity_get_vector(entEV_VEC_originSentryOrigin);

    new 
id entity_get_int(entEV_INT_iuser2);
    new 
target entity_get_edict(entEV_ENT_euser1);
    new 
firemods entity_get_int(entEV_INT_iuser1);
    
    if(
firemods)
    { 
        if(
/*ExecuteHam(Ham_FVisible, target, ent)*/fm_is_ent_visible(targetent) && is_user_alive(target)) 
        {
            if(
UTIL_In_FOV(target,ent))
            {
                goto 
fireoff;
            }
            
            new 
Float:TargetOrigin[3];
            
entity_get_vector(targetEV_VEC_originTargetOrigin);
                
            
emit_sound(entCHAN_AUTO"mw/firemw.wav"1.0ATTN_NORM0PITCH_NORM);
            
sentry_turntotarget(entSentryOriginTargetOrigin);
                
            new 
Float:hitRatio random_float(0.01.0) - 0.2;
            if(
hitRatio <= 0.0)
            {
                
UTIL_Kill(idtargetrandom_float(5.035.0), DMG_BULLET1);
                
                
message_begin(MSG_BROADCASTSVC_TEMPENTITY);
                
write_byte(TE_TRACER);
                
write_coord(floatround(SentryOrigin[0]));
                
write_coord(floatround(SentryOrigin[1]));
                
write_coord(floatround(SentryOrigin[2]));
                
write_coord(floatround(TargetOrigin[0]));
                
write_coord(floatround(TargetOrigin[1]));
                
write_coord(floatround(TargetOrigin[2]));
                
message_end();
            }
            
entity_set_float(entEV_FL_nextthinkget_gametime()+0.1);
            return 
PLUGIN_CONTINUE;
        }
        else
        {
fireoff:
            
firemods 0;
            
entity_set_int(entEV_INT_iuser10);
            
entity_set_edict(entEV_ENT_euser10);
            
emit_sound(entCHAN_AUTO"mw/sentrygun_stops.wav"1.0ATTN_NORM0PITCH_NORM);
            
            
entity_set_float(entEV_FL_nextthinkget_gametime()+1.0);
            return 
PLUGIN_CONTINUE;
        }
    }

    new 
closestTarget getClosestPlayer(ent)
    if(
closestTarget)
    {
        
emit_sound(entCHAN_AUTO"mw/sentrygun_starts.wav"1.0ATTN_NORM0PITCH_NORM);
        
entity_get_vector(closestTargetEV_VEC_originclosestOrigin);
        
sentry_turntotarget(entSentryOriginclosestOrigin);
        
        
entity_set_int(entEV_INT_iuser11);
        
entity_set_edict(entEV_ENT_euser1closestTarget);
        
        
entity_set_float(entEV_FL_nextthinkget_gametime()+1.0);
        return 
PLUGIN_CONTINUE;
    }

    if(!
firemods)
    {
        new 
controler1 entity_get_byte(entEV_BYTE_controller1)+1;
        if(
controler1 255)
            
controler1 0;
        
entity_set_byte(entEV_BYTE_controller1controler1);
        
        new 
controler2 entity_get_byte(entEV_BYTE_controller2);
        if(
controler2 127 || controler2 127)
            
entity_set_byte(entEV_BYTE_controller2127);
            
        
entity_set_float(entEV_FL_nextthinkget_gametime()+0.05);
    }
    return 
PLUGIN_CONTINUE
}

public 
sentry_turntotarget(entFloat:sentryOrigin[3], Float:closestOrigin[3]) 
{
    new 
newTripFloat:newAngle floatatan(((closestOrigin[1]-sentryOrigin[1])/(closestOrigin[0]-sentryOrigin[0])), radian) * 57.2957795;

    if(
closestOrigin[0] < sentryOrigin[0])
        
newAngle += 180.0;
    if(
newAngle 0.0)
        
newAngle += 360.0;
    
    
sentryOrigin[2] += 35.0
    
if(closestOrigin[2] > sentryOrigin[2])
        
newTrip 0;
    if(
closestOrigin[2] < sentryOrigin[2])
        
newTrip 255;
    if(
closestOrigin[2] == sentryOrigin[2])
        
newTrip 127;
        
    
entity_set_byte(entEV_BYTE_controller1,floatround(newAngle*0.70833));
    
entity_set_byte(entEV_BYTE_controller2newTrip);
    
entity_set_byte(entEV_BYTE_controller3entity_get_byte(entEV_BYTE_controller3)+20>2550entity_get_byte(entEV_BYTE_controller3)+20);
}

public 
TakeDamage(entidinflictorattackerFloat:damagedamagebits)
{
    if(!
is_user_alive(attacker))
        return 
HAM_IGNORED;
    
    new 
classname[32];
    
entity_get_string(entEV_SZ_classnameclassname31);
    
    if(
equal(classname"sentry")) 
    {
        new 
id entity_get_int(entEV_INT_iuser2);
        if(
get_user_team(attacker) == get_user_team(id))
            return 
HAM_SUPERCEDE;

        if(
damage >= entity_get_float(entEV_FL_health))
        {
            new 
Float:Origin[3];
            
entity_get_vector(entEV_VEC_originOrigin);    
            new 
entlist[33];
            new 
numfound find_sphere_class(ent"player"190.0entlist32);
            
            for(new 
i=0numfoundi++)
            {        
                new 
pid entlist[i];
                
                if(!
is_user_alive(pid) || get_user_team(id) == get_user_team(pid))
                    continue;
                
UTIL_Kill(idpid70.0, (1<<24));
            }
            
client_cmd(id"spk sound/mw/sentrygun_gone.wav");
            
//Sprite_Blast(Origin);
            //remove_entity(ent); //jak to dam to cresh serwer bo odrazu usuwa sentry guna :O
            
set_task(1.0"del_sentry"ent); //jak tego nie dam to sentry jest jako byt i strzela
        
}
    }
    return 
HAM_IGNORED;
}

public 
del_sentry(ent)
    
remove_entity(ent);

//wybuch
bombs_explode(entFloat:zadajeFloat:promien)
{
    if(!
is_valid_ent(ent)) 
        return;
    
    new 
attacker entity_get_edict(entEV_ENT_owner);
    
    new 
Float:entOrigin[3], Float:fDamageFloat:Origin[3];
    
entity_get_vector(entEV_VEC_originentOrigin);
    
entOrigin[2] += 1.0;
    
    new 
entlist[33];
    new 
numfound find_sphere_class(ent"player"promienentlist32);    
    for(new 
i=0numfoundi++)
    {        
        new 
victim entlist[i];        
        if(!
is_user_alive(victim) || get_user_team(attacker) == get_user_team(victim))
            continue;
            
        
entity_get_vector(victimEV_VEC_originOrigin);
        
fDamage zadaje floatmul(zadajefloatdiv(get_distance_f(OriginentOrigin), promien));
        
fDamage *= estimate_take_hurt(entOriginvictim0);
        if(
fDamage>0.0)
            
UTIL_Kill(attackervictimfDamageDMG_BULLET);
    }
    
Sprite_Blast(entOrigin);
    
remove_entity(ent);
}

public 
cmdKill()
    return 
FMRES_SUPERCEDE;

public 
message_DeathMsg()
{
    new 
killer get_msg_arg_int(1);
    if(
MainKiller[0] & (1<<killer))
    {
        
set_msg_arg_string(4"grenade");
        return 
PLUGIN_CONTINUE;
    }
    if(
MainKiller[1] & (1<<killer))
    {
        
set_msg_arg_string(4"m249");
        return 
PLUGIN_CONTINUE;
    }
    return 
PLUGIN_CONTINUE;
}

stock create_ent(idszName[], szModel[], iSolidiMovetypeFloat:fOrigin[3], &ent=-1)
{
    new 
ent1 create_entity("info_target");
    
entity_set_string(ent1EV_SZ_classnameszName);
    
entity_set_model(ent1szModel);
    
entity_set_int(ent1EV_INT_solidiSolid);
    
entity_set_int(ent1EV_INT_movetypeiMovetype);
    
entity_set_edict(ent1EV_ENT_ownerid);
    
entity_set_origin(ent1fOrigin);
    
    if(
ent != -1)
        
ent ent1;
}

stock Sprite_Blast(Float:iOrigin[3])
{
    
message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
    
write_byte(TE_EXPLOSION);
    
write_coord(floatround(iOrigin[0]));
    
write_coord(floatround(iOrigin[1])); 
    
write_coord(floatround(iOrigin[2]));
    
write_short(sprite_blast);
    
write_byte(32);
    
write_byte(20); 
    
write_byte(0);
    
message_end();
}

stock Float:estimate_take_hurt(Float:fPoint[3], entignored
{
    new 
Float:fFractionFloat:fOrigin[3], tr;
    
entity_get_vector(entEV_VEC_originfOrigin);
    
engfunc(EngFunc_TraceLinefPointfOriginDONT_IGNORE_MONSTERSignoredtr);
    
get_tr2(trTR_flFractionfFraction);
    if(
fFraction == 1.0 || get_tr2(trTR_pHit) == ent)
        return 
1.0;
    return 
0.6;
}

stock bartime(idnumber)
{
    
message_begin(MSG_ONEget_user_msgid("BarTime"), _id);
    
write_short(number);
    
message_end();    
}

stock Display_Fade(id,duration,holdtime,fadetype,red,green,blue,alpha)
{
    
message_begin(MSG_ONEget_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();
}

stock find_drop_pack(id, const class[])
{
    new 
Float:origin[3], classname[32], ent;
    
entity_get_vector(idEV_VEC_originorigin);
    
    while((
ent find_ent_in_sphere(entorigin75.0)) != 0
    {
        
entity_get_string(entEV_SZ_classnameclassname31);
        if(
equali(classname, class))
            return 
ent;
    }
    return 
0;
}

stock print_info(id, const ks_name[], const ks_usage[] = "s")
{
    new 
ks_user[64];
    
get_user_name(idks_user63);
    
client_print(0print_chat"%s i%s used by %s"ks_nameks_usageks_user);
}
    
stock UTIL_Kill(attackertargetFloat:damagedamagebitsile=0)
{
    
MainKiller[ile] |= (1<<attacker);
    
ExecuteHam(Ham_TakeDamagetargetattackerattackerdamagedamagebits);
    
MainKiller[ile] &= ~(1<<attacker);
}
    
stock getClosestPlayer(ent)
{
    new 
iClosestPlayer 0Float:flClosestDist MAX_DISTFloat:flDistanseFloat:fOrigin[2][3];
    new 
numplayers[32];
    
get_players(playersnum"gh")
    for(new 
0numa++)
    {
        new 
players[a];
        if(!
is_user_connected(i) || !is_user_alive(i) || /*!ExecuteHam(Ham_FVisible, i, ent)*/!fm_is_ent_visible(ient) || get_user_team(i) == get_user_team(entity_get_int(entEV_INT_iuser2)))
            continue;
        
        if(
UTIL_In_FOV(ient))
            continue;
        
        
entity_get_vector(iEV_VEC_originfOrigin[0]);
        
entity_get_vector(entEV_VEC_originfOrigin[1]);
        
        
flDistanse get_distance_f(fOrigin[0], fOrigin[1]);
        
        if(
flDistanse <= flClosestDist)
        {
            
iClosestPlayer i;
            
flClosestDist flDistanse;
        }
    }
    return 
iClosestPlayer;
}

stock bool:UTIL_In_FOV(id,ent)
{
    if((
get_pdata_int(id510) & (1<<16)) && (Find_Angle(ident) > 0.0))
        return 
true;
    return 
false;
}

stock Float:Find_Angle(idtarget)
{
    new 
Float:Origin[3], Float:TargetOrigin[3];
    
pev(id,pev_originOrigin);
    
pev(target,pev_origin,TargetOrigin);
    
    new 
Float:Angles[3], Float:vec2LOS[3];
    
pev(id,pev_anglesAngles);
    
    
xs_vec_sub(TargetOriginOriginvec2LOS);
    
vec2LOS[2] = 0.0;
    
    new 
Float:veclength vector_length(vec2LOS);
    if (
veclength <= 0.0)
        
vec2LOS[0] = vec2LOS[1] = 0.0;
    else
    {
        new 
Float:flLen 1.0 veclength;
        
vec2LOS[0] = vec2LOS[0]*flLen;
        
vec2LOS[1] = vec2LOS[1]*flLen;
    }
    
engfunc(EngFunc_MakeVectorsAngles);
    
    new 
Float:v_forward[3];
    
get_global_vector(GL_v_forwardv_forward);
    
    new 
Float:flDot vec2LOS[0]*v_forward[0]+vec2LOS[1]*v_forward[1];
    if(
flDot 0.5)
        return 
flDot;
    
    return 
0.0;
}

stock bool:fm_is_ent_visible(indexentityignoremonsters 0) {
    new 
Float:start[3], Float:dest[3];
    
pev(indexpev_originstart);
    
pev(indexpev_view_ofsdest);
    
xs_vec_add(startdeststart);

    
pev(entitypev_origindest);
    
engfunc(EngFunc_TraceLinestartdestignoremonstersindex0);

    new 
Float:fraction;
    
get_tr2(0TR_flFractionfraction);
    if (
fraction == 1.0 || get_tr2(0TR_pHit) == entity)
        return 
true;

    return 
false;

Infractem is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 03:17.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode