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

