分享一些HERO引擎单机传奇服务端的活动脚本

来源: 作者: 点击:
以下是一些 HERO 引擎单机传奇服务端的活动脚本示例:
1. **双倍经验活动脚本**:
```
(@main)
#IF
; 可以设置一个活动开启的时间范围
CHECKTIME 18:00 20:00
#ACT
SET [双倍经验_活动状态] 1
SENDMSG 7 双倍经验活动已开启,活动时间为 18:00 至 20:00,请大家抓紧时间升级!
ADDEXPRATE 200 ; 将经验倍率增加 2 倍(原经验率基础上乘以 2)
#ELSEACT
SET [双倍经验_活动状态] 0
ADDEXPRATE 100 ; 恢复正常经验倍率
```
在定时器脚本中,可以定时检查活动是否结束,如果结束则恢复正常经验倍率:
```
(@ontimer1)
#IF
CHECKVAR [双倍经验_活动状态] 1
#ACT
CALCVAR $T = <$TIME> - [双倍经验_活动开始时间]
#IF
$T > 7200 ; 7200 秒即 2 小时,活动持续 2 小时
SET [双倍经验_活动状态] 0
ADDEXPRATE 100
SENDMSG 7 双倍经验活动已结束。
```
2. **怪物攻城活动脚本**:
```
(@main)
#IF
; 可以设置一个固定的时间点开启活动
CHECKTIME 20:30
#ACT
SET [怪物攻城_活动状态] 1
; 定义怪物刷新的坐标范围
SET [怪物刷新_X坐标范围] 300 350
SET [怪物刷新_Y坐标范围] 300 350
SET [怪物刷新数量] 100
SET [已刷新怪物数量] 0
; 定时刷新怪物
SETTIMER 1 5000 ; 每 5 秒刷新一批怪物
#SAY
怪物攻城活动即将开始,请各位勇士做好准备!
#ELSEACT
SET [怪物攻城_活动状态] 0
KILLTIMER 1 ; 关闭定时器
```
在定时器脚本中刷新怪物:
```
(@ontimer1)
#IF
CHECKVAR [怪物攻城_活动状态] 1
#ACT
CALCVAR $X = RANDOM [<$STR([怪物刷新_X坐标范围])>]
CALCVAR $Y = RANDOM [<$STR([怪物刷新_Y坐标范围])>]
; 这里假设怪物的名称为"攻城怪物"
SPAWNMONSTER 攻城怪物 1 $X $Y
INC [已刷新怪物数量] 1
#IF
CHECKVAR [已刷新怪物数量] >= [<$STR([怪物刷新数量])>]
#ACT
KILLTIMER 1
SENDMSG 7 怪物攻城活动的怪物已全部刷新完毕!
```
3. **寻宝活动脚本**:
```
(@main)
#IF
; 可以设置一个活动开启的条件,比如玩家拥有特定道具或完成特定任务
CHECKITEM 寻宝地图入场券 1
#ACT
TAKEITEM 寻宝地图入场券 1
MOVRANDOM 50 50 100 100 ; 将玩家随机传送到寻宝地图的某个位置
SET [寻宝活动_剩余时间] 300 ; 寻宝活动持续 5 分钟(300 秒)
SETTIMER 2 1000 ; 每秒检查一次剩余时间
#SAY
欢迎来到寻宝地图,你有 5 分钟的时间寻找宝藏!
#ELSEACT
#SAY
你没有寻宝地图入场券,无法参加寻宝活动。
```
在另一个定时器脚本中检查活动剩余时间:
```
(@ontimer2)
#IF
CHECKVAR [寻宝活动_剩余时间] > 0
#ACT
DEC [寻宝活动_剩余时间] 1
#SAY
寻宝活动剩余时间:<$STR([寻宝活动_剩余时间])> 秒。
#IF
CHECKVAR [寻宝活动_剩余时间] <= 0
#ACT
MOVRANDOM 330 330 340 340 ; 将玩家传送到主城的某个位置
SENDMSG 7 寻宝活动已结束,你已被传送回主城。
KILLTIMER 2 ; 关闭定时器
```
4. **竞技比赛活动脚本**:
```
(@main)
#IF
; 可以设置一个报名时间段
CHECKTIME 14:00 14:30
#ACT
#SAY
竞技比赛活动报名开启,报名时间为 14:00 至 14:30,请输入“@报名”进行报名。
#ELSEACT
#SAY
报名时间已过,无法报名。
```
当玩家输入“@报名”时:
```
(@报名)
#IF
CHECKTIME 14:00 14:30
#ACT
ADDTOSET [竞技比赛_报名玩家列表] <$USERNAME>
SENDMSG 7 你已成功报名竞技比赛。
#ELSEACT
#SAY
报名时间已过,无法报名。
```
比赛开始时:
```
(@比赛开始)
#IF
; 检查报名玩家数量是否达到一定要求
CHECKSETCOUNT [竞技比赛_报名玩家列表] > 10
#ACT
; 将报名玩家传送到比赛场地
FORREADVARLIST [竞技比赛_报名玩家列表] S $PLAYER
MOV $PLAYER 200 200
; 开始比赛逻辑,比如设置比赛时间、计分等
SET [比赛时间] 300 ; 比赛持续 5 分钟
SETTIMER 3 1000
#SAY
竞技比赛正式开始!
#ELSEACT
#SAY
报名玩家数量不足,比赛无法开始。
```
在比赛定时器脚本中:
```
(@ontimer3)
#IF
CHECKVAR [比赛时间] > 0
#ACT
DEC [比赛时间] 1
#SAY
比赛剩余时间:<$STR([比赛时间])> 秒。
#IF
CHECKVAR [比赛时间] <= 0
#ACT
; 比赛结束,进行排名和奖励发放
; 这里假设根据玩家的击杀数进行排名
SORTVARLIST [竞技比赛_报名玩家列表] [竞技比赛_玩家击杀数] 1
#SAY
竞技比赛结束,排名如下:
COUNTVARLIST [竞技比赛_报名玩家列表] $COUNT
#FOR 1 $COUNT
READVARLIST [竞技比赛_报名玩家列表] $PLAYER
#ACT
GETVARVALUE [竞技比赛_玩家击杀数] $KILL_COUNT $PLAYER
SENDMSG 7 排名第<$STR($I)>的玩家是:<$USERNAME($PLAYER)>,击杀数:<$STR($KILL_COUNT)>。
; 根据排名发放奖励
#IF
$I = 1
#ACT
GIVE $PLAYER 高级装备 1
#ELSEIF
$I = 2
#ACT
GIVE $PLAYER 中级装备 1
#ELSEIF
$I = 3
#ACT
GIVE $PLAYER 低级装备 1
#ENDIF
#NEXT
; 清空比赛相关数据,以便下次比赛
CLEARVARLIST [竞技比赛_报名玩家列表]
CLEARVARLIST [竞技比赛_玩家击杀数]
KILLTIMER 3 ; 关闭定时器
```