| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- #nop vim: set filetype=tt:;
- /*
- 本文件属于 PaoTin++ 的一部分
- ===========
- PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
- 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
- ===========
- */
- load-module bot/pp;
- VAR {全局区域对照表} {map.area.dict} {};
- #nop Careless(随便查查)、Careful(仔细查查)、CarefulOnce(仔细查一次)三选一;
- VAR {定位模式} map.Locate.mode {Careless};
- event.Define {map/GotArea} {无参} {$MODULE} {已经获取到区域信息,并更新到 gMapRoom 全局变量。};
- event.Define {map/GotLocalmaps} {无参} {$MODULE} {已经解析 localmaps 命令。};
- event.HandleOnce {map/init} {map/area} {map} {map.area.Init};
- #alias {map.area.Init} {
- storage.Load {map-area} {map.area.dict};
- event.Handle {map/GotRoomInfo} {map/area} {map} {map.GetArea};
- };
- #alias {map.GetArea} {
- #if { "$gMapRoom[area][RESOLVED]" != "" } {#return};
- #if { "$map.Locate.mode" == "Careless" } {#return};
- #if { "$gMapRoom[direction]" != "here" } {#return};
- #if { @ga.IsUnderway{} } {#return};
- #if { "$map.Locate.mode" == "CarefulOnce" } {
- #var map.Locate.mode {Careless};
- };
- event.HandleOnce {map/GotNodeInfo} {map/area} {map} {map.area.check walk-done};
- map.GetNodeInfo;
- };
- #alias {map.area.check} {
- #local stage {%1};
- #local area {@map.resolveArea{$gMapRoom[area]}};
- #if { "$area" == "" } {
- #switch {"$stage"} {
- #case {"walk-done"} {
- event.HandleOnce {map/GotLocalmaps} {map/area} {map} {map.area.check localmaps-done};
- localmaps;
- };
- #case {"localmaps-done"} {
- event.HandleOnce {pp/Response} {map/area} {map} {map.GetArea.pp.done};
- pp $user[id];
- #delay map.GetArea.pp {map.area.check pp-timeout} {30};
- };
- #case {"pp-timeoout"} {
- errLog 竭尽全力也无法获得区域信息。我这是到了什么地方?;
- event.UnHandle {pp/Response} {map/area} {map};
- };
- };
- #return;
- };
- #var gMapRoom[area][RESOLVED] {$area};
- okLog 调查完毕,这里是 $gMapRoom[area][RESOLVED]的$gMapRoom[name];
- event.DelayEmit map/GotArea;
- };
- #alias {map.GetArea.pp.done} {
- #undelay map.GetArea.pp;
- #local ppInfo {$gPPResponse[$user[id]]};
- #if { "$ppInfo" == "" } {
- errLog PP 机器人应答出错,请检查设置。;
- #return;
- };
- #if { "$ppInfo[room]" != "$gMapRoom[name]" } {
- warnLog PP 期间角色发生了移动。定位失效。;
- #return;
- };
- #var gMapRoom[area][PP] {$ppInfo[area]};
- map.area.check;
- };
- #alias {map.Localmaps} {
- #local gag {%1};
- #local args {%2};
- #if { "$args" != "" } {
- xtt.Send {localmaps $args};
- #return;
- };
- #var gMapRoom[area][LMAP] {};
- #class map.Localmaps open;
- #line oneshot #action {~^{\e\[0m|}%c◆%*地图%*◆%c$} {
- #local color {%%2};
- #replace color {\e[} {};
- #replace color {m$} {};
- #replace color {m} {;};
- #var gMapRoom[area][LMAP] {%%3};
- #var gMapRoom[area][COLOR] {$color};
- } {2};
- #line oneshot #action {^%s%S略图%s$} {
- #var gMapRoom[terrain] {随机地图};
- #var gMapRoom[village] {%%2};
- };
- #line oneshot #action {┌─{(─)*}─%*附近详图─{(─)*}─┐$} {
- #var gMapRoom[terrain] {随机地图};
- };
- #if { "$gag" == "gag" } {
- #action {^%*{|ID=map/localmaps}$} {#line gag} {6};
- #gag {^%*{|ID=map/localmaps}$} {1};
- };
- #class map.Localmaps close;
- xtt.Send {localmaps};
- sync.Wait {
- #class map.Localmaps kill;
- event.DelayEmit map/GotLocalmaps;
- };
- };
- #alias {lm} {map.Localmaps nogag {%0}};
- #alias {localmaps} {map.Localmaps gag {%0}};
- #nop 根据数据源确定区域信息。数据源有三种:walk、localmaps、pp;
- #func {map.resolveArea} {
- #local source {%0};
- #if { "$source[RESOLVED]" != "" } {
- #return {$source[RESOLVED]};
- };
- #if { "$source[PP]$source[WALK]$source[LMAP]" == "" } {
- #return {};
- };
- #local pp {@default{$source[PP];%*}};
- #local walk {@default{$source[WALK];%*}};
- #local lmap {@default{$source[LMAP];%*}};
- #local pattern {$pp/$walk/$lmap};
- #if { "$source[PP]" != "" } {
- #local key {};
- #local value {{PP}{$source[PP]}};
- #foreach {*map.area.dict[$source[PP]/%*/%*][]} {key} {
- #local value {$map.area.dict[$key]};
- #unvar map.area.dict[$key];
- };
- #local value[WALK] {@default{$value[WALK];$source[WALK]}};
- #local value[LMAP] {@default{$value[LMAP];$source[LMAP]}};
- #local value[COLOR] {@default{$value[COLOR];{$source[COLOR]}}};
- #local key {$source[PP]/@default{$source[WALK];UNKNOWN}/@default{$source[LMAP];UNKNOWN}};
- #var map.area.dict[$key] {$value};
- storage.Save {map-area} {map.area.dict};
- #return {$pp};
- };
- #if { &map.area.dict[$pattern][] != 1 } {
- #return {};
- };
- #foreach {*map.area.dict[$pattern]} {pattern} {
- #return {$map.area.dict[$pattern][PP]};
- };
- };
- #func {map.AreaColor} {
- #local area {%1};
- #local pattern {$area/%*/%*};
- #if { &map.area.dict[$pattern][] != 1 } {
- #return {};
- };
- #foreach {*map.area.dict[$pattern]} {pattern} {
- #return {$map.area.dict[$pattern][COLOR]};
- };
- };
- #alias {map.Here} {
- #var map.Locate.mode {CarefulOnce};
- look;
- };
- #alias {ll} {map.Here} {9.0};
|