排行榜(缺陷待解决)

懒孩纸(*^ω^*)

刚入坑的萌新
2020-05-29
38
14
8
&&问题很大
&&不确定出在哪里
&&时好时坏就很神奇
&&不能承压,快速连续执行就肯定会坏
&&明明理论上可以的(忧伤)
&&慢速使用貌似没问题
&&请大佬们指出错误所在

超级截屏_20201031_162011.png
40e192c429d1d6f7.png
好像是冲突,但怎么冲突的emmm。。。

##文件结构
##()是要写入值的说明
机器人/数据/(QQ)/排行 1 (排名)
/金币 1 (数量)
/人数 1 (人数)
/排行榜 (排名) (QQ)
/缓存 1 (计数)

##需要提前写入一个排名


加入
##【没加入排名肯定为0】
如果:$读 机器人/数据/%QQ%/排名 1 0$!=0
你已经加入了
返回
如果尾
##【已有的人数为a】
a:$读 机器人/人数 1 0$
##【现在多了一个人】
a:[%a%+1]
##【新来的什么都没有,自然是最后一名】
$写 机器人/排行榜 %a% %QQ%$
$写 机器人/数据/%QQ%/排行 1 %a%$
##【不能忘记把人数更新】
$写 机器人/人数 1 %a%$
加入完成!

##【到排行榜的具体内容了】
##【两种形式,几乎同样的问题,】

##【为避免被人触发而使用[内部]】

##【向下对比形式】


[内部]排行榜刷新
##【“,”前是对比的排名,“,”后不用说了吧~】
$调用 0 排行刷新1,%QQ%$

[内部]排行刷新([0-9]+),([0-9]+)
##【获取前者QQ,文件结构注明了】
a:$读 机器人/排行榜 %括号1% 0$
如果:%a%==%括号2%
##【自己和自己没法比了对吧,并且这个刷新方式再往下就会出错的,所以,刷新结束。】
返回
如果尾
##【前者金币】
b:$读 机器人/数据/%a%/金币 1 0$
##【后者金币】
c:$读 机器人/数据/%括号2%/金币 1 0$
##【看谁的金币多,这里是否用“=”差别不大,看个人喜好自己斟酌】
如果:%b%<=%c%
##【此时后者比前者金币多(或新),替换他们的排名,先将后者排名读出来】
d:$读 机器人/数据/%括号2%/排名 1 0$
$写 机器人/数据/%括号2%/排行 1 %括号1%$
$写 机器人/数据/%a%/排行 1 %d%$
$写 机器人/排行榜 %括号1% %括号2%$
$写 机器人/排行榜 %d% %a%$
##【让金币少的继续向下对比】
##【这里将延迟改为0也有出错,往长加又容易冲突】
$调用 10 排行刷新[%括号1%+1],%a%$
返回
如果尾
##【继续向下对比】
$调用 10 排行刷新[%括号1%+1],%括号2%$

##【向上对比形式】


[内部]排行榜刷新
a:$读 机器人/数据/%QQ%/排行 1 0$
$调用 0 排行刷新[%a%-1],%QQ%$

[内部]排行刷新([0-9]+),([0-9]+)
如果:%括号1%<1
##【一比一只能是一喽,刷新结束】
返回
如果尾
##【前者QQ】
a:$读 机器人/排行榜 %括号1% 0$
##【前者金币】
b:$读 机器人/数据/%a%/金币 1 0$
##【后者金币】
c:$读 机器人/数据/%括号2%/金币 1 0$
##【金币数对比】
如果:%b%<=%c%
##【此时后者比前者金币多(或新),替换排名】
##【后者排名】
d:$读 机器人/数据/%括号2%/排名 1 0$
$写 机器人/数据/%括号2%/排行 1 %括号1%$
$写 机器人/数据/%a%/排行 1 %d%$
$写 机器人/排行榜 %括号1% %括号2%$
$写 机器人/排行榜 %d% %a%$
##【让金币多的继续向上对比】
$调用 10 排行刷新[%括号1%-1],%括号2%$
返回
如果尾
##【不用比了,刷新结束】

##【主动查看】


排行榜
a:$读 机器人/缓存 1 0$
b:$读 机器人/人数 1 0$
如果:%a%>=%b%
##【此时输出完成】
共计%b%人。
##【缓存清零】
$写 机器人/缓存 1 0$
返回
如果尾
##【缓存可以理解为已完成输出数量】
a:[%a%+1]
$写 机器人/缓存 1 %a%$
c:$读 机器人/排行榜 %a% 0$
d:$读 机器人/数据/%c%/金币 1 0$
##【如果因为不同群获取不到昵称,可以在〖加入〗把群号也记录上】
e:$群昵称 %群号% %c%$
如果:%a%==1
##【此时输出开头】
=========排行榜=========\r\n
排名 昵称 金币\r\n
%a% %e%(%c%) %d%\r\n
##【下一条,用回调使消息合并】
$回调 排行榜$
返回
如果尾
##【中间部分】
%a% %e%(%c%) %d%\r\n
##【下一条】
$回调 排行榜$

##【人数过多?可以采取分页形式】


排行榜
##【快捷方式】
$调用 0 排行榜1$

排行榜 ?([0-9]+)
##【将页数换为排名「十名一页」】
a:%括号1%0
##【总页数】
b:$读 机器人/人数 1 0$
b:[%b%/10]
b:[%b%+1]
##【发言者数据】
c:$读 机器人/数据/%QQ%/排行 1 0$
d:$读 机器人/数据/%QQ%/金币 1 0$
e:$群昵称 %群号% %QQ%$
=========排行榜=========\r\n
排名 昵称 金币\r\n
$回调 排行数据[%a%-9]$
$回调 排行数据[%a%-8]$
$回调 排行数据[%a%-7]$
$回调 排行数据[%a%-6]$
$回调 排行数据[%a%-5]$
$回调 排行数据[%a%-4]$
$回调 排行数据[%a%-3]$
$回调 排行数据[%a%-2]$
$回调 排行数据[%a%-1]$
$回调 排行数据%a%$
第%括号1%页/共%b%页\r\n
========================\r\n
昵称:%e%\r\n
QQ:%QQ%\r\n
排名:%c%\r\n
金币:%d%\r\n
========================\r\n
可用指令:排行榜 (页数)

[内部]排行数据([0-9]+)
a:$读 机器人/排行榜 %括号1% 0$
如果:%a%==0
##【后面都没有了】
返回
如果尾
b:$读 机器人/数据/%a%/金币 1 0$
c:$群昵称 %群号% %a%$
%括号1% %c%(%a%) %b%\r\n

##【加个抽奖看效果】


抽奖
##【如果不加这个判断的话,会出错的!!!】
如果:$读 机器人/数据/%QQ%/排行 1 0$==0
你还未加入
返回
如果尾
a:%随机数10-100%
$调用 0 加金币%a%$
你抽到了%a%枚金币。

[内部]加金币([0-9]+)
a:$读 机器人/数据/%QQ%/金币 1 0$
b:[%a%+%括号1%]
$写 机器人/数据/%QQ%/金币 1 %b%$
$调用 100 排行榜刷新$

以上