当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇MAX引擎元宝充值卡密脚本换端后提示卡号错误,路径符号与变量含义故障详解

热度:
脚本内CLEARCODELIST命令中的两点..是目录回退标识符,属于文件相对路径写法,Quest脚本读取文件时,默认以M2主程序所在目录作为基准目录,..代表向上返回一级文件夹。当前脚本路径..\QuestDiary\冲值\500元卡号.txt,含义就是从M2所在文件夹向上退一层,再进入QuestDiary文件夹,继续进入冲值文件夹,读取500元卡号.txt卡密文档。更换服务端之后,M2存放位置改变,QuestDiary目录层级发生变化,这个相对路径就会定位不到txt文件,CHECKCODELIST读取文件失败,直接判定卡号不存在,固定触发#elsesay卡号错误提示。部分服务端QuestDiary文件夹直接放在M2同级目录,不需要向上回退,此时脚本路径需要改为QuestDiary\冲值\500元卡号.txt,去掉前面的..。路径名称里的中文文件夹名称冲值,在部分MAX引擎版本识别不稳定,中文目录会造成文件读取异常,同样会出现卡密匹配失败。

<$STR(N8)>是引擎内置变量调用写法,InPutInteger8命令用于弹出数字输入框,玩家在弹窗输入的数字内容,会自动存入内置整型变量N8,<$STR(N8)>就是读取N8里面存储的输入数字,传递给CHECKCODELIST命令,拿这个数字和txt卡密文本内的卡号进行比对。InPutInteger只支持纯数字卡号,如果卡密包含字母、横线这类字符,就不能使用InPutInteger,需要替换成InPutString,对应的变量也更换为S系列字符串变量。MAX引擎中N开头变量专门存放纯数字内容,S系列变量用来存放带字母符号的字符串内容,变量类型不匹配会直接造成卡密比对失败。旧服务端引擎对路径和变量校验宽松,脚本可以正常运行,更换新服务端后引擎校验严格,路径层级、变量类型不匹配的问题就会暴露出来,无论输入任何卡号都会返回卡号错误。

CHECKCODELIST命令的完整逻辑是读取传入变量内容,检索指定txt文档,判断文档内是否存在完全一致的一行字符,匹配成功执行#act区块,CLEARCODELIST会把匹配到的这一行卡号从txt文档内删除,防止卡号重复兑换,GAMEGOLD+100000用来增加账号元宝数量,#say弹出充值成功提示。如果文件找不到、路径错误、txt编码不对、卡号前后存在多余空格,CHECKCODELIST条件判定结果全部为假,直接跳转#elsesay,固定输出卡号错误提示。

txt卡密文档的格式问题也是换端之后高发故障,卡密文本必须使用ANSI编码保存,使用记事本另存的时候选择ANSI编码,UTF-8编码会让MAX引擎读取卡密文本乱码,所有卡号全部匹配失败。txt内每一条卡号单独占用一行,卡号前后不能添加空格、多余的回车换行,卡号末尾的空白字符会导致字符串比对不一致,哪怕输入正确卡号也识别失败。文件名大小写在部分引擎环境存在区分,500元卡号.txt和500元卡号.TXT会被判定为两个不同文件。

引擎命令兼容差异,旧服务端的MAX版本对CHECKCODELIST参数顺序容错高,更换新版本引擎之后,参数顺序严格要求,变量在前,文件路径在后,参数颠倒直接判定条件不成立。脚本文件存放目录必须在QuestDiary内,修改脚本后需要在M2控制台执行重载Quest命令,不重载脚本依旧读取旧缓存配置,修改不会生效。同名标签冲突也会干扰脚本执行,如果其他Quest脚本存在[@InPutInteger8]标签,引擎优先加载靠前的脚本,当前充值脚本被覆盖,输入卡号之后逻辑执行异常,持续返回卡号错误。

输入框命令匹配校验,NPC对话内的调用命令<点这里输入你的充值卡卡号/@@InPutInteger8>,末尾的数字8必须和脚本标签[@InPutInteger8]的数字编号保持一致,数字不匹配,输入完成后不会跳转到这段充值脚本。InPutInteger8仅接受数字输入,卡号包含字母的场景,必须把@@InPutInteger8修改为@@InPutString8,脚本标签同步修改为[@InPutString8],变量替换为<$STR(S8)>,否则输入带字母的卡密直接判定无效。

目录权限与文件只读属性,更换服务端之后,txt卡密文件设置了只读属性,CLEARCODELIST执行删除卡号操作失败,部分引擎遇到只读文件,CHECKCODELIST直接返回false,提示卡号错误。需要右键txt文件属性,取消只读勾选,保证引擎可以读写修改卡密文本。M2程序的读写权限不足,无法读取QuestDiary文件夹内的txt文档,同样造成卡密检测失效。
[顶部]