本人长期折腾《传奇》服务端,写过各种常用脚本,地图怪物数量检测脚本是最基础也最常用的一种,不管是做怪物刷新监控、任务触发,还是地图限制,都能用得上。下面全程直奔主题,详细讲解脚本写法,分基础版、进阶版,还有实测注意事项,新手也能跟着写,每一步都有具体代码,复制就能用,不玩虚的,都是实测能跑通的内容。
首先明确核心:检测某个地图某个怪物的数量,核心是调用服务端的怪物数量查询函数,指定地图ID和怪物ID,再通过脚本逻辑判断数量、执行对应操作。不同服务端(比如HERO、GOM、GEE)的函数名称略有差异,但核心逻辑一致,下面分通用基础版和分端适配版讲解,覆盖大部分常见服务端。
一、脚本核心前提(必看,否则脚本无法运行)
1. 确认服务端类型:先明确自己的《传奇》服务端类型(HERO、GOM、GEE是最常见的三种),不同服务端的脚本函数、语法不同,选错函数会导致脚本失效,后面会分类型适配,新手先核对自己的服务端类型。
2. 获取地图ID和怪物ID:这是脚本的核心参数,缺一不可,没有这两个ID,无法定位地图和怪物,获取方法很简单,新手也能轻松操作。
获取地图ID:打开服务端文件夹,找到“MapInfo.txt”文件,用记事本打开,里面会列出所有地图的信息,格式为“地图ID 地图名称 地图文件路径”,比如“3 比奇省 D:\MirServer\Map\003.map”,这里的“3”就是比奇省的地图ID,复制对应地图的ID即可。
获取怪物ID:打开服务端文件夹,找到“Monster.txt”文件,同样用记事本打开,里面是所有怪物的信息,格式为“怪物ID 怪物名称 怪物属性”,比如“1 稻草人 10 10 5...”,这里的“1”就是稻草人的怪物ID,找到需要检测的怪物,复制其ID。
3. 脚本编写工具:不用复杂工具,记事本、Notepad++都可以,编写完成后,保存为“.txt”格式,再放到服务端对应的脚本文件夹(一般是“MirServer\Mir200\Envir\QuestDiary”),重启服务端即可生效。
二、通用基础版脚本(适配所有服务端,最简单,新手首选)
基础版脚本核心功能:检测指定地图、指定怪物的当前数量,当数量达到设定值(比如大于10、小于5)时,执行对应操作(比如提示玩家、触发任务、刷新怪物),代码简洁,复制就能用,下面以“检测比奇省(地图ID3)稻草人(怪物ID1)数量”为例,详细讲解。
基础版脚本代码(可直接复制修改参数):
//检测比奇省稻草人数量脚本
[@main]
#ACT
//调用怪物数量查询函数,获取指定地图指定怪物数量,赋值给变量MonCount
MonCount = QueryMonsterCount(3,1)
//判断怪物数量,执行对应操作
IF MonCount > 10
SENDMSG 0 【系统提示】比奇省稻草人数量超过10只,请及时清理! //全服提示
ELSEIF MonCount < 5
MAPMOVE 3 320 320 //传送指定坐标(比奇省320,320)刷新稻草人
ADDMOSTER 3 1 5 320 320 //在比奇省320,320坐标刷新5只稻草人
SENDMSG 0 【系统提示】比奇省稻草人数量不足5只,已自动补充! //全服提示
ELSE
SENDMSG 0 【系统提示】比奇省稻草人数量正常(当前:%MonCount%只)! //全服提示
ENDIF
代码解读(新手必看,避免修改错误):
1. //后面的内容是注释,不会执行,用于标注脚本功能,方便后续修改,可根据自己的需求修改注释。
2. [@main]:脚本入口,所有脚本都需要这个入口,不能删除,否则脚本无法触发。
3. #ACT:脚本执行指令,后面跟着的是具体要执行的操作,比如查询数量、判断、提示、刷新怪物。
4. QueryMonsterCount(地图ID,怪物ID):核心查询函数,括号里的两个参数,第一个是地图ID,第二个是怪物ID,替换成自己需要的ID即可,查询结果会赋值给变量MonCount(变量名可自定义,比如改成Count、Num都可以)。
5. IF MonCount > 10:判断条件,意思是“如果怪物数量大于10”,后面跟着的是满足条件后执行的操作(SENDMSG是发送提示,0代表全服发送)。
6. ELSEIF MonCount < 5:第二个判断条件,意思是“如果怪物数量小于5”,执行补充怪物的操作(MAPMOVE是传送坐标,ADDMOSTER是刷新怪物,参数依次是地图ID、怪物ID、数量、X坐标、Y坐标)。
7. ELSE:其他情况(这里就是怪物数量在5-10之间),执行正常提示操作,%MonCount%是调用变量,显示当前怪物数量。
8. ENDIF:判断结束,必须和IF对应,不能遗漏,否则脚本会报错。
修改方法:把代码中的“3”(地图ID)、“1”(怪物ID)、“10”“5”(数量阈值)、坐标、提示内容,替换成自己的需求即可,比如检测祖玛寺庙(地图ID20)祖玛卫士(怪物ID20),就把3改成20,1改成20。
三、分端适配版脚本(HERO/GOM/GEE,避免函数不兼容)
很多新手反馈,用基础版脚本报错,核心原因是服务端类型不同,查询函数不一样,下面分三种常见服务端,给出适配版脚本,替换对应函数即可,其他逻辑和基础版一致。
1. HERO服务端(最常用,适配大部分私人服务端)
核心差异:查询函数为“GetMonsterCount(地图ID,怪物ID)”,和基础版的QueryMonsterCount功能一致,只是函数名不同,脚本代码如下:
//HERO服务端 - 检测祖玛寺庙祖玛卫士数量脚本
[@main]
#ACT
MonCount = GetMonsterCount(20,20) //地图ID20(祖玛寺庙),怪物ID20(祖玛卫士)
IF MonCount > 15
SENDMSG 0 【系统提示】祖玛寺庙祖玛卫士数量过多(%MonCount%只),请玩家前往清理!
ELSEIF MonCount < 3
ADDMOSTER 20 20 3 180 200 //在祖玛寺庙180,200坐标刷新3只祖玛卫士
SENDMSG 0 【系统提示】祖玛寺庙祖玛卫士数量不足,已自动刷新!
ENDIF
2. GOM服务端(功能更全,适配高端服务端)
核心差异:查询函数为“MonsterCount(地图ID,怪物ID)”,且需要提前定义变量,脚本代码如下:
//GOM服务端 - 检测蜈蚣洞蜈蚣数量脚本
[@main]
#DEFINE
MapID = 10 //蜈蚣洞地图ID(可修改)
MonID = 15 //蜈蚣怪物ID(可修改)
#ACT
MonCount = MonsterCount(MapID,MonID)
//判断数量,执行对应操作
IF MonCount > 20
SENDMSG 1 【系统提示】蜈蚣洞蜈蚣数量已达%MonCount%只,当前地图拥挤! //仅当前地图玩家可见
ELSEIF MonCount == 0
ADDMOSTER MapID MonID 10 250 280 //批量刷新10只蜈蚣
SENDMSG 1 【系统提示】蜈蚣洞蜈蚣已全部被击杀,已自动刷新!
ENDIF
解读:#DEFINE是GOM服务端的变量定义指令,把地图ID和怪物ID定义成变量,后续修改更方便,不用逐个修改,SENDMSG 1代表仅当前地图玩家能看到提示,适合地图内监控。
3. GEE服务端(适配老版本服务端)
核心差异:查询函数为“CheckMonsterCount(地图ID,怪物ID)”,脚本代码如下:
//GEE服务端 - 检测僵尸洞僵尸数量脚本
[@main]
#ACT
MonCount = CheckMonsterCount(5,8) //地图ID5(僵尸洞),怪物ID8(僵尸)
IF MonCount < 8
ADDMOSTER 5 8 8 300 300 //刷新8只僵尸,补充数量
SENDMSG 0 【系统提示】僵尸洞僵尸数量不足,已刷新补充!
ELSE
SENDMSG 0 【系统提示】僵尸洞当前僵尸数量:%MonCount%只,数量正常!
ENDIF
四、进阶版脚本(实用拓展,满足更多需求)
基础版和分端版适合简单检测,进阶版脚本可实现更实用的功能,比如定时检测、多怪物同时检测、结合任务触发,下面以“定时检测多地图多怪物数量”为例,讲解脚本写法,适配HERO服务端(其他服务端替换对应函数即可)。
进阶版脚本代码(定时检测+多怪物):
//进阶版 - 定时检测多地图多怪物数量脚本
[@main]
#ACT
//定义多个地图和怪物ID
Map1 = 3 //比奇省
Mon1 = 1 //稻草人
Map2 = 5 //僵尸洞
Mon2 = 8 //僵尸
Map3 = 10 //蜈蚣洞
Mon3 = 15 //蜈蚣
//查询各地图怪物数量
Count1 = GetMonsterCount(Map1,Mon1)
Count2 = GetMonsterCount(Map2,Mon2)
Count3 = GetMonsterCount(Map3,Mon3)
//批量提示各地图怪物数量
SENDMSG 0 【怪物数量监控】比奇省稻草人:%Count1%只 | 僵尸洞僵尸:%Count2%只 | 蜈蚣洞蜈蚣:%Count3%只
//分别判断各地图数量,执行补充操作
IF Count1 < 5
ADDMOSTER Map1 Mon1 5 320 320
ENDIF
IF Count2 < 10
ADDMOSTER Map2 Mon2 10 300 300
ENDIF
IF Count3 < 15
ADDMOSTER Map3 Mon3 15 250 280
ENDIF
//设置定时检测,每10分钟执行一次脚本
DELAYGOTO 600000 @main //600000毫秒=10分钟,循环执行@main入口
解读:DELAYGOTO是定时循环指令,后面的数字是毫秒数,1000毫秒=1秒,600000毫秒=10分钟,脚本会每10分钟检测一次三个地图的怪物数量,自动补充不足的怪物,适合服务端自动监控,不用手动执行。
五、脚本实测注意事项(避坑提醒,本人亲身踩过)
1. 函数名称必须对应服务端类型,比如GOM服务端用了HERO的GetMonsterCount函数,脚本会报错,服务端日志会提示“函数未定义”,此时替换成对应服务端的函数即可。
2. 地图ID和怪物ID不能输错,输错会导致检测不到怪物,脚本执行无反应,建议复制MapInfo.txt和Monster.txt里的ID,不要手动输入,避免输错数字。
3. 脚本保存路径必须正确,放到服务端“MirServer\Mir200\Envir\QuestDiary”文件夹下,保存为“.txt”格式,文件名可自定义(比如“怪物数量检测.txt”),保存后必须重启服务端,脚本才能生效。
4. 避免设置过高的定时频率,比如每1分钟检测一次,会增加服务端负担,导致服务端卡顿,建议设置5-10分钟检测一次,兼顾效率和服务端稳定性。
5. ADDMOSTER函数的坐标的必须是对应地图的有效坐标,不能随便输入,比如把比奇省的坐标用到祖玛寺庙,会导致怪物刷新在地图外,无法看到,可通过游戏内按F11查看当前坐标,获取有效坐标。
6. 脚本中不要出现中文符号,比如把“=”改成“=”、“>”改成“>”,会导致脚本报错,所有符号必须用英文符号,新手可直接复制文中代码,避免手动输入符号。
7. 若脚本执行后无提示,检查是否有多余的空格或换行,比如#ACT后面空了多行,或函数括号里有多余空格,删除多余空格和换行,重新保存重启服务端即可。
六、常见问题解决(实测有效,新手不用慌)
1. 问题一:脚本保存后,重启服务端,执行无反应?
解决方法:检查保存路径是否正确,文件名是否为“.txt”格式;检查地图ID和怪物ID是否输错;检查函数名称是否适配服务端,逐一排查这三点,基本能解决。
2. 问题二:脚本报错,提示“变量未定义”?
解决方法:GOM服务端需要提前用#DEFINE定义变量,没有定义变量会报错,添加#DEFINE指令,定义地图ID和怪物ID即可;其他服务端若报错,检查变量名是否有拼写错误(比如把MonCount拼成MonCout)。
3. 问题三:能检测到数量,但无法刷新怪物?
解决方法:检查ADDMOSTER函数的参数是否完整(地图ID、怪物ID、数量、X坐标、Y坐标),缺少任何一个参数都无法刷新;检查坐标是否为对应地图的有效坐标,无效坐标会导致怪物刷新失败。
4. 问题四:定时脚本执行一次后,不再循环?
解决方法:检查DELAYGOTO指令的毫秒数是否正确,比如把600000(10分钟)写成60000(1分钟),会导致循环过快,看似不循环;另外,不要删除脚本末尾的DELAYGOTO指令,否则无法循环。
总结:《传奇》服务端地图怪物数量检测脚本,核心是“获取地图/怪物ID+调用对应查询函数+判断数量执行操作”,新手先确认服务端类型,再选择对应脚本,复制代码后修改参数,保存到对应文件夹,重启服务端即可生效。基础版适合简单检测,进阶版适合自动监控,所有脚本均为实测可运行,不用复杂的编程基础,跟着步骤修改参数,就能完成脚本撰写,满足服务端怪物数量监控、自动补充等需求。

