PHP Code:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <hamsandwich>
#include <screenfade_util>
#define get_player_team(%1) get_pdata_int(%1,114)
const m_LastHitGroup = 75
enum _:mDatas
{
Float:m_flHealth,
Float:m_flFadeTime,
m_iColors[3],
m_iAlpha
}
new g_iWeaponsVampireDatas[CSW_P90+1][mDatas]
new g_MaxHealth
new g_iMaxPlayers
#define IsPlayer(%0) ( 1<= %0 <= g_iMaxPlayers )
public plugin_init()
{
register_plugin( "Vampire", "1.3.3", "ConnorMcLeod" )
g_MaxHealth = register_cvar("amx_vampire_max_hp", "100")
register_concmd("amx_set_vampire", "ConCmd_SetVampire", ADMIN_CFG, "<weapon shortname or HS or Default> <HP> <FadeTime> <Red> <Green> <Blue> <Alpha>")
RegisterHam( Ham_Killed, "player", "OnCBasePlayer_Killed_Post", true )
g_iMaxPlayers = get_maxplayers()
}
public ConCmd_SetVampire(id, lvl, cmd)
{
new iCount = read_argc()
if( iCount < 7 )
{
new arg[32]
console_print(id, "amx_set_vampire : Only %d args detected :", iCount)
for(new i; i<=iCount; i++)
{
if( read_argv(i, arg, charsmax(arg)) )
{
console_print(id, "#%d : ^"%s^"", i, arg)
}
}
}
if( cmd_access(id, lvl, cmd, 7) )
{
new szArg[32] = "weapon_", iId
read_argv(1, szArg[7], charsmax(szArg)-7)
iId = get_weaponid(szArg)
if( !iId )
{
if( equali(szArg[7], "HS") )
{
iId = 2
}
else if( !equali(szArg[7], "Default") )
{
return PLUGIN_HANDLED
}
}
read_argv(2, szArg[7], charsmax(szArg)-7)
g_iWeaponsVampireDatas[iId][m_flHealth] = _:str_to_float(szArg)
read_argv(3, szArg[7], charsmax(szArg)-7)
g_iWeaponsVampireDatas[iId][m_flFadeTime] = _:str_to_float(szArg)
read_argv(4, szArg[7], charsmax(szArg)-7)
g_iWeaponsVampireDatas[iId][m_iColors][0] = str_to_num(szArg)
read_argv(5, szArg[7], charsmax(szArg)-7)
g_iWeaponsVampireDatas[iId][m_iColors][1] = str_to_num(szArg)
read_argv(6, szArg[7], charsmax(szArg)-7)
g_iWeaponsVampireDatas[iId][m_iColors][2] = str_to_num(szArg)
read_argv(7, szArg[7], charsmax(szArg)-7)
g_iWeaponsVampireDatas[iId][m_iAlpha] = str_to_num(szArg)
}
return PLUGIN_HANDLED
}
public OnCBasePlayer_Killed_Post( iVictim, iKiller )
{
if( iVictim == iKiller
|| !IsPlayer(iKiller)
|| !is_user_alive( iKiller )
|| get_player_team( iVictim ) == get_player_team( iKiller ) )
{
return
}
new iId = -1
if( g_iWeaponsVampireDatas[2][m_flFadeTime] && get_pdata_int( iVictim, m_LastHitGroup ) == HIT_HEAD )
{
iId = 2
}
else
{
new iInflictor = pev(iVictim, pev_dmg_inflictor)
if( iInflictor != iKiller )
{
if( iInflictor )
{
new szClass[32]
pev(iInflictor, pev_classname, szClass, charsmax(szClass))
if( equal(szClass, "grenade") )
{
iId = CSW_HEGRENADE
}
}
if( iId == -1 )
{
return
}
}
else
{
iId = get_user_weapon(iKiller)
}
}
if( iId && !g_iWeaponsVampireDatas[iId][m_flFadeTime] )
{
iId = 0
if( !g_iWeaponsVampireDatas[iId][m_flFadeTime] )
{
return
}
}
new Float:flHealth, Float:flMaxHealth = get_pcvar_float( g_MaxHealth )
pev( iKiller, pev_health, flHealth )
if( flHealth < flMaxHealth )
{
new Float:flNewHealth = floatmin( flHealth + g_iWeaponsVampireDatas[iId][m_flHealth], flMaxHealth )
set_pev( iKiller, pev_health, flNewHealth)
set_hudmessage( 0, 255, 100, -1.0, 0.15, 0, 1.0, 1.0, 0.1, 0.1, -1 )
show_hudmessage( iKiller, "Healed +%.0f hp", flNewHealth - flHealth )
}
new iColor[3]
iColor[0] = g_iWeaponsVampireDatas[iId][m_iColors][0]
iColor[1] = g_iWeaponsVampireDatas[iId][m_iColors][1]
iColor[2] = g_iWeaponsVampireDatas[iId][m_iColors][2]
new Float:flTime = g_iWeaponsVampireDatas[iId][m_flFadeTime]
UTIL_ScreenFade( iKiller, iColor, flTime, flTime, g_iWeaponsVampireDatas[iId][m_iAlpha] )
}