Post by ShaunCraft15 on Dec 12, 2021 18:29:40 GMT
Hello everyone i have a bullet damage edited by me
1-Bullet Damage With New Hudmessages:
link original: forums.alliedmods.net/showthread.php?p=1421505
What New in Custom Build?
- Add Current Damage to native bd_show_damage
- It support with 2 zp version
- It Same natives
Code:
#include < amxmodx >
#include < engine >
#define ZOMBIEPLAGUE50
#if defined ZOMBIEPLAGUE50
#include < zp50_core >
#else
#include < zombieplague >
#endif
#define VERSION "2.0"
#define DIRECTOR_HUD_MESSAGE 0
#define NORMAL_HUD_MESSAGE 1
new pCvar_VictimC, pCvar_OurselfC, pCvar_AttackerC, pCvar_BulletMode, pCvar_Bullet_Distance, pCvar_Bullet_Walls,
pCvar_Bullet_ShowSpec, pCvar_Bullet_Hs_Mode, pCvar_Bullet_Text_Mode, pCvar_Bullet_Show_Mode, pCvar_Accumulated_Damage
new dhud_color, dhud_x, dhud_y, dhud_effect, dhud_fxtime, dhud_holdtime, dhud_fadeintime, dhud_fadeouttime, dhud_reliable
new Float: Yv[ 33 ], Float: Xv[ 33 ] /* Victim*/, Float: Ya[ 33 ], Float: Xa[ 33 ] // Attacker
new bool: ShowMeThisHud[ 33 ], MyCurrentDamages[ 33 ], iSyncObj
public plugin_init( )
{
register_plugin( "Bullet Damage", VERSION, "Bboy Grun & ShaunCraft" )
register_cvar( "Director_bullet_dmg", VERSION, FCVAR_SERVER | FCVAR_SPONLY )
set_cvar_string( "Director_bullet_dmg", VERSION )
register_event( "Damage", "Event_Damage", "b", "2!0", "3=0", "4!0" )
register_clcmd( "say /showbd", "Say_showbd" )
register_clcmd( "say showbd", "Say_showbd" )
iSyncObj = CreateHudSyncObj( )
pCvar_BulletMode = register_cvar( "Bullet_Damage_Mode", "0" )
pCvar_Bullet_Distance = register_cvar( "Bullet_Damage_Distance", "600" )
pCvar_Bullet_Walls = register_cvar( "Bullet_Damage_NoShowWalls", "0" )
pCvar_Bullet_ShowSpec = register_cvar( "Bullet_Show_Spec", "1" )
pCvar_Bullet_Hs_Mode = register_cvar( "Bullet_Hs_Mode", "0" )
pCvar_Bullet_Text_Mode = register_cvar( "Bullet_Text_Mode", "0" )
pCvar_Bullet_Show_Mode = register_cvar( "Bullet_Show_Mode", "0" )
pCvar_Accumulated_Damage = register_cvar( "Show_Accumulated_Damage", "1" )
pCvar_VictimC = register_cvar( "Color_RGB_Victim", "255000000" )
pCvar_AttackerC = register_cvar( "Color_RGB_Attacker", "000255000" )
pCvar_OurselfC = register_cvar( "Color_RGB_Ourself_Teammate", "255102021" )
}
public plugin_natives( )
{
register_native( "bd_show_damage", "native_bd_show_damage", 0 )
register_native( "bd_show_text", "native_bd_show_text", 0 )
register_native( "bd_show_currentdmg", "native_bd_show_current", 0)
}
// HELP : http://forums.alliedmods.net/showthread.php?p=1436434#post1436434 Thanks to schmurgel1983
public native_bd_show_text( iPlugin, iParams )
{
new id = get_param( 1 )
if( !is_user_connected( id ) ) // user disconnected .. return 0
{
return 0
}
new Text[ 128 ], Attacker, Size
Attacker = get_param( 2 )
Size = get_param( 3 )
get_string( 3, Text, charsmax( Text ) )
show_client_text( id, Text, Attacker, Size )
if( Attacker ) // Is the player attacker ? Yes = 1 -- No = 0
{
CheckPosition( id, Attacker )
return 1
}
CheckPosition( id, 0 )
return 1
}
public native_bd_show_damage( iPlugin, iParams )
{
new id = get_param( 1 )
if( !is_user_connected( id ) )
{
return 0
}
new damage, style, Attacker
damage = get_param( 2 ); style = get_param( 3 ); Attacker = get_param( 4 )
show_client_value( id, damage, Attacker, style )
#if defined ZOMBIEPLAGUE50
if( Attacker && !zp_core_is_zombie( Attacker )) // Is the player attacker ? Yes = 1 -- No = 0
#else
if( Attacker && !zp_get_user_zombie( Attacker )) // Is the player attacker ? Yes = 1 -- No = 0
#endif
{
MyCurrentDamages[ Attacker ] += damage
UpdateDamages( Attacker )
CheckPosition( id, Attacker )
return 1
}
CheckPosition( id, 0 )
return 1
}
// Director Hud Message, go to : http://forums.alliedmods.net/showthread.php?t=149210 by : ARKSHINE
public Event_Damage( Victim )
{
static Attacker, AttackerWpn, VictimBodyPart
Attacker = get_user_attacker( Victim, AttackerWpn, VictimBodyPart )
if( !is_user_alive( Attacker ) || ( get_pcvar_num( pCvar_Bullet_Walls ) && !is_visible( Attacker, Victim ) ) )
{
return;
}
static damage, R, G, B, pCvar_H, pCvar_TMODE
damage = read_data( 2 )
pCvar_H = get_pcvar_num( pCvar_Bullet_Hs_Mode )
pCvar_TMODE = get_pcvar_num( pCvar_Bullet_Text_Mode )
static AttackerOrigin[ 3 ], VictimOrigin[ 3 ]
if( Attacker != Victim && get_user_team( Attacker ) != get_user_team( Victim ) )
{
if( pCvar_H > 0 && VictimBodyPart == HIT_HEAD )
{
if( pCvar_H == 1 )
{
show_client_value( Victim, damage, 0, DIRECTOR_HUD_MESSAGE )
show_client_value( Attacker, damage, 1, DIRECTOR_HUD_MESSAGE )
}
else
{
show_client_text( Victim, "HEADSHOT", 0, pCvar_TMODE )
show_client_text( Attacker, "HEADSHOT", 1, pCvar_TMODE )
}
}
else
{
if( !get_pcvar_num( pCvar_BulletMode ) )
{
show_client_value( Victim, damage, 0, DIRECTOR_HUD_MESSAGE )
show_client_value( Attacker, damage, 1, DIRECTOR_HUD_MESSAGE )
}
else
{
get_user_origin( Attacker, AttackerOrigin )
get_user_origin( Victim, VictimOrigin )
if( get_distance( AttackerOrigin, VictimOrigin ) > get_pcvar_num( pCvar_Bullet_Distance ) )
{
show_client_value( Victim, damage, 0, NORMAL_HUD_MESSAGE )
show_client_value( Attacker, damage, 1, NORMAL_HUD_MESSAGE )
}
else
{
show_client_value( Victim, damage, 0, DIRECTOR_HUD_MESSAGE )
show_client_value( Attacker, damage, 1, DIRECTOR_HUD_MESSAGE )
}
}
}
CheckPosition( Victim, 0 )
CheckPosition( Attacker, 1 )
if( MyCurrentDamages[ Attacker ] == -1 || !get_pcvar_num( pCvar_Accumulated_Damage ) )
{
// MyCurrentDamages[ Attacker ] == -1 : The player is a BOT
return;
}
MyCurrentDamages[ Attacker ] += damage
UpdateDamages( Attacker )
}
else
{
// http://forums.alliedmods.net/showthread.php?t=62224
static iColor; iColor = get_pcvar_num( pCvar_OurselfC )
R = iColor / 1000000
iColor %= 1000000
G = iColor / 1000
B = iColor % 1000
set_dhudmessage( R, G, B, -1.0, -1.0, 2, 0.0, 2.0, 0.1, 0.1 )
show_dhudmessage( Victim, "%i", damage ) // Show the damages to the player
}
}
public Say_showbd( id )
{
if( ShowMeThisHud[ id ] )
{
ShowMeThisHud[ id ] = false
client_print( id, print_chat, "[ BULLET DAMAGE %s ] STATUS : OFF", VERSION )
return;
}
client_print( id, print_chat, "[ BULLET DAMAGE %s ] STATUS : ON", VERSION )
ShowMeThisHud[ id ] = true
}
public client_putinserver( id )
{
iRefreshHudPosition( id )
ShowMeThisHud[ id ] = true
MyCurrentDamages[ id ] = is_user_bot( id ) ? -1 : 0
// Don't show Current Accumulated Damages to bots
}
// Director Hud Message, go to : http://forums.alliedmods.net/showthread.php?t=149210 by : ARKSHINE
stock set_dhudmessage( red = 0, green = 160, blue = 0, Float:x = -1.0, Float:y = 0.65, effects = 2, Float:fxtime = 6.0, Float:holdtime = 3.0, Float:fadeintime = 0.1, Float:fadeouttime = 1.5, bool:reliable = false )
{
#define clamp_byte(%1) ( clamp( %1, 0, 255 ) )
#define pack_color(%1,%2,%3) ( %3 + ( %2 << 8 ) + ( %1 << 16 ) )
dhud_color = pack_color( clamp_byte( red ), clamp_byte( green ), clamp_byte( blue ) )
dhud_x = _: x
dhud_y = _: y
dhud_effect = effects
dhud_fxtime = _: fxtime
dhud_holdtime = _: holdtime
dhud_fadeintime = _: fadeintime
dhud_fadeouttime = _: fadeouttime
dhud_reliable = _: reliable
return 1;
}
stock show_dhudmessage( index, const message[ ], any:... )
{
new buffer[ 128 ]
new numArguments = numargs( )
if( numArguments == 2 )
{
send_dhudMessage( index, message )
}
else if( index || numArguments == 3 )
{
vformat( buffer, charsmax( buffer ), message, 3 )
send_dhudMessage( index, buffer )
}
else
{
new playersList[ 32 ], numPlayers;
get_players( playersList, numPlayers, "ch" )
if( !numPlayers )
{
return 0;
}
new Array:handleArrayML = ArrayCreate()
for( new i = 2, j; i < numArguments; i++ )
{
if( getarg( i ) == LANG_PLAYER )
{
while( ( buffer[ j ] = getarg( i + 1, j++ ) ) ) {}
j = 0
if( GetLangTransKey( buffer ) != TransKey_Bad )
{
ArrayPushCell( handleArrayML, i++ )
}
}
}
new size = ArraySize( handleArrayML )
if( !size )
{
vformat( buffer, charsmax( buffer ), message, 3 )
send_dhudMessage( index, buffer )
}
else
{
for( new i = 0, j; i < numPlayers; i++ )
{
index = playersList[ i ]
for( j = 0; j < size; j++ )
{
setarg( ArrayGetCell( handleArrayML, j ), 0, index )
}
vformat( buffer, charsmax( buffer ), message, 3 )
send_dhudMessage( index, buffer )
}
}
ArrayDestroy( handleArrayML )
}
return 1;
}
stock send_dhudMessage( const index, const message[ ] )
{
message_begin( dhud_reliable ? ( index ? MSG_ONE : MSG_ALL ) : ( index ? MSG_ONE_UNRELIABLE : MSG_BROADCAST ), SVC_DIRECTOR, _, index )
{
write_byte( strlen( message ) + 31 )
write_byte( DRC_CMD_MESSAGE )
write_byte( dhud_effect )
write_long( dhud_color )
write_long( dhud_x )
write_long( dhud_y )
write_long( dhud_fadeintime )
write_long( dhud_fadeouttime )
write_long( dhud_holdtime )
write_long( dhud_fxtime )
write_string( message )
}
message_end()
}
UpdateDamages( id )
{
if( !ShowMeThisHud[ id ] )
{
return;
}
set_hudmessage( 0, 255, 0, -1.0, -0.50, 0, 0.0, 4.0, 0.0, 1.0, -1 )
ShowSyncHudMsg( id, iSyncObj, "%d", MyCurrentDamages[ id ] )
if( task_exists( 999_666_999 + id ) )
{
remove_task( 999_666_999 + id )
}
set_task( 5.0, "ResetCurrentDamages", 999_666_999 + id )
}
public ResetCurrentDamages( TaskID )
{
MyCurrentDamages[ TaskID - 999_666_999 ] = 0
}
show_client_value( id, damage, Attacker, iSize )
{
if( !ShowMeThisHud[ id ] )
{
return;
}
static iColor, R, G, B, Float: Y_Pos, Float: X_Pos
if( Attacker ) // The user is the Attacker ( Attacker value = 1 )
{
// Attacker
iColor = get_pcvar_num( pCvar_AttackerC )
Y_Pos = Ya[ id ]
X_Pos = Xa[ id ]
}
else
{
// Victim
iColor = get_pcvar_num( pCvar_VictimC )
Y_Pos = Yv[ id ]
X_Pos = Xv[ id ]
}
R = iColor / 1000000
iColor %= 1000000
G = iColor / 1000
B = iColor % 1000
if( iSize )
{
set_hudmessage( R, G, B, X_Pos, Y_Pos, 2, 0.0, 1.0, 0.02, 0.02 )
show_hudmessage( id, "%i", damage )
}
else
{
set_dhudmessage( R, G, B, X_Pos, Y_Pos, 2, 0.0, 1.0, 0.02, 0.02 )
show_dhudmessage( id, "%i", damage )
}
if( !get_pcvar_num( pCvar_Bullet_ShowSpec ) )
{
return;
}
SpectatorHud( id, damage, _, 0, iSize, Float: X_Pos, Float: Y_Pos, R, G, B )
}
show_client_text( id, iText[ ], Attacker, iSize )
{
if( !ShowMeThisHud[ id ] )
{
return;
}
static iColor, R, G, B, Float: Y_Pos, Float: X_Pos
if( Attacker ) // The user is the Attacker ( Attacker value = 1 )
{
// Attacker
iColor = get_pcvar_num( pCvar_AttackerC )
Y_Pos = Ya[ id ]
X_Pos = Xa[ id ]
}
else
{
// Victim
iColor = get_pcvar_num( pCvar_VictimC )
Y_Pos = Yv[ id ]
X_Pos = Xv[ id ]
}
R = iColor / 1000000
iColor %= 1000000
G = iColor / 1000
B = iColor % 1000
if( !iSize )
{
set_dhudmessage( R, G, B, X_Pos, Y_Pos, 2, 0.0, 1.0, 0.02, 0.02 )
show_dhudmessage( id, "%s", iText )
}
else
{
set_hudmessage( R, G, B, X_Pos, Y_Pos, 2, 0.0, 1.0, 0.02, 0.02, -1 )
show_hudmessage( id, "%s", iText )
}
if( !get_pcvar_num( pCvar_Bullet_ShowSpec ) )
{
return;
}
SpectatorHud( id, _, iText, 1, iSize, Float: X_Pos, Float: Y_Pos, R, G, B )
}
SpectatorHud( id, iDamage = 0, iText[ ] = "", TextMode, Size, Float: X_Pos, Float: Y_Pos, R, G, B )
{
static iPlayers[ 32 ], iNum
get_players( iPlayers, iNum, "bch" )
for( new i = 0, Spectator = iPlayers[ 0 ]; i < iNum; Spectator = iPlayers[ i++ ] )
{
if( ShowMeThisHud[ Spectator ] && entity_get_int( Spectator, EV_INT_iuser2 ) == id )
{
if( !Size )
{
set_dhudmessage( R, G, B, X_Pos, Y_Pos, 2, 0.0, 1.0, 0.02, 0.02 )
TextMode ? show_dhudmessage( Spectator, "%s", iText ) : show_dhudmessage( Spectator, "%d", iDamage )
}
else
{
set_hudmessage( R, G, B, X_Pos, Y_Pos, 2, 0.0, 1.0, 0.02, 0.02, -1 )
TextMode ? show_hudmessage( Spectator, "%s", iText ) : show_hudmessage( Spectator, "%d", iDamage )
}
}
}
}
iRefreshHudPosition( id )
{
switch( get_pcvar_num( pCvar_Bullet_Show_Mode ) )
{
case 0:
{
Ya[ id ] = -0.50
Xa[ id ] = -0.70
Yv[ id ] = -0.45
Xv[ id ] = -0.30
}
case 1:
{
Ya[ id ] = 0.55
Xa[ id ] = 0.53
Xv[ id ] = 0.45
Yv[ id ] = 0.50
}
case 2:
{
Ya[ id ] = -0.35
Xa[ id ] = -0.70
Yv[ id ] = -0.20
Xv[ id ] = -0.70
}
case 3:
{
Xv[ id ] = -0.80
Yv[ id ] = -0.90
Xa[ id ] = -0.20
Ya[ id ] = -0.90
}
}
}
CheckPosition( id, Attacker )
{
switch( get_pcvar_num( pCvar_Bullet_Show_Mode ) )
// [ 0 = CIRCLE ] [ 1 = VERTICAL ] [ 2 = HORIZONTAL ] [ 3 = ARCH OF CIRCLE ]
{
case 0:
{
if( Attacker )
{
switch( Xa[ id ] )
{
case -0.70: // First attack
{
Xa[ id ] = -0.575
Ya[ id ] = -0.60
}
case -0.575: // Second
{
Xa[ id ] = -0.50
Ya[ id ] = -0.625
}
case -0.50: // Third
{
Xa[ id ] = -0.425
Ya[ id ] = -0.60
}
case -0.425: // Fourth
{
Xa[ id ] = -0.30
Ya[ id ] = -0.50
}
case -0.30: // Last
{
Xa[ id ] = -0.70
}
default: iRefreshHudPosition( id )
}
}
else
{
switch( Xv[ id ] )
{
case -0.30: // First attack
{
Xv[ id ] = -0.425
Yv[ id ] = -0.35
}
case -0.425: // Second
{
Xv[ id ] = -0.50
Yv[ id ] = -0.30
}
case -0.50: // Third
{
Xv[ id ] = -0.575
Yv[ id ] = -0.35
}
case -0.575: // fourth
{
Xv[ id ] = -0.70
Yv[ id ] = -0.45
}
case -0.70: // Last
{
Xv[ id ] = -0.30
}
default: iRefreshHudPosition( id )
}
}
}
case 1:
{
if( Attacker )
{
Ya[ id ] += 0.05
if( Ya[ id ] >= 0.90 )
{
Ya[ id ] = 0.55
}
}
else
{
Yv[ id ] += 0.05
if( Yv[ id ] >= 0.85 )
{
Yv[ id ] = 0.50
}
}
}
case 2:
{
if( Attacker )
{
Xa[ id ] += 0.05
if( Xa[ id ] >= -0.35 )
{
Xa[ id ] = -0.70
}
}
else
{
Xa[ id ] += 0.05
if( Xv[ id ] >= -0.35 )
{
Xv[ id ] = -0.70
}
}
}
case 3:
{
if( Attacker )
{
switch( Xa[ id ] )
{
case -0.20: // First attack
{
if( Ya[ id ] == -0.20 )
{
Xa[ id ] = -0.20
Ya[ id ] = -0.90
}
else
{
Xa[ id ] = -0.15
Ya[ id ] = -0.80
}
}
case -0.15:
{
switch( Ya[ id ] )
{
case -0.80: Ya[ id ] = -0.70
case -0.70: Ya[ id ] = -0.60
case -0.60: Ya[ id ] = -0.50
case -0.50: Ya[ id ] = -0.40
case -0.40: Ya[ id ] = -0.30
case -0.30:
{
Xa[ id ] = -0.20
Ya[ id ] = -0.20
}
}
}
default: iRefreshHudPosition( id )
}
}
else
{
switch( Xv[ id ] )
{
case -0.80: // First attack
{
if( Yv[ id ] == -0.20 )
{
Xv[ id ] = -0.80
Yv[ id ] = -0.90
}
else
{
Xv[ id ] = -0.85
Yv[ id ] = -0.80
}
}
case -0.85:
{
switch( Yv[ id ] )
{
case -0.80: Yv[ id ] = -0.70
case -0.70: Yv[ id ] = -0.60
case -0.60: Yv[ id ] = -0.50
case -0.50: Yv[ id ] = -0.40
case -0.40: Yv[ id ] = -0.30
case -0.30:
{
Xv[ id ] = -0.80
Yv[ id ] = -0.20
}
}
}
default: iRefreshHudPosition( id )
}
}
}
default: iRefreshHudPosition( id )
}
}
2-Advanced Bullet Damage:
link original: forums.alliedmods.net/showthread.php?p=789735
What New in Custom Build?
- Add Native to this plugin
link original: forums.alliedmods.net/showthread.php?p=789735
What New in Custom Build?
- Add Native to this plugin
Code:
/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#define PLUGIN "Advanced Bullet Damage"
#define VERSION "1.0"
#define AUTHOR "Sn!ff3r"
new g_type, g_enabled, g_hudmsg1
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0")
register_event("HLTV", "on_new_round", "a", "1=0", "2=0")
g_type = register_cvar("amx_bulletdamage","1")
g_hudmsg1 = CreateHudSyncObj()
}
public plugin_natives()
{
register_native("bd2_show_damage", "native_bd2_show_damage")
}
public native_bd2_show_damage( iPlugin, iParams )
{
new id = get_param( 1 )
if( !is_user_connected( id ) )
{
return 0
}
new damage
damage = get_param( 2 )
show_client_value( id, damage )
return 1
}
show_client_value( id, damage )
{
if(is_user_connected(id))
{
switch(g_enabled)
{
case 1: {
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(id, g_hudmsg1, "%i^n", damage)
}
case 2: {
if(fm_is_ent_visible(id,id))
{
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(id, g_hudmsg1, "%i^n", damage)
}
}
}
}
}
public on_new_round()
{
g_enabled = get_pcvar_num(g_type)
}
public on_damage(id)
{
if(g_enabled)
{
static attacker; attacker = get_user_attacker(id)
static damage; damage = read_data(2)
if(is_user_connected(attacker))
{
switch(g_enabled)
{
case 1: {
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(attacker, g_hudmsg1, "%i^n", damage)
}
case 2: {
if(fm_is_ent_visible(attacker,id))
{
set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
ShowSyncHudMsg(attacker, g_hudmsg1, "%i^n", damage)
}
}
}
}
}
}
Example of code:
/*======================================================*\
|| [ZP] Extra Item : Plasma Rifle ||
|| by Sh0oT3R ||
\*======================================================*/
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <engine>
#include <cstrike>
#include <fakemeta>
#include <xs>
#include <zp50_core>
#include <zp50_class_plasma>
#include <zp50_class_survivor>
#include <zp50_class_nemesis>
#include <zp50_class_assassin>
#include <zp50_class_dragon>
#include <zp50_item_zombie_madness>
#include <fun>
#define BULLET_DAMAGE_CUSTOM_BUILD
#if defined BULLET_DAMAGE_CUSTOM_BUILD
native bd_show_damage( index, damage, Attacker, style )
native bd2_show_damage( index, damage )
#endif
#define fm_create_entity(%1) engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, %1))
#define fm_get_user_velocity(%1,%2) pev(%1, pev_velocity, %2)
#define VERSION "1.0"
#define AUTHOR "Sh0oT3R"
#define CSW_WPN CSW_FAMAS
new const weapon[] = "weapon_famas"
new const spr_beam[] = "sprites/plasma/plasma_beam.spr"
new const spr_exp[] = "sprites/plasma/plasma_exp.spr"
new const spr_blood[] = "sprites/blood.spr"
new const snd_fire[][] = { "plasma/plasma_fire.wav" }
new const snd_reload[][] = { "plasma/plasma_reload.wav" }
new const snd_hit[][] = { "plasma/plasma_hit.wav" }
new cvar_firerate, cvar_hitsd, cvar_reloadspd
new bool:g_HasRifle[33]
new g_iCurWpn[33], Float:g_flLastFireTime[33]
new g_sprBeam, g_sprExp, g_sprBlood, g_msgDamage, g_msgScreenFade, g_msgScreenShake, cvar_dmg_head, cvar_dmg_chest, cvar_dmg_leg, cvar_dmg_arm, cvar_dmg_stomach
const m_pPlayer = 41
const m_fInReload = 54
const m_pActiveItem = 373
const m_flNextAttack = 83
const m_flTimeWeaponIdle = 48
const m_flNextPrimaryAttack = 46
const m_flNextSecondaryAttack = 47
const UNIT_SECOND = (1<<12)
const ENG_NULLENT = -1
const WPN_MAXCLIP = 25
const ANIM_FIRE = 5
const ANIM_DRAW = 10
const ANIM_RELOAD = 9
const EV_INT_WEAPONKEY = EV_INT_impulse
const WPNKEY = 2816
public plugin_init()
{
register_plugin("[ZP] Extra Item: Plasma Rifle", VERSION, AUTHOR)
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0");
register_event("CurWeapon", "event_CurWeapon", "b", "1=1")
register_forward(FM_CmdStart, "fw_CmdStart")
register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Item_Deploy, weapon, "fw_Deploy_Post", 1)
RegisterHam(Ham_Item_AddToPlayer, weapon, "fw_AddToPlayer")
RegisterHam(Ham_Weapon_Reload, weapon, "fw_Reload_Post", 1)
RegisterHam(Ham_Item_PostFrame, weapon, "fw_PostFrame")
cvar_firerate = register_cvar("zp_plasma_riffle_firerate", "0.2")
cvar_hitsd = register_cvar("zp_plasma_riffle_hitsd", "0")
cvar_reloadspd = register_cvar("zp_plasma_riffle_reload_spd", "5")
cvar_dmg_head = register_cvar("zp_plasma_riffle_dmg_head", "1492")
cvar_dmg_chest = register_cvar("zp_plasma_riffle_dmg_chest", "451")
cvar_dmg_stomach = register_cvar("zp_plasma_riffle_dmg_stomach", "436")
cvar_dmg_leg = register_cvar("zp_plasma_riffle_dmg_leg", "249")
cvar_dmg_arm = register_cvar("zp_plasma_riffle_dmg_arm", "651")
g_msgDamage = get_user_msgid("Damage")
g_msgScreenFade = get_user_msgid("ScreenFade")
g_msgScreenShake = get_user_msgid("ScreenShake")
}
public zp_fw_core_cure_post(id, attacker)
{
if(zp_class_plasma_get(id))
{
g_HasRifle[id] = true
give_item(id, "weapon_famas")
fm_set_user_bpammo(id, CSW_FAMAS, 90)
}
}
public plugin_precache()
{
precache_model("models/zombie_plague/plasma/v_plasma.mdl")
precache_model("models/zombie_plague/plasma/p_plasma.mdl")
g_sprBlood = precache_model(spr_blood)
g_sprBeam = precache_model(spr_beam)
g_sprExp = precache_model(spr_exp)
static i
for(i = 0; i < sizeof snd_fire; i++)
precache_sound(snd_fire[i])
for(i = 0; i < sizeof snd_hit; i++)
precache_sound(snd_hit[i])
for(i = 0; i < sizeof snd_reload; i++)
precache_sound(snd_reload[i])
}
public event_CurWeapon(id)
{
if(!is_user_alive(id))
return PLUGIN_CONTINUE
g_iCurWpn[id] = read_data(2)
if(zp_core_is_zombie(id) || zp_class_survivor_get(id))
return PLUGIN_CONTINUE
if(!g_HasRifle[id] || g_iCurWpn[id] != CSW_WPN)
return PLUGIN_CONTINUE
entity_set_string(id, EV_SZ_viewmodel, "models/zombie_plague/plasma/v_plasma.mdl")
entity_set_string(id, EV_SZ_weaponmodel, "models/zombie_plague/plasma/p_plasma.mdl")
return PLUGIN_CONTINUE
}
public zp_fw_core_cure_pre(id)
{
g_HasRifle[id] = false
}
public zp_fw_core_infect_post(id)
{
g_HasRifle[id] = false
}
public fw_PlayerKilled(victim, attacker, shouldgib)
{
if(is_user_alive(victim))
{
g_HasRifle[victim] = false
return HAM_HANDLED
}
return HAM_IGNORED
}
public Event_NewRound()
{
for (new i = 1; i <= get_maxplayers(); i++)
{
g_HasRifle[i] = false
}
}
public client_putinserver(id)
{
g_HasRifle[id] = false
}
public client_disconnect(id)
{
g_HasRifle[id] = false
}
public fw_CmdStart(id, handle, seed)
{
if(!is_user_alive(id))
return FMRES_IGNORED
if(!g_HasRifle[id])
return FMRES_IGNORED
if(zp_core_is_zombie(id) || zp_class_survivor_get(id))
return FMRES_IGNORED
if(g_iCurWpn[id] != CSW_WPN)
return FMRES_IGNORED
static iButton
iButton = get_uc(handle, UC_Buttons)
if(iButton & IN_ATTACK)
{
set_uc(handle, UC_Buttons, iButton & ~IN_ATTACK)
static Float:flCurTime
flCurTime = halflife_time()
if(flCurTime - g_flLastFireTime[id] < get_pcvar_float(cvar_firerate))
return FMRES_IGNORED
static iWpnID, iClip
iWpnID = get_pdata_cbase(id, m_pActiveItem, 5)
iClip = cs_get_weapon_ammo(iWpnID)
if(get_pdata_int(iWpnID, m_fInReload, 4))
return FMRES_IGNORED
set_pdata_float(iWpnID, m_flNextPrimaryAttack, get_pcvar_float(cvar_firerate), 4)
set_pdata_float(iWpnID, m_flNextSecondaryAttack, get_pcvar_float(cvar_firerate), 4)
set_pdata_float(iWpnID, m_flTimeWeaponIdle, get_pcvar_float(cvar_firerate), 4)
g_flLastFireTime[id] = flCurTime
if(iClip <= 0)
{
ExecuteHamB(Ham_Weapon_PlayEmptySound, iWpnID)
return FMRES_IGNORED
}
primary_attack(id)
//make_punch(id, 50)
cs_set_weapon_ammo(iWpnID, --iClip)
return FMRES_IGNORED
}
return FMRES_IGNORED
}
public fw_UpdateClientData_Post(id, sendweapons, handle)
{
if(!is_user_alive(id))
return FMRES_IGNORED
if(!g_HasRifle[id])
return FMRES_IGNORED
if(zp_core_is_zombie(id) || zp_class_survivor_get(id))
return FMRES_IGNORED
if(g_iCurWpn[id] != CSW_WPN)
return FMRES_IGNORED
set_cd(handle, CD_flNextAttack, halflife_time() + 0.001)
return FMRES_HANDLED
}
public fw_Deploy_Post(wpn)
{
static id
id = get_pdata_cbase(wpn, m_pPlayer, 4)
if(is_user_connected(id) && g_HasRifle[id])
{
set_wpnanim(id, ANIM_DRAW)
}
return HAM_IGNORED
}
public fw_AddToPlayer(wpn, id)
{
if(is_valid_ent(wpn) && is_user_connected(id) && entity_get_int(wpn, EV_INT_WEAPONKEY) == WPNKEY)
{
g_HasRifle[id] = true
entity_set_int(wpn, EV_INT_WEAPONKEY, 0)
return HAM_HANDLED
}
return HAM_IGNORED
}
public fw_PostFrame(wpn)
{
static id
id = get_pdata_cbase(wpn, m_pPlayer, 4)
if(is_user_alive(id) && g_HasRifle[id])
{
static Float:flNextAttack, iBpAmmo, iClip, iInReload
iInReload = get_pdata_int(wpn, m_fInReload, 4)
flNextAttack = get_pdata_float(id, m_flNextAttack, 5)
iBpAmmo = cs_get_user_bpammo(id, CSW_WPN)
iClip = cs_get_weapon_ammo(wpn)
if(iInReload && flNextAttack <= 0.0)
{
new iRemClip = min(WPN_MAXCLIP - iClip, iBpAmmo)
cs_set_weapon_ammo(wpn, iClip + iRemClip)
cs_set_user_bpammo(id, CSW_WPN, iBpAmmo-iRemClip)
iInReload = 0
set_pdata_int(wpn, m_fInReload, 0, 4)
}
static iButton
iButton = get_user_button(id)
if((iButton & IN_ATTACK2 && get_pdata_float(wpn, m_flNextSecondaryAttack, 4) <= 0.0) || (iButton & IN_ATTACK && get_pdata_float(wpn, m_flNextPrimaryAttack, 4) <= 0.0))
return
if(iButton & IN_RELOAD && !iInReload)
{
if(iClip >= WPN_MAXCLIP)
{
entity_set_int(id, EV_INT_button, iButton & ~IN_RELOAD)
set_wpnanim(id, 0)
}
else if(iClip == WPN_MAXCLIP)
{
if(iBpAmmo)
{
reload(id, wpn, 1)
}
}
}
}
}
public fw_Reload_Post(wpn)
{
static id
id = get_pdata_cbase(wpn, m_pPlayer, 4)
if(is_user_alive(id) && g_HasRifle[id] && get_pdata_int(wpn, m_fInReload, 4))
{
reload(id, wpn)
}
}
public primary_attack(id)
{
set_wpnanim(id, ANIM_FIRE)
entity_set_vector(id, EV_VEC_punchangle, Float:{ -1.5, 0.0, 0.0 })
emit_sound(id, CHAN_WEAPON, snd_fire[random_num(0, sizeof snd_fire - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
static iTarget, iBody, iEndOrigin[3], iStartOrigin[3]
get_user_origin(id, iStartOrigin, 1)
get_user_origin(id, iEndOrigin, 3)
fire_effects(iStartOrigin, iEndOrigin)
get_user_aiming(id, iTarget, iBody)
new iEnt = create_entity("info_target")
static Float:flOrigin[3]
IVecFVec(iEndOrigin, flOrigin)
entity_set_origin(iEnt, flOrigin)
remove_entity(iEnt)
if(is_user_alive(iTarget) && zp_core_is_zombie(iTarget) || is_valid_ent(iTarget) && entity_get_float(iTarget, EV_FL_takedamage) != 0.0)
{
if(get_pcvar_float(cvar_hitsd) > 0.0)
{
static Float:flVelocity[3]
fm_get_user_velocity(iTarget, flVelocity)
xs_vec_mul_scalar(flVelocity, get_pcvar_float(cvar_hitsd), flVelocity)
fm_set_user_velocity(iTarget, flVelocity)
}
new Float:iDamage, iBloodScale
if(iBody == HIT_HEAD)
{
iDamage = get_pcvar_float(cvar_dmg_head)
iBloodScale = 25
}
else if(iBody == HIT_STOMACH)
{
iDamage = get_pcvar_float(cvar_dmg_stomach)
iBloodScale = 25
}
else if(iBody == HIT_CHEST)
{
iDamage = get_pcvar_float(cvar_dmg_chest)
iBloodScale = 25
}
else if(iBody == HIT_LEFTARM)
{
iDamage = get_pcvar_float(cvar_dmg_arm)
iBloodScale = 25
}
else if(iBody == HIT_RIGHTARM)
{
iDamage = get_pcvar_float(cvar_dmg_arm)
iBloodScale = 25
}
else if(iBody == HIT_LEFTLEG)
{
iDamage = get_pcvar_float(cvar_dmg_leg)
iBloodScale = 25
}
else if(iBody == HIT_RIGHTLEG)
{
iDamage = get_pcvar_float(cvar_dmg_leg)
iBloodScale = 25
}
if(is_user_alive(iTarget) && zp_core_is_zombie(iTarget))
{
extra_dmg(iTarget, id , floatround(iDamage), "famas") // Isso vai fazer dar Pack Por dano :)
make_blood(iTarget, iBloodScale)
damage_effects(iTarget)
}
else ExecuteHamB(Ham_TakeDamage, iTarget, 0, id, iDamage, DMG_BULLET) // Tirar dano de Boss
}
}
stock fire_effects(iStartOrigin[3], iEndOrigin[3])
{
message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
write_byte(0)
write_coord(iStartOrigin[0])
write_coord(iStartOrigin[1])
write_coord(iStartOrigin[2])
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short(g_sprBeam)
write_byte(1)
write_byte(5)
write_byte(10)
write_byte(25)
write_byte(0)
write_byte(0)
write_byte(255)
write_byte(0)
write_byte(100)
write_byte(0)
message_end()
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(3)
write_coord(iEndOrigin[0])
write_coord(iEndOrigin[1])
write_coord(iEndOrigin[2])
write_short(g_sprExp)
write_byte(10)
write_byte(15)
write_byte(4)
message_end()
}
stock reload(id, wpn, force_reload = 0)
{
set_pdata_float(id, m_flNextAttack, get_pcvar_float(cvar_reloadspd), 5)
set_wpnanim(id, ANIM_RELOAD)
emit_sound(id, CHAN_WEAPON, snd_reload[random_num(0, sizeof snd_reload - 1)], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
if(force_reload)
set_pdata_int(wpn, m_fInReload, 1, 4)
}
stock damage_effects(id)
{
message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, _, id)
write_byte(0)
write_byte(0)
write_long(DMG_NERVEGAS)
write_coord(0)
write_coord(0)
write_coord(0)
message_end()
message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, {0,0,0}, id)
write_short(1<<13)
write_short(1<<14)
write_short(0x0000)
write_byte(0)
write_byte(255)
write_byte(0)
write_byte(100)
message_end()
message_begin(MSG_ONE, g_msgScreenShake, {0,0,0}, id)
write_short(0xFFFF)
write_short(1<<13)
write_short(0xFFFF)
message_end()
}
stock make_blood(id, scale)
{
new Float:iVictimOrigin[3]
pev(id, pev_origin, iVictimOrigin)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(115)
write_coord(floatround(iVictimOrigin[0]+random_num(-20,20)))
write_coord(floatround(iVictimOrigin[1]+random_num(-20,20)))
write_coord(floatround(iVictimOrigin[2]+random_num(-20,20)))
write_short(g_sprBlood)
write_short(g_sprBlood)
write_byte(248)
write_byte(scale)
message_end()
}
stock set_wpnanim(id, anim)
{
entity_set_int(id, EV_INT_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, id)
write_byte(anim)
write_byte(entity_get_int(id, EV_INT_body))
message_end()
}
stock make_punch(id, velamount)
{
static Float:flNewVelocity[3], Float:flCurrentVelocity[3]
velocity_by_aim(id, -velamount, flNewVelocity)
get_user_velocity(id, flCurrentVelocity)
xs_vec_add(flNewVelocity, flCurrentVelocity, flNewVelocity)
set_user_velocity(id, flNewVelocity)
}
stock fm_give_item(index, const item[])
{
if (!equal(item, "weapon_", 7) && !equal(item, "ammo_", 5) && !equal(item, "item_", 5) && !equal(item, "tf_weapon_", 10))
return 0;
new ent = fm_create_entity(item);
if (!pev_valid(ent))
return 0;
new Float:origin[3];
pev(index, pev_origin, origin);
set_pev(ent, pev_origin, origin);
set_pev(ent, pev_spawnflags, pev(ent, pev_spawnflags) | SF_NORESPAWN);
dllfunc(DLLFunc_Spawn, ent);
new save = pev(ent, pev_solid);
dllfunc(DLLFunc_Touch, ent, index);
if (pev(ent, pev_solid) != save)
return ent;
engfunc(EngFunc_RemoveEntity, ent);
return -1;
}
stock fm_set_user_bpammo(id, weaponid, amnt)
{
static offset;
switch(weaponid)
{
case CSW_AWP: offset = 377;
case CSW_SCOUT,CSW_AK47,CSW_G3SG1: offset = 378;
case CSW_M249: offset = 379;
case CSW_FAMAS,CSW_M4A1,CSW_AUG,CSW_SG550,CSW_GALI,CSW_SG552: offset = 380;
case CSW_M3,CSW_XM1014: offset = 381;
case CSW_USP,CSW_UMP45,CSW_MAC10: offset = 382;
case CSW_FIVESEVEN,CSW_P90: offset = 383;
case CSW_DEAGLE: offset = 384;
case CSW_P228: offset = 385;
case CSW_GLOCK18,CSW_MP5NAVY,CSW_TMP,CSW_ELITE: offset = 386;
case CSW_FLASHBANG: offset = 387;
case CSW_HEGRENADE: offset = 388;
case CSW_SMOKEGRENADE: offset = 389;
default: return 0;
}
set_pdata_int(id,offset,amnt,5);
return 1;
}
stock extra_dmg(id, attacker, damage, weaponDescription[])
{
new dmgcount[33]
if ( pev(id, pev_takedamage) == DAMAGE_NO ) return;
if ( damage <= 0 ) return;
new userHealth = get_user_health(id);
if (userHealth - damage <= 0 )
{
dmgcount[attacker] += userHealth - damage;
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_SET);
ExecuteHamB(Ham_Killed, id, attacker, 2);
set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT);
message_begin(MSG_BROADCAST, get_user_msgid("DeathMsg"));
write_byte(attacker);
write_byte(id);
write_byte(0);
write_string(weaponDescription);
message_end();
set_pev(attacker, pev_frags, float(get_user_frags(attacker) + 1));
new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];
get_user_name(attacker, kname, 31);
get_user_team(attacker, kteam, 9);
get_user_authid(attacker, kauthid, 31);
get_user_name(id, vname, 31);
get_user_team(id, vteam, 9);
get_user_authid(id, vauthid, 31);
log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
kname, get_user_userid(attacker), kauthid, kteam,
vname, get_user_userid(id), vauthid, vteam, weaponDescription);
}
else
{
ExecuteHamB(Ham_TakeDamage, id, 0, attacker, float(damage), DMG_BULLET)
#if defined BULLET_DAMAGE_CUSTOM_BUILD
bd_show_damage( attacker, damage, 0, 1 )
bd2_show_damage( attacker, damage )
bd_show_damage( id, damage, 0, 0 )
#endif
//set_pev(id, pev_health, pev(id, pev_health) - float(damage));
}
}
stock fm_set_user_velocity(entity, const Float:vector[3]) {
set_pev(entity, pev_velocity, vector);
return 1;
}