不少私人服务器 GM 在设置特殊装备效果时会遇到这样的问题:明明想让 “始神≌领域・君” 这件装备只在被怪物打时触发无敌,结果被玩家攻击也会触发,破坏了 PK 平衡。其实问题出在脚本没有区分 “攻击者是怪物还是玩家”,只要加上判断攻击来源的条件,就能轻松解决。下面就一步步说清楚怎么改,让装备效果按预期生效。
先搞懂 “攻击来源” 的区别:怪物和玩家的 “身份码”
在传奇服务端里,怪物和玩家有本质区别 —— 玩家有 “角色 ID” 且属于某个行会,而怪物只有 “怪物 ID” 且不属于任何玩家阵营。脚本里可以通过两个关键命令判断攻击者身份:
一个是 “CheckTargetType”,这个命令能返回攻击者的类型:返回 1 代表是玩家,返回 0 代表是怪物。比如被玩家砍了,这个命令就会告诉脚本 “攻击者是 1(玩家)”;被白野猪撞了,就返回 “0(怪物)”。
另一个是 “CheckTargetNPC”,直接判断攻击者是不是 NPC(怪物属于 NPC 的一种),返回 1 代表是怪物,返回 0 代表是玩家。两种命令都能用,选一个自己顺手的就行。
原来的脚本没有这层判断,不管谁攻击,只要戴了装备且随机数符合条件,就触发无敌。就像一个自动门,不管是人还是猫经过都开门,现在要给它装个传感器,只对猫有反应。
修改核心:给触发条件加 “怪物过滤器”
想让效果只对怪物生效,需要在原来的判断条件里加一层 “攻击者必须是怪物” 的限制。具体有两种改法,效果一样,选哪种都可以。
第一种用 “CheckTargetType” 命令:
在原来的 “#if” 下面加一行 “CheckTargetType 0”,代表只接受 “类型为 0(怪物)” 的攻击。完整代码变成:
#if
checkitemw 始神≌领域・君;检查是否佩戴目标装备
random 5 ;5% 概率触发
CheckTargetType 0 ; 攻击者是怪物(0 代表怪物,1 代表玩家)
#act
ChangeModeEx 14 10
ChangeModeEx 1 2
SENDMSG 6 你被【<$CURRRTARGETNAME>】攻击了。触发防麻痹效果 10 秒,触发无敌 2 秒!!!
这样一来,只有当攻击者是怪物时,三个条件才会同时满足,进而执行后面的无敌效果。如果是玩家攻击,“CheckTargetType 0” 这一行会判断失败,整个脚本就不会触发。
第二种用 “CheckTargetNPC” 命令,更直接:
把 “CheckTargetType 0” 换成 “CheckTargetNPC”,因为这个命令本身就代表 “攻击者是 NPC(怪物)”,代码变成:
#if
checkitemw 始神≌领域・君
random 5
CheckTargetNPC ; 直接判断攻击者是怪物
#act
...(后面内容不变)
这种写法更简洁,一看就知道是针对怪物的,适合对命令不太熟悉的 GM。
两种方法的区别不大,主要看服务端引擎支持哪种 —— 大部分 GOM、GEE 引擎都兼容这两个命令,要是不确定,两种都试试就行。
还要注意 “目标名称变量” 的细节
原来的脚本里用了 “<$CURRRTARGETNAME>” 显示攻击者名称,这个变量对怪物和玩家都有效,不用修改。比如被 “沃玛教主” 攻击,会显示 “你被【沃玛教主】攻击了”;被玩家 “战神” 攻击时,虽然不会触发无敌,但如果脚本其他地方用到这个变量,依然会显示玩家名字,不影响正常判断。
如果想更严谨,还可以在发送消息时加个判断,比如只在怪物攻击时才显示提示,但一般没必要 —— 因为玩家攻击时脚本根本不会走到 “#act” 这一步,消息自然不会发送。
测试方法:确保修改生效
改完后一定要在游戏里实测,分两步验证:
第一步,找个怪物测试。比如去蜈蚣洞让黑色恶蛆攻击,连续打几十次,看是否有概率触发无敌提示,且人物确实处于无敌状态(怪物打你不掉血)。如果触发正常,说明怪物攻击的逻辑没问题。
第二步,找个玩家测试。让朋友或小号攻击你,不管打多少次,都不应该出现无敌提示,人物也会正常掉血。如果完全没反应,说明玩家攻击的过滤生效了。
如果玩家攻击时依然触发,可能是 “CheckTargetType” 后面的数字写反了(比如写成 1 了),或者命令拼错了(比如写成 “CheckTargeType” 少个字母)。这时候仔细核对命令拼写和参数,一般都能解决。
进阶:还能限制特定怪物触发
如果想进一步细化,比如只让 “赤月恶魔” 这类 BOSS 攻击时触发,可以再加一个 “CheckTargetName” 判断攻击者名称:
#if
checkitemw 始神≌领域・君
random 5
CheckTargetNPC
CheckTargetName 赤月恶魔;只对赤月恶魔生效
#act
...
这样即使其他怪物攻击,也不会触发效果,灵活性更高。
比如有个 1.85 合击服的 GM,用这个方法修改后,“麻痹戒指” 的反伤效果只对怪物有效,玩家 PK 时不会触发,既保留了打 BOSS 的便利性,又没影响 PK 平衡,玩家反馈很好。
其实改这类脚本的核心,就是给原来的条件加一道 “身份过滤门”。原来的脚本像个没有门卫的院子,谁来都开门;加上 “CheckTargetType” 或 “CheckTargetNPC” 后,就只允许怪物进入,玩家会被拦在外面。只要找对判断攻击者身份的命令,改起来并不复杂,几分钟就能搞定。

