###一、需求解析与实现逻辑
用户希望在单机传奇中实现两种刷怪模式:
1.**塔防模式**:进入地图后自动刷怪,击杀部分怪物后自动补充至固定数量(如总50只,击杀20只后补刷30只)。
2.**无限刷怪模式**:点击NPC触发无穷尽刷怪,始终保持地图怪物数量恒定。
**底层逻辑**需解决三个核心问题:
-**怪物数量动态监测**:实时统计地图存活怪物数量。
-**条件触发补充机制**:根据差额自动或手动触发刷怪。
-**时间/资源控制**:防止刷怪过快导致服务器卡顿或数据溢出。
---
###二、基础框架搭建:NPC与脚本配置
####1.**NPC创建(点击触发型)**
**步骤1:MerChant.txt注册**
```
刷怪使者3333333自动刷怪NPC015000
```
(地图3为土城,外观代码15为传送阵造型)
**步骤2:NPC脚本编写**
路径:`D:\MirServer\Mir200\Envir\Market_def\刷怪使者-3.txt`
```lua
[@main]
请选择刷怪模式:\
<塔防模式(自动补怪)/@AutoMode>\
<无限刷怪(点击触发)/@InfinityMode>\
<离开/@exit>
[@AutoMode]
#ACT
MAPMOVED001//传送至塔防专用地图
SENDMSG6已进入塔防地图,怪物将自动补充!
[@InfinityMode]
#ACT
GOTO@StartSpawn
[@StartSpawn]
#IF
CHECKCURRENTMAPD001//仅允许在D001地图操作
#ACT
MONGENEXD0015050白野猪5010//中心区域刷50只
SENDMSG0地图怪物已刷新至50只!
```
---
###三、塔防模式:动态差额补怪实现
####1.**MapQuest_def地图触发脚本**
路径:`D:\MirServer\Mir200\Envir\MapQuest_def\D001.txt`
```lua
[@OnTimer]
#IF
CHECKMAPMONCOUNTD001<50//检测当前怪物数量
#ACT
CALCVARN$差额=50-<$MAPMONCOUNT>
MONGENEXD001<$STR(N$差额)><$STR(N$差额)>白野猪1010//分散坐标刷差额数
RESETTIMER010//每10秒检测一次
```
####2.**机器人定时器配置**
路径:`D:\MirServer\Mir200\Envir\Robot_def\AutoRunRobot.txt`
```
#AutoRunNPCSEC10@D001_Timer
```
路径:`D:\MirServer\Mir200\Envir\Robot_def\RobotManage.txt`
```lua
[@D001_Timer]
#IF
CHECKMAPD001//仅对D001地图生效
#ACT
SetMapTimerD0010//激活地图计时器
```
---
###四、无限刷怪模式:点击NPC恒定数量维持
####1.**NPC脚本增强(循环触发)**
修改`刷怪使者-3.txt`:
```lua
[@InfinityMode]
#IF
CHECKCURRENTMAPD001
#ACT
CALLMOB白野猪50//调用50只白野猪
SetScTimer01//1秒后执行循环检测
BREAK
[@OnTimer0]
#IF
CHECKMAPMONCOUNTD001<50
#ACT
CALCVARN$需补数量=50-<$MAPMONCOUNT>
MONGENEXD0013070白野猪<$STR(N$需补数量)>10//随机坐标补充
SetScTimer05//每5秒检测一次
#ELSEACT
SetScTimer010//数量足够时降低检测频率
```
---
###五、高级优化:资源控制与异常处理
####1.**刷怪密度平衡公式**
为避免怪物堆积,可通过坐标分散算法控制刷怪范围:
```lua
#ACT
GetRandomPosD0013070//在坐标X30-Y70区域内随机生成
MOVRP$X20//X轴±20随机偏移
MOVRP$Y20//Y轴±20随机偏移
```
####2.**性能保护机制**
在`QManage.txt`中添加全局控制:
```lua
[@Login]
#IF
#ACT
SetScTimer93600//每小时清理一次冗余怪物
...
[@OnTimer9]
#ACT
CLEARMAPMOND001//清除非活动怪物
```
####3.**爆率与经验配置**
路径:`D:\MirServer\Mir200\Envir\MonItems\白野猪.txt`
```
1/10金币5000
1/5治愈戒指
1/1屠龙
```
---
###六、多引擎适配方案
|引擎类型|刷怪命令|数量检测方法|
|----------|--------------------|----------------------------------|
|GOM|`MONGENEX`|`CHECKMAPMONCOUNT`|
|GEE|`ADDMON`|`GetMapMonCount`|
|HERO|`PARAM1PARAM2`|`GetMapMon`遍历计数|
|BLUE|`MOBPLACE`|需自定义变量统计|
---
###七、测试与调试指南
1.**日志监控**:
-查看`M2Server.log`中刷怪指令执行记录。
-过滤关键词`MONGENEXERROR`定位坐标或数量错误。
2.**模拟压力测试**:
```lua
#ACT
SetScTimer01//极限1秒间隔刷怪
LOOPVARN$测试1100//循环100次
```
3.**玩家行为模拟**:
-使用`@CLEARMAPMON`清怪触发补刷逻辑。
-通过`@ViewMapInfo`查看实时怪物分布。
---
###八、总结:从脚本到生态的完整闭环
1.**基础功能实现**:NPC交互→刷怪触发→数量监测。
2.**高阶平衡设计**:资源控制→密度算法→异常处理。
3.**生态扩展方向**:
-波次难度递增(第5波刷BOSS)
-积分奖励系统(每波奖励元宝)
-玩家排名统计(击杀效率榜)
用户希望在单机传奇中实现两种刷怪模式:
1.**塔防模式**:进入地图后自动刷怪,击杀部分怪物后自动补充至固定数量(如总50只,击杀20只后补刷30只)。
2.**无限刷怪模式**:点击NPC触发无穷尽刷怪,始终保持地图怪物数量恒定。
**底层逻辑**需解决三个核心问题:
-**怪物数量动态监测**:实时统计地图存活怪物数量。
-**条件触发补充机制**:根据差额自动或手动触发刷怪。
-**时间/资源控制**:防止刷怪过快导致服务器卡顿或数据溢出。
---
###二、基础框架搭建:NPC与脚本配置
####1.**NPC创建(点击触发型)**
**步骤1:MerChant.txt注册**
```
刷怪使者3333333自动刷怪NPC015000
```
(地图3为土城,外观代码15为传送阵造型)
**步骤2:NPC脚本编写**
路径:`D:\MirServer\Mir200\Envir\Market_def\刷怪使者-3.txt`
```lua
[@main]
请选择刷怪模式:\
<塔防模式(自动补怪)/@AutoMode>\
<无限刷怪(点击触发)/@InfinityMode>\
<离开/@exit>
[@AutoMode]
#ACT
MAPMOVED001//传送至塔防专用地图
SENDMSG6已进入塔防地图,怪物将自动补充!
[@InfinityMode]
#ACT
GOTO@StartSpawn
[@StartSpawn]
#IF
CHECKCURRENTMAPD001//仅允许在D001地图操作
#ACT
MONGENEXD0015050白野猪5010//中心区域刷50只
SENDMSG0地图怪物已刷新至50只!
```
---
###三、塔防模式:动态差额补怪实现
####1.**MapQuest_def地图触发脚本**
路径:`D:\MirServer\Mir200\Envir\MapQuest_def\D001.txt`
```lua
[@OnTimer]
#IF
CHECKMAPMONCOUNTD001<50//检测当前怪物数量
#ACT
CALCVARN$差额=50-<$MAPMONCOUNT>
MONGENEXD001<$STR(N$差额)><$STR(N$差额)>白野猪1010//分散坐标刷差额数
RESETTIMER010//每10秒检测一次
```
####2.**机器人定时器配置**
路径:`D:\MirServer\Mir200\Envir\Robot_def\AutoRunRobot.txt`
```
#AutoRunNPCSEC10@D001_Timer
```
路径:`D:\MirServer\Mir200\Envir\Robot_def\RobotManage.txt`
```lua
[@D001_Timer]
#IF
CHECKMAPD001//仅对D001地图生效
#ACT
SetMapTimerD0010//激活地图计时器
```
---
###四、无限刷怪模式:点击NPC恒定数量维持
####1.**NPC脚本增强(循环触发)**
修改`刷怪使者-3.txt`:
```lua
[@InfinityMode]
#IF
CHECKCURRENTMAPD001
#ACT
CALLMOB白野猪50//调用50只白野猪
SetScTimer01//1秒后执行循环检测
BREAK
[@OnTimer0]
#IF
CHECKMAPMONCOUNTD001<50
#ACT
CALCVARN$需补数量=50-<$MAPMONCOUNT>
MONGENEXD0013070白野猪<$STR(N$需补数量)>10//随机坐标补充
SetScTimer05//每5秒检测一次
#ELSEACT
SetScTimer010//数量足够时降低检测频率
```
---
###五、高级优化:资源控制与异常处理
####1.**刷怪密度平衡公式**
为避免怪物堆积,可通过坐标分散算法控制刷怪范围:
```lua
#ACT
GetRandomPosD0013070//在坐标X30-Y70区域内随机生成
MOVRP$X20//X轴±20随机偏移
MOVRP$Y20//Y轴±20随机偏移
```
####2.**性能保护机制**
在`QManage.txt`中添加全局控制:
```lua
[@Login]
#IF
#ACT
SetScTimer93600//每小时清理一次冗余怪物
...
[@OnTimer9]
#ACT
CLEARMAPMOND001//清除非活动怪物
```
####3.**爆率与经验配置**
路径:`D:\MirServer\Mir200\Envir\MonItems\白野猪.txt`
```
1/10金币5000
1/5治愈戒指
1/1屠龙
```
---
###六、多引擎适配方案
|引擎类型|刷怪命令|数量检测方法|
|----------|--------------------|----------------------------------|
|GOM|`MONGENEX`|`CHECKMAPMONCOUNT`|
|GEE|`ADDMON`|`GetMapMonCount`|
|HERO|`PARAM1PARAM2`|`GetMapMon`遍历计数|
|BLUE|`MOBPLACE`|需自定义变量统计|
---
###七、测试与调试指南
1.**日志监控**:
-查看`M2Server.log`中刷怪指令执行记录。
-过滤关键词`MONGENEXERROR`定位坐标或数量错误。
2.**模拟压力测试**:
```lua
#ACT
SetScTimer01//极限1秒间隔刷怪
LOOPVARN$测试1100//循环100次
```
3.**玩家行为模拟**:
-使用`@CLEARMAPMON`清怪触发补刷逻辑。
-通过`@ViewMapInfo`查看实时怪物分布。
---
###八、总结:从脚本到生态的完整闭环
1.**基础功能实现**:NPC交互→刷怪触发→数量监测。
2.**高阶平衡设计**:资源控制→密度算法→异常处理。
3.**生态扩展方向**:
-波次难度递增(第5波刷BOSS)
-积分奖励系统(每波奖励元宝)
-玩家排名统计(击杀效率榜)

