node.tin 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分
  4. ===========
  5. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  6. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  7. ===========
  8. */
  9. load-lib event;
  10. event.Define {map/GotNodeInfo} {无参} {$MODULE} {已经获取到节点信息,并更新到 gMapRoom 全局变量。};
  11. /*
  12. ╭───扬州─────────┬─────────────╮
  13. │目的地 │拼音名称 │
  14. │丐帮分舵 │gaibang │
  15. │濠州府 │haozhou │
  16. │长江[建康府] │jiankang │
  17. │曲阜 │qufu │
  18. │往生堂 │shashou │
  19. │信阳 │xinyang │
  20. │长江[镇江] │zhenjiang │
  21. ├──────────────┴─────────────┤
  22. │walk [拼音名]命令使用内建路径。 │
  23. │walk -c [拼音名]返回具体地点的路径。 │
  24. │node 命令列出玩家自建路径。 │
  25. ╰───────────────────北大侠客行────╯
  26. */
  27. ///=== {
  28. // ## map.GetNodeInfo
  29. // 通过 walk -c 命令查询当前房间的节点信息。如果当前房间不是节点,则什么也获取不到。
  30. // 否则可以获得两个信息:
  31. // 1. 当前节点的名称,如「扬州」,储存在 \$gMapRoom[node]。
  32. // 2. 当前节点所联通的节点列表,是个表格,储存在 \$gMapRoom[nodeLinks];
  33. // };
  34. #alias {map.GetNodeInfo} {
  35. #if { "$gMapRoom[node]" != "" } {
  36. #return;
  37. };
  38. #class map.GetNodeInfo open;
  39. #alias {map.GetNodeInfo.done} {
  40. #var gMapRoom[area][WALK] {@default{%%1;$gMapRoom[area][WALK]}};
  41. #line gag;
  42. #class map.GetNodeInfo kill;
  43. #if { &gMapRoom[nodeLinks][] > 0 } {
  44. #delay 0 okLog 节点信息已识别。;
  45. };
  46. event.DelayEmit map/GotNodeInfo;
  47. };
  48. #gag {^%*{|ID=map/getnode}$};
  49. #action {{*UTF8}{^}╭─{(─)*}─{\p{Han}+}─{(─|┬)*}──╮{|ID=map/getnode}$} {
  50. #var gMapRoom[node] {%%4};
  51. #var gMapRoom[nodeLinks] {};
  52. #class map.GetNodeInfo open;
  53. #action {^│目的地%s│拼音名称%s│$} {#line gag} {4.999};
  54. #action {^│%S%s│%S%s│{|ID=map/getnode}$} {
  55. #var {gMapRoom[nodeLinks][%%%3]} {%%%1};
  56. };
  57. #class map.GetNodeInfo close;
  58. };
  59. #action {^%*内的系统内建路径出发点在:%*,请查询localmaps获得具体方位。{|ID=map/getnode}$} {
  60. #var gMapRoom[area][WALK] {%%1};
  61. };
  62. #action {^%*内共有一处内建玩家路径起点,在%*。{|ID=map/getnode}$} {
  63. #var gMapRoom[area][WALK] {%%1};
  64. };
  65. #action {^%*内共有%d处内建玩家路径起点,分别在%*。{|ID=map/getnode}$} {
  66. #var gMapRoom[area][WALK] {%%1};
  67. };
  68. #action {^%*当前区域没有任何内建玩家路径起点。} {
  69. #var gMapRoom[area][WALK] {%%1};
  70. };
  71. #class map.GetNodeInfo close;
  72. walk -c;
  73. sync.Wait {map.GetNodeInfo.done} {map/GetNodeInfo};
  74. };
  75. ///=== {
  76. // ## map.WalkNodes <节点列表> [<回调钩子ID>]
  77. // 执行 walk 命令,按节点列表顺序依次行走,并发射走路机器人事件。
  78. // 可选的回调钩子 ID 可以只唤醒指定的钩子,避免惊群。
  79. // 到达目的地后会自动执行 look 命令。
  80. // };
  81. #alias {map.WalkNodes} {
  82. #class map.WalkNodes open;
  83. #var map.WalkNodes.nodes {@list.FromSlist{%1}};
  84. #var map.WalkNodes.hook {%2};
  85. #var map.WalkNodes.delay {3};
  86. #local ID {|ID=map/WalkNodes};
  87. #action {^你开始往%*方向飞奔过去……{$ID}$} {
  88. #nop prompt.Set {{nodeLinks}{<120>正在前往【%%1】,赶路中…}};
  89. #var map.WalkNodes.delay {3};
  90. };
  91. #action {^频繁使用此命令会对系统造成很重负担,请稍等。{$ID}$} {
  92. #delay map.WalkNodes.retry {walk} $map.WalkNodes.delay;
  93. };
  94. #action {^你因为种种原因停了下来,可以用walk继续进行。{$ID}$} {
  95. #switch {"$gMapRoom[name]"} {
  96. #case {"襄阳南门"} {ask shou jiang about 投军; walk};
  97. #case {"万纶台"} {ask liang liuhe about 拜山; walk};
  98. #case {"山路"} {
  99. #local obj {@map.Room.GetObjByID{shan xiao}};
  100. #if { "$obj[name]" == "山魈" } {
  101. give 1 coin to shan xiao;
  102. busy.Wait walk;
  103. };
  104. };
  105. #default {
  106. tuna max;
  107. #delay $map.WalkNodes.delay {halt; walk};
  108. #var map.WalkNodes.delay {1};
  109. };
  110. };
  111. };
  112. #action {^你到达了%*。{$ID}$} {
  113. #delay 0 {map.WalkNodes.walk-next};
  114. };
  115. #alias {map.WalkNodes.walk-next} {
  116. #if { &map.WalkNodes.nodes[] > 0 } {
  117. #local node {$map.WalkNodes.nodes[1]};
  118. #list map.WalkNodes.nodes delete 1;
  119. #if { "$node" == "DOCK/dock" } {
  120. event.HandleOnce map/walk/continue {map.shaogong} {map} {map.WalkNodes.walk-next};
  121. map.YellBoat;
  122. };
  123. #elseif { "$node" == "DOCK/ride{| \S+}" } {
  124. #replace node {DOCK/ride} {};
  125. event.HandleOnce map/walk/continue {map.Ride} {map} {map.WalkNodes.walk-next};
  126. map.Ride $node;
  127. };
  128. #elseif { "$node" == "PATH/{\{.*\}}" } {
  129. #replace node {PATH/{\{(.*)\}}} {&2};
  130. xtt.SendBatch {$node};
  131. sync.Wait {map.WalkNodes.walk-next};
  132. };
  133. #else {
  134. xtt.Send {walk $node};
  135. };
  136. };
  137. #else {
  138. #local hook {$map.WalkNodes.hook};
  139. #class map.WalkNodes kill;
  140. event.Emit map/walk/continue {$hook};
  141. };
  142. };
  143. #class map.WalkNodes close;
  144. map.WalkNodes.walk-next;
  145. };
  146. /*
  147. 襄阳南门
  148. 守军拦住了你的去路,大声喝到:干什么的?要想通过先问问我们守将大人!
  149. 守将给了你一块腰牌。
  150. 牧民告诉你:牧场上最近出现了一只游荡的野狼,已经吞食了很多单身的旅人,没事最好经过这里。
  151. 走路太快,你没在意脚下,被杂草绊了一下。
  152. */