自己写的传奇脚本报错?把手教你排查这5个常见问题

来源: 作者: 点击:
玩家自己编写了一个传奇脚本,功能是让玩家通过打怪获取“能量卷”和“声望卷”,并在NPC处兑换游戏点数。但运行时M2引擎提示错误,导致脚本无法正常使用。以下是脚本代码和问题分析:

[@main]
say

你是来打工的吧,这里的怪会爆能量卷和声望卷的\
几率大约是1/20.你可以挣到你想要的,然后到我这里把\
能量卷换成能量,声望卷的兑换可就别找我了!\
<我要换/@wyh>\
<我不想换/@exit>

[@wyh]
ACT

take 能量卷 1
GamePoint + 5
say

想不想回盟重土城呢?\
<是的/@shide>\
<我不想去/@exit>

[@shide]
IF

checkgold >1999
ACT

MAPMOVE 3 333 333


---

错误原因分析与修复方案
语法错误:#say 中的换行符不兼容

问题:

#say 后的文本使用了 \ 换行符,但M2引擎脚本中需用引擎支持的换行方式(如直接换行或添加 <br>)。
修复:

改为单行文本或使用引擎支持的换行符:
#say 你是来打工的吧,这里的怪会爆能量卷和声望卷的,几率大约是1/20.你可以挣到你想要的,然后到我这里把能量卷换成能量,声望卷的兑换可就别找我了!
<我要换/@wyh><我不想换/@exit>

条件判断语法错误:checkgold >1999

问题:

checkgold 命令的参数应为“金币数是否≥指定值”,而非比较符号。正确写法是 checkgold 2000(表示金币≥2000)。
修复:

#IF
checkgold 2000
#ACT
MAPMOVE 3 333 333

未定义的命令:GamePoint + 5

问题:

传奇引擎中修改游戏点数需使用特定命令,如 GAMERESERVE 或通过变量操作。GamePoint + 5 属于无效语法。
修复:

使用变量记录点数,或调用引擎支持的充值接口:
#ACT
take 能量卷 1
set [001] 5 # 定义变量记录点数
sendmsg 6 恭喜获得5点游戏点数!

脚本逻辑漏洞:未检测玩家是否持有“能量卷”

问题:

直接执行 take 能量卷 1,若玩家背包无该物品会报错。需先检查物品是否存在。
修复:

添加检测逻辑:
#IF
checkitem 能量卷 1
#ACT
take 能量卷 1
#elseact
#say 你没有能量卷!
#break

地图传送坐标格式错误

问题:

MAPMOVE 3 333 333 中,3 是地图编号,但坐标值超出引擎限制(如盟重省地图编号为3,坐标范围通常为0-300)。
修复:

确认地图编号和坐标合法性:
#ACT
MAPMOVE 3 150 150 # 示例坐标(需根据实际地图调整)


---

完整修复后脚本

[@main]
say 你是来打工的吧,这里的怪会爆能量卷和声望卷的,几率大约是1/20.你可以挣到你想要的,然后到我这里把能量卷换成能量,声望卷的兑换可就别找我了!

<我要换/@wyh><我不想换/@exit>

[@wyh]
IF

checkitem 能量卷 1 # 检测是否持有能量卷
ACT

take 能量卷 1
set [001] 5 # 记录5点游戏点数
sendmsg 6 恭喜获得5点游戏点数!
say 想不想回盟重土城呢?

<是的/@shide><我不想去/@exit>

[@shide]
IF

checkgold 2000 # 检测金币≥2000
ACT

MAPMOVE 3 150 150 # 传送到盟重省安全坐标
ELSEACT

say 金币不足2000,无法传送!

break



---

其他注意事项
错误日志定位:

M2引擎报错时会提示具体行号(如“行:2467”),需根据行号检查对应代码。
命令兼容性:

部分命令(如GamePoint)需确认引擎版本支持,建议参考官方网页。
测试建议:

先在单机版测试脚本,逐步验证每个功能模块(如物品扣除、传送、对话)。