写脚本这事,说白了就是告诉手机或者模拟器在什么情况下干什么事。传奇正传的脚本分两种路子,一种是在游戏服务器端改配置表写Lua,另一种是在手机端用自动化工具录操作。两条路不一样,用的工具和思路也完全不同。
**服务器端脚本的写法**
这种脚本改的是游戏本身的功能,比如新加一个道具、做一个活动、开个副本。传奇正传的服务端脚本主要用Lua语言,配合Excel配置表一起用。
道具类脚本的写法是这样的:先在Items.xlsx配置表里加一行,Race字段填100表示双击可用,Script字段填item.XXX表示调用item.lua里的XXX函数。然后在item.lua里写function XXX(player, Item),player是使用道具的玩家,Item是道具本身。函数里写清楚这个道具干了什么事,最后返回0表示用完不消失,返回1表示用完就没了。
定时活动脚本走另一套流程。AutoRun.xlsx配置表管时间,runtype填0是按间隔分钟执行,填1是定点时间触发。Script字段填DayActivity.XXX,然后在DayActivity.lua里写对应的函数。注意这个表配的时间每天都执行,如果只想某段时间开活动,得在脚本里自己加日期判断。
副本脚本复杂一些。Map.xlsx里MapType填1表示副本地图,FuBen.xlsx里Type填1表示组队副本。脚本放在Script\FuBen目录下,关键函数有这么几个:OnOpenCopy在开启副本时触发,OnEnterCopy是进副本时触发,OnLeaveCopy是退出时触发。副本里面地图之间的跳转不能用MapLink.xlsx配,得在脚本里用fuben:CreateMapLink这个接口写。
改完配置表和脚本之后,用发布工具导出上传,然后在游戏里输指令动态加载。道具类用@reload item和@reload script,活动类用@reload autorun,副本类用@reload map和@reload fuben。
**手机端自动化脚本的写法**
这种脚本不修改游戏本身,而是模拟人在屏幕上点按滑动。核心工具是Auto.js或者触动精灵这类框架。
Auto.js用的是JavaScript语法。写之前先搞清楚几件事:屏幕分辨率得适配,setScreenMetrics(1080,1920)这行加上去,脚本在不同尺寸手机上才能找准位置。触摸模拟的命令就那几个,click(x,y)点一下,swipe(x1,y1,x2,y2,持续时间)滑一下,press(x,y,持续时间)按住不放。
找图找色是这种脚本的命根子。游戏里没有控件可以抓,只能靠截图识别。找色就是获取某个坐标点的颜色值,跟预设的颜色比对来判断当前状态,比如血条空了就点回城。找图更高级一点,在屏幕上搜索预设的小图片,比如BOSS刷新的图标出现了就去点它。
写循环逻辑的时候注意加上随机延迟和点击偏移。每次都点同一个坐标同一毫秒,太容易被逮住了。random()生成随机数,点坐标的时候加几个像素的偏移,点击间隔也上下浮动一点。
**NPC对话类脚本的写法**
这类脚本在服务端和手机端都能写,看是改游戏功能还是做自动化操作。
服务端写NPC脚本,核心入口是main函数,所有逻辑写在main下面。传送功能大概长这样:先用check命令检查玩家条件,比如check good 2000检查有没有2000金币,条件满足就执行take拿走金币,再用map命令把人传到目标地图。地图编号有固定规则,盟中是-3,比奇是-0。
手机端操作NPC对话,靠的是识别对话框的位置和选项文字。先截图找到对话框区域,再用OCR或者模板匹配找到选项文字的位置,然后模拟点击对应的坐标。
**关键命令的查找方法**
写服务端脚本的时候经常要找现成的命令怎么用。右键打开查找替换功能,查找范围选脚本主目录,文件类型选.txt,把命令关键词输进去搜。搜到的结果会显示在哪个文件的哪一行,双击就能跳过去看。
管理员命令的调用格式是“执行 管理员命令参数”,这个只能在qm登录脚本里用,在qf功能脚本里不起作用。选命令的时候别看命令格式,那个能改,得看命令说明里的功能描述来确认对不对。
**写脚本的基本顺序**
不管是哪种脚本,动手之前先把目的想清楚。要自动打怪还是自动喊话还是做个新活动。然后搭环境,服务端脚本准备好配置表和Lua编辑器,手机端脚本装好Auto.js和VSCODE插件连上手机或者模拟器。写完了跑一遍测试,出错了看日志定位问题。没问题了就上线用,服务端脚本用指令动态加载,手机端脚本保存好随时调出来跑。

