ClosureEvents.wurst 是一个围绕魔兽争霸 III 事件的通用事件监听器包装器,它使用闭包作为监听器。 使用闭包允许你传递数据并将监听器保存在变量中。
确保对于闭包事件,始终使用事件的 EVENT_UNIT_PLAYER 变体,即使它只针对单个单位。相反,应使用带有单位参数的适当版本的 .add()。
在大多数情况下,你会希望使用通用的 EventListener.add(..) API。以下是一些示例:
EventListener.add(EVENT_PLAYER_UNIT_DEATH) ->
	Log.info("Any unit died: " + GetTriggerUnit().getName())
EventListener.add(specificUnit, EVENT_PLAYER_UNIT_DEATH) ->
	Log.info("specificUnit died: " + GetTriggerUnit().getName())
以下事件也可以使用,但它们不属于 EVENT_PLAYER_UNIT_* 类型:
尽管存在 EVENT_PLAYER_CHAT = ConvertPlayerEvent(16),但它并非 TriggerRegisterPlayerChatEvent 原生函数所使用的事件,也无法访问输入的消息。因此,如果你想访问 GetEventPlayerChatString,你需要使用 EVENT_PLAYER_CHAT_FILTER = ConvertPlayerEvent(96)。
EventListener.add(EVENT_PLAYER_CHAT_FILTER) ->
	let input = GetEventPlayerChatString()
	let plyer = GetTriggerPlayer()
	...
对于施法事件,存在以 EventListener.on 开头的便捷包装器。例如:
EventListener.onCast(MY_SPELL_ID) caster ->
	print(caster.getName() + " casted my spell.")
EventListener.onTargetCast(myUnit, MY_SPELL_ID) (caster, target) ->
	caster.damageTarget(target, 50.)
EventListener.onPointCast(myUnit, MY_SPELL_ID) (caster, target) ->
	flashEffect(Abilities.frostNovaTarget, target)