Detecting Armor Types

_Phoenix_

New Member
Reaction score
4
Does anyone know how to detect which armor type a unit is (e.g. Light, Heavy, Medium, Hero, Fortified, Divine, etc.)? I mean, any condition that can do this? And I'm referring to a GUI method btw.
 

Tyrulan

Ultra Cool Member
Reaction score
37
Don't take my word for it, but I recall someone saying this can't be done?
 

Viikuna

No Marlo no game.
Reaction score
265
Its possible in Jass, if you use, for example, Table for storing unit types armor type.
 

Tyrulan

Ultra Cool Member
Reaction score
37
He said GUI. :p But I suppose it is possible to set custom value of units with certain armour types in your initialization.. lot of work though. Very painful.
 

Viikuna

No Marlo no game.
Reaction score
265
Well, it is indeed hard to do stuff like this in GUI. And setting up Armor types in some Table is not realy so painful ( Depends how many different unit types you have for your map ).
 

Cookiemaster

New Member
Reaction score
36
first disable any damage detection or some sort

Save hp of the unit

set the hp of the unit to 100

deal 100 damage of attack type chaos (normal damage type)

save the hp left and calculate the damage reduction from it.

set the hp of the unit to 100

deal 100 damage of an attack type that varies on damage dealt on each armor type

save the hp, calculate damage reduction, calculate armor type.

restore the hp the unit had at the start

then reenable the damage detection
 

Sajberhippie

New Member
Reaction score
30
Actually, I'd say the easiest way would be to simply make a dummy ability with no effect or graphic whatsoever (item armor bonus and change to +0) for each armor type and add it to units based on what armor type they have.

EDIT: Easiest in GUI that is, I don't know much JASS.
 

_Phoenix_

New Member
Reaction score
4
Well, if only JASS is possible, I don't mind using JASS. :p

As kingkingyyk3 said, I tried Daelin's armor detection system:
http://www.thehelper.net/forums/showthread.php?t=35766

Here's a glimpse of (IMO) the most important part of his script:
JASS:

//DETECT THE ARMOR OF AN UNIT
function GetUnitArmorType takes unit whichUnit returns integer
    local real armor = GetUnitArmor(whichUnit)
    local real damage

    call UnitAddAbility(whichUnit, 'allz')
    set damage = EvalDamage(whichUnit, 16.00,ATTACK_TYPE_MELEE, armor)
    if (damage<=2.00 and EvalDamage(whichUnit, 16.00, ATTACK_TYPE_CHAOS, armor)>=15.98) then
        call UnitRemoveAbility(whichUnit, 'allz')
        return 8 //divine
    elseif (damage>16.02) then
        call UnitRemoveAbility(whichUnit, 'allz')
        return 2 //medium
    elseif (damage<15.98) then
        call UnitRemoveAbility(whichUnit, 'allz')
        return 4 //fortified
    endif
    
    set damage = EvalDamage(whichUnit, 16.00, ATTACK_TYPE_SIEGE, armor)
    if (damage<15.98) then
        call UnitRemoveAbility(whichUnit, 'allz')
        return 6 //hero
    elseif (damage>16.02) then
        call UnitRemoveAbility(whichUnit, 'allz')
        return 7 //unarmored
    endif

    if (EvalDamage(whichUnit,16.00,ATTACK_TYPE_PIERCE,armor)>16.02) then
        call UnitRemoveAbility(whichUnit, 'allz')
        return 1 //small
    endif

    if (EvalDamage(whichUnit,16.00,ATTACK_TYPE_MAGIC,armor)>16.02) then
        call UnitRemoveAbility(whichUnit, 'allz')
        return 3 //large
    else
        call UnitRemoveAbility(whichUnit, 'allz')
        return 5 //normal
    endif
endfunction


And my spell is as follows:
Trigger:
  • Spell Exorcism
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Exorcism
    • Actions
      • Set exorcismBaseDmg = 0.00
      • Set exorcismTarget = (Target unit of ability being cast)
      • Set exorcismPoint = (Position of exorcismTarget)
      • Set exorcismGroup = (Units within 500.00 of exorcismPoint matching (((Owner of (Matching unit)) Equal to Player 4 (Purple)) and ((Matching unit) Not equal to exorcismTarget)))
      • Custom script: set udg_exorcismArmorType = GetUnitArmorType(udg_exorcismTarget)
      • Game - Display to (All players) the text: (The armor type of the target is: + (String(exorcismArmorType)))
      • Unit Group - Pick every unit in exorcismGroup and do (Actions)
        • Loop - Actions
          • Set exorcismBaseDmg = (exorcismBaseDmg + (Life of (Picked unit)))
      • Unit - Create 1 Dummy for (Owner of (Casting unit)) at (Center of (Playable map area)) facing 270.00 degrees
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • Unit - Cause (Last created unit) to damage exorcismTarget, dealing exorcismBaseDmg damage of attack type Spells and damage type Acid
      • Game - Display to (All players) the text: ((String(exorcismBaseDmg)) + damage was dealt to the target.)
      • Unit Group - Remove all units from exorcismGroup
      • Custom script: call DestroyGroup(udg_exorcismGroup)
      • Custom script: call RemoveLocation(udg_exorcismPoint)


I have a problem though - the integral value of the armor type (the variable "exorcismArmorType" which is an integer) returns 4 no matter which units I target my spell on, such as heroes or buildings. Does anyone know the problem? (I'm almost JASS illiterate :eek: )

PS: Since the above system looks neater, I'm trying to make it work first. However, if it really fails, Sajberhippie's suggestion seems to be another way out (though I'll have loads of units to work on).
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top