//############################### CREDITS #######################################//
//##
//## Version: 1.0
//## System: Axarion
//## IndexerUtils: Axarion
//## AbilityEvent: Axarion
//## AutoIndex: grim001
//## AIDS: Jesus4Lyf
//## UnitIndexer: Nestharus
//## TimerUtils: Vexorian
//## GroupUtils: Rising_Dusk
//##
//############################### DESCRIPTION ###################################//
//##
//## This library enables you to add bonuses to your aura.
//##
//############################### HOW DOES IT WORK ##############################//
//##
//## Just implement AdvancedAuraBonus before you implement AdvancedAura and define
//## the bonuses in the AuraInit method of your struct and increase/decrease them
//## in the onLevelUp method if you want. (set .AURA_BONUS_DAMAGE = x * .level)
//## This library requires BonusMod and AbilityPreload to work.
//##
//## ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//## | Aura Bonus Type constants: | Minimum bonus: | Maximum bonus: |
//## ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//## | AURA_BONUS_SIGHT_RANGE | -2048 | +2047 |
//## | AURA_BONUS_ATTACK_SPEED | -512 | +511 |
//## | AURA_BONUS_ARMOR | -1024 | +1023 |
//## | AURA_BONUS_MANA_REGEN_PERCENT | -512% | +511% |
//## | AURA_BONUS_LIFE_REGEN | -256 | +255 |
//## | AURA_BONUS_DAMAGE | -1024 | +1023 |
//## | AURA_BONUS_STRENGTH | -256 | +255 |
//## | AURA_BONUS_AGILITY | -256 | +255 |
//## | AURA_BONUS_INTELLIGENCE | -256 | +255 |
//## ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//##
//################################################################################//
library AdvancedAuraBonus requires AdvancedAura, BonusMod
module AdvancedAuraBonus
static constant boolean BONUS_VERIFIER = true // for checking if the module is implemented.
//! runtextmacro AuraBonusCreate("DAMAGE")
//! runtextmacro AuraBonusCreate("ARMOR")
//! runtextmacro AuraBonusCreate("ATTACK_SPEED")
//! runtextmacro AuraBonusCreate("SIGHT_RANGE")
//! runtextmacro AuraBonusCreate("LIFE_REGEN")
//! runtextmacro AuraBonusCreate("MANA_REGEN_PERCENT")
//! runtextmacro AuraBonusCreate("STRENGTH")
//! runtextmacro AuraBonusCreate("AGILITY")
//! runtextmacro AuraBonusCreate("INTELLIGENCE")
method addBonuses takes unit u returns nothing
//! runtextmacro AuraBonusAdd("DAMAGE", "")
//! runtextmacro AuraBonusAdd("ARMOR", "")
//! runtextmacro AuraBonusAdd("ATTACK_SPEED", "")
//! runtextmacro AuraBonusAdd("SIGHT_RANGE", "")
//! runtextmacro AuraBonusAdd("LIFE_REGEN", "")
//! runtextmacro AuraBonusAdd("MANA_REGEN_PERCENT", "")
//! runtextmacro AuraBonusAddHero("STRENGTH", "")
//! runtextmacro AuraBonusAddHero("AGILITY", "")
//! runtextmacro AuraBonusAddHero("INTELLIGENCE", "")
endmethod
method removeBonuses takes unit u returns nothing
//! runtextmacro AuraBonusAdd("DAMAGE", "-")
//! runtextmacro AuraBonusAdd("ARMOR", "-")
//! runtextmacro AuraBonusAdd("ATTACK_SPEED", "-")
//! runtextmacro AuraBonusAdd("SIGHT_RANGE", "-")
//! runtextmacro AuraBonusAdd("LIFE_REGEN", "-")
//! runtextmacro AuraBonusAdd("MANA_REGEN_PERCENT", "-")
//! runtextmacro AuraBonusAddHero("STRENGTH", "-")
//! runtextmacro AuraBonusAddHero("AGILITY", "-")
//! runtextmacro AuraBonusAddHero("INTELLIGENCE", "-")
endmethod
endmodule
//! textmacro AuraBonusCreate takes NAME
private integer AURA_BONUS_$NAME$_SAVER
private static method $NAME$_UPDATE_REM takes nothing returns nothing
local unit u = GetEnumUnit()
local thistype this = curr
call AddUnitBonus(u, BONUS_$NAME$, -.AURA_BONUS_$NAME$_SAVER)
set u = null
endmethod
private static method $NAME$_UPDATE_ADD takes nothing returns nothing
local unit u = GetEnumUnit()
local thistype this = curr
call AddUnitBonus(u, BONUS_$NAME$, .AURA_BONUS_$NAME$_SAVER)
set u = null
endmethod
method operator AURA_BONUS_$NAME$= takes integer i returns nothing
if .AURA_BONUS_$NAME$_SAVER != 0 then
call ForGroup(.InstanceGroup, function thistype.$NAME$_UPDATE_REM)
endif
set .AURA_BONUS_$NAME$_SAVER = i
if .AURA_BONUS_$NAME$_SAVER != 0 then
call ForGroup(.InstanceGroup, function thistype.$NAME$_UPDATE_ADD)
endif
endmethod
method operator AURA_BONUS_$NAME$ takes nothing returns integer
return .AURA_BONUS_$NAME$_SAVER
endmethod
//! endtextmacro
//! textmacro AuraBonusAdd takes NAME, plusorminus
if .AURA_BONUS_$NAME$_SAVER != 0 then
call AddUnitBonus(u, BONUS_$NAME$, $plusorminus$.AURA_BONUS_$NAME$_SAVER)
endif
//! endtextmacro
//! textmacro AuraBonusAddHero takes NAME, plusorminus
if IsUnitType(u, UNIT_TYPE_HERO) and .AURA_BONUS_$NAME$_SAVER != 0 then
call AddUnitBonus(u, BONUS_$NAME$, $plusorminus$.AURA_BONUS_$NAME$_SAVER)
endif
//! endtextmacro
endlibrary