我现在有个活动,叫巅峰对战,活动时间为:合区后每天19:00~19:10,活动开启与结束需要提示所有玩家,活动为跨服活动,活动规则:玩家在当前活动跨服地图各自为营,击杀任意玩家+10分,被任意玩家击杀+5分,每10秒+1分,活动奖励:第一名玩家:奖励5万元宝、第二名玩家3万元宝,第三名1万元宝,积分达到1000分以上才可以领取奖励,活动结束奖励系统自动发放,如果发放奖励时不在线的玩家,上线之后可在领取奖励,已领取过玩家不能在领取了,另外在活动中地图中每一名玩家多会显示一个积分排行榜
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-04-29 15:37:51 |
👁️ 阅读: 14
根据课程日志记录,要实现这个巅峰对战活动,需要综合使用跨服、计时器、变量记录、排行榜和邮件奖励等功能。以下是核心脚本框架:
**1. 活动开启与关闭触发 (QManage.txt)**
```txt
; 合区后每天19:00开启
[@OnTimer730]
#IF
; 可加入跨服活动开启条件判断,如是否合区后
#ACT
; 开启跨服活动,假设跨服活动ID配置为1
OPENFUBEN 1
SENDMSG 0 巅峰对战活动已开启!活动时间:19:00-19:10,请通过活动入口进入!
; 启动活动内计时器
SetOffTimer 731 600 ; 10分钟后关闭
; 开始活动内每10秒加分的计时器(需要另外配置计时器,如732,每10秒触发一次)
[@OnTimer731]
#IF
#ACT
; 活动结束,关闭跨服地图
CLOSEFUBEN 1
SENDMSG 0 巅峰对战活动已结束!奖励将在稍后通过邮件发放!
GOTO @发放活动奖励
```
**2. 活动积分记录与排行榜**
玩家进入跨服地图后,需要记录积分。可以使用自定义变量(如`N$巅峰对战积分`)或键值对变量(如`A`列表)来存储。
```txt
; 击杀玩家加分 (QFunction-0.txt)
[@KillPlay]
#IF
IsInMap 跨服地图名称 ; 替换为实际跨服地图名
#ACT
INC N$巅峰对战积分 10
; 更新到排行榜变量(假设用A列表,键为玩家名,值为积分#时间)
ADDSTRVALUE A 巅峰对战积分 <$USERNAME> <$STR(N$巅峰对战积分)>#<$UTCNOW>
; 刷新排行榜显示(需要配置排行榜面板,参考课程日志中的SORTVARSTR命令)
SORTVARSTR A 10 1 1 ; 按积分降序排前10名
SENDMSG 6 你击杀了玩家,积分+10,当前积分:<$STR(N$巅峰对战积分)>
; 被击杀加分
[@PlayDie]
#IF
IsInMap 跨服地图名称
#ACT
INC N$巅峰对战积分 5
ADDSTRVALUE A 巅峰对战积分 <$USERNAME> <$STR(N$巅峰对战积分)>#<$UTCNOW>
SORTVARSTR A 10 1 1
SENDMSG 6 你被击杀,积分+5,当前积分:<$STR(N$巅峰对战积分)>
; 每10秒加1分 (通过计时器触发,在活动开启时启动)
[@OnTimer732]
#IF
IsInMap 跨服地图名称
#ACT
INC N$巅峰对战积分 1
ADDSTRVALUE A 巅峰对战积分 <$USERNAME> <$STR(N$巅峰对战积分)>#<$UTCNOW>
SORTVARSTR A 10 1 1
```
**3. 活动内积分排行榜显示**
在活动地图中,可以创建一个定时刷新的界面来显示实时排行榜。
```txt
; 排行榜界面脚本 (NPC或按钮触发)
[@查看实时排名]
#IF
#ACT
; 打开一个自定义面板,使用常量显示前10名
OPENMERCHANTBIGDLG 自定义面板ID 是否显示关闭按钮 0 0 0 0
; 在面板的TXT脚本中,使用循环和<$GETSTRKEY(A,排名)>、<$GETSTRVALUE(A,玩家名)>来生成排名列表
; 注意:WHILE循环内不能直接使用#SAY,需要将内容赋值给S变量,最后统一输出。
```
**4. 活动结束自动发放奖励**
```txt
[@发放活动奖励]
#IF
#ACT
; 获取排行榜前三名
MOV S$第一名 <$GETSTRKEY(A,1)>
MOV S$第二名 <$GETSTRKEY(A,2)>
MOV S$第三名 <$GETSTRKEY(A,3)>
; 检查积分是否>=1000,并发放邮件
GOTO @发放第一名奖励
GOTO @发放第二名奖励
GOTO @发放第三名奖励
; 清空或重置排行榜变量(如果需要)
ADDVARCACHE A ; 清理A列表
SENDMSG 0 巅峰对战活动奖励已通过邮件发放,请查收!积分不足1000的玩家无法获得奖励。
[@发放第一名奖励]
#IF
LARGE <$GETNUMVALUE(<$GETSTRVALUE(A,<$STR(S$第一名)>)>, 1)> 999 ; 假设值格式为“积分#时间”,取积分部分
#ACT
; 使用邮件发送奖励
<$STR(S$第一名)>.MailGIVE 元宝 50000 0#1#2#3#4#5#6#7#8
<$STR(S$第一名)>.SendMail 2 巅峰对战奖励 恭喜你获得巅峰对战第一名,奖励5万元宝!
; 记录已发放,防止重复领取(可以用另一个变量列表B记录)
ADDSTRVALUE B 已领奖 <$STR(S$第一名)> 1
```
**5. 离线玩家上线补领**
在`QManage.txt`的登录触发里,检查玩家是否在领奖列表`B`中且有未领取的奖励。
```txt
[@Login]
#IF
CHECKSTRVALUE B 已领奖 <$USERNAME> ; 检查是否已记录领奖
#ACT
; 已领取过,不做处理
#ELSEACT
; 检查是否在获奖名单且积分>=1000
; 如果是,则再次执行邮件发放流程(注意避免重复)
```
**关键点说明:**
1. **跨服活动**:使用`OPENFUBEN`和`CLOSEFUBEN`管理跨服地图。
2. **积分记录**:使用自定义变量`N$巅峰对战积分`记录个人积分,同时用键值对变量`A`列表存储全服排名数据(格式:积分#时间)。
3. **排行榜**:使用`SORTVARSTR`对列表`A`进行排序,并使用`<$GETSTRKEY>`和`<$GETSTRVALUE>`获取排名信息。
4. **奖励发放**:通过`MailGIVE`和`SendMail`命令发送邮件奖励。**注意**:`MailGIVE`命令必须在`SendMail`命令之前。
5. **防重复领取**:使用另一个列表`B`来标记已领取奖励的玩家。
6. **时间控制**:使用`SetOffTimer`和`OnTimer`事件来控制活动开启、结束和每10秒加分。
**配置注意事项:**
* 需要在`QManage.txt`中配置对应的计时器编号(如730、731、732)及其触发时间。
* 跨服活动需要在引擎的“跨服活动”配置页进行相应设置。
* 排行榜面板需要预先在客户端配置好,并在脚本中使用`OPENMERCHANTBIGDLG`打开。
* 邮件奖励的物品“元宝”需要在物品数据库中存在。
此方案实现了活动时间控制、跨服参与、积分实时记录与排名、自动邮件发奖以及离线补领功能。
← 返回问答库