| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462 |
- #nop vim: set filetype=tt:;
- /*
- 本文件属于 PaoTin++ 的一部分。
- PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp <danzipao@gmail.com>) 享有并保留一切法律权利
- 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。
- */
- #var bot_pp-server[META] {
- {NAME} {PP服务器}
- {DESC} {PP 大米专用,为其他人提供 PP 服务}
- {AUTHOR} {担子炮}
- };
- VAR {VIP 订单} pp-vip-order {};
- VAR {SVIP 订单} pp-svip-order {};
- VAR {普通订单} pp-public-order {};
- VAR {VIP 清单} pp-vip-list {};
- VAR {SVIP 清单} pp-svip-list {};
- VAR {黑名单} pp-black-list {};
- load-lib storage;
- #func {bot_pp-server.Init} {
- storage.Load {pp-server} {pp-vip-list;pp-svip-list;pp-black-list};
- #return {true};
- };
- #action {^%u(%w)告诉你:find %*$} {
- pp.find {%1} {%2} {%3};
- };
- #action {^【求助】%1(%2): find %*$} {
- pp.find {%1} {%2} {%3};
- } {4};
- #alias {pp.find} {
- #local name {%1};
- #local uid {%2};
- #local qid {%3};
- #replace qid {%s◆%*◆$} {};
- #replace qid {%s⿻$} {};
- #replace qid {%s$} {};
- #format uid {%l} {$uid};
- #format uid {%p} {$uid};
- #format qid {%l} {$qid};
- #format qid {%p} {$qid};
- #replace qid {%S%s...%s%+1S} {&1 &4};
- #if { "$qid" == "{.*[^a-z ].*|}" } {
- #return;
- };
- #local order {
- {name} {$name}
- {uid} {$uid}
- {qid} {$qid}
- {retry} {0}
- {time} {@time.Now{}}
- };
- #if { &pp-svip-list[$uid][] > 0 } {
- pp.add-order {pp-svip-order} {$order{source}{SVIP}};
- };
- #elseif { &pp-vip-list[$uid][] > 0 } {
- pp.add-order {pp-vip-order} {$order{source}{VIP}};
- };
- #elseif { &pp-black-list[$uid][] > 0 } {
- infoLog 黑名单用户,跳过;
- };
- #elseif { "$pp-invalid-id[$qid]" == "" } {
- pp.add-order {pp-public-order} {$order{source}{PUBLIC}};
- };
- pp.check;
- };
- #nop 剔重,下单。普通用户只能排队一个订单,VIP/SVIP 可以排队多个订单;
- #alias {pp.add-order} {
- #local order-list-name {%1};
- #local new-order {%2};
- #if { "$new-order[uid]$new-order[qid]" === "$pp-current-order[uid]$pp-current-order[qid]" } {
- #return;
- };
- #local index {};
- #foreach {*{${order-list-name}[]}} {index} {
- #local order {${${order-list-name}[$index]}};
- #if { "$new-order[source]/$order[uid]" === "PUBLIC/$new-order[uid]" } {
- #var {${order-list-name}[$index]} {$new-order};
- #return;
- };
- #if { "$order[uid]/$order[qid]" === "$new-order[uid]/$new-order[qid]" } {
- #return;
- };
- };
- #list {$order-list-name} add {{$new-order}};
- };
- VAR {是否正在工作状态} pp-working {false};
- VAR {当前订单} pp-current-order {};
- #tick pp.check {pp.check} 1;
- #alias {pp.check} {
- #if { "$pp-working" == "true" } {
- #return;
- };
- #local order {};
- #if { &pp-svip-order[] > 0 } {
- #local order {$pp-svip-order[1]};
- #list pp-svip-order delete 1;
- };
- #elseif { &pp-vip-order[] > 0 } {
- #local order {$pp-vip-order[1]};
- #list pp-vip-order delete 1;
- };
- #elseif { &pp-public-order[] > 0 } {
- #local order {$pp-public-order[1]};
- #list pp-public-order delete 1;
- };
- #if { "$order" == "" } {
- pp.idle;
- #return;
- };
- #var pp-working {true};
- #var pp-current-order {$order};
- #if { "$char[HP][忙]" == "true" } {
- halt;
- };
- pp.do;
- };
- VAR {上次查询时间} {pp-last-time} {0};
- #alias {pp.do} {
- #local cd {10};
- #local delay {$pp-last-time + $cd - @time.Now{}};
- #if { $delay > 0 } {
- #delay pp.retry {pp.retry} {$delay};
- #return;
- };
- #class pp.do open;
- #local ID {|ID=pp-server};
- #action {^不要频繁的查询,谢谢!{$ID}$} {
- #class pp.do kill;
- warnLog {$pp-last-time + $cd - @time.Now{}};
- #delay pp.retry {pp.retry} 1;
- };
- #nop watch dog,防止未知的服务器反馈导致 pp.do 永远无法结束。;
- #delay pp.do {
- #class pp.do kill;
- #delay pp.retry {pp.retry} 1;
- } 10;
- #action {^你默运玄功,将功力聚集于耳目,顿时觉得灵台一片空明。{$ID}$} {
- #class pp.do kill;
- #var pp-last-time {@time.Now{}};
- pp.parse.result;
- #nop;
- };
- #nop PP 对象不存在;
- #action {^现在没这个人。{$ID}$} {
- #class pp.do kill;
- pp.add-invalid-id;
- pp.result 失败;
- };
- #action {^你的精力不够,无法感应别人的位置。{$ID}$} {
- #class pp.do kill;
- pp.result 失败;
- };
- #class pp.do close;
- infoLog perceive $pp-current-order[qid];
- perceive $pp-current-order[qid];
- };
- #nop CD 期间如果接收到 VIP/SVIP 订单,则放弃普通订单。;
- #alias {pp.retry} {
- #if { "$pp-current-order[source]" == "PUBLIC" } {
- #if { &pp-svip-order[] + &pp-vip-order[] > 0 } {
- #var pp-working {false};
- pp.check;
- #return;
- };
- };
- pp.do;
- };
- #alias {pp.parse.result} {
- #class pp.parse.result open;
- #action {^你掐指一算,感觉%*(%*)现在好象在%*一带活动。$} {
- #class pp.parse.result kill;
- #local qid {%%2};
- #format qid {%l} {$qid};
- pp.result 成功 {%%1} {$qid} {%%3};
- };
- #action {^你费了半天的力气,就是感应不出%*的位置。$} {
- #class pp.parse.result kill;
- pp.result 失败 {%%1};
- };
- #action {^你费了半天的力气,完全无法感应出%*的位置。$} {
- #class pp.parse.result kill;
- pp.result 失败 {%%1};
- };
- #action {^你费了半天的力气,完全感应不出任何状况。$} {
- #class pp.parse.result kill;
- pp.result 失败 {};
- };
- #action {^你费了半天劲,就是无法感应这个人在哪里...$} {
- #class pp.parse.result kill;
- pp.result 失败 {};
- };
- #action {^此人已经隐姓埋名,你费了半天的力气,就是感应不出其位置。$} {
- #class pp.parse.result kill;
- pp.add-invalid-id;
- pp.result 失败 {};
- };
- #delay pp.parse.result {
- #class pp.parse.result kill;
- pp.result 失败 {};
- } 3;
- #class pp.parse.result close;
- };
- #alias {pp.result} {
- #local answer {%1};
- #local qname {%2};
- #local qid {@default{{%3};{$pp-current-order[qid]}}};
- #local place {%4};
- #local uname {$pp-current-order[name]};
- #local uid {@default{{$pp-current-order[uid]};{$user[id]}}};
- #local source {$pp-current-order[source]};
- #local elapse {};
- #format elapse {%T};
- #math elapse {$elapse - $pp-current-order[time]};
- #local prefix {<169>普通订单<299>};
- #if { "$source" == "VIP" } {
- #local prefix {<139>VIP 订单<299>};
- };
- #elseif { "$source" == "SVIP" } {
- #local prefix {<159>SVIP订单<299>};
- };
- #if { "$answer" == "成功" } {
- #local prefix {【$prefix】【<129>成功<299>】【<129>$uid<299>】【<169>$uname<299>】【<179>$qid<299>】};
- };
- #else {
- #local prefix {【$prefix】【<119>失败<299>】【<129>$uid<299>】【<169>$uname<299>】【<179>$qid<299>】};
- };
- pp.add-history-id;
- #if { "$answer" == "成功" } {
- #if { "$qid" == "$pp-current-order[qid]" } {
- ppLog $prefix【<149>$qname<299>】【<129>$place<299>】【<169>$elapse 秒<299>】;
- tell $uid 【$qname($qid)】目前在【$place】,快去摁死它吧!;
- };
- };
- #else {
- #switch {"$source/$qname"} {
- #case {"PUBLIC/"} {
- ppLog $prefix【<119>未知<299>】【<119>查无此人<299>】【<169>$elapse 秒<299>】;
- };
- #case {"PUBLIC/%+"} {
- ppLog $prefix【<149>$qname<299>】【<139>感应不到<299>】【<169>$elapse 秒<299>】;
- };
- #case {"{VIP|SVIP}/" } {
- ppLog $prefix【<119>未知<299>】【<119>查无此人<299>】【<169>$elapse 秒<299>】;
- tell $uid 据我所查,【$qid】已不在人世了;
- };
- #case {"{VIP|SVIP}/%+" } {
- ppLog $prefix【<149>$qname<299>】【<139>感应不到<299>】【<169>$elapse 秒<299>】;
- tell $uid 恕贫僧道行尚浅,无法查到【$qid】的具体下落,只知其人名曰【$qname】;
- };
- };
- };
- #var pp-working {false};
- #var pp-current-order {};
- };
- VAR {最近一段时间查过的 ID} pp-history-id {};
- #alias {pp.add-history-id} {
- #local {qid} {$pp-current-order[qid]};
- #var {pp-history-id[$qid]} {@time.Now{}};
- };
- #nop 如果一个 ID 曾经被查到过,后来又查无此人,则认为该 ID 已死亡,标注为无效 ID;
- VAR {无效目标 ID,列表表格,屏蔽这些 ID 一段时间防止重复查询} pp-invalid-id {};
- #alias {pp.add-invalid-id} {
- #local {qid} {$pp-current-order[qid]};
- #if { "$pp-history-id[$qid]" == "" } {
- pp.add-history-id;
- #return;
- };
- #unvar {pp-history-id[$qid]};
- #var {pp-invalid-id[$qid]} {@time.Now{}};
- };
- #tick pp.clean-history {pp.clean-history} 600;
- #alias {pp.clean-history} {
- #local now {@time.Now{}};
- #local id {};
- #foreach {*pp-invalid-id[]} {id} {
- #local time {$pp-invalid-id[$id]};
- #if { $now - $time > 600 } {
- #unvar {pp-invalid-id[$id]};
- };
- };
- #local id {};
- #foreach {*pp-history-id[]} {id} {
- #local time {$pp-history-id[$id]};
- #if { $now - $time > 300 } {
- #unvar {pp-history-id[$id]};
- };
- };
- };
- #alias {pp.AddVIP} {pp.add-list VIP pp-vip-list %1};
- #alias {pp.AddSVIP} {pp.add-list SVIP pp-svip-list %1};
- #alias {pp.BlockID} {pp.add-list 黑名单 pp-black-list %1};
- #alias {pp.add-list} {
- #local list-name {%1};
- #local list-var {%2};
- #local uid {@str.Trim{@str.ToLower{%3}}};
- #if { "$uid" != "{[a-z]{3,}}" } {
- ppLog 添加 $list-name 失败,ID【$uid】格式有误。;
- #return;
- };
- #var {${list-var}[$uid]} {
- {uid} {$uid}
- };
- ppLog 【<179>@str.AlignLeft{$list-name;4}维护<299>】【<129>$uid<299>】【共 &{${list-var}[]} 位 VIP】【*{${list-var}[]}】;
- pp.store-vip;
- };
- #alias {pp.idle} {
- #if { $char[HP][最大内力] < $char[Skills][基本内功][jifa-level] * 10 } {
- pp.dazuo;
- };
- #elseif { $char[HP][最大精力] < $char[Skills][基本内功][jifa-level] * 10 } {
- pp.tuna;
- };
- #else {
- pp.recover;
- };
- };
- #alias {pp.tuna} {
- #if { "$char[HP][忙]" == "true" } {
- #return;
- };
- #if { $char[HP][内力百分比] < 10 } {
- pp.dazuo;
- #return;
- };
- #if { $char[HP][气血百分比] < 70 } {
- yun recover;
- };
- #if { $char[HP][当前精力] + 10 > $char[HP][最大精力] * 2 } {
- tuna 10;
- };
- #else {
- #if { $char[HP][精神百分比] < 10 || $char[HP][内力百分比] < 90 } {
- yun regenerate;
- };
- tuna max;
- };
- };
- #alias {pp.dazuo} {
- #if { "$char[HP][忙]" == "true" } {
- #return;
- };
- #if { $char[HP][精神百分比] < 70 } {
- yun regenerate;
- };
- #if { $char[HP][当前内力] + 10 > $char[HP][最大内力] * 2 } {
- dazuo 10;
- };
- #else {
- #if { $char[HP][气血百分比] < 10 || $char[HP][内力百分比] < 90 } {
- yun recover;
- };
- dazuo max;
- };
- };
- #alias {pp.recover} {
- #if { "$char[HP][忙]" == "true" } {
- #return;
- };
- #if { $char[HP][当前精力] < $char[HP][最大精力] * 2 * 8 / 10 } {
- #if { $char[HP][精神百分比] < 10 } {yun regenerate};
- #if { $char[HP][气血百分比] < 70 } {yun recover};
- tuna max;
- };
- #elseif { $char[HP][当前内力] < $char[HP][最大内力] * 2 * 8 / 10 } {
- #if { $char[HP][气血百分比] < 10 } {yun recover};
- #if { $char[HP][精神百分比] < 70 } {yun regenerate};
- dazuo max;
- };
- #else {
- #if { $char[HP][气血百分比] < 99 } {yun recover};
- #if { $char[HP][精神百分比] < 99 } {yun regenerate};
- };
- };
- #alias {pp.store-vip} {
- storage.Save {pp-server} {pp-vip-list;pp-svip-list;pp-black-list};
- };
|