释放技能是传奇脚本里最常见的动作之一,但很多人写进去却发现角色不放技能,或者放错技能。问题基本出在条件判定、技能ID和释放对象这三块。脚本里释放技能不是直接写“放技能”三个字就行,得把触发条件、技能编号、目标类型全交代清楚。
### 技能释放指令的两种写法
引擎不同,释放技能的指令也不同。主流引擎主要分两种格式。
GOM/GEE引擎里,使用技能的命令是`ReleaseMagic`,后面跟技能ID。具体格式:`ReleaseMagic <技能ID>`。比如法师放雷电术,技能ID是11,就写成`ReleaseMagic 11`。如果要指定目标,加上`Target`参数:`ReleaseMagic 11 Target`,表示对当前选中的目标施放。
HERO引擎用的命令不一样,是`UseSkill`,格式为`UseSkill <技能名称>`。比如`UseSkill 雷电术`。部分老版本引擎还支持`GMEXECUTE 释放技能 <技能名>`这种方式,但兼容性差,不推荐。
### 释放前必须先做条件判定
脚本里不能直接甩一行释放指令就不管了,前面必须加检测条件。最常见的三种检测缺一不可。
**检测技能是否可用**:用`CHECKSKILL`检测角色有没有学这个技能,没学的话执行释放会报错。格式:`CHECKSKILL 雷电术 > 0`。
**检测魔法值是否足够**:用`CHECKMP`比较当前蓝量和技能消耗。比如雷电术耗蓝28点,写成`CHECKMP > 27`。
**检测是否处于冷却**:很多技能有CD,用`CHECKSKILLCD`检测技能是否在冷却中。如果不加这条,脚本会在CD期间反复尝试释放但都失败。
完整写法示例(GOM引擎):
```
#IF
CHECKSKILL 雷电术 > 0
CHECKMP > 27
CHECKSKILLCD 雷电术 = 0
#ACT
ReleaseMagic 11 Target
```
### 组合技能和合击的释放方式
带合击功能的版本,释放合击技能用`ReleaseMagicEx`命令,后面跟合击编号而不是技能ID。比如战士的合击破魂斩编号是1,写成`ReleaseMagicEx 1`。合击释放前需要检测怒气值是否满,用`CHECKHEROENERGY`命令检测。
连击技能的释放用`ReleaseMagicEx`配合连击序号。三连击时,脚本里要依次调用三次,每次间隔需要加延迟命令`Delay`防止动作冲突。
### 技能ID对应表(GOM/GEE常用)
| 技能名 | ID |
|--------|-----|
| 基本剑术 | 1 |
| 攻杀剑术 | 2 |
| 刺杀剑术 | 3 |
| 半月弯刀 | 4 |
| 烈火剑法 | 5 |
| 雷电术 | 11 |
| 火墙 | 12 |
| 冰咆哮 | 13 |
| 施毒术 | 21 |
| 灵魂火符 | 22 |
| 召唤神兽 | 26 |
不同版本的技能ID可能有细微差别,以服务端数据库`Magic.DB`里实际编号为准。
### 技能释放的目标选择方式
不加Target参数时,技能默认朝角色面向方向释放。加Target表示锁定当前选中目标施放。群体技能不受Target影响,始终以角色为中心释放。道士的施毒术和诅咒术这类需要指向目标的技能,必须加Target,否则只会在原地放空。
### 自动战斗脚本里的释放逻辑
在挂机脚本中,释放技能通常会配合攻击触发或定时触发来写。攻击触发脚本里,每次攻击时检测蓝量和CD,满足条件就释放一次技能。定时触发脚本则按固定间隔释放,比如每两秒自动补一次火墙。
示例(攻击触发里自动补毒):
```
[@Attack]
#IF
CHECKITEMW 龙纹剑 1
CHECKMP > 50
CHECKSKILLCD 施毒术 = 0
#ACT
ReleaseMagic 21 Target
```
这样每次攻击时都会检测条件,条件满足就自动放毒。
### 脚本放不出技能的排查顺序
写进去不生效,按下面顺序排查:先确认技能ID或技能名称写对了没;再确认检测条件是否全满足,很多时候是蓝不够或者冷却没好;检查引擎类型,GOM引擎认`ReleaseMagic`,HERO引擎认`UseSkill`,混用了就无效;最后查看M2引擎的脚本错误日志,里面有详细报错提示。
传奇脚本释放技能的条件判定与指令写法全解析
来源:
作者:
点击:

