---
title: "持续事件"
image: "https://wiki.wrightkit.dev/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.wrightkit.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 持续事件

目前为止，有“持续 - 全局”和“持续 - 每名玩家”两个持续事件。它们有一些难以把握。官方说：“当首次检查就满足条件时，则会执行行动。当未满足条件列表，但之后又满足时，则会尝试再次执行行动”。

我们举一些例子，来看看持续事件到底怎么回事。

## 只运行一次

使用持续事件但不附加任何条件，它在一次游戏中只会运行一次。你可以借此实现初始化。

## 结合“循环”多次运行

例如，我们想追踪玩家位置，如果玩家的Z坐标大于100，我们就每秒给玩家恢复100点生命值：


* 事件：持续 - 每名玩家
* 条件：Z方向分量(位置(事件玩家)) > 100
* 动作：
	* 等待(1, 无视条件)
	* 治疗(事件玩家, 无, 100)
	* 如条件为“真”则循环

如果没有`如条件为“真”则循环`，那么便达不到我们的目的，因为条件并没有从满足变为不满足再变为满足，规则就只会运行一次。

## “等待”中不会运行

例如，我们想追踪玩家位置，如果玩家的Z坐标大于100，我们就在3秒后将玩家移动到某个位置：

* 事件：持续 - 每名玩家
* 条件：Z方向分量(位置(事件玩家)) > 100
* 动作：
	* 等待(3, 无视条件)
	* 传送(事件玩家, 矢量(0, 0, 0))

这个规则能达到我们的目的，但它是有问题的：如果一个玩家在Z=100的地方进进出出（即一会儿小于100，一会儿又大于100），那么玩家也只会传送第一次。原因是“等待”过程中，OW会认为规则仍然在运行，因此不会运行第二次。解决是把等待改成`等待(3, 当为“假”时中止)`。

借助这个现象，我们可以给规则加“CD”。例如禅雅塔打中的玩家会造成“破甲”效果三秒，冷却时间五秒，从“破甲”触发开始计时：

* 事件：玩家受到伤害
* 条件：英雄(攻击方) == 英雄(禅雅塔)
* 动作：
	* 设置受到伤害(事件玩家, 150)
	* 等待(3, 无视条件)
	* 设置受到伤害(事件玩家, 100)
	* 等待(2, 无视条件)

Source: https://wiki.wrightkit.dev/zh/manual/continued-event/index.mdx
