补充一下,封榜金额是5万捐献到达50000金刚石的都可以进入封榜名单里
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-04-06 14:03:53 |
👁️ 阅读: 0
根据课程日志记录,要实现“封榜金额是5万,捐献到达50000金刚石的都可以进入封榜名单里”这个功能,可以结合排序键值对和条件判断来完成。
以下是一个示例脚本,用于处理捐献并筛选出达到50000金刚石的玩家进入特定榜单:
```txt
[@main]
#IF
#ACT
; 赋值本次捐献的金刚石数量
MOV N$本次捐献数量 1000
; 从总键值对A10中取出该玩家当前的总捐献数量
MOV N$当前总捐献 <$GETSTRVALUE(A10,<$USERNAME>)>
; 加上本次捐献的数量
FORMULATION <$STR(N$当前总捐献)>+<$STR(N$本次捐献数量)> N$新的总捐献
; 更新总键值对数据
ADDSTRVALUE A10 <$USERNAME> <$STR(N$新的总捐献)>
; 判断总捐献是否达到50000(封榜条件)
#IF
LARGE <$STR(N$新的总捐献)> 49999
#ACT
; 达到条件,进入封榜排序列表A11
; 排序值格式:捐献数量#时间戳(确保时间戳唯一性用于排序)
ADDSTRVALUE A11 <$USERNAME> <$STR(N$新的总捐献)>#<$UTCNOW8>
; 对A11进行降序排序,只取前100名(可根据需要调整)
SORTVARSTR A11 100 1 1
; 发送提示信息
SENDMSG 6 恭喜!您已捐献<$STR(N$新的总捐献)>金刚石,进入封榜名单!
; 显示封榜名单(例如前10名)
SENDMSG 6 ========封榜名单(捐献≥50000)========
MOV N$显示排名 1
WHILE N$显示排名 < 11
; 获取排名第N$显示排名的玩家名字和捐献数量
MOV S$封榜玩家名 <$GETSTRKEY(A11,<$STR(N$显示排名)>)>
MOV S$封榜捐献值 <$GETSORTSTRVALUE(A11,<$STR(N$显示排名)>)>
#IF
NOT EQUAL S$封榜玩家名
#ACT
; 分割出捐献数量(去掉时间戳部分)
GETVALIDSTRSUPER <$STR(S$封榜捐献值)> # S$捐献数量_
SENDMSG 6 第<$STR(N$显示排名)>名:<$STR(S$封榜玩家名)> 捐献:<$STR(S$捐献数量_)>金刚石
INC N$显示排名 1
#ELSEACT
BREAK
#ENDIF
ENDWHILE
#ELSEACT
SENDMSG 6 您当前总捐献为:<$STR(N$新的总捐献)>金刚石,还需<$FORMULATION[50000-<$STR(N$新的总捐献)>]>金刚石即可进入封榜名单。
```
**逻辑说明:**
1. 使用 `A10` 键值对存储所有玩家的总捐献数量。
2. 当玩家捐献后,计算新的总捐献值,并判断是否达到50000。
3. 如果达到50000,则将玩家加入 `A11` 排序键值对,排序值由“捐献数量#时间戳”组成,确保排序唯一性。
4. 使用 `SORTVARSTR` 对 `A11` 进行降序排序。
5. 通过循环显示封榜名单(例如前10名),使用 `GETVALIDSTRSUPER` 分割出捐献数量。
**注意事项:**
- 排序键值对 `A11` 只存储达到封榜条件的玩家,避免对所有玩家排序造成卡顿。
- 排序最多支持100组键值,可根据实际需要调整 `SORTVARSTR` 的参数。
- 时间戳 `<$UTCNOW8>` 用于确保排序值的唯一性,当捐献数量相同时,后捐献的玩家排名靠后(因为时间戳更大)。
← 返回问答库