local CJ = require "jass.common"
local BJ = require "blizzard"

local trig = CJ.CreateTrigger()
BJ.TriggerRegisterAnyUnitEventBJ(trig, CJ.EVENT_PLAYER_UNIT_SPELL_EFFECT)

-- 下面大量使用了函数定义后直接使用的技巧，这样甚至不需要给函数安一个名字，所以称之为‘匿名函数’。
-- 好处是代码结构更加紧密，也省去了给函数想名字的烦恼。
-- zinc也有匿名函数，如果你使用过zinc，应该不会陌生。
CJ.TriggerAddCondition(trig, CJ.Condition(
	function ()
		-- |xxxx|不是一个标准的lua语法，而是ydwe lua的扩展语法，值和jass里'xxxx'一样
		-- 注意，在lua里'xxxx'是一个字符串，和"xxxx"一样。
		return CJ.GetSpellAbilityId() == 1095264354 --'AHhb'
	end
))
CJ.TriggerAddAction(trig,
	function () 
		local u = CJ.GetSpellTargetUnit()
		local n = 0
		-- 这里定义的两个局部变量，可以直接在下面的计时器函数直接使用。当然你依然可以使用hashtable来传递(但不推荐)。
		-- 这是和jass的最大差别。
		CJ.TimerStart(CJ.CreateTimer(), 1.00, true, 
			function () 
				if n == 8 then
					CJ.DestroyTimer(CJ.GetExpiredTimer())
				else
					n = n + 1						
					CJ.SetUnitState(u, CJ.UNIT_STATE_LIFE, 10 + CJ.GetUnitState(u, CJ.UNIT_STATE_LIFE))
					CJ.DestroyEffect(CJ.AddSpecialEffectTarget("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl", u, "overhead"))
				end
			end
		)
	end
)
