猫史档案馆


【代码求助】如何实现摔落伤害?

用户:清蒸鲈鱼清蒸鲈鱼查看:23 回复:8 评论:23 创建时间:2023-01-17T12:40:53


我用了一个办法,但是有bugs

思路是这样的:

每个tick检测一次,假如玩家不处于下落(fall)状态,那么entity.high就等于当前y高度

如果处于下落状态,就不更新

如果不是下落状态,看看现在的高度和entity.high的差别

但是有bugs

大佬们有没有更好的方法qwq

教一教awa


回复

上一页1 页 / 共 1下一页
Mini_editMini_edit

//将可伤害开启 world.onPlayerJoin(({entity})=>{//当玩家进入游戏 entity.enableDamage=true;//将可伤害开启 });//这个加上 //摔落伤害 world.onVoxelContact(async({entity,x,y,z,voxel})=>{//当实体接触方块 if(!entity.isPlayer)return;//如果这个实体不是玩家,打咩 leti=entity.player.fall-y//加一个变量 if(entity.player.fall-y>10){//如果高度大于10 entity.hurt(i*3)//打掉这个玩家的这个变量乘以三的血量 entity.player.directMessage('你受到了'+i*3+'点摔落伤害,目前血量是:'+entity.hp)//告诉玩家信息 }//这个加上*2 entity.player.fall=y//设置这个变量为y(这个变量变化一般是玩家在高空) });//这个加上*4 //处理特殊情况:水方块 world.onFluidEnter(async({entity,voxel})=>{//当实体接触液体 if(!entity.isPlayer){return;}//如果这个实体不是玩家,打咩*2 entity.player.fall=0//设置这个变量为0 })//这个加上*5 //这里的复活代码 world.onDie(async({entity})=>{//当实体喵 if(!entity.isPlayer)return;//如果这个实体不是玩家,打咩*3 for(lett=1;t<=5;t++){//设置倒计时变量,并且重复执行 entity.player.directMessage(`倒计时${String(5-t)}秒后复活`);//告诉玩家信息*2 awaitsleep(1000);//等待1秒 }//这个加上*6 entity.player.forceRespawn();//让这个玩家复活复活 });//这个加上*7 看在每一行都有注释的份上, 给个关注吧!

点赞0


评论


Mini_editMini_edit

//将可伤害开启 world.onPlayerJoin(({entity})=>{//当玩家进入游戏 entity.enableDamage=true;//将可伤害开启 });//这个加上 //摔落伤害 world.onVoxelContact(async({entity,x,y,z,voxel})=>{//当实体接触方块 if(!entity.isPlayer)return;//如果这个实体不是玩家,打咩 leti=entity.player.fall-y//加一个变量 if(entity.player.fall-y>10){//如果高度大于10 entity.hurt(i*3)//打掉这个玩家的这个变量乘以三的血量 entity.player.directMessage('你受到了'+i*3+'点摔落伤害,目前血量是:'+entity.hp)//告诉玩家信息 }//这个加上*2 entity.player.fall=y//设置这个变量为y(这个变量变化一般是玩家在高空) });//这个加上*4 //处理特殊情况:水方块 world.onFluidEnter(async({entity,voxel})=>{//当实体接触液体 if(!entity.isPlayer){return;}//如果这个实体不是玩家,打咩*2 entity.player.fall=0//设置这个变量为0 })//这个加上*5 //这里的复活代码 world.onDie(async({entity})=>{//当实体喵 if(!entity.isPlayer)return;//如果这个实体不是玩家,打咩*3 for(lett=1;t<=5;t++){//设置倒计时变量,并且重复执行 entity.player.directMessage(`倒计时${String(5-t)}秒后复活`);//告诉玩家信息*2 awaitsleep(1000);//等待1秒 }//这个加上*6 entity.player.forceRespawn();//让这个玩家复活复活 });//这个加上*7 这次千万别吞格式啊QAQ

点赞0


评论


Mini_editMini_edit

W喵老是吞我格式,不玩了,回家写作业去了!

点赞0


评论


Mini_editMini_edit

//将可伤害开启 world.onPlayerJoin(({entity})=>{//当玩家进入游戏 entity.enableDamage=true;//将可伤害开启 });//这个加上 //摔落伤害 world.onVoxelContact(async({entity,x,y,z,voxel})=>{//当实体接触方块 if(!entity.isPlayer)return;//如果这个实体不是玩家,打咩 leti=entity.player.fall-y//加一个变量 if(entity.player.fall-y>10){//如果高度大于10 entity.hurt(i*3)//打掉这个玩家的这个变量乘以三的血量 entity.player.directMessage('你受到了'+i*3+'点摔落伤害,目前血量是:'+entity.hp)//告诉玩家信息 }//这个加上*2 entity.player.fall=y//设置这个变量为y(这个变量变化一般是玩家在高空) });//这个加上*4 //处理特殊情况:水方块 world.onFluidEnter(async({entity,voxel})=>{//当实体接触液体 if(!entity.isPlayer){return;}//如果这个实体不是玩家,打咩*2 entity.player.fall=0//设置这个变量为0 })//这个加上*5 //这里的复活代码 world.onDie(async({entity})=>{//当实体喵 if(!entity.isPlayer)return;//如果这个实体不是玩家,打咩*3 for(lett=1;t<=5;t++){//设置倒计时变量,并且重复执行 entity.player.directMessage(`倒计时${String(5-t)}秒后复活`);//告诉玩家信息*2 awaitsleep(1000);//等待1秒 }//这个加上*6 entity.player.forceRespawn();//让这个玩家复活复活 });//这个加上*7

点赞0


评论


宽容的彗星猫ybDX宽容的彗星猫ybDX

world.onPlayerJoin(({entity})=>{     entity.enableDamage = true }); world.onFluidEnter(async({entity,voxel})=>{     if(!entity.isPlayer){return;}     entity.player.fall=0 }); world.onFluidLeave(async({entity,voxel})=>{     if(!entity.isPlayer){return;}     entity.player.fall=0 }); world.onVoxelContact(async({entity,x,y,z,voxel})=>{     if (!entity.isPlayer) return;     let i=entity.player.fall-y;     if(entity.player.fall-y>20){;         entity.hurt(i/5)         entity.player.directMessage('你受到了'+i/5+'点摔落伤害')     };     entity.player.fall=y; }); world.onPlayerJoin(({entity})=>{     entity.player.fall=0 }); world.onDie(async({entity})=>{     entity.player.fall=0 });

点赞0


评论


Mini_editMini_edit

//将可伤害开启
world.onPlayerJoin(({ entity }) => {//当玩家进入游戏
    entity.enableDamage = true;//将可伤害开启
});//这个加上

//摔落伤害
world.onVoxelContact(async ({ entity, x, y, z, voxel }) => {//当实体接触方块
    if (!entity.isPlayer) return;//如果这个实体不是玩家,打咩
    let i = entity.player.fall - y//加一个变量
    if (entity.player.fall - y > 10) {//如果高度大于10
        entity.hurt(i * 3)//打掉这个玩家的这个变量乘以三的血量
        entity.player.directMessage('你受到了' + i * 3 + '点摔落伤害,目前血量是:' + entity.hp)//告诉玩家信息
    }//这个加上*2
    entity.player.fall = y//设置这个变量为y(这个变量变化一般是玩家在高空)
});//这个加上*4

//处理特殊情况:水方块
world.onFluidEnter(async({entity,voxel})=>{//当实体接触液体
        if(!entity.isPlayer){return;}//如果这个实体不是玩家,打咩*2
        entity.player.fall=0//设置这个变量为0
    })//这个加上*5


//这里的复活代码
world.onDie(async({ entity }) => { //当实体去世
    if (!entity.isPlayer) return;//如果这个实体不是玩家,打咩*3

    for (let t = 1; t <= 5; t++) {//设置倒计时变量,并且重复执行
        entity.player.directMessage(`倒计时 ${String(5 - t)} 秒后复活`);//告诉玩家信息*2
        await sleep(1000);//等待1秒
    }//这个加上*6

    entity.player.forceRespawn();  //让这个玩家复活、
});//这个加上*7

点赞0


评论


我是老六呀UV我是老六呀UV

world.onPlayerJoin(({ entity }) => {//当玩家进入游戏
    entity.enableDamage = true;//将可伤害开启
});//这个加上

//摔落伤害
world.onVoxelContact(async ({ entity, x, y, z, voxel }) => {//当实体接触方块
    if (!entity.isPlayer) return;//如果这个实体不是玩家,打咩
    let i = entity.player.fall - y;//加一个变量
    if (entity.player.fall - y > 10) {//如果高度大于10
        entity.hurt(i * 3);//打掉这个玩家的这个变量乘以三的血量
        entity.player.directMessage('你受到了' + i * 3 + '点摔落伤害,目前血量是:' + entity.hp);//告诉玩家信息
    }//这个加上*2
    entity.player.fall = y;//设置这个变量为y(这个变量变化一般是玩家在高空)
});//这个加上*4

//处理特殊情况:水方块
world.onFluidEnter(async({entity,voxel})=>{//当实体接触液体
        if(!entity.isPlayer){return;}//如果这个实体不是玩家,打咩*2
        entity.player.fall=0;//设置这个变量为0
    })//这个加上*5


//这里的复活代码
world.onDie(async({ entity }) => { //当实体去世
    if (!entity.isPlayer) return;//如果这个实体不是玩家,打咩*3

    for (let t = 1; t <= 5; t++) {//设置倒计时变量,并且重复执行
        entity.player.directMessage(`倒计时 ${String(5 - t)} 秒后复活`);//告诉玩家信息*2
        await sleep(1000);//等待1秒
    }//这个加上*6

    entity.player.forceRespawn();  //让这个玩家复活、
});//这个加上*7

点赞0


评论


我是老六呀UV我是老六呀UV

world.onPlayerJoin(({ entity }) => {//当玩家进入游戏
    entity.enableDamage = true;//将可伤害开启
});//这个加上


world.onVoxelContact(async ({ entity, x, y, z, voxel }) => {
    if (!entity.isPlayer) return;
    let i = entity.player.fall - y;
    if (entity.player.fall - y > 10) {
        entity.hurt(i * 3);
        entity.player.directMessage('你受到了' + i * 3 + '点摔落伤害,目前血量是:' + entity.hp);
    }
    entity.player.fall = y;
});
world.onFluidEnter(async({entity,voxel})=>{
        if(!entity.isPlayer){return;}
        entity.player.fall=0;
    })


world.onDie(async({ entity }) => { 
    if (!entity.isPlayer) return;

    for (let t = 1; t <= 5; t++) {
        entity.player.directMessage(`倒计时 ${String(5 - t)} 秒后复活`);
        await sleep(1000);
    }

    entity.player.forceRespawn();
});

点赞0


评论