minecraftpe吧 关注:638,738贴子:15,084,440

【MODPE】转移仇恨算法

只看楼主收藏回复

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


IP属地:广东来自Android客户端1楼2016-05-06 19:36回复


    IP属地:安徽来自Android客户端2楼2016-05-06 19:37
    回复
      围观


      来自Android客户端3楼2016-05-06 19:40
      回复
        把仇恨转移到照相机


        IP属地:辽宁来自Android客户端4楼2016-05-06 19:41
        回复
          楼主快更qwq


          IP属地:江苏来自Android客户端5楼2016-05-06 19:49
          收起回复
            额然后呢
            只是用来凑字数的
               --来自助手版贴吧客户端


            IP属地:湖北来自Android客户端6楼2016-05-06 19:52
            收起回复
              高谈阔论,


              7楼2016-05-06 19:54
              回复
                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
                    回复
                      他自己不想说


                      12楼2016-05-06 20:00
                      收起回复
                        有用 支持一个 很细心
                        只是用来凑字数的
                           --来自助手版贴吧客户端


                        IP属地:湖北来自Android客户端13楼2016-05-06 20:01
                        回复
                          已收藏


                          IP属地:天津来自Android客户端14楼2016-05-06 20:03
                          回复
                            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
                            收起回复