帮我写一个捐献系统.首次捐献500金刚石可以获得捐献属性,捐献达到50000金刚石都可获得榜一属性,每日合区情空排名属性,捐献排名有5个,第一名第二名第三名第四名和并列第五名
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-04-06 13:57:36 |
👁️ 阅读: 0
[@main]
<Img|x=161.0|y=113.0|reset=1|loadDelay=1|show=0|esc=1|img=public_win32/1900000610.png|move=0|bg=1>
<Layout|x=780.0|y=101.0|width=80|height=80|link=@exit>
<Button|x=800.0|y=114.0|pimg=public/1900000511.png|nimg=public/1900000510.png|link=@exit>
<Button|x=290.0|y=262.0|size=18|color=255|nimg=public_win32/1900000662|link=@捐献500|showtips=首次捐献500金刚石获得捐献属性>
<Button|x=290.0|y=300.0|size=18|color=255|nimg=public_win32/1900000662|link=@捐献50000|showtips=捐献达到50000金刚石获得榜一属性>
<Button|x=290.0|y=338.0|size=18|color=255|nimg=public_win32/1900000662|link=@查看排名|showtips=查看当前捐献排名>
<Text|x=330.0|y=265.0|size=18|color=255|text=首次捐献500金刚石>
<Text|x=330.0|y=303.0|size=18|color=255|text=捐献50000金刚石(榜一)>
<Text|x=330.0|y=341.0|size=18|color=255|text=查看捐献排行榜>
[@捐献500]
#IF
CHECKGAMEDIAMOND > 499
#ACT
GAMEDIAMOND - 500
MOV N$当前捐献 500
GOTO @记录捐献并刷新属性
#ELSESAY
金刚石不足500,无法捐献。
[@捐献50000]
#IF
CHECKGAMEDIAMOND > 49999
#ACT
GAMEDIAMOND - 50000
MOV N$当前捐献 50000
GOTO @记录捐献并刷新属性
#ELSESAY
金刚石不足50000,无法捐献。
[@记录捐献并刷新属性]
#ACT
;从总记录中取出该玩家历史捐献
MOV N$历史捐献 <$GETSTRVALUE(A10,<$USERNAME>)>
;加上本次捐献
INC N$历史捐献 <$STR(N$当前捐献)>
;更新总记录
ADDSTRVALUE A10 <$USERNAME> <$STR(N$历史捐献)>
;更新排序记录(格式:捐献值#时间戳)
ADDSTRVALUE A11 <$USERNAME> <$STR(N$历史捐献)>#<$UTCNOW8>
;降序排序前5名
SORTVARSTR A11 5 1 1
;检查并发放属性
GOTO @检查属性发放
SENDMSG 6 捐献成功!当前累计捐献:<$STR(N$历史捐献)>金刚石。
[@检查属性发放]
;检查首次捐献500属性
#IF
LARGE N$历史捐献 499
CHECK [301] 0
#ACT
SET [301] 1
SENDMSG 6 恭喜获得首次捐献属性!
;这里可以添加具体的属性赋予命令,例如:CHANGEMODE 5 1000
;检查累计50000属性(榜一属性)
#IF
LARGE N$历史捐献 49999
CHECK [302] 0
#ACT
SET [302] 1
SENDMSG 6 恭喜获得累计捐献榜一属性!
[@查看排名]
#ACT
MOV S$排名显示
MOV N$排名 1
WHILE N$排名 < 6
MOV S$玩家名 <$GETSTRKEY(A11,<$STR(N$排名)>)>
MOV S$捐献值 <$GETSORTSTRVALUE(A11,<$STR(N$排名)>)>
;处理并列第五名
#IF
EQUAL N$排名 5
#ACT
;获取第五名的值
MOV S$第五名值 <$GETSORTSTRVALUE(A11,5)>
;寻找所有并列第五名
MOV N$并列检查 5
WHILE N$并列检查 < 100
INC N$并列检查 1
MOV S$检查值 <$GETSORTSTRVALUE(A11,<$STR(N$并列检查)>)>
#IF
EQUAL S$检查值 <$STR(S$第五名值)>
#ACT
MOV S$并列名 <$GETSTRKEY(A11,<$STR(N$并列检查)>)>
INC S$排名显示 <Text|x=200|y=<$FORMULATION[200+<$STR(N$排名)>*25]>|size=18|color=255|text=并列第五名:<$STR(S$并列名)> 捐献:<$STR(S$检查值)>>
#ELSEACT
BREAK
ENDWHILE
#ELSEACT
INC S$排名显示 <Text|x=200|y=<$FORMULATION[200+<$STR(N$排名)>*25]>|size=18|color=255|text=第<$STR(N$排名)>名:<$STR(S$玩家名)> 捐献:<$STR(S$捐献值)>>
INC N$排名 1
ENDWHILE
#SAY
<$STR(S$排名显示)>
[@每日清空排名属性]
;此触发由定时器或合区脚本调用
#ACT
;清空用于排序的变量A11(保留原始数据A10)
CLEARVARSTR A11
SENDMSG 6 捐献排行榜已清空,属性重置。
;重置玩家的榜一属性标记
;这里需要遍历所有玩家并SET [302] 0,但TXT没有直接遍历所有玩家的命令。
;建议通过其他方式(如登录触发检查A10中的值是否小于50000)来动态管理属性。
[@exit]
#ACT
CLOSE
← 返回问答库