• Check out the results of the Techtree Contest #19!
  • Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.
  • Create a void inspired texture for Warcraft 3 and enter Hive's 34th Texturing Contest: Void! Click here to enter!
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!

[Trigger] Increase heal effectiveness

Status
Not open for further replies.
  • Heal By Missing Health
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Heal
    • Actions
      • Set TempUnit = (Target unit of ability being cast)
      • Set Real1 = ((Max life of TempUnit) x 0.10) <-- this finds out what 10% of the unit's max health is
      • Set Real2 = (((Max life of TempUnit) - (Life of TempUnit)) / Real1) <-- this finds out how many times 10% of the max health is missing.
      • Set HealStrength = 25 <--This is whatever the base healing is.
      • Unit - Set life of TempUnit to ((Life of TempUnit) + (HealStrength x Real2)) <-- multiply healing power by how many times 10% is missing.
Ok, this shoooooould work, but I can't really test that right now, so hopefully my math is right.
 
  • Heal By Missing Health
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Heal
    • Actions
      • Set TempUnit = (Target unit of ability being cast)
      • Set Real1 = ((Max life of TempUnit) x 0.10) <-- this finds out what 10% of the unit's max health is
      • Set Real2 = (((Max life of TempUnit) - (Life of TempUnit)) / Real1) <-- this finds out how many times 10% of the max health is missing.
      • Set HealStrength = 25 <--This is whatever the base healing is.
      • Unit - Set life of TempUnit to ((Life of TempUnit) + (HealStrength x Real2)) <-- multiply healing power by how many times 10% is missing.
Ok, this shoooooould work, but I can't really test that right now, so hopefully my math is right.

This will not work perfectly. It will activate even when, for example, 25% HP is missing. Let's say a unit has 200 HP and lost 25%. Now it's 150. Based on your calculation (200- 150) / 20 = 2.5
It means that the healing will be multiplied by 2.5 but that's not what the user asks for. It should be 2 because the 10% was lost twice only. Also, the user still didn't clarify how he would like the heal to be incremented. Why multiplying by HealStrength? Maybe he wants to 5 extra HP healed for every 10% HP missing.
ninehell, you need to give me more info before I can concoct a trigger about this.
 
This will not work perfectly. It will activate even when, for example, 25% HP is missing. Let's say a unit has 200 HP and lost 25%. Now it's 150. Based on your calculation (200- 150) / 20 = 2.5
It means that the healing will be multiplied by 2.5 but that's not what the user asks for. It should be 2 because the 10% was lost twice only. Also, the user still didn't clarify how he would like the heal to be incremented. Why multiplying by HealStrength? Maybe he wants to 5 extra HP healed for every 10% HP missing.
ninehell, you need to give me more info before I can concoct a trigger about this.

healing multiplied by 2.5 would be OP. i want the heal effectiveness increase by 11% on every 10% hp loss
 
Dat calculation wont work indeed.
First of all I would consider making it increase by 1.1% for each 1% of missing health instead of 11% per 10%.

The calculation would be: BaseHealValue * (1.1 * ((CurrentLife / MaxLife) *100))

The calculation for per 10% would be that ((CurrentLife / MaxLife) *100) would be reduced by the Modulo of that value and 10 (Modulo(TempReal, 10)).
 
The calculation would be: BaseHealValue * (1.1 * ((CurrentLife / MaxLife) *100))
Might want to brush up on your mathematics...

Code:
FinalHealValue = BaseHealValue * (1 + 1.1 * (1 - CurrentLife / MaxLife))
// CurrentLife / MaxLife -> current life fraction
// (1 - CurrentLife / MaxLife) -> current life missing fraction
// 1.1 -> fractional form of healing power bonus when unit has 0% health (110%)
// 1.1 * (1 - CurrentLife / MaxLife) -> work out the healing bonus to apply as a fraction
// (1 + 1.1 * (1 - CurrentLife / MaxLife)) -> work out the power fraction to apply by adding the bonus fraction to the default damage fraction of 1
// BaseHealValue * (1 + 1.1 * (1 - CurrentLife / MaxLife)) -> work out heal amount by applying the power fraction

This formula applies a linear increase as health is lost. If you want a stepped increase you will need some form of rounding procedure. This would be applied to the current life fraction part (or current life missing fraction part).
 
yea sorry it is indeed 1-CurrentLife/MaxLife

  • heal primal amount
    • Events
      • Game - DamageModifierEvent becomes Equal to 1.00
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • DamageEventType Equal to 0
      • (Ability being cast) Equal to Healing Touch Primal
    • Actions
      • Unit - Set life of DamageEventTarget to ((Life of DamageEventTarget) + (400.00 x (1.00 + (1.10 x (1.00 - ((Life of DamageEventTarget) / (Max life of DamageEventTarget)))))))
      • Set DamageEventAmount = (400.00 x (1.00 + (1.10 x (1.00 - ((Life of DamageEventTarget) / (Max life of DamageEventTarget))))))
      • Set DamageEventHeal = (+ + (String((Integer(DamageEventAmount)))))
      • Floating Text - Create floating text that reads DamageEventHeal above DamageEventTarget with Z offset 0.00, using font size 10.00, color (0.00%, 100.00%, 0.00%), and 0.00% transparency
      • Floating Text - Change (Last created floating text): Disable permanence
      • Floating Text - Set the velocity of (Last created floating text) to 50.00 towards 90.00 degrees
      • Floating Text - Change the lifespan of (Last created floating text) to 1.00 seconds
      • Floating Text - Change the fading age of (Last created floating text) to 0.50 seconds
      • Custom script: call RemoveLocation(udg_TempPoint)
is this the correct formula?
 
Status
Not open for further replies.
Back
Top