`checkskill攻杀剑法=1`这行报错的原因不在语法,而在技能名称写错了。传奇引擎中战士的基础技能叫“攻杀剑术”,不是“攻杀剑法”,名称一字之差,引擎找不到对应的技能数据,就会直接报错。下面把CHECKSKILL命令的完整用法、你脚本里的其他问题以及一个可运行的修正版本拆开来讲。
CHECKSKILL命令的正确格式
CHECKSKILL是检测人物技能等级的核心命令,标准格式是:`CHECKSKILL技能名称检测符(=><)等级是否检测强化技能`。
第四个参数“是否检测强化技能”是最容易被忽略的地方。填0或不填,检测的是普通技能等级;填1,检测的是强化技能等级。大部分技能升级NPC脚本操作的是普通技能等级,这个参数留空即可,引擎会按普通技能处理。
举个正确写法:检测攻杀剑术是否达到1级,写成`CHECKSKILL攻杀剑术=1`。如果要检测冰咆哮的强化等级是否达到1重,则写成`CHECKSKILL冰咆哮=01`,配合`SKILLLEVEL冰咆哮=11`来提升强化等级。
你的脚本里把技能名写成了“攻杀剑法”,引擎在技能数据库里匹配不到这个名称,报错是必然的。
你脚本中的其他几个问题
第一个问题是逻辑不自洽。`#IF`里写的是`checkskill攻杀剑法=1`,检测的是1级,但`#elseact`里的提示信息写的是“你的攻杀剑术没有3级”。检测条件和提示内容对不上,玩家就算技能到了3级,如果检测写的是等于1级,条件依然不满足。应该根据实际需求统一检测等级和提示文案。
第二个问题是金币检测提示写错了。`#IF`里写的是`checkgold100000`,检测的是10万金币,但`#elseact`里提示“没有100W金币”,多写了一个零。这不影响脚本运行,但玩家看到的提示信息是错的。
第三个问题是`#say`的位置。`#act`段执行完之后,`#say`出现在`#act`和`#elseact`之间,结构不够清晰。标准的写法是把`#say`放在`#act`段之前,或者用`SENDMSG`在`#act`段内发送提示信息。
修正后的完整脚本
```
[@main]
①:强化技能
<强化攻杀剑术/@jineng1>
[@jineng1]
#if
CHECKSKILL攻杀剑术=1
CHECKGOLD100000
#act
TAKE金币100000
SKILLLEVEL攻杀剑术+1
SENDMSG6攻杀剑术已提升1级,消耗10万金币
#elseact
MESSAGEBOX你的攻杀剑术未达到1级,或者金币不足10万
```
如果目标是把攻杀剑术从1级升到2级,检测条件改为`CHECKSKILL攻杀剑术=1`,执行`SKILLLEVEL攻杀剑术+1`即可。如果目标是升到3级,检测条件改为`CHECKSKILL攻杀剑术=2`,执行`SKILLLEVEL攻杀剑术=3`。
技能名称的准确性是关键
传奇各引擎中技能名称必须和数据库里的完全一致,包括字数。战士的常见技能标准名称是:基本剑术、攻杀剑术、刺杀剑术、半月弯刀、烈火剑法、野蛮冲撞、狮子吼、逐日剑法、开天斩。
“攻杀剑术”四个字不能简写成“攻杀”,“烈火剑法”不能写成“烈火”,“刺杀剑术”不能写成“刺杀”。多一个字少一个字,引擎都匹配不到。如果你不确定某个技能在服务端数据库里的准确名称,打开服务端Mud2\DB目录下的Magic.DB文件,用DBC2000查看技能列表,第一列就是引擎识别的技能名称。
常见报错排查
如果换了名称之后还是报错,按这个顺序检查。检查脚本文件的编码格式,用记事本打开脚本,另存为时选择ANSI编码,UTF-8编码在部分引擎中会导致脚本加载失败。检查M2引擎的脚本错误日志,位置在MirServer\Mir200\Log\ScriptError.log,日志会显示具体的报错行号和错误描述。检查`#if`和`#act`之间有没有多余的空格或制表符,部分引擎对缩进敏感。
如果`SKILLLEVEL攻杀剑术+1`执行后技能等级没变化,检查技能名称在Magic.DB中的写法是否和脚本中完全一致,同时确认执行脚本的角色职业是战士。SKILLLEVEL调整技能等级时,引擎会校验角色职业是否匹配该技能,战士以外的职业执行攻杀剑术的升级命令会静默失败。
145z.com相关资源
标题:传奇脚本功能:脚本调整技能等级
链接:http://www.145z.com/html/rexuechuanqi/jishujiaocheng/7446.html
标题:传奇上线送技能脚本及技能连接脚本编写全指南
链接:http://www.145z.com/html/rexuechuanqi/jishujiaocheng/7004.html
标题:LegendM2传奇引擎版本检查等级脚本
链接:http://www.145z.com/html/rexuechuanqi/jishujiaocheng/6913.html
CHECKSKILL命令的正确格式
CHECKSKILL是检测人物技能等级的核心命令,标准格式是:`CHECKSKILL技能名称检测符(=><)等级是否检测强化技能`。
第四个参数“是否检测强化技能”是最容易被忽略的地方。填0或不填,检测的是普通技能等级;填1,检测的是强化技能等级。大部分技能升级NPC脚本操作的是普通技能等级,这个参数留空即可,引擎会按普通技能处理。
举个正确写法:检测攻杀剑术是否达到1级,写成`CHECKSKILL攻杀剑术=1`。如果要检测冰咆哮的强化等级是否达到1重,则写成`CHECKSKILL冰咆哮=01`,配合`SKILLLEVEL冰咆哮=11`来提升强化等级。
你的脚本里把技能名写成了“攻杀剑法”,引擎在技能数据库里匹配不到这个名称,报错是必然的。
你脚本中的其他几个问题
第一个问题是逻辑不自洽。`#IF`里写的是`checkskill攻杀剑法=1`,检测的是1级,但`#elseact`里的提示信息写的是“你的攻杀剑术没有3级”。检测条件和提示内容对不上,玩家就算技能到了3级,如果检测写的是等于1级,条件依然不满足。应该根据实际需求统一检测等级和提示文案。
第二个问题是金币检测提示写错了。`#IF`里写的是`checkgold100000`,检测的是10万金币,但`#elseact`里提示“没有100W金币”,多写了一个零。这不影响脚本运行,但玩家看到的提示信息是错的。
第三个问题是`#say`的位置。`#act`段执行完之后,`#say`出现在`#act`和`#elseact`之间,结构不够清晰。标准的写法是把`#say`放在`#act`段之前,或者用`SENDMSG`在`#act`段内发送提示信息。
修正后的完整脚本
```
[@main]
①:强化技能
<强化攻杀剑术/@jineng1>
[@jineng1]
#if
CHECKSKILL攻杀剑术=1
CHECKGOLD100000
#act
TAKE金币100000
SKILLLEVEL攻杀剑术+1
SENDMSG6攻杀剑术已提升1级,消耗10万金币
#elseact
MESSAGEBOX你的攻杀剑术未达到1级,或者金币不足10万
```
如果目标是把攻杀剑术从1级升到2级,检测条件改为`CHECKSKILL攻杀剑术=1`,执行`SKILLLEVEL攻杀剑术+1`即可。如果目标是升到3级,检测条件改为`CHECKSKILL攻杀剑术=2`,执行`SKILLLEVEL攻杀剑术=3`。
技能名称的准确性是关键
传奇各引擎中技能名称必须和数据库里的完全一致,包括字数。战士的常见技能标准名称是:基本剑术、攻杀剑术、刺杀剑术、半月弯刀、烈火剑法、野蛮冲撞、狮子吼、逐日剑法、开天斩。
“攻杀剑术”四个字不能简写成“攻杀”,“烈火剑法”不能写成“烈火”,“刺杀剑术”不能写成“刺杀”。多一个字少一个字,引擎都匹配不到。如果你不确定某个技能在服务端数据库里的准确名称,打开服务端Mud2\DB目录下的Magic.DB文件,用DBC2000查看技能列表,第一列就是引擎识别的技能名称。
常见报错排查
如果换了名称之后还是报错,按这个顺序检查。检查脚本文件的编码格式,用记事本打开脚本,另存为时选择ANSI编码,UTF-8编码在部分引擎中会导致脚本加载失败。检查M2引擎的脚本错误日志,位置在MirServer\Mir200\Log\ScriptError.log,日志会显示具体的报错行号和错误描述。检查`#if`和`#act`之间有没有多余的空格或制表符,部分引擎对缩进敏感。
如果`SKILLLEVEL攻杀剑术+1`执行后技能等级没变化,检查技能名称在Magic.DB中的写法是否和脚本中完全一致,同时确认执行脚本的角色职业是战士。SKILLLEVEL调整技能等级时,引擎会校验角色职业是否匹配该技能,战士以外的职业执行攻杀剑术的升级命令会静默失败。
145z.com相关资源
标题:传奇脚本功能:脚本调整技能等级
链接:http://www.145z.com/html/rexuechuanqi/jishujiaocheng/7446.html
标题:传奇上线送技能脚本及技能连接脚本编写全指南
链接:http://www.145z.com/html/rexuechuanqi/jishujiaocheng/7004.html
标题:LegendM2传奇引擎版本检查等级脚本
链接:http://www.145z.com/html/rexuechuanqi/jishujiaocheng/6913.html

