在一个地图内 玩家持有宝箱180秒将获得奖励
1:有人持有宝箱后开启全区倒计时: "xxx玩家 持有宝箱 继续持有300秒后获得奖励!"
2: 持有宝箱玩家下限 切换地图 宝箱重新放置回原地图 其他玩家持有后重新开启全区倒计时
🤖 回答引擎: TXT语法专家 |
🕒 时间: 2026-06-06 11:30:32 |
👁️ 阅读: 4
要实现这个宝箱持有奖励系统,需要结合地图物品放置、倒计时公告和玩家状态检测。根据课程日志记录,以下是实现方案:
**1. 宝箱放置与拾取触发**
首先在地图放置宝箱物品,设置拾取触发:
```txt
[@PickUpItem]
#IF
EQUAL <$PICKDROPITEMNAME> 宝箱
#ACT
; 记录持有者信息
MOV S$宝箱持有者 <$USERNAME>
MOV N$持有开始时间 <$DATETIME>
; 开启全区倒计时公告
SendCenterMsg 180 251 <$STR(S$宝箱持有者)>持有宝箱,继续持有300秒后获得奖励! 0 300 @宝箱奖励
; 设置个人持有倒计时
SENDDELAYMSG 你持有宝箱,继续持有180秒可获得奖励 180 255 0 @个人宝箱奖励
```
**2. 宝箱奖励发放**
```txt
[@宝箱奖励]
#ACT
; 检查持有者是否还在本地图且持有宝箱
#IF
CHECKONLINE <$STR(S$宝箱持有者)>
CHECKBAGITEMS 宝箱 1 <$STR(S$宝箱持有者)>
#ACT
; 发放奖励
GIVE 奖励物品 1 <$STR(S$宝箱持有者)>
SendCenterMsg 180 251 <$STR(S$宝箱持有者)>成功持有宝箱300秒,获得丰厚奖励! 0 10
#ELSESAY
; 持有者下线或失去宝箱,重新放置宝箱
ThrowItem 3 330 330 10 宝箱 30|60 1 0 0
SendCenterMsg 180 251 宝箱持有失败,宝箱已重新刷新! 0 10
```
**3. 玩家下线检测**
```txt
[@PlayOffline]
#IF
EQUAL <$USERNAME> <$STR(S$宝箱持有者)>
#ACT
; 玩家下线,清除倒计时并重新放置宝箱
CLEARDELAYGOTO 1
ThrowItem 3 330 330 10 宝箱 30|60 1 0 0
SendCenterMsg 180 251 宝箱持有者下线,宝箱已重新刷新! 0 10
```
**4. 地图切换检测**
```txt
[@PlayMapChange]
#IF
EQUAL <$USERNAME> <$STR(S$宝箱持有者)>
#ACT
; 玩家切换地图,重新放置宝箱
CLEARDELAYGOTO 1
ThrowItem 3 330 330 10 宝箱 30|60 1 0 0
SendCenterMsg 180 251 宝箱持有者离开地图,宝箱已重新刷新! 0 10
```
**5. 宝箱重新放置后的全区公告**
当宝箱重新放置后,其他玩家拾取时会重新触发步骤1的全区倒计时。
**注意事项:**
1. 宝箱物品需要在数据库设置可拾取且触发`[@PickUpItem]`
2. 地图坐标(3,330,330)需要根据实际地图调整
3. 倒计时清除使用`CLEARDELAYGOTO 1`清除SendCenterMsg的倒计时
4. 需要确保宝箱持有者变量`S$宝箱持有者`在全局作用域可用
这个系统实现了宝箱持有倒计时、持有者状态检测和宝箱重新刷新机制,符合需求描述的所有功能点。
← 返回问答库