在运营传奇私人服务器时,有时需要监控特定地图的怪物数量 —— 比如检查石墓七层的白野猪是不是刷够了,或者确认蜈蚣洞的黑色恶蛆有没有被刷完。这时候就需要写个脚本自动检测,不用 GM 手动跑到地图里去数。下面就说清楚这种脚本的写法,从获取地图和怪物信息,到统计数量、输出结果,一步步讲明白。
先搞懂 “基础信息”:地图和怪物的 “身份证”
每个地图和怪物在服务端里都有专属的 “ID”,就像人的身份证号。比如蜈蚣洞的地图 ID 可能是 301,石墓七层是 402,这些数据存在服务端的 “MapInfo.txt” 文件里,打开就能查到。怪物的 ID 也一样,白野猪可能是 1008,黑色恶蛆是 1010,在 “Monster.txt” 里能找到对应名称和 ID 的对照表。
脚本首先要 “认识” 这两个 ID。比如想检测石墓七层(地图 ID402)的白野猪(怪物 ID1008)数量,就要在脚本里明确写下这两个数值:
MapID = 402 ' 石墓七层的地图 ID
MonsterID = 1008 ' 白野猪的怪物 ID
如果记不住具体 ID,也可以用名称模糊匹配。比如用 “GetMapIDByName ("石墓七层")” 命令自动获取地图 ID,用 “GetMonsterIDByName ("白野猪")” 获取怪物 ID,写成:
MapID = GetMapIDByName ("石墓七层")
MonsterID = GetMonsterIDByName ("白野猪")
这样即使换了服务端,只要地图和怪物名称没变,脚本也能正常工作。
核心步骤:遍历地图里的所有怪物并计数
服务端里的怪物信息存在 “当前地图怪物列表” 里,就像一个实时更新的名单。脚本需要逐个查看名单上的怪物,判断是不是目标怪物,然后统计数量。
第一步是 “获取地图里的所有怪物”。用 “GetMonsterList (MapID)” 命令能得到该地图所有怪物的 ID 列表,比如返回的是 “1008,1008,1010,1008”,代表有 3 只白野猪和 1 只黑色恶蛆。
第二步是 “循环检查并计数”。用 For 循环逐个读取列表里的怪物 ID,和目标 MonsterID 对比,如果一致就把计数器加 1。写成:
MonsterList = GetMonsterList (MapID) ' 获取列表
Count = 0 ' 计数器初始为 0
For Each ID In MonsterList ' 逐个检查
If ID = MonsterID Then
Count = Count + 1 ' 符合条件就加 1
End If
Next
这样循环结束后,Count 的值就是目标怪物的数量了。比如上面的例子,循环结束后 Count 会等于 3,也就是石墓七层有 3 只白野猪。
还要处理 “特殊情况”:如果地图里没有怪物,列表会是空的,这时候 Count 保持 0;如果地图 ID 不存在(比如输错了),命令会返回错误,需要加个判断:
If MapID = 0 Then
MsgBox "地图不存在"
ExitScript ' 退出脚本
End If
确保脚本不会因为无效地图而报错。
输出结果:让检测结果能用起来
计数完成后,需要把结果 “展示” 出来,方便 GM 查看或用于其他功能。常见的输出方式有三种:
第一种是 “在服务端控制台显示”。用 “Print ("石墓七层的白野猪数量:" & Count)” 命令,运行脚本后,服务器控制台会显示具体数字,适合 GM 实时监控。
第二种是 “发送给指定玩家”。如果想让某个管理员知道,可以用 “SendMsgToPlayer (玩家 ID, "当前数量:" & Count)”,玩家聊天框里会收到提示。
第三种是 “用于自动触发事件”。比如当白野猪数量少于 2 只时,自动刷新怪物。这时候可以加个判断:
If Count < 2 Then
Call RefreshMonster (MapID, MonsterID, 2) ' 刷新 2 只
Print ("已自动补充白野猪至 2 只")
End If
这样脚本不仅能检测数量,还能自动维护怪物数量,不用 GM 手动操作。
进阶功能:定时检测和多目标监控
如果需要长期监控,可以加 “定时循环”。用 “SetTimer” 命令设置每隔 5 分钟检测一次,写成:
Do
' 上面的计数代码放这里
Print ("当前时间:" & Time & ",数量:" & Count)
Delay 300000 ' 等待 5 分钟(300000 毫秒)
Loop
这样脚本会一直运行,每 5 分钟更新一次数量,适合长时间开服时使用。
如果要同时检测多个怪物,比如既查白野猪又查黑色恶蛆,可以复制计数部分的代码,改一下 MonsterID 即可:
' 检测白野猪
MonsterID1 = 1008
Count1 = 0
For Each ID In MonsterList
If ID = MonsterID1 Then Count1 = Count1 + 1
Next
' 检测黑色恶蛆
MonsterID2 = 1010
Count2 = 0
For Each ID In MonsterList
If ID = MonsterID2 Then Count2 = Count2 + 1
Next
Print ("白野猪:" & Count1 & ",黑色恶蛆:" & Count2)
这样就能同时得到两种怪物的数量了。
测试和调整:让脚本更可靠
写好后在测试服里 “实际跑一遍”。先手动去目标地图刷几只怪物,然后运行脚本,看计数是否准确。比如刷 3 只白野猪,脚本显示 3 就是对的;杀 1 只后,显示 2 就是正常的。
如果计数不准,可能是 “怪物 ID 对应错了”,回去查 “Monster.txt” 确认 ID;也可能是 “地图 ID 不对”,重新用 “GetMapIDByName” 命令获取正确 ID。
另外,不同引擎的命令可能略有差异。GOM 引擎用 “GetMonsterList”,GEE 引擎可能叫 “GetMapMonsters”,如果命令无效,查一下服务端对应的引擎文档,替换成正确的命令名称即可。
比如有个 1.76 复古服的 GM,用这个脚本监控祖玛寺庙的祖玛卫士数量,设置成数量少于 5 只就自动刷新,解决了玩家抱怨 “抢不到怪” 的问题。脚本每 3 分钟检测一次,控制台实时显示数量,运行半年都很稳定。
其实写这种检测脚本,核心就是 “找到目标 - 逐个核对 - 统计结果” 这三步。只要搞清楚地图和怪物的 ID,用好循环和判断命令,就能轻松实现功能。无论是手动查看数量,还是自动触发刷新,都能让服务器管理更方便,玩家体验也更顺畅。

