平凡的行者
fankieqiu 发表于 2018-2-23 20:49
谢谢大神,前面的有点复杂...我要等比较多的空余时间慢慢看
关于第二个问题,我看了你的思路,我才发现是 ...

是可以这样做,但是我不是很建议这样做,因为比较容易出BUG
因为你这样做并没有透过攻击事件杀死玩家
例如当玩家因直接削减血量而死,死亡讯息会出现「XXX已死亡」而不是「XXX被NPC杀死了」

不过绕过攻击事件直接削减血量是可以避免触发任何伤害防御能力

a15020968400
平凡的行者 发表于 2018-2-11 13:53
脚本中没有可以直接修改移动速度的方法,所以得查源码看看如何修改
不过幸运的是,查完后发现修改起来也 ...

这个是要在哪里修改呀大佬

a15020968400
修改我已经会了,想来问下大佬1.7.10能不能让npc飞起来,或者水面上移动更快些,我想做个可以玩家骑乘的水上npc,然后敲好他的移动路径,玩家就可以等他来了坐上去快速在河道里移动。emmmmmm,起初是想搞个自动移动的魔兽里暴风城的船那样的东西,不过那样的mod都很难找的样子所以才把点子想到了npc上,我改移动过了30之后水上的移速就稳定不变了,但是砸个迅捷还是有效的,所以就算水上的移速改不了也想知道怎么让npc一直获得迅捷buff的办法。

平凡的行者
a15020968400 发表于 2018-3-7 21:21
修改我已经会了,想来问下大佬1.7.10能不能让npc飞起来,或者水面上移动更快些,我想做个可以玩家骑乘的水 ...

1.7.10的NPC没办法设置成飞行,要用其他手段模拟是可以但是不建议,因为操作上困难
想要飞行NPC的话建议使用1.10.2或以上的版本

持续获得药水buff的方法可以在[更新]的监听项中调用npc.addPotionEffect(int effect, int duration, int strength, boolean hideParticles)

例如你要迅捷的效果的话:
npc.addPotionEffect(1,2,0,false)

把这行直接写在[更新]监听项内的话,NPC就会每0.5秒对自己施加2秒迅捷1的效果


2533883141
大佬大佬

纯白剑姬
平凡的行者 发表于 2018-3-8 12:50
1.7.10的NPC没办法设置成飞行,要用其他手段模拟是可以但是不建议,因为操作上困难
想要飞行NPC的话建议使 ...

想请教一下大神几个问题,如能得到指点感激不尽!
首先是服务器npcmod版本是1.7.10d
我想限制服务器红名(杀人)玩家不能和npc打开对话框
具体我是这样在dialog钩子写的 :D

  1. var PF = player.getFactionPoints("3");
  2. npc.say(PF);
  3. if( PF == 1){
  4.     event.setCancelled(true);
  5. }
  6. npc.say(event.isCancelled());
复制代码

问题就在这个setCancelled没有反应
甚至只写event.setCancelled(true);
一样还是能打开对话框...

第二个问题
我想个boss加点技能 比如在血量多少多少的时候召唤一个回血图腾npc
目前我是打算在玩家客户端上传前先用复制魔杖先复制一个图腾npc
然后再让boss战斗过程中触发技能 从玩家的库中召唤出图腾npc来

还有一个想法是先把这些图腾npc摆在boss房外 战斗中执行/noppes npc 图腾 home
重新设置出生点在boss附近 再让它刷新一下(相当于瞬移到boss身边)【不知道可不可行】
当图腾npc死亡时直接删除该npc  问题就是这些拉过来的图腾npc需要手动补充数量.....

所以我想问问能不能像召唤师那样的职业先把图腾npc存在什么地方在调用出来
或者有没有其他更加简单的方法?



最后一个问题
是我想在图腾npc加点粒子效果
所以我把一个带粒子的npc骑在了图腾npc上
发现原来骑着npc就不能用复制魔杖复制了...
所以能带着粒子npc和图腾npc一起召唤到boss身边吗?
或者能让图腾npc自带粒子效果吗?



先感谢大神能看完这么长一段提问!
希望大神能有空提点一下!感谢大神!

纯白剑姬
纯白剑姬 发表于 2018-3-25 23:35
想请教一下大神几个问题,如能得到指点感激不尽!
首先是服务器npcmod版本是1.7.10d
我想限制服务器红名 ...

还有一个题外问题:D
就是 能不能在对话框中打开那种在mc聊天框中点击网址时弹出的链接跳转申请框?
能用npcmod直接把那个申请框调出来吗?
静候佳音

平凡的行者
纯白剑姬 发表于 2018-3-26 00:01
还有一个题外问题:D
就是 能不能在对话框中打开那种在mc聊天框中点击网址时弹出的链接跳转申请框?
能用 ...

关于第一个问题
有一些事件是无法取消的,dialog就是其中一个
我自己的话会用比较迂回一点的作法,就是执行指令强制开启另一个对话
这个对话的内容大概就是告知玩家你无法跟NPC对话之类的。

我自己大概是会这样写:
  1. var PF = player.getFactionPoints("3");
  2. if( PF == 1){
  3.     npc.executeCommand("/noppes dialog show "+player.getName()+" <dialog> "+npc.getName());
  4. }
复制代码
noppes dialog show的命令用法:/noppes dialog show <player> <dialog> <name>
执行后,会立刻给指定玩家看到编号为<dialog>的对话,并且对话中的npc名子会显示为<name>

这样写的效果就是:被禁止跟NPC对话的玩家一打开对话介面后,会先看到NPC的第一个对话,接着立刻被脚本强制看到指定的对话
你可以把这个指定的对话设计成告知玩家你目前无法跟NPC对话之类的功能


关于第二个问题
复制魔杖在存放复制NPC或生物的资料时,是可以选择存放在客户端或伺服端的
存放在客户端的话就会存在使用复制魔杖的那个人的客户端


而脚本中的world物件其实有这个功能:spawnClone(int x, int y, int z, int tab, java.lang.String name)
这个就是从伺服端的资料中复制NPC并招唤在指定座标上。
或者是你也可以使用命令:/noppes clone spawn <name> <tab> [[world:]x,y,z] [newname]
如果让NPC使用world.spawnClone(int x, int y, int z, int tab, java.lang.String name)的话,会在NPC所处的维度下招唤复制体
如果是使用命令的话可以指定要在哪个维度生成(指定维度的话要写该维度的代号,例如下界是-1)

所以你就选择用命令或是world.spawnClone叫出NPC就可以了

最后一个问题的话,我是觉得可以让图腾NPC自己制造粒子
调用world.spawnParticle让图腾在自己的位置生成粒子效果




然后关于点击网址的部分,我建议是用tellraw做
例如这样:npc.executeCommand("/tellraw "+player.getName()+" {text:'mcbbs',clickEvent:{action:'open_url',value:'http://www.mcbbs.net'}}")
这样会在玩家的对话窗内出现一个mcbbs的字样,点击它的话就会询问是否开启http://www.mcbbs.net这个网址


纯白剑姬
平凡的行者 发表于 2018-3-29 16:50
关于第一个问题
有一些事件是无法取消的,dialog就是其中一个
我自己的话会用比较迂回一点的作法,就是执 ...

感谢大神的详细回复!!!
我去慢慢尝试一下!

纯白剑姬
平凡的行者 发表于 2018-3-29 16:50
关于第一个问题
有一些事件是无法取消的,dialog就是其中一个
我自己的话会用比较迂回一点的作法,就是执 ...


关于第一个问题
貌似1.7.10版本的npcmod没有noppes dialog show的命令呢
在1.7.10的git的wiki上也没有该指令 应该是新版本更新的吧OTZ
所以我用了前面调出对话界面的方法
  1. var dialogs = Java.type("noppes.npcs.controllers.DialogController").instance.dialogs;
  2. Java.type("noppes.npcs.NoppesUtilServer").openDialog(player.getMCEntity(),npc.getMCEntity(),dialogs.get(1));
复制代码

才发现在对话框触发事件打开对话框 变成了无限循环了.....
(甚至客户端被刷的崩溃了...)

最后想想 可能是我太钻牛角尖了=-= 老实用对话框条件选项就能解决的问题 为什么我要这么绕呢OTZ

平凡的行者
本帖最后由 平凡的行者 于 2018-3-29 23:27 编辑
纯白剑姬 发表于 2018-3-29 18:39
关于第一个问题
貌似1.7.10版本的npcmod没有noppes dialog show的命令呢
在1.7.10的git的wiki上也没有该 ...

我这边npcmod的版本是CustomNPCs_1.7.10d(19jun17) (不过最新的是29-oct-2017)
是1.7.10的版本
你npcmod的版本会不会是旧的?

纯白剑姬
本帖最后由 纯白剑姬 于 2018-3-30 18:07 编辑
平凡的行者 发表于 2018-3-29 23:26
我这边npcmod的版本是CustomNPCs_1.7.10d(19jun17) (不过最新的是29-oct-2017)
是1.7.10的版本
你npcmod的 ...


在官网下载最新版本发现确实有dialog show
可能是服务器的npcmod确实太老了
顺带想问问 如果更新npcmod版本
有可能出什么问题吗?
现在服务器的npc时不时会变成另一个npc
(比如我做了两个npc A和B 时不时B就会变成A了)
npc的位置没有变化 但是所有设置(皮肤、对话、职业)都变成另一个npc的设置了
这难道就是贴主说的这个?


平凡的行者
本帖最后由 平凡的行者 于 2018-3-30 18:33 编辑
纯白剑姬 发表于 2018-3-30 17:44
在官网下载最新版本发现确实有dialog show
可能是服务器的npcmod确实太老了
顺带想问问 如果更新npcmod版 ...

这个我倒不清楚,我自己没遇过这样的事,最近也没什么在碰插件
不过NPC版本更新的情况中,我记得从b到c 版还是从c到d版,这两种状况中有一种会让原本服务器内的NPC全数消失。可能是NPC的实体ID改了之类的吧?
另外,如果不能更换NPC的版本的话,你上面那个呼叫对话框的代码稍微只要加个判断就能用了
  1. if(dialog != 1){
  2. var dialogs = Java.type("noppes.npcs.controllers.DialogController").instance.dialogs;
  3. Java.type("noppes.npcs.NoppesUtilServer").openDialog(player.getMCEntity(),npc.getMCEntity(),dialogs.get(1));
  4. }
复制代码
判断看到的对话框不是要使用脚本开启的对话框才开启

纯白剑姬
平凡的行者 发表于 2018-3-30 18:28
这个我倒不清楚,我自己没遇过这样的事,最近也没什么在碰插件
不过NPC版本更新的情况中,我记得从b到c 版 ...

感谢大神回复;
服务器npcmod也是d版本的 所以升级应该没啥问题吧。
上面的问题是有时重启服务器会造成的 原因未明。
最后想问问大神有没有推/抛投npc的方法?
打算尝试一些野猪/狼 的 冲撞/跳劈等略带位移的技能?
在noppes.npcs.scripted.ScriptNpc一直向父类翻到java.lang.Object都没找到位移的方法...
不知道是我哪里看错眼还是没看明白呢 希望大神指点一下:D

1549023568
请问下为什么安装了引擎之后游戏就闪退了

2004哥哥
作者辛苦了!

@TGL
怎么判断NPC周围是否有玩家

@@Leo
@TGL 发表于 2018-5-24 17:18
怎么判断NPC周围是否有玩家

恩哼,昨天还在学校里学习所以不能回复抱歉
啊**,在该NPC的脚本里面调用npc就是指当前的NPC
  1. npc.getSurroundingEntities(10);
复制代码
获取NPC附近十格内的实体,返回一个实体数组ScriptEntity[]
建议可以多去看看DOC,总会找到的2333
顺带一提,这个方法可以有两个传入
  1. npc.getSurroundingEntities(10,0);
复制代码
取NPC附近十格内的,id为0的实体,返回一个实体数组ScriptEntity[],这样子就不用自己再筛选是不是玩家了,我记得好像玩家是0还是几来着,你可以去试试看

@TGL
@@Leo 发表于 2018-5-26 17:34
恩哼,昨天还在学校里学习所以不能回复抱歉
啊**,在该NPC的脚本里面调用npc就是指当前的NPC
获取NPC附近 ...

请问如何判断返回的ScriptEntity[]中是否存在玩家,返回true或者false

@@Leo
@TGL 发表于 2018-5-27 14:38
请问如何判断返回的ScriptEntity[]中是否存在玩家,返回true或者false

ScriptEntity有一个typeOf(int type)方法可以检测是不是目标类型的实体
至于玩家的type值是多少我就不知道了

582558781
能办到npc累计受到多少次攻击之后tp攻击最多的玩家嘛...
另外,能不能像东方那样子设置npc死亡后换成另一个npc来实现符卡的效果
(三更半夜才发现这个帖子,死)

582558781
本帖最后由 582558781 于 2018-6-10 14:37 编辑

那个npc怎么在玩家身边刷出方块就是一堆石头围着能暂时困住玩家
或者如何通过命令方块来实现。
(1.7.10)

星层
@@Leo 发表于 2018-6-2 17:31
ScriptEntity有一个typeOf(int type)方法可以检测是不是目标类型的实体
至于玩家的type值是多少我就不知 ...

玩家的type是plear

cos003
lz,我可以联系你吗?

1549023568
大佬 请问下怎么让npc的攻击附带药水效果【瞬间伤害这样的】

粘兽
1549023568 发表于 2018-6-11 10:10
大佬 请问下怎么让npc的攻击附带药水效果【瞬间伤害这样的】

代码放入攻击(Attack)监听内
  1. event.getTarget().addPotionEffect(7,1,0,1)
复制代码

excit
。。。作为凡人我看不懂

银星sama
一直都不知道怎么弄,谢谢楼主

iverson119
请问一下大神,我想实现这么一个效果。
几个人一起攻击一个npc,在npc死亡的时候,结算时每个人都有是杀死这个npc之人,而不是只有最后一击的才是。
如果这个效果很难实现的话,那换一下思路,凡是攻击过boss的人,在boss死亡之后,都能完成一个任务(就是杀死boss的任务,只不过用指令或者脚本去强制完成)。如果boss脱战之后,攻击过boss的人的记录被重置。

@@Leo
iverson119 发表于 2018-6-23 10:24
请问一下大神,我想实现这么一个效果。
几个人一起攻击一个npc,在npc死亡的时候,结算时每个人都有是杀死 ...

你可以选择用TempData
有这么几个个方法
  1. public java.lang.Object getTempData(java.lang.String key)
  2. public void setTempData(java.lang.String key, java.lang.Object value)
  3. public boolean hasTempData(java.lang.String key)
  4. public void removeTempData(java.lang.String key)
复制代码
不过具体维护起来很繁琐,尤其是攻击的人多的时候判断重复很麻烦

要么就是维护一个容器了
至于脱战……tick里面循环,超过1s都没有攻击目标大概就是脱战了吧

iverson119
本帖最后由 iverson119 于 2018-6-23 18:37 编辑
@@Leo 发表于 2018-6-23 17:11
你可以选择用TempData
有这么几个个方法不过具体维护起来很繁琐,尤其是攻击的人多的时候判断重复很麻烦
...

对啊,如果是A打一下,B打一下,A再打一下,这样会不会记录了2个A?再请问下高手,如果我就希望输出的结果是,伤害过这个npc的玩家,都能完成对应任务ID的任务。这个完成任务我会做,但是怎样输出这个玩家的名单?

@@Leo
iverson119 发表于 2018-6-23 18:35
对啊,如果是A打一下,B打一下,A再打一下,这样会不会记录了2个A?再请问下高手,如果我就希望输出的结果 ...

所以要检查很麻烦啊
你可以从1~n这样子保存
然后保存和读取的时候都要这样子按照引索来

粘兽
本帖最后由 粘兽sama 于 2018-6-27 06:16 编辑

1.12.2如何实现1.7.10"event.setCancelled(true)"的效果,
我没有找到对应的API......




摸索了一会,找到方法了!

123crs
大佬 想请教一下 1.7.10
如何让npc在被杀时发送一条全服都能看到的公告
复活时发送另一条全服都能看到的公告呢?

粘兽
123crs 发表于 2018-7-1 01:10
大佬 想请教一下 1.7.10
如何让npc在被杀时发送一条全服都能看到的公告
复活时发送另一条全服都能看到的公 ...

在'死亡'和'复活'的监听里加一个执行指令的脚本即可。

123crs
粘兽sama 发表于 2018-7-1 05:33
在'死亡'和'复活'的监听里加一个执行指令的脚本即可。

具体应该怎么执行呢 qwq

粘兽
123crs 发表于 2018-7-1 15:32
具体应该怎么执行呢 qwq

执行指令的脚本如下
npc.executeCommand("bc <消息内容>")

@TGL
有方法让NPC死亡后,不掉落物品吗。(用代码实现)
或者让NPC死亡后所在的区块暂停两秒再卸载

111968511
很棒的作品!

凛弦
谢谢版主大人提供的教程

1549023568
请问下怎么给范围内同一个阵营/敌对阵营的npc上药水效果

DJMC
当任务被激活时,或者红石被激活,或者群体对话完成后,A士兵和B士兵去攻击一个农民npc,怎么写啊

@@Leo
DJMC 发表于 2018-7-18 18:40
当任务被激活时,或者红石被激活,或者群体对话完成后,A士兵和B士兵去攻击一个农民npc,怎么写啊 ...

可以用脚本。
任务执行完后,让他执行某段脚本,让A和B走到某个位置,然后把这两个阵营设置成敌对就对开打了

1549023568
请问下大佬。如果用脚本来改变职业里傀儡的动作参数会有0.5s延迟(从脚本执行到动作改变之间有0.5S)。大佬有没有什么想法或者方法来去掉这0.5s

粘兽
本帖最后由 粘兽sama 于 2018-8-6 20:45 编辑

楼主有意向做高版本的CustomNpcs教程么

1549023568
粘兽sama 发表于 2018-8-6 20:43
楼主有意向做高版本的CustomNpcs教程么

粘受大佬

Hueihuea
我来这里请教了awa
对于获取附魔list后返回数组
想知道这个[0:{"lvl":1s,"id":16s}]的数组是如何定义的

Hueihuea
@TGL 发表于 2018-7-3 10:47
有方法让NPC死亡后,不掉落物品吗。(用代码实现)
或者让NPC死亡后所在的区块暂停两秒再卸载 ...

一个月后的回复awa
让NPC不掉落物品的办法倒是没有(1.7.10)
让NPC掉物品的办法倒是有……
区域暂停应该做不到(或者放个两秒死亡的区域加载者awa)
如果让整个服务器的主线程暂停倒是可以使用sleep方法
你想做到什么样的效果

Hueihuea
本帖最后由 skpsk自己家 于 2018-8-7 23:56 编辑
582558781 发表于 2018-6-10 00:55
能办到npc累计受到多少次攻击之后tp攻击最多的玩家嘛...
另外,能不能像东方那样子设置npc死亡后换成另一个 ...

没人回答你呢
两个月后我看见了呢awa
瞬移可以在伤害钩子中(1.7.10)
使用代码

  1. var time;
  2. for(var i=0;i<1;i++){if(time>=1)break;time=0;}
  3. time++;
  4. if(time==10){
  5. event.getSource().setRider(npc);
  6. event.getSource().setRider(null);
  7. time=null;
  8. }

  9. //为什么用setRider方法 因为刚好有就复制过来了 懒癌晚期
  10. //为什么是time 因为我从之前的定时代码拿的awa
复制代码

死亡钩子可以使用scriptWorld类里面的一个方法
这里就不写代码了 因为懒啊

luomu丶夕阳
本帖最后由 luomu丶夕阳 于 2018-8-9 01:06 编辑

请问下,怎么右键NPC实现打开bs菜单  不做任务 直接右键NPC打开菜单

第一页 上一页 下一页 最后一页