library aheHeal
globals
real udg_AHE_Event_Heal_Created
real udg_AHE_Event_OnHeal_After
real udg_AHE_Event_OnHeal_Before
constant integer udg_HEAL_TYPE_SPELL = 0
constant integer udg_HEAL_TYPE_HIDDEN = 1
constant integer udg_HEAL_TYPE_REGENERATION = 2
integer udg_AHE_Index = 0
integer udg_AHE_NewIndex
real array udg_AHE_Param_Amount
integer array udg_AHE_Param_HealType
boolean array udg_AHE_Param_Index_Exists
real array udg_AHE_Param_Modifier
unit array udg_AHE_Param_Source
unit array udg_AHE_Param_Target
endglobals
function AHE_CreateNewIndex takes nothing returns integer
set udg_AHE_NewIndex = 0
loop
exitwhen not udg_AHE_Param_Index_Exists[udg_AHE_NewIndex]
set udg_AHE_NewIndex = udg_AHE_NewIndex + 1
endloop
set udg_AHE_Param_Index_Exists[udg_AHE_NewIndex] = true
set udg_AHE_Param_Source[udg_AHE_NewIndex] = null
set udg_AHE_Param_Target[udg_AHE_NewIndex] = null
set udg_AHE_Param_Amount[udg_AHE_NewIndex] = 0
set udg_AHE_Param_Modifier[udg_AHE_NewIndex] = 1
set udg_AHE_Param_HealType[udg_AHE_NewIndex] = 0
set udg_AHE_Event_Heal_Created = 1
set udg_AHE_Event_Heal_Created = 0
return udg_AHE_NewIndex
endfunction
function AHE_ApplyHeal takes integer index returns nothing
local integer oldIndex = udg_AHE_Index
set udg_AHE_Index = index
set udg_AHE_Event_OnHeal_Before = 1
set udg_AHE_Event_OnHeal_Before = 0
set udg_AHE_Param_Amount[udg_AHE_Index] = udg_AHE_Param_Amount[udg_AHE_Index] * udg_AHE_Param_Modifier[udg_AHE_Index]
call SetWidgetLife(udg_AHE_Param_Target[udg_AHE_Index], GetWidgetLife(udg_AHE_Param_Target[udg_AHE_Index]) + udg_AHE_Param_Amount[udg_AHE_Index])
set udg_AHE_Event_OnHeal_After = 1
set udg_AHE_Event_OnHeal_After = 0
set udg_AHE_Param_Index_Exists[udg_AHE_Index] = false
set udg_AHE_Param_Source[udg_AHE_Index] = null
set udg_AHE_Param_Target[udg_AHE_Index] = null
set udg_AHE_Param_Amount[udg_AHE_Index] = 0
set udg_AHE_Param_Modifier[udg_AHE_Index] = 1
set udg_AHE_Param_HealType[udg_AHE_Index] = 0
set udg_AHE_Index = oldIndex
endfunction
endlibrary
function Regeneration takes nothing returns nothing
local unit FoG
local integer unitId
local group g = CreateGroup()
local integer id
loop
set FoG = FirstOfGroup(LivingUnits)
exitwhen FoG == null
set unitId = GetUnitUserData(FoG)
call GroupRemoveUnit(LivingUnits, FoG)
call GroupAddUnit(g, FoG)
set id = AHE_CreateNewIndex()
set udg_AHE_Param_Source[id] = FoG
set udg_AHE_Param_Target[id] = FoG
set udg_AHE_Param_Amount[id] = Table_Unit_Health_Regeneration[unitId] * 0.1
set udg_AHE_Param_HealType[id] = udg_HEAL_TYPE_REGENERATION
call AHE_ApplyHeal(id)
endloop
call DestroyGroup(LivingUnits)
set LivingUnits = g
set g = null
endfunction
set id = AHE_CreateNewIndex()
set udg_AHE_Param_Source[id] = FoG
set udg_AHE_Param_Target[id] = FoG
set udg_AHE_Param_Amount[id] = Table_Unit_Health_Regeneration[unitId] * 0.1
set udg_AHE_Param_Modifier[id] = 1
set udg_AHE_Param_HealType[id] = udg_HEAL_TYPE_REGENERATION
call AHE_ApplyHeal(id)
library combatText
globals
integer array udg_AHE_CombatText_Color_Blue
integer array udg_AHE_CombatText_Color_Green
integer array udg_AHE_CombatText_Color_Red
string array udg_AHE_CombatText_String
endglobals
function CreateCombatText takes string text, real size, real x, real y, integer red, integer green, integer blue returns nothing
local texttag tt = CreateTextTag()
local real angle = GetRandomReal(0, 90) + GetRandomReal(0, 90)
call SetTextTagText(tt, text, size)
call SetTextTagPos(tt, x, y, 40)
call SetTextTagColor(tt, red, green, blue, 255)
call SetTextTagVelocity(tt, 0.071 * Cos(angle * bj_DEGTORAD), 0.071 * Sin(angle * bj_DEGTORAD))
call SetTextTagPermanent(tt, false)
call SetTextTagLifespan(tt, 1.3)
call SetTextTagFadepoint(tt, 0.9)
set tt = null
endfunction
endlibrary
function AHE_CreateCombatText takes nothing returns boolean
local real size = 0.0158 + 0.00006 * udg_AHE_Param_Amount[udg_AHE_Index]
set udg_AHE_CombatText_String[udg_AHE_Index] = I2S(R2I(udg_AHE_Param_Amount[udg_AHE_Index]))
if udg_AHE_CombatText_Color_Red[udg_AHE_Index] > 255 then
set udg_AHE_CombatText_Color_Red[udg_AHE_Index] = 0
set udg_AHE_CombatText_Color_Green[udg_AHE_Index] = 255
set udg_AHE_CombatText_Color_Blue[udg_AHE_Index] = 0
endif
if size > 0.345 then
set size = 0.345
endif
call CreateCombatText(udg_AHE_CombatText_String[udg_AHE_Index], size, GetUnitX(udg_AHE_Param_Target[udg_AHE_Index]), GetUnitY(udg_AHE_Param_Target[udg_AHE_Index]), udg_AHE_CombatText_Color_Red[udg_AHE_Index], udg_AHE_CombatText_Color_Green[udg_AHE_Index], udg_AHE_CombatText_Color_Blue[udg_AHE_Index])
return false
endfunction
function AHE_InitCombatText takes nothing returns boolean
set udg_AHE_CombatText_String[udg_AHE_NewIndex] = null
set udg_AHE_CombatText_Color_Red[udg_AHE_NewIndex] = 256
set udg_AHE_CombatText_Color_Green[udg_AHE_NewIndex] = 256
set udg_AHE_CombatText_Color_Blue[udg_AHE_NewIndex] = 256
return false
endfunction
//===========================================================================
function InitTrig_ADE_Combat_Text_Extension takes nothing returns nothing
local trigger t
set t = CreateTrigger()
call TriggerRegisterVariableEvent(t, "udg_AHE_Event_OnHeal_After", EQUAL, 0)
call TriggerAddCondition(t, Filter(function AHE_CreateCombatText))
set t = CreateTrigger()
call TriggerRegisterVariableEvent(t, "udg_AHE_Event_Heal_Created", EQUAL, 0)
call TriggerAddCondition(t, Filter(function AHE_InitCombatText))
set t = null
endfunction