@@Leo
本帖最后由 @@Leo 于 2018-8-25 21:33 编辑

Custom Npcs 教程

命令与脚本
哈哈,各位伙伴大家好,我Leo回来啦!
到了最蛋疼的命令与脚本部分我就不知道拖了多久了(众人:半年了才**回来)
声明一下:好多好多来自z25096708


指令
为了避免指令冲突, 全部指令都以/noppes开头. 对于大多数的自动完成的东西, 你可以轻松地使用TAB键完成.命令参数中, <>为必填项, []则为可选项. 命令默认不加/




脚本
这个是最难啃的一块,没有编程基础的勿入


没啦没啦没啦
我的脚本代码也都是半会不会呢~~~
希望有大神来帮帮我。
假如你们有问题不会的可以来问我,让我积累一点exp
当然假如你很急的话,去问平凡的行者吧~



END



2021.12 数据,可能有更多内容Custom Npcs 教程
命令与脚本哈哈,各位伙伴大家好,我Leo回来啦!到了最蛋疼的命令与脚本部分我就不知道拖了多久了(众人:半年了才**回来)声明一下:好多好多来自z25096708

指令
为了避免指令冲突, 全部指令都以/noppes开头. 对于大多数的自动完成的东西, 你可以轻松地使用TAB键完成.命令参数中, &lt;&gt;为必填项, []则为可选项. 命令默认不加/

HELP帮助:

代码:

  1. help <子命令> ------- 查看帮助
eg: /noppes help faction --- 查看派系类指令的帮助
Script 脚本:

代码:

  1. reload ------------------- 重载
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:&lt;npc&gt; home [x] [y] [z] ------------------ 设置NPC的重生点&lt;npc&gt; create ------------------------------ 创建一个NPC&lt;npc&gt; delete-------------------------------- 删除NPC&lt;npc&gt; visible ------------------------------- 设置NPC是否可见&lt;npc&gt; owner [玩家] ---------------------- 设置npc跟随的玩家&lt;npc&gt; name &lt;name&gt; -------------------- 更改NPC名称eg: /noppes npc what create 创造一个名为what的NPC
Slay 击杀:all [范围]------------------------ 杀掉以玩家为中心的范围内所有不是npc的实体items [范围]-------------------- 移除范围内所有凋落物animals [范围]------------------ 杀死所有范围内的动物mobs [范围]-------------------- 杀死所有范围内的怪物&lt;实体名&gt; [范围]--------------- 移除范围内指定实体eg: /noppes slay all 60  移除60格方块内的所有不是npc的实体


Clone 克隆:List &lt;tab&gt; ------------------------------------------------ 列出在标签tab的NPCAdd &lt;npc&gt; &lt;tab&gt; [克隆名] --------------------------- 克隆npc到指定标签Del &lt;name&gt; &lt;tab&gt; ------------------------------------- 从指定标签移除指定的npcSpawn &lt;name&gt; &lt;tab&gt; [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 派系:&lt;player&gt; &lt;faction&gt; add &lt;点数&gt; ------------- 增加玩家对指定派系指定点数&lt;player&gt; &lt;faction&gt; subtract &lt;点数&gt; ------- 减少玩家对指定派系指定点数&lt;player&gt; &lt;faction&gt; set &lt;点数&gt; -------------- 设置玩家派系点数&lt;player&gt; &lt;faction&gt; reset ---------------------- 设置玩家对指定派系点数为默认值&lt;player&gt; &lt;faction&gt; drop ---------------------- 使玩家不认识指定派系eg: /noppes faction Leo friendly add 100 给玩家Leo与派系friendly的关系加100


Quest 任务:Start &lt;玩家&gt; &lt;任务ID&gt; -------------- 让玩家开始指定任务Finish &lt;玩家&gt; &lt;任务ID&gt; ------------- 设置玩家完成指定任务Stop &lt;玩家&gt; &lt;任务ID&gt; -------------- 停止玩家正在进行指定任务Remove &lt;玩家&gt; &lt;任务ID&gt; ---------- 移除玩家正在进行/已完成的指定任务eg: /noppes quest start Leo 1 给玩家Leo任务编号为1的任务(编号可以在设置任务的地方查看)
Dialog 对话:Read &lt;玩家&gt; &lt;对话id&gt;----------------- 为玩家设置指定对话为已阅Unread &lt;玩家r&gt; &lt;对话id&gt;------------- 为玩家设置指定对话为未读Reload ------------------------------------- 从世界文件夹中重载所有对话. eg: /noppes dialog reload重载对话
END



脚本这个是最难啃的一块,没有编程基础的勿入最新版Java默认可以支持JavaScript. 但是一样可以加载其他的脚本语言通过下载他们的库并让Forge将其加载(同理bukkit)我这里搬运4种:http://pan.baidu.com/s/1dECYRgHECMAScript(一般叫做JavaScript),一种常见的脚本,最新版的java8已经自动支持。如果你安装了jre1.8依旧不可用, 去&quot;java/jre/lib/ext&quot;目录复制&quot;nashorn.jar&quot;文件到你的mods文件夹Python,简称py,java关于它的脚本引擎又叫做Jython。Php,很常见的一种网页语言Lua,轻量高效,可以多平台运行,有完整的库和工具(反正官网就这个意思)使用方法:下载扔进mods
现在又要提及脚本魔杖了用这个东西右键NPC,就会跳出一个GUI,你可以在“语言”那一项来切换你使用的语言
1.8.8之前的:在左上角的“脚本”那里点击一下左边那一溜是监听,中间那里是输入代码用的加载代码那个按钮,用来加载代码文件夹里面的代码跟直接输在里面差不多……&quot;编辑&quot;怎么用我就不知道了(我反正我用一次卡一次)
1.8.8及之后的:初始的调控界面还是差不多的你要写代码,用左上角的&quot;+&quot;来添加新的代码现在开始代码可以在各个监听之间穿起来了呢


那么问题又来了:代码格式是什么呢看doc去:http://www.kodevelopment.nl/customnpcs/api/然后我举个例子JavaScript:
npc.say(&quot;呵呵&quot;);

Python
npc.say(&quot;呵呵&quot;)

都是输出&quot;呵呵&quot;的具体其他代码格式怎么样?看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())
这里都是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
引索:

@@Leo
二楼备用
@z25096708

Yihc
先前排,赞个楼主,我一直想知道脚本怎么搞

117779284
然而来几个实例 这帖子就火了·

Zombie_Zombie
谢谢了,

@@Leo
Yihc 发表于 2016-12-24 16:07
先前排,赞个楼主,我一直想知道脚本怎么搞

老版主大人好
话说一开始我只是不知道脚本输入哪里而已
不过那个加载脚本具体怎么用我还是不会QAQ

。—。
所以楼主酷爱回来把帖子里那些不明的div align span啥啥的编辑掉!

平凡的行者
话说关于Player的监听是不是还没办法用..?
自己有查过,关于用在Player的监听,要写在拿脚本魔杖对空右键后出来的介面内

但是随便写了一些代码进去后发现什么都没发生...就算是用了目前1.11beta版的也是无效....

这让我很困扰阿...这样主动监控玩家的行为就做不到了....
而且余下可用的监听函数内貌似没有可调用到计分板的物件....真不方便

平凡的行者
117779284 发表于 2016-12-24 16:10
然而来几个实例 这帖子就火了·

不如先给点想法如何?
看看有没有想要NPC做到的事?
然后我试试用脚本写出来?

117779284
平凡的行者 发表于 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




117779284
平凡的行者 发表于 2016-12-26 03:06
1.10.2版:

将图中的/say换成其他指令即可

呃·被击杀执行指令 这个貌似不行啊。
没有任何提示和响应·
npc.executeCommand("/say 1");
npc.setTempDate("killed".true);

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