From f39570205e32dd05ffd05a7c3588709cd3f90708 Mon Sep 17 00:00:00 2001 From: Greyscale Date: Thu, 16 Apr 2009 01:21:09 +0200 Subject: [PATCH] Added zhp.inc :) --- src/zr/zhp.inc | 175 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 src/zr/zhp.inc diff --git a/src/zr/zhp.inc b/src/zr/zhp.inc new file mode 100644 index 0000000..5b5a40d --- /dev/null +++ b/src/zr/zhp.inc @@ -0,0 +1,175 @@ +/* + * ============================================================================ + * + * Zombie:Reloaded + * + * File: zhp.inc + * Description: Displays + * Author: Greyscale, Richard Helgeby + * + * ============================================================================ + */ + +/** + * Array for storing ZHP timer handles per client. + */ +new Handle:tZHP[MAXPLAYERS + 1]; + +/** + * Array for flagging client to display HP + */ +new bool:pZHP[MAXPLAYERS + 1]; + +/** + * Client is joining the server. + * + * @param client The client index. + */ +ZHPClientInit(client) +{ + // Get default client setting from cvar. + new bool:zhp = GetConVarBool(gCvars[CVAR_ZHP_DEFAULT]); + + // Set flag to default value. + pZHP[client] = zhp; + + // Reset timer handle. + tZHP[client] = INVALID_HANDLE; +} + +/** + * Toggle ZHP on a client. + * + * @param client The client index. + */ +ZHPToggle(client) +{ + // If ZHP is disabled, then stop. + new bool:zhp = GetConVarBool(gCvars[CVAR_ZHP]); + if (!zhp) + { + // Tell client feature is disabled. + ZR_PrintToChat(client, "Feature is disabled"); + + // Stop. + return; + } + + // If ZHP is enabled, then tell client it's being disabled. + if (pZHP[client]) + { + ZR_PrintToChat(client, "ZHP disable"); + } + // If ZHP is disabled, then tell client it's being enabled. + else + { + ZR_PrintToChat(client, "ZHP enable"); + + // Update HP display. + ZHPUpdateHUD(client); + } + + // Toggle ZHP flag. + pZHP[client] = !pZHP[client]; +} + +/** + * Player has been infected. + * + * @param client The client index. + */ +ZHPOnClientInfected(client) +{ + // If ZHP is disabled, then stop. + new bool:zhp = GetConVarBool(gCvars[CVAR_ZHP]); + if (!zhp) + { + return; + } + + // Update HP display. + ZHPUpdateHUD(client); + + // If timer is currently running, kill it. + if (tZHP[client] != INVALID_HANDLE) + { + KillTimer(tZHP[client]); + } + + // Start repeating timer to update display. + tZHP[client] = CreateTimer(5.0, ZHPTimer, client, TIMER_FLAG_NO_MAPCHANGE|TIMER_REPEAT); +} + +/** + * Player has been hurt. + * + * @param client The client index. + */ +ZHPOnPlayerHurt(client) +{ + // Update HP display. + ZHPUpdateHUD(client); +} + +/** + * Zombie has gained health for infecting a player. + * + * @param client The client index. + */ +ZHPOnHealthInfectGain(client) +{ + // Update HP display. + ZHPUpdateHUD(client); +} + +/** + * Update HP display for a player. + * + * @param client The client index. + */ +ZHPUpdateHUD(client) +{ + // If ZHP is disabled, then stop. + new bool:zhp = GetConVarBool(gCvars[CVAR_ZHP]); + if (!zhp) + { + return; + } + + // If player is a zombie, or has ZHP disabled, then stop. + if (!IsPlayerZombie(client) || !pZHP[client]) + { + return; + } + + // Get health, and if below 0 then set back to 0. (for display purposes) + new health = GetClientHealth(client); + if (health < 0) + { + health = 0; + } + + // Display HP + ZR_HudHint(client, "Display HP", health); +} + +/** + * Timer callback. Repetitively calls ZHPUpdateHUD() until stopped. + * + * @param timer The timer handle. + * @param client The client index. + */ +public Action:ZHPTimer(Handle:timer, any:client) +{ + // If client leaves, then stop timer. + if (!IsClientInGame(client)) + { + return Plugin_Stop; + } + + // Update HP display. + ZHPUpdateHUD(client); + + // Allow timer to continue. + return Plugin_Continue; +} \ No newline at end of file