本帖最后由 @@Leo 于 2018-8-25 21:33 编辑
脚本
希望有大神来帮帮我。
命令与脚本哈哈,各位伙伴大家好,我Leo回来啦!到了最蛋疼的命令与脚本部分我就不知道拖了多久了(众人:半年了才**回来)声明一下:好多好多来自z25096708
指令
HELP帮助:eg: /noppes help faction --- 查看派系类指令的帮助
Script 脚本:eg: /noppes script reload --- 重载脚本
Config 配置:Guns [true/false] ------------------------- 启用/停用枪支(是否能射击)Freezenpcs [true/false] ----------------- 冻结/解冻NPCVinegrowth [true/false] ----------------- 允许/禁止藤蔓生长LeavesDecay [true/false] --------------- 启用/禁用树叶自动消失Chunkloaders [num] -------------------- 设置区块加载者(职业)活动间隔(默认为: 20)(单位: s)Icemelts [true/false/semi] --------------- 冰是否会融化成水.Font [字体] [大小] ----------------------- 改变NPCmod的字体. 默认字体大小为18,默认字体为os字体。eg: /noppes config icemelts false 这样旁边有光冰也不会融化
NPC:<npc> home [x] [y] [z] ------------------ 设置NPC的重生点<npc> create ------------------------------ 创建一个NPC<npc> delete-------------------------------- 删除NPC<npc> visible ------------------------------- 设置NPC是否可见<npc> owner [玩家] ---------------------- 设置npc跟随的玩家<npc> name <name> -------------------- 更改NPC名称eg: /noppes npc what create 创造一个名为what的NPC
Slay 击杀:all [范围]------------------------ 杀掉以玩家为中心的范围内所有不是npc的实体items [范围]-------------------- 移除范围内所有凋落物animals [范围]------------------ 杀死所有范围内的动物mobs [范围]-------------------- 杀死所有范围内的怪物<实体名> [范围]--------------- 移除范围内指定实体eg: /noppes slay all 60 移除60格方块内的所有不是npc的实体
Clone 克隆:List <tab> ------------------------------------------------ 列出在标签tab的NPCAdd <npc> <tab> [克隆名] --------------------------- 克隆npc到指定标签Del <name> <tab> ------------------------------------- 从指定标签移除指定的npcSpawn <name> <tab> [world:] [x,y,z] [新名称] --- 从标签生成一个NPC. 世界变量:(0:全世界, 1:地狱, -1:末地)如果未给出, 则自动生成在玩家所在世界.eg: /noppes clone spawn name 1 0 50,50,50 SB在主世界 50,50,50的位置,生成一个位于标签1的,现在在叫SB的,在标签中叫name的NPC
Faction 派系:<player> <faction> add <点数> ------------- 增加玩家对指定派系指定点数<player> <faction> subtract <点数> ------- 减少玩家对指定派系指定点数<player> <faction> set <点数> -------------- 设置玩家派系点数<player> <faction> reset ---------------------- 设置玩家对指定派系点数为默认值<player> <faction> drop ---------------------- 使玩家不认识指定派系eg: /noppes faction Leo friendly add 100 给玩家Leo与派系friendly的关系加100
Quest 任务:Start <玩家> <任务ID> -------------- 让玩家开始指定任务Finish <玩家> <任务ID> ------------- 设置玩家完成指定任务Stop <玩家> <任务ID> -------------- 停止玩家正在进行指定任务Remove <玩家> <任务ID> ---------- 移除玩家正在进行/已完成的指定任务eg: /noppes quest start Leo 1 给玩家Leo任务编号为1的任务(编号可以在设置任务的地方查看)
Dialog 对话:Read <玩家> <对话id>----------------- 为玩家设置指定对话为已阅Unread <玩家r> <对话id>------------- 为玩家设置指定对话为未读Reload ------------------------------------- 从世界文件夹中重载所有对话. eg: /noppes dialog reload重载对话
END
脚本这个是最难啃的一块,没有编程基础的勿入最新版Java默认可以支持JavaScript. 但是一样可以加载其他的脚本语言通过下载他们的库并让Forge将其加载(同理bukkit)我这里搬运4种:http://pan.baidu.com/s/1dECYRgHECMAScript(一般叫做JavaScript),一种常见的脚本,最新版的java8已经自动支持。如果你安装了jre1.8依旧不可用, 去"java/jre/lib/ext"目录复制"nashorn.jar"文件到你的mods文件夹Python,简称py,java关于它的脚本引擎又叫做Jython。Php,很常见的一种网页语言Lua,轻量高效,可以多平台运行,有完整的库和工具(反正官网就这个意思)使用方法:下载扔进mods
现在又要提及脚本魔杖了用这个东西右键NPC,就会跳出一个GUI,你可以在“语言”那一项来切换你使用的语言
1.8.8之前的:在左上角的“脚本”那里点击一下左边那一溜是监听,中间那里是输入代码用的加载代码那个按钮,用来加载代码文件夹里面的代码跟直接输在里面差不多……"编辑"怎么用我就不知道了(我反正我用一次卡一次)
1.8.8及之后的:初始的调控界面还是差不多的你要写代码,用左上角的"+"来添加新的代码现在开始代码可以在各个监听之间穿起来了呢
那么问题又来了:代码格式是什么呢看doc去:http://www.kodevelopment.nl/customnpcs/api/然后我举个例子JavaScript:
Python
都是输出"呵呵"的具体其他代码格式怎么样?看doc去,都说了没编程基础勿入……(好吧我当初自己都看不懂doc)
HOOKS(即监听,方便写代码用的)(抄袭而来):
这里都是NPC监听233。
没啦没啦没啦我的脚本代码也都是半会不会呢~~~希望有大神来帮帮我。某大佬的教程贴假如你们有问题不会的可以来问我,让我积累一点exp当然假如你很急的话,去问平凡的行者吧~
外国人视频:https://www.youtube.com/user/MrToady2000/videos外国人论坛:http://www.minecraftforge.net/forum/index.php?board=122.0外国人聊天频道:https://discord.gg/0qZ6X3cHl8Pupttr
END
引索:
Custom Npcs 教程
命令与脚本
哈哈,各位伙伴大家好,我Leo回来啦!
为了避免指令冲突, 全部指令都以/noppes开头. 对于大多数的自动完成的东西, 你可以轻松地使用TAB键完成.命令参数中, <>为必填项, []则为可选项. 命令默认不加/
脚本
这个是最难啃的一块,没有编程基础的勿入
没啦没啦没啦
我的脚本代码也都是半会不会呢~~~
假如你们有问题不会的可以来问我,让我积累一点exp
当然假如你很急的话,去问平凡的行者吧~
END
2021.12 数据,可能有更多内容
Custom Npcs 教程命令与脚本哈哈,各位伙伴大家好,我Leo回来啦!到了最蛋疼的命令与脚本部分我就不知道拖了多久了(众人:半年了才**回来)声明一下:好多好多来自z25096708
指令
为了避免指令冲突, 全部指令都以/noppes开头. 对于大多数的自动完成的东西, 你可以轻松地使用TAB键完成.命令参数中, <>为必填项, []则为可选项. 命令默认不加/
HELP帮助:
代码:
- help <子命令> ------- 查看帮助
Script 脚本:
代码:
- reload ------------------- 重载
Config 配置:Guns [true/false] ------------------------- 启用/停用枪支(是否能射击)Freezenpcs [true/false] ----------------- 冻结/解冻NPCVinegrowth [true/false] ----------------- 允许/禁止藤蔓生长LeavesDecay [true/false] --------------- 启用/禁用树叶自动消失Chunkloaders [num] -------------------- 设置区块加载者(职业)活动间隔(默认为: 20)(单位: s)Icemelts [true/false/semi] --------------- 冰是否会融化成水.Font [字体] [大小] ----------------------- 改变NPCmod的字体. 默认字体大小为18,默认字体为os字体。eg: /noppes config icemelts false 这样旁边有光冰也不会融化
NPC:<npc> home [x] [y] [z] ------------------ 设置NPC的重生点<npc> create ------------------------------ 创建一个NPC<npc> delete-------------------------------- 删除NPC<npc> visible ------------------------------- 设置NPC是否可见<npc> owner [玩家] ---------------------- 设置npc跟随的玩家<npc> name <name> -------------------- 更改NPC名称eg: /noppes npc what create 创造一个名为what的NPC
Slay 击杀:all [范围]------------------------ 杀掉以玩家为中心的范围内所有不是npc的实体items [范围]-------------------- 移除范围内所有凋落物animals [范围]------------------ 杀死所有范围内的动物mobs [范围]-------------------- 杀死所有范围内的怪物<实体名> [范围]--------------- 移除范围内指定实体eg: /noppes slay all 60 移除60格方块内的所有不是npc的实体
Clone 克隆:List <tab> ------------------------------------------------ 列出在标签tab的NPCAdd <npc> <tab> [克隆名] --------------------------- 克隆npc到指定标签Del <name> <tab> ------------------------------------- 从指定标签移除指定的npcSpawn <name> <tab> [world:] [x,y,z] [新名称] --- 从标签生成一个NPC. 世界变量:(0:全世界, 1:地狱, -1:末地)如果未给出, 则自动生成在玩家所在世界.eg: /noppes clone spawn name 1 0 50,50,50 SB在主世界 50,50,50的位置,生成一个位于标签1的,现在在叫SB的,在标签中叫name的NPC
Faction 派系:<player> <faction> add <点数> ------------- 增加玩家对指定派系指定点数<player> <faction> subtract <点数> ------- 减少玩家对指定派系指定点数<player> <faction> set <点数> -------------- 设置玩家派系点数<player> <faction> reset ---------------------- 设置玩家对指定派系点数为默认值<player> <faction> drop ---------------------- 使玩家不认识指定派系eg: /noppes faction Leo friendly add 100 给玩家Leo与派系friendly的关系加100
Quest 任务:Start <玩家> <任务ID> -------------- 让玩家开始指定任务Finish <玩家> <任务ID> ------------- 设置玩家完成指定任务Stop <玩家> <任务ID> -------------- 停止玩家正在进行指定任务Remove <玩家> <任务ID> ---------- 移除玩家正在进行/已完成的指定任务eg: /noppes quest start Leo 1 给玩家Leo任务编号为1的任务(编号可以在设置任务的地方查看)
Dialog 对话:Read <玩家> <对话id>----------------- 为玩家设置指定对话为已阅Unread <玩家r> <对话id>------------- 为玩家设置指定对话为未读Reload ------------------------------------- 从世界文件夹中重载所有对话. eg: /noppes dialog reload重载对话
END
脚本这个是最难啃的一块,没有编程基础的勿入最新版Java默认可以支持JavaScript. 但是一样可以加载其他的脚本语言通过下载他们的库并让Forge将其加载(同理bukkit)我这里搬运4种:http://pan.baidu.com/s/1dECYRgHECMAScript(一般叫做JavaScript),一种常见的脚本,最新版的java8已经自动支持。如果你安装了jre1.8依旧不可用, 去"java/jre/lib/ext"目录复制"nashorn.jar"文件到你的mods文件夹Python,简称py,java关于它的脚本引擎又叫做Jython。Php,很常见的一种网页语言Lua,轻量高效,可以多平台运行,有完整的库和工具(反正官网就这个意思)使用方法:下载扔进mods
现在又要提及脚本魔杖了用这个东西右键NPC,就会跳出一个GUI,你可以在“语言”那一项来切换你使用的语言
1.8.8之前的:在左上角的“脚本”那里点击一下左边那一溜是监听,中间那里是输入代码用的加载代码那个按钮,用来加载代码文件夹里面的代码跟直接输在里面差不多……"编辑"怎么用我就不知道了(我反正我用一次卡一次)
1.8.8及之后的:初始的调控界面还是差不多的你要写代码,用左上角的"+"来添加新的代码现在开始代码可以在各个监听之间穿起来了呢
那么问题又来了:代码格式是什么呢看doc去:http://www.kodevelopment.nl/customnpcs/api/然后我举个例子JavaScript:
npc.say("呵呵");
Python
npc.say("呵呵")
都是输出"呵呵"的具体其他代码格式怎么样?看doc去,都说了没编程基础勿入……(好吧我当初自己都看不懂doc)
HOOKS(即监听,方便写代码用的)(抄袭而来):
功能 |
事件 |
说明 |
init |
NpcEvent.InitEvent |
当NPC被生成(创建或者复活) |
tick |
NpcEvent.UpdateEvent |
当更新tick时(每10tick一循环. 建议操作在10tick内完成) |
interact |
NpcEvent.InteractEvent |
当玩家与NPC互动 |
dialog |
DialogEvent.OpenEvent |
当玩家打开与NPC的对话框时 |
dialog_option |
DialogEvent.OptionEvent |
当玩家选择了对话选项或者关闭了对话框 |
damaged |
NpcEvent.DamagedEvent |
当NPC被攻击时. 可取消 |
died |
NpcEvent.DiedEvent |
当NPC被杀时 |
meleeAttack |
NpcEvent.MeleeAttackEvent |
当NPC将要进行攻击 |
rangedLaunched |
NpcEvent.RangedLaunchedEvent |
当NPC开火(发射东西吧) |
target |
NpcEvent.TargetEvent |
当NPC选定目标时 |
targetLost |
NpcEvent.TargetLostEvent |
当NPC丢失目标时 |
kill |
NpcEvent.KilledEntityEvent |
当NPC杀掉了某个实体时 |
role |
RoleEvent.* |
被某些NPC角色调用 |
collide |
NpcEvent.CollideEvent |
当NPC与实体发生碰撞 |
timer |
NpcEvent.TimerEvent |
当计时器结束(ICustomNpc.getTimers()) |
没啦没啦没啦我的脚本代码也都是半会不会呢~~~
外国人视频:https://www.youtube.com/user/MrToady2000/videos外国人论坛:http://www.minecraftforge.net/forum/index.php?board=122.0外国人聊天频道:https://discord.gg/0qZ6X3cHl8Pupttr
END
引索:
先前排,赞个楼主,我一直想知道脚本怎么搞

谢谢了,

所以楼主酷爱回来把帖子里那些不明的div align span啥啥的编辑掉!
话说关于Player的监听是不是还没办法用..?
自己有查过,关于用在Player的监听,要写在拿脚本魔杖对空右键后出来的介面内
但是随便写了一些代码进去后发现什么都没发生...就算是用了目前1.11beta版的也是无效....
这让我很困扰阿...这样主动监控玩家的行为就做不到了....
而且余下可用的监听函数内貌似没有可调用到计分板的物件....真不方便
自己有查过,关于用在Player的监听,要写在拿脚本魔杖对空右键后出来的介面内
但是随便写了一些代码进去后发现什么都没发生...就算是用了目前1.11beta版的也是无效....
这让我很困扰阿...这样主动监控玩家的行为就做不到了....
而且余下可用的监听函数内貌似没有可调用到计分板的物件....真不方便
平凡的行者 发表于 2016-12-25 15:40
不如先给点想法如何?
看看有没有想要NPC做到的事?
然后我试试用脚本写出来? ...
一个简单的实例。
监听NPC死亡。发出一段自定义指令
监听NPC重生,发出一段自定义
117779284 发表于 2016-12-26 01:15
一个简单的实例。
监听NPC死亡。发出一段自定义指令
监听NPC重生,发出一段自定义 ...
1.10.2版:

将图中的/say换成其他指令即可
想要执行多条指令就放多条event.npc.executeCommand()
1.7.10版:


同上
由于测试时发现npc重生时,初始化的区块会执行两次
所以将Init区的脚本设定给死亡后重生专用,使用了暂存数据做判断。
只有当某个暂存数据存在时才执行中间的代码,而这个数据则意味着NPC不久前有死亡过
不过要注意的是:当NPC从服务器的记忆体中卸载时,暂存数据就会消失。想要永久保存某个数据的话就使用StoredData
平凡的行者 发表于 2016-12-26 03:06
1.10.2版:
将图中的/say换成其他指令即可

没有任何提示和响应·
npc.executeCommand("/say 1");
npc.setTempDate("killed".true);
本帖最后由 平凡的行者 于 2016-12-26 17:35 编辑
忘了说,NPC默认是禁用脚本的
需要允许NPC使用脚本,写下的脚本才会被执行,如图:
Enabled要设置为Yes,脚本才会启动
另外我示范的代码是javascript(ECMAScript),语言设置(Language)要调到ECMAScript才会执行成功
如果Language那边没东西,照楼主说的把档案丢到mods里即可
另外你的语法第二行打错了,不是Date而是Data,点号换成逗号:
应该是npc.setTempData("killed",true);
117779284 发表于 2016-12-26 05:55
呃·被击杀执行指令 这个貌似不行啊。
没有任何提示和响应·
npc.executeCommand("/say 1");
忘了说,NPC默认是禁用脚本的
需要允许NPC使用脚本,写下的脚本才会被执行,如图:

Enabled要设置为Yes,脚本才会启动
另外我示范的代码是javascript(ECMAScript),语言设置(Language)要调到ECMAScript才会执行成功
如果Language那边没东西,照楼主说的把档案丢到mods里即可
另外你的语法第二行打错了,不是Date而是Data,点号换成逗号:
应该是npc.setTempData("killed",true);
@@Leo 发表于 2016-12-24 17:04
老版主大人好
话说一开始我只是不知道脚本输入哪里而已
不过那个加载脚本具体怎么用我还是不会QAQ ...
哈哈,没关系 加油~~
平凡的行者 发表于 2016-12-26 17:19
忘了说,NPC默认是禁用脚本的
需要允许NPC使用脚本,写下的脚本才会被执行,如图:
请问我可以 把内容贴上去呢?还是把这层的链接贴上去呢?
@@Leo 发表于 2017-1-1 12:29
请问我可以 把内容贴上去呢?还是把这层的链接贴上去呢?
都可以,看你怎么做比较方便
可以设置某个NPC死亡或者重生时全服公告吗
优妹酱 发表于 2017-1-3 02:47
可以设置某个NPC死亡或者重生时全服公告吗
加个QQ好友呗
优妹酱 发表于 2017-1-3 02:47
可以设置某个NPC死亡或者重生时全服公告吗
可以
如果要以命令做全服公告的话,可以使用/say命令
这样的话你要求的效果就可以用11楼的做法,监听死亡或重生时发出一段命令
厉害了,终于有好的教程了,感谢楼主
平凡的行者 发表于 2017-1-1 14:25
都可以,看你怎么做比较方便
请问一下怎么让NPC一创建就朝指定坐标走去?
平凡的行者 发表于 2017-2-8 14:28
额...有点不明白为何要这样做
一开始直接把NPC创建在指定座标就好了阿?..
其实我是想让他们进攻某个地方,死了以后复活然后再进攻,但是如果用路径设置的话太多NPC了。。哈哈
本帖最后由 平凡的行者 于 2017-2-8 15:37 编辑
给NPC调用navigateTo()方法,可以令NPC朝某个座标点走去
这可以让NPC自动搜索路径后走过去:
npc.navigateTo(x座标,y座标,z座标,移动速度);//将NPC以指定速度导引到指定座标
移动速度默认是0.7,你可以设置任何你想要的数字
不过实际使用上,为了确保导引有效,我是建议将这个写在Update的监听项内
另外,你NPC的进攻路线如果有多条的话,可以设置几个不同的中途点让NPC走
一方面可以让不同NPC走不同的路线,增加防守的难度
一方面也避免NPC不按照你预期的路线进攻
或是用另一个方法:给NPC设置攻击目标:npc.setAttackTarget()
这样NPC也会自己跑过去攻击目标
不过不管用哪个方法都要注意:一旦NPC开始攻击其他目标的话,导引就会失效(例如受到攻击而反击)
所以你如果要求NPC一边移动一边攻击,代码就要写多一点
Yihc 发表于 2017-2-8 14:42
其实我是想让他们进攻某个地方,死了以后复活然后再进攻,但是如果用路径设置的话太多NPC了。。哈哈 ...
给NPC调用navigateTo()方法,可以令NPC朝某个座标点走去
这可以让NPC自动搜索路径后走过去:
npc.navigateTo(x座标,y座标,z座标,移动速度);//将NPC以指定速度导引到指定座标
移动速度默认是0.7,你可以设置任何你想要的数字
不过实际使用上,为了确保导引有效,我是建议将这个写在Update的监听项内
另外,你NPC的进攻路线如果有多条的话,可以设置几个不同的中途点让NPC走
一方面可以让不同NPC走不同的路线,增加防守的难度
一方面也避免NPC不按照你预期的路线进攻
或是用另一个方法:给NPC设置攻击目标:npc.setAttackTarget()
这样NPC也会自己跑过去攻击目标
不过不管用哪个方法都要注意:一旦NPC开始攻击其他目标的话,导引就会失效(例如受到攻击而反击)
所以你如果要求NPC一边移动一边攻击,代码就要写多一点
本帖最后由 TeLunsu936 于 2017-2-8 15:15 编辑
有了这个插件就不用那个3d立体投影了 2333
2次编辑 :
这是mod?!!??
有了这个插件就不用那个3d立体投影了 2333
2次编辑 :
这是mod?!!??
平凡的行者 发表于 2017-2-8 15:13
给NPC调用navigateTo()方法,可以令NPC朝某个座标点走去
这可以让NPC自动搜索路径后走过去:
我试过navigateTo()但不知道为什么他不动。。好尴尬,我再试试看,谢谢你!

嗯。。希望可以脚本再讲多一点儿
api里面还有跟npc本身无关的希望也能讲讲
api里面还有跟npc本身无关的希望也能讲讲
小黑的手臂 发表于 2017-2-10 11:16
嗯。。希望可以脚本再讲多一点儿
api里面还有跟npc本身无关的希望也能讲讲 ...
这个是话,只要围观楼上大神:平凡的行者 就可以了
本帖最后由 a1016746326 于 2017-2-13 10:23 编辑
大大你好,我现在已经知道如何让npc在死亡时执行一段指令了,但是不知道如何给指令设置对象。
比如1.7.10服务器里面,/lightning xxx ,可以雷击叫做xxx的玩家,
我现在想让npc死亡的时候雷击一下击杀者,并全服通告,脚本是
npc.excuteCommand("/lightning xxx");
npc.excuteCommand("/say xxx击杀了NPC,被NPC临死之前雷击报复");
但是我并不知道,xxx在脚本中该如何表示。
另外想问一下,脚本方块执行的指令是命令方块的指令,还是服务器后台的指令呢。
平凡的行者 发表于 2016-12-26 03:06
1.10.2版:
将图中的/say换成其他指令即可
大大你好,我现在已经知道如何让npc在死亡时执行一段指令了,但是不知道如何给指令设置对象。
比如1.7.10服务器里面,/lightning xxx ,可以雷击叫做xxx的玩家,
我现在想让npc死亡的时候雷击一下击杀者,并全服通告,脚本是
npc.excuteCommand("/lightning xxx");
npc.excuteCommand("/say xxx击杀了NPC,被NPC临死之前雷击报复");
但是我并不知道,xxx在脚本中该如何表示。
另外想问一下,脚本方块执行的指令是命令方块的指令,还是服务器后台的指令呢。
本帖最后由 平凡的行者 于 2017-2-13 20:56 编辑
先放上与实作功能有相关API:
http://www.kodevelopment.nl/cust ... iptEventKilled.html
http://www.kodevelopment.nl/cust ... riptLivingBase.html
http://www.kodevelopment.nl/cust ... d/ScriptPlayer.html
在Killed监听项中,可以使用event变数取得NPC被杀死时的事件信息
对这个变数调用getSource()方法后,即可取得杀死这个NPC的生物的信息(如果NPC是死于凋零或火烧之类,而不是被生物杀死的,那么这个方法会传回null)
如果NPC死时的雷击只希望针对玩家反击的话,那么需要写个条件来确认getSource()传回的物件是不是null,以及是不是代表玩家
可以对getSource()传回的物件调用getType()来确定是不是玩家(是的话会传回1)
确定了后可以调用getName()来取得玩家的名子,并将这个名子和命令片段合并成完整的命令后执行,如下:
/lightning命令应该是ess插件提供的吧?...为了测试,我在这边就替换成world.thunderStrike()来制造雷击。
实际执行时可以把该行换成npc.executeCommand("/lightning "+pName);
另外你说的脚本方块如果是指这个:(1.7.10里并没有,我拿1.10.2的图)
这个是NPCmod里新增,可用脚本语言编写脚本的脚本方块
用法类似给NPC编写脚本。
如果是另一个mod的东西的话...恩那个mod我没碰过,不过照版上帖子说明,估计是执行命令方块的命令吧。
a1016746326 发表于 2017-2-13 10:16
大大你好,我现在已经知道如何让npc在死亡时执行一段指令了,但是不知道如何给指令设置对象。
比如1.7.10 ...
http://www.kodevelopment.nl/cust ... iptEventKilled.html
http://www.kodevelopment.nl/cust ... riptLivingBase.html
http://www.kodevelopment.nl/cust ... d/ScriptPlayer.html
在Killed监听项中,可以使用event变数取得NPC被杀死时的事件信息
对这个变数调用getSource()方法后,即可取得杀死这个NPC的生物的信息(如果NPC是死于凋零或火烧之类,而不是被生物杀死的,那么这个方法会传回null)
如果NPC死时的雷击只希望针对玩家反击的话,那么需要写个条件来确认getSource()传回的物件是不是null,以及是不是代表玩家
可以对getSource()传回的物件调用getType()来确定是不是玩家(是的话会传回1)
确定了后可以调用getName()来取得玩家的名子,并将这个名子和命令片段合并成完整的命令后执行,如下:

/lightning命令应该是ess插件提供的吧?...为了测试,我在这边就替换成world.thunderStrike()来制造雷击。
实际执行时可以把该行换成npc.executeCommand("/lightning "+pName);
另外你说的脚本方块如果是指这个:(1.7.10里并没有,我拿1.10.2的图)

这个是NPCmod里新增,可用脚本语言编写脚本的脚本方块
用法类似给NPC编写脚本。
如果是另一个mod的东西的话...恩那个mod我没碰过,不过照版上帖子说明,估计是执行命令方块的命令吧。
平凡的行者 发表于 2017-2-13 20:53
先放上与实作功能有相关API:
http://www.kodevelopment.nl/customnpcs/api/1.7.10/noppes/npcs/scripted/S ...
好的,懂了。十分感谢。
非常感谢楼主,命令也是找了很久的
(至少解决了很多问题)
(至少解决了很多问题)
平凡的行者 发表于 2017-2-13 20:53
先放上与实作功能有相关API:
http://www.kodevelopment.nl/customnpcs/api/1.7.10/noppes/npcs/scripted/S ...
怎么设置全世界的玩家在线每1分钟就加一块钱
世界在指定过多少时间执行一段指令
84791177qq 发表于 2017-3-12 22:15
怎么设置全世界的玩家在线每1分钟就加一块钱
世界在指定过多少时间执行一段指令 ...
恩...是用哪款金钱插件的?
原则上插件应该都会提供更动玩家金钱的命令吧?
这样只要设置一个计时器(可以用漏斗做)
每1分钟发出一次信号给命令方块就行了吧?...应该不需要用到脚本?
只是要确保服务器开启时,计时器能自动正常运作
所以要把计时器放在地图的重生点附近,保持让它在出生点区块内就可以持续运作
脚本完全看不懂
84791177qq 发表于 2017-3-17 16:58
money
命令方块怎么执行?
如果是ESS自带的金钱功能的话
使用/eco give @a [金额] 就可以给全部玩家指定金额了
不过我有点忘记用@a给出的对象有没有包含其他世界的玩家...这部分要去测试一下
平凡的行者 发表于 2017-3-18 15:58
如果是ESS自带的金钱功能的话
使用/eco give @a [金额] 就可以给全部玩家指定金额了
可不可以创造个NPC打死他后,某区域的方块消失,然后过多少秒后又放方块
84791177qq 发表于 2017-3-25 12:11
可不可以创造个NPC打死他后,某区域的方块消失,然后过多少秒后又放方块 ...
方块消失一段时间后再放方块可以用/fill和/clone命令,配合命令方块和红石做到
至于触发命令方块的方法,可以让NPC死亡时在指定位置放下红石砖触发。这个只要用脚本写一行命令就可以了。
平凡的行者 发表于 2017-3-27 20:10
方块消失一段时间后再放方块可以用/fill和/clone命令,配合命令方块和红石做到
至于触发命令方块的方法 ...
1.7.10版本没有这些指令
84791177qq 发表于 2017-3-28 22:03
1.7.10版本没有这些指令
如果是开服务器的话,试试看用命令方块执行WorldEdit的指令来移动方块
不过WorldEdit的命令不能直接交给命令方块执行
我之前开服时的做法是使用CBWrapper插件让命令方块执行WorldEdit的命令
https://dev.bukkit.org/projects/cbwrapper
试试看用这个做出命令方块阵列后再让npc使用脚本触发。
平凡的行者 发表于 2017-3-31 23:42
如果是开服务器的话,试试看用命令方块执行WorldEdit的指令来移动方块
不过WorldEdit的命令不能直接交给 ...
额说了,不是1.8的= =
本帖最后由 平凡的行者 于 2017-4-1 18:08 编辑
CBWrapper的插件可以在1.7.10下的服务器用吧
WorldEdit插件也可以在1.7.10用吧?
不用插件帮忙的话就剩下写个回圏来一个一个复制方块这个方法了..
84791177qq 发表于 2017-4-1 17:35
额说了,不是1.8的= =
CBWrapper的插件可以在1.7.10下的服务器用吧
WorldEdit插件也可以在1.7.10用吧?
不用插件帮忙的话就剩下写个回圏来一个一个复制方块这个方法了..
平凡的行者 发表于 2017-4-1 18:03
CBWrapper的插件可以在1.7.10下的服务器用吧
WorldEdit插件也可以在1.7.10用吧?
不用插件帮忙的话就剩下写 ...
直接这样吧就是打死一个npc放置一个方块延迟几秒有删除那个方块
本帖最后由 平凡的行者 于 2017-8-27 00:49 编辑
抱歉这么晚才回覆
如果只是想改变手持道具,而不管该道具上有什么额外属性的话,
可以使用IWorld下的createItem(String name,int damage,int size)方法
具体写法如下:
复制代码
上述代码执行后,NPC的副手就会拿起一把钻石剑
小黑的手臂 发表于 2017-8-17 11:16
想问一下dalao,我想在某些事件下让npc的左手物品改变。。
但是不知道event.npc.getInventory().setLeftHan ...
抱歉这么晚才回覆
如果只是想改变手持道具,而不管该道具上有什么额外属性的话,
可以使用IWorld下的createItem(String name,int damage,int size)方法
具体写法如下:
- var n = event.npc
- var w = n.getWorld()
- n.getInventory().setLeftHand(w.createItem("minecraft:diamond_sword",0,1))
上述代码执行后,NPC的副手就会拿起一把钻石剑
Yihc 发表于 2017-8-26 21:27
能不能就是让他隔三差五变个人物模型...
求求大神了...
如果你说的是要改变皮肤的话(例如从某个普通村民的皮肤突然变成一个刺客的皮肤)
这个可以很简单的做到,因为有提供API
如果你要他变成另一个生物的模型的话(例如从一匹马变成一个村民),就稍微困难,
需要研究一下能不能藉由其他方法修改NPC使用的生物模型
平凡的行者 发表于 2017-8-27 00:46
如果你说的是要改变皮肤的话(例如从某个普通村民的皮肤突然变成一个刺客的皮肤)
这个可以很简单的做到 ...
哦哦!谢谢大神的解答
平凡的行者 发表于 2017-2-13 20:53
先放上与实作功能有相关API:
http://www.kodevelopment.nl/customnpcs/api/1.7.10/noppes/npcs/scripted/S ...
大佬请问 这个 玩家 type 值从哪里看的 玩家返回1 那么其他生物呢 查了下文档 硬是没找到
我想请问下dalao 有没有API 能获取 正在攻击的玩家 手上的物品对改物品进行操作 例如玩家用钻石剑攻击 NPC受到伤害后,修改钻石剑的耐久为0 我查了下player的函数 只有个getInventory() 获取背包的方法 返回值是 Returns a IItemStack array size 36 返回个大小为36 ItemStack 数组 意思应该是获取到背包的大小 通过数组下标对背包内的物品进行获取修改 但是物品栏的没有获取到 如何修改物品 也没有相关的API
@平凡的行者
