欢迎光临散文网 会员登陆 & 注册

一种基于Kubejs和原版指令的大逃杀缩圈方法(优化版)

2023-07-25 21:17 作者:维克斯纳瑞_VX-Nary  | 我要投稿

上一版请看CV24837073

上一版实际上是利用了层层嵌套的代码来实现的,繁琐,不美观,行数高达200多行。在KJS群友的启发下,我使用了递归函数来实现了大逃杀缩圈的效果,包括定时缩圈,圈中心移动。

不过随机缩圈还没做,嗯,等下个版本吧。

代码如下,并非最优代码,如要copy请标明出处。


waittingTime = [600,300,240,60,60,30,30]//缩圈前的等待时间

closingTime = [300,180,120,60,60,30,60]//缩圈持续时间

xPoint = [476,505,336,382,355,361,319,355]//各次收缩时的中心点x坐标

zPoint = [-718,-671,-556,-534,-578,-556,-566,-567]//各次收缩时的中心点y坐标

range = [650,300,140,70,30,15,1]//各次收缩最终半径

doneTime = 0 //函数已执行次数


function doRing(sv){

    let ES = sv

    var i = 0 //记录已经执行的步数

    var imax = closingTime[doneTime]/0.1

    var x = xPoint[doneTime]

    var z = zPoint[doneTime]

    var aveX = (xPoint[doneTime+1]-xPoint[doneTime])/imax

    var aveZ = (zPoint[doneTime+1]-zPoint[doneTime])/imax

    var r = range[doneTime]

    var CT = closingTime[doneTime]

    ES.schedule(waittingTime[doneTime] *SECOND ,ES,function(callback){

        ES.tell('安全区正在缩小')

        ES.tell(`x=${x},z=${z},imax=${imax}`)

        ES.runCommandSilent(`worldborder set ${r} ${CT}`)

        ES.schedule(0.02 * SECOND, ES, function(callback){

            i++;

            x = x + aveX

            z = z + aveZ

            ES.runCommandSilent(`worldborder center ${x} ${z}`)

            if (i <= imax) {//判断条件以重复执行

                callback.reschedule();

            } else if(i > imax && doneTime < 7){

                doneTime++

                ES.tell('安全区已停止缩小'+doneTime)

                doRing(ES)

            } else if(doneTime >= 7) ES.tell('安全区已完全缩小')

        })

    })

   

    }


onEvent('player.chat',function(event){

    if(event.message.trim().equalsIgnoreCase('!test')){

        event.server.tell('检测到指令,开始测试')

        doRing(event.server)

    }

})



一种基于Kubejs和原版指令的大逃杀缩圈方法(优化版)的评论 (共 条)

分享到微博请遵守国家法律