瞬间满血NPC的核心逻辑是用HUMANHP和HUMANMP两条命令把人物的血蓝数值直接拉满,配合会员名单检测实现普通玩家扣元宝、会员玩家免费的效果。Legendm2引擎中英雄的血蓝需要用H.HUMANHP和H.HUMANMP单独处理,很多人写完主号脚本后发现英雄还是半血,就是因为漏了这两条带H.前缀的命令。下面把命令参数、完整脚本、会员检测方式和常见问题逐一拆开说清楚。
HUMANHP和HUMANMP命令的完整参数结构
Legendm2引擎的HUMANHP和HUMANMP命令格式为:操作符 数值 延时 执行次数 是否漂血 自定义漂血 数据单位。操作符填加号表示增加血量,减号表示扣减,等号表示直接设置为指定值。数值填正整数,用于瞬间满血时建议填一个远超角色最大血量的数字,比如1000000000。参数3控制延时生效时间,单位毫秒,留空或填0表示立即生效。参数4是执行次数,留空或填0为旧模式,填1为新模式执行一次。参数5控制是否显示飘血效果,填1表示不飘血。参数6为自定义飘血素材编号,参数7控制数据单位,填0或留空为固定值模式,填1按最大血量百分比,填2按千分比,填3按万分比。
瞬间满血的写法有两种。第一种是直接给一个超大数值,HUMANHP + 1000000000,引擎会自动把血量填充到最大值,不会溢出。第二种是用等号配合最大血量变量,HUMANHP = <$MAXHP>,直接把当前血量设置为最大血量值。两种写法的效果相同,第一种写法更简洁,第二种写法更精确但依赖引擎对<$MAXHP>变量的支持。
英雄的血蓝用H.HUMANHP和H.HUMANMP命令处理,参数结构和人物命令完全一致,只是在命令名前多了一个H.前缀。分身用FS.HUMANHP,多级操作可以用H.M.HUMANHP或FS.M.HUMANMP。
完整脚本结构与会员免费分支
脚本文件放在MirServer\Mir200\Envir\Market_Def目录下,文件名格式为“NPC名-地图号.txt”。以下是一个包含会员免费功能和英雄同步满血的完整脚本示例,脚本结构参考了Legendm2引擎的经典写法:
```
[@main]
欢迎光临羞花加油站。\
<帮忙加加油吧!/@jia> 瞬间HP和MP满载\
<离开/@exit>
[@jia]
#IF
checknamelist ..\QuestDiary\会员服务\会员名单.txt
#ACT
QUERYVALUE 2 2 10 @call2 您当前是会员玩家,免费使用此功能...
BREAK
#IF
CHECKLEVELEX > 0
#ACT
QUERYVALUE 2 2 10 @call3 您当前是普通玩家,每次需要2W元宝...
BREAK
[@call3]
#IF
CHECKGAMEGOLD > 19999
#ACT
GAMEGOLD - 20000
HUMANHP + 1000000000
HUMANMP + 1000000000
H.HUMANHP + 1000000000
H.HUMANMP + 1000000000
MESSAGEBOX HP、MP满载完毕。
BREAK
#ELSEACT
MESSAGEBOX 您的元宝不足2W。
BREAK
[@call2]
#ACT
HUMANHP + 1000000000
HUMANMP + 1000000000
H.HUMANHP + 1000000000
H.HUMANMP + 1000000000
MESSAGEBOX HP、MP满载完毕。
BREAK
```
脚本的逻辑是:玩家点击加油按钮后,先用checknamelist检测玩家角色名是否在会员名单文件中。检测通过则弹出免费使用的确认提示,跳转到@call2段执行满血操作不扣元宝。检测不通过则弹出收费提示,跳转到@call3段检测元宝是否充足,充足则扣20000元宝并执行满血,不足则提示元宝不够。
QUERYVALUE命令的格式为:QUERYVALUE 输入类型 字符长度 时间 跳转标签 提示文字。输入类型填2表示确认对话框,字符长度和时间为兼容性参数,跳转标签是玩家点击确认后执行的脚本段。这个命令弹出的确认框比直接执行多了一层确认步骤,避免玩家误点浪费元宝。
checknamelist会员检测的文件路径与配置
checknamelist命令检测的是玩家角色名是否存在于指定文本文件中。文件路径中必须带上相对目录的跳转符号,写法为`..\QuestDiary\会员服务\会员名单.txt`。如果只写`会员名单.txt`,引擎会从当前NPC脚本所在的Merchant目录中搜索文件,找不到文件时检测永远返回失败,即使玩家确实是会员也会被判定为普通玩家。
会员名单.txt文件需要提前创建,路径为`MirServer\Mir200\Envir\QuestDiary\会员服务\`。文件内容每行一个角色名,需要添加会员时手动把角色名写入文件即可。文件编码必须保存为ANSI格式,UTF-8格式的中文角色名会导致checknamelist匹配失败。
除了用checknamelist做名单式会员检测,Legendm2引擎还支持基于时间的会员检测。CheckUserDate命令的格式为:CheckUserDate 会员.txt < 30 p0 p1。参数一为存储名单的文件路径,参数二为控制符支持大于小于等于,参数三为检测的天数,参数四和参数五为赋予的变量标志,分别用于读取已使用天数和剩余天数。用这个命令可以做成月卡会员,玩家加入会员时通过AddUserDate记录加入时间,每次使用时CheckUserDate自动计算剩余天数,到期后检测失败,满血功能自动切换为收费模式。
检查变量类会员判断。部分版本中用CHECK [800] 1检测全局变量800是否为1来判断会员状态,MOV G800 1将玩家标记为会员。这种方式的优点是检测速度快,缺点是变量在服务器重启或合区后可能重置,会员状态丢失。名单式和日期式检测的数据存储在文本文件中,不受服务器重启影响,更适合长期运营的版本。
瞬间满血的数值设置与溢出处理
HUMANHP后面的数值不要超过65535。Legendm2引擎的HUMANHP命令对数值参数有上限限制,超过65535时M2会报错,命令执行失败。如果直接写HUMANHP + 1000000000,部分引擎版本能够正确处理并自动截断到最大血量,另一些版本会因为数值超限而报错。稳妥的做法是用等号配合最大血量变量:HUMANHP = <$MAXHP>,这样无论角色血量上限是多少,都能精确设置为满血状态,且不会触发数值超限。
如果引擎不支持<$MAXHP>变量,可以改用分段累加的方式。连续写多条HUMANHP + 50000命令,每条增加5万血量,执行若干条后总增加量超过角色的最大血量即可。这种方式的好处是每条命令的数值都在安全范围内,不会触发上限报错。代价是脚本行数较多,对于血量上限几十万的角色需要写十几条命令。
英雄血量的数值处理与人物相同。H.HUMANHP后面同样不要超过65535,或者用H.HUMANHP = <$H.MAXHP>设置英雄满血。
攻城与非攻城期间的价格区分
部分版本中满血NPC会根据攻城状态收取不同的费用。通过检测攻城状态命令判断当前是否在攻城期间,攻城期间执行原价收费,非攻城期间执行半价收费。脚本结构上是在执行扣费之前加一层攻城检测:
```
[@call3]
#IF
CHECKCASTLEWAR
#ACT
CHECKGAMEGOLD > 19999
GAMEGOLD - 20000
HUMANHP + 1000000000
HUMANMP + 1000000000
H.HUMANHP + 1000000000
H.HUMANMP + 1000000000
MESSAGEBOX 攻城期间原价收费,HP、MP满载完毕。
BREAK
#ELSEACT
CHECKGAMEGOLD > 9999
GAMEGOLD - 10000
HUMANHP + 1000000000
HUMANMP + 1000000000
H.HUMANHP + 1000000000
H.HUMANMP + 1000000000
MESSAGEBOX 非攻城期间半价优惠,HP、MP满载完毕。
BREAK
```
CHECKCASTLEWAR命令检测当前服务器是否处于攻城状态,攻城期间返回真,非攻城期间返回假。攻城期间收费20000元宝,非攻城期间收费10000元宝。会员玩家无论攻城与否都免费,会员检测的优先级高于攻城检测,脚本中先判断会员身份,会员直接跳转到免费段,不再执行攻城状态的判断。
常见问题排查
满血后英雄仍然是半血状态。检查脚本中是否包含了H.HUMANHP和H.HUMANMP两条命令。人物满血只用HUMANHP和HUMANMP,英雄的血蓝需要单独用带H.前缀的命令处理,两条命令缺一不可。确认英雄是否在线,英雄不在线时执行H.HUMANHP命令不会有任何效果,也不会报错。
checknamelist检测会员永远返回失败。检查文件路径中是否包含了`..\QuestDiary\`前缀。缺少这个前缀时引擎会从当前脚本所在的Merchant目录搜索文件,找不到文件导致检测失败。检查会员名单.txt文件的编码是否为ANSI,UTF-8格式的中文角色名无法被正确匹配。检查玩家角色名的大小写是否与文件中的记录完全一致,checknamelist是精确匹配,大小写不同也会判定为不匹配。
扣了元宝但血量没有满。HUMANHP后面的数值可能超过了65535的上限,M2报错后命令执行失败,但之前的GAMEGOLD扣款命令已经执行完毕。处理方法是用等号配合<$MAXHP>替代超大数值,或者把超大数值拆分为多条不超过65535的累加命令。修改后先在测试账号上验证,确认扣款和满血两个操作都正常执行后再上线。
脚本修改后NPC功能没有变化。检查M2Server是否执行了重新加载NPC操作。脚本文件保存后,引擎读取的仍然是内存中的旧脚本数据,需要在M2Server控制台的选项菜单中找到重新加载NPC的入口执行一次,或者直接重启M2Server。每次只修改一个位置,修改完成后立即用测试账号验证,不要同时改动多个脚本段,否则出现问题时无法判断是哪一步修改导致的。
传奇Legendm2引擎瞬间满血NPC脚本会员免费功能配置与英雄同步完整方法
来源:
作者:
点击:

