bszr 发表于 2025-7-2 23:16:08

paotin峨嵋新手任务攻略

本帖最后由 bszr 于 2025-7-3 03:33 PM 编辑

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

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

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


bszr 发表于 2025-7-2 23:16:45

本帖最后由 bszr 于 2025-7-3 03:20 PM 编辑

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

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

我使用的是动态路径,所以把参考给出@mMap.AStar{}换成上面$em.pathList[后殿-伏虎寺]这种形式就好。主要是介绍下新手机器的内容,走路不是重点,但是防止我的自定义方法造成误导和难以理解的地方,这里单独提一下,后面就不再解释了。

bszr 发表于 2025-7-2 23:17:26

本帖最后由 bszr 于 2025-7-3 03:41 PM 编辑

念经

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

#delay {延时器名字} {要执行的代码} {延迟的时间};
path.WalkSteps {路径} {走路完成后执行的代码} ;
busy.Wait 执行一些操作会 忙 这个方法会在忙的状态结束后执行里面的代码;


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

#action {你觉得自己完全静下心来了。} {
#delay {2} {
    path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{后殿}}} {
      busy.Wait {ask shitai about finish};
    };
};
};

bszr 发表于 2025-7-2 23:18:02

本帖最后由 bszr 于 2025-7-3 10:40 PM 编辑

简单的转换

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

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

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



bszr 发表于 2025-7-2 23:18:36

本帖最后由 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 删除掉这块。
#action {静和师太说道:「你的精力太低,去吐纳%*点精力再回来吧。」} {
#class em.tuna open;
#nop 需要吐纳的次数;
#math {targetCount} {$em.numList[%1]};
#nop 已经增长的精力数量;
#math {count} {0};
#action {你的精力上限增加了!!} {
    #math {count} {$count + 1};
    #if {$count == $targetCount} {
      busy.Wait {
      #nop 注销吐纳定时器,并且交任务;
      #untick em.tunaticker;
      ask shitai about finish;
      #class em.tuna kill;
      };
    };
};
#action {你现在精严重不足,无法满足吐纳最小要求。} {
    yun regenerate;
};
#nop 吐纳定时器;
#tick {em.tunaticker} {
    #if {@char.IsBusy{}} {#return;};
    tuna max;tuna 10;
} {1};
#class em.tuna close;
};

bszr 发表于 2025-7-2 23:19:21

本帖最后由 bszr 于 2025-7-3 12:25 AM 编辑

中级任务的准备工作

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

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

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



bszr 发表于 2025-7-2 23:20:01

本帖最后由 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行进行对比,找到不一样的字,可以看下看注释。
#action {^你开始认真核对经文。$E} {
#list {em.jing} {create};
#list {em.jing} {clear};
#class em.gai open;
#nop 匹配原文和抄本的文字;
#action {%*} {
    #list {em.jing} {add} {%%1};
} {2};

#action {抄错了哪个字,快把它改正(gai)吧。} {
    #foreach {*em.jing[]} {key} {
      #nop okLog $key $em.jing[$key];
    };
    #nop 拿到抄本那行的索引;
    #math {copyIndex} {@list.IndexOf{{$em.jing};{抄本:}}};
    #math {index} {1};
    #local {doLoop} {true};
    #while {@isTrue{$doLoop}} {
      #nop 原文第一行为 1 + index;
      #math {ywIndex} {1 + $index};
      #nop 抄本第一行为 抄本起始位置 + index;
      #math {cbIndex} {$copyIndex + $index};
      #nop 转化为列表来做对比;
      #list {ywList} {tokenize} {$em.jing[$ywIndex]};
      #list {cbList} {tokenize} {$em.jing[$cbIndex]};
      #foreach {*ywList[]} {key} {
      #nop okLog $ywList[$key] -- $cbList[$key];
      #if {"$ywList[$key]" != "$cbList[$key]"} {
          #nop 终止while循环;
          okLog gai $cbList[$key] to $ywList[$key];
          gai $cbList[$key] to $ywList[$key];
          #local {doLoop} {false};
          #break;
      };
      };
      #nop 一行对比结束索引加一;
      #math {index} {$index + 1};
      #nop 死循环检查;
      #if {$index > 30} {#local {doLoop} {false};};
    };
    #class em.gai kill;
} {1};

#class em.gai close;
};





bszr 发表于 2025-7-2 23:20:33

本帖最后由 bszr 于 2025-7-3 12:24 AM 编辑

找草药

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

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

#alias {em.ZhaoYao} {
path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{后山}}} {
    search;
    #class em.search open;
    #action {你找到了一片草药,放在你的身上。} {
      em.ShaiCaoYao;
    };
    #action {你累了个半死,结果什么都没有找到。} {
      search;
    };
    #class em.search close;
};
};

#alias {em.ShaiCaoYao} {
path.WalkSteps {@mMap.AStar{{@mMap.GetStartRoom{}};{山道_3}}} {
    l;shai;
    #class em.shai open;
    #action {你拿出一颗草药,放下来曝晒。过一会可以捡(jian)回来了。} {
      #tick {em.jianYaoTicker} {
      jian;
      } {2};
    };
    #action {你拣起一颗晒干的草药。} {
      #untick em.jianYaoTicker;
      #delay {waitForFenJian} {
      em.Fenjian;
      #class em.shai kill;
      } {2};
    };
    #class em.shai close;
};
};

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


#alias {em.Fenjian} {
fenjian;
#class em.fenjian open;
#action {这片草药药性全无,被你扔掉了。} {
    #delay {waitForZhaoYao} {
      em.ZhaoYao;
      #class em.fenjian kill;
    } {2};
};
#action {你找到一份可以入药的草药。} {
    #delay {2} {
      em.DaoYao;
      #class em.fenjian kill;
    };
};
#class em.fenjian close;
};

#alias {em.DaoYao} {
e;daoyao;
#class em.daoyao open;
#action {你制成了一副药剂。} {
    ask jingci shitai about finish;
    #class em.daoyao kill;
};
#class em.daoyao open;
};

bszr 发表于 2025-7-2 23:21:06

本帖最后由 bszr 于 2025-7-3 12:24 AM 编辑

制作霹雳弹

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

bszr 发表于 2025-7-2 23:23:38

本帖最后由 bszr 于 2025-7-3 04:34 PM 编辑

学习技能

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


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

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


#action {静和师太说道:「你的%1太低了,去{练|学}个%2级再回来吧。」} {
#var {lianTarget} {$em.kunfuList[%1]};
#math {targetCount} {$em.numList[%2]};
#math {count} {0};
path.WalkSteps {@mMap.AStar{{后殿};{$lianTarget}}} {
    bai shitai;
    #class em.xue open;
    #action {你的「%!*」进步了!} {
      #math {count} {$count + 1};
      #if {$count == $targetCount} {
      #untick em.xueticker;
      em.Jiao {$lianTarget};
      #class em.xue kill;
      };
    };
    #action {你今天太累了,结果什么也没有学到。} {
      yun regenerate;
    };
    #tick {em.xueticker} {
      #if {@char.IsBusy{}} {#return;};
      xue shitai for $lianTarget 1;
    } {2};
    #class em.xue close;
};
};


页: [1] 2
查看完整版本: paotin峨嵋新手任务攻略