登录奖励脚本通过检测玩家上线事件触发,向符合条件的角色发放指定物品、货币或经验值。其核心是修改游戏服务端的登录脚本文件,并配合变量控制领取次数。
核心脚本触发器与文件位置
登录奖励脚本的入口固定在QManage.txt文件中。该文件位于服务端目录Mir200\Envir\MapQuest_def\QManage.txt。当玩家登录游戏时,引擎会自动执行此文件中[@Login]标签下的所有脚本命令。因此,所有登录时需要判断和执行的操作都应写在这个标签下或通过它调用。
基础登录奖励发放脚本
以下是一个最简单的登录奖励脚本示例,为所有首次登录的玩家发放启动资金。
[@Login]
IF
CHECKNEWHUMAN
; 检测是否为新建角色
ACT
GAMEGOLD + 8888
; 给予8888游戏金币
SENDMSG 6 欢迎新人!你获得了8888金币启动资金。
; 发送私人提示消息
BREAK
此脚本使用了CHECKNEWHUMAN命令,该命令仅在角色第一次登录时返回真值,确保奖励只发放一次。
基于天数累积的在线奖励脚本
要实现累积登录天数奖励,需要使用HUMAN类型变量记录玩家累计登录天数,并在每次登录时进行判断和累加。
[@Login]
IF
; 检测是否为新角色
ACT
GOTO @每日登录奖励
BREAK
[@每日登录奖励]
; 首先,读取记录登录天数的变量
ACT
LOADVAR HUMAN 登录天数 ..\QuestDiary\数据文件\登录记录.txt
; 判断是否为当天首次登录(通过对比日期变量D0)
IF
LARGE D0 <STR(N登录记录日)>
; 如果系统日期大于记录的最后登录日期,说明是新的一天
ACT
; 登录天数加1
CALCVAR HUMAN 登录天数 + 1
; 更新最后登录记录日为今天
MOV N登录记录日 <STR(D0)>
; 保存变量
SAVEVAR HUMAN 登录天数 ..\QuestDiary\数据文件\登录记录.txt
SAVEVAR HUMAN 登录记录日 ..\QuestDiary\数据文件\登录记录.txt
; 根据天数发放奖励
GOTO @奖励发放判断
ELSEACT
; 如果不是新的一天,则直接结束
BREAK
[@奖励发放判断]
IF
EQUAL <$HUMAN(登录天数)> 1
ACT
GIVE 金条 1
SENDMSG 6 登录奖励:恭喜你获得【金条】一根!
BREAK
IF
EQUAL <$HUMAN(登录天数)> 3
ACT
GAMEGOLD + 5000
SENDMSG 6 登录奖励:累计登录3天,获得5000金币!
BREAK
IF
EQUAL <$HUMAN(登录天数)> 7
ACT
GIVE 荣誉勋章 1
SENDMSG 6 登录奖励:累计登录7天,获得【荣誉勋章】!
BREAK
关键点:D0是系统变量,代表服务器当天的日期数字(如20250217)。N$登录记录日是自定义的个人数字变量,用于记录玩家上次领取奖励的日期。通过对比这两个值,可以精确判断是否为跨天后的首次登录。
防止重复领取与奖励重置机制
为防止玩家通过反复小退上线刷取每日奖励,必须引入“当日已领取”标记。
[@每日登录奖励]
ACT
LOADVAR HUMAN 登录天数 ..\QuestDiary\数据文件\登录记录.txt
LOADVAR HUMAN 最后领取日 ..\QuestDiary\数据文件\登录记录.txt
IF
EQUAL <HUMAN(最后领取日)> <STR(D0)>
; 如果最后领取日期等于今天,说明已领过
ACT
SENDMSG 6 今日登录奖励已领取。
BREAK
IF
; 如果是新的一天
LARGE D0 <STR(N最后领取日)>
ACT
CALCVAR HUMAN 登录天数 + 1
MOV N最后领取日 <STR(D0)>
SAVEVAR HUMAN 登录天数 ..\QuestDiary\数据文件\登录记录.txt
SAVEVAR HUMAN 最后领取日 ..\QuestDiary\数据文件\登录记录.txt
GOTO @奖励发放判断
对于累积登录奖励,当奖励全部领取完毕后(例如连续登录30天),可以添加重置逻辑。在[@奖励发放判断]的最后一段加入:
IF
EQUAL <$HUMAN(登录天数)> 30
ACT
; 发放第30天大奖
GIVE 顶级武器 1
; 重置登录天数,开启新一轮循环(可选)
MOV HUMAN 登录天数 0
SENDMSG 6 恭喜完成30天登录挑战!天数已重置。
BREAK
制作可查询与手动领取的NPC脚本
除了自动发放,也可以制作NPC让玩家手动领取,这能提供更好的交互体验。NPC脚本需存放在Market_Def目录下。
[@main]
欢迎来到登录奖励领取处。\
<领取今日登录奖励/@领取每日>\
<查看我的累积登录天数/@查看天数>\
[@领取每日]
IF
EQUAL <HUMAN(最后领取日)> <STR(D0)>
ACT
MESSAGEBOX 你今天已经领取过奖励了。
BREAK
IF
LARGE D0 <STR(N最后领取日)>
ACT
; 这里调用与自动登录类似的奖励计算和发放流程
CALCVAR HUMAN 登录天数 + 1
MOV N最后领取日 <STR(D0)>
SAVEVAR HUMAN 登录天数 ..\QuestDiary\数据文件\登录记录.txt
SAVEVAR HUMAN 最后领取日 ..\QuestDiary\数据文件\登录记录.txt
GIVE 随机奖励礼盒 1
MESSAGEBOX 领取成功!获得【随机奖励礼盒】x1。
BREAK
[@查看天数]
ACT
MESSAGEBOX 你当前的累积登录天数为:<$HUMAN(登录天数)>天。
脚本测试与调试要点
1. 变量保存:所有HUMAN变量在修改后必须使用SAVEVAR命令保存到文本文件,否则角色下线后数据会丢失。
2. 路径确认:..\QuestDiary\数据文件\路径必须真实存在,否则保存会失败。
3. 日期对比:确保系统变量D0在服务器上正常工作,它通常代表一个自服务器启动以来的递增数字或真实日期数字。
4. 测试流程:修改脚本后,重启服务端或重新加载NPC脚本。创建新角色测试首次奖励,通过修改系统时间或使用GM命令调整变量来测试每日奖励和累积奖励。

