猫史档案馆


【Box3超级干货帖】输入玩家姓名将其关监狱功能怎么做!

用户:开心地小电鼠开心地小电鼠查看:0 回复:4 评论:0 创建时间:2020-10-05T22:51:48


hello!我是开心的小电鼠,Box3干货帖来喽~

今天的干货牵扯到一些算法哦~萌新如果看不懂就直接到最后白嫖代码吧!

今天咱们主要讲区输入命令,什么是命令呢,比如实现这样的效果:

关监狱Alex79

输入这行命令,就把我转移到监狱里了。

那咱们今天就讲讲怎么实现这个关监狱的效果:

首先,因为要取玩家说的话,onChat事件不能少

world.onChat(async ({entity,message})=>{

}});

然后随手判断说话的是否为玩家

if(entity.player){

}

然后判断是否为管喵(你总不会让任何一个人都有关监狱权限吧)

if(entity.player.name == "管喵名称"){

}
else{
    world.say("你不是管喵")
}

下面重点来啦啦啦!!!都注意啦啦啦!!!

咱们先要定义一个私有变量,来储存玩家输入的文字

entity.player.mess=message;

下面!才是划重点敲黑板的地方!

下面!咱们要用到一个函数,这个函数的作用是把一个字符串里的一些字符分离出来

 

函数介绍:

slice()函数

功能:arrayObject.slice(start,end)返回一个新的数组,包含从start到end(不包括该元素)的arrayobject中的元素。

start:必需填。指定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。

end:可选。指定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

我这解释的够清楚了吧!

比如:

var str='abcdefghijk';
alert(str.slice(1,5))   //结果bcde

那么,知道我要干什么了吧,我要喵家的用户名从中分离出来,然后根据用户名将其玩家关监狱

var name = entity.player.mess.slice(3);

这行代码的意思就是定义了一个叫name的公有变量,然后喵家的私有变量的值(也就是玩家输入的内容)从中分离出要关监狱的玩家的名字

关监狱是三个字,那从第四个字开始到最后一个字就是分离出来的名字了这行代码就是这个意思。

下面的代码就简单了

world.querySelectorAll('player').forEach((x) => {
      if (x.player.name == name){
          x.position.x = 转移x坐标;
          x.position.y = 转移y坐标;
          x.position.z = 转移z坐标;
      }
})

这段代码过于简单,我不想讲了...

大佬一看就懂,萌新一脸懵逼

 

.......

算了,为了Box3的萌新喵,我还是讲一下吧

world.querySelectorAll('player').forEach((x) => {

})

这段代码的意思就是遍历循环地图中的所有玩家,并赋值给x

下面就该判断玩家的用户名了

if(x.player.name == name){

}

这段代码的意思就是判断x里存的玩家的名字是否为咱们刚才定义的变量name里的名字

然后转移

x.position.x = 转移x坐标;
x.position.y = 转移y坐标;
x.position.z = 转移z坐标;

这段程序就讲解完了,我讲的是不是很详细?如果觉得讲得好,在评论区扣emotion_编程猫_点赞或者666

下面完整代码白嫖时间到!萌新们可以把代码愉快的白喵,对了,里面的参数得改(大佬看到这里会说一声废话),否则会报错!

world.onChat(async ({entity,message})=>{
if(entity.player){
    if(entity.player.name == "管喵名称"){
        entity.player.mess=message;
        var name = entity.player.mess.slice(3);
        world.querySelectorAll('player').forEach((x) => {
            if (x.player.name == name){
                x.position.x = 转移x坐标;
                x.position.y = 转移y坐标;
                x.position.z = 转移z坐标;
            }
        })
    }
    else{
        world.say("你不是管喵")
    }
}});

emotion_编程猫_加油如果有什么问题或疑惑,欢迎评论!!!emotion_编程猫_加油


回复

上一页1 页 / 共 1下一页
开心地小电鼠开心地小电鼠

改良版:

var administrators = ['BCX编程中手']//可以继续往后加。

world.onChat(async ({entity,message})=>{
if(entity.player){
    if(administrators.includes(entity.player.name)){
        if(message[0] == '/'){
            entity.player.mess=message;
            var name = entity.player.mess.slice(2);
            if(administrators.includes(name)){
                entity.player.directMessage('不能将管喵封进监狱。')
            }else{
                world.querySelectorAll('player').forEach((x) => {
                    if (x.player.name == name){
                        x.position.x = 0;//可以改
                        x.position.y = 0;//可以改
                        x.position.z = 0;//可以改
                    }
                })
            }
        }
    }
}});

点赞0


评论


async_functionasync_function

var administrators = ['BCX编程中手']//可以继续往后加。

world.onChat(async ({entity,message})=>{
    if(entity.player && administrators.includes(entity.player.name) && 
    message[0] == '/'){
        entity.player.mess=message;
        var name = entity.player.mess.slice(2);
        if(administrators.includes(name)){
            entity.player.directMessage('不能将管喵封进监狱。')
        }else{
            world.querySelectorAll('player').forEach((x) => {
                if (x.player.name == name){
                    x.position.set(0,0,0);//可以改(第1、2、3项分别为x、y、z轴)
                }
            })
        }
    }
});//简化版

点赞2


评论


Ice_rinkIce_rink

666

点赞0


评论


墨染云天墨染云天

师傅

点赞0


评论