猫史档案馆


【神岛圣诞创作节】滑出胜利

用户:Benson_GezhiBenson_Gezhi查看:5 回复:4 评论:5 创建时间:2022-12-10T13:08:18


emotion_编程猫_加油

for (let i = 0; i <= 126; i++) {
    for (let j = 0; j <= 126; j++) {
        for (let k = 8; k <= 8; k++) {
            voxels.setVoxel(i, k, j, 169)
        }
    }
};
world.onPlayerJoin(({ entity }) => {
    // 让玩家隐形
    entity.player.invisible = true;
});
//不允许玩家跳跃
world.onPlayerJoin(({ entity }) => {
    entity.player.enableJump = false;
});
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: false, //可碰撞
        friction: 0, //无摩擦力
        mass: 0.01, //非常轻
    })

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

    const dist = 0 //与玩家保持的距离
    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() //清除掉宠物
})
// 玩家进入游戏时,弹出一个文本对话框
world.onPlayerJoin(({ entity }) => {
    const dialog = entity.player.dialog({
        type: Box3DialogType.TEXT,
        title: "圣诞老人",    // 对话框标题。通常对应是讲话人的名字。
        titleTextColor: new Box3RGBAColor(0, 0, 0, 1), // 标题字体颜色。
        titleBackgroundColor: new Box3RGBAColor(0.968, 0.702, 0.392, 1), // 标题背景颜色。
        content: `你好,${entity.player.name},很高兴认识你,我的雪橇被困住了,你能帮我送一份礼物吗?穿上我的衣服,滑上滑雪板快快去吧!`, // 对话框内容。也就是对话正在讲什么。
        contentTextColor:  new Box3RGBAColor(0, 0, 0, 1),  // 对话框字体颜色。
        contentBackgroundColor: new Box3RGBAColor(1, 1, 1, 1), // 对话框背景颜色。
        lookEye: entity.position.add(entity.player.facingDirection.scale(5)), // 调整相机位置,摆在玩家朝向的前方5格距离。
        lookTarget: entity,  // 将相机镜头朝向玩家实体
        });
        
})
// 初始化玩家
world.onPlayerJoin(({entity}) => {
    // 设置速度
    entity.player.walkSpeed = 1;
    entity.player.walkAcceleration = 0.05;
    entity.player.runSpeed = 2;
    entity.player.runAcceleration = 0.1;
});
world.onVoxelContact(async ({ entity, voxel }) => {
    // 将方块id转换名称
    const voxelName = voxels.name(voxel) 
    // 如果方块名称是carpet_08
    if (voxelName === 'carpet_08') {       
        // 给当前玩家弹出窗口 
        await entity.player.dialog({
            type: Box3DialogType.TEXT,
            title: "获胜",
            content: `${entity.player.name},谢谢你,再去帮我送一份,好吗!`,
        });
        // 将玩家移动到起点
        entity.player.forceRespawn()
    }
})


回复

上一页1 页 / 共 1下一页
Benson_GezhiBenson_Gezhi

我的地图代码

 

点赞0


评论


屑格子awa屑鸽子屑格子awa屑鸽子

嘿, 巧了, 我的万圣地图和这个差不多欸~emotion_doge

点赞0


评论


libra_libra_

v/x被屏蔽了()

点赞0


评论


屑格子awa屑鸽子屑格子awa屑鸽子

world.onVoxelContact(async ({ entity, voxel }) => {
    // 将方块id转换名称
    const voxelName = voxels.name(voxel) 
    // 如果方块名称是carpet_08
    if (voxelName === 'carpet_08') {       
        // 给当前玩家弹出窗口 
        await entity.player.dialog({
            type: Box3DialogType.TEXT,
            title: "获胜",
            content: `${entity.player.name},谢谢你,再去帮我送一份,好吗!`,
        });
        // 将玩家移动到起点
        entity.player.forceRespawn()
    }
})

我没抄, 这是这段代码和我的那段代码相似而已, 别想那么多

点赞0


评论