一、脚本核心逻辑与文件定位
单机刷怪NPC脚本核心分为两种模式:塔防式波次刷怪(击杀完一波后延时刷新下一波)、动态补怪(维持固定怪物数量,击杀即补)。均依托服务端Envir文件夹实现,适配Hero、GOM、GEE主流引擎,核心文件路径与基础语法通用,无需额外插件支持。
核心文件:服务端\Mirserver\Mir200\Envir\Market_def(存放刷怪NPC脚本,支持@reloadnpc命令实时重载);Envir\Merchant.txt(配置NPC刷新位置、形象);Envir\QuestDiary(存放刷怪计数、定时器核心脚本)。基础语法以#if(条件判断)、#act(执行动作)、#timer(定时器)为核心,搭配变量控制刷怪规则。
二、通用配置:刷怪NPC基础设置
先完成NPC基础配置,确保可正常交互并关联刷怪脚本,两种模式共用此步骤。
1. NPC位置配置(Merchant.txt文件)
打开Merchant.txt,添加刷怪NPC信息,格式如下:
刷怪使者 1 350 350 0 15 0
参数说明:依次为NPC名称、所在地图代码(1代表新手村,可替换为目标地图)、X/Y坐标、刷新范围、形象代码、刷新时间(0为永久存在)。配置后保存,后续脚本将绑定该NPC。
2. NPC交互入口脚本(Market_def文件)
在Market_def文件夹新建文本文件,命名为“刷怪使者-1”(名称与Merchant.txt一致,后缀为地图代码),编写基础交互逻辑,提供两种刷怪模式选择:
(@main)
#say
欢迎使用刷怪功能,可选择以下模式:\“
塔防波次刷怪/@wave 动态补怪/@dynamic
退出/@exit
(@exit)
#say
如需刷怪可随时找我!
(后续刷怪逻辑将分别补充至@wave和@dynamic标签下)
三、模式一:塔防式波次刷怪脚本(击杀完刷新下一波)
核心逻辑:玩家进入指定地图后,NPC触发首波刷怪,检测地图内无怪物时,延时指定秒数刷新下一波,循环往复,贴合塔防玩法。
1. 波次刷怪核心脚本编写
在“刷怪使者-1”脚本中补充@wave标签逻辑,含地图传送、首波刷怪、波次计数与延时刷新:
(@wave)
#if
checkmap 1 (检测是否在当前地图)
#act
mapmove 2 300 300 (传送至目标刷怪地图,2为地图代码,坐标自定义)
setvar human wave 1 (初始化波次为1)
say 已传送至刷怪地图,即将刷新第1波怪物!
timer 3 0 @SpawnWave (3秒后触发首波刷怪,0代表循环执行)
#elsesay
请先返回新手村找我开启刷怪功能!
2. 刷怪与波次检测脚本(QuestDiary文件)
在Envir\QuestDiary文件夹新建“WaveSpawn.txt”,编写刷怪、波次递进与延时逻辑:
(@SpawnWave)
#if
checkvar human wave > 0 (确认已开启波次模式)
checkmap 2 (检测是否在刷怪地图)
checkmoncount 2 0 (检测地图2内怪物数量为0)
#act
incvar human wave 1 (波次+1)
sendmsg 6 第<$HUMAN(wave)>波怪物即将刷新!(屏幕提示)
timer 5 0 @DoSpawn (5秒后刷新怪物,可调整延时时间)
#elseif
checkvar human wave > 0
checkmap 2
checkmoncount 2 > 0 (地图内仍有怪物)
#act
timer 2 0 @SpawnWave (2秒后再次检测,避免频繁判定)
3. 怪物刷新执行脚本
在WaveSpawn.txt中补充@DoSpawn标签,定义每波刷怪数量与怪物类型:
(@DoSpawn)
#if
checkvar human wave > 0
checkmap 2
#act
spawnmon 稻草人 20 300 300 2 (刷新20只稻草人,坐标为刷怪地图范围,2为地图代码)
sendmsg 6 第<$HUMAN(wave)>波怪物已刷新,击杀完毕后将开启下一波!
4. 模式关闭与重置
在“刷怪使者-1”脚本补充关闭逻辑,玩家返回NPC处可停止刷怪:
(@stopwave)
#if
checkvar human wave > 0
#act
setvar human wave 0 (重置波次变量,停止刷怪)
cleartimer @SpawnWave (清除定时器)
cleartimer @DoSpawn
say 波次刷怪已关闭,如需再次开启可重新选择模式!
同时在@main标签补充“关闭波次刷怪/@stopwave”选项,方便玩家操作。
四、模式二:动态补怪脚本(维持固定数量,击杀即补)
核心逻辑:点击NPC开启后,刷新指定数量怪物(如50只),实时检测地图内怪物数量,少于设定值时自动补充,维持数量恒定,实现无穷无尽刷怪。
1. 动态补怪核心脚本编写
在“刷怪使者-1”脚本中补充@dynamic标签逻辑,初始化补怪参数并触发刷怪:
(@dynamic)
#if
checkmap 1
#act
mapmove 2 320 320 (传送至同一刷怪地图,可自定义)
setvar human maxmon 50 (设定最大怪物数量为50)
setvar human dyn 1 (标记开启动态补怪)
say 已开启动态补怪,维持50只怪物,击杀即补!
timer 1 0 @CheckMon (1秒检测一次怪物数量,确保实时补怪)
#elsesay
请先返回新手村找我开启刷怪功能!
2. 怪物数量检测与补怪脚本
在QuestDiary文件夹新建“DynamicSpawn.txt”,编写数量检测与补怪逻辑:
(@CheckMon)
#if
checkvar human dyn 1 (确认开启补怪模式)
checkmap 2
checkmoncount 2 < $HUMAN(maxmon) (检测怪物数量少于设定值)
#act
calcvar human needmon $HUMAN(maxmon) - $MONCOUNT(2) (计算需补充的怪物数量)
spawnmon 稻草人 $HUMAN(needmon) 320 320 2 (补充对应数量怪物,坐标为刷怪范围)
#elseif
checkvar human dyn 0 (已关闭补怪)
#act
cleartimer @CheckMon (清除定时器,停止检测)
3. 补怪模式关闭脚本
在“刷怪使者-1”脚本补充关闭选项,重置变量并停止补怪:
(@stopdyn)
#if
checkvar human dyn 1
#act
setvar human dyn 0
cleartimer @CheckMon
mapmove 1 350 350 (传送回新手村)
say 动态补怪已关闭,欢迎下次使用!
在@main标签补充“关闭动态补怪/@stopdyn”选项,完善交互。
五、脚本绑定与生效设置
1. 绑定脚本文件:将QuestDiary文件夹下的WaveSpawn.txt、DynamicSpawn.txt路径添加至引擎配置,确保脚本可被调用。Hero引擎需在QManage.txt中添加“@Include WaveSpawn.txt”“@Include DynamicSpawn.txt”;GOM/GEE引擎直接放在QuestDiary文件夹即可自动加载。
2. 重载生效:保存所有脚本后,在游戏内输入GM命令“@reloadnpc all”“@reloadquest all”,重载NPC与任务脚本,无需重启服务端即可生效。
六、脚本测试与异常排查
1. 测试流程
波次刷怪测试:与NPC对话选择塔防模式,传送至地图后确认首波怪物刷新,击杀所有怪物后,等待设定延时,验证下一波是否正常刷新,同时检查波次提示是否准确。
动态补怪测试:选择动态模式,确认初始刷新50只怪物,击杀部分后(如20只),观察是否自动补充30只,维持总数50只,关闭模式后验证怪物是否停止补充。
2. 常见问题排查
1. 不刷怪:检查spawnmon命令格式,确保怪物名称与服务端MonItems.txt一致,地图代码、坐标正确;核实定时器脚本是否绑定成功,可通过缩短延时时间测试。
2. 补怪异常:动态补怪模式下,若怪物数量超出设定值,检查checkmoncount命令参数,确保“< $HUMAN(maxmon)”判断正确,变量maxmon是否正常赋值。
3. 模式无法切换:检查变量wave、dyn是否正确重置,关闭模式时需同步清除定时器,避免两种模式脚本冲突。
七、通用适配与拓展技巧
1. 怪物类型与数量调整:修改spawnmon命令中的怪物名称(如替换为“多钩猫”)、数量,可适配不同等级刷怪需求;波次刷怪可按波次递增数量,在@DoSpawn中添加“if wave>5 spawnmon 多钩猫 30”实现。
2. 延时参数调整:塔防模式的刷新延时(timer后的数字)单位为秒,可根据需求修改,如设置为10秒,让玩家有准备时间,贴合塔防节奏。
3. 引擎适配:不同引擎命令略有差异,GEE引擎刷新怪物用“SPAWN”命令,动态补怪检测数量用“GETMONCOUNT”,可查阅对应引擎手册调整命令格式。
4. 备份原则:修改脚本前备份原文件,若配置错误导致刷怪异常,可替换备份文件快速恢复,避免影响单机体验。

