3K每日经验用两种防重复最稳。名单法适合玄,按角色名写文本,当天已领直接拒;日期变量法适合多奖励扩展,用HUMAN自定义变量存“最近领取日期”,登录或点NPC比对系统日期,不同就发经验并写回当天日期。经验命令3K常用Changeexp,部分小版本用ChangeExp或GiveExp,按M2命令列表替换即可。
一、名单法NPC最简单
Mir200\Envir下建QuestDiary\数据文件\经验奖励.txt,空文件即可。Market_Def建经验使者.txt,内容:
[@main]
经验使者每日发奖\\
领取今日固定经验/@lingqu\\
[@lingqu]
IF
checknamelist..\QuestDiary\数据文件\经验奖励.txt
ACT
SAY
今天你已经领过了,不能再领了,明天再来吧。\
ELSEACT
addnamelist..\QuestDiary\数据文件\经验奖励.txt
Changeexp+1000000
SENDMSG0你在经验使者处领取到今天的100万经验奖励。
checknamelist检测当前角色名是否在名单文本;在就拒领并提示。addnamelist首次领取写名;Changeexp发100万,按等级和版本改数值。SENDMSG0为全服广播样式,只想本人提示用SENDMSG6或按3K颜色号改。
名单法缺点跨天不会自动清。每天0点用Robot执行清名单,或在NPC领之前先按日期重建。简单清名单Robot段:
Robot.txt配0点执行,Robot_def写:
[@ClearExpName]
IF
ACT
DelNameList..\QuestDiary\数据文件\经验奖励.txt
SENDMSG5每日经验名单已清空,可重新领取。
若3K小版本无DelNameList,用ClearList或写批处理空文件替代;测试时别把其他功能名单放同路径。
二、日期变量法个人存盘
适合同时发经验、元宝、道具,且按角色长期记录。QuestDiary\数据文件\每日经验日期.txt建空文本。QManage或QM登录加载,NPC领取判断。
声明与加载放登录段,QManage.txt:
[@Login]
IF
ACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
LOADVAR路径按实际QuestDiary子目录改。新号文本无记录,变量为空,后面判断空也允许领。
NPC主段,Market_Def\经验使者.txt:
[@main]
每日经验发放\\
领取今日经验/@getexp\\
查询领取状态/@checkexp\\
[@getexp]
IF
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今天已经领取过每日经验,明天再来。
ELSEACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6领取成功,发放今日固定100万经验,日期已记录为<S0>。
<$DATE>按3K系统日期宏替换,若本服用GetDate/YearMonthDay等其他宏,改对应日期变量。CHECKVAR等于当天日期就拒领;否则发经验、把当前日期写回HUMAN变量并SAVEVAR存盘。重载NPC和QM后新号登录自动建记录,小退不丢、合区按文本合并需手工处理,库内变量另配。
查询段:
[@checkexp]
IF
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今日每日经验已领取。
ELSEACT
SENDMSG6今日每日经验尚未领取,可点领取。
三、登录自动发不点NPC
把发放写进QManage[@Login],玩家上线自动给,已领过不重复。示例:
[@Login]
IF
ACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
IF
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今日每日经验已自动发放,无需重复领取。
ELSEACT
CHECKVARHUMAN每日经验日期<0
ACT
VARStringHUMAN每日经验日期
CALCVARHUMAN每日经验日期=19700101
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6初始化每日经验日期完成。
ELSEACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6上线自动领取今日固定100万经验,明日可再领。
上面用小于0初始化只适配数字日期;若用字符串存“2026-10-10”这类格式,去掉小于0分支,直接判断等于<$DATE>与否。3K若登录段不支持VAR/LOADVAR,改在QM独立功能段或NPC手动领,别硬写登录自动。
四、按等级发不同经验
新手少发、满级多发,NPC段加CheckLevelEx:
[@getexp]
IF
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今天已经领取过每日经验。
ELSEACT
IF
CHECKLEVELEX<50
ACT
Changeexp+300000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG650级以下领取30万每日经验,日期已记录<S0>。
IF
CHECKLEVELEX>49
CHECKLEVELEX<100
ACT
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG650到99级领取100万每日经验,日期已记录<S0>。
IF
CHECKLEVELEX>99
ACT
Changeexp+3000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6100级以上领取300万每日经验,日期已记录<S0>。
CHECKLEVELEX命令名按3K版本核对,老版本可能用CheckLevel或LEVEL高低判断。多条件分段写,避免一个#IF同时套三个等级区间导致只走第一段。
五、带元宝道具一并发
每日经验常配元宝、太阳水、经验卷。变量防重复只判日期,发奖一次给多个:
[@getexpall]
IF
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今天已经领取过每日综合奖励。
ELSEACT
Changeexp+1000000
GAMEGOLD+100
GIVE强效太阳水5
GIVE每日经验卷1
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6领取每日经验100万、元宝100、太阳水5、经验卷1,日期<S0>。
GAMEGOLD按3K元宝命令替换,若元宝是GameGold用GAMEGOLD-反向扣、+正向发要看变量类型;绑金、绑元分别用所属命令。每日经验卷若再DoubleExp,避免和经验命令叠加刷级。
六、Robot零点强制重置变量法
日期变量法本身跨天自动可领,不必清盘。若用“每日已领标记=1/0”而不是日期,需要Robot零点置0。示例Robot_def:
[@ZeroResetExp]
IF
ACT
VARIntegerHUMAN每日经验标记
CALCVARHUMAN每日经验标记=0
SAVEVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
SENDMSG5每日经验标记已重置,可领取今日经验。
NPC判断:
[@getexpflag]
IF
VARIntegerHUMAN每日经验标记
LOADVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
CHECKVARHUMAN每日经验标记>0
ACT
SENDMSG6今日每日经验已领取,零点后重置。
ELSEACT
VARIntegerHUMAN每日经验标记
LOADVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
Changeexp+1000000
CALCVARHUMAN每日经验标记=1
SAVEVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
SENDMSG6领取今日100万经验,标记已置1。
日期变量法优先,不用Robot清标记;标记法在合服、断线、Robot不触发时更容易出现“没重置”投诉。
七、名单法按日期自动滚动
不想用变量,用名单但每天换文件名或每天重写带日期。NPC:
[@lingqu2]
IF
checknamelist..\QuestDiary\数据文件\exp_<$DATE>.txt
ACT
SAY
今天已领取每日经验。\
ELSEACT
addnamelist..\QuestDiary\数据文件\exp_<$DATE>.txt
Changeexp+1000000
SENDMSG0领取今日100万经验,记录写入exp_<$DATE>名单。
<$DATE>生成本日文件,如exp_2026-10-10.txt,M2不支持在名单路径嵌入日期宏就改Robot每天建空文件,NPC只check固定当日路径。此方法名单会按天堆积,定期手动清旧文件。
八、QF点击活动按钮自动领
若客户端有活动按钮或功能面版调用QF,QFunction-0写:
[@DailyExpBtn]
IF
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今日每日经验已通过按钮领取。
ELSEACT
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6点击活动按钮领取今日100万经验,日期<S0>。
按钮事件名按3K自定义UI、HGE任务闪、Hero功能按钮不同对接;纯3K无按钮就用NPC和登录两段。
九、文件权限与重载
QuestDiary\数据文件目录手动建,经验奖励.txt、每日经验日期.txt、每日经验标记.txt先建空文件,ANSI编码。Market_Def和QManage改完在M2重新加载NPC脚本、重新加载QM、重新加载Robot;变量法改QuestDiary后重载脚本管理。登录段改动用小号重登验证,不重启整个服也能重载就别重启。
十、常见不生效
点NPC没反应:Market_Def文件名和Merchant/Npc注册路径不一致,或@main没#SAY菜单;先写最简#SAY测试再加热点。
经验不发:Changeexp命令名不对,3K部分用ChangeExp,部分用GiveExp,部分用GIVEEXP角色数值;M2命令列表搜“经验”确认。数值带加号有些版本要写+1000000,有些写1000000,按样例改。
当天重复领:名单路径写错,checknamelist永远读不到;变量法LOADVAR路径错,CHECKVAR比较空字符串永远不等。统一用绝对相对路径..\QuestDiary\数据文件\xxx.txt,领前LOADVAR、领后SAVEVAR。
跨天仍拒领:用标记法但Robot没跑、零点命令没重载;改日期变量法,比对<$DATE>最省事。
合区数据丢:文本变量不自动合,需手工按角色名合并每日经验日期.txt;用库内HUMAN变量按引擎合区规则迁移更稳。
SENDMSG不提示:颜色号错或脚本在#ELSEACT里写#SAY后没SENDMSG;NPC拒领用#ACTSENDMSG,菜单用#SAY,发奖用#ELSEACTSENDMSG,分层别混。
登录自动发重复:QManage登录段和NPC都发,且都没先加载变量。登录段最前面LOADVAR,再CHECKVAR比日期,再发再SAVEVAR;NPC同理,不共享内存就每次都LOADVAR。
按名单法做最简、按日期变量法做可扩展、按登录段做自动发,3K每日固定经验就能覆盖手动领、上线领、按钮领、防重复、带元宝道具全套。经验数值、等级区间、SENDMSG颜色按实际版本调,路径和命令名以本机M2命令列表为准再上线。
一、名单法NPC最简单
Mir200\Envir下建QuestDiary\数据文件\经验奖励.txt,空文件即可。Market_Def建经验使者.txt,内容:
[@main]
经验使者每日发奖\\
领取今日固定经验/@lingqu\\
[@lingqu]
IF
checknamelist..\QuestDiary\数据文件\经验奖励.txt
ACT
SAY
今天你已经领过了,不能再领了,明天再来吧。\
ELSEACT
addnamelist..\QuestDiary\数据文件\经验奖励.txt
Changeexp+1000000
SENDMSG0你在经验使者处领取到今天的100万经验奖励。
checknamelist检测当前角色名是否在名单文本;在就拒领并提示。addnamelist首次领取写名;Changeexp发100万,按等级和版本改数值。SENDMSG0为全服广播样式,只想本人提示用SENDMSG6或按3K颜色号改。
名单法缺点跨天不会自动清。每天0点用Robot执行清名单,或在NPC领之前先按日期重建。简单清名单Robot段:
Robot.txt配0点执行,Robot_def写:
[@ClearExpName]
IF
ACT
DelNameList..\QuestDiary\数据文件\经验奖励.txt
SENDMSG5每日经验名单已清空,可重新领取。
若3K小版本无DelNameList,用ClearList或写批处理空文件替代;测试时别把其他功能名单放同路径。
二、日期变量法个人存盘
适合同时发经验、元宝、道具,且按角色长期记录。QuestDiary\数据文件\每日经验日期.txt建空文本。QManage或QM登录加载,NPC领取判断。
声明与加载放登录段,QManage.txt:
[@Login]
IF
ACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
LOADVAR路径按实际QuestDiary子目录改。新号文本无记录,变量为空,后面判断空也允许领。
NPC主段,Market_Def\经验使者.txt:
[@main]
每日经验发放\\
领取今日经验/@getexp\\
查询领取状态/@checkexp\\
[@getexp]
IF
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今天已经领取过每日经验,明天再来。
ELSEACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6领取成功,发放今日固定100万经验,日期已记录为<S0>。
<$DATE>按3K系统日期宏替换,若本服用GetDate/YearMonthDay等其他宏,改对应日期变量。CHECKVAR等于当天日期就拒领;否则发经验、把当前日期写回HUMAN变量并SAVEVAR存盘。重载NPC和QM后新号登录自动建记录,小退不丢、合区按文本合并需手工处理,库内变量另配。
查询段:
[@checkexp]
IF
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今日每日经验已领取。
ELSEACT
SENDMSG6今日每日经验尚未领取,可点领取。
三、登录自动发不点NPC
把发放写进QManage[@Login],玩家上线自动给,已领过不重复。示例:
[@Login]
IF
ACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
IF
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今日每日经验已自动发放,无需重复领取。
ELSEACT
CHECKVARHUMAN每日经验日期<0
ACT
VARStringHUMAN每日经验日期
CALCVARHUMAN每日经验日期=19700101
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6初始化每日经验日期完成。
ELSEACT
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6上线自动领取今日固定100万经验,明日可再领。
上面用小于0初始化只适配数字日期;若用字符串存“2026-10-10”这类格式,去掉小于0分支,直接判断等于<$DATE>与否。3K若登录段不支持VAR/LOADVAR,改在QM独立功能段或NPC手动领,别硬写登录自动。
四、按等级发不同经验
新手少发、满级多发,NPC段加CheckLevelEx:
[@getexp]
IF
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今天已经领取过每日经验。
ELSEACT
IF
CHECKLEVELEX<50
ACT
Changeexp+300000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG650级以下领取30万每日经验,日期已记录<S0>。
IF
CHECKLEVELEX>49
CHECKLEVELEX<100
ACT
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG650到99级领取100万每日经验,日期已记录<S0>。
IF
CHECKLEVELEX>99
ACT
Changeexp+3000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6100级以上领取300万每日经验,日期已记录<S0>。
CHECKLEVELEX命令名按3K版本核对,老版本可能用CheckLevel或LEVEL高低判断。多条件分段写,避免一个#IF同时套三个等级区间导致只走第一段。
五、带元宝道具一并发
每日经验常配元宝、太阳水、经验卷。变量防重复只判日期,发奖一次给多个:
[@getexpall]
IF
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今天已经领取过每日综合奖励。
ELSEACT
Changeexp+1000000
GAMEGOLD+100
GIVE强效太阳水5
GIVE每日经验卷1
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6领取每日经验100万、元宝100、太阳水5、经验卷1,日期<S0>。
GAMEGOLD按3K元宝命令替换,若元宝是GameGold用GAMEGOLD-反向扣、+正向发要看变量类型;绑金、绑元分别用所属命令。每日经验卷若再DoubleExp,避免和经验命令叠加刷级。
六、Robot零点强制重置变量法
日期变量法本身跨天自动可领,不必清盘。若用“每日已领标记=1/0”而不是日期,需要Robot零点置0。示例Robot_def:
[@ZeroResetExp]
IF
ACT
VARIntegerHUMAN每日经验标记
CALCVARHUMAN每日经验标记=0
SAVEVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
SENDMSG5每日经验标记已重置,可领取今日经验。
NPC判断:
[@getexpflag]
IF
VARIntegerHUMAN每日经验标记
LOADVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
CHECKVARHUMAN每日经验标记>0
ACT
SENDMSG6今日每日经验已领取,零点后重置。
ELSEACT
VARIntegerHUMAN每日经验标记
LOADVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
Changeexp+1000000
CALCVARHUMAN每日经验标记=1
SAVEVARHUMAN每日经验标记..\QuestDiary\数据文件\每日经验标记.txt
SENDMSG6领取今日100万经验,标记已置1。
日期变量法优先,不用Robot清标记;标记法在合服、断线、Robot不触发时更容易出现“没重置”投诉。
七、名单法按日期自动滚动
不想用变量,用名单但每天换文件名或每天重写带日期。NPC:
[@lingqu2]
IF
checknamelist..\QuestDiary\数据文件\exp_<$DATE>.txt
ACT
SAY
今天已领取每日经验。\
ELSEACT
addnamelist..\QuestDiary\数据文件\exp_<$DATE>.txt
Changeexp+1000000
SENDMSG0领取今日100万经验,记录写入exp_<$DATE>名单。
<$DATE>生成本日文件,如exp_2026-10-10.txt,M2不支持在名单路径嵌入日期宏就改Robot每天建空文件,NPC只check固定当日路径。此方法名单会按天堆积,定期手动清旧文件。
八、QF点击活动按钮自动领
若客户端有活动按钮或功能面版调用QF,QFunction-0写:
[@DailyExpBtn]
IF
VARStringHUMAN每日经验日期
LOADVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
CHECKVARHUMAN每日经验日期=<$DATE>
ACT
SENDMSG6今日每日经验已通过按钮领取。
ELSEACT
Changeexp+1000000
MOVS0<$DATE>
CALCVARHUMAN每日经验日期=S0
SAVEVARHUMAN每日经验日期..\QuestDiary\数据文件\每日经验日期.txt
SENDMSG6点击活动按钮领取今日100万经验,日期<S0>。
按钮事件名按3K自定义UI、HGE任务闪、Hero功能按钮不同对接;纯3K无按钮就用NPC和登录两段。
九、文件权限与重载
QuestDiary\数据文件目录手动建,经验奖励.txt、每日经验日期.txt、每日经验标记.txt先建空文件,ANSI编码。Market_Def和QManage改完在M2重新加载NPC脚本、重新加载QM、重新加载Robot;变量法改QuestDiary后重载脚本管理。登录段改动用小号重登验证,不重启整个服也能重载就别重启。
十、常见不生效
点NPC没反应:Market_Def文件名和Merchant/Npc注册路径不一致,或@main没#SAY菜单;先写最简#SAY测试再加热点。
经验不发:Changeexp命令名不对,3K部分用ChangeExp,部分用GiveExp,部分用GIVEEXP角色数值;M2命令列表搜“经验”确认。数值带加号有些版本要写+1000000,有些写1000000,按样例改。
当天重复领:名单路径写错,checknamelist永远读不到;变量法LOADVAR路径错,CHECKVAR比较空字符串永远不等。统一用绝对相对路径..\QuestDiary\数据文件\xxx.txt,领前LOADVAR、领后SAVEVAR。
跨天仍拒领:用标记法但Robot没跑、零点命令没重载;改日期变量法,比对<$DATE>最省事。
合区数据丢:文本变量不自动合,需手工按角色名合并每日经验日期.txt;用库内HUMAN变量按引擎合区规则迁移更稳。
SENDMSG不提示:颜色号错或脚本在#ELSEACT里写#SAY后没SENDMSG;NPC拒领用#ACTSENDMSG,菜单用#SAY,发奖用#ELSEACTSENDMSG,分层别混。
登录自动发重复:QManage登录段和NPC都发,且都没先加载变量。登录段最前面LOADVAR,再CHECKVAR比日期,再发再SAVEVAR;NPC同理,不共享内存就每次都LOADVAR。
按名单法做最简、按日期变量法做可扩展、按登录段做自动发,3K每日固定经验就能覆盖手动领、上线领、按钮领、防重复、带元宝道具全套。经验数值、等级区间、SENDMSG颜色按实际版本调,路径和命令名以本机M2命令列表为准再上线。

