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

