minecraftpe吧 关注:638,737贴子:15,084,461
  • 4回复贴,共1

【MODPE】转移仇恨算法

取消只看楼主收藏回复

1l不给看,然而没有工作室,以前的工作室.....可能是退了吧。。。。
OK,
本次讲的是转移怪物仇恨,因为Entity.setTarget函数必须两个实体,所以不能消除仇恨,只能转移仇恨
原理先讲一下。。。。。嗯,就是转移仇恨到其他实体
下面举例说明
ps:仇恨指怪物的攻击目标优先值,第一仇恨就是怪物(生物?)首要攻击目标


IP属地:广东来自Android客户端1楼2016-05-06 19:36回复
    var s,n
    var kg=false //开关
    var 实体=[],数组数
    //数组数指在数组中是顺序号(id?)
    var i=0
    function modTick(){
    if(i==20){//一秒钟是为了游戏流畅
    实体=Entity.getAll();
    //获取全部实体
    for(数组数=0;数组数<=实体.length;数组数++){
    //for循环
    if(Entity.getEntityTypeId(实体[数组数])==32){
    //如果在循环中发现有一个数对应的实体id为32(就是僵尸)
    if(获取距离(实体[数组数],getPlayerEnt())<=3&&Entity.getTarget(实体[数组数])==getPlayerEnt()){
    //调取对应(就是上面发现的实体)实体与玩家的距离
    //如果发现那个实体与玩家的距离小于3格
    //Entity.getTarget(实体[数组数])==getPlayerEnt()---如果那个实体的仇恨是玩家
    s=实体[数组数]
    n=Level.spawnMob(Entity.getX(s),Entity.getY(s)+1,Entity.getZ(s),19);
    Entity.setHealth(n,999);
    Entity.addEffect(n,MobEffect.invisibility,20*9999,250,false,false);
    //生成一只无限隐身的蝙蝠(蝙蝠会飞,僵尸不好打)
    //可以改用其他生物(比如自己定义的实体)
    kg=true
    //打开开关
    }}}
    i=0
    }
    if(kg==true){
    if(Entity.getHealth(s)<=0||获取距离(s,getPlayerEnt())>=7){
    //如果被转移仇恨生物死亡或玩家离那个实体7格远
    Entity.remove(n)
    //删除生成的无敌靶子(就是上面生成的蝙蝠)
    kg=false
    关闭开关
    }
    Entity.setTarget(s,n)
    //如果上面没有执行,设置s(就是被转移仇恨生物,上面定义了的)的仇恨(攻击目标)为n(就是上面生成的靶子)
    }
    i++
    }
    function 获取距离(实体a,实体b){
    return Math.sqrt(Math.pow(Entity.getX(实体a)-Entity.getX(实体b),2)+Math.pow(Entity.getY(实体a)-Entity.getY(实体b),2)+Math.pow(Entity.getZ(实体a)-Entity.getZ(实体b),2));}
    //获取某生物与另一生物的距离算法


    IP属地:广东来自Android客户端8楼2016-05-06 19:55
    收起回复
      上面是在玩家周围的生物都被转移仇恨,下面举例点击转移仇恨或其他


      IP属地:广东来自Android客户端9楼2016-05-06 19:58
      回复
        楼主因为不是提前准备,所有大家原谅有点慢


        IP属地:广东来自Android客户端10楼2016-05-06 19:59
        回复
          var kg=false
          //开关
          var s,n,i=0
          function attackHook(a,b){
          //也可以用entityHurtHook钩子或projectileHitEntityHook钩子
          s=b//被转移者
          n=Level.spawnMob(Entity.getX(s),Entity.getY(s)+1,Entity.getZ(s),19);
          Entity.setHealth(n,999);
          Entity.addEffect(n,MobEffect.invisibility,20*9999,250,false,false);
          //生成一只无限隐身的蝙蝠(蝙蝠会飞,僵尸不好打,适合当靶子)
          //可以改用其他生物(比如自己定义的实体)
          kg=true
          //打开开关
          }
          function modTick(){
          if(kg==true){//判断开关状态
          if(Entity.getHealth(s)<=0){
          //如果被转移仇恨生物死亡
          Entity.remove(n)
          //删除生成的无敌靶子(就是上面生成的蝙蝠)
          kg=false
          关闭开关
          }
          if(Entity.getHealth(n)<=0){
          //如果靶子死亡
          kg=false
          }
          Entity.setTarget(s,n)
          //如果上面没有执行,设置s(就是被转移仇恨生物,上面定义了的)的仇恨(攻击目标)为n(就是上面生成的靶子)
          }
          }


          IP属地:广东来自Android客户端15楼2016-05-06 20:13
          收起回复