Name | Type | is_array | initial_value |
EnergyTowers | group | No | |
ht_EG | hashtable | No |
//TESH.scrollpos=0
//TESH.alwaysfold=0
function GameStartSettingFilter takes nothing returns boolean
return GetUnitTypeId(GetFilterUnit()) == 'n100'
endfunction
function DisplayText takes string s, unit u, integer r, integer g, integer b returns nothing
local texttag tt=CreateTextTag()
call SetTextTagText(tt, s, ( 20 ) * 0.023 / 10)
call SetTextTagPosUnit(tt, u, 0)
call SetTextTagColor(tt, r, g, b, 255)
call SetTextTagVelocityBJ(tt, 30.00, 90)
call SetTextTagPermanent(tt, false)
call SetTextTagLifespan(tt, 2.00)
call SetTextTagFadepoint(tt, 1.80)
set tt=null
endfunction
//==============================================================================================
function EnergyTowerGoldTimer takes nothing returns nothing
local unit u = LoadUnitHandle(udg_ht_EG, GetHandleId(GetExpiredTimer()), 0)
local integer id = GetUnitUserData(u)-1
local player p = Player(id)
local integer gold = GetPlayerState(p, PLAYER_STATE_RESOURCE_GOLD)
local integer red
local integer green
local integer blue
if id == 0 then
set red = 255
set green = 0
set blue = 0
elseif id == 1 then
set red = 0
set green = 0
set blue = 255
elseif id == 2 then
set red = 0
set green = 255
set blue = 255
elseif id == 3 then
set red = 128
set green = 0
set blue = 128
elseif id == 4 then
set red = 255
set green = 255
set blue = 0
elseif id == 5 then
set red = 255
set green = 165
set blue = 0
elseif id == 6 then
set red = 0
set green = 128
set blue = 0
elseif id == 7 then
set red = 255
set green = 192
set blue = 203
elseif id == 8 then
set red = 0
set green = 0
set blue = 160
elseif id == 9 then
set red = 173
set green = 216
set blue = 230
elseif id == 10 then
set red = 102
set green = 205
set blue = 170
elseif id == 11 then
set red = 165
set green = 42
set blue = 42
else
set red = 0
set green = 0
set blue = 0
endif
call SetPlayerState(Player(GetUnitUserData(u)-1), PLAYER_STATE_RESOURCE_GOLD, 10+gold)
call DisplayText("+10 Gold", u, red, green, blue)
set u = null
endfunction
function EnergyTowerTimer takes nothing returns nothing
local timer t_exp = GetExpiredTimer()
local integer pkey = GetHandleId(t_exp)
local unit u = LoadUnitHandle(udg_ht_EG, pkey, 0)
call DestroyTimer(t_exp)
call SetUnitState(u, UNIT_STATE_LIFE, GetUnitState(u, UNIT_STATE_MAX_LIFE))
call UnitRemoveAbility(u, 'Avul')
call FlushChildHashtable(udg_ht_EG, pkey)
set t_exp = null
set u = null
endfunction
function EnergyTowerChangeOwner takes nothing returns nothing
local unit trgu = GetTriggerUnit()
local timer t
if GetUnitAbilityLevel(trgu, 'Avul') == 0 and GetWidgetLife(trgu)-GetEventDamage() < 0.4 then
call UnitAddAbility(trgu, 'Avul')
call SetUnitOwner(trgu, GetOwningPlayer(GetEventDamageSource()), true)
set t = CreateTimer()
call SaveUnitHandle(udg_ht_EG, GetHandleId(t), 0, trgu)
call TimerStart(t, 1, false, function EnergyTowerTimer)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Other\\Awaken\\Awaken.mdl", GetUnitX(trgu), GetUnitY(trgu)))
if GetUnitUserData(trgu) == 0 then
call SetUnitUserData(trgu, 1+GetPlayerId(GetOwningPlayer(GetEventDamageSource())))
set t = CreateTimer()
call SaveUnitHandle(udg_ht_EG, GetHandleId(t), 0, trgu)
call SaveTimerHandle(udg_ht_EG, StringHash("EnergyTower"), GetHandleId(trgu), t)
call TimerStart(t, 20, true, function EnergyTowerGoldTimer)
else
set t = LoadTimerHandle(udg_ht_EG, StringHash("EnergyTower"), GetHandleId(trgu))
call PauseTimer(t)
call TimerStart(t, 20, true, function EnergyTowerGoldTimer)
endif
endif
set trgu = null
set t = null
endfunction
function EnergyTowerAct takes nothing returns nothing
local trigger trg = CreateTrigger()
call TriggerRegisterUnitEvent(trg, GetEnumUnit(), EVENT_UNIT_DAMAGED)
call TriggerAddCondition(trg, Condition(function EnergyTowerChangeOwner))
set trg = null
endfunction
//===========================================================================
function Trig_InitEnegryTowerActions takes nothing returns nothing
set udg_ht_EG=InitHashtable()
call GroupEnumUnitsInRect(udg_EnergyTowers, bj_mapInitialPlayableArea, Condition(function GameStartSettingFilter))
call ForGroup(udg_EnergyTowers, function EnergyTowerAct)
endfunction
//===========================================================================
function InitTrig_InitEnegryTower takes nothing returns nothing
set gg_trg_InitEnegryTower = CreateTrigger()
call TriggerRegisterTimerEventSingle( gg_trg_InitEnegryTower, 0.00 )
call TriggerAddAction(gg_trg_InitEnegryTower, function Trig_InitEnegryTowerActions)
endfunction