Added health-regeneration

This commit is contained in:
Fierelier 2018-05-21 16:43:52 +02:00
parent c310e17754
commit b385983a6e

View File

@ -9,21 +9,25 @@ namespace pdHealth
{ {
public class pdHealth : Script public class pdHealth : Script
{ {
public pdHealth() public pdHealth()
{ {
this.Tick += new EventHandler(this.doHealthTick); this.Tick += new EventHandler(this.doHealthTick);
} }
//SETTINGS //SETTINGS
//Regeneration //Armor Regeneration
int armorRegen = 25; //How far to regenerate the armor. Set to 0 to disable regenaration entirely. 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 armorRegenSpeed = 10f; //How much armor to regenerate per second.
float armorRegenDelay = 5f; //Delay after damage before recharging armor. Set to 0 to disable delay. 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 //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. int overrideArmor = -1; //Set your max armor. Basically the same as above.
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.
//Other armor options //Other armor options
bool allDamageArmor = true; //The armor soaks up all the damage, even fall and explosion-damage. bool allDamageArmor = true; //The armor soaks up all the damage, even fall and explosion-damage.
@ -32,8 +36,10 @@ namespace pdHealth
//VARIABLES (DO NOT TOUCH) //VARIABLES (DO NOT TOUCH)
int armorVal = -1; int armorVal = -1;
int healthVal = -1; int healthVal = -1;
float timeUntiArmorlRegen = 0.0f; float timeUntilArmorRegen = 0.0f;
float armorDecimalRegen = 0.0f; float armorDecimalRegen = 0.0f;
float timeUntilHealthRegen = 0.0f;
float healthDecimalRegen = 0.0f;
private void doHealthTick(object sender, EventArgs e) private void doHealthTick(object sender, EventArgs e)
{ {
@ -52,8 +58,10 @@ namespace pdHealth
if (pl.isAlive == false) { if (pl.isAlive == false) {
armorVal = -1; armorVal = -1;
healthVal = -1; healthVal = -1;
timeUntiArmorlRegen = 0.0f; timeUntilArmorRegen = 0.0f;
armorDecimalRegen = 0.0f; armorDecimalRegen = 0.0f;
timeUntilHealthRegen = 0.0f;
healthDecimalRegen = 0.0f;
return; return;
} }
@ -76,13 +84,18 @@ namespace pdHealth
} }
} }
if (armorRegen > 0) { if (armorRegen > 0 || healthRegen > 0) {
if (pl.Armor < armorVal) { armorDecimalRegen = 0.0f; timeUntiArmorlRegen = armorRegenDelay; } if (pl.Armor < armorVal || pl.Health < healthVal) {
if (pl.Health < healthVal) { armorDecimalRegen = 0.0f; timeUntiArmorlRegen = armorRegenDelay; } armorDecimalRegen = 0.0f;
timeUntilArmorRegen = armorRegenDelay;
healthDecimalRegen = 0.0f;
timeUntilHealthRegen = healthRegenDelay;
}
if (timeUntiArmorlRegen > 0) { if (armorRegen > 0) {
timeUntiArmorlRegen = timeUntiArmorlRegen - ((1000.0f/GTA.Game.FPS)/1000.0f); if (timeUntilArmorRegen > 0) {
if (timeUntiArmorlRegen < 0) { timeUntiArmorlRegen = 0; } timeUntilArmorRegen = timeUntilArmorRegen - ((1000.0f/GTA.Game.FPS)/1000.0f);
if (timeUntilArmorRegen < 0) { timeUntilArmorRegen = 0; }
} else { } else {
if (pl.Armor < armorRegen) { if (pl.Armor < armorRegen) {
armorDecimalRegen = armorDecimalRegen + (((1000.0f/GTA.Game.FPS)*armorRegenSpeed)/1000.0f); armorDecimalRegen = armorDecimalRegen + (((1000.0f/GTA.Game.FPS)*armorRegenSpeed)/1000.0f);
@ -96,6 +109,24 @@ namespace pdHealth
} }
} }
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)*healthRegenSpeed)/1000.0f);
while (healthDecimalRegen >= 1.0f) {
pl.Health = pl.Health + 1;
healthDecimalRegen = healthDecimalRegen - 1.0f;
}
if (pl.Health > healthRegen) { pl.Health = healthRegen; }
}
}
}
}
armorVal = pl.Armor; armorVal = pl.Armor;
healthVal = pl.Health; healthVal = pl.Health;
Game.DisplayText("Armor:\n " +pl.Armor.ToString(), 1000); Game.DisplayText("Armor:\n " +pl.Armor.ToString(), 1000);