或许NPC的脚本在国内有点小众吧……
你如果是一个RPG服腐竹(服务器还加了拔刀and自定义NPC)
是否因为NPC被拔刀之类的逆天武器连上天而烦恼呢或许没有
需要用到的东西:
这个帖子能让你NPC怎么样:
如果你之前给服务器和本地添加了nashorn.jar 可以跳过
(其实其他脚本语言一样可行但是需要修改一些东西 因为API是不变的 但是语**有变化)
找到你安装的java
然后打开
X:xxxx\jre-xxxx\lib\ext
里面会有一个nashorn.jar
请和装mod一样 把他塞到mods文件夹

如果有服务端 请把服务端mod也装上nashorn.jar
第二步:配置环境②
打开你的游戏
找到你要修改的NPC 拿出脚本魔杖 对他右键
看“语言”是不是ECMAScript
把“开启”设为是

第三步:了解代码
- var getItem=null;
- var getType=null;
- try{
- getItem=event.getSource().getHeldItem().getName()
- getType=event.getType()
- }
- catch(err){}//上面的都不用改
- for(var i=0;i<1;i++){
- switch(i){
- case 0:
- if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
- case 1:
- if(getType=="directMagic")event.setCancelled(true)
- if(getType=="directMagic")event.setDamage(0)
- }
- }
- //npc.say("item:"getItem)
- //npc.say("type:"getType)
这是一串非常简单易懂的代码(我也写不出NB的好吧)
目前已经是预设好免疫拔刀和幻影剑伤害了
现在我们来说说怎么改
首先 我们认识两个变量:
getItem就是玩家攻击时手里拿的武器
(除非他切换武器的速度比你电脑计算速度还快 否则就是攻击所使用的物品)
getType就是伤害类型(也不知道怎么解释)
然后 我们要配置更多的禁用
下面这段是调试用的代码
//npc.say("item:"+getItem)
//npc.say("type:"+getType)
它是被注释过的
我们怎么让他运行呢 把前面的”//“删掉就可以了(加上去又不能运行了)
npc.say("item:"+getItem)
npc.say("type:"+getType)
删掉以后,我们攻击他时 就会反顾数据给我们
item就是物品的注册名
type就是伤害类型(玩家 药水 幻影剑 爆炸 掉落等)
那我们要怎么禁止物品或者伤害类型呢
- for(var i=0;i<1;i++){
- switch(i){
- case 0:
- if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
- case 1:
- if(getType=="directMagic")event.setCancelled(true)
- if(getType=="directMagic")event.setDamage(0)
- }
- }
如上代码
i<1
这里的”1“就是你要禁止的物品数量(从0开始)
对没有编程基础的同学有点难解释
还是举例子吧
比如我用钻石剑打了NPC一下
返回的是
item:minecraft:diamond_sword
type:player
minecraft:diamond_sword就是钻石剑的注册名
player就代表是type是玩家伤害
那我们可以改写下代码
- for(var i=0;i<2/*这里改成了2*/;i++){
- switch(i){
- case 0:
- if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
- case 1:
- if(getType=="directMagic")event.setCancelled(true)
- if(getType=="directMagic")event.setDamage(0)
- case 2:
- if((getItem()+"")).indexOf("minecraft:diamond_sword")!=-1)event.setCancelled(true)
如 我有0~100个case 但是我i<1000也可以
但是 如果我有0~100个case 但是我i<1就不可以了
其实也不一定把注册名写完 选一段他独有的就可以
比如minecraft:diamond_sword可以写成diamond_sword甚至d_sword
建议全部写完
type也是差不多的道理(type不能像item取一段 必须写完)
- for(var i=0;i<3/*这里改成了3*/;i++){
- switch(i){
- case 0:
- if((getItem+"").indexOf("slashblade")!=-1)event.setCancelled(true)
- case 1:
- if(getType=="directMagic")event.setCancelled(true)
- if(getType=="directMagic")event.setDamage(0)//这串代码不用管一般情况下用不上
- case 2:
- if((getItem()+"")).indexOf("minecraft:diamond_sword")!=-1)event.setCancelled(true)
- case = 3:
- if(getType=="player")event.setCancelled(true)
- }
- }
2.如果你不是很懂编程 千万别动{}括号 尽管有 也别手贱吧
3.有什么问题 可以回帖问我
4.本代码目前仅支持1.7.10的自定义NPCmod 更高版本过几天会写一下 弄在下面
(其实只是语法的不同 思路还是这个样子 甚至API都差不多)
5.我第一次发这种贴如果发错版了 那就发错了吧
6.我可能表达得不是很好 所以不懂就问吧……