我这里用另一种思路写这个脚本,也让他变得更普遍一些
在npcmod的脚本中,event通指这个监听器下的接口(是这么叫?) 当你想要攻击npc,NPC会完全免伤,不论如何攻击都无法伤害它 但我们这个脚本的目的,是免疫某个物品,或者某个mod的伤害 我们提取对NPC造成伤害的物品名字,判断是否允许这个物品造成伤害 此段doc查询的方式我放在同标题下的另一个隐藏文字段 感兴趣的朋友请自行移步阅读 得到代码 event.getSource().getHeldItem().getName();
代我们需要一个变量来显示这个代码- var ae=event.getSource().getHeldItem().getName();
复制代码 var是一个变量类型,具体参见工具帖中的语法接下来我们输出这个物品名 var ae=event.getSource().getHeldItem().getName();
npc.say(ae);//让npc说自己被什么东西打了

他说自己被flanmod:hg_cz75打了这是物品的注册名 如果只禁用某个物品的伤害 那么我们只要用if函数判断造成伤害的东西名字叫不叫flanmod:hg_cz75 就完成这段代码的编写了
但一个mod物品那么多,对吧 我们需要一个更骚的操作 contains() 这个函数用于判断包含关系,具体参见语法工具页
首先我们创建一个mod的变量
因为所有枪械前面都有flansmod字样,其他mod也雷同 接着我们判断打npc的东西有没有这字 变量c是否是true,如果是,就把伤害设置成0 if((c+"")==("true")){
event.setDamage(0); }
你可能要问我,c为什么要加一个“”,我不加就可能报错,所以加了再说
最终的代码如下 var b = "flansmod";
var b1 = "mcheli";
var ae=event.getSource().getHeldItem().getName();
var c = ae.contains(b);
var c1 = ae.contains(b1);
if((c+"")==("true")){
event.setDamage(0);
}else if((c1+"")==("true")){
event.setDamage(0);
npc.say("我是不会受伤的!");
}
mcheli是一个载具mod,我们也可以把它一起禁用了这样,一个免疫枪伤的npc就做好了 拔刀,更多武器的禁用也都异曲同工
|