helper.tin 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  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/walk/boat/in} {无参} {$MODULE} {已上船};
  11. event.Define {map/walk/boat/out} {无参} {$MODULE} {即将下船};
  12. VAR {地图脚本同步信息} map.sync.room-id {};
  13. #alias {map.Sync} {
  14. #local prev {%1};
  15. #local current {%2};
  16. #local next {%3};
  17. #local message {};
  18. #if { "$prev$current$next" == "" } {
  19. #local message {WALK-SYNC-MESSAGE};
  20. };
  21. #else {
  22. #local message {F${prev}-V${current}-T$next};
  23. #var map.sync.room-id {
  24. {prev}{$prev}
  25. {current}{$current}
  26. {next}{$next}
  27. };
  28. };
  29. sync.Wait {
  30. #line gag;
  31. okLog 服务器已同步。;
  32. event.DelayEmit map/walk/continue;
  33. } {$message};
  34. };
  35. #alias {map.GuoJiang} {map.shaogong 过江 map.GuoJiang};
  36. #alias {map.GuoHe} {map.shaogong 过河 map.GuoHe};
  37. #alias {map.YellBoat} {map.shaogong 自助 map.YellBoat};
  38. #alias {map.shaogong} {
  39. #local words {%1};
  40. #local name {%2};
  41. #class $name open;
  42. #alias {map.waitBoat} { #var map-Boat-state {waitBoat} };
  43. #action {^只听得江面上隐隐传来:“别急嘛,这儿正忙着呐……”$} {
  44. #nop 不依赖触发了,用定时器靠谱一些;
  45. };
  46. #action {^岸边一只渡船上的艄公说道:正等着你呢,上来吧。$} {
  47. #tick map.boat.yell {map.boat.yell} 3;
  48. map.boat.try-enter;
  49. };
  50. #action {^一叶扁舟缓缓地驶了过来,艄公将一块踏脚板搭上堤岸,以便乘客{上下。|}$} {
  51. #tick map.boat.yell {map.boat.yell} 3;
  52. map.boat.try-enter;
  53. };
  54. #nop 没有一卡通时,需要通过 ask 来手动给钱。;
  55. #action {^船老大一把拉住你,你还没付钱呢?$} {
  56. #line oneshot #action {^{他|她}是{黄|长}{河|江}边的船老大,撑渡船几十年,现在老了,只负责在岸边收钱。$} {
  57. #delay 0 {ask shao gong about 过%%%3};
  58. };
  59. #line oneshot #action {^%sLV%s%d%s$} {
  60. #gag {^%*{|ID=map.shaogong}$};
  61. event.HandleOnce {GA} {map.boat.look} {map} {
  62. #ungag {^%*{|ID=map.shaogong}$}; #nop
  63. };
  64. };
  65. #delay 0 {look shao gong};
  66. };
  67. #action {^$NPC接过你递给的船资%S。$} {map.waitBoat};
  68. #action {^你的车船通账上还剩%S,这一趟的船资是%S。$} {map.waitBoat};
  69. #action {^这一趟的船资是%*,将从你的行旅通上走账。$} {map.waitBoat};
  70. #action {^$NPC道:原来是%S的人,快请上船。$} {map.waitBoat};
  71. #action {^$NPC唱道:“撑船的,有生意上门啦~~~”,%*传出很远。$} {map.waitBoat};
  72. #action {^你吸了口气,一声“船家”,声音中正平和地远远传了出去。$} {map.waitBoat};
  73. #action {^你鼓足中气,长啸一声:“船家!”$} {map.waitBoat};
  74. #action {^你使出吃奶的力气喊了一声:“船家”$} {map.waitBoat};
  75. #action {^艄公把踏脚板收起来,说了一声“坐稳喽”,竹篙一点,扁舟向{|江心驶去。}$} {
  76. #nop;
  77. };
  78. #action {^艄公说“到啦,上岸吧”,随即把一块踏脚板搭上堤岸。$} {
  79. #if { "$map-Boat-state" == "inBoat" } {
  80. #nop 有时候这条信息和下面赶下船的信息同时出现,这样会导致 out 失效。;
  81. #nop 所以做一些防御处理;
  82. #delay map-Boat-out {
  83. #unvar map-Boat-state;
  84. event.Emit map/walk/boat/out;
  85. busy.Halt {out; map.boat.done};
  86. } {0.05};
  87. };
  88. };
  89. #action {^艄公要继续做生意了,所有人被赶下了渡船。$} {
  90. #if { "$map-Boat-state" == "inBoat" } {
  91. #delay map-Boat-out {
  92. #unvar map-Boat-state;
  93. event.Emit map/walk/boat/out;
  94. busy.Halt map.boat.done;
  95. } {0};
  96. };
  97. };
  98. #line sub var #alias {map.boat.done} {map.BotReturn $name};
  99. #alias {map.boat.yell} {
  100. yell boat;
  101. #tick map.boat.yell {map.boat.yell} 1;
  102. };
  103. #if { "$words" == "自助" } {
  104. map.boat.yell;
  105. };
  106. #else {
  107. ask shao gong about $words;
  108. #tick map.boat.yell {map.boat.yell} 1;
  109. };
  110. #class $name close;
  111. };
  112. #alias {map.SpecialBoat} {
  113. #class map.SpecialBoat open;
  114. #action {^你跃上木船,船夫把木船划向海中。$} {event.Emit map/walk/boat/in}; #nop 神龙岛;
  115. #action {^你朝船夫挥了挥手便跨上岸去。$} {map.SpecialBoat.return}; #nop 神龙岛;
  116. #action {^你从踏板上走上了船。$} {event.Emit map/walk/boat/in}; #nop 桃花岛;
  117. #action {^你沿着踏板走了上去。$} {map.SpecialBoat.return}; #nop 桃花岛;
  118. #alias {map.SpecialBoat.return} {event.Emit map/walk/boat/out; busy.Halt {map.BotReturn map.SpecialBoat}};
  119. #class map.SpecialBoat close;
  120. enter boat;
  121. };
  122. #alias {map.Ride} {
  123. #local target {%1};
  124. #class map.Ride open;
  125. #action {^你跳上了小船,操舟向%*划去。$} {event.Emit map/walk/boat/in};
  126. #action {^你跳上了羊皮筏子,操舟向%*划去。$} {event.Emit map/walk/boat/in};
  127. #action {^你从小船上跳了下来,到了%*。$} {event.Emit map/walk/boat/out; busy.Halt {map.BotReturn map.Ride}};
  128. #class map.Ride close;
  129. ride $target;
  130. };
  131. #alias {map.Shalou} {
  132. #class map.Shalou open;
  133. #var map-Boat-state {waitBoat};
  134. #action {^根据沙漏的速度,渡船应该在%*秒后靠岸。$} {
  135. #local seconds {@time.ParseDoC{%%1}};
  136. map.waitBoat;
  137. };
  138. #action {^沙漏里的沙子已经漏到底了。$} {
  139. #delay map.boat.try-enter {map.boat.try-enter} 1;
  140. };
  141. #action {^渡船缓缓靠岸,船上的船工摆出跳板,方便客人上下船。$} {
  142. #delay map.boat.try-enter {map.boat.try-enter} 0;
  143. };
  144. #action {^船工收回跳板,开船驶向%*的%*了。$} {
  145. #var map-Boat-state {inBoat};
  146. };
  147. #action {^船工放下跳板,招呼大家下船了。$} {
  148. #if { "$map-Boat-state" == "inBoat" } {
  149. #unvar map-Boat-state;
  150. event.Emit map/walk/boat/out;
  151. busy.Halt {out; map.BotReturn map.Shalou};
  152. };
  153. };
  154. #action {^在船离岸之际,你赶紧跳了下去。$} {
  155. #if { "$map-Boat-state" == "inBoat" } {
  156. #unvar map-Boat-state;
  157. event.Emit map/walk/boat/out;
  158. busy.Halt {map.BotReturn map.Shalou};
  159. };
  160. };
  161. #alias {map.waitBoat} { #var map-Boat-state {waitBoat}};
  162. #class map.Shalou close;
  163. };
  164. #alias {map.boat.try-enter} {
  165. #if { "$map-Boat-state" == "waitBoat" } {
  166. event.HandleOnce {GMCP.Move} {map.boat} {map} {map.boat.check};
  167. go enter;
  168. };
  169. };
  170. #alias {map.boat.check} {
  171. #local boat {%1};
  172. #if { @isFalse{$gGMCP[Move][成功]} } {
  173. errLog 登船失败。;
  174. #return;
  175. };
  176. #untick map.boat.yell;
  177. #if { &gGMCP[Move][出口信息][] > 1 } {
  178. errLog 登船失败,这是哪里?;
  179. #return;
  180. };
  181. #if { "$gGMCP[Move][出口信息][1]" != "{|out}" } {
  182. errLog 登船失败,好像不对劲。;
  183. #return;
  184. };
  185. #var map-Boat-state {inBoat};
  186. event.Emit map/walk/boat/in;
  187. };
  188. #alias {map.BotReturn} {
  189. #local bot {%1};
  190. #class $bot kill;
  191. event.DelayEmit {map/walk/continue} {$bot};
  192. };
  193. #func {map.GetPassport} {
  194. #local room {%1};
  195. #local exit {%2};
  196. #local room {@map.GetRoomByID{$room}};
  197. #if { "$room" == "" } {
  198. #return {};
  199. };
  200. #local entry {};
  201. #loop {1} {&map.passport[]} {entry} {
  202. #local entry {$map.passport[$entry]};
  203. #if { "$room[cid]" != "$entry[room]" } {
  204. #continue;
  205. };
  206. #if { "$entry[item]" != "" && @sset.Contains{{$room[item]};$entry[item]} } {
  207. #return {$entry};
  208. };
  209. };
  210. };
  211. #nop 各种爬山;
  212. #alias {map.Climb} {
  213. #class map.Climb open;
  214. #nop 无量山崖洞。;
  215. #action {^你终于爬到崖洞中$} {map.Climb.return};
  216. #nop 武当升真岩到五老峰。;
  217. #action {^你爬的精疲力竭,忽然发现已经到山顶,你提起纵身,一个鹞子翻身跃上山顶。$} {map.Climb.return};
  218. #nop 武当天柱峰下到二天门。;
  219. #action {^你爬的精疲力竭,忽然发现已经到二天门。$} {map.Climb.return};
  220. #nop 武当二天门到三天门。;
  221. #action {^你抬头仰望,突然发现峰顶就在眼前,顿时气力倍增,双脚一蹬跳了上去。$} {map.Climb.return};
  222. #nop 武当下山都是一样的。;
  223. #action {^你低头一看,离地面只有丈余高,你转身一跳,稳稳的落在地上。$} {map.Climb.return};
  224. #nop 黑苗寨爬树。;
  225. #action {^你费力地向上爬去。$} {#0};
  226. #action {^你吃力地向下爬去。$} {#0};
  227. #action {^你爬到了{大树下|树干上|树顶}。$} {map.Climb.return};
  228. #nop 无量山爬 cliff;
  229. #action {^你身在半空,双手乱挥,只盼能抓到什么东西,这么乱挥一阵,又下堕下百馀丈。} {map.Climb.return};
  230. #nop 无量山爬 yafeng;
  231. #action {^山崖似乎无穷无尽,爬到后来,衣衫早给荆刺扯得东破一块,西烂一条,$} {map.Climb.return};
  232. #alias {map.Climb.return} {map.BotReturn map.Climb};
  233. #class map.Climb close;
  234. #if { "%0" == "" } {climb} {climb %0};
  235. };