#include <amxmodx>
#include <fakemeta>
#include <reapi>
new const g_szPluginVersion[] = "0.1";
//
new const g_szLifeBarModel[] = "models/hp_dead_space/hp_dead_space.mdl";
new g_eEntLifeBar[MAX_PLAYERS+1];
public plugin_precache() {
precache_model(g_szLifeBarModel);
}
public plugin_init() {
register_plugin("HP LifeBar from DS", g_szPluginVersion, "Kurtis")
RegisterHookChain(RG_CBasePlayer_Spawn, "CBasePlayer_Spawn_Post", 1);
RegisterHookChain(RG_CBasePlayer_Killed, "CBasePlayer_Killed_Post", 1);
register_event("Health", "event_Health", "be");
}
public client_disconnected(pPlayer) {
if(!is_nullent(g_eEntLifeBar[pPlayer])) {
//set_entvar(g_eEntLifeBar[pPlayer], var_flags, get_entvar(g_eEntLifeBar[pPlayer], var_flags) | FL_KILLME);
//set_entvar(g_eEntLifeBar[pPlayer], var_nextthink, get_gametime());
engfunc(EngFunc_RemoveEntity, g_eEntLifeBar[pPlayer]);
}
}
public client_putinserver(pPlayer) {
g_eEntLifeBar[pPlayer] = rg_create_entity("info_target");
if(!is_nullent(g_eEntLifeBar[pPlayer])) {
set_entvar(g_eEntLifeBar[pPlayer], var_movetype, MOVETYPE_FOLLOW);
set_entvar(g_eEntLifeBar[pPlayer], var_aiment, pPlayer);
set_entvar(g_eEntLifeBar[pPlayer], var_effects, EF_NODRAW);
engfunc(EngFunc_SetModel, g_eEntLifeBar[pPlayer], g_szLifeBarModel);
}
}
public CBasePlayer_Spawn_Post(pPlayer) {
if(!is_user_alive(pPlayer)) {
return;
}
if(!is_nullent(g_eEntLifeBar[pPlayer])) {
set_entvar(g_eEntLifeBar[pPlayer], var_effects, get_entvar(g_eEntLifeBar[pPlayer], var_effects) & ~EF_NODRAW);
event_Health(pPlayer);
}
}
public CBasePlayer_Killed_Post(pVictim, pAttacker, iCorpse) {
if(!is_user_connected(pVictim)) {
return;
}
if(!is_nullent(g_eEntLifeBar[pVictim])) {
set_entvar(g_eEntLifeBar[pVictim], var_effects, get_entvar(g_eEntLifeBar[pVictim], var_effects) | EF_NODRAW);
}
}
public event_Health(pPlayer) {
const HP_ENTRY_MIN = 0; // % HP > _body = 0
const HP_ENTRY_MED = 35; // % HP > _body = 1
const HP_ENTRY_MAX = 75; // % HP > _body = 2
if(!is_nullent(g_eEntLifeBar[pPlayer]))
{
new Float: flUserHealth = Float: get_entvar(pPlayer, var_health);
new Float: flUserMaxHealth = Float: get_entvar(pPlayer, var_max_health);
if(flUserHealth < 1.0 || flUserMaxHealth < 1.0) {
// быть этого не может
// сэр, вы же не хотите делить на ноль?
return;
}
new Float: flPercent = flUserHealth / flUserMaxHealth * 100.0;
if(flPercent > HP_ENTRY_MAX) {
set_entvar(g_eEntLifeBar[pPlayer], var_body, 0);
}
else if(flPercent > HP_ENTRY_MED) {
set_entvar(g_eEntLifeBar[pPlayer], var_body, 1);
}
else if(flPercent > HP_ENTRY_MIN) {
set_entvar(g_eEntLifeBar[pPlayer], var_body, 2);
}
/* других вариантов нет
else {
set_entvar(g_eEntLifeBar[pVictim], var_effects, get_entvar(g_eEntLifeBar[pVictim], var_effects) | EF_NODRAW);
}
*/
}
}