#nop vim: set filetype=tt:; /* 本文件属于 PaoTin++ 的一部分。 PaoTin++ © 2020~2023 的所有版权均由担子炮(dzp ) 享有并保留一切法律权利 你可以在遵照 GPLv3 协议的基础之上使用、修改及重新分发本程序。 */ #var bot_pp-server[META] { {NAME} {PP服务器} {DESC} {PP 大米专用,为其他人提供 PP 服务} {AUTHOR} {担子炮} }; VAR {普通订单} pp-svip-order {}; VAR {VIP 订单} pp-vip-order {}; VAR {SVIP 订单} 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}; #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}; };