当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇游戏登录奖励脚本制作与防重复领取详解

热度:
制作传奇的登录奖励脚本,核心在于利用服务端的登录触发机制(通常是QM登录脚本),结合全局变量(G变量)和个人变量(U变量)来统计玩家登录顺序,并精准发放对应名次的奖励。以下是基于Hero、GOM等主流引擎的完整制作流程。

一、基础逻辑:统计登录人数与发放奖励
首先,需要在服务端的Mir200EnvirMapQuest_def目录下找到或新建QManage.txt文件。该文件中的[@Login]标签会在角色每次登录游戏时自动触发。

利用全局变量G来记录当前服务器创建角色的总登录次数。每有一个新角色登录,就让G变量加一。随后通过判断G变量的数值,给特定名次的玩家发放奖励。例如,给第1、第2、第3名登录的玩家发放特定武器:

[@Login]
IF
ACT
INCG991
IF
EQUALG991
ACT
GIVE开天1
SENDMSG0恭喜您成为本服第1名登录玩家,获得开天一把!
IF
EQUALG992
ACT
GIVE震天1
SENDMSG0恭喜您成为本服第2名登录玩家,获得震天一把!
IF
EQUALG993
ACT
GIVE玄天1
SENDMSG0恭喜您成为本服第3名登录玩家,获得玄天一把!

在上述代码中,INCG991表示每次登录将G99这个全局变量加1。后续通过EQUALG99X来判断当前玩家是第几个登录的,并给予对应的装备。

二、进阶防重复:使用个人变量标识
上述基础写法存在一个严重漏洞:如果玩家小退后重新登录,脚本会再次触发,导致玩家重复领取奖励。为了解决这个问题,必须引入个人变量(U变量)作为“已领取”的标识。

个人变量绑定在玩家角色身上,重启游戏也不会丢失。我们可以在发放奖励前,先检测该玩家的个人变量(例如U1)是否为0。只有当U1等于0(代表未领取)时,才执行发奖逻辑,并在发奖后立刻将U1赋值为1。

优化后的防重复脚本如下:
[@Login]
IF
EQUALU10
ACT
INCG991
IF
EQUALG991
EQUALU10
ACT
GIVE开天1
SENDMSG0恭喜您成为本服第1名登录玩家,获得开天一把!
MOVU11
IF
EQUALG992
EQUALU10
ACT
GIVE震天1
SENDMSG0恭喜您成为本服第2名登录玩家,获得震天一把!
MOVU11

通过MOVU11打上标识,即使玩家退出重进,因为U1已经等于1,EQUALU10的条件不再成立,脚本就不会再次执行发奖动作。

三、批量管理:通过文本读取指定名次奖励
如果幸运登录的名次较多(如第10、50、100名),在脚本里写大量EQUAL判断会显得非常臃肿。此时可以通过读取外部文本的方式来简化脚本。

首先在Mir200EnvirMarket_Def目录下新建一个文本文件,例如幸运玩家.txt,内容按行写入需要奖励的名次:
1
2
3
10
50

接着在QManage.txt中使用检测字符串和获取行号的命令来动态匹配奖励:
[@Login]
IF
EQUALU10
ACT
INCG991
IF
CHECKSTRINGLIST..Market_Def幸运玩家.txt
EQUALU10
ACT
GETLINESTR..Market_Def幸运玩家.txtN0
GIVE1
SENDMSG0恭喜您成为本服第名幸运玩家,获得专属奖励!
MOVU11

CHECKSTRINGLIST用于检测当前登录名次(G99)是否存在于文本中;GETLINESTR则可以将文本中对应行的内容(即名次数字)提取到变量N0中,从而实现动态发奖。

四、调试与变量清理
脚本编写完成后,在M2Server控制台中输入!ReloadQManage重载脚本即可生效。在测试过程中,如果需要重置登录名次(例如想重新测试第1名玩家的奖励),不要直接删除全局变量文件。可以在M2Server的菜单栏点击“管理”->“全局变量管理”,找到对应的G变量(如G99),将其数值手动修改为0并保存。这样既能清空排名,又不会影响其他正在运行的游戏功能。
[顶部]