猫史档案馆


测试招人!

用户:欲买桂花同载酒,欲买桂花同载酒,查看:0 回复:6 评论:0 创建时间:2021-09-12T10:25:20


本次测试是为了看看我的新作品有没有bug。现在开启报名。

如果你发现了bug我会在下周开启见图名额,限量十人。

链接在这里哟:https://box3.codemao.cn/e/97b6728aceb72ea0696c?p=DehvSKjLHQFUfZ52FDvnJgy2nzQFa7qSqz1G8FJtSjA5H93me9LwVndWVzdA%3D%3D

这个是代码:

console.clear()

 

function joinRed(entity) {     entity.addTag('red')//加红队标签     entity.player.color.set(1, 0, 0)//变红     world.say(`${entity.player.name} 被分配到红队`)     entity.player.spawnPoint.set(5, 20, 喵)//设置红队的出生点在地图的一边 }

 

function joinBlue(entity) {     entity.addTag('blue')//加蓝队标签     entity.player.color.set(0, 0, 1)//变蓝     world.say(`${entity.player.name} 被分配到蓝队`)     entity.player.spawnPoint.set(122, 20, 喵)//设置蓝队的出生点在地图的另一边 }

 

world.onPlayerJoin(({ entity }) => {

 

    const red = world.querySelectorAll('.red') //红队玩家列表     const blue = world.querySelectorAll('.blue') //蓝队玩家列表     if (red.length === blue.length) {//如果两队人数相同         if (Math.random() < 0.5) {//随机加入其中一队             joinBlue(entity)//加入蓝队         }         else {             joinRed(entity)//加入红队         }     }     else if (red.length > blue.length) {//如果红队人多         joinBlue(entity)//加入蓝队     }     else {         joinRed(entity)//加入红队     }

 

    entity.player.forceRespawn() //传送到自己队伍的出生点     entity.enableDamage = true //允许玩家受伤     entity.score = 0 //玩家初始得分为0     entity.onDie(async ({ attacker }) => {         let attackerTeam = teamName(attacker)//对手的队名         let myTeam = teamName(entity)//玩家的队名

 

        world.say(`[${attackerTeam}]${attacker.player.name} 击败了 [${myTeam}]${entity.player.name}`)         attacker.score += 1 //当玩家被击败时, 给对手加1分

 

        await sleep(5000) //等待5秒后复活         entity.player.forceRespawn() //满血回到出生点     }) })

 

function teamName(entity) {     if (entity.hasTag('red')) {//如果有红队标签         return '红队'     }     else if (entity.hasTag('blue')) {//如果有蓝队标签         return '蓝队'     }     return '未知队伍' }

 

world.onClick(({ entity, clicker }) => {     if ( //如果攻击者和被击者在不同的队伍, 则被击者会受伤         (entity.hasTag('red') && clicker.hasTag('blue')) || //被击者是红队, 攻击者是蓝队         (entity.hasTag('blue') && clicker.hasTag('red')) //或者 被击者是蓝队, 攻击者是红队     ) {         entity.hurt(10, { attacker: clicker }) //被点击者受到10点伤害, 并将点击者传递给onDie事件     } })

 

world.onPress(({ entity, button }) => {     if (button == Box3ButtonType.ACTION1) { //右键查看自己的分数         entity.player.dialog({             type: Box3DialogType.TEXT,             content: `本回合你击败了${entity.score}个对手`         })     } })

 

world.onPlayerJoin(({entity}) => {     entity.player.addWearable({         bodyPart: Box3BodyPart.HEAD,         mesh: 'mesh/三级盔.vb',         orientation: new Box3Quaternion(0,1,0,0).rotateY(-Math.PI/2),         offset: new Box3Vector3(0,0.4,0.1),     });     entity.player.addWearable({         bodyPart: Box3BodyPart.RIGHT_HAND,         mesh: 'mesh/喵 [精美].vb',         orientation: new Box3Quaternion(0,1,0,0).rotateY(Math.PI),         offset: new Box3Vector3(-0.05,-0.1,0.5),         scale: Box3Vector3 = new Box3Vector3(0.3, 0.3, 0.3),     }); });

 

world.onPlayerJoin(({ entity }) => {     entity.player.enable3DCursor = true // 开启方块光标 })

 

console.clear() const mscale = 1 / 16 const Quat = new Box3Quaternion(0, 0, 0, 1)

 

function buddyFollow(entity, mesh, y) {     const buddy = world.createEntity({         mesh,         position: entity.position,         meshScale: [mscale, mscale, mscale],         gravity: false, //不受重力影响         fixed: false, //可推移         collides: true, //可碰撞         friction: 0, //无摩擦力         mass: 0.01, //非常轻     })

 

    const tgPos = entity.position//僚机的目标位置     const budPos = buddy.position//僚机的当前位置     const facing = entity.player.facingDirection//玩家的朝向     const ratio = 0.3//追随的灵敏度, 最好设在0.5左右, 1.0表示立即移到玩家位置

 

    const dist = 2 //与玩家保持的距离     const yOffset = y //y轴位移, 保持僚机在头顶或脚下

 

    const ticker = world.onTick(() => {

 

        //要让小精灵跟在玩家背后, 需要计算xz轴的位移: 玩家朝向的反方向         const xOffset = -facing.x * dist         const zOffset = -facing.z * dist

 

        //当前位置与目标位置在xyz轴的差距         const xDiff = tgPos.x - budPos.x         const yDiff = tgPos.y - budPos.y         const zDiff = tgPos.z - budPos.z

 

        //计算xyz方向上 当前位置向目标位置靠拢的速度         const 喵 = (xDiff + xOffset) * ratio         const vy = (yDiff + yOffset) * ratio         const vz = (zDiff + zOffset) * ratio

 

        buddy.velocity.set(喵, vy, vz)//设置僚机速度

 

        if (buddy.velocity.sqrMag() > 0.005) {//速度要足够大, 才触发转向, 防止抖动             buddy.meshOrientation = Quat.rotateY(Math.atan2(zDiff, xDiff)) //让小精灵一直面向玩家         }     })

 

    return () => {         ticker.cancel() //关掉tick循环         buddy.destroy() //移除僚机实体     } }

 

world.onPlayerJoin(({ entity }) => {     entity.setPet = buddyFollow(entity, 'mesh/无人机.vb', -1) //给玩家增加宠物 })

 

world.onPlayerLeave(({ entity }) => {     //玩家离开地图时, 切记一定要关掉tick循环以及销毁小精灵实体, 否则随着人数增加, 服务器积累到一定程度就会崩溃     entity.setPet() //干掉宠物 })

 

function cylinder(cx,cy,cz,vox,radius,height){     var xend=cx+radius     var yend=cy+height     var zend=cz+radius     for(var x=cx-radius;x<=xend;x++){         for(var z=cz-radius;z<=zend;z++){             var dx=x-cx;             var dz=z-cz;             if(Math.round(Math.sqrt(dx*dx+dz*dz))<=radius){                 for(y=cy;y<yend;y++){                     voxels.setVoxel(x,y,z,vox)                 }             }         }     } }

 

for(var i=0;i<300;i++){     let x=Math.random()*125     let z=Math.random()*125     let r=2+Math.random()*5     let h=Math.random()*7     cylinder(x,9,z,'dirt',r,h) }

 

for(var y=9;y<17;y++){     for(var x=0;x<127;x++){         for(var z=0;z<127;z++){             if(voxels.getVoxel(x,y,z)!=0 && voxels.getVoxel(x,y+1,z)==0){                 voxels.setVoxel(x,y,z,'grass')             }         }     } }


回复

上一页1 页 / 共 1下一页
欲买桂花同载酒,欲买桂花同载酒,

呜呜!点个赞嘛!

点赞0


评论


欲买桂花同载酒,欲买桂花同载酒,

我又发测试啦!

点赞0


评论


欲买桂花同载酒,欲买桂花同载酒,

我做的两个暑假才做出来的。

点赞0


评论


欲买桂花同载酒,欲买桂花同载酒,

你们不点赞,不许走。

点赞0


评论


欲买桂花同载酒,欲买桂花同载酒,

打个音乐大师,可以再帮我做一首乐曲呀。

点赞0


评论


欲买桂花同载酒,欲买桂花同载酒,

我老是问别人的乐曲。我都感觉没有自己的想法。

点赞0


评论