进入地图后自动加游戏点,最稳的做法有两种。第一种直接在MapInfo.txt里挂INCGAMEPOINT参数,适合固定间隔持续加游戏点;第二种用QManage.txt配合OnTimer定时器,适合做泡点、地图奖励、在线时长奖励等复杂玩法。
先看MapInfo.txt配置。打开MirServerMir200EnvirMapInfo.txt,找到目标地图,在地图参数里加上INCGAMEPOINT。格式是INCGAMEPOINT(间隔/数量),前面数字是间隔秒数,后面数字是每次增加的游戏点数量。例如:
[3盟重土城]INCGAMEPOINT(60/5)
这段配置表示玩家进入盟重土城后,每60秒自动增加5点游戏点。只要玩家停留在该地图,就会按这个间隔持续增加;离开地图后自动停止。
如果需要进入地图只加一次,不建议用INCGAMEPOINT,因为它会按间隔循环触发。一次性奖励更适合用CHECKQUEST配合脚本判断变量,或者用OnTimer在玩家进入地图后触发一次。
第二种方法用QManage.txt定时器。打开MirServerMir200EnvirMapQuest_defQManage.txt,先写一个进入地图时触发的标签,例如:
[@进入泡点地图]
IF
ISONMAP3
EQUALS泡点状态0
ACT
MOVS泡点状态1
SetOnTimer31
SENDMSG6已进入泡点地图,每秒获得1点游戏点。
BREAK
这里ISONMAP3用于检测玩家是否在地图编号3的地图内,S泡点状态用来防止重复开启定时器。SetOnTimer31表示开启第3号定时器,每1秒触发一次。
然后在同一个文件里写定时器段落:
[@OnTimer3]
IF
ISONMAP3
ACT
GAMEPOINT+1
BREAK
ELSEACT
SETOFFTIMER3
MOVS泡点状态0
BREAK
这段脚本每1秒检测玩家是否仍在地图3内。如果在,就增加1点游戏点;如果已经离开,就关闭定时器并重置状态,避免离线或离开后继续加游戏点。
如果版本不是996引擎,GAMEPOINT命令可能不可用。传统M2引擎里游戏点通常用自定义变量记录,例如:
VARIntegerHUMAN游戏点
增加时写成:
INC游戏点1
保存时写成:
SAVEVARHUMAN游戏点
显示时可以用:
SENDMSG6当前游戏点:<STR(游戏点)>
这样就能兼容不支持GAMEPOINT的版本。
如果希望玩家进入地图就立刻给一次奖励,可以在QManage.txt的@Login脚本或地图触发脚本里加判断:
[@CheckMapReward]
IF
ISONMAP3
EQUALG地图奖励_30
ACT
INC游戏点10
MOVG地图奖励_31
SENDMSG6进入地图奖励10点游戏点。
BREAK
这里用G地图奖励_3记录是否已经领取过,防止玩家反复进出地图刷奖励。
排查时先看MapInfo.txt里地图编号是否正确。很多版本地图编号不是纯数字,可能写成3|0159、d601、xintucheng等形式。INCGAMEPOINT必须写在正确的地图行里,写错地图编号不会生效。修改MapInfo.txt后通常需要重启M2Server。
如果用了OnTimer定时器,要确认定时器编号没有重复。服务端一般支持多个定时器,但同一编号只能用于一个功能。重复使用会导致泡点、任务计时、地图奖励互相冲突。定时器开启后必须有对应关闭条件,否则玩家离开地图后仍可能继续触发。
实际配置可以按这个顺序走:先确认引擎是否支持GAMEPOINT命令;再决定使用MapInfo的INCGAMEPOINT还是QManage定时器;接着确认地图编号;然后设置间隔和数量;最后测试玩家进入、停留、离开时游戏点是否正常增减。固定间隔持续奖励优先用INCGAMEPOINT,复杂奖励、一次性奖励或需要判断条件时优先用QManage定时器脚本。
先看MapInfo.txt配置。打开MirServerMir200EnvirMapInfo.txt,找到目标地图,在地图参数里加上INCGAMEPOINT。格式是INCGAMEPOINT(间隔/数量),前面数字是间隔秒数,后面数字是每次增加的游戏点数量。例如:
[3盟重土城]INCGAMEPOINT(60/5)
这段配置表示玩家进入盟重土城后,每60秒自动增加5点游戏点。只要玩家停留在该地图,就会按这个间隔持续增加;离开地图后自动停止。
如果需要进入地图只加一次,不建议用INCGAMEPOINT,因为它会按间隔循环触发。一次性奖励更适合用CHECKQUEST配合脚本判断变量,或者用OnTimer在玩家进入地图后触发一次。
第二种方法用QManage.txt定时器。打开MirServerMir200EnvirMapQuest_defQManage.txt,先写一个进入地图时触发的标签,例如:
[@进入泡点地图]
IF
ISONMAP3
EQUALS泡点状态0
ACT
MOVS泡点状态1
SetOnTimer31
SENDMSG6已进入泡点地图,每秒获得1点游戏点。
BREAK
这里ISONMAP3用于检测玩家是否在地图编号3的地图内,S泡点状态用来防止重复开启定时器。SetOnTimer31表示开启第3号定时器,每1秒触发一次。
然后在同一个文件里写定时器段落:
[@OnTimer3]
IF
ISONMAP3
ACT
GAMEPOINT+1
BREAK
ELSEACT
SETOFFTIMER3
MOVS泡点状态0
BREAK
这段脚本每1秒检测玩家是否仍在地图3内。如果在,就增加1点游戏点;如果已经离开,就关闭定时器并重置状态,避免离线或离开后继续加游戏点。
如果版本不是996引擎,GAMEPOINT命令可能不可用。传统M2引擎里游戏点通常用自定义变量记录,例如:
VARIntegerHUMAN游戏点
增加时写成:
INC游戏点1
保存时写成:
SAVEVARHUMAN游戏点
显示时可以用:
SENDMSG6当前游戏点:<STR(游戏点)>
这样就能兼容不支持GAMEPOINT的版本。
如果希望玩家进入地图就立刻给一次奖励,可以在QManage.txt的@Login脚本或地图触发脚本里加判断:
[@CheckMapReward]
IF
ISONMAP3
EQUALG地图奖励_30
ACT
INC游戏点10
MOVG地图奖励_31
SENDMSG6进入地图奖励10点游戏点。
BREAK
这里用G地图奖励_3记录是否已经领取过,防止玩家反复进出地图刷奖励。
排查时先看MapInfo.txt里地图编号是否正确。很多版本地图编号不是纯数字,可能写成3|0159、d601、xintucheng等形式。INCGAMEPOINT必须写在正确的地图行里,写错地图编号不会生效。修改MapInfo.txt后通常需要重启M2Server。
如果用了OnTimer定时器,要确认定时器编号没有重复。服务端一般支持多个定时器,但同一编号只能用于一个功能。重复使用会导致泡点、任务计时、地图奖励互相冲突。定时器开启后必须有对应关闭条件,否则玩家离开地图后仍可能继续触发。
实际配置可以按这个顺序走:先确认引擎是否支持GAMEPOINT命令;再决定使用MapInfo的INCGAMEPOINT还是QManage定时器;接着确认地图编号;然后设置间隔和数量;最后测试玩家进入、停留、离开时游戏点是否正常增减。固定间隔持续奖励优先用INCGAMEPOINT,复杂奖励、一次性奖励或需要判断条件时优先用QManage定时器脚本。

