精英脚本事件
EliteScript 是基于事件的。这意味着它们在特定事件触发时启动。以下是当前有效的事件:
| 事件 | 详情 | 直接目标 [?] |
|---|---|---|
| EliteMobDamagedByEliteMobEvent | 精英被另一个精英伤害 | ❌ |
| EliteMobDamagedByPlayerEvent | 精英被玩家伤害 | 造成伤害的玩家 |
| EliteMobDamagedEvent | 精英被任何东西伤害 | ❌ |
| EliteMobDeathEvent | 精英死亡 | ❌ |
| EliteMobEnterCombatEvent | 精英与玩家进入战斗 | 交战中的玩家 |
| EliteMobExitCombatEvent | 精英退出战斗 | ❌ |
| EliteMobHealEvent | 精英治愈(包括完全治愈) | ❌ |
| EliteMobSpawnEvent | 精英生成 | ❌ |
| EliteMobTargetPlayerEvent | 精英锁定玩家 | 被锁定的玩家 |
| PlayerDamagedByEliteMobEvent | 精英对玩家造成伤害 | 受伤的玩家 |
| ElitePhaseSwitchEvent | Boss因阶段切换而生成 | ❌ |
| ZoneEnterEvent (ScriptZoneEnterEvent) | 实体进入区域。需要设置区域! | 进入区域的实体 |
| ZoneLeaveEvent (ScriptZoneLeaveEvent) | 实体离开区域。需要设置区域! | 离开区域的实体 |
注意:"精英"指的是插件生成的任何攻击性实体,无论是增援、Boss还是其他任何类型。 注意:ZoneEnterEvent 和 ZoneLeaveEvent 的计算开销较大,请谨慎使用!
Direct Target 由脚本目标使用,更多信息请参见此处。
注意:EliteMobDamagedEvent 在精英受到任何来源的伤害时触发,而 EliteMobDamagedByPlayerEvent 和 EliteMobDamagedByEliteMobEvent 是更具体的版本,分别仅在受到玩家或精英怪物伤害时触发。
注意:事件名称是逐字符精确匹配的。 elitemobdeathevent 或 ELITEMOBDEATHEVENT 都会被拒绝并在控制台给出警告;只有 EliteMobDeathEvent 才有效。各个部分(section)的名称本身也区分大小写:Events、Actions、Zone、Conditions 和 Cooldowns 必须完全按这样拼写,而嵌套在某个动作下的 Conditions: 块同样要首字母大写——动作下的小写 conditions: 会被静默丢弃。这些部分内部的一切(targetType、radius、borderRadius、isAlive、Target 等)都不区分大小写,而每一个枚举值都是约定俗成、大小写精确的 UPPER_SNAKE_CASE 常量。
on_zone_enter / on_zone_leave在这里列出 ZoneEnterEvent 或 ZoneLeaveEvent,才会在 Boss 上启动每刻运行的区域监听器。而该监听器是唯一能触发同一 Boss 上 Lua 能力中顶层 on_zone_enter / on_zone_leave 钩子的东西。Lua 能力自己调用的 context.zones:watch_zone(...) 并不会触发它们。
ZoneEnterEvent 和 ZoneLeaveEvent 是特殊事件,允许脚本编写者根据实体进入和离开脚本中设置的区域来触发动作。ZoneEnterEvent 和 ZoneLeaveEvent 的 DIRECT_TARGET 是进入或离开的实体(这意味着你不能将直接目标用作区域的目标),由于内部逻辑的工作方式,只能使用绝对坐标(特定坐标)和相对于Boss的坐标来扫描进出(不能使用以玩家为目标的区域)。
每个脚本只能有一个事件部分。但是,可以为一个脚本设置多个事件作为触发器:
示例
eliteScript:
Example:
Events:
- EliteMobDamagedByPlayerEvent
- EliteMobTargetPlayerEvent
Actions:
- action: PUSH
Target:
targetType: SELF
vValue: 0,.3,0
Cooldowns:
local: 60
global: 20
此脚本会在精英被玩家攻击或锁定玩家时使其跳跃。