北大侠客行MUD论坛

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

paotin峨嵋新手任务攻略

[复制链接]
发表于 前天 11:16 PM | 显示全部楼层 |阅读模式
本帖最后由 bszr 于 2025-7-3 03:33 PM 编辑

入坑三个半月,先后玩了武当,天龙寺,最后玩了全真。第一个全真号选了过于极端的天赋,导致很多主流任务做不动,那时候大部分时间都在写机器,很艰难的玩到了10M。在师姐的建议下,选择重开,重开后由于机器都有了,所以大部分时间都在挂机。无聊之下决定尝试一个新的门派,于是有了这篇paotin 峨嵋新手任务攻略,希望能起到抛砖引玉的效果。机器水平一般,大佬们见笑了。
本攻略不包含任何路径数据,如有任何不符合北侠风格内容请指出,感谢。

建议先看下豆米大佬paotin++的基础贴。记不住也没关系,可以先看一遍,有个印象,里面有很多案例,非常有用。

【Paotin++】入门系列之一: 客户端基础【Paotin++】入门系列之二: 机器基础
【Paotin++】入门系列之三: 最常用内置变量,别名。
【Paotin++】入门系列之四: 最常用内置函数
【Paotin++】入门系列之五: 事件驱动编程


北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:16 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 03:20 PM 编辑

峨嵋新手任务参考 nol 的帖子。包含入门任务 (念经) 中级任务 (打坐,吐纳,核对佛经,找草药,制作霹雳弹,学习技能,打扫后山) 高级任务(......)。本篇攻略主要是初级和中级任务的内容。

峨嵋初级,中级任务,除了打扫后山,其他任务都是到固定的房间去做,所以建议把从起点房间到任务房间的路径录制下来,然后使用path.WalkStep进行移动。
  1. #var {em.pathList} {
  2.   {后殿-伏虎寺} {n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n;n}
  3.   {后殿-后园} {s;s;s;s;s;s;s;s;s}
  4.   {后殿-毗卢殿} {w;w;w;w;w;w;w;w;w}
  5. };
  6. path.WalkSteps {$em.pathList[后殿-伏虎寺]} {
  7.   #delay {waitForNianJing} {nianjing} {2};
  8. };
复制代码


我使用的是动态路径,所以把参考给出@mMap.AStar{}换成上面$em.pathList[后殿-伏虎寺]这种形式就好。主要是介绍下新手机器的内容,走路不是重点,但是防止我的自定义方法造成误导和难以理解的地方,这里单独提一下,后面就不再解释了。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:17 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 03:41 PM 编辑

念经

新手上峨嵋,第一件事是拜师父,在山门拜过文虚师太之后,就可以到后殿找静和师太 ask shitai about 帮助,接到第一个新手任务。第一个新手任务非常简单,让你到指定的一个房间去念经。
静和师太说道:「你刚进我派,其实我派一切以静修为主,你且去伏虎寺念段佛经(nianjing),静下心来吧。」
这里用到了3个方法

#delay {延时器名字} {要执行的代码} {延迟的时间};
path.WalkSteps {路径} {走路完成后执行的代码} ;

busy.Wait 执行一些操作会 这个方法会在忙的状态结束后执行里面的代码;


  1. #action {静和师太说道:「你刚进我派,其实我派一切以静修为主,你且去%*念段佛经(nianjing),静下心来吧。」} {
  2.   #local {room} {%1};
  3.   path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{$room}}} {
  4.     #delay {waitForNianJing} {nianjing} {2};
  5.   };
  6. };

  7. #action {你觉得自己完全静下心来了。} {
  8.   #delay {2} {
  9.     path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{后殿}}} {
  10.       busy.Wait {ask shitai about finish};
  11.     };
  12.   };
  13. };
复制代码


北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:18 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 10:40 PM 编辑

简单的转换

打坐,吐纳,学习技能这些任务都会涉及到涨多少点数,升多少级,所以建议建一个list,用来转换中文次数和数字。

  1. #var {em.numList} {
  2.   {一} {1}
  3.   {二} {2}
  4.   {三} {3}
  5.   {四} {4}
  6.   {五} {5}
  7.   {六} {6}
  8.   {七} {7}
  9.   {八} {8}
  10.   {九} {9}
  11.   {十} {10}
  12. };
复制代码
注 pt 自带此方法 @c2d{十}  => 10;

注 刚玩北侠半个月,发现走路找人耗费相当长的时间,那时候就开始写一个录制地图和寻路的工具,由于对tintin和pt不熟悉写了差不多一周的时间。那时候就发现,tintin的方法相当贫瘠,很多其他语言里相当基础的方法,都需要自己去实现。
pt的一大优势就是集成了超多的基础方法,减少大量的重复工作。
随着对pt的熟悉,机器会简洁很多。



北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:18 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 03:52 PM 编辑

打坐与吐纳

中级任务,打坐和吐纳的逻辑一致,这里只贴一个吐纳的。保存吐纳增加的精力点数,然后和目标点数做比较。达到目标点数就关掉吐纳定时器,并且交任务。
这里用到了

#math 用来做数学运算
#class 我的理解可能有点粗糙,tintin的class与其他语言类的概念有所差别,使用起来更像是添加一个临时的代码块
#class name open; 代码块开始位置
#class name kill;  删除从open 到 close之间的代码;
#class name close; 代码块结束位置



#class 最常用的使用方式是写到一个 #action 前后,当不再需要这个#action进行触发,使用#class name kill 删除掉这块。
  1. #action {静和师太说道:「你的精力太低,去吐纳%*点精力再回来吧。」} {
  2.   #class em.tuna open;
  3.   #nop 需要吐纳的次数;
  4.   #math {targetCount} {$em.numList[%1]};
  5.   #nop 已经增长的精力数量;
  6.   #math {count} {0};
  7.   #action {你的精力上限增加了!!} {
  8.     #math {count} {$count + 1};
  9.     #if {$count == $targetCount} {
  10.       busy.Wait {
  11.         #nop 注销吐纳定时器,并且交任务;
  12.         #untick em.tunaticker;
  13.         ask shitai about finish;
  14.         #class em.tuna kill;
  15.       };
  16.     };
  17.   };
  18.   #action {你现在精严重不足,无法满足吐纳最小要求。} {
  19.     yun regenerate;
  20.   };
  21.   #nop 吐纳定时器;
  22.   #tick {em.tunaticker} {
  23.     #if {@char.IsBusy{}} {#return;};
  24.     tuna max;tuna 10;
  25.   } {1};
  26.   #class em.tuna close;
  27. };
复制代码


北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:19 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 12:25 AM 编辑

中级任务的准备工作

吐纳和打坐是可以原地完成的。
配药,制作霹雳弹,打扫后山,学技能的任务都需要去到其他房间。
建议是做两个表,然后用匹配到的字段拿到路径。

  1. #nop 用 $em.npcAndPath[静慈] 拿到path;
  2. #var {em.npcAndPath} {
  3.   {静慈} {n;n;n;n;n;n;n;w}
  4.   {西廊禅房静字辈师太} {w;w;w;w;w;w}
  5.   {杂役尼姑} {e;e;e;e;e}
  6. };

  7. #nop 用$em.kunfuList[雁行刀][path] 拿到path;
  8. #var {em.kunfuList} {
  9.   {回风拂柳剑} {{code}{fuliu-jian} {path}{n;n;w;w;w;w;w}}
  10.   {临济十二庄} {{code}{linji-zhuang} {path}{n;n;w;w;w;w;w}}
  11.   {诸天化身法} {{code}{zhutian-shenfa} {path}{n;n;w;w;w;w;w}}
  12.   {天罡指} {{code}{tiangang-zhi} {path}{n;n;w;w;w;w;w}}
  13.   {金顶绵掌} {{code}{jinding-mianzhang} {path}{n;n;w;w;w;w;w}}
  14.   {雁行刀} {{code}{yanxing-dao} {path}{n;n;w;w;w;w;w}}
  15. };
复制代码




北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:20 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 04:15 PM 编辑

核对佛经

核对佛经的任务会给你一段原文,在给你一段抄本,找出抄本里和原文不一样的地方。
这里用到了  
#list 这个建议看下tintin的文档,这里用的是最基础,如果是完全初学,可以在代码里加 okLog ,打印看下每步操作 那些变量保存的是什么数据
  #list {em.jing} {create};
  #list {em.jing} {clear};

  #list {em.jing} {add};
#foreach foreach比较常用的有两种方式
  一种是普通列表{a;b;c;d;e} 直接拿到值 #foreach {$simplelist} {value} { okLog $value};
  一种是列表  {{1} {扬州} {2} {苏州} {3} {武当山}}  拿到键和值 #foreach {*list[]} {key} {#local {value} {$list[$key]};};
#while {条件} {代码}; 满足条件就会循环执行,使用不当或者写代码的过程中可能会出现死循环,建议加上死循环检查,循环超出你预期的次数就主动跳出
@list.IndexOf{{列表};{字符串}} paotin的方法,用来返回某个字符在list里的索引。 比如上面扬州苏州那个列表。传入 列表 和 扬州,就会返回 1  传入 列表和苏州 就会返回 2;
  
你开始认真核对经文。
原文:
如是我闻:一时,佛在舍卫国祇树给孤独园,
与大比丘众千二百五十人俱。尔时,世尊食时
,著衣持钵,入舍卫大城乞食。於其城中次第
乞已,还至本处。饭食讫,收衣钵,洗足已。
敷座而坐。
抄本:
如是我闻:一时,佛在舍卫国祇树给孤独园,
与大比丘众千二百五十人俱。尔时,世尊食时
,著衣持钵,入舍卫大城乞食。於其城中我第
乞已,还至本处。饭食讫,收衣钵,洗足已。
敷座而坐。
抄错了哪个字,快把它改正(gai)吧。


我用的思路是把每一行都拿到,然后找到   抄本:  的索引。然后拿原文第n行和抄本第n行进行对比,找到不一样的字,可以看下看注释。
  1. #action {^你开始认真核对经文。$E} {
  2.   #list {em.jing} {create};
  3.   #list {em.jing} {clear};
  4.   #class em.gai open;
  5.   #nop 匹配原文和抄本的文字;
  6.   #action {%*} {
  7.     #list {em.jing} {add} {%%1};
  8.   } {2};

  9.   #action {抄错了哪个字,快把它改正(gai)吧。} {
  10.     #foreach {*em.jing[]} {key} {
  11.       #nop okLog $key $em.jing[$key];
  12.     };
  13.     #nop 拿到抄本那行的索引;
  14.     #math {copyIndex} {@list.IndexOf{{$em.jing};{抄本:}}};
  15.     #math {index} {1};
  16.     #local {doLoop} {true};
  17.     #while {@isTrue{$doLoop}} {
  18.       #nop 原文第一行为 1 + index;
  19.       #math {ywIndex} {1 + $index};
  20.       #nop 抄本第一行为 抄本起始位置 + index;
  21.       #math {cbIndex} {$copyIndex + $index};
  22.       #nop 转化为列表来做对比;
  23.       #list {ywList} {tokenize} {$em.jing[$ywIndex]};
  24.       #list {cbList} {tokenize} {$em.jing[$cbIndex]};
  25.       #foreach {*ywList[]} {key} {
  26.         #nop okLog $ywList[$key] -- $cbList[$key];
  27.         #if {"$ywList[$key]" != "$cbList[$key]"} {
  28.           #nop 终止while循环;
  29.           okLog gai $cbList[$key] to $ywList[$key];
  30.           gai $cbList[$key] to $ywList[$key];
  31.           #local {doLoop} {false};
  32.           #break;
  33.         };
  34.       };
  35.       #nop 一行对比结束索引加一;
  36.       #math {index} {$index + 1};
  37.       #nop 死循环检查;
  38.       #if {$index > 30} {#local {doLoop} {false};};
  39.     };
  40.     #class em.gai kill;
  41.   } {1};
  42.   
  43.   #class em.gai close;
  44. };
复制代码






北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:20 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 12:24 AM 编辑

找草药

找草药的任务,分拣和捣药都有可能草药无法使用,需要从新去后山找药。以前的攻略说一次多找几个药,但是我不管找8个还是10个晒了捡起来身上都只有1个。所以做的找到一个药就去门口晾晒,然后不管是分拣失败还是捣药失败都从头开始找药。建议做成3个alias 每一步里面做判断,成功就调用下一步,失败就去找药。
静慈师太说道:「草药在后山可以找到(search),在这里门口晒干(shai)后分拣(fenjian)出合适的,再回到这里(daoyao)就可以了。」  

  1. #action {静慈师太说道:「草药在后山可以找到(search),在这里门口晒干(shai)后分拣(fenjian)出合适的,再回到这里捣药(daoyao)就可以了。」} {
  2.   em.ZhaoYao;
  3. };

  4. #alias {em.ZhaoYao} {
  5.   path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{后山}}} {
  6.     search;
  7.     #class em.search open;
  8.     #action {你找到了一片草药,放在你的身上。} {
  9.       em.ShaiCaoYao;
  10.     };
  11.     #action {你累了个半死,结果什么都没有找到。} {
  12.       search;
  13.     };
  14.     #class em.search close;
  15.   };
  16. };

  17. #alias {em.ShaiCaoYao} {
  18.   path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{山道_3}}} {
  19.     l;shai;
  20.     #class em.shai open;
  21.     #action {你拿出一颗草药,放下来曝晒。过一会可以捡(jian)回来了。} {
  22.       #tick {em.jianYaoTicker} {
  23.         jian;
  24.       } {2};
  25.     };
  26.     #action {你拣起一颗晒干的草药。} {
  27.       #untick em.jianYaoTicker;
  28.       #delay {waitForFenJian} {
  29.         em.Fenjian;
  30.         #class em.shai kill;
  31.       } {2};
  32.     };
  33.     #class em.shai close;
  34.   };
  35. };

  36. #action {你开始捣药。} {
  37.   #class em.daoyao open;
  38.   #action {这片草药被捣得稀烂,无法使用了。} {
  39.     em.ZhaoYao;
  40.   };
  41.   #class em.daoyao close;
  42. };


  43. #alias {em.Fenjian} {
  44.   fenjian;
  45.   #class em.fenjian open;
  46.   #action {这片草药药性全无,被你扔掉了。} {
  47.     #delay {waitForZhaoYao} {
  48.       em.ZhaoYao;
  49.       #class em.fenjian kill;
  50.     } {2};
  51.   };
  52.   #action {你找到一份可以入药的草药。} {
  53.     #delay {2} {
  54.       em.DaoYao;
  55.       #class em.fenjian kill;
  56.     };
  57.   };
  58.   #class em.fenjian close;
  59. };

  60. #alias {em.DaoYao} {
  61.   e;daoyao;
  62.   #class em.daoyao open;
  63.   #action {你制成了一副药剂。} {
  64.     ask jingci shitai about finish;
  65.     #class em.daoyao kill;
  66.   };
  67.   #class em.daoyao open;
  68. };
复制代码


北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:21 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 12:24 AM 编辑

制作霹雳弹

制作霹雳弹的任务和找草药类似,只不过是把找草药换成找硫磺和硝石粉,相信能看懂找草药,自己写出制作霹雳弹不是难事,依然建议把找硫磺粉,找硝石粉和灌做成3个alias。霹雳弹 灌 这一步也是有概率失败的,所以需要多挖点硝石粉和硫磺粉,我各挖了5个 也给一段参考。
静慈师太说道:「拿着我这把小铲子,在后山山洞铲(chan)一些硫磺粉,在前山花园铲一些硝石粉,灌(guan)入这个小球里就可以制成霹雳弹了。」
  1. #alias {em.ChanLiuHuang} {
  2.   #nop 记录挖到的硫磺数量;
  3.   #math {liuHuangCount} {0};
  4.   path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{山洞_1}}} {
  5.     chan;
  6.     #class em.chan open;
  7.     #action {你用小铲子挖下了一些硫磺粉末。} {
  8.       #math {liuHuangCount} {$liuHuangCount + 1};
  9.       #nop 硫磺数量超过5个,去铲硝石粉;
  10.       #if {$liuHuangCount > 5} {
  11.         #delay {waitForChanXiaoShi} {
  12.           em.ChanXiaoShi;
  13.           #class em.chan kill;
  14.         } {2};
  15.       };
  16.       #else {
  17.         chan;
  18.       };
  19.     };
  20.     #action {你用小铲子在地上,墙上胡乱砸着,什么也没有发现。} {
  21.       chan;
  22.     };
  23.     #class em.chan close;
  24.   };
  25. };
复制代码

北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 前天 11:23 PM | 显示全部楼层
本帖最后由 bszr 于 2025-7-3 04:34 PM 编辑

学习技能

学习技能的任务需要拜到不同的文字辈师太,每个师太教的技能不一样。这里感谢下群里的妮子,我一开始以为是拜任意文字辈,其实是需要拜东廊左边禅房里的师太。如果不是正好看见妮子也在做任务又正好看他在群里说话,我估计要懵逼好久。
学技能要注意,要学雁行刀需要先学20级的金顶绵掌。
学技能的任务和前面打坐的任务大同小异,无非是多了一步走到固定的房间拜师,然后把记录精力提升了几点换成了记录技能提升了几级。
这块有很大的优化空间,可以使用paotin的内置方法 @char.SkillLevel{} 拿到技能的等级,然后同样的用个list或者直接用#if 去判断,10级以下,一次一次的和师太学,10级到20级 5次5次的和师太学。


还记得上面这个em.kunfuList吗? 通过不同的名字去到不同房间拜师学艺就需要用到它。
房间移动的路径  $em.kunfuList[雁行刀][path];


  1. #var {em.kunfuList} {
  2.   {回风拂柳剑} {{code}{fuliu-jian} {path}{n;n;w;w;w;w;w}}
  3.   {临济十二庄} {{code}{linji-zhuang} {path}{n;n;w;w;w;w;w}}
  4.   {诸天化身法} {{code}{zhutian-shenfa} {path}{n;n;w;w;w;w;w}}
  5.   {天罡指} {{code}{tiangang-zhi} {path}{n;n;w;w;w;w;w}}
  6.   {金顶绵掌} {{code}{jinding-mianzhang} {path}{n;n;w;w;w;w;w}}
  7.   {雁行刀} {{code}{yanxing-dao} {path}{n;n;w;w;w;w;w}}
  8. };


  9. #action {静和师太说道:「你的%1太低了,去{练|学}个%2级再回来吧。」} {
  10.   #var {lianTarget} {$em.kunfuList[%1]};
  11.   #math {targetCount} {$em.numList[%2]};
  12.   #math {count} {0};
  13.   path.WalkSteps {@mMap.AStar{{后殿};{$lianTarget[room]}}} {
  14.     bai shitai;
  15.     #class em.xue open;
  16.     #action {你的「%!*」进步了!} {
  17.       #math {count} {$count + 1};
  18.       #if {$count == $targetCount} {
  19.         #untick em.xueticker;
  20.         em.Jiao {$lianTarget[room]};
  21.         #class em.xue kill;
  22.       };
  23.     };
  24.     #action {你今天太累了,结果什么也没有学到。} {
  25.       yun regenerate;
  26.     };
  27.     #tick {em.xueticker} {
  28.       #if {@char.IsBusy{}} {#return;};
  29.       xue shitai for $lianTarget[code] 1;
  30.     } {2};
  31.     #class em.xue close;
  32.   };
  33. };
复制代码



北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-4 12:40 AM , Processed in 0.016349 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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