系统时间条件写在NPC脚本或任务脚本的#IF下面,常用检测参数按粒度分:YEAR检测年,MONTH检测月,DATE检测日,HOUR检测小时,MIN或MINUTE检测分钟,SECOND检测秒。老版、Hero、Blue、GOM、GEE都支持类似思路,但参数名和写法不完全一样,配之前先确认引擎命令表。基础条件格式示例:
IF
HOUR88
MIN2050
ACT
MAPMOVE3330330
上面表示8点20到8点50之间满足条件才执行,HOUR后面两个值写起始小时和结束小时,MIN后面两个值写起始分钟和结束分钟。要做多段时段,就写多个#IF分段或者用#ELSEACT兜底。
按月日范围限制用MONTH和DATE:
IF
MONTH45
DATE1520
ACT
MAPMOVED001
意思是4月15日到5月20日区间允许执行。单日固定时间可只写HOUR和MIN,不写MONTH和DATE就是每天生效。精确到秒用SECOND:
IF
MONTH44
DATE1515
HOUR44
MIN1515
SECOND1515
ACT
MAPMOVEM001
这种写法适合开服定点刷怪、定点发奖,避免每天重复手动操作。
Blue系时间变量可直接拼公告和日志,常用变量:YEAR年、MONTH月、DAY日、HOUR时、MINUTE分、SECOND秒、MILLISECONDS毫秒、LOGINTIME登录时间、LOGINLONG登录时长、SERVERRUNTIME服务器运行时间、$DATETIME服务器时间。NPC说话或写日志时直接引用:
ACT
SENDMSG0当前服务器时间:YEAR-MONTH-DAYHOUR:MINUTE:SECOND
做每日重置、开服天数、活动剩余时间提示都用这些变量,比硬编码日期好维护。
限时进地图最常用HOUR加MIN双重判断。比如某副本只在12点20到12点50、20点20到20点50开放,NPC传送脚本写:
[@进入副本]
IF
HOUR1212
MIN2050
ACT
MAPMOVE副本地图号XY
ELSEACT
SENDMSG5当前不在12:20-12:50开放时间
[@进入副本2]
IF
HOUR2020
MIN2050
ACT
MAPMOVE副本地图号XY
ELSEACT
SENDMSG5当前不在20:20-20:50开放时间
如果希望合并成一个标签,用两组#IF分别判断,满足任一时段就跳转进入标签,都不满足再统一提示。注意HOUR参数按小时包含边界,分钟用MIN单独收口,只写HOUR1220会被理解成12点到20点整段,不是12点20到20点50。
机器人定时任务分两种配置位置。第一种AutoRunRobot.txt加自动运行规则,第二种RobotManage.txt写具体执行段。Hero、老版常用:
AutoRunNPCRUNONDAY00:00:00@零点清理
AutoRunNPCRUNONDAY20:00:00@八点发奖
AutoRunNPCRUNONWEEK6:20:30@周六怪物攻城
RUNONDAY按每天指定时分秒执行,RUNONWEEK按星期执行,6一般代表周六,具体星期编号看引擎说明。RobotManage.txt里对应:
[@零点清理]
IF
ACT
CLEARCASTLEWAR
SENDMSG0零点已清理沙巴克数据
[@八点发奖]
IF
ACT
SENDMSG020点全员发奖
GIVE金币100000
GOM/GEE常用按周期简写,AutoRunRobot.txt可写:
AutoRunNPCHOUR1@每小时执行
AutoRunNPCMIN30@每半小时执行
AutoRunNPCSEC60@每60秒执行
AutoRunNPCRUNONDAY15:00:00@每天15点
AutoRunNPCRUNONWEEK6:20:30@周六20点30
其中HOUR后面跟小时数,MIN跟分钟数,SEC跟秒数;带具体日期用RUNONDAY时:分:秒,带星期用RUNONWEEK星期:时:分。改完保存,M2看启动日志是否提示机器人脚本加载成功,格式错一个空格都可能导致整文件不运行。
QFunction定时器走!Timer.txt加QFunction.txt。Envir目录下新建或编辑!Timer.txt:
12:001
14:002
18:003
格式为时:分编号,24小时制,09:00不能写成9:00。QFunction.txt末尾写:
[@OnTimer_1]
ACT
SENDMSG5中午活动开启
[@OnTimer_2]
ACT
SENDMSG5下午活动开启
[@OnTimer_3]
ACT
SENDMSG5晚间活动开启
编号必须和!Timer.txt一一对应,标签写[@OnTimer_1]不能写成[@OnTimer1]。文件编码用ANSI,UTF-8带BOM会导致解析失败。改完重启M2,查看Log目录Timerloaded记录,到点在全服看红字。
泡点、挂机每秒执行用SetScTimer或OnTimer。QManage或NPC开启定时器:
MAPMOVE泡点地图
SetOnTimer21
意思开启2号定时器,每1秒触发一次。QManage.txt写:
[@OnTimer2]
IF
ISONMAP泡点地图
ACT
CHANGEEXP+200000
ELSEACT
SetOffTimer2
SetOnTimer开、SetOffTimer关,OnTimer后面数字对应定时器编号。泡点扣货币、扣元宝、发内功经验都放这个标签里。玩家离开地图用地图退出脚本SetOffTimer,避免继续发奖励。GOM可用SetTimer/KillTimer思路,Hero可用SetScTimer/KillScTimer,命令名按引擎调整。
记录玩家登录时长和到期时间,用HUMAN变量或全局变量。登录脚本QManage.txt:
[@Login]
ACT
CALCS1UNIXTIME
SAVEVARHUMANU[登录时间戳]S1
后续判断会员是否到期:
IF
CALCS1UNIXTIME
LOADVARHUMANU[会员到期时间]S2
SMALLS2S1
ACT
SENDMSG5会员已过期
CHANGEPROFILE普通配置
UNIXTIME取当前Unix时间戳,存入变量后和到期时间戳比较,SMALL表示后者小于前者即过期。Hero的!RunTime.txt可做定时全量检测:
02:00:00#RUNSCRIPTCheckAllVip
QFunction或对应运行段写遍历在线角色、读U变量、过期清权限。不同引擎变量作用域不同,HUMAN按角色存,GLOBAL全服存,别把个人到期时间写全局变量。
活动时段开关双倍经验,用CheckTime或HOUR+MIN都行。CheckTime示例:
[@双倍判断]
IF
CheckTime19:0021:00
ACT
SetDoubleExp1
SENDMSG2双倍经验开启
ELSEACT
SetDoubleExp0
HOUR+MIN示例:
[@双倍判断]
IF
HOUR1920
MIN059
ACT
SetDoubleExp1
ELSEACT
SetDoubleExp0
HOUR1920覆盖19点和20点两个小时区,若只想要19:00-21:00,用HOUR1921再加MIN059更稳妥,或者直接CheckTime省边界问题。每周活动加星期判断,CheckWeek6表示周六,再配CheckTime20:0022:00只周六晚间生效。
固定地图停留计时自动回城,登录绑定定时器:
[@Login]
ACT
SetScTimer13600
表示1号定时器3600秒后触发。QManage或MapQuest触发:
[@OnTimer1]
IF
ISONMAP限制地图
ACT
MAPMOVE回城地图330330
SetScTimer13600
每次触发后再开下一个3600秒循环。GOM可用SetTimer,GEE可用SetMapTimer,Hero可用SetScTimer,参数都是编号加秒数。多地图分别计时就开不同编号定时器,别全部用1号,会互相覆盖。
批量定时传送用SetScTimer加OnTimer,或者MapQuest定时器。全服某地图玩家强制传送:
ACT
SetScTimer186400
[@OnTimer1]
IF
HOUR2020
ACT
MapMoveAll原地图目标地图XY
Mir/Hero可用MapMoveAll原地图号目标地图号XY,GOM可用@MapMoveAll或引擎批量传送命令,Hero可用MoveMapAll。定时每晚8点先把定时器每天刷一次,到8点判断HOUR再执行,避免只触发一次后不再跑。
时间命令不生效按下面顺序查:
1.看系统时间。服务器操作系统时间错了,HOUR/MIN、!Timer、AutoRun全部按错误时间跑。先date或控制面板对时,再重启M2让定时任务重新校准。
2.看脚本路径。NPC条件时间写在Market_Def对应NPC文件;机器人写Robot_def/AutoRunRobot.txt和RobotManage.txt;QFunction定时器写!Timer.txt加QFunction.txt;登录写MapQuest_def/QManage.txt。路径放错不加载。
3.看参数格式。HOUR后面两个数字,MIN后面两个数字,MONTH/DATE同理;!Timer用HH:MM编号;AutoRun用RUNONDAY时:分:秒或RUNONWEEK星期:时:分;GOM按HOUR/MIN/SEC简写时别和Hero的RUNONDAY混用。
4.看编号重复。OnTimer1、OnTimer2、SetOnTimer2、SetScTimer1都不能和别的脚本占用同号。泡点用2号、回城用1号、发奖用3号,统一记一个编号表。
5.看编码和空格。中文脚本用ANSI,!Timer、AutoRun、Robot文件别用UTF-8带BOM;#AutoRun行多余空格、标签少冒号、@标签名拼错都会导致整段不触发。
6.看条件顺序。限时进图先写允许时段再写拒绝提示;活动开关先写开启时段再写关闭;多时段用多个#IF,不要用单个HOUR1220替代12:20-12:50这种分钟级需求。
7.看变量作用域。个人登录时间、会员到期用HUMAN;全服开服天数、活动总开关用GLOBAL;机器人里改全局变量记得SAVEVAR落地,重启后才不丢。
新服常用组合:AutoRunRobot每天固定点发双倍、刷BOSS、清沙巴克;NPC用HOUR+MIN限制特殊副本;QFunction用!Timer做整点喊话;泡点用SetOnTimer/OnTimer按秒发经验;登录用UNIXTIME记录会员和禁言到期。测试时先把系统时间改到目标时段手动触发一次,再恢复自动运行,确认M2日志、游戏公告、地图传送、发奖扣费四处结果一致再对玩家开放。
IF
HOUR88
MIN2050
ACT
MAPMOVE3330330
上面表示8点20到8点50之间满足条件才执行,HOUR后面两个值写起始小时和结束小时,MIN后面两个值写起始分钟和结束分钟。要做多段时段,就写多个#IF分段或者用#ELSEACT兜底。
按月日范围限制用MONTH和DATE:
IF
MONTH45
DATE1520
ACT
MAPMOVED001
意思是4月15日到5月20日区间允许执行。单日固定时间可只写HOUR和MIN,不写MONTH和DATE就是每天生效。精确到秒用SECOND:
IF
MONTH44
DATE1515
HOUR44
MIN1515
SECOND1515
ACT
MAPMOVEM001
这种写法适合开服定点刷怪、定点发奖,避免每天重复手动操作。
Blue系时间变量可直接拼公告和日志,常用变量:YEAR年、MONTH月、DAY日、HOUR时、MINUTE分、SECOND秒、MILLISECONDS毫秒、LOGINTIME登录时间、LOGINLONG登录时长、SERVERRUNTIME服务器运行时间、$DATETIME服务器时间。NPC说话或写日志时直接引用:
ACT
SENDMSG0当前服务器时间:YEAR-MONTH-DAYHOUR:MINUTE:SECOND
做每日重置、开服天数、活动剩余时间提示都用这些变量,比硬编码日期好维护。
限时进地图最常用HOUR加MIN双重判断。比如某副本只在12点20到12点50、20点20到20点50开放,NPC传送脚本写:
[@进入副本]
IF
HOUR1212
MIN2050
ACT
MAPMOVE副本地图号XY
ELSEACT
SENDMSG5当前不在12:20-12:50开放时间
[@进入副本2]
IF
HOUR2020
MIN2050
ACT
MAPMOVE副本地图号XY
ELSEACT
SENDMSG5当前不在20:20-20:50开放时间
如果希望合并成一个标签,用两组#IF分别判断,满足任一时段就跳转进入标签,都不满足再统一提示。注意HOUR参数按小时包含边界,分钟用MIN单独收口,只写HOUR1220会被理解成12点到20点整段,不是12点20到20点50。
机器人定时任务分两种配置位置。第一种AutoRunRobot.txt加自动运行规则,第二种RobotManage.txt写具体执行段。Hero、老版常用:
AutoRunNPCRUNONDAY00:00:00@零点清理
AutoRunNPCRUNONDAY20:00:00@八点发奖
AutoRunNPCRUNONWEEK6:20:30@周六怪物攻城
RUNONDAY按每天指定时分秒执行,RUNONWEEK按星期执行,6一般代表周六,具体星期编号看引擎说明。RobotManage.txt里对应:
[@零点清理]
IF
ACT
CLEARCASTLEWAR
SENDMSG0零点已清理沙巴克数据
[@八点发奖]
IF
ACT
SENDMSG020点全员发奖
GIVE金币100000
GOM/GEE常用按周期简写,AutoRunRobot.txt可写:
AutoRunNPCHOUR1@每小时执行
AutoRunNPCMIN30@每半小时执行
AutoRunNPCSEC60@每60秒执行
AutoRunNPCRUNONDAY15:00:00@每天15点
AutoRunNPCRUNONWEEK6:20:30@周六20点30
其中HOUR后面跟小时数,MIN跟分钟数,SEC跟秒数;带具体日期用RUNONDAY时:分:秒,带星期用RUNONWEEK星期:时:分。改完保存,M2看启动日志是否提示机器人脚本加载成功,格式错一个空格都可能导致整文件不运行。
QFunction定时器走!Timer.txt加QFunction.txt。Envir目录下新建或编辑!Timer.txt:
12:001
14:002
18:003
格式为时:分编号,24小时制,09:00不能写成9:00。QFunction.txt末尾写:
[@OnTimer_1]
ACT
SENDMSG5中午活动开启
[@OnTimer_2]
ACT
SENDMSG5下午活动开启
[@OnTimer_3]
ACT
SENDMSG5晚间活动开启
编号必须和!Timer.txt一一对应,标签写[@OnTimer_1]不能写成[@OnTimer1]。文件编码用ANSI,UTF-8带BOM会导致解析失败。改完重启M2,查看Log目录Timerloaded记录,到点在全服看红字。
泡点、挂机每秒执行用SetScTimer或OnTimer。QManage或NPC开启定时器:
MAPMOVE泡点地图
SetOnTimer21
意思开启2号定时器,每1秒触发一次。QManage.txt写:
[@OnTimer2]
IF
ISONMAP泡点地图
ACT
CHANGEEXP+200000
ELSEACT
SetOffTimer2
SetOnTimer开、SetOffTimer关,OnTimer后面数字对应定时器编号。泡点扣货币、扣元宝、发内功经验都放这个标签里。玩家离开地图用地图退出脚本SetOffTimer,避免继续发奖励。GOM可用SetTimer/KillTimer思路,Hero可用SetScTimer/KillScTimer,命令名按引擎调整。
记录玩家登录时长和到期时间,用HUMAN变量或全局变量。登录脚本QManage.txt:
[@Login]
ACT
CALCS1UNIXTIME
SAVEVARHUMANU[登录时间戳]S1
后续判断会员是否到期:
IF
CALCS1UNIXTIME
LOADVARHUMANU[会员到期时间]S2
SMALLS2S1
ACT
SENDMSG5会员已过期
CHANGEPROFILE普通配置
UNIXTIME取当前Unix时间戳,存入变量后和到期时间戳比较,SMALL表示后者小于前者即过期。Hero的!RunTime.txt可做定时全量检测:
02:00:00#RUNSCRIPTCheckAllVip
QFunction或对应运行段写遍历在线角色、读U变量、过期清权限。不同引擎变量作用域不同,HUMAN按角色存,GLOBAL全服存,别把个人到期时间写全局变量。
活动时段开关双倍经验,用CheckTime或HOUR+MIN都行。CheckTime示例:
[@双倍判断]
IF
CheckTime19:0021:00
ACT
SetDoubleExp1
SENDMSG2双倍经验开启
ELSEACT
SetDoubleExp0
HOUR+MIN示例:
[@双倍判断]
IF
HOUR1920
MIN059
ACT
SetDoubleExp1
ELSEACT
SetDoubleExp0
HOUR1920覆盖19点和20点两个小时区,若只想要19:00-21:00,用HOUR1921再加MIN059更稳妥,或者直接CheckTime省边界问题。每周活动加星期判断,CheckWeek6表示周六,再配CheckTime20:0022:00只周六晚间生效。
固定地图停留计时自动回城,登录绑定定时器:
[@Login]
ACT
SetScTimer13600
表示1号定时器3600秒后触发。QManage或MapQuest触发:
[@OnTimer1]
IF
ISONMAP限制地图
ACT
MAPMOVE回城地图330330
SetScTimer13600
每次触发后再开下一个3600秒循环。GOM可用SetTimer,GEE可用SetMapTimer,Hero可用SetScTimer,参数都是编号加秒数。多地图分别计时就开不同编号定时器,别全部用1号,会互相覆盖。
批量定时传送用SetScTimer加OnTimer,或者MapQuest定时器。全服某地图玩家强制传送:
ACT
SetScTimer186400
[@OnTimer1]
IF
HOUR2020
ACT
MapMoveAll原地图目标地图XY
Mir/Hero可用MapMoveAll原地图号目标地图号XY,GOM可用@MapMoveAll或引擎批量传送命令,Hero可用MoveMapAll。定时每晚8点先把定时器每天刷一次,到8点判断HOUR再执行,避免只触发一次后不再跑。
时间命令不生效按下面顺序查:
1.看系统时间。服务器操作系统时间错了,HOUR/MIN、!Timer、AutoRun全部按错误时间跑。先date或控制面板对时,再重启M2让定时任务重新校准。
2.看脚本路径。NPC条件时间写在Market_Def对应NPC文件;机器人写Robot_def/AutoRunRobot.txt和RobotManage.txt;QFunction定时器写!Timer.txt加QFunction.txt;登录写MapQuest_def/QManage.txt。路径放错不加载。
3.看参数格式。HOUR后面两个数字,MIN后面两个数字,MONTH/DATE同理;!Timer用HH:MM编号;AutoRun用RUNONDAY时:分:秒或RUNONWEEK星期:时:分;GOM按HOUR/MIN/SEC简写时别和Hero的RUNONDAY混用。
4.看编号重复。OnTimer1、OnTimer2、SetOnTimer2、SetScTimer1都不能和别的脚本占用同号。泡点用2号、回城用1号、发奖用3号,统一记一个编号表。
5.看编码和空格。中文脚本用ANSI,!Timer、AutoRun、Robot文件别用UTF-8带BOM;#AutoRun行多余空格、标签少冒号、@标签名拼错都会导致整段不触发。
6.看条件顺序。限时进图先写允许时段再写拒绝提示;活动开关先写开启时段再写关闭;多时段用多个#IF,不要用单个HOUR1220替代12:20-12:50这种分钟级需求。
7.看变量作用域。个人登录时间、会员到期用HUMAN;全服开服天数、活动总开关用GLOBAL;机器人里改全局变量记得SAVEVAR落地,重启后才不丢。
新服常用组合:AutoRunRobot每天固定点发双倍、刷BOSS、清沙巴克;NPC用HOUR+MIN限制特殊副本;QFunction用!Timer做整点喊话;泡点用SetOnTimer/OnTimer按秒发经验;登录用UNIXTIME记录会员和禁言到期。测试时先把系统时间改到目标时段手动触发一次,再恢复自动运行,确认M2日志、游戏公告、地图传送、发奖扣费四处结果一致再对玩家开放。

