当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇JS引擎特殊机器人刷怪脚本:存活检测分时段按人数波次清场实例

热度:
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与夜间狂暴,避免一次全开不好定位。
[顶部]