猫史档案馆


[每周一氵]最快的复制建筑代码

用户:伴雪纷飞伴雪纷飞查看:10 回复:14 评论:10 创建时间:2023-01-12T23:52:28


接上一个代码https://shequ.codemao.cn/community/516718

一样( )要分4段输入到控制台

否则会报错( )

1.

ctrl=['add','subtract','multiply','pound','at','equal'];
assist=['zero'];
pl=[];
for (y = 0; y <= voxels.shape.y*2; y++) {
for (x = 0; x <= voxels.shape.x*2; x++) {
for (z = 0; z <= voxels.shape.z*2; z++) {
    if(ctrl.includes(voxels.name(voxels.getVoxelId(x,y,z)))){
        pl.push([x,y,z,voxels.name(voxels.getVoxelId(x,y,z))]);
    }
    if(assist.includes(voxels.name(voxels.getVoxelId(x,y,z)))){
        voxels.setVoxel(x,y,z,'');
}}}}
temp={
    add:undefined,
    subtract:undefined,
    circle:undefined,
    zones:undefined,
    zonee:undefined,
    tp:undefined
}

2.

pl.forEach((item)=>{
    switch(item[3]){
        case "add":
            if(!temp.add){
                temp.add=item;
                voxels.setVoxel(item[0],item[1]+1,item[2],'');
                return;
            }
            epos=new Box3Vector3(Math.max(item[0],temp.add[0]),Math.max(item[1],temp.add[1]),Math.max(item[2],temp.add[2]));
            spos=new Box3Vector3(Math.min(item[0],temp.add[0]),Math.min(item[1],temp.add[1]),Math.min(item[2],temp.add[2]));
            for(i=spos.x;i<=epos.x;i++){for(j=spos.z;j<=epos.z;j++){for(k=spos.y;k<=epos.y;k++){
                voxels.setVoxel(i,k,j,voxels.name(voxels.getVoxelId(item[0],item[1]+1,item[2])));
            }}}
            voxels.setVoxel(item[0],item[1]+1,item[2],'');
            
        break;

        case "subtract":
            
            if(!temp.subtract){ 
                temp.subtract=item;
                voxels.setVoxel(item[0],item[1]+1,item[2],'');
                return;
            }
            epos=new Box3Vector3(Math.max(item[0],temp.subtract[0]),Math.max(item[1],temp.subtract[1]),Math.max(item[2],temp.subtract[2]));
            spos=new Box3Vector3(Math.min(item[0],temp.subtract[0]),Math.min(item[1],temp.subtract[1]),Math.min(item[2],temp.subtract[2]));
            
            for(i=spos.x;i<=epos.x;i++){for(j=spos.z;j<=epos.z;j++){for(k=spos.y;k<=epos.y;k++){
                if(i==spos.x||j==spos.z||i==epos.x||j==epos.z){
                voxels.setVoxel(i,k,j,voxels.name(voxels.getVoxelId(item[0],item[1]+1,item[2])));
            }}}}
            voxels.setVoxel(item[0],item[1]+1,item[2],'');
        break;
    }
})

3.

function circle(item,_item){
    radius=Math.sqrt(Math.pow(item[0]-_item[0],2)+Math.pow(item[2]-_item[2],2));
            vox=voxels.name(voxels.getVoxelId(item[0],item[1]+1,item[2]));
    cx=item[0];
    cz=item[2];
    for(x=cx-radius; x<=cx+radius; x++){
    for(z=cz-radius; z<=cz+radius; z++){
        dx = x-cx;dz = z-cz;
        if(Math.round(Math.sqrt(dx*dx+dz*dz)) <= radius){
            voxels.setVoxel(x,item[1],z,vox);

        }
    }}
}
pl.forEach((item)=>{
    switch(item[3]){
        case "multiply":
            if(!temp.circle){
                temp.circle=item;
                return;
            }
            circle(item,temp.circle);
            voxels.setVoxel(item[0],item[1]+1,item[2],'');
            
        break;
        case "pound":
            
            if(!temp.circle){ 
                temp.circle=item;
                return;
            }
            circle(temp.circle,item);
            voxels.setVoxel(item[0],item[1]+1,item[2],'');
        break;
        case "at":
            if(!temp.zones){
                temp.zones=item;
            }
            else{
                temp.zonee=item;
            }
        break;  
        case "equal":
            temp.tp=item;
        break; 
    }
})

4.

if(temp.tp&&temp.zones&&temp.zonee){
    a=temp.zones;
    b=temp.zonee;
    tp=temp.tp;
    spos=new Box3Vector3(Math.min(a[0],b[0]),Math.min(a[1],b[1]),Math.min(a[2],b[2]));
    epos=new Box3Vector3(Math.max(a[0],b[0]),Math.max(a[1],b[1]),Math.max(a[2],b[2]));
    for(i=spos.x;i<=epos.x;i++){for(j=spos.z;j<=epos.z;j++){for(k=spos.y;k<=epos.y;k++){
        if(ctrl.includes(voxels.name(voxels.getVoxelId(i,k,j)))){continue};
        voxels.setVoxel(Math.abs(-i+spos.x-tp[0]),Math.abs(-k+spos.y-tp[1]),Math.abs(-j+epos.z-tp[2]),voxels.name(voxels.getVoxelId(i,k,j)));
    }}}
}

|0x01

放置两个 @ at方块框选注要复制的建筑

注:"0"方块可以用来垫脚

|0x02

放= equal 方块标记复制建筑的左下角

|0x03

将伟大的代码分4段输入到控制台

你便得到了双倍吉吉快乐 (喜  (bushi

注:在使用代码时请保证地图中没有多余的"+ - x # 0 @ ="方块

   使用代码前建议先在程序过一遍


回复

上一页1 页 / 共 1下一页
伴雪纷飞伴雪纷飞

接上一个代码https://shequ.codemao.cn/community/516718

点赞0


评论


星空·之夜星空·之夜

代码我看半天愣是没看懂,不过你的名字很漂亮。

 

点赞0


评论


指令者指令者

有没有对称代码

点赞0


评论


锦衣侠客锦衣侠客

emmmm

点赞0


评论


治愈绾兮治愈绾兮

BOX3中搞腾讯体?好吧我关注点错了()()

点赞2


评论


YLG_個YLG_個

收藏!!

 

点赞0


评论


AokenAoken

收藏

点赞0


评论


raearaea

收藏

点赞0


评论


复制建筑不就是个循环选中添加数组的代码吗()()

点赞1


评论


屑代码师屑代码师

报错))

点赞0


评论


外向的雷电猴-LHA外向的雷电猴-LHA

收藏

点赞0


评论


仙之鹤仙之鹤

dddd

点赞0


评论


AokenAoken

ddd

点赞0


评论


AokenAoken

center_image

点赞0


评论