JASS: library Armor /* v1.0.0 */uses/* */ Damage /* thehelper.net/forums/showthread.php/168144-Damage-Struct Useful tool for unit armor reduction and armor amount calculation **********************************************************************/ globals //********************************************************************* // The gameplay constant that sets how much damage the armor reduces. private constant real ARMOR_REDUCTION = 0.06 //********************************************************************* // The gameplay constant for ethereal damage modification private constant real ETHEREAL_ARMOR_REDUCTION = 1.66 endglobals /********************************************************************** * * function GetUnitDamageReduction takes unit whichUnit, attacktype attackType, damagetype damageType returns real * - If returns 1.00 means it takes 100% damage. * function GetUnitArmor takes unit whichUnit returns real * - Calculates the unit's armor, as accurate as it gets. * **********************************************************************/ private function Ln takes real a returns real local real sum = 0.0 loop exitwhen a < bj_E set a = a/bj_E set sum = sum + 1. endloop return sum + (a-1.)*(1. + 9./(2.+a) + 9./(1.+a*2.) + 1/a)/8. endfunction function GetUnitDamageReduction takes unit whichUnit, attacktype attackType, damagetype damageType returns real local real result local real prevLife=GetWidgetLife(whichUnit) //********************************************************************* // Deals 100 damage that ignores armor type to the unit, and from the // unit's remaining life we know how much damage was reduced. // To prevent the unit from dying from damage dealt this way the life // bonus ability is added call UnitAddAbility(whichUnit,ABILITY_LIFE_BONUS) set Damage.enabled=false set result=GetWidgetLife(whichUnit) call UnitDamageTarget(whichUnit,whichUnit,100,true,false,attackType,damageType,null) set Damage.enabled=true set result=result-GetWidgetLife(whichUnit) call UnitRemoveAbility(whichUnit,ABILITY_LIFE_BONUS) call SetWidgetLife(whichUnit,prevLife) return result/100 endfunction function GetUnitArmor takes unit whichUnit returns real local real reduction=GetUnitDamageReduction(whichUnit,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_NORMAL) //********************************************************************* // (armor)*0.06/(1+armor*0.06) = reduction if 0==reduction then set reduction=GetUnitDamageReduction(whichUnit,ATTACK_TYPE_MAGIC,DAMAGE_TYPE_NORMAL) return ((1-reduction)/(ARMOR_REDUCTION*(reduction)))/ETHEREAL_ARMOR_REDUCTION endif if reduction<=1 then return (1-reduction)/(ARMOR_REDUCTION*(reduction)) endif //********************************************************************* // Ln of 0.94, w3's magic number for negative armor. return -(Ln(2-reduction)/-0.061875) endfunction endlibrary

if you want it GY'd report it yourself and it wont go negatively for you but it will bring it to the attention of the mods

Newsflash: The whole 0 == x is faster than x == 0 is total baloney. (According to recent benchmarks by Anitarf)

You should have posted the link Regardless of if either was faster, you should not have been doing it anyways. As Anitarf points out, it is probably CPU (processor) specific.

Or another speedfreak myth like that nonsense Increment/Decrement Captain Griffin tried a few months ago.

The system deals damage to the unit. Which triggers the JASS: call TriggerRegisterUnitEvent(trigger,whichUnit,EVENT_UNIT_DAMAGED) which is used by many spells or other systems. Example, if a hero has a damage reflecting aura(like Spectre's DotA Dispersion), and detects armor, it will deal damage to surrounding units and players would think it is bug(it is). More dangerous if this unit's armor is being detected every period. I need these system, but it conflicts with spells that I use with damage detect. Please fix D:

I know you're going to think I'm crazy for this, but: JASS: return -(Ln(2-reduction)/-0.061875) -> JASS: return Ln(2-reduction)/0.061875