清除非本职业技能最直接的方式是用DELNOJOBSKILL命令。这条命令会自动读取人物当前职业,把技能栏里所有不属于该职业的技能全部删除,不需要手动逐个判断哪个技能该删哪个该留。与它同类的还有CLEARSKILL删除全部技能、DELSKILL删除指定技能,三者的适用场景完全不同,写脚本时不能混用。
## DELNOJOBSKILL命令格式与参数
命令格式为DELNOJOBSKILL,无参数,在#ACT段落中直接调用。基本写法如下:
```
[@clearskill]
#IF
#ACT
DELNOJOBSKILL
#SAY
你的非法技能已经清除了。
```
这条命令的判定逻辑由引擎内置处理,依据是技能数据库中每个技能记录的职业归属字段。战士学习火球术、法师学习攻杀剑术这类跨职业技能一旦存在,执行命令后会被直接移除。命令执行后不给玩家任何提示,需要脚本手动用SENDMSG或SAY段落反馈结果。
与DELNOJOBSKILL相关的命令有三条:ADDSKILL 技能名称用于学习技能,CHECKSKILL 技能名称 运算符 等级用于检测技能等级,DELSKILL 技能名称用于删除单个指定技能。CLEARSKILL删除全部技能,不区分职业,转职场景下不能用,否则会把本职业技能也一并清空。
## 引擎版本兼容性
DELNOJOBSKILL在3K引擎、LegendM2、GOM、ZeroM2等主流引擎中均有支持,命令名称和用法一致,不存在大小写敏感问题,统一大写即可。
GOM引擎的文档中对这条命令的标注与其他引擎有细微差异,写法为DELNOJOBSKILL 技能名称,但实际使用时技能名称参数可以省略,省略后执行效果与无参数版本完全相同。如果服务端中执行命令后没有任何反应,尝试加上一个任意技能名称作为占位参数再测试。
V8引擎和GEE引擎同样支持该命令,但部分老版本GEE引擎中命令被写为DELNOJOB,缺少SKILL后缀。排查时打开服务端引擎文档或命令手册,确认当前版本支持的命令全称。
## 职业检测命令CHECKJOB的配合使用
多数场景下DELNOJOBSKILL需要配合CHECKJOB命令使用。CHECKJOB的格式为CHECKJOB 职业名称,可接受Warrior、Wizard、Taos三个参数,分别对应战士、法师、道士。部分引擎还支持Goblin妖士和Spear灵枪。
在NPC对话脚本中检测职业并执行不同操作的写法:
```
[@转职检测]
#IF
CHECKJOB Warrior
#ACT
DELNOJOBSKILL
SENDMSG 6 你是战士,非战士技能已清除。
BREAK
#IF
CHECKJOB Wizard
#ACT
DELNOJOBSKILL
SENDMSG 6 你是法师,非法师技能已清除。
BREAK
#IF
CHECKJOB Taos
#ACT
DELNOJOBSKILL
SENDMSG 6 你是道士,非道士技能已清除。
BREAK
```
每个职业分支单独写一个#IF判断,执行后加BREAK跳出,避免脚本继续往下执行触发重复删除。CHECKJOB本身不执行任何操作,只做条件判断,返回真或假来决定#ACT段落是否执行。
## 转职脚本中的完整应用
转职是DELNOJOBSKILL最典型的使用场景。玩家从战士转成法师后,原来的攻杀剑术、刺杀剑术、烈火剑法都不再适用,需要全部清除,然后通过ADDSKILL学习法师技能。
完整的转职脚本写法:
```
[@转职法师]
#IF
CHECKJOB Warrior
#ACT
CHANGEJOB Wizard
DELNOJOBSKILL
ADDSKILL 火球术
ADDSKILL 雷电术
ADDSKILL 魔法盾
SENDMSG 6 转职成功!你已成为法师,非本职业技能已清除。
BREAK
#ELSESAY
你的职业不是战士,无法执行此转职操作。
```
CHANGEJOB Wizard先把人物职业改为法师,然后DELNOJOBSKILL以法师身份判定技能归属,所有非法师技能被清除。接着用ADDSKILL逐条学习法师基础技能。这个顺序不能颠倒,如果先执行DELNOJOBSKILL再CHANGEJOB,引擎会以战士身份判定,清除结果会完全不同。
转职后如果玩家身上有战士职业的装备,装备栏会显示但不能触发装备效果,需要脚本引导玩家更换装备。部分版本还需要同步清理战士的转职任务变量,把对应的任务标记位重置为初始值。
## 上线自动清理非法技能
部分服务端存在通过GM命令或漏洞给其他职业角色添加非法技能的情况。可以在QManage.txt的[@Login]触发段中加入自动清理:
```
[@Login]
#IF
CHECKLEVEL > 0
#ACT
DELNOJOBSKILL
SENDMSG 6 检测到异常技能数据,已自动清理非本职业技能。
```
这段脚本在玩家每次上线时自动执行,把技能栏中不属于当前职业的技能全部移除。CHECKLEVEL > 0确保只对正常角色执行,避免新建角色上线时触发。如果不想每次都执行,可以用变量做标记,只在首次上线或版本更新后执行一次。
## 指定删除某个职业的技能
有时需要删除的不是非本职业技能,而是某个特定职业的全部技能。例如玩家从战士转为法师后,想把残留的战士技能精准删除。DELNOJOBSKILL只能按当前职业判定,无法指定要删除哪个职业的技能。
这种场景需要用DELSKILL逐条删除:
```
[@清理战士技能]
#ACT
DELSKILL 攻杀剑术
DELSKILL 刺杀剑术
DELSKILL 半月弯刀
DELSKILL 烈火剑法
DELSKILL 野蛮冲撞
DELSKILL 狮子吼
DELSKILL 开天斩
DELSKILL 逐日剑法
SENDMSG 6 战士技能已全部清除。
```
战士技能名称列表需要根据当前版本的技能数据库来确认,不同版本中技能名称可能存在差异。逐条删除的方式灵活性更高,但技能数量多时脚本会很长,维护起来不如DELNOJOBSKILL方便。
## 命令执行无效果的排查
DELNOJOBSKILL执行后技能没被清除,按以下顺序排查。
先确认脚本是否真的被执行到了。在DELNOJOBSKILL前后插入SENDMSG 6 进入清理流程和SENDMSG 6 清理执行完毕两条提示,观察聊天框是否依次出现。如果只有第一条没有第二条,说明脚本在中间被其他条件中断了。
检查技能数据库中的职业归属字段。打开Magic.DB,找到被添加的非法技能记录,确认其Job字段的值。Job=0对应战士,Job=1对应法师,Job=2对应道士。如果这个字段的值与人物当前职业不一致,DELNOJOBSKILL会将其判定为非本职业技能并删除。如果字段值与当前职业相同,命令不会删除该技能,需要检查是否确实属于跨职业技能。
检查M2Server中是否开启了技能清理功能的开关。部分引擎在选项菜单的功能设置中有一个技能管理子项,需要勾选允许清除技能才能让脚本命令生效。Command.ini中查找DELNOJOBSKILL相关字段,确认为启用状态。
脚本文件编码问题也会导致命令无效。所有脚本文件必须保存为ANSI编码,UTF-8编码下中文字符串乱码,但英文命令DELNOJOBSKILL本身不受影响,如果整段脚本都没有执行,说明是文件编码或加载路径的问题。修改脚本后重启M2Server,或在控制台执行@ReloadManage重新加载QManage.txt。
## 英雄技能的同步清理
如果服务端启用了英雄系统,人物转职后英雄的技能也需要同步清理。在英雄脚本命令前加H.前缀即可对英雄执行同样的操作:
```
H.DELNOJOBSKILL
H.CHECKJOB Warrior
H.ADDSKILL 火球术
```
H.DELNOJOBSKILL的判定逻辑与人物版本一致,以英雄当前职业为准,清除英雄技能栏中的非本职业技能。转职脚本中人物和英雄的转职需要分别处理,不能只改人物职业而忽略了英雄的职业和技能数据。
传奇清除非本职业所有技能脚本写法 DELNOJOBSKILL命令用法与转职脚本实战配置详解
来源:
作者:
点击:

