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

CS/CZ Ricochet v2.01


Post New Thread Reply   
 
Thread Tools Display Modes
intercostal_noisE
Member
Join Date: May 2014
Old 08-06-2014 , 12:23   Re: CS/CZ Ricochet v2.01
Reply With Quote #61

can you pls fix ricochets while using knife? (there should no ricochets occur while slaying someone with knife -.- ... ^^)

thx

Last edited by intercostal_noisE; 08-07-2014 at 03:47.
intercostal_noisE is offline
ExAnimo
Junior Member
Join Date: Nov 2010
Location: Russia
Old 06-28-2015 , 15:00   Re: CS/CZ Ricochet v2.01
Reply With Quote #62

Quote:
Originally Posted by intercostal_noisE View Post
I've added percantual chance ... here's the code:


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

#define PLUGIN    "Ricochet"
#define AUTHOR    "OT"
#define VERSION    "2.01"

#define MAX_PLAYERS            32

#define BS_IGNORE_WEAPONS    (1<<CSW_KNIFE)
#define    HIT_SHIELD            8
#define MAX_MONEY            16000

const BS_PISTOLS      =    ((1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE))
const 
BS_SHOTGUN       =    ((1<<CSW_XM1014)|(1<<CSW_M3))
const 
BS_SUBMGS       =    ((1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_MP5NAVY)|(1<<CSW_TMP)|(1<<CSW_P90))
const 
BS_RIFLES        =   ((1<<CSW_AUG)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_M249)|(1<<CSW_M4A1)|(1<<CSW_SG552)|(1<<CSW_AK47))
const 
BS_SNIPERS    =   ((1<<CSW_SCOUT)|(1<<CSW_SG550)|(1<<CSW_AWP)|(1<<CSW_G3SG1))

#define floatclamp(%1, %2, %3)     Float:(%2 <= %1 <= %3) ? Float:(%1) : Float:(%1 <= %2) ? Float:(%2) : Float:(%3)
#define ANGLE_RIC_MAX_COS        floatcos( (90.0 - floatclamp(get_pcvar_float(pcv_angles), 0.0, 90.0) ), degrees)

/*
C : concrete        
D : dirt    
G : grate      - metal like 
M : metal 
N : snow
P : computer    
S : slosh      - noroi
T : tile      - tigla
V : ventilation          
W : wood        
Y : glass
*/

new const material_array[] = 
{
    
'C''D''G''M''N''P''S''T''V''W''Y'
}

#define MATERIAL_CONCRETE    (1<<0)
#define MATERIAL_DIRT        (1<<1)
#define MATERIAL_GRATE        (1<<2)
#define MATERIAL_METAL        (1<<3)
#define MATERIAL_SNOW        (1<<4)
#define MATERIAL_COMPUTER    (1<<5)
#define MATERIAL_SLOSH        (1<<6)
#define MATERIAL_TILE        (1<<7)
#define MATERIAL_VENTS        (1<<8)
#define MATERIAL_WOOD        (1<<9)
#define MATERIAL_GLASS        (1<<10)

new const sounds[8][] =
{
    
"player/headshot1.wav",
    
"player/headshot2.wav",
    
"player/headshot3.wav",
    
"player/bhit_flesh-1.wav",
    
"player/bhit_kevlar-1.wav",
    
"player/bhit_helmet-1.wav",
    
"weapons/ric_metal-1.wav",
    
"weapons/ric_metal-2.wav"
}


new 
pcv_damage_percent
new pcv_angles
new pcv_chance
new pcv_pistols
new pcv_shotgun
new pcv_smgs
new pcv_rifles
new pcv_snipers
new pcv_tracers
new pcv_materials
new pcv_extramoney

new pcv_ff

new g_maxplayers

new decal_shot1

new last_ric_shooter[MAX_PLAYERS 1] = {0, ...}

//stock beampoint

public plugin_precache()
{
    for (new 
i=0;i<8;i++)
    {
        
precache_sound(sounds[i])
    }
    
    
//beampoint = precache_model("sprites/laserbeam.spr")
}

public 
plugin_init()
{
    
register_plugin(PLUGINVERSIONAUTHOR)
    
register_cvar("ricochet_version"VERSIONFCVAR_SERVER FCVAR_SPONLY)
    
    
pcv_damage_percent register_cvar("ric_damage_percent""75")
    
pcv_angles            register_cvar("ric_angle""30")
       
pcv_chance           register_cvar("ric_chance""10")
    
pcv_tracers           register_cvar("ric_tracers""1")
    
    
pcv_pistols           register_cvar("ric_pistols""1")
    
pcv_shotgun           register_cvar("ric_shotguns",    "1")
    
pcv_smgs           register_cvar("ric_smgs""1")
    
pcv_rifles           register_cvar("ric_rifles""1")
    
pcv_snipers           register_cvar("ric_snipers""1")
    
    
pcv_materials       register_cvar("ric_materials",         "2047")
    
    
pcv_extramoney       register_cvar("ric_money",             "100")
    
    
pcv_ff             get_cvar_pointer("mp_friendlyfire")
    
    
RegisterHam(Ham_TraceAttack"worldspawn""fw_traceattack")
    
RegisterHam(Ham_TraceAttack"func_breakable""fw_traceattack")
    
RegisterHam(Ham_Killed"player""fw_killed"1)
    
    
g_maxplayers get_maxplayers()
    
    
decal_shot1 engfuncEngFunc_DecalIndex"{shot1" )
}

public 
fw_killed(idkillergib)
{
    if (
killer == last_ric_shooter[id])
    {
        
cs_set_user_money(killerclamp(cs_get_user_money(killer) + get_pcvar_num(pcv_extramoney), 0MAX_MONEY), 1)
    }
    
    return 
HAM_IGNORED
}

public 
fw_traceattack(entattackerFloat:damageFloat:direction[3], thdlbits)
{
if (
random(10) <= get_pcvar_num(pcv_chance)) {
    
    if (!(
<= attacker <= g_maxplayers))
        return 
HAM_IGNORED
    
    
new weapon get_user_weapon(attacker)
    
    if (
BS_IGNORE_WEAPONS & (1<<weapon))
        return 
HAM_IGNORED
    
    
if (BS_PISTOLS & (1<<weapon) && !get_pcvar_num(pcv_pistols))
        return 
HAM_IGNORED
    
    
if (BS_SHOTGUN & (1<<weapon) && !get_pcvar_num(pcv_shotgun))
        return 
HAM_IGNORED
    
    
if (BS_SUBMGS & (1<<weapon) && !get_pcvar_num(pcv_smgs))
        return 
HAM_IGNORED
    
    
if (BS_RIFLES & (1<<weapon) && !get_pcvar_num(pcv_rifles))
        return 
HAM_IGNORED
    
    
if (BS_SNIPERS & (1<<weapon) && !get_pcvar_num(pcv_snipers))
        return 
HAM_IGNORED
    
    
new Float:origin[3],Float:end[3], Float:start[3], traceFloat:fraction
    
    pev
(attackerpev_originorigin)
    
pev(attackerpev_view_ofsstart)
    
    
xs_vec_add(originstartstart)
    
    
get_tr2(thdlTR_vecEndPosend)
    
    if (
point_contents(end) == CONTENTS_SKY)
        return 
HAM_IGNORED
    
    trace 
create_tr2()
    
    
engfunc(EngFunc_TraceLinestartendDONT_IGNORE_MONSTERSattackertrace)
    
get_tr2(traceTR_flFractionfraction)
    
    if (
is_breakable(ent) == 0)
    {
        new 
Float:virtualend[3], texture_name[64], texture_type
        
        xs_vec_sub
(endstartvirtualend)
        
xs_vec_mul_scalar(virtualend16000.0virtualend)
        
xs_vec_add(virtualendstartvirtualend)
        
        
engfunc(EngFunc_TraceTexture0startvirtualendtexture_namecharsmax(texture_name))
        
texture_type dllfunc(DLLFunc_PM_FindTextureTypetexture_name)
        
        for (new 
i=0;i<sizeof(material_array);i++)
        {
            if (
material_array[i] == texture_type)
            {
                if ( !(
clamp(get_pcvar_num(pcv_materials), 0power(2sizeof(material_array)) - 1) & texture_type ) )
                {
                    
free_tr2(trace)
                    return 
HAM_IGNORED
                
}
                
                break
            }
        }
    }
    else
    {
        
free_tr2(trace)
        return 
HAM_IGNORED
    
}
    
    if (
fraction != 1.0)
    {
        if (
get_tr2(traceTR_pHit) != 0)
        {
            if (
<= get_tr2(traceTR_pHit) <= g_maxplayers)
            {
                
last_ric_shooter[get_tr2(traceTR_pHit)] = 0
            
}
            
            
free_tr2(trace)
            return 
HAM_IGNORED
        
}
        else
        {
            
get_tr2(traceTR_vecPlaneNormalorigin)
            
get_tr2(traceTR_vecEndPosend)
            
            
xs_vec_sub(startendstart)
            
            
xs_vec_normalize(startstart)
            
            
free_tr2(trace)
            
            return (
xs_vec_dot(startorigin) <= ANGLE_RIC_MAX_COS) ? HAM_SUPERCEDE HAM_IGNORED
        
}
    }
    
    
get_tr2(thdlTR_vecPlaneNormalorigin)
    
    
xs_vec_sub(startendstart)
    
    
xs_vec_normalize(startstart)
    
    
fraction xs_vec_dot(startorigin)
    
    if (
fraction ANGLE_RIC_MAX_COS)
    {
        
free_tr2(trace)
        return 
HAM_IGNORED
    
}
    
xs_vec_mul_scalar(originfractionorigin)
    
xs_vec_sub(originstartstart)
    
xs_vec_mul_scalar(start, (1-(fraction*fraction))/xs_vec_len(start), start)
    
xs_vec_add(originstartorigin)
    
    
xs_vec_mul_scalar(origin16000.0origin)
    
xs_vec_add(originendorigin)
    
    
msg_ricochet(end)
    
    
engfunc(EngFunc_TraceLineendoriginDONT_IGNORE_MONSTERS, -1trace)
    
    
get_tr2(traceTR_vecEndPosorigin)
    
    if (
get_pcvar_num(pcv_tracers))
        
msg_tracer(endorigin)
    
    new 
hit get_tr2(traceTR_pHit)
    
    if (
hit > -1)
    {
        
ExecuteHamB(Ham_TraceAttackhitattacker, (damage * (floatclamp(get_pcvar_float(pcv_damage_percent), 0.0100.0)) / 100.0 ), endtracebits)
        
        if (
<= hit <= g_maxplayers)
        {
            if (
cs_get_user_team(attacker) != cs_get_user_team(hit))
            {
                
last_ric_shooter[hit] = attacker
                
                
new CsArmorType:armor
                
new hitgroup get_tr2(traceTR_iHitgroup)
                
                
cs_get_user_armor(hitarmor)
                
                switch (
hitgroup)
                {
                    case 
HIT_SHIELD:
                    {
                        
emit_sound(hitCHAN_BODYsounds[random(2)], VOL_NORMATTN_STATIC0PITCH_NORM)
                    }
                    case 
HIT_HEAD:
                    {
                        if (
armor == CS_ARMOR_VESTHELM)
                        {
                            
emit_sound(hitCHAN_BODYsounds[5], VOL_NORMATTN_STATIC0PITCH_NORM)
                        }
                        else
                        {
                            
emit_sound(hitCHAN_BODYsounds[random(3)], VOL_NORMATTN_STATIC0PITCH_NORM)
                        }
                    }
                    case 
HIT_STOMACHHIT_CHEST:
                    {
                        if (
armor == CS_ARMOR_KEVLAR || armor == CS_ARMOR_VESTHELM)
                        {
                            
emit_sound(hitCHAN_BODYsounds[4], VOL_NORMATTN_STATIC0PITCH_NORM)
                        }
                        else
                        {
                            
emit_sound(hitCHAN_BODYsounds[3], VOL_NORMATTN_STATIC0PITCH_NORM)
                        }
                    }
                    default:
                    {
                        
emit_sound(hitCHAN_BODYsounds[3], VOL_NORMATTN_STATIC0PITCH_NORM)
                    }
                }
                
            }
            else
            {
                if (
get_pcvar_num(pcv_ff))
                {
                    
last_ric_shooter[hit] = attacker
                    
                    
new CsArmorType:armor
                    
new hitgroup get_tr2(traceTR_iHitgroup)
                    
                    
cs_get_user_armor(hitarmor)
                    
                    switch (
hitgroup)
                    {
                        case 
HIT_SHIELD:
                        {
                            
emit_sound(hitCHAN_BODYsounds[random(2)], VOL_NORMATTN_STATIC0PITCH_NORM)
                        }
                        case 
HIT_HEAD:
                        {
                            if (
armor == CS_ARMOR_VESTHELM)
                            {
                                
emit_sound(hitCHAN_BODYsounds[5], VOL_NORMATTN_STATIC0PITCH_NORM)
                            }
                            else
                            {
                                
emit_sound(hitCHAN_BODYsounds[random(3)], VOL_NORMATTN_STATIC0PITCH_NORM)
                            }
                        }
                        case 
HIT_STOMACHHIT_CHEST:
                        {
                            if (
armor == CS_ARMOR_KEVLAR || armor == CS_ARMOR_VESTHELM)
                            {
                                
emit_sound(hitCHAN_BODYsounds[4], VOL_NORMATTN_STATIC0PITCH_NORM)
                            }
                            else
                            {
                                
emit_sound(hitCHAN_BODYsounds[3], VOL_NORMATTN_STATIC0PITCH_NORM)
                            }
                        }
                        default:
                        {
                            
emit_sound(hitCHAN_BODYsounds[3], VOL_NORMATTN_STATIC0PITCH_NORM)
                        }
                    }
                }
                else
                {
                    
emit_sound(hitCHAN_BODYsounds[4], VOL_NORMATTN_STATIC0PITCH_NORM)
                }
            }
        }
    }
    else
    {
        
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYorigin0)
        
write_byte(TE_GUNSHOTDECAL)
        
engfunc(EngFunc_WriteCoordorigin[0])
        
engfunc(EngFunc_WriteCoordorigin[1])
        
engfunc(EngFunc_WriteCoordorigin[2])
        
write_short(0)
        
write_byte(decal_shot1 random(5))
        
message_end()
        
        
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYorigin0)
        
write_byte(TE_SPARKS)
        
engfunc(EngFunc_WriteCoordorigin[0])
        
engfunc(EngFunc_WriteCoordorigin[1])
        
engfunc(EngFunc_WriteCoordorigin[2])
        
message_end()
    }
    
    
free_tr2(trace)
}
    return 
HAM_IGNORED
}

stock msg_ricochet(Float:origin[3])
{
    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYorigin0)
    
write_byte(TE_ARMOR_RICOCHET)
    
engfunc(EngFunc_WriteCoordorigin[0])
    
engfunc(EngFunc_WriteCoordorigin[1])
    
engfunc(EngFunc_WriteCoordorigin[2])
    
write_byte(3)
    
message_end()
}

/*stock draw_line(Float:start[3], Float:end[3])
{
    engfunc(EngFunc_MessageBegin, MSG_ALL, SVC_TEMPENTITY, Float:{0.0,0.0,0.0}, 0)
    write_byte(TE_BEAMPOINTS)
    engfunc(EngFunc_WriteCoord, start[0])
    engfunc(EngFunc_WriteCoord, start[1])
    engfunc(EngFunc_WriteCoord, start[2])
    engfunc(EngFunc_WriteCoord, end[0])
    engfunc(EngFunc_WriteCoord, end[1])
    engfunc(EngFunc_WriteCoord, end[2])
    write_short(beampoint)
    write_byte(0)
    write_byte(0)
    write_byte(25)
    write_byte(10)
    write_byte(0)
    write_byte(255)
    write_byte(255)
    write_byte(255)
    write_byte(127)
    write_byte(1)
    message_end()    
}*/

stock msg_tracer(Floatorigin[3], Floatend[3]) 

    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYorigin0//  MSG_PAS MSG_BROADCAST 
    
write_byte(TE_TRACER
    
engfunc(EngFunc_WriteCoordorigin[0]) 
    
engfunc(EngFunc_WriteCoordorigin[1]) 
    
engfunc(EngFunc_WriteCoordorigin[2]) 
    
engfunc(EngFunc_WriteCoordend[0]) 
    
engfunc(EngFunc_WriteCoordend[1]) 
    
engfunc(EngFunc_WriteCoordend[2]) 
    
message_end() 
}

stock is_breakable(ent)
{
    if (
ent == 0)
        return 
0
    
    
if ((((entity_get_float(entEV_FL_health) > 0.0) || (entity_get_int(entEV_INT_rendermode) == 4)) && (entity_get_float(entEV_FL_takedamage) > 0.0) && !(entity_get_int(entEV_INT_spawnflags) & SF_BREAK_TRIGGER_ONLY)))
        return 
1
    
    
return 0


cvar ric_chance ( <0 -10> standard is 10)
not work for me, rico have 100% . Please how fix to make 5-10 % ?
ExAnimo is offline
Old 07-09-2015, 11:21
intercostal_noisE
This message has been deleted by intercostal_noisE.
intercostal_noisE
Member
Join Date: May 2014
Old 07-09-2015 , 11:33   Re: CS/CZ Ricochet v2.01
Reply With Quote #63

try "ric_chance 1" if you want to get 10% chance


...

0-10%
ric_chance 0

10-20%
ric_chance 1

20-30%
ric_chance 2

30-40%
ric_chance 3

40-50%
ric_chance 4

50-60%
ric_chance 5

60-70%
ric_chance 6

70-80%
ric_chance 7

80-90%
ric_chance 8

90-100%
ric_chance 9

100%
ric_chance 10

Last edited by intercostal_noisE; 07-09-2015 at 11:34.
intercostal_noisE is offline
Old 07-10-2015, 05:36
xairgeo
This message has been deleted by xairgeo.
Krtola
Veteran Member
Join Date: Oct 2013
Location: Serbia
Old 04-16-2016 , 11:40   Re: CS/CZ Ricochet v2.01
Reply With Quote #64

PHP Code:
#define MATERIAL_CONCRETE     1 
#define MATERIAL_DIRT         2 
#define MATERIAL_GRATE        4 
#define MATERIAL_METAL        8 
#define MATERIAL_SNOW         16 
#define MATERIAL_COMPUTER     32 
#define MATERIAL_SLOSH        64 
#define MATERIAL_TILE         128 
#define MATERIAL_VENTS        256 
#define MATERIAL_WOOD         512 
#define MATERIAL_GLASS        1024 
If I understood correctly,when you totalize all except MATERIAL_GLASS,then the bullets passing only through the glass.
But actually this is not working
Krtola is offline
Send a message via Skype™ to Krtola
WAR3DM
Senior Member
Join Date: Mar 2016
Old 06-07-2016 , 15:35   Re: CS/CZ Ricochet v2.01
Reply With Quote #65

After installing this plugin, my server freezes every couple of hours

[AMXX] Forwards with more than 32 parameters are not supported (tried to prepare array # 33).

Can anyone help?
WAR3DM is offline
xairgeo
Member
Join Date: Oct 2014
Old 03-29-2017 , 18:56   Re: CS/CZ Ricochet v2.01
Reply With Quote #66

Any way to make the bullets ricochet off Tactical Shields? i've tried "ric_materials 8" for metal but it doesn't work
xairgeo is offline
Reply



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 01:34.


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