当前位置 : 145z游戏站 | 热血传奇 | 技术教程 | 

传奇脚本限定仅怪物攻击触发无敌的修改方法

热度:
当前脚本中`checkitemw始神≌领域·君`只检测佩戴装备,`random5`只控制触发概率,`CHECKTEXTLIST`那一行被分号注释掉了,没有起到任何限制作用。整段判断对攻击来源没有任何区分,因此怪物和人物攻击都会走同一套触发逻辑。要实现“只受怪物攻击触发无敌、受人物攻击无效果”,核心是加入攻击者类型判断,把人物攻击从条件中剔除。

##判断攻击者类型的可用命令

引擎中用于区分攻击来源的命令主要有两类。一类是`CHECKCURRRTARGETFULLNAME`,用于检测当前攻击者的全名是否在指定列表中,但这种方式需要维护人物名单,不适合动态区分怪物和人物。另一类是`CheckAttackType`或`CHECKHITBYMONSTER`这类攻击来源检测命令,不同引擎版本的写法存在差异,需要根据实际使用的引擎包确认命令名称。

在多数主流引擎中,可以使用`CHECKCURRRTARGETFULLNAME`配合怪物名称列表来反向实现:只有当攻击者的名字出现在怪物名称列表中时才触发。但更直接的做法是使用引擎自带的攻击类型判断命令,例如`CheckAttackType0`表示检测本次攻击是否来自怪物,`CheckAttackType1`表示来自人物。具体命令名称和参数需要查阅所用引擎的脚本命令手册,不同版本可能写作`CHECKATTACKTYPE`、`CheckHitByMonster`或`CHECKMONSTERHIT`。

如果引擎支持`CheckAttackType`,脚本结构可以改为在原有条件前增加一行判断,把人物攻击排除掉。

##修改后的脚本结构

在保留原有装备检测和概率控制的基础上,加入攻击来源判断。参考写法如下:

```
#if
checkitemw始神≌领域·君
CheckAttackType0
random5
#act
ChangeModeEx1410
ChangeModeEx12
SENDMSG6你被【<$CURRRTARGETNAME>】攻击了。触发防麻痹效果10秒触发无敌2秒!!!
```

其中`CheckAttackType0`用于限定本次攻击必须来自怪物。如果引擎不支持该命令,可以改用`CHECKCURRRTARGETFULLNAME`配合怪物名称列表的方式,把常见怪物名称写入一个文本文件,再用`CHECKTEXTLIST`判断攻击者是否在列表中。这种方式需要维护怪物名单,新增怪物时要同步更新文件,维护成本较高。

部分引擎使用`CHECKHITBYMONSTER`作为判断命令,写法为`CHECKHITBYMONSTER`,无需参数,返回真表示本次攻击来自怪物。还有引擎通过`$CURRRTARGETNAME`变量结合`CHECKNAMELIST`判断,逻辑与名单方式一致。

##注释行的影响

原脚本中`;CHECKTEXTLIST..\QuestDiary\三一真神.txt<$CURRRTARGETNAME>`这一行被分号注释,意味着它完全不参与判断。如果希望恢复这行作为限制条件,需要先去掉行首的分号,同时确保`三一真神.txt`文件中存放的是需要排除的人物名称列表,并且`CHECKTEXTLIST`命令在当前引擎中可用。但这种方式只能排除名单内的人物,无法覆盖所有人物攻击,不适合作为通用的“仅怪物触发”方案。

##引擎差异与调试要点

不同引擎对攻击来源判断的支持程度不同。GOM引擎、GEE引擎、BLUE引擎各自有独立的命令集,同一个功能在不同引擎中的命令名称可能完全不同。修改前需要确认服务端使用的引擎类型,查阅对应引擎的脚本命令文档。

修改后重启服务端,分别用怪物和人物对佩戴该装备的角色进行攻击测试。如果人物攻击仍然触发无敌,说明攻击来源判断命令未生效或参数写错。可以在`#ACT`段临时加入`SENDMSG6触发来源判断通过`这类调试信息,确认脚本是否进入了执行分支。

如果引擎完全不支持攻击来源判断,另一种思路是通过伤害来源的变量判断。部分引擎在受到攻击时会生成攻击者名称变量,可以结合`CHECKNAMELIST`和人物名单反向排除,但这种方式需要持续维护人物名单,实际使用中容易遗漏。更稳妥的做法是升级引擎版本或更换支持攻击类型判断的引擎包。
[顶部]