Dirac
22710180
- Reaction score
- 147
JASS:
library Shield /* v1.0.6
*/uses/*
*/ DamageMod /* thehelper.net/forums/showthread.php/168144-Damage-Struct
A useful tool to prevent damage done to units.
**********************************************************************/
globals
//*********************************************************************
// The priority sets before and after which damage mods the shield
// prevents damage.
constant integer SHIELD_PRIORITY =4
endglobals
/**********************************************************************
*
* function GetShieldUnit takes nothing returns unit
* - The unit whose shield just expired.
* function GetShieldUnitId takes nothing returns unit
* - The unit's custom value
*
***********************************************************************
*
* struct Shield
*
* - Shields the unit.
* - Takes the unit's custom value as an instance.
*
* real amount
* - The amount of damage to be shielded for the unit
* readonly static DamageMod MOD
* - The mod used for this code.
* method onExpire takes code func returns nothing
* - Runs the function when the shield expires for the unit
* method end takes nothing returns nothing
* - Expires the shield
*
*********************************************************************/
globals
private unit ShieldUnit
private integer ShieldUnitId
endglobals
private module ShieldModule
readonly static DamageMod MOD
private trigger trig
real amount
method onExpire takes code func returns nothing
if null==this.trig then
set this.trig=CreateTrigger()
else
call TriggerClearConditions(this.trig)
endif
call TriggerAddCondition(this.trig,Filter(func))
endmethod
method end takes nothing returns nothing
set this.amount=0
set ShieldUnitId=this
static if LIBRARY_UnitIndexer then
set ShieldUnit=GetUnitById(this)
else
set ShieldUnit=GetIndexUnit(this)
endif
call TriggerEvaluate(this.trig)
call TriggerClearConditions(this.trig)
endmethod
private static method onDamage takes nothing returns boolean
local thistype this=Damage.targetId
if 0>=this.amount then
return false
endif
set this.amount=this.amount-Damage.prevent(this.amount)
if this.amount<=0 then
set ShieldUnit=Damage.target
set ShieldUnitId=Damage.targetId
call TriggerEvaluate(this.trig)
call TriggerClearConditions(this.trig)
endif
return false
endmethod
private static method onInit takes nothing returns nothing
set MOD=DamageMod.create(function thistype.onDamage,SHIELD_PRIORITY)
endmethod
endmodule
struct Shield extends array
implement ShieldModule
endstruct
function GetShieldUnit takes nothing returns unit
return ShieldUnit
endfunction
function GetShieldUnitId takes nothing returns integer
return ShieldUnitId
endfunction
endlibrary