脚本知识

脚本如何生效的

  • 加载脚本
    • client会加载游戏目录下的judge-xx.ini,这里的xx=你的游戏id,比如你的游戏帐号是abc,则这个文件是judge-abc.ini
  • 脚本结构
    • [public]咒术700级,灵力会比较够用
      all=50
      
      [judge1]正常流程:眼,新任务
      t1=;37m【队伍】.*: .*叛徒.*(
      t2=)作恶多端,快去把他除掉。
      cmd=quest
      user1=真
    • 脚本文件属于配置式的语法,不需要编程语言,只要按固定格式填写设定就行了
    • [public]为固定开头标签,后面文字不执行,可用于注释
    • all=50,告诉客户端一共加载50个判断,可以通过这个控制生效的脚本
    • 空行会被忽略,可用于排版
    • [judge1]为一个判断标签,1为判断序号,每个判断的序号不同,最大不能超过all指定的数量。可以顺序排版,也可以乱续排版。不影响执行。
    • t1=和t2=,为判断的输入关键词,可以只留t1,表示同时满足,支持正则。
      • ;37m为队伍信息的文字颜色代码,这里指定为白色字,这样避免被捣乱
      • 后面表示队伍里眼报坐标的文本特征
    • cmd=quest,为判断的输出执行,每个命令用;分隔,会依次执行完,多个脚本满足,并行。
    • user1=真,是否开启这条判断,真为开启,其它内容都为关闭。user1表示帐号1,不知道user2会是什么,不清楚。
  • 判断执行
    • 输入:每个游戏信息,包括隐藏信息,弹窗提示,聊天信息,公告信息,战斗发招,伤害信息,玩家动作提示等
    • 处理:每一个信息,会对每个判断的关键词规则,都会尝试匹配一次,所以脚本尽量少,能减少客户端的cpu计算量(写打工脚本时发现的)。密集任务时,建议换一个极致精简的脚本,减少cpu计算量。其它时间切换一个综合脚本
    • 输出:当一个判断的关键词规则被匹配命中时,则会由这个信息,触发一次cmd命令执行。
      • lzm提供:关键命令最多执行6个好像,比如get自动拾取,5-6个方向有效,后面几个方向亲测无效,没有被执行到。
      • ktv1提供:战斗奶可以一次招满并投降,远超6个了(和平奶脚本)#亲测这是对的,拾取东西8个方向,在第六个后面加sleep(500),一样能跑完,所以一次执行命令多,则注意加sleep

游戏交互技巧

  • 叛徒
    • 叛徒ID获取:quest信息可以获取到叛徒id和门派信息
    • 自动贴npc:手点NPC弹出菜单,点交谈即自动走位并面对,look出来的菜单无效
    • 自动面对:先执行give 1 coin to $bl
    • 暗器数量:低于100次时,会有提示信息,可以循环提醒修暗器,修完结束循环
    • 接任务的失败:刚上线60秒CD,频繁询问3秒CD,任务30秒CD,统一处理为失败则触发3秒后再问一次任务
  • 挖宝
    • 挖宝保留现场:开挖信息触发奇门设标2次,可回现场
    • 假标飞:通过模拟报标喊话,激活刺杀,执行FLYS即可飞坐标附近,自动飞的判断需要区分眼的叛徒正常报标、被干扰报标、假标
  • 学习
    • 学习启动的严格控制:每次启动学习,可以从look 师傅开始,装备切换,从哪个武功开始 stepover,避免手动操作失误

高级语法实现

  • case switch
    • 比较典型的是坐标处理,借助正则,实现对同一个信息给出不同坐标的处理
  • or多条件
    • 初级多条件:(词1|词2|词3)
      • 你对(段延庆|叶二娘|云中鹤|岳老三|欧阳锋|丁春秋|成昆|金轮法王|倭奴|倭寇|倭兵|夺宝山贼)喊到.*去死吧
    • 高级多条件:(?:(条件组1|条件组2|条件组3))
      • 还没用过
  • func函数封装
    • 特征是用某个信号或喊话触发,做一套固定动作,独立完成,不依赖其他配合
    • 比如死后复活全面恢复
      • 触发信号:添加一个宏,say 复活零蛋,请开始你的表演
      • t1=你说道:复活零蛋,请开始你的表演
        cmd=sleep(50);sleep;sleep(10050);exercise 1200;sleep(6050);meditate 800;sleep(6050);respirate 800;sleep(6050);exert recover;sleep(3500);sleep
    • 门派的连招
    • 挖宝的小恢复,大恢复
    • 这些都是比较固定,且独立完成,被触发时都容易执行成功,就适合封装。后续出现问题,也只需要修改函数内的设置,不需要到处修改。
  • recursion递归循环
    • 递归是指一段处理逻辑在触发后,通过自身调用实现循环重复执行的机制。
    • 举个例子段府的神剑8秒连招设计
      • t1=你施展出六脉神剑
        cmd=perform shenjian[t]8200;sleep(1050);ksq;exert xi
      • 循环的开启
        • 执行了一次神剑发招,就会触发它,它除了执行连招,还会再次挂起一个定时神剑,因为t只能挂一个任务,所以它会不断被自己定时执行,也就是循环。
      • 循环的内容
        • 可以在后面的命令写连招,并且每一步还能封装函数,在这里循环触发
      • 可控循环的跳出
        • 不可控循环:通过sleep(8200);perform shenjian 做的循环的区别在于sleep无法打断
        • 可控循环:通过[t]做的循环,可以用[]命令,结束辅助功能,也就结束跳出循环了
  • while无限循环
    • 发招CD无限重试
      • t1=技能冷却中
        cmd=perform chan
      • 设计一个判断:提示CD时,触发执行某个发招
      • 当发招真的遇到CD时,就会一直循环不断尝试再次发招
      • 这个无限循环有两种情况会自行结束
        • CD冷却,发招成功,则不再提示CD,也就结束循环。
        • 目标死亡,导致发招无法施展,也就不会提示CD触发下一次尝试,也就结束循环。
    • 改造为只触发一次
      • 当提示CD时,先喊话CD信息,再用喊话信息触发尝试发招
      • 因为喊话有3秒CD,导致尝试发招再次触发的CD信息,无法触发喊话,导致只尝试了1次发招
  • 共享缓存
    • 标的:通过写入nick和describe,记录一些事件、状态、名称
    • 触发:通过look自己,这些标记信息匹配时,触发一些动作
    • 共享:别人也可以look你,共享这些特殊事件
    • 擦除:通过nick和describe不带内容执行时,则清除标记
    • 场景:唐门队友实现自动解毒
      • 标记:但发起ksq全队启动后,唐门对自己的nick写入一个单词。
      • 触发:每次一箭连招几秒后look自己,触发自动解毒。
      • 擦除:杀完叛徒则清除nick,这样只在杀叛徒时会自动解毒
      • 改进:可以演变出,当杀唐门或忧愁叛徒时,才做标记,这样唐门队友就可以实现,杀唐门或忧愁时,自动解毒,其它叛徒时不解毒。
    • 场景:少林叛徒实现自动回气,避免反伤震晕
      • 参照上面的例子,遇到少林叛徒做标记,每次连招后面look一下,是少林则exert recover
    • 天下网游可以自己设计快捷键、宏,加上天神搞的client可以写辅助判断,是难得的游戏体验

脚本字符含义

  • 关键词的写法
    • 中文:实测昵称截取时,可以用..两个英文点表示1个汉字或2个字母数字
    • 数字:单个用\d或[0-9]表示,多个为\d+,具体个数用\d{5},范围个数用\d{1,5}
    • 字母:有很多种方式,我一般用\w表示一个字母,用\w+表示一个单词,用\w+ \w+表示两个单词
    • 标记:^ 表示开头 $表示结尾
    • 排除:(?!xxx) 表示此处非xxx字符,这个写法不能顶开头,否则无效。
      • ^(?!.*:)   表示不以.*: 开头,可以防止别人造假信息
    • 掉落信息:@ 识别掉物品 
      • @"\w+ ?\w+" "[^A-Za-z0-9_" ]+" \w+ \w+ [^A-Za-z0-9_" ]+ \d+ \d+$
      • t1=@ cmd=say $bl
        • 你说道:"silver" "白银" 2b67a o151 钱 2235 1173
        • 你说道:"corpse" "强盗的尸体" 2b635 o184 尸 2232 1175
        • 喜羊羊说道:坐标出现在-----"tianshi daoguan" "天师道冠" 22de9 o012 衣 785 1712
      • t1=@ cmd=say $bl
        • 你说道:"taofu zhi" "桃符纸" 626a o042 杂 249 1695
      • t1=@"\w+ ?\w+" cmd=say $bl
        • 你说道: "桃符纸" 626a o042 杂 249 1695
      • t1=@"\w+ ?\w+" "[^A-Za-z0-9_" ]+" cmd=say $bl
        • 你说道: 626a o042 杂 249 1695
      • t1=@"\w+ ?\w+" "[^A-Za-z0-9_" ]+" \w+ \w+  cmd=say $bl
        • 你说道: 杂 249 1695
      • t1=@"\w+ ?\w+" "[^A-Za-z0-9_" ]+" \w+ \w+ [^A-Za-z0-9_" ]+ cmd=say $bl
        • 你说道: 249 1695
    • 周围人物信息:l识别人物(已失效)
      • l"xu sanye" "徐三爷" e5 D08 784 1722 3 0 0
        l"jianghu haojie" "江湖豪杰" 4113 B17 782 1713 5 0 0
        l"di pi" "地痞" 4110 B04 781 1717 3 0 0  
    • 你不知道在做什么:??
    • 正在忙::忙
    • 未知:=S
    • 错误信息:!
      • !内 为内力不足
      • !灵
      • !法
      • !物 为没有这个物品
      • !你没有在战斗中 为没有战斗状态时的发招提示
    • 装备技能:E
      • E magic NONE
      • E magic daoxin-zhongmo
    • 位置信息
      • 识别人物转向,2为朝向,忘记怎么获取的了
        • t1=l cmd=say,结果为0205 68 2929 2
    • 提示信息:M 
    • 文字颜色
      • t1=1; cmd=say $bl 可以抓到所有颜色代码开头的频道对话
      • t1=3 cmd=say $bl 可以抓到所有颜色代码开头的提示信息
      • ;31m为红色-城市
      • ;32m为绿色-天下
      • ;33m为黄色-官府
      • ;34m为蓝色-交易
      • ;35m为紫色-谣言
      • ;36m为兰色-闲聊
      • ;37m为白色-队伍
      • 无色为浅灰-任务信息,比如打quest ^叛徒任务:
      • 无色为浅灰-学习信息飞信息,比如学习提示 ^M 你听了.*的指导为学习时的信息
      • \[33m为暗黄-告诉
      • \[36m为暗青-说道
  • cmd 学习命令
    • 振精学习 learn spells with 3000 from master ten[e]
      • [e]振精学习,剩余精力不够一次with值时,则用内力运功补满
      • spells 武功英文名
      • 3000 每次使用多少精力,振精时使用全部精力值即可,比如你的精气神的精2534,则with 2530
      • master ten 学习对象,加上 from可以有距离学习,不加只能贴着
    • 睡觉学习 learn spells with 2000 from master ten[s]
      • [s]睡觉学习,余精不够with值时,则睡觉补满。
      • 2000  每次使用多少精力,假设精2534,每次with 2500,则要睡很久才能回满,技巧是设为1500时比较合适
    • 睡觉读书 study xx with xxx [s]       
    • 振精练灵内法 meditate 300[l] 
    • 睡觉练灵内法 meditate 300[ls] 
    • 睡觉冥想 transfer qimen-dunjia with 1000[s]  
    • 练武串联 [setover]learn xxx with 100[e]    待执行命令;经验不足以学习时,会执行它。但遇到已经不输于我了则卡住。用正在学武功名字作为条件,触发这个,学够后,就会自动转为学第二个武功。
  • cmd 控制
    • [t]定时执行                         例: ask 悔过[t]3000 时间为毫秒
    • sleep(1000);                         1000=1秒 延迟命令
  • cmd 变量
    • $id                                  取刷屏信息()里的内容,会被干扰,比如眼报(0,0)就它引起的
    • $n                                   取来源信息 <> 中间的文本
    • $bl                                  取来源信息 关键词第一个()内容,或t1和t2之间内容,忽略排除项(?!)
  • cmd 走路命令
    • jump 方向数值 步数值,比如 jump 8 4