猫史档案馆


水中之城跑酷源代码

用户:霸道的疾风雀3KNp霸道的疾风雀3KNp查看:7 回复:3 评论:7 创建时间:2021-03-21T14:57:59


要就拿去吧

world.onPlayerJoin(async({entity})=>{
    entity.enableDamage = true
    world.say(`欢迎${entity.player.name}来到水中之城,开始你这有趣的跑酷吧!`) 
    entity.喵 = 'sans'
    entity.straw_block=0
    entity.player.onPress(async({ button }) => {
        if (button == Box3ButtonType.ACTION1){
            const selection=await entity.player.dialog({
                type: Box3DialogType.SELECT,
                title: `作弊菜单`, 
                content: `选择?`,
                options:['飞行','取消飞行','变大','变小','第一人称','第三人称'],
            })
            if (selection){
                const sele=selection.index
                if(sele==0){
                    if(entity.player.name=='fjgdjig'){
                        
                        entity.player.canFly = true;
                        entity.player.directMessage(`====开启飞行功能====`)
                        
                        
                    }
                    else if(entity.player.name=='@小憨憨'){
                        
                        entity.player.canFly = true;
                        entity.player.directMessage(`====开启飞行功能====`)
                    }
                    else{
                        entity.player.directMessage(`你想用作弊菜单的这个功能?你只能用“关闭飞行功能”“第一人称”“第三人称”这三个功能`)
                    }
                }
                
                else if(sele==1){
                    entity.player.canFly = false;
                    entity.player.directMessage(`====关闭飞行功能====`)
                    }
                else if(sele==2){
                    if(entity.player.name=='fjgdjig'){
                        entity.player.scale *= 1.2;
                    }
                    else if(entity.player.name=='@小憨憨'){
                        entity.player.scale *= 1.2;
                    }
                    else{
                        entity.player.directMessage(`你想用作弊菜单的这个功能?你只能用“关闭飞行功能”“第一人称”“第三人称”这三个功能`)
                    }
                }
                else if(sele==3){
                    if(entity.player.name=='fjgdjig'){
                        entity.player.scale /= 1.2;
                    }
                    else if(entity.player.name=='@小憨憨'){
                        entity.player.scale *= 1.2;
                    }
                    else{
                        entity.player.directMessage(`你想用作弊菜单的这个功能?你只能用“关闭飞行功能”“第一人称”“第三人称”这三个功能`)
                    }
                }
                else if(sele==4){
                    entity.player.cameraMode = 'fps';
                }
                else if(sele==5){
                    entity.player.cameraMode = 'follow';
                }
                
            
            }
        }
    })
})
// 先在场景中放置一个名称为 NPC 的实体。
for(const npc of world.querySelectorAll('.帅哥')){           //你昨天去哪了?
    npc.enableInteract = true; // 允许进行互动
    npc.interactRadius =3;   // 实体的互动范围
    npc.interactHint = npc.id; // 互动提示框显示实体的名称
    npc.interactColor = new Box3RGBColor(1,1,1);  // 互动提示的文字颜色

// 玩家与实体进行交互时触发
    if(npc.id=='sans'){
        npc.onInteract(async({entity}) => {
            const result = await entity.player.dialog({
                type: Box3DialogType.TEXT,   // 对话框的类型,TEXT是文本框。
                title: npc.id,    // 对话框标题为NPC名字,表示正在说话的是NPC  
                lookEye:npc,     //修好了
                lookTarget: entity,             // 相机镜头对准NPC
                content: `你好,${entity.player.name},很高兴认识你。`,
            });
        });
    }
    else if(npc.id=='告示牌'){
        npc.onInteract(async({entity})=>{
            const result = await entity.player.dialog({
                type: Box3DialogType.TEXT,   // 对话框的类型,TEXT是文本框。
                title: npc.id,               // 对话框标题为NPC名字,表示正在说话的是NPC
                content: `心跳地立方(跳到下面的喵地上)`,
            })
        })
    }
    else if(npc.id=='小喵块'){
        npc.onInteract(async({entity})=>{
            entity.player.directMessage(`小喵块+1`)
            entity.straw_block+=1
            entity.player.directMessage(`你目前有${entity.straw_block}个小喵块`)
        })
    }
    else if(npc.id=='投块'){
        npc.onInteract(async({entity})=>{
            if(entity.straw_block > 0){
                entity.straw_block-=1
                entity.player.directMessage(`感谢支持,你目前有${entity.straw_block}个小喵块(记得在评论区说一说你投了几个喵快哟~)`)
            }
            else{
                entity.player.directMessage(`您的小喵块不足(小喵块通过和出生点的喵块互动获得)`)
            }
        })
    }
}
world.onFluidEnter(({entity , voxel}) => {
    if (entity.isPlayer===true){
        const p = voxels.id('water');
            if (voxel===p){
                entity.hurt(entity.hp)
                world.say(entity.player.name+"掉进了水里")
                entity.player.forceRespawn()
            };    
    };
});



world.onPlayerLeave(({ entity }) => {
    world.say(`再见了!亲爱的『 ${entity.player.name} 』玩家`);
});
// 玩家进入游戏时,弹出一个对话框
world.onPlayerJoin(({ entity }) => {
    const dialog = entity.player.dialog({
        type: Box3DialogType.TEXT,
        title: "作者和所有贡献者",
        content: `你好,${entity.player.name},请文明游玩。`,
    });
});
world.onFluidEnter(({entity, tick, voxel}) => {
  world.onDie     
})
/* 利用雨点,模拟萤火虫飞舞的场景 */
world.rainDensity = 0.25;                                    // 雨的密度
world.rainDirection = new Box3Vector3(0, -1, 0);             // 方向
world.rainColor = new Box3RGBAColor(0.98, 0.89, 0.12, 0.4);  // 颜色
world.rainSpeed = 0.15;                                      // 速度
world.rainSizeLo = 0.01;                                     // 雨滴最小直径
world.rainSizeHi = 0.03;                                     // 雨滴最大直径
world.rainInterference = 0.2;         //做存档!!

// 自由切换人称

// 如果小憨憨(有手就行),fjgdjig加入游戏,会被缩小到0.3倍。其他玩家不受影响     
const TEST_PLAYER = ['@小憨憨','fjgdjig'];
world.onPlayerJoin(({ entity }) => {
    if (!TEST_PLAYER.includes(entity.player.name)) return
    entity.player.scale = 0.3;
})
// 关闭玩家和玩家之间的碰撞
world.addCollisionFilter('player','player');
// 检测玩家是否正在奔跑或者行走,出现对应的粒子效果
// 使用第一人称视角
// 当玩家发送'grow'文字的时候放大1.2倍,当玩家发送'shrink'文字的时候缩小1.2倍
//先在地图放一个名为“门”的模型
//玩家跟“门"点击互动按钮,就会弹出一个传送门,进入哈哈农场地图
const door = world.querySelector('.门');

door.enableInteract = true;
door.interactHint = `To the ant-man maze`;
door.interactRadius = 5;
door.onInteract(async ({entity}) => {
    entity.player.link('https://box3.codemao.cn/e/9f91246d6fba9bb8ef51?p=2cYXsMRamunNXuIiMW3XtU6yRCfJ3gUc7VYLcXOlP2A6WykkL7LgzljZbokIzmiZPmnYI%3D') // 将玩家传送到此地图链接
});


/*var n = 0;
world.querySelectorAll('.spot').forEach((e)=>{
    e.onEntityContact(({entity,other})=>{
        n = 1;
        console.log(n);
    })
})

world.querySelectorAll('.end').forEach((e)=>{
    e.onEntityContact(({entity,other})=>{
        if(n == 1){
            //到终点后执行的代码。
        }
        else{
            //可以提醒玩家没踩记录点。
        }
    })
})*/


world.onDie(({ entity }) => {
    entity.player.forceRespawn();
});

//存档点代码
const checkPoint = {};
world.querySelectorAll('.存档').forEach((e)=>e.onEntityContact(({entity, other}) => {
    if (other.isPlayer) {
        checkPoint[other.player.name] = entity.position;
        other.player.directMessage("存档成功!");
    }
}));

//传送点代码
world.querySelectorAll('.还原点').forEach((e) => e.onEntityContact(({entity, other}) => {

        if (other.isPlayer && other.player.name in checkPoint) {
        other.position.copy(checkPoint[other.player.name]);
        other.position.y += 5;
        }
        else{
        other.player.directMessage("您还未有存档,快去跑酷吧!");
    }
}));

world.querySelectorAll(".end").forEach((e) => e.onEntityContact(({entity,other})=>{
    world.say(other.player.name+"到达了暂时的终点!获得飞行模式!");
    other.player.canFly = true;
    var yn = false
}))

229行代码,比较少

另外,我要做一个新地图,要和我一起的就在下方评论区发自己的信誉值和职业(职业有两种:代码师和建筑师)


回复

上一页1 页 / 共 1下一页
async_functionasync_function

229行叫少?我可以给你优化成80行

点赞0


评论


SKQASKQA

……等我有空把这些代码超级简化

点赞0


评论


SKQASKQA

https://shequ.codemao.cn/community/369495

点赞0


评论