PHP Code:
#include <amxmodx>
#include <hamsandwich>
#include <fakemeta>
new const Version[] = "0.8";
#define MAX_PLAYERS 32
#define MAX_NAME_LENGTH 32
enum PlayerStats
{
Shots,
DamageGiven,
HealthBeforeDamage
}
new g_pzStats[ MAX_PLAYERS + 1 ][ MAX_PLAYERS + 1 ][ PlayerStats ];
new g_HealthAtRoundEnd[ MAX_PLAYERS + 1 ];
new HamHook:g_hTakeDamagePre , HamHook:g_hTakeDamagePost;
new bool:g_bRoundDamageShown;
new g_pEnabled;
public plugin_init()
{
register_plugin( "Round Damage" , Version , "bugsy" );
RegisterHam( Ham_Spawn , "player" , "HamSpawn_Post" , true );
DisableHamForward( g_hTakeDamagePre = RegisterHam( Ham_TakeDamage , "player" , "HamTakeDamage_Pre" , false ) );
DisableHamForward( g_hTakeDamagePost = RegisterHam( Ham_TakeDamage , "player" , "HamTakeDamage_Post" , true ) );
register_logevent( "RoundStart" , 2 , "1=Round_Start" );
register_logevent( "RoundEnd" , 2 , "1=Round_End" );
register_event( "HLTV" , "NewRound" , "a" , "1=0" , "2=0" );
g_pEnabled = register_cvar( "rd_enabled" , "1" );
}
public RoundStart()
{
ClearArray();
EnableHamForward( g_hTakeDamagePre );
EnableHamForward( g_hTakeDamagePost );
}
public RoundEnd()
{
new iPlayers[ 32 ] , iNum;
get_players( iPlayers , iNum , "ah" );
for ( new i = 0 ; i < iNum ; i++ )
{
g_HealthAtRoundEnd[ iPlayers[ i ] ] = get_user_health( iPlayers[ i ] );
}
}
public NewRound()
{
g_bRoundDamageShown = false;
DisableHamForward( g_hTakeDamagePre );
DisableHamForward( g_hTakeDamagePost );
}
public HamTakeDamage_Pre( victim , inflictor , attacker , Float:fDamage , bitDamage )
{
if ( get_pcvar_num( g_pEnabled ) )
{
g_pzStats[ attacker ][ victim ][ HealthBeforeDamage ] = get_user_health( victim );
}
}
public HamTakeDamage_Post( victim , inflictor , attacker , Float:fDamage , bitDamage )
{
if ( get_pcvar_num( g_pEnabled ) )
{
g_pzStats[ attacker ][ victim ][ Shots ]++;
g_pzStats[ attacker ][ victim ][ DamageGiven ] += clamp( g_pzStats[ attacker ][ victim ][ HealthBeforeDamage ] - get_user_health( victim ) , 0 , g_pzStats[ attacker ][ victim ][ HealthBeforeDamage ] );
}
}
public HamSpawn_Post( id )
{
if ( g_bRoundDamageShown == true )
return;
if ( is_user_alive( id ) )
{
new iPlayers[ 32 ] , iNum , iPlayer , iOtherPlayer , iDamageGiven , iDamageTaken , szName[ MAX_PLAYERS + 1 ][ 32 ];
get_players( iPlayers , iNum );
for ( new i = 0 ; i < iNum ; i++ )
{
iPlayer = iPlayers[ i ];
for ( new p = 0 ; p < iNum ; p++ )
{
iOtherPlayer = iPlayers[ p ];
if ( ( i != p ) && ( g_pzStats[ iPlayer ][ iOtherPlayer ][ DamageGiven ] || g_pzStats[ iOtherPlayer ][ iPlayer ][ DamageGiven ] ) )
{
iDamageGiven = g_pzStats[ iPlayer ][ iOtherPlayer ][ DamageGiven ];
iDamageTaken = g_pzStats[ iOtherPlayer ][ iPlayer ][ DamageGiven ];
if ( iDamageGiven || iDamageTaken )
{
if ( szName[ iOtherPlayer ][ 0 ] == EOS )
get_user_name( iOtherPlayer , szName[ iOtherPlayer ] , charsmax( szName[] ) );
client_print( iPlayer , print_chat , "(%d with %d) damage, (%d with %d) taken, %s (%dHP)" , iDamageGiven , g_pzStats[ iPlayer ][ iOtherPlayer ][ Shots ] , iDamageTaken , g_pzStats[ iOtherPlayer ][ iPlayer ][ Shots ] , szName[ iOtherPlayer ] , g_HealthAtRoundEnd[ iOtherPlayer ] );
}
}
}
}
g_bRoundDamageShown = true;
}
}
ClearArray()
{
arrayset( g_HealthAtRoundEnd , 0 , sizeof( g_HealthAtRoundEnd ) );
for ( new i = 1 ; i <= MAX_PLAYERS ; i++ )
{
for ( new p = 1 ; p <= MAX_PLAYERS ; p++ )
{
g_pzStats[ i ][ p ][ Shots ] = 0;
g_pzStats[ i ][ p ][ DamageGiven ] = 0;
g_pzStats[ i ][ p ][ HealthBeforeDamage ] = 0;
}
}
}