| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- #nop vim: set filetype=tt:;
- /*
- 本文件属于 PaoTin++ 的一部分
- ===========
- PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
- 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
- ===========
- */
- event.Define {map/GotNodeInfo} {无参} {$MODULE} {已经获取到节点信息,并更新到 gMapRoom 全局变量。};
- /*
- ╭───扬州─────────┬─────────────╮
- │目的地 │拼音名称 │
- │丐帮分舵 ◇ 土地庙 │gaibang │
- │濠州府 ◇ 广场 │haozhou │
- │长江[建康府] ◇ 长江渡口 │jiankang │
- │往生堂 ◇ 往生堂广场 │shashou │
- │信阳 ◇ 小广场 │xinyang │
- │徐州 ◇ 戏马台 │xuzhou │
- │长江[镇江] ◇ 扬子津 │zhenjiang │
- ├──────────────┴─────────────┤
- │walk [拼音名]命令使用内建路径。 │
- │walk -c [拼音名]返回具体地点的路径。 │
- │node 命令列出玩家自建路径。 │
- ╰───────────────────北大侠客行────╯
- */
- ///=== {
- // ## map.GetNodeInfo
- // 通过 walk -c 命令查询当前房间的节点信息。如果当前房间不是节点,则什么也获取不到。
- // 否则可以获得两个信息:
- // 1. 当前节点的名称,如「扬州」,储存在 \$gMapRoom[node]。
- // 2. 当前节点所联通的节点列表,是个表格,储存在 \$gMapRoom[nodeLinks];
- // };
- #alias {map.GetNodeInfo} {
- #local gag {%1};
- #class map.GetNodeInfo open;
- #alias {map.GetNodeInfo.done} {
- #class map.GetNodeInfo kill;
- #if { &gMapRoom[nodeLinks][] > 0 } {
- #local links {@table.Keys{gMapRoom[nodeLinks]}};
- #var gMapRoom[area][LINK] {$gMapRoom[node]/$links};
- #delay 0 okLog 节点信息已识别。;
- };
- event.DelayEmit map/GotNodeInfo;
- };
- #local {E} {{?:|id=map/getnode}$};
- #if { "$gag" == "gag" } {
- #gag {^%*$E};
- };
- #action {@re.TableHeader{0%s}} {
- #local nodeName {@map.FixNode{}};
- #if { "$nodeName" != "" } {
- okLog 节点信息发现 BUG,已经主动修正。;
- #line gag;
- #show ╭───$nodeName────────┬──────────╮;
- };
- #else {
- errLog 节点信息发现 BUG,请主动修正。;
- };
- };
- #action {{*UTF8}{^}╭─{(─)*}─{\p{Han}+}─{(─|┬)*}─╮$E} {
- #var gMapRoom[node] {%%4};
- #var gMapRoom[nodeLinks] {};
- #class map.GetNodeInfo open;
- #local {E} {{?:|id=map/getnode}$};
- #action {^│目的地%s│拼音名称%s│$E} {
- #if { "%1" == "gag" } {#line gag};
- } {4.999};
- #action {^├──{(─)*}──┼──{(─)*}──┤$E} {
- #class map.GetNodeInfo.miss open;
- #action {^%*{|ID=map/getnode}$} {errLog 发现 BUG,$gMapRoom[node]($gMapRoom[name])下面这行内容无法识别,请报告开发者。} {5.1};
- #class map.GetNodeInfo.miss close;
- };
- #action {^├──{(─)*}──┴──{(─)*}──┤$E} {
- #class map.GetNodeInfo.miss kill;
- };
- #nop 旧版目标样式,无菱形,不分红绿。;
- #action {~^%c│%+2c%S%C│%+1c%S%C│%c$E} {
- map.room.node-link {%%%3} {@str.Plain{%%%6}} {} {@str.Color{%%%6}};
- };
- #nop 新版目标样式,有菱形,分红绿,拼音在张金鳌任务下会变色。;
- #action {~^%c│%+2c%S%+1c %+1c ◇ %+1c%S%C│%+1c%S%C│%c$E} {
- map.room.node-link {%%%3} {@str.Plain{%%%10}} {@str.Color{%%%5}} {@str.Color{%%%10}};
- };
- #alias {map.room.node-link} {
- #local name {%%%1};
- #local pinyin {%%%2};
- #local markColor {%%%3};
- #local pinyinColor {%%%4};
- #var {gMapRoom[nodeLinks][$pinyin]} {{name}{$name}};
- #if { "$markColor" != "" } {
- #var {gMapRoom[nodeLinks][$pinyin][markColor]} {$markColor};
- };
- #if { "$pinyinColor" != "" } {
- #var {gMapRoom[nodeLinks][$pinyin][pinyinColor]} {$pinyinColor};
- };
- };
- #class map.GetNodeInfo close;
- };
- #action {^%*内的系统内建路径出发点在:%*,请查询localmaps获得具体方位。$E} {
- #var gMapRoom[area][WALK] {%%1/%%2};
- };
- #action {^%*内共有一处内建玩家路径起点,在%*。$E} {
- #var gMapRoom[area][NODE] {%%1/%%2};
- };
- #action {^%*内共有%d处内建玩家路径起点,分别在%*。$E} {
- #var gMapRoom[area][NODE] {%%1/%%3};
- };
- #action {^当前区域的系统内建路径出发点在:%*,请查询localmaps获得具体方位。$E} {
- #var gMapRoom[area][WALK] {%%1};
- };
- #action {^当前区域共有%d处内建玩家路径起点,分别在%*。$E} {
- #var gMapRoom[area][NODE] {%%2};
- };
- #action {^当前区域共有一处内建玩家路径起点,在%*。$E} {
- #var gMapRoom[area][NODE] {%%1};
- };
- #action {^当前区域的内建路径出发点暂时不明确。$E} {
- #var gMapRoom[area][WALK] {NOTHING};
- };
- #action {^当前区域没有任何内建玩家路径起点。$E} {
- #var gMapRoom[area][NODE] {NOTHING};
- };
- #class map.GetNodeInfo close;
- xtt.Send {walk -c};
- sync.Wait {map.GetNodeInfo.done} {map/GetNodeInfo};
- };
- #func {map.FixNode} {
- #local nodeName {};
- #foreach {*map.xiaoyao.FixNode[]} {nodeName} {
- #local desc {$map.xiaoyao.FixNode[$nodeName]};
- #if { "$gMapRoom[desc]" == "%*$desc%*" } {
- #return {$nodeName};
- };
- };
- #return {};
- };
- #alias {walk} {
- #if { "%1" == "-c" && "%2" == "{gag|nogag|}" } {
- map.GetNodeInfo {%2};
- };
- #elseif { "%1" == "{[a-z0-9;]+}" } {
- map.WalkNodes {%1} {%2};
- };
- #else {
- xtt.Send {walk %0};
- };
- };
- ///=== {
- // ## map.WalkNodes <节点列表> [<回调钩子ID>]
- // 执行 walk 命令,按节点列表顺序依次行走,并发射走路机器人事件。
- // 可选的回调钩子 ID 可以只唤醒指定的钩子,避免惊群。
- // 到达目的地后会自动执行 look 命令。
- // };
- #alias {map.WalkNodes} {
- #class map.WalkNodes open;
- #var map.WalkNodes.nodes {@list.FromSlist{%1}};
- #var map.WalkNodes.hook {%2};
- #var map.WalkNodes.delay {3};
- #local ID {|ID=map/WalkNodes};
- #action {^你开始往%*方向飞奔过去……{$ID}$} {
- #var map.WalkNodes.delay {3};
- };
- #action {^频繁使用此命令会对系统造成很重负担,请稍等。{$ID}$} {
- #delay map.WalkNodes.retry {walk} $map.WalkNodes.delay;
- };
- #action {^你因为种种原因停了下来,可以用walk继续进行。{$ID}$} {
- #switch {"$gMapRoom[name]"} {
- #case {"襄阳南门"} {ask shou jiang about 投军; walk};
- #case {"万纶台"} {ask liang liuhe about 拜山; walk};
- #case {"山路"} {
- #local obj {@map.Room.GetObjByID{shan xiao}};
- #if { "$obj[name]" == "山魈" } {
- give 1 coin to shan xiao;
- };
- busy.Wait walk;
- };
- #default {
- tuna max;
- #delay $map.WalkNodes.delay {halt; walk};
- #var map.WalkNodes.delay {1};
- };
- };
- };
- #action {^你到达了%*。{$ID}$} {
- #delay 0 {map.WalkNodes.walk-next};
- };
- #alias {map.WalkNodes.walk-next} {
- #if { &map.WalkNodes.nodes[] > 0 } {
- #local node {$map.WalkNodes.nodes[1]};
- #local node {@str.Replace{{$node};{^%+{|/\x7b?([^\x7b\x7d]+)\x7d?}$};{{step}{&1}{args}{&3}}}};
- #list map.WalkNodes.nodes delete 1;
- #if { "$node[step]" == "PATH" } {
- xtt.SendBatch {$node[args]};
- sync.Wait {map.WalkNodes.walk-next};
- };
- #elseif { "$node[step]" == "{[A-Z][A-Za-z0-9]+}" } {
- #local bot {$node[step]};
- event.HandleOnce map/walk/continue {map.$bot} {map} {map.WalkNodes.walk-next};
- map.$bot $node[args];
- };
- #else {
- xtt.Send {walk $node[step]};
- };
- };
- #else {
- #local hook {$map.WalkNodes.hook};
- #class map.WalkNodes kill;
- event.Emit map/walk/continue {$hook};
- };
- };
- #class map.WalkNodes close;
- map.WalkNodes.walk-next;
- };
- #alias {^{[a-z0-9]{2,}}_{[a-z0-9]{2,}}$} {node walk %0} 9.5;
- /*
- 襄阳南门
- 守军拦住了你的去路,大声喝到:干什么的?要想通过先问问我们守将大人!
- 守将给了你一块腰牌。
- 牧民告诉你:牧场上最近出现了一只游荡的野狼,已经吞食了很多单身的旅人,没事最好经过这里。
- 走路太快,你没在意脚下,被杂草绊了一下。
- */
|