传奇服务端检测指定地图指定怪物数量的脚本写法

来源: 作者: 点击:
传奇服务端中,检测指定地图内指定怪物数量的脚本,核心是调用服务端自带的怪物查询函数,搭配地图ID、怪物ID定位,再通过变量存储数量、判断逻辑执行后续操作,以下是详细可直接复用的写法及拆解,适配主流传奇服务端引擎。
首先明确脚本编写的核心前提,需获取两个关键参数:目标地图ID和目标怪物ID,这两个参数是脚本精准定位的基础,缺一不可。地图ID可通过服务端的地图配置文件查询,通常在MapInfo.txt或类似命名的配置文件中,每个地图对应唯一的数字ID;怪物ID可在怪物配置文件中查找,一般为MonGen.txt或Monster.txt,每个怪物同样有专属数字ID,需准确记录,避免混淆不同怪物或地图。
脚本的核心逻辑的是“查询数量—存储数量—按需执行操作”,不同引擎的函数命名略有差异,但核心语法一致,以下分主流引擎(GOM、GEE、HERO)分别给出完整脚本示例,均无需额外插件,直接复制到服务端脚本文件(通常为QFunction-0.txt、AutoRun.txt等)即可生效,同时标注关键步骤的作用,方便根据实际需求修改。
GOM引擎脚本写法(最常用,适配多数服务端):
//检测指定地图(地图ID:100)内指定怪物(怪物ID:50)的数量
[@检测怪物数量]
#ACT
MapMonCount 100 50 //调用地图怪物数量查询函数,参数1为地图ID,参数2为怪物ID
SetVar HMonCount %MapMonCount% //将查询到的怪物数量存储到变量HMonCount中,方便后续调用
#IF
VarEqual HMonCount 0 //判断怪物数量为0的情况
#ACT
SendMsg 6 该地图指定怪物已全部清除 //向玩家发送提示信息,6为消息颜色代码
#ELSEIF
VarLess HMonCount 5 //判断怪物数量小于5的情况
#ACT
SendMsg 6 该地图指定怪物剩余不足5只,请尽快清理
#ELSE
SendMsg 6 该地图指定怪物剩余%HMonCount%只,仍需继续清理
//后续可添加额外操作,如怪物数量为0时刷新怪物、触发任务等
//示例:怪物数量为0时,在指定坐标刷新10只目标怪物
#IF
VarEqual HMonCount 0
#ACT
MonGen 100 50 10 300 300 //参数依次为:地图ID、怪物ID、刷新数量、X坐标、Y坐标
SendMsg 6 怪物已刷新,请前往清理
上述脚本中,MapMonCount是GOM引擎的核心查询函数,直接返回指定地图指定怪物的当前存活数量,无需额外定义;SetVar用于存储变量,变量名可自定义(如HMonCount可改为MonsterNum),但需保证全程一致,避免变量混淆;VarEqual、VarLess是判断变量的常用命令,可根据需求修改判断条件,如VarGreater(大于)、VarEqualOrGreater(大于等于)等。
GEE引擎脚本写法(适配GEE及衍生引擎,语法略有差异):
//检测指定地图(地图ID:200)内指定怪物(怪物ID:80)的数量
[@CheckMonsterNum]
#ACT
GetMapMonCount 200 80 //GEE引擎查询函数,参数顺序与GOM一致,函数名多了Get前缀
SaveVar MonNum %GetMapMonCount% //存储怪物数量到变量MonNum
#IF
CheckVar MonNum = 0
#ACT
SendMsg 0 【提示】目标地图指定怪物已全部清除,任务完成! //0为全服广播颜色代码
AddExp 10000 //给触发脚本的玩家增加经验,可根据需求删除
#ELSE
SendMsg 0 【提示】目标地图指定怪物剩余%MonNum%只,请继续清除
GEE引擎与GOM引擎的核心区别在于查询函数名,以及变量判断的命令写法(CheckVar替代VarEqual),其余逻辑完全一致,可根据自己的服务端引擎选择对应函数,若不确定引擎类型,可查看服务端根目录下的引擎配置文件,或咨询服务端搭建人员。
HERO引擎脚本写法(适配老版传奇服务端,语法更简洁):
//检测指定地图(地图ID:300)内指定怪物(怪物ID:100)的数量
[@MonsterCountCheck]
#ACT
MonCount 300 100 //HERO引擎查询函数,直接简写为MonCount
SetHVar MyMonCount %MonCount% //存储到全局变量MyMonCount,支持跨脚本调用
#IF
HVarEqual MyMonCount 0
#ACT
SendMsg 7 怪物已清空,可前往领取奖励 //7为蓝色消息颜色
OpenNPC 1001 //打开指定NPC,用于领取奖励,可替换为其他操作
#ELSEIF
HVarGreater MyMonCount 10
#ACT
SendMsg 7 怪物数量较多,建议组队清理
HERO引擎的变量分为本地变量和全局变量,SetHVar设置的是全局变量,可在其他脚本中通过GetHVar调用,适合需要跨场景检测怪物数量的需求;若仅在当前脚本中使用,可改用SetVar设置本地变量,语法更简洁。
除了上述完整脚本示例,还有几个关键注意点,确保脚本正常运行:
1. 地图ID和怪物ID必须准确,若ID错误,脚本将无法查询到怪物数量,导致判断逻辑失效。可通过服务端配置文件逐一核对,避免因ID混淆(如不同地图的同名怪物、同名地图的不同ID)导致脚本出错。
2. 函数调用的参数顺序不可颠倒,所有引擎的查询函数,第一个参数均为地图ID,第二个参数为怪物ID,若顺序颠倒,将查询到错误的结果(如查询指定怪物所在的地图数量,而非指定地图的怪物数量)。
3. 变量名可自定义,但需遵循服务端脚本命名规则,不可包含特殊字符,且全程保持一致,如在SetVar中定义为HMonCount,后续判断时就不能写为HMonNum,否则会导致变量无法识别。
4. 消息颜色代码可根据需求修改,不同引擎的颜色代码一致,常用代码:0(黑色)、1(红色)、2(绿色)、3(黄色)、6(紫色)、7(蓝色),可根据服务端实际显示效果调整,避免颜色过浅导致玩家无法看到提示。
5. 后续操作可灵活扩展,除了发送提示信息,还可添加怪物刷新、经验奖励、道具发放、任务触发、传送地图等操作,只需在对应的判断条件下添加对应的脚本命令即可。例如,当怪物数量为0时,触发传送命令,将玩家传送到指定地图:#ACT MoveMap 400 350 350(参数为目标地图ID、X坐标、Y坐标)。
6. 脚本编写完成后,需保存到对应的脚本文件中,重启服务端生效。若脚本未生效,可检查脚本文件是否正确(如是否保存到QFunction-0.txt而非其他文件)、脚本语法是否有误(如缺少#ACT、#IF等关键字,或命令拼写错误)、地图ID和怪物ID是否正确。
对于部分特殊需求,如检测多个地图的同一怪物数量、检测同一地图的多个怪物数量,可在此基础上扩展脚本。例如,检测两个地图的同一怪物数量,可分别调用两次查询函数,存储到不同变量中,再进行判断:
//检测地图100和地图200内怪物ID50的总数量
[@CheckMultiMapMon]
#ACT
MapMonCount 100 50
SetVar MonCount1 %MapMonCount%
MapMonCount 200 50
SetVar MonCount2 %MapMonCount%
SetVar TotalMon %MonCount1%+%MonCount2% //计算两个地图的怪物总数量
SendMsg 6 两个地图指定怪物总数量为%TotalMon%只
若需要检测同一地图的多个怪物数量,可依次查询每个怪物的ID,分别存储变量,再根据需求判断单个怪物数量或总数量。
另外,部分服务端支持自定义函数,若默认的查询函数无法满足需求,可联系服务端开发者添加自定义查询命令,或通过脚本组合实现复杂的检测逻辑。但多数情况下,上述默认函数已能满足日常检测需求,无需额外修改服务端核心配置。
总结来说,传奇服务端检测指定地图指定怪物数量的脚本,核心是掌握对应引擎的查询函数,获取准确的地图ID和怪物ID,通过变量存储数量,再搭配判断命令执行后续操作。不同引擎的语法差异较小,只需替换查询函数名和判断命令,即可适配不同服务端,脚本可直接复制复用,修改关键参数即可满足自身需求。