HikariOrda
如标题,服务器用的NPC模组,想用它做一个类似每日可刷新的资源点的功能。
我的想法是用物品给予者身份设置每日给一次物品就行了。


但是npc的物品给予者会在玩家靠近npc的同时给予物品,这样视觉体验较差,我试过在对话框里设置对话选项绑定职业设置,但那个职业设置只能跟商人或者雇佣随从这种的关联,没法和物品给予者关联。


我也不懂脚本,想问问有没有什么办法实现玩家和npc对话,或者右键交互后获得资源,而不是一靠近就自动获得资源的效果?

墨阁听风
没有,NPC的设定没有这种,用插件

猜猜谁是谁
可用脚本实现,如果你之前没有用过脚本,请按照这贴进行脚本准备工作,做到「然后点击上面的加号,此时会跳转到一个脚本编辑界面」这句话即可。
  1. function interact(e){
  2.         var name=e.player.getDisplayName();
  3.         var cmd=[];
  4.         cmd.push('give ' +name+' stone 64 0 {display:{Name:{"text":"这是石头"}}}');
  5.         cmd.push('give ' +name+' grass 64 0 {display:{Name:{"text":"这是草"}}}');//可继续添加命令,按照格式来即可
  6.         var date=new Date(),day=date.toLocaleDateString();
  7.         var data=e.npc.getStoreddata();
  8.         if(!data.has(name)||day!=data.get(name)){
  9.                 data.put(name,day);
  10.                 for(var i=0;i<cmd.length;i++){
  11.                         e.npc.executeCommand(cmd[i]);
  12.                 }
  13.                 e.npc.sayTo(e.player,"§2您已成功领取本日物资,记得明天再来哦")//可自定义领取成功提示语
  14.         }
  15.         else{
  16.                 e.npc.sayTo(e.player,"§c您今日已经领取过物资啦,明天再来吧")//可自定义领取失败提示语
  17.         }
  18. }
复制代码
效果是每天玩家右键npc后就能领到物资,一天只能领取一次。
下面是注意事项:
①给予物品的方式我是通过执行give指令来实现的,为了让npc有权限使用指令,请将服务器的server.properties里的enable-command-block项设为true,这是官方原文:
On servers the enable-command-block option in the server.properties needs to be set to true
Use /gamerule commandBlockOutput false/true to turn off/on command block feedback
Setting NpcUseOpCommands to true in the CustomNPCs.cfg should allow the npc to run op commands, be warned this could be a major security risk, use at own risk
For permission plugins the commands are run under uuid:c9c843f8-4cb1-4c82-aa61-e264291b7bd6 and name:[customnpcs]

②是否可领取物资是按照日期来确定的,正常来说过了24点就可以领取下一次物资,如果实际使用中有问题再找我
③give指令可按照示例自定义,自定义时请确保原指令中没有包含英文单引号「'」,如果有请尝试替换为英文双引号「"」
④我论坛不时常在线,如果有问题并且比较急可以qq找我(在我个人信息页能找到)