area.tin 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #nop vim: set filetype=tt:;
  2. /*
  3. 本文件属于 PaoTin++ 的一部分
  4. ===========
  5. PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
  6. 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
  7. ===========
  8. */
  9. load-module bot/pp;
  10. VAR {全局区域对照表} {map.area.dict} {};
  11. #nop Careless(随便查查)、Careful(仔细查查)、CarefulOnce(仔细查一次)三选一;
  12. VAR {定位模式} map.Locate.mode {Careless};
  13. event.Define {map/GotArea} {无参} {$MODULE} {已经获取到区域信息,并更新到 gMapRoom 全局变量。};
  14. event.Define {map/GotLocalmaps} {无参} {$MODULE} {已经解析 localmaps 命令。};
  15. event.HandleOnce {map/init} {map/area} {map} {map.area.Init};
  16. #alias {map.area.Init} {
  17. storage.Load {map-area} {map.area.dict};
  18. event.Handle {map/GotRoomInfo} {map/area} {map} {map.GetArea};
  19. };
  20. #alias {map.GetArea} {
  21. #if { "$gMapRoom[area][RESOLVED]" != "" } {#return};
  22. #if { "$map.Locate.mode" == "Careless" } {#return};
  23. #if { "$gMapRoom[direction]" != "here" } {#return};
  24. #if { @ga.IsUnderway{} } {#return};
  25. #if { "$map.Locate.mode" == "CarefulOnce" } {
  26. #var map.Locate.mode {Careless};
  27. };
  28. event.HandleOnce {map/GotNodeInfo} {map/area} {map} {map.area.check walk-done};
  29. map.GetNodeInfo;
  30. };
  31. #alias {map.area.check} {
  32. #local stage {%1};
  33. #local area {@map.resolveArea{$gMapRoom[area]}};
  34. #if { "$area" == "" } {
  35. #switch {"$stage"} {
  36. #case {"walk-done"} {
  37. event.HandleOnce {map/GotLocalmaps} {map/area} {map} {map.area.check localmaps-done};
  38. localmaps;
  39. };
  40. #case {"localmaps-done"} {
  41. event.HandleOnce {pp/Response} {map/area} {map} {map.GetArea.pp.done};
  42. pp $user[id];
  43. #delay map.GetArea.pp {map.area.check pp-timeout} {30};
  44. };
  45. #case {"pp-timeoout"} {
  46. errLog 竭尽全力也无法获得区域信息。我这是到了什么地方?;
  47. event.UnHandle {pp/Response} {map/area} {map};
  48. };
  49. };
  50. #return;
  51. };
  52. #var gMapRoom[area][RESOLVED] {$area};
  53. okLog 调查完毕,这里是 $gMapRoom[area][RESOLVED]的$gMapRoom[name];
  54. event.DelayEmit map/GotArea;
  55. };
  56. #alias {map.GetArea.pp.done} {
  57. #undelay map.GetArea.pp;
  58. #local ppInfo {$gPPResponse[$user[id]]};
  59. #if { "$ppInfo" == "" } {
  60. errLog PP 机器人应答出错,请检查设置。;
  61. #return;
  62. };
  63. #if { "$ppInfo[room]" != "$gMapRoom[name]" } {
  64. warnLog PP 期间角色发生了移动。定位失效。;
  65. #return;
  66. };
  67. #var gMapRoom[area][PP] {$ppInfo[area]};
  68. map.area.check;
  69. };
  70. #alias {map.Localmaps} {
  71. #local gag {%1};
  72. #local args {%2};
  73. #if { "$args" != "" } {
  74. xtt.Send {localmaps $args};
  75. #return;
  76. };
  77. #var gMapRoom[area][LMAP] {};
  78. #class map.Localmaps open;
  79. #line oneshot #action {~^{\e\[0m|}%c◆%*地图%*◆%c$} {
  80. #local color {%%2};
  81. #replace color {\e[} {};
  82. #replace color {m$} {};
  83. #replace color {m} {;};
  84. #var gMapRoom[area][LMAP] {%%3};
  85. #var gMapRoom[area][COLOR] {$color};
  86. } {2};
  87. #line oneshot #action {^%s%S略图%s$} {
  88. #var gMapRoom[terrain] {随机地图};
  89. #var gMapRoom[village] {%%2};
  90. };
  91. #line oneshot #action {┌─{(─)*}─%*附近详图─{(─)*}─┐$} {
  92. #var gMapRoom[terrain] {随机地图};
  93. };
  94. #if { "$gag" == "gag" } {
  95. #action {^%*{|ID=map/localmaps}$} {#line gag} {6};
  96. #gag {^%*{|ID=map/localmaps}$} {1};
  97. };
  98. #class map.Localmaps close;
  99. xtt.Send {localmaps};
  100. sync.Wait {
  101. #class map.Localmaps kill;
  102. event.DelayEmit map/GotLocalmaps;
  103. };
  104. };
  105. #alias {lm} {map.Localmaps nogag {%0}};
  106. #alias {localmaps} {map.Localmaps gag {%0}};
  107. #nop 根据数据源确定区域信息。数据源有三种:walk、localmaps、pp;
  108. #func {map.resolveArea} {
  109. #local source {%0};
  110. #if { "$source[RESOLVED]" != "" } {
  111. #return {$source[RESOLVED]};
  112. };
  113. #if { "$source[PP]$source[WALK]$source[LMAP]" == "" } {
  114. #return {};
  115. };
  116. #local pp {@default{$source[PP];%*}};
  117. #local walk {@default{$source[WALK];%*}};
  118. #local lmap {@default{$source[LMAP];%*}};
  119. #local pattern {$pp/$walk/$lmap};
  120. #if { "$source[PP]" != "" } {
  121. #local key {};
  122. #local value {{PP}{$source[PP]}};
  123. #foreach {*map.area.dict[$source[PP]/%*/%*][]} {key} {
  124. #local value {$map.area.dict[$key]};
  125. #unvar map.area.dict[$key];
  126. };
  127. #local value[WALK] {@default{$value[WALK];$source[WALK]}};
  128. #local value[LMAP] {@default{$value[LMAP];$source[LMAP]}};
  129. #local value[COLOR] {@default{$value[COLOR];{$source[COLOR]}}};
  130. #local key {$source[PP]/@default{$source[WALK];UNKNOWN}/@default{$source[LMAP];UNKNOWN}};
  131. #var map.area.dict[$key] {$value};
  132. storage.Save {map-area} {map.area.dict};
  133. #return {$pp};
  134. };
  135. #if { &map.area.dict[$pattern][] != 1 } {
  136. #return {};
  137. };
  138. #foreach {*map.area.dict[$pattern]} {pattern} {
  139. #return {$map.area.dict[$pattern][PP]};
  140. };
  141. };
  142. #func {map.AreaColor} {
  143. #local area {%1};
  144. #local pattern {$area/%*/%*};
  145. #if { &map.area.dict[$pattern][] != 1 } {
  146. #return {};
  147. };
  148. #foreach {*map.area.dict[$pattern]} {pattern} {
  149. #return {$map.area.dict[$pattern][COLOR]};
  150. };
  151. };
  152. #alias {map.Here} {
  153. #var map.Locate.mode {CarefulOnce};
  154. look;
  155. };
  156. #alias {ll} {map.Here} {9.0};