北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 905|回复: 5

【Paotin++】武当新人门派任务0-10w

[复制链接]
发表于 2024-7-9 15:32:58 | 显示全部楼层 |阅读模式
本帖最后由 doumimi 于 2024-7-9 04:16 PM 编辑

小萌新分享一下 使用Paotin++来辅助完成武当新手任务的一些思路。 如果有内容的违规,我会积极配合修改。

下面来说下武当新手任务,逐个进行拆解。
  • 采气
  • 阵法
  • 炼丹
  • 诵经
  • 侠客

从我个人感觉由简单到难来说明。

1. 采气
采气的流程如下:
  • 去天柱峰下。
  • 输入 caiqi 。
  • 采气完成后, 返回武当广场交任务。

采气的流程比较简单,有个问题就是要如何去【天柱峰下】以及返回, 我们通过lm看一下地图,可以看到去【天柱峰下】有两条路:
  • 一条是笔直向上,通过 后门-◎ 密林◎-朝天宫。
  • 一条是从山下绕过去,通过 太子岩-雷神洞-南岩峰。

我们先看第一条路, 其中地图中有个地方是 ◎ 密林◎, 这个路径比较短, 但是,地图中如果有某个地方带有 ◎标识,那么说明这个是个迷宫,路径会经常变化。 这种就不太利于我们做机器来辅助完成任务。 所以我们选择第二条路线,那么第二条路线很长,我们如何快速、稳定的走到目的地,解决走路径的问题。好在 Pt提供了一个优秀解决方案,path.Walk , 炮爷称之为千里通。具体path如何使用请看HELP path或者另外一篇文章介绍。
然后我们就可以写如下内容到某个文件里面, 比如 wudang.tin 。 在游戏中 通过LM 、 KM 、 RLM 来 加载、卸载、重新加载这个模块来让 内容生效。 加载完成之后也可以输入MODS 看下当前有哪些模块被加载。
  1. #action {冲虚道长说道:「道家炼气最讲究时辰和地点} {goto-caiqi};

  2. #alias {goto-caiqi} {
  3.     xiashan;  #nop 道德不够的话,需要ask song about 下山, 这个地方就不写了,大家自己补充吧;
  4.     #delay 2 {path.Walk {武当山的武当广场-武当山的天柱峰下} {caiqi}};
  5. };

  6. #action {大脑一片空明,感觉一股热气在任督二脉盘旋} {path.Walk 武当山的天柱峰下-武当山的武当广场 {#delay 1 {ask chongxu about success}}};
复制代码


每天只有子午两个时辰可以采气,错过了时间段,就只能等几个时辰或者是放弃任务。

  1. #action {仅子午两个时辰能够进行采气!} { caiqi-fail };
  2. #alias caiqi-retry {okLog 10秒后我再试试;#delay {10} caiqi};
  3. #alias caiqi-fail {path.Walk 武当山的天柱峰下-武当山的武当广场 {#delay 1 {ask chongxu about fail}}};
复制代码




2. 阵法
这个任务自动化有两个地方需要注意。
1. 如何自动根据提示走位。
2. 去哪个小校场并且正确返回。
2. 1 自动走位问题
先梳理一下走位的逻辑。
阵法教习从远处跑过说到:今天练『正五行阵』,请大家注意走位(zouwei)!
『正五行阵』按照五行相生进行排阵,金生水,水生木,木生火,火生土,土生金。
『反五行阵』按照五行相克进行排阵,金克木,木克土,土克水,水克火,火克金。
大家一会儿按照我公布的方位走(zouwei)到自己负责的位置中,然后注意按照『正五行阵』开始走位(zouwei)。

username一会儿站在xx位。
然后隔一段时间会提示:大家从自己现在的位置按照『%1五行阵』的要求往下走一步。

什么意思呢?
假如现在是正五行阵。 那么如果我在金, 下一步要 zouwei 水, 假如我在水,下一步要zouwei 木。。。。。
假如现在是反五行阵, 那么如果我在金, 下一步要 zouwei 木, 如果我在木,下一步要zouwei 土。。。。。

梳理完逻辑之后,我们发现 下一步的命令需要根据 【当前位置】以及阵法【正或反】来判断 。那么我们就要用到 if 或者 switch来啦。
  1. #action {%*一会儿站在%1位。} {
  2.     #var weizhi %1;
  3.     #delay {1} {#send zouwei %1};
  4. };
  5. #action {大家从自己现在的位置按照『%1五行阵』的要求往下走一步。} {
  6.     #if {"%1" == "正"} {
  7.         #switch {"$weizhi"}{
  8.             #case {"金"}{#send zouwei 水;#var weizhi 水};
  9.             #case {"水"}{#send zouwei 木;#var weizhi 木};
  10.             #case {"木"}{#send zouwei 火;#var weizhi 火};
  11.             #case {"火"}{#send zouwei 土;#var weizhi 土};
  12.             #case {"土"}{#send zouwei 金;#var weizhi 金};
  13.         }
  14.     };
  15.     #else {
  16.         #switch {"$weizhi"}{
  17.             #case {"金"}{#send zouwei 木;#var weizhi 木};
  18.             #case {"木"}{#send zouwei 土;#var weizhi 土};
  19.             #case {"土"}{#send zouwei 水;#var weizhi 水};
  20.             #case {"水"}{#send zouwei 火;#var weizhi 火};
  21.             #case {"火"}{#send zouwei 金;#var weizhi 金};
  22.         }
  23.     }        
  24. };
复制代码

关于上面的代码, 大家一定要注意, 在if或者switch、case的判断中,如果要判断的内容是字符串,一定要加上引号才行。

2.2 校场判断
房间中已经有人在演习阵法,请等对方演习结束再进去吧。

有时候会有这种提示, 这时候我们希望能够自动的尝试另外的房间。 这边创建了两个列表,一个是去校场的,一个是对应的返回的。 假如用了 zhenfa-room[1] 去做任务,就用zhenfa-room-back [1] 来返回。
  1. #var zhenfa-room {};
  2. #var zhenfa-room-back {};
  3. #list zhenfa-room create {nw;w;sw;ne;e;se};
  4. #list zhenfa-room-back create {se;e;ne;sw;w;nw};

  5. #alias {goto-zhenfa} {
  6.     #action {房间中已经有人在演习阵法,请等对方演习结束再进去吧。} {
  7.         math.Inc room.number;
  8.         goto-zhenfa;
  9.     };
  10.     $zhenfa-room[${room.number}];
  11.     zhenfa;
  12. };

  13. 回去的时候就可以通过 $zhenfa-room-back[${room.number}] 这个变量来返回。  因为定义的var都是全局变量,那么大家还要找一个时机把 room.number 重新设置成1, 或者再完善一些, 如果所有的room都被占用了, 也要修改room.number, 重来一遍。
复制代码



3. 炼丹

炼丹其实也比较简单,其中主要的难点是用到的颜色判断。 这篇文章里面有作业可抄。
【paotin++】新人向的炮艇驾驶手册 - 技术园地 - 北大侠客行MUD论坛 - Powered by Discuz! (pkuxkx.com)

关于颜色匹配也可以看一下大师的明教萌新攻略。
分享一个10w经验的明教小萌新PaoTin++成长之路 - 技术园地 - 北大侠客行MUD论坛 - Powered by Discuz! (pkuxkx.com)

具体的颜色可以从var/log/userid/socket.log 里面来找。实话说,我颜色匹配用的也不太熟练,这些颜色都是 ANSI转译码。 应该也包含一些字体相关的内容,等我再熟悉一些,可能会再单独介绍一下这部分内容。
4. 诵经
关于借书、还书、通过匹配提取书名、章节、第几页 这个就不说了,相信大家根据上面说的都能做到。
额外提一嘴, tintin中匹配的参数如果遇到嵌套的话, 会从%1 变成%%1 。 每嵌套多一层,就多一个 %

诵经任务难点:
  • 诵经的地点有很多。
  • 定位page。
  • 获取诵经内容。


4.1 多地点
多地点的这个问题没办法,录路径或者录地图是必修课之一, 大家就手动录制吧(北侠严谨分享地图数据)。pt已经提供了很方便的千里通+小键盘走路。 加上武当门派wiki中也有一些路径,可以直接拿来用。


4.2 诵经的内容

关于诵经的内容。 先说最笨的思路,那就是把6本庄子 + 2本道德经的每一页的内容获取到,然后放在机器里面。一共大约1000页。
比如这样的
  1. #alias {庄子·内篇「上卷」_庄子·内篇·养生主(20)} {#var sj.page 88;#var sj.words 人吊亦吊人号亦号怪其不倚户观化乃至三号也};
复制代码

ok肯定是ok的,但是这个工作量太大了,有没有办法把 诵经出现的那些内容给抓出来呢? 有. 用单行匹配的思路和多行匹配的思路都可以。

4.2.1 单行匹配
  1. #var sj.content {};
  2. #action {==                    %+1..100S                    ==} {#var sj.content $sj.content%1};
复制代码

上面这种方法就是一行一行匹配,然后给字符串拼接起来。 更多的匹配请看一下tintin 文档中的pcre章节。简单说一下, %+1..100S就是匹配 1-100个非空格的字符。 实际诵经每行的内容不会有这么多,不过也没关系。


4.2.2 多行匹配
  1. #action {================================================================\n%a\n================================================================}{   
  2.     #var sj.content %1;
  3.     #replace sj.content {=}{};
  4.     #replace sj.content { }{};
  5.     #replace sj.content {\n}{};
  6.     #showme $sj.content;
  7. };
复制代码

多行匹配是%a ,这是个固定的特殊用法, 更多的匹配请看一下tintin 文档中的pcre章节。 匹配完成之后,需要处理一下 空格、换行以及== 这个符号。


4.3 定位page
任务给的信息是这样的 庄子·内篇·养生主(20) 。
我们要获取到具体的页数。那么如果知道了养生主的第一页是69 ,那么我们就可以进行推算, 养生主(2) = 70 ... 养生主(20) = 88;
我们提炼出来公式 page = 该章节第一页 + 任务给的页数 -1 。  比如 养生主(2) 的page  =  69 +  2 - 1 = 70
下面我给出庄子的index。 道德经的大家可以自己取翻一下加进来。

  1. #local skip $book-index[$sj.phase]; #nop phase 是章节名称;
  2. #math sj.page {$sj.page-in-phase + $skip - 1};
  3. #send page $sj.page;


  4. #var book-index {

  5. {庄子·内篇·逍遥游}{1}
  6. {庄子·内篇·齐物论}{21}
  7. {庄子·内篇·养生主}{69}
  8. {庄子·内篇·人间世}{1}
  9. {庄子·内篇·德充符}{46}
  10. {庄子·内篇·大宗师}{77}
  11. {庄子·内篇·应帝王}{124}

  12. {庄子·外篇·骈拇}{1}
  13. {庄子·外篇·马蹄}{4}
  14. {庄子·外篇·胠箧}{12}
  15. {庄子·外篇·在宥}{31}
  16. {庄子·外篇·天地}{66}
  17. {庄子·外篇·天道}{116}
  18. {庄子·外篇·天运}{151}
  19. {庄子·外篇·刻意}{190}
  20. {庄子·外篇·缮性}{201}

  21. {庄子·外篇·秋水}{1}
  22. {庄子·外篇·至乐}{51}
  23. {庄子·外篇·达生}{69}
  24. {庄子·外篇·山木}{107}
  25. {庄子·外篇·田子方}{143}
  26. {庄子·外篇·知北游}{177}

  27. {庄子·杂篇·庚桑楚}{1}
  28. {庄子·杂篇·徐无鬼}{42}
  29. {庄子·杂篇·则阳}{98}
  30. {庄子·杂篇·外物}{141}
  31. {庄子·杂篇·寓言}{168}

  32. {庄子·杂篇·让王}{1}
  33. {庄子·杂篇·盗跖}{47}
  34. {庄子·杂篇·说剑}{99}
  35. {庄子·杂篇·渔父}{114}
  36. {庄子·杂篇·列御寇}{139}
  37. {庄子·杂篇·天下}{165}

  38. };
复制代码



5. 侠客

侠客任务难度很大,血量1000以下最好直接放弃,有可能会被一些大轮寺的一棍子就抡死,我个人感觉敌人的强度是固定的,所以级别越高越好打,等级高了一两剑就死。 不过级别稍微高一些的话,做新手任务收益已经很低了,可以在这里刷刷道德和声望、蝙蝠血甲卖点小钱。 等级低时, 做之前一定要做好autopfm, 可以用定时器 + $char 里面的属性判断 气势血量之类的属性。
如果大家已经完全掌握了上面那些任务是怎么做的, 这个任务除了迷宫其实没什么太难的地方,通过录制路径 + action就能完成。
然后关于迷宫,
1. 一方面大家可以每周录制一遍路径,这个路径应该是会在服务器重启的时候变换。 这样缺点是比较麻烦。
2. 或者大家可以用一些遍历算法比如dfs或者bfs来寻找出路, 好在是这个迷宫路径比较短, 问题是动态遍历算法可能不太好实现。
3. 我个人的方法,就是一进入迷宫,就两个地方来回走,不停的刷怪,可以获得一些经验和钱。 刷够时间,被关进监狱后,给狱卒10 sivler,之后就是正常的任务流程,通过action来完成就行。

迷宫的地图既然是随机的,那么如何才能实现两个地方来回走呢? 好在PT又提供了强大的轮子!
轮子1 之 gMapRoom !!!


  1. #var gMapRoom;

  2. #ali wd.get-shulin-out {
  3.     #var wd.sl.exits {};
  4.     #list wd.sl.exits create $gMapRoom[exits];
  5.     #FOREACH {$wd.sl.exits[]} {d} {
  6.         okLog 方向$d;
  7.         #if {"$d" != "out"} {
  8.             #var wd.shulin.out $d;
  9.             okLog $wd.shulin.out;
  10.             #return;
  11.         };
  12.     };
  13. };
复制代码
gMapRoom 这个变量包含了当前房间的房间名、出口、物品清单等实用信息。大家可以随便找个房间,输入 #var gMapRoom 来查看。它的内容是 pt 自主抓去的,我们玩家只要学会怎么使用就可以了。类似的还有 char[HP] 变量、char[Skills] 变量等等,如果不清楚有哪些变量的话,可以用 VARS 查看,支持模糊查找。

轮子2 之 @char.IsBusy{}  @char.IsCombat{}  #var char
在不停刷怪的时候,我是通过一个定时器,在两个地点之间来回走, 那么什么时候该走,什么时候该战斗,就是通过上面这个封装好的函数来实现的。  并且在需要判断一些任务状态的时候,是通过$char[HP] 来判断的,非常好用,也推荐大家一定要试一下 #var char , 里面包含了HP, Status, 档案, 技能等属性。







北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2024-7-9 15:33:25 | 显示全部楼层
占个坑
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-7-9 15:46:00 | 显示全部楼层
大佬牛x
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-7-9 15:58:52 | 显示全部楼层
武当走阵我是看哪个位置没人走去哪个,不管正反。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2024-7-9 16:11:37 | 显示全部楼层
本帖最后由 doumimi 于 2024-7-9 04:16 PM 编辑
jarlyyn 发表于 2024-7-9 03:58 PM
武当走阵我是看哪个位置没人走去哪个,不管正反。

那个也可以的,也是一种思路,等其他人都走完,抓到所有走过的位置, 然后用排除法。强!
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2024-7-12 12:13:31 | 显示全部楼层
学习,感谢,我的武当新手任务机器可以照着修改了
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-9-8 10:26 AM , Processed in 0.010404 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表