猫史档案馆


【一个简陋的防挂机功能】

用户:yee089yee089查看:12 回复:6 评论:12 创建时间:2022-02-26T17:58:41


world.onPlayerJoin(({entity})=>{ //防挂机
    var time1 = 0;
    world.onTick(({tick})=>{
        if(entity.player.walkState == ''){
            time1++;
        }
        else{
            time1 = 0;
        }
        if(time1 >= 5000){
            entity.player.kick();
            world.say(`${entity.player.name}挂机了`)
            time1=0;
            
        }
    })
})

简单的说,若挂机,则该玩家一定是处于同一行走状态的(有可能一直蹲着),那么当玩家换行走状态时,代表未挂机;此时让now=entity.player.walkState即可,然后继续判断是否持续很久为同一行走状态))

 

 

你学废了吗))


回复

上一页1 页 / 共 1下一页
一个STUB用户_14302596一个STUB用户_14302596

总觉得不太靠谱,有说不出哪里不对()

点赞0


评论


FML饭米粒FML饭米粒

这个有问题,如果你被kick了,过一段时间还会继续提示,因为ontick没有取消,而且这样子的话每进一个人,就会多一个ontick,推出了却不会少,那么服务器会卡死的

点赞0


评论


萌新大佬萌新大佬

为了防止卡死,我一般都这么写

world.onPlayerJoin(({entity})=>{
    entity.time1=0;
})
world.onTick(()=>{
    world.querySelectorAll('player').forEach((entity)=>{
        if(entity.player.walkState==''){
            entity.time1++;
        }
        else{
            entity.time1=0;
        }
        if(entity.time1>=1000){
            entity.player.kick();
            world.say(`${entity.player.name}挂机被踢出服务器`)
            entity.time1=0;
        }
    })
})

这样每tick如果玩家已经退出那么querySelectorAll是找不到他的,而且这样entity.time1也可以在其他地方修改,比如当对对话框有操作时也可以清零等

点赞0


评论


未名用户未名用户

👀👀👀

点赞0


评论


503_Service_Error503_Service_Error

如果被kick了,onTick没有取消,不仅服务器会一直提示,每提示一次如果玩家在的话就还会被kick,这样服务器容易卡

点赞1


评论


堂主の犬堂主の犬

盗墓

点赞0


评论