JS引擎下做“特殊”刷怪,重点不是单纯定时MonGen,而是把机器人定时器、地图人数、地图怪物数、时间段、波次变量、无人清场合在一起。下面按可直接改的实例写,命令名以本服JS封装为准,若你的JS插件用MonGen就替换SpawnMonster,用CheckMonMap就替换CheckMapMonCount,用CheckHum就替换CheckMapHumanCount。
一、机器人定时器入口
AutoRun按秒跑总控,别把所有地图都放1秒,特殊刷怪建议5到10秒一次:
AutoRunNPCSEC5@JSMonMaster
RobotManage里用总控分发,避免每个地图单独建定时器:
[@JSMonMaster]
IF
ACT
GOTO@SnowFieldAlive
GOTO@TowerWaveCheck
GOTO@NightBerserk
GOTO@EmptyMapClear
BREAK
二、按存活数量补怪,不重复刷
普通MonGen定时刷容易叠怪,特殊做法先查地图某怪数量,再决定补不补。以雪域子图XM01为例,要求祖玛级雪怪始终保持3到6只:
[@SnowFieldAlive]
IF
CheckMonMapXM01雪域卫士3
ACT
BREAK
IF
CheckMonMapXM01雪域卫士6
ELSEACT
BREAK
IF
CheckMonMapXM01雪域卫士<3
ACT
MONGENEXXM013060雪域卫士83
SENDMSG0雪域卫士数量不足,已补充至近战点
BREAK
如果只要求“没有才刷一只”,把数量判断改成等于0:
[@SnowBossOnce]
IF
CheckMonMapXM01雪域教主0
ACT
MONGENEXXM014545雪域教主0129
SENDMSG1雪域教主已降临XM01,全服前往
BREAK
JS函数化写法可包装成按参数补:
functionFillMon(mapmonminmaxrangecountcolor){
varcur=GetMapMonCount(mapmon);
if(cur>=min)return;
if(cur>=max)return;
SpawnMonsterEx(maprangeX1rangeY1monrangemax-curcolor);
}
实际把rangeX1、rangeY1换成随机区间或固定中心即可。
三、按地图人数动态扩量
特殊活动图按人多少刷,单人少刷、多人叠加。以塔图TW01为例:
[@TowerDynGen]
IF
CheckMapHumanCountTW01<1
ACT
BREAK
IF
CheckMapHumanCountTW01<3
ACT
CheckMapMonCountTW01<10
MONGENEXTW012040骷髅1010
BREAK
IF
CheckMapHumanCountTW01<8
ACT
CheckMapMonCountTW01<25
MONGENEXTW012040骷髅1015
MONGENEXTW012545骷髅长枪105
BREAK
IF
CheckMapHumanCountTW01>=8
ACT
CheckMapMonCountTW01<40
MONGENEXTW012040骷髅1020
MONGENEXTW012545骷髅长枪1010
MONGENEXTW013050幽灵106
BREAK
JS可写成按人数算目标数:
functionDynCount(baseperPlayeronlinecap){
varn=base+Math.floor(online*perPlayer);
if(n>cap)n=cap;
returnn;
}
varhuman=GetMapHumanCount("TW01");
vartarget=DynCount(102human40);
varcur=GetMapMonCount("TW01""骷髅");
if(cur<target){
SpawnMonsterEx("TW01"2040"骷髅"10target-cur0);
}
这样在线波动时不会一下子刷满,也不会因为机器人5秒一次持续叠怪。
四、分时段特殊刷法,夜间狂暴、白天常规
用系统时间切行为。JS取小时:
functionHourBoss(){
varh=GetSystemTime().hour;
if(h>=0&&h<6){
//夜间狂暴
if(GetMapMonCount("BW01""狂暴赤月")==0){
SpawnMonsterEx("BW01"320320"狂暴赤月"01253);
SendMsg(1"夜间狂暴赤月降临BW01");
}
}else{
if(GetMapMonCount("BW01""赤月恶魔")==0){
SpawnMonsterEx("BW01"320320"赤月恶魔"010);
SendMsg(1"常规赤月恶魔已刷新BW01");
}
}
}
传统脚本可用CHECKTIME做分时段,例如0点到6点刷狂暴怪、白天刷普通怪,机器人每60秒判一次,避免整点只触发一次错过存活检测。
五、波次塔防,机器人按波数变量推进
特殊闯关不靠MonGen.txt固定刷,用机器人变量记录波数。以CW01闯关图为例:
[@TowerWaveCheck]
IF
CheckMapHumanCountCW01<1
ACT
BREAK
IF
EQUALG$CWTown0
ACT
MONGENEXCW013030半兽人810
SETG$CWTown1
SENDMSG6CW01第一波半兽人已出,清完等5秒进波
BREAK
IF
EQUALG$CWTown1
ACT
CheckMapMonCountCW01半兽人0
DELAY5000
MONGENEXCW013030红野猪812
MONGENEXCW013232黑野猪86
INCG$CWTown1
SENDMSG6CW01第二波野猪已出
BREAK
IF
EQUALG$CWTown2
ACT
CheckMapMonCountCW01红野猪0
CheckMapMonCountCW01黑野猪0
DELAY5000
MONGENEXCW013030祖玛弓箭手88
MONGENEXCW013434祖玛教主0129
INCG$CWTown1
SENDMSG6CW01第三波祖玛加教主已出
BREAK
JS版把G变量换成全局对象:
varWave={cw01:0};
functionTowerWave(map){
if(GetMapHumanCount(map)<1)return;
if(Wave.cw01===0){
SpawnMonsterEx(map3030"半兽人"8100);
Wave.cw01=1;return;
}
if(Wave.cw01=1&&GetMapMonCount(map"半兽人")=0){
Sleep(5000);
SpawnMonsterEx(map3030"红野猪"8120);
SpawnMonsterEx(map3232"黑野猪"860);
Wave.cw01=2;return;
}
if(Wave.cw01=2&&GetMapMonCount(map"红野猪")=0&&GetMapMonCount(map"黑野猪")===0){
Sleep(5000);
SpawnMonsterEx(map3030"祖玛弓箭手"880);
SpawnMonsterEx(map3434"祖玛教主"0129);
Wave.cw01=3;return;
}
}
波次锁用全局变量,进图重置可用进入地图触发把Wave.cw01设0;不要机器人每次都从1开始,否则清怪瞬间会反复刷。
六、多Boss轮换,按星期或按计数器
特殊世界Boss可用机器人按星期几轮换,避免每天同怪。AutoRun写:
AutoRunNPCRUNONWEEK1:20:00@WeekBossA
AutoRunNPCRUNONWEEK3:20:00@WeekBossB
AutoRunNPCRUNONWEEK5:20:00@WeekBossC
[@WeekBossA]
IF
CheckMonMapWB01祖玛教主0
ACT
MONGENEXWB015050祖玛教主0129
SENDMSG1周一世界Boss祖玛教主已出WB01
BREAK
[@WeekBossB]
IF
CheckMonMapWB01赤月恶魔0
ACT
MONGENEXWB015050赤月恶魔0129
SENDMSG1周三世界Boss赤月恶魔已出WB01
BREAK
[@WeekBossC]
IF
CheckMonMapWB01雪域教主0
ACT
MONGENEXWB015050雪域教主0129
SENDMSG1周五世界Boss雪域教主已出WB01
BREAK
JS用星期变量更灵活:
functionWeekRotateBoss(map){
vard=GetSystemTime().weekday;
varname="祖玛教主";
if(d===1)name="祖玛教主";
elseif(d===3)name="赤月恶魔";
elseif(d===5)name="雪域教主";
elsereturn;
if(GetMapMonCount(mapname)===0){
SpawnMonsterEx(map5050name0129);
SendMsg(1name+"已出"+map);
}
}
七、无人地图自动清怪,省资源
机器人总控里加空图清理,按人数等于0清全部或只清活动怪:
[@EmptyMapClear]
IF
CheckMapHumanCountTW010
ACT
ClearMapMonTW01
BREAK
IF
CheckMapHumanCountCW010
ACT
ClearMapMonCW01
SETG$CWTown0
BREAK
IF
CheckMapHumanCountXM010
ACT
ClearMapMonXM01
BREAK
JS写法:
functionClearEmpty(mapList){
for(vari=0;i<mapList.length;i++){
if(GetMapHumanCount(mapList[i])===0){
ClearMapMonsters(mapList[i]);
}
}
}
ClearEmpty(["TW01""CW01""XM01""BW01"]);
活动图清完顺手把波次变量、Boss标记重置,避免下次进图直接出第三波。
八、防叠怪与随机点
特殊刷怪最怕所有怪同一个坐标。MONGENEX给范围参数,例如中心30、范围10,引擎会在30附近随机;JS可自己算随机坐标:
functionRandSpawn(mapcxcyradiusmoncountcolor){
for(vari=0;i<count;i++){
varrx=cx+Rand(-radiusradius);
varry=cy+Rand(-radiusradius);
if(CanWalk(maprxry)){
SpawnMonsterEx(maprxrymon01color);
}else{
SpawnMonsterEx(mapcxcymonradius1color);
}
}
}
传统脚本没CanWalk就直接给范围刷,不要把range写0还一次刷50只。单点建议不超过5只,多点分发更稳。
九、机器人性能与排错
机器人SEC1全图跑复杂刷怪会拖M2,特殊脚本按5秒、10秒分级:普通补怪10秒,塔防波次检测5秒,整点Boss用RUNONDAY不靠轮询。地图无人清场可1分钟一次,别5秒一次全图清。
排错顺序:
1.不刷怪:看怪物名是否和Monster.txt完全一致,雪域卫士、祖玛教主、赤月恶魔错一字不刷;看JS机器人是否加载、AutoRun标签是否生效。
2.叠怪:检查是否既有MonGen.txt固定刷又有机器人补怪,活动图建议关MonGen.txt对应行,只走机器人。
3.补怪慢:CheckMonMap数量阈值写错,比如要求小于6才补,但地图常驻8只,永远不补;把存活判断和上限判断分开。
4.人数不生效:CheckMapHumanCount地图名要和MapInfo、进入触发一致,用数字编号就全用编号,用字母编号就全用字母。
5.波次乱跳:全局波次变量没重置,玩家离开未清场;进入地图触发设波次0,机器人空图清理设0。
6.卡坐标:随机点落到墙里,给MONGENEX范围而不是固定点;JS自算随机后最好用可行走判断,没有就用卸围重刷。
7.定时Boss不出:RUNONDAY/RUNONWEEK时间格式不对,或机器人管理脚本标签名和AutoRun不一致;先手动GOTO标签测一次。
十、完整简版总控可直接抄
AutoRunRobot.txt:
AutoRunNPCSEC10@JSMonMaster
RobotManage.txt:
[@JSMonMaster]
ACT
GOTO@SnowFieldAlive
GOTO@TowerDynGen
GOTO@WeekBossRoute
GOTO@EmptyMapClear
BREAK
[@SnowFieldAlive]
IF
CheckMonMapXM01雪域教主0
ACT
MONGENEXXM014545雪域教主0129
SENDMSG1雪域教主已刷新XM01
BREAK
IF
CheckMonMapXM01雪域卫士6
ELSEACT
BREAK
IF
CheckMonMapXM01雪域卫士<3
ACT
MONGENEXXM013060雪域卫士103
BREAK
[@TowerDynGen]
IF
CheckMapHumanCountTW01<1
ACT
BREAK
IF
CheckMapHumanCountTW01<3
ACT
CheckMapMonCountTW01<10
MONGENEXTW012040骷髅1010
BREAK
IF
CheckMapHumanCountTW01>=3
ACT
CheckMapMonCountTW01<30
MONGENEXTW012040骷髅1015
MONGENEXTW012545骷髅长枪108
BREAK
[@WeekBossRoute]
IF
CheckMonMapWB01祖玛教主0
ACT
MONGENEXWB015050祖玛教主0129
SENDMSG1周祖玛已出WB01
BREAK
[@EmptyMapClear]
IF
CheckMapHumanCountTW010
ACT
ClearMapMonTW01
BREAK
IF
CheckMapHumanCountXM010
ACT
ClearMapMonXM01
BREAK
JS插件若支持函数文件,把FillMon、DynCount、RandSpawn、WeekRotateBoss、ClearEmpty挂到10秒定时器里调用,比纯标签好维护。改完先在空图跑存活补怪,再开人数动态和波次,最后接整点Boss与夜间狂暴,避免一次全开不好定位。
一、机器人定时器入口
AutoRun按秒跑总控,别把所有地图都放1秒,特殊刷怪建议5到10秒一次:
AutoRunNPCSEC5@JSMonMaster
RobotManage里用总控分发,避免每个地图单独建定时器:
[@JSMonMaster]
IF
ACT
GOTO@SnowFieldAlive
GOTO@TowerWaveCheck
GOTO@NightBerserk
GOTO@EmptyMapClear
BREAK
二、按存活数量补怪,不重复刷
普通MonGen定时刷容易叠怪,特殊做法先查地图某怪数量,再决定补不补。以雪域子图XM01为例,要求祖玛级雪怪始终保持3到6只:
[@SnowFieldAlive]
IF
CheckMonMapXM01雪域卫士3
ACT
BREAK
IF
CheckMonMapXM01雪域卫士6
ELSEACT
BREAK
IF
CheckMonMapXM01雪域卫士<3
ACT
MONGENEXXM013060雪域卫士83
SENDMSG0雪域卫士数量不足,已补充至近战点
BREAK
如果只要求“没有才刷一只”,把数量判断改成等于0:
[@SnowBossOnce]
IF
CheckMonMapXM01雪域教主0
ACT
MONGENEXXM014545雪域教主0129
SENDMSG1雪域教主已降临XM01,全服前往
BREAK
JS函数化写法可包装成按参数补:
functionFillMon(mapmonminmaxrangecountcolor){
varcur=GetMapMonCount(mapmon);
if(cur>=min)return;
if(cur>=max)return;
SpawnMonsterEx(maprangeX1rangeY1monrangemax-curcolor);
}
实际把rangeX1、rangeY1换成随机区间或固定中心即可。
三、按地图人数动态扩量
特殊活动图按人多少刷,单人少刷、多人叠加。以塔图TW01为例:
[@TowerDynGen]
IF
CheckMapHumanCountTW01<1
ACT
BREAK
IF
CheckMapHumanCountTW01<3
ACT
CheckMapMonCountTW01<10
MONGENEXTW012040骷髅1010
BREAK
IF
CheckMapHumanCountTW01<8
ACT
CheckMapMonCountTW01<25
MONGENEXTW012040骷髅1015
MONGENEXTW012545骷髅长枪105
BREAK
IF
CheckMapHumanCountTW01>=8
ACT
CheckMapMonCountTW01<40
MONGENEXTW012040骷髅1020
MONGENEXTW012545骷髅长枪1010
MONGENEXTW013050幽灵106
BREAK
JS可写成按人数算目标数:
functionDynCount(baseperPlayeronlinecap){
varn=base+Math.floor(online*perPlayer);
if(n>cap)n=cap;
returnn;
}
varhuman=GetMapHumanCount("TW01");
vartarget=DynCount(102human40);
varcur=GetMapMonCount("TW01""骷髅");
if(cur<target){
SpawnMonsterEx("TW01"2040"骷髅"10target-cur0);
}
这样在线波动时不会一下子刷满,也不会因为机器人5秒一次持续叠怪。
四、分时段特殊刷法,夜间狂暴、白天常规
用系统时间切行为。JS取小时:
functionHourBoss(){
varh=GetSystemTime().hour;
if(h>=0&&h<6){
//夜间狂暴
if(GetMapMonCount("BW01""狂暴赤月")==0){
SpawnMonsterEx("BW01"320320"狂暴赤月"01253);
SendMsg(1"夜间狂暴赤月降临BW01");
}
}else{
if(GetMapMonCount("BW01""赤月恶魔")==0){
SpawnMonsterEx("BW01"320320"赤月恶魔"010);
SendMsg(1"常规赤月恶魔已刷新BW01");
}
}
}
传统脚本可用CHECKTIME做分时段,例如0点到6点刷狂暴怪、白天刷普通怪,机器人每60秒判一次,避免整点只触发一次错过存活检测。
五、波次塔防,机器人按波数变量推进
特殊闯关不靠MonGen.txt固定刷,用机器人变量记录波数。以CW01闯关图为例:
[@TowerWaveCheck]
IF
CheckMapHumanCountCW01<1
ACT
BREAK
IF
EQUALG$CWTown0
ACT
MONGENEXCW013030半兽人810
SETG$CWTown1
SENDMSG6CW01第一波半兽人已出,清完等5秒进波
BREAK
IF
EQUALG$CWTown1
ACT
CheckMapMonCountCW01半兽人0
DELAY5000
MONGENEXCW013030红野猪812
MONGENEXCW013232黑野猪86
INCG$CWTown1
SENDMSG6CW01第二波野猪已出
BREAK
IF
EQUALG$CWTown2
ACT
CheckMapMonCountCW01红野猪0
CheckMapMonCountCW01黑野猪0
DELAY5000
MONGENEXCW013030祖玛弓箭手88
MONGENEXCW013434祖玛教主0129
INCG$CWTown1
SENDMSG6CW01第三波祖玛加教主已出
BREAK
JS版把G变量换成全局对象:
varWave={cw01:0};
functionTowerWave(map){
if(GetMapHumanCount(map)<1)return;
if(Wave.cw01===0){
SpawnMonsterEx(map3030"半兽人"8100);
Wave.cw01=1;return;
}
if(Wave.cw01=1&&GetMapMonCount(map"半兽人")=0){
Sleep(5000);
SpawnMonsterEx(map3030"红野猪"8120);
SpawnMonsterEx(map3232"黑野猪"860);
Wave.cw01=2;return;
}
if(Wave.cw01=2&&GetMapMonCount(map"红野猪")=0&&GetMapMonCount(map"黑野猪")===0){
Sleep(5000);
SpawnMonsterEx(map3030"祖玛弓箭手"880);
SpawnMonsterEx(map3434"祖玛教主"0129);
Wave.cw01=3;return;
}
}
波次锁用全局变量,进图重置可用进入地图触发把Wave.cw01设0;不要机器人每次都从1开始,否则清怪瞬间会反复刷。
六、多Boss轮换,按星期或按计数器
特殊世界Boss可用机器人按星期几轮换,避免每天同怪。AutoRun写:
AutoRunNPCRUNONWEEK1:20:00@WeekBossA
AutoRunNPCRUNONWEEK3:20:00@WeekBossB
AutoRunNPCRUNONWEEK5:20:00@WeekBossC
[@WeekBossA]
IF
CheckMonMapWB01祖玛教主0
ACT
MONGENEXWB015050祖玛教主0129
SENDMSG1周一世界Boss祖玛教主已出WB01
BREAK
[@WeekBossB]
IF
CheckMonMapWB01赤月恶魔0
ACT
MONGENEXWB015050赤月恶魔0129
SENDMSG1周三世界Boss赤月恶魔已出WB01
BREAK
[@WeekBossC]
IF
CheckMonMapWB01雪域教主0
ACT
MONGENEXWB015050雪域教主0129
SENDMSG1周五世界Boss雪域教主已出WB01
BREAK
JS用星期变量更灵活:
functionWeekRotateBoss(map){
vard=GetSystemTime().weekday;
varname="祖玛教主";
if(d===1)name="祖玛教主";
elseif(d===3)name="赤月恶魔";
elseif(d===5)name="雪域教主";
elsereturn;
if(GetMapMonCount(mapname)===0){
SpawnMonsterEx(map5050name0129);
SendMsg(1name+"已出"+map);
}
}
七、无人地图自动清怪,省资源
机器人总控里加空图清理,按人数等于0清全部或只清活动怪:
[@EmptyMapClear]
IF
CheckMapHumanCountTW010
ACT
ClearMapMonTW01
BREAK
IF
CheckMapHumanCountCW010
ACT
ClearMapMonCW01
SETG$CWTown0
BREAK
IF
CheckMapHumanCountXM010
ACT
ClearMapMonXM01
BREAK
JS写法:
functionClearEmpty(mapList){
for(vari=0;i<mapList.length;i++){
if(GetMapHumanCount(mapList[i])===0){
ClearMapMonsters(mapList[i]);
}
}
}
ClearEmpty(["TW01""CW01""XM01""BW01"]);
活动图清完顺手把波次变量、Boss标记重置,避免下次进图直接出第三波。
八、防叠怪与随机点
特殊刷怪最怕所有怪同一个坐标。MONGENEX给范围参数,例如中心30、范围10,引擎会在30附近随机;JS可自己算随机坐标:
functionRandSpawn(mapcxcyradiusmoncountcolor){
for(vari=0;i<count;i++){
varrx=cx+Rand(-radiusradius);
varry=cy+Rand(-radiusradius);
if(CanWalk(maprxry)){
SpawnMonsterEx(maprxrymon01color);
}else{
SpawnMonsterEx(mapcxcymonradius1color);
}
}
}
传统脚本没CanWalk就直接给范围刷,不要把range写0还一次刷50只。单点建议不超过5只,多点分发更稳。
九、机器人性能与排错
机器人SEC1全图跑复杂刷怪会拖M2,特殊脚本按5秒、10秒分级:普通补怪10秒,塔防波次检测5秒,整点Boss用RUNONDAY不靠轮询。地图无人清场可1分钟一次,别5秒一次全图清。
排错顺序:
1.不刷怪:看怪物名是否和Monster.txt完全一致,雪域卫士、祖玛教主、赤月恶魔错一字不刷;看JS机器人是否加载、AutoRun标签是否生效。
2.叠怪:检查是否既有MonGen.txt固定刷又有机器人补怪,活动图建议关MonGen.txt对应行,只走机器人。
3.补怪慢:CheckMonMap数量阈值写错,比如要求小于6才补,但地图常驻8只,永远不补;把存活判断和上限判断分开。
4.人数不生效:CheckMapHumanCount地图名要和MapInfo、进入触发一致,用数字编号就全用编号,用字母编号就全用字母。
5.波次乱跳:全局波次变量没重置,玩家离开未清场;进入地图触发设波次0,机器人空图清理设0。
6.卡坐标:随机点落到墙里,给MONGENEX范围而不是固定点;JS自算随机后最好用可行走判断,没有就用卸围重刷。
7.定时Boss不出:RUNONDAY/RUNONWEEK时间格式不对,或机器人管理脚本标签名和AutoRun不一致;先手动GOTO标签测一次。
十、完整简版总控可直接抄
AutoRunRobot.txt:
AutoRunNPCSEC10@JSMonMaster
RobotManage.txt:
[@JSMonMaster]
ACT
GOTO@SnowFieldAlive
GOTO@TowerDynGen
GOTO@WeekBossRoute
GOTO@EmptyMapClear
BREAK
[@SnowFieldAlive]
IF
CheckMonMapXM01雪域教主0
ACT
MONGENEXXM014545雪域教主0129
SENDMSG1雪域教主已刷新XM01
BREAK
IF
CheckMonMapXM01雪域卫士6
ELSEACT
BREAK
IF
CheckMonMapXM01雪域卫士<3
ACT
MONGENEXXM013060雪域卫士103
BREAK
[@TowerDynGen]
IF
CheckMapHumanCountTW01<1
ACT
BREAK
IF
CheckMapHumanCountTW01<3
ACT
CheckMapMonCountTW01<10
MONGENEXTW012040骷髅1010
BREAK
IF
CheckMapHumanCountTW01>=3
ACT
CheckMapMonCountTW01<30
MONGENEXTW012040骷髅1015
MONGENEXTW012545骷髅长枪108
BREAK
[@WeekBossRoute]
IF
CheckMonMapWB01祖玛教主0
ACT
MONGENEXWB015050祖玛教主0129
SENDMSG1周祖玛已出WB01
BREAK
[@EmptyMapClear]
IF
CheckMapHumanCountTW010
ACT
ClearMapMonTW01
BREAK
IF
CheckMapHumanCountXM010
ACT
ClearMapMonXM01
BREAK
JS插件若支持函数文件,把FillMon、DynCount、RandSpawn、WeekRotateBoss、ClearEmpty挂到10秒定时器里调用,比纯标签好维护。改完先在空图跑存活补怪,再开人数动态和波次,最后接整点Boss与夜间狂暴,避免一次全开不好定位。

