iv-pdhealth/scripts/paydayHealth.cs

133 lines
4.4 KiB
C#

//Payday Health Script 1.1 by Fierelier
using System;
using System.Windows.Forms;
using GTA;
namespace pdHealth
{
public class pdHealth : Script
{
public pdHealth()
{
this.Tick += new EventHandler(this.doHealthTick);
}
//SETTINGS
//Armor Regeneration
int armorRegen = 25; //How far to regenerate the armor. Set to 0 to disable armor-regenaration entirely.
float armorRegenSpeed = 10f; //How much armor to regenerate per second.
float armorRegenDelay = 5f; //Delay after damage before recharging armor. Set to 0 to disable delay.
//Health Regeneration
int healthRegen = 0; //How far to regenerate health. Set to 0 to disable health-regenaration entirely.
float healthRegenSpeed = 0.2f; //How much health to regenerate per second.
float healthRegenDelay = 30f; //Delay after damage before recharging health. Set to 0 to disable delay.
//Max Armor/Health
int overrideHealth = 50; //Set your max health to balance the regenerating armor. Values over 100 don't do anything (unless max health is altered by a trainer). Set to -1 to use default health.
int overrideArmor = -1; //Set your max armor. Basically the same as above.
//Other armor options
bool allDamageArmor = true; //The armor soaks up all the damage, even fall and explosion-damage.
float armorDefense = 1.0F; //How much damage should the armor soak up while active? Set to 1.0 (default) to make it soak up all damage, set to 0.5 to make it soak up half damage, etc.
//VARIABLES (DO NOT TOUCH)
int armorVal = -1;
int healthVal = -1;
float timeUntilArmorRegen = 0.0f;
float armorDecimalRegen = 0.0f;
float timeUntilHealthRegen = 0.0f;
float healthDecimalRegen = 0.0f;
private void doHealthTick(object sender, EventArgs e)
{
Ped pl = Player.Character;
if (overrideHealth != -1) {
//if (pl.Health > overrideHealth) { Player.MaxHealth = overrideHealth; pl.Health = overrideHealth; }
if (pl.Health > overrideHealth) { pl.Health = overrideHealth; }
}
if (overrideArmor != -1) {
//if (pl.Armor > overrideArmor) { Player.MaxArmor = overrideArmor; pl.Armor = overrideArmor; }
if (pl.Armor > overrideArmor) { pl.Armor = overrideArmor; }
}
if (pl.isAlive == false) {
armorVal = -1;
healthVal = -1;
timeUntilArmorRegen = 0.0f;
armorDecimalRegen = 0.0f;
timeUntilHealthRegen = 0.0f;
healthDecimalRegen = 0.0f;
return;
}
if (allDamageArmor == true) {
if (pl.Health < healthVal) {
int damageTaken = healthVal - pl.Health;
if (damageTaken < pl.Armor) {
pl.Health = pl.Health + damageTaken;
pl.Armor = pl.Armor - damageTaken;
} else {
pl.Health = pl.Health + pl.Armor;
pl.Armor = 0;
}
}
}
if (pl.Armor < armorVal) {
if (armorDefense < 1.0F) {
pl.Health = (int)Math.Round(pl.Health - ((armorVal - pl.Armor)*1.0f-armorDefense));
}
}
if (armorRegen > 0 || healthRegen > 0) {
if (pl.Armor < armorVal || pl.Health < healthVal) {
armorDecimalRegen = 0.0f;
timeUntilArmorRegen = armorRegenDelay;
healthDecimalRegen = 0.0f;
timeUntilHealthRegen = healthRegenDelay;
}
if (armorRegen > 0) {
if (timeUntilArmorRegen > 0) {
timeUntilArmorRegen = timeUntilArmorRegen - ((1000.0f/GTA.Game.FPS)/1000.0f);
if (timeUntilArmorRegen < 0) { timeUntilArmorRegen = 0; }
} else {
if (pl.Armor < armorRegen) {
armorDecimalRegen = armorDecimalRegen + (((1000.0f/GTA.Game.FPS)/1000.0f)*armorRegenSpeed);
while (armorDecimalRegen >= 1.0f) {
pl.Armor = pl.Armor + 1;
armorDecimalRegen = armorDecimalRegen - 1.0f;
}
if (pl.Armor > armorRegen) { pl.Armor = armorRegen; }
}
}
}
if (healthRegen > 0) {
if (timeUntilHealthRegen > 0) {
timeUntilHealthRegen = timeUntilHealthRegen - ((1000.0f/GTA.Game.FPS)/1000.0f);
if (timeUntilHealthRegen < 0) { timeUntilHealthRegen = 0; }
} else {
if (pl.Health < healthRegen) {
healthDecimalRegen = healthDecimalRegen + (((1000.0f/GTA.Game.FPS)/1000.0f)*healthRegenSpeed);
while (healthDecimalRegen >= 1.0f) {
pl.Health = pl.Health + 1;
healthDecimalRegen = healthDecimalRegen - 1.0f;
}
if (pl.Health > healthRegen) { pl.Health = healthRegen; }
}
}
}
}
armorVal = pl.Armor;
healthVal = pl.Health;
}
}
}