I don't know if final damage (pev_dmg_take) is proportional to initial damage, but if it is, this should work :
PHP Code:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
new Float:g_fCritHit[33];
public plugin_init()
{
RegisterHam(Ham_TakeDamage, "player", "hTakeDamagePre");
RegisterHam(Ham_TakeDamage, "player", "hTakeDamagePost", 1);
}
public hTakeDamagePre(iVictim, iInflictor, iAttacker, Float:fDmg)
{
if(random_num(0, 99) < 15) // 15% of success
{
g_fCritHit[iAttacker] = random_float(1.5, 2.5);
SetHamParamFloat(4, fDmg * g_fCritHit[iAttacker]);
}
}
public hTakeDamagePost(iVictim, iInflictor, iAttacker, Float:fDmg)
{
static Float:fMult
if( ( fMult = g_fCritHit[iAttacker] ) )
{
pev(iVictim, pev_dmg_take, fDmg);
client_print(iAttacker, print_chat,
"You've made a critical hit: normal dmg: %d, dmg multiplier: %.1f, total dmg: %d",
floatround(fDmg*fMult), fMult, floatround(fDmg))
g_fCritHit[iAttacker] = 0.0;
}
}
__________________