小帅120
就是类似服福利那种
我在一个区域内随机刷一只NPC出来
但是有限时的 也就是说在几分钟什么的就消失了

dzy哦
npcmod可能不支持此项功能

dzy哦
你可以用指令,或在旁边手动

小帅120
duzhaoyang0922 发表于 2022-3-17 17:20
npcmod可能不支持此项功能

有什么插件或者是脚本什么的能实现不

dzy哦
我对插件没有研究

dzy哦
你可以去私聊那些做RPG地图的大佬,他们可能会给你别的建议

猜猜谁是谁
应该可以用npc脚本实现
大体思路就是预先将要召唤的npc存在复制魔杖里面;再设置一个专门的脚本npc,当达到一定条件后在指定坐标范围内随机选择一点召唤指定的npc;并且在指定npc中存入脚本,设定在生成后的多少秒自动消失
由于npc脚本不同版本不互通,因此需要您提供游戏版本,并且最好能细化要求,例如在什么条件下刷npc(固定时间?or 有玩家经过?or 随机时间间隔?)以及这个限时消失的时长具体多久(这个不是很重要,您也可以等我脚本框架大体出来后自行修改)

小帅120
猜猜谁是谁 发表于 2022-3-17 17:49
应该可以用npc脚本实现
大体思路就是预先将要召唤的npc存在复制魔杖里面;再设置一个专门的脚本npc,当达 ...

ok 我的是1.7.10版本
随机时间刷新 玩家得达到一定数量
刷新的时候如果可以加条信息和坐标位置


猜猜谁是谁
小帅120 发表于 2022-3-17 18:04
ok 我的是1.7.10版本
随机时间刷新 玩家得达到一定数量
刷新的时候如果可以加条信息和坐标位置

在使用脚本前需要先进行一些准备工作,详见该贴(做到安装完nashorn.jar即可)
在安装脚本前 首先要准备好要召唤的npc,建议在皮肤名称等属性都设置完以后再安装脚本,因为开启脚本后就会开始计时,到一定时间自动删除该npc
以下是脚本:
用脚本魔杖右键你要召唤的npc,显示出以下界面后将“开启”这一项从“否”改成“是”

然后点击左上角Scripts 在“运行”栏中粘贴以下代码:(粘贴请使用界面右上角自带的粘贴按钮,不要用ctrl+v,下同)
  1. npc.setTempData("init",world.getTotalTime());
复制代码
粘贴完应该如下图


然后点开“更新”栏,粘贴下面的代码:(此处代码可自行修改npc自动消失的时间
  1. var time=30;//设定自动消失时间,单位:秒
  2. var inittime=npc.getTempData("init");
  3. if(world.getTotalTime()-inittime>=time*20){
  4.         world.spawnParticle("cloud",npc.x,npc.y,npc.z,0.1,0.1,0.1,1,2);
  5.         npc.despawn();
  6. }
复制代码
粘贴好如下图


然后按esc关闭界面
随后尽快用Mob复制魔杖右键npc,并按照下图设置


名称自定义即可,但是需要记住,下面要手动填入名称
然后点击保存

之后在新建一个专门执行脚本的npc,可以在你想召唤的地点中央,或者也可以在任意地方,这个npc是专门用来执行脚本的工具人,所以可以把它设置成不可见或者藏起来
使用脚本魔杖右键该npc 将“开启”调为“是”后,在“运行”栏填入以下代码
  1. npc.clearStoredData();
复制代码
在“更新”栏填入以下代码:(在这里可以设置大部分召唤相关的属性,详见注释
召唤坐标的原理:确定两个点,以这两个点形成的矩形内随机挑一个坐标来召唤npc
  1. var name="要召唤的NPC名称";//设置要召唤的NPC名称(该NPC需要提前存入复制魔杖)
  2. var tab=1;//设置要召唤的NPC处于脚本魔杖中的tab编号,为1到9之间的数字
  3. var playernum=1;//设置区域内至少要有几个玩家才会随机刷新
  4. var cdmin=180,cdmax=300;//设置随机刷新的最短间隔与最长间隔,单位:秒
  5. var x1=npc.x-50,z1=npc.z-50,x2=npc.x+50,z2=npc.z+50;//设置刷新区域的范围,示例为相对坐标,可自行设置为绝对坐标
  6. //可以像这样设置绝对坐标:var x1=-123,z1=-456,x2=123,z2=456;

  7. var tmp;
  8. if(cdmin>cdmax) {tmp=cdmax;cdmax=cdmin;cdmin=tmp;}
  9. if(x1>x2) {tmp=x2;x2=x1;x1=tmp;}
  10. if(z1>z2) {tmp=z2;z2=z1;z1=tmp;}
  11. if(!npc.hasStoredData("timer")){
  12.         npc.setStoredData("timer",world.getTotalTime());
  13.         var randomcd=randomNum(cdmin,cdmax);
  14.         //print("cd:"+cdmin+" "+cdmax+" "+randomcd);
  15.         npc.setStoredData("cd",randomcd);
  16. }
  17. var cd=npc.getStoredData("cd");
  18. if(world.getTotalTime()-npc.getStoredData("timer")>=cd*20){//当满足刷新冷却时间
  19.         //print("满足冷却时间 "+cd)
  20.         if(getPlayerNum(x1,z1,x2,z2)>=playernum){//当区域内有足够多的玩家
  21.                 //print("满足玩家数目 "+playernum)
  22.                 npc.removeStoredData("timer");
  23.                 npc.removeStoredData("cd");
  24.                 var rx=randomNum(x1,x2),rz=randomNum(z1,z2),ry;
  25.                 ry=getGroundY(rx,rz);
  26.                 var clone=world.spawnClone(rx,ry,rz,tab,name);
  27.                 if(clone==null) print("错误:未在脚本魔杖的TAB "+tab+" 中找到名为 "+name+" 的npc!")
  28.                 else tellAll(rx,ry,rz);
  29.         }
  30. }
  31. function tellAll(tx,ty,tz){
  32.         var msg="§e"+name+" NPC已在 X=§c"+tx+" §eY=§c"+ty+" §eZ=§c"+tz+" §e处出现!";
  33.         var player=world.getAllServerPlayers();
  34.         for(var i=0;i<player.length;i++){
  35.                 player[i].sendMessage(msg);
  36.         }
  37. }
  38. function getGroundY(px,pz){
  39.         var result=npc.y,p=false;
  40.         for(var i=npc.y+20;i>=npc.y-20;i--){
  41.                 var block=world.getBlock(px,i,pz);
  42.                 if(block==null) p=true;
  43.                 if(block!=null&&p==true){
  44.                         result=i+1;break;
  45.                 }
  46.         }
  47.         return result;
  48. }
  49. function getPlayerNum(xmin,zmin,xmax,zmax){
  50.         var player=world.getAllServerPlayers();
  51.         var cnt=0;
  52.         for(var i=0;i<player.length;i++){
  53.                 if(player[i].x>=xmin&&player[i].x<=xmax&&player[i].z>=zmin&&player[i].z<=zmax) cnt++;
  54.         }
  55.         return cnt;
  56. }
  57. function randomNum(minNum,maxNum){//生成位于[minNum,maxNum]的随机数
  58.     switch(arguments.length){
  59.         case 1:
  60.             return parseInt(Math.random()*minNum+1,10);
  61.         break;
  62.         case 2:
  63.             return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
  64.         break;
  65.             default:
  66.                 return 0;
  67.             break;
  68.     }
  69. }
复制代码
最后按esc退出界面 这样应该就没问题了
正常的话在召唤时会提示信息,如下图


如果没法使用或者报错的话再告诉我 我帮你找找原因

LoserXM
本帖最后由 LoserXM 于 2022-3-17 21:01 编辑

纯原版 使用延时电路执行/summon Zombie ~ ~ ~ {CustomName:"福利怪"}
/kill @e[type=Zombie,name=福利怪]支持自定义npc 只要你知道自定义npc的type是什么
之前试过能让指定的自定义npc传送和旋转角度