JS引擎下做“特殊”刷怪,重点不是单纯定时MonGen,而是把机器人定时器、地图人数、地图怪物数、时间段、波次变量、无人清场合在一起。下面按可直接改的实例写,命令名以本服JS封装为准,若你的JS插件用MonGen就替换SpawnMonster,用CheckMonMap就替换CheckMapMonCount,用CheckHum就替换CheckMapHumanCount。
一、机器人定时器入口
AutoRun按秒跑总控,别把所有地图都放1秒,特殊刷怪建议5到10秒一次:
AutoRun NPC SEC 5 @JSMonMaster
RobotManage里用总控分发,避免每个地图单独建定时器:
[@JSMonMaster]
IF
ACT
GOTO @SnowFieldAlive
GOTO @TowerWaveCheck
GOTO @NightBerserk
GOTO @EmptyMapClear
BREAK
二、按存活数量补怪,不重复刷
普通MonGen定时刷容易叠怪,特殊做法先查地图某怪数量,再决定补不补。以雪域子图XM01为例,要求祖玛级雪怪始终保持3到6只:
[@SnowFieldAlive]
IF
CheckMonMap XM01 雪域卫士 3
ACT
BREAK
IF
CheckMonMap XM01 雪域卫士 6
ELSEACT
BREAK
IF
CheckMonMap XM01 雪域卫士 < 3
ACT
MONGENEX XM01 30 60 雪域卫士 8 3
SENDMSG 0 雪域卫士数量不足,已补充至近战点
BREAK
如果只要求“没有才刷一只”,把数量判断改成等于0:
[@SnowBossOnce]
IF
CheckMonMap XM01 雪域教主 0
ACT
MONGENEX XM01 45 45 雪域教主 0 1 29
SENDMSG 1 雪域教主已降临XM01,全服前往
BREAK
JS函数化写法可包装成按参数补:
function FillMon(map, mon, min, max, range, count, color){
var cur = GetMapMonCount(map, mon);
if(cur >= min) return;
if(cur >= max) return;
SpawnMonsterEx(map, rangeX1, rangeY1, mon, range, max-cur, color);
}
实际把rangeX1、rangeY1换成随机区间或固定中心即可。
三、按地图人数动态扩量
特殊活动图按人多少刷,单人少刷、多人叠加。以塔图TW01为例:
[@TowerDynGen]
IF
CheckMapHumanCount TW01 < 1
ACT
BREAK
IF
CheckMapHumanCount TW01 < 3
ACT
CheckMapMonCount TW01 < 10
MONGENEX TW01 20 40 骷髅 10 10
BREAK
IF
CheckMapHumanCount TW01 < 8
ACT
CheckMapMonCount TW01 < 25
MONGENEX TW01 20 40 骷髅 10 15
MONGENEX TW01 25 45 骷髅长枪 10 5
BREAK
IF
CheckMapHumanCount TW01 >= 8
ACT
CheckMapMonCount TW01 < 40
MONGENEX TW01 20 40 骷髅 10 20
MONGENEX TW01 25 45 骷髅长枪 10 10
MONGENEX TW01 30 50 幽灵 10 6
BREAK
JS可写成按人数算目标数:
function DynCount(base, perPlayer, online, cap){
var n = base + Math.floor(online * perPlayer);
if(n > cap) n = cap;
return n;
}
var human = GetMapHumanCount("TW01");
var target = DynCount(10, 2, human, 40);
var cur = GetMapMonCount("TW01", "骷髅");
if(cur < target){
SpawnMonsterEx("TW01", 20, 40, "骷髅", 10, target-cur, 0);
}
这样在线波动时不会一下子刷满,也不会因为机器人5秒一次持续叠怪。
四、分时段特殊刷法,夜间狂暴、白天常规
用系统时间切行为。JS取小时:
function HourBoss(){
var h = GetSystemTime().hour;
if(h >= 0 && h < 6){
// 夜间狂暴
if(GetMapMonCount("BW01","狂暴赤月")==0){
SpawnMonsterEx("BW01", 320, 320, "狂暴赤月", 0, 1, 253);
SendMsg(1,"夜间狂暴赤月降临BW01");
}
} else {
if(GetMapMonCount("BW01","赤月恶魔")==0){
SpawnMonsterEx("BW01", 320, 320, "赤月恶魔", 0, 1, 0);
SendMsg(1,"常规赤月恶魔已刷新BW01");
}
}
}
传统脚本可用CHECKTIME做分时段,例如0点到6点刷狂暴怪、白天刷普通怪,机器人每60秒判一次,避免整点只触发一次错过存活检测。
五、波次塔防,机器人按波数变量推进
特殊闯关不靠MonGen.txt固定刷,用机器人变量记录波数。以CW01闯关图为例:
[@TowerWaveCheck]
IF
CheckMapHumanCount CW01 < 1
ACT
BREAK
IF
EQUAL G$CWTown 0
ACT
MONGENEX CW01 30 30 半兽人 8 10
SET G$CWTown 1
SENDMSG 6 CW01第一波半兽人已出,清完等5秒进波
BREAK
IF
EQUAL G$CWTown 1
ACT
CheckMapMonCount CW01 半兽人 0
DELAY 5000
MONGENEX CW01 30 30 红野猪 8 12
MONGENEX CW01 32 32 黑野猪 8 6
INC G$CWTown 1
SENDMSG 6 CW01第二波野猪已出
BREAK
IF
EQUAL G$CWTown 2
ACT
CheckMapMonCount CW01 红野猪 0
CheckMapMonCount CW01 黑野猪 0
DELAY 5000
MONGENEX CW01 30 30 祖玛弓箭手 8 8
MONGENEX CW01 34 34 祖玛教主 0 1 29
INC G$CWTown 1
SENDMSG 6 CW01第三波祖玛加教主已出
BREAK
JS版把G变量换成全局对象:
var Wave = { cw01: 0 };
function TowerWave(map){
if(GetMapHumanCount(map) < 1) return;
if(Wave.cw01 === 0){
SpawnMonsterEx(map,30,30,"半兽人",8,10,0);
Wave.cw01 = 1; return;
}
if(Wave.cw01 = 1 && GetMapMonCount(map,"半兽人")=0){
Sleep(5000);
SpawnMonsterEx(map,30,30,"红野猪",8,12,0);
SpawnMonsterEx(map,32,32,"黑野猪",8,6,0);
Wave.cw01 = 2; return;
}
if(Wave.cw01 = 2 && GetMapMonCount(map,"红野猪")=0 && GetMapMonCount(map,"黑野猪")===0){
Sleep(5000);
SpawnMonsterEx(map,30,30,"祖玛弓箭手",8,8,0);
SpawnMonsterEx(map,34,34,"祖玛教主",0,1,29);
Wave.cw01 = 3; return;
}
}
波次锁用全局变量,进图重置可用进入地图触发把Wave.cw01设0;不要机器人每次都从1开始,否则清怪瞬间会反复刷。
六、多Boss轮换,按星期或按计数器
特殊世界Boss可用机器人按星期几轮换,避免每天同怪。AutoRun写:
AutoRun NPC RUNONWEEK 1:20:00 @WeekBossA
AutoRun NPC RUNONWEEK 3:20:00 @WeekBossB
AutoRun NPC RUNONWEEK 5:20:00 @WeekBossC
[@WeekBossA]
IF
CheckMonMap WB01 祖玛教主 0
ACT
MONGENEX WB01 50 50 祖玛教主 0 1 29
SENDMSG 1 周一世界Boss祖玛教主已出WB01
BREAK
[@WeekBossB]
IF
CheckMonMap WB01 赤月恶魔 0
ACT
MONGENEX WB01 50 50 赤月恶魔 0 1 29
SENDMSG 1 周三世界Boss赤月恶魔已出WB01
BREAK
[@WeekBossC]
IF
CheckMonMap WB01 雪域教主 0
ACT
MONGENEX WB01 50 50 雪域教主 0 1 29
SENDMSG 1 周五世界Boss雪域教主已出WB01
BREAK
JS用星期变量更灵活:
function WeekRotateBoss(map){
var d = GetSystemTime().weekday;
var name = "祖玛教主";
if(d === 1) name = "祖玛教主";
else if(d === 3) name = "赤月恶魔";
else if(d === 5) name = "雪域教主";
else return;
if(GetMapMonCount(map, name) === 0){
SpawnMonsterEx(map,50,50,name,0,1,29);
SendMsg(1, name+"已出"+map);
}
}
七、无人地图自动清怪,省资源
机器人总控里加空图清理,按人数等于0清全部或只清活动怪:
[@EmptyMapClear]
IF
CheckMapHumanCount TW01 0
ACT
ClearMapMon TW01
BREAK
IF
CheckMapHumanCount CW01 0
ACT
ClearMapMon CW01
SET G$CWTown 0
BREAK
IF
CheckMapHumanCount XM01 0
ACT
ClearMapMon XM01
BREAK
JS写法:
function ClearEmpty(mapList){
for(var i=0;i<mapList.length;i++){
if(GetMapHumanCount(mapList[i]) === 0){
ClearMapMonsters(mapList[i]);
}
}
}
ClearEmpty(["TW01","CW01","XM01","BW01"]);
活动图清完顺手把波次变量、Boss标记重置,避免下次进图直接出第三波。
八、防叠怪与随机点
特殊刷怪最怕所有怪同一个坐标。MONGENEX给范围参数,例如中心30、范围10,引擎会在30附近随机;JS可自己算随机坐标:
function RandSpawn(map, cx, cy, radius, mon, count, color){
for(var i=0;i<count;i++){
var rx = cx + Rand(-radius, radius);
var ry = cy + Rand(-radius, radius);
if(CanWalk(map, rx, ry)){
SpawnMonsterEx(map, rx, ry, mon, 0, 1, color);
} else {
SpawnMonsterEx(map, cx, cy, mon, radius, 1, color);
}
}
}
传统脚本没CanWalk就直接给范围刷,不要把range写0还一次刷50只。单点建议不超过5只,多点分发更稳。
九、机器人性能与排错
机器人SEC 1全图跑复杂刷怪会拖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:
AutoRun NPC SEC 10 @JSMonMaster
RobotManage.txt:
[@JSMonMaster]
ACT
GOTO @SnowFieldAlive
GOTO @TowerDynGen
GOTO @WeekBossRoute
GOTO @EmptyMapClear
BREAK
[@SnowFieldAlive]
IF
CheckMonMap XM01 雪域教主 0
ACT
MONGENEX XM01 45 45 雪域教主 0 1 29
SENDMSG 1 雪域教主已刷新XM01
BREAK
IF
CheckMonMap XM01 雪域卫士 6
ELSEACT
BREAK
IF
CheckMonMap XM01 雪域卫士 < 3
ACT
MONGENEX XM01 30 60 雪域卫士 10 3
BREAK
[@TowerDynGen]
IF
CheckMapHumanCount TW01 < 1
ACT
BREAK
IF
CheckMapHumanCount TW01 < 3
ACT
CheckMapMonCount TW01 < 10
MONGENEX TW01 20 40 骷髅 10 10
BREAK
IF
CheckMapHumanCount TW01 >= 3
ACT
CheckMapMonCount TW01 < 30
MONGENEX TW01 20 40 骷髅 10 15
MONGENEX TW01 25 45 骷髅长枪 10 8
BREAK
[@WeekBossRoute]
IF
CheckMonMap WB01 祖玛教主 0
ACT
MONGENEX WB01 50 50 祖玛教主 0 1 29
SENDMSG 1 周祖玛已出WB01
BREAK
[@EmptyMapClear]
IF
CheckMapHumanCount TW01 0
ACT
ClearMapMon TW01
BREAK
IF
CheckMapHumanCount XM01 0
ACT
ClearMapMon XM01
BREAK
JS插件若支持函数文件,把FillMon、DynCount、RandSpawn、WeekRotateBoss、ClearEmpty挂到10秒定时器里调用,比纯标签好维护。改完先在空图跑存活补怪,再开人数动态和波次,最后接整点Boss与夜间狂暴,避免一次全开不好定位。
传奇JS引擎特殊机器人刷怪脚本:存活检测分时段按人数波次清场实例
来源:
作者:
点击:

