用户:
伴雪纷飞查看: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 @ ="方块
使用代码前建议先在程序过一遍