Snippet Armor

Dirac

22710180
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
 

Dirac

22710180
Please graveyard this as it is no longer required, it's now implemented inside Damage by default.
 

GFreak45

I didnt slap you, i high 5'd your face.
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
 

tooltiperror

Super Moderator
Staff member
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
What GFreak said. This will be added to submission rules (eventually).
 

tooltiperror

Super Moderator
Staff member
You should have posted the link :p

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

Bribe

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

Mabaet.Baet

Member
The system deals damage to the unit. Which triggers the 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
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • Ghan Ghan:
    Chat should show on the sidebar when not logged in now.
  • Ghan Ghan:
    (You'll still need to log in to post messages)
  • Ghan Ghan:
    Test!
  • tom_mai78101 tom_mai78101:
    I must be in a test server.
  • tom_mai78101 tom_mai78101:
    Nice, Twitter tweets embedding now works
  • Wizard Wizard:
    Yup.
  • Ghan Ghan:
    Excellent.
  • Ghan Ghan:
    @tom_mai78101 Hello there.
  • Ghan Ghan:
    Tagging works in the chat too.
  • tom_mai78101 tom_mai78101:
    @Ghan Missed it.
  • Wizard Wizard:
    Still fixing things here and there. Added widgets to the portal, will make it match the ones here on the forum index tomorrow.
  • Ghan Ghan:
    The venerable World Editor Tutorials site has been converted to HTTPS at last.
  • jonas jonas:
    cool
  • jonas jonas:
    and I can even edit my messages, nice
  • seph ir oth seph ir oth:
    GENERAL CHIT CHAT, YOU ARE A BOLD ONE
  • Ghan Ghan:
    Hello there
  • The Helper The Helper:
    this new chatbox is great and the forum software update is great too
    +1
  • The Helper The Helper:
    upgrade has fixed forum registration spam problem
  • tom_mai78101 tom_mai78101:
    Something tells me we might be able to customize the chatbox a bit, considering that there's a gap under every message.
  • Wizard Wizard:
    Going to deploy a fix soon, just had to take some time for myself this weekend.
  • Varine Varine:
    Unbelievable. Time for yourself? How dare you!
  • Wizard Wizard:
    xD
  • tom_mai78101 tom_mai78101:
    Hm, it is now harder to type anything on an Android phone. Pressing Backspace or Enter keys will dismiss the Android keyboard for some reasons.

    Members online

    No members online now.

    Affiliates

    Hive Workshop
    Top