用户:
DebugDynamo查看:11 回复:15 评论:11 创建时间:2023-01-04T10:20:24
众所周知,box一坤年没出教程了()
今天在填新坑的时候,做了一个神奇的功能)
不知道大家有没有玩过超时空
就是屑喆超时空里面的一个修复建筑的功能(不是那个重置城市的,是里面的一个道具:异星扳手)
结果这个功能被box给偷了(bushi
代码如下:
var vox = {}
var CanVoxel = false
async function sujian() {
world.say('开始扫描地图')
for (let x = 0; x < 128; x++) {
vox[String(x)] = {}
for (let y = 0; y < 128; y++) {
vox[String(x)][String(y)] = {}
for (let z = 0; z < 128; z++) {
vox[String(x)][String(y)][String(z)] = voxels.name(voxels.getVoxel(x, y, z))
}
}
await sleep(100)
}
world.say('扫描完成,可以开始修复地图了!')
CanVoxel = true //扫描完成后就可以开始修复了()
} sujian()//这里是要先提前扫描地图,为方便之后的修复
world.onPlayerJoin(({entity})=>{
entity.ban = true//扳手的冷却效果(不然会很卡)
})
world.onPress(async ({ entity, button, raycast }) => {
if (button == Box3ButtonType.ACTION0) {
if (!CanVoxel) return entity.player.directMessage('地图初始化未完成!')
if (!entity.ban) return entity.player.directMessage('冷却中……')
const pos = raycast.voxelIndex
entity.ban = false
var num = 0
var ber = Math.ceil(Math.random() * 1.75/*这里的1.75是修复的范围,越大越卡,我个人推荐1.75 */)
for (let x = (pos.x - ber); x <= (pos.x + ber); x++) {
if (x < 0 || x > 126) continue
for (let y = (pos.y - ber); y <= (pos.y + ber); y++) {
if (y < 0 || y > 126) continue
for (let z = (pos.z - ber); z <= (pos.z + ber); z++) {
if (z < 0 || z > 126) continue
var c = voxels.getVoxel(x, y, z)
var d = voxels.name(c)
if (vox[String(x)][String(y)][String(z)] !== d) {
voxels.setVoxel(x, y, z, vox[String(x)][String(y)][String(z)])
num += 1
} else {
continue
}
}
}
await sleep(100)//这里是等待的时间,越快越卡,越慢修复方块的速度越慢
}
entity.ban = true
entity.player.directMessage(`你修复了${num}个方块`)
}
})
都看到这了,还不给box一个关注
毕竟,这么n b的教程,可不是每天都有的啊()()
(注:为各位岛民测试本代码,box贴心的附上了轰炸的代码,还不给box一个关注?)
DebugDynamo附件:轰炸代码
(模型请自己找)
async function awa(mesh, y) {
var h = world.createEntity({
mesh: mesh,
scale: new Box3Vector3(0.5, 0.5, 0.5),
collides: true,
gravity: true,
position: {
x: Math.random() * 126,
y: y,
z: Math.random() * 126,
},
})
h.addTag('穿地弹')
await sleep(30000)
h.destroy()
}//增加一个空袭,来测试修复建筑功能
async function game() {
while (1) {
awa('mesh/核弹.vb', 140)
await sleep(2000)
}
} game()//不停生成导弹,用于摧毁地图建筑
world.onVoxelContact(({ entity }) => {
if (entity.hasTag('穿地弹')) {
voxer(entity)
}//导弹的摧毁特效
})
function voxer(shell) {//感谢尹子提供的特效代码)
var p = new Box3Vector3(Math.round(shell.position.x), Math.round(shell.position.y), Math.round(shell.position.z))
console.log("-------")
var r = 5;
for (let x = p.x - r; x <= p.x + r; x++) {
for (let y = p.y - r; y <= p.y + r; y++) {
for (let z = p.z - r; z <= p.z + r; z++) {
var dis = Math.round(new Box3Vector3(x, y, z).distance(p));
if (voxels.getVoxel(x, y, z) != 0 && dis <= r) {
var vox = voxels.getVoxel(x, y, z);
if (dis == r) {
voxels.setVoxel(x, y, z, "lava02");
} else {
voxels.setVoxel(x, y, z, "air");
}
}
}
}
}
}点赞1
评论