猫史档案馆


./'

./'

Lv.1

bcm也是走下坡路了 没以前那味了

获赞:167收藏:55浏览:1562作品收藏:23

签名:随兴而做作品,在玩崩铁和原神,玩B服原神的可以加我UID520274527

回复帖子评论
上一页1 页 / 共 4下一页

【岛3大新闻】老活新整创作节报名截止,比赛启动! 中回复

https://box3.codemao.cn/e/d5bf0喵cf04e0cacbcaa

我的地图

2021-05-01T12:59:35 点赞:0

【岛3老活新整创作节】官方地图《赤碧城》限时送,报名时间已截止! 中回复

我要报名参赛,我的地图编辑器地址是:https://box3.codemao.cn/e/d5bf0喵cf04e0cacbcaa

2021-05-01T13:14:28 点赞:0

【JS快速入门01】创建变量,变出999金币💰 中回复

const name = ["吉吉喵","雷电猴"];
const hp = [1000,80];
const atk = [20,999];
for(var i=1;i<3;i++){
    console.log(name[i] + '有' + hp[i] + '点生命,' + atk[i] + '点攻击力');
}

2021-05-02T10:11:55 点赞:0

【每日一个岛3建图小技巧】有喜事了?放个烟花庆祝下! 中回复

console.clear() constDefaultScale=1/2 functionspawn(x,y,z,meshName){ constmouey=world.createEntity({ mesh:meshName, collides:true, fixed:true, gravity:false, meshScale:DefaultScale, position:[x,y,z], }) returnmouey } functionparticleSpread(entity,colorList,scale=1){ entity.particleRate=550//粒子生成速率 entity.particleLifetime=2//粒子存活时间为2秒 entity.particleColor=colorList//粒子的颜色列表 entity.particleSize=[15*scale,10*scale,5*scale,2*scale,scale]//粒子在5个阶段的大小 entity.particleSizeSpread=2*scale//粒子的大小的随机变化幅度 entity.particleVelocitySpread=[20*scale,20*scale,20*scale]//粒子XYZ方向速度的随机变化幅度 entity.particleAcceleration=[0,-10*scale,0]//粒子往下飘落模拟重力效果 } constYELLOW=newBox3RGBColor(10,10,2)//黄 constCYAN=newBox3RGBColor(2,10,10)//青 constMAGENTA=newBox3RGBColor(10,2,10)//品红 constRED=newBox3RGBColor(10,2,2)//红 constGREEN=newBox3RGBColor(2,10,2)//绿 constBLUE=newBox3RGBColor(2,2,10)//蓝 //各个颜色5个粒子阶段的颜色列表 constColorList=[ [YELLOW,YELLOW,YELLOW,YELLOW,YELLOW], [CYAN,CYAN,CYAN,CYAN,CYAN], [MAGENTA,MAGENTA,MAGENTA,MAGENTA,MAGENTA], [RED,RED,RED,RED,RED], [GREEN,GREEN,GREEN,GREEN,GREEN], [BLUE,BLUE,BLUE,BLUE,BLUE], ] functionrandomColor(){ returnColorList[Math.floor(ColorList.length*Math.random())]//随机选取一个颜色列表 } constMeshScale=[1/16,1/16,1/16]//默认的模型缩放系数 asyncfunctionparticleShoot(entity){ constfireball=world.createEntity({ bounds:[0,0,0],//隐形实体默认大小是1x1x1的方块,现在把它从方块缩成大小为0x0x0的1个点 collides:false,//开启碰撞 gravity:false,//不受重力影响 position:entity.position, }) constcolor=randomColor()//随机颜色 particleSpread(fireball,color,0.3)//粒子大小系数缩到0.3,形成小火球 awaitsleep(100)//等待0.1秒后升空 fireball.velocity.set(0,1,0)//火球速度为每秒向上1格 awaitsleep(2000)//升空2秒后爆炸 fireball.velocity.set(0,0,0)//火球停止运动 particleSpread(fireball,color,1)//系数增大到1,让火球变大 awaitsleep(1500)//大火球等待1.5秒后消失 fireball.destroy() } for(constfireworkofworld.querySelectorAll('#新年烟花-1')){ firework.enableInteract=true firework.enableDamage=true firework.interactRadius=3 firework.onInteract(async()=>{ varn=3//每次 firework.hurt(5) while(n-->0){ particleShoot(firework)//在"新年烟花-1"实体的位置发射烟花 awaitsleep(2000)//每隔2秒射1发 } }) firework.onTakeDamage(()=>{ firework.interactHint=`剩余可放烟花次数:${firework.hp/5}` firework.interactColor.set(0,0,1) }) firework.onDie(()=>{ firework.destroy() spawn(65.3,9.7,61.6,'mesh/新年烟花-1.vb') }) }

2021-05-02T10:45:39 点赞:0

【久违的API系列教程】来啊,互相伤害吧! 中回复

for (const e of world.querySelectorAll('.1')) { //遍历每个僵尸实体
    e.enableDamage = true //允许这个实体 受伤/喵亡/复活
    e.collides = true //允许实体被碰撞
    e.gravity = true //开启重力, 这样实体才不会一碰就飘走
}

world.onPlayerJoin(({ entity }) => {
    entity.enableDamage = true //允许这个实体 受伤/喵亡/复活
    entity.id = entity.player.name //玩家名字赋值到id, 以便和其它实体一样可以统一通过entity.id获取名字
})

world.onEntityContact(({ entity, other }) => {
    if (other.id.startsWith('僵尸')) { //如果被碰实体有僵尸标签
        entity.hurt(30, {
            damageType: '病毒', //伤害类型为病毒
            attacker: other, //告诉引擎攻击者是被碰到的这个实体
        })
    }
})

world.onClick(({ entity, clicker }) => {// entity是被点击的实体, clicker是点击了这个实体的玩家
    entity.hurt(20, {
        damageType: '喵击', //伤害类型为喵击
        attacker: clicker, //告诉引擎攻击者是触发点击的这个玩家实体
    })
})

world.onDie(({ entity, attacker, damageType }) => { //每次地图里有实体喵亡
    if (entity.isPlayer) { //如果是玩家实体
        if (damageType === '病毒') { //如果是病毒致喵
            entity.player.color.set(0, 1, 0) //玩家实体颜色变绿
        }
    } else { //如果非玩家实体
        if (damageType === '喵击') { //如果是喵击致喵
            entity.destroy() //从地图上消失
        }
    }
})

const lava_hurt=[465,467]//触碰时被岩浆伤害的指定方块
const ice_hurt=[398,347]//触碰时被冰伤害的指定方块
const poison_hurt=[99,101]//懒得说了
world.onPlayerJoin(({entity:e/*将entity重命名为e*/})=>{
    e.enableDamage=true//别忘了这玩意!
    e.onVoxelContact(({x,y,z})=>{//这里onVoxelContect()必须嵌在onPlayerJoin里,否则所有实体碰到都会被伤害
        const vox = voxels.getVoxelId(x,y,z)
        if(lava_hurt.includes(vox)){//includes函数可以判断lava_hurt方块中是否包括vox
            e.hurt(30,{damageType:'火焰_0'})//综合喆喵所讲的知识(doge)
            e.player.directMessage('你收到了30点火焰伤害')
        }else if(ice_hurt.includes(vox)){
            e.hurt(20,{damageType:'冰冻_1'})
            e.player.directMessage('你收到了20点冰冻伤害')
        }else if(poison_hurt.includes(vox)){
            const m =Math.floor(Math.random()*50)
            e.hurt(m,{damageType:'毒素_2'})
            e.player.directMessage('你收到了'+m+'点毒素伤害')
        }
    })
})
world.onDie(async({ entity:e,damageType }) => {
    e.player.muted = true
    const damtyp=damageType.split('_')//分割,以便后面进行运算
    if(damtyp[1]=='0'){
        e.player.color.set(1,0,0)//红色
    }else if(damtyp[1]=='1'){
        e.player.color.set(0,0,1)//蓝色
    }else{
        e.player.color.set(0,1,0)//爱色
    }
    world.say(`${e.player.name}收到了${damtyp[0]}伤害后不幸趋势`)//广播消息
    for(i=3;i>0;i--){
        e.player.directMessage(i+'秒后复活')
        await sleep(1000)
    }
    e.player.color.set(1,1,1)
    e.player.forceRespawn()
})

2021-05-02T12:34:56 点赞:0

【API系列教程】教你捡垃圾发家致富!知识量巨大,慎入……(下篇) 中回复

帮我看看这段代码的BUG

world.onPlayerJoin(({ entity }) => {//每次玩家进入游戏都会运行
    entity.money = 0 //钱
    entity.junk = 0 //废品
    entity.itemList = [] //口袋里的货品

    loadPlayer(entity)
}

2021-05-02T19:32:44 点赞:0

【API系列教程】教你捡垃圾发家致富!知识量巨大,慎入……(下篇) 中回复

//交作业咯~

console.clear()

for (const e of world.querySelectorAll('.a,.b')) { //遍历每一个废品实体
    e.enableInteract = true //开启交互
    e.interactRadius = 2.5 //交互范围
    e.interactHint = e.id //交互提示文本显示标签名
    e.interactColor.set(0, 1, 0) //交互提示文本设为绿色

    e.onInteract(({ entity }) => {
        entity.junk += 1 //累加废品
        e.destroy() //从地图中删除实体

        //跟world.say相似, 但只对指定的玩家显示信息而不是对所有玩家广播
        entity.player.directMessage(`${entity.player.name} 累计捡到${entity.junk}个废品`)
    })
}

//封装成函数是因为它会被多次用到(显示玩家状态, 显示与NPC交互结果)
function textDialog(entity, content, title) {
    return entity.player.dialog({ //弹出对话框
        type: Box3DialogType.TEXT, //对话框类型为纯文本
        content, //文本内容
        title, //对话框左上角标题内容
    })
}



world.onPlayerJoin(({ entity }) => {//每次玩家进入游戏都会运行
    entity.money = 0 //钱
    entity.junk = 0 //废品
    entity.itemList = [] //口袋里的货品

    loadPlayer(entity)

    entity.player.onPress(async ({ button }) => { //每当有按钮被按下
        if (button == Box3ButtonType.ACTION1) { //如果按钮是右键
            const selection = await entity.player.dialog({
                type: Box3DialogType.SELECT, //对话框类型为选择框
                content: `你身上有:\n\n${entity.money}元, ${entity.junk}个废品\n道具: [${entity.itemList}]`,
                options: ['保存'],
            })
            if (selection) { //确保对话框不是点击x关闭
                if (selection.value === '保存') { //被点击的是保存按钮
                    await savePlayer(entity) //等待写入结束才运行下一行
                    textDialog(entity, '保存完毕')
                }
            }
        }
        else if (button == Box3ButtonType.ACTION0) { //如果按钮是左键
            const eaten = entity.itemList.pop() //口袋列表最右边的一个物品拿出来
            if (eaten) {
                entity.player.directMessage(`${entity.player.name}吃掉了"${eaten}"`)
            }
        }
    })
})

//NPC是non-player character的简称, 表示游戏里无人控制的虚构人物
for (const npc of world.querySelectorAll('.NPC')) {
    npc.enableInteract = true //允许当前npc实体触发交互
    npc.interactRadius = 4.5 //交互范围
    npc.interactHint = npc.id //交互提示文本显示实体名字
    npc.interactColor.set(0, 1, 0) //交互提示文本颜色为绿色

    if (npc.id == '学生') { //如果实体名是'学生'
        npc.onInteract(async ({ entity }) => { //当玩家对这个npc按E触发交互, npc对玩家打招呼
            const killed = entity.itemList.pop()
            if(killed){
                textDialog(entity, `谢谢你的${killed}~`, npc.id)
            }
        })
    }
    else if (npc.id == '回收处员工') { //如果实体名是'回收处员工'
        npc.onInteract(async ({ entity }) => { //当玩家对这个npc按E触发交互, npc问你想卖多少废品
            const amount = await entity.player.dialog({
                type: Box3DialogType.INPUT, //对话框类型为输入框
                content: `你有${entity.junk}废品, 想卖掉多少呢?`,
                title: npc.id, //对话框左上角显示NPC名字
            })
            if (amount > 0 && amount <= entity.junk) { //如果持有的废品数符合输入的数值
                entity.junk -= amount //交出废品
                const gain = 2 * amount //废品换算成钱
                entity.money += gain //钱入账到玩家
                textDialog(entity, `${amount}废品卖得${gain}元`)
            }
        })
    }
    else if (npc.id == '小卖部老板') { //如果实体名是'小卖部老板'
        npc.onInteract(async ({ entity }) => { //当玩家对这个npc按E触发交互, npc问你想买哪些商品
            const goodsList = ['薯片', '可乐', '糖果','热狗'] //货品列表
            const priceList = [7, 5, 4, 10] //价格列表
            const selection = await entity.player.dialog({
                type: Box3DialogType.SELECT, //对话框类型为选择框
                content: `你有${entity.money}元, 想买点什么呢?`,
                title: npc.id, //对话框左上角显示NPC名字
                options: ['薯片 (7元)', '可乐 (5元)', '糖果 (4元)', '热狗(10元)', '离开'], //选项
            })
            if (selection) { //如果玩家没有点击'x'关闭对话框
                const goods = goodsList[selection.index] //被选中的货物
                const price = priceList[selection.index] //被选中货物的价格
                if (entity.money >= price) { //如果玩家的钱足够
                    entity.money -= price //扣钱
                    entity.itemList.push(goods) //货物装进玩家口袋列表最右边
                    textDialog(entity, `"${goods}"入手`)
                } else {
                    textDialog(entity, `要买"${goods}"还差${price - entity.money}元`)
                }
            }
        })
    }
}

async function savePlayer(entity) {//定义保存玩家状态的函数
    if (entity.player.userKey) {//拥有userKey的玩家, 则玩家不是游客, 可以保存
        await db.sql`
            --尝试向player表插入一条记录, 向各个字段写入玩家身上对应的属性值
            INSERT INTO player (
                userName,
                money,
                junk,
                itemList,
                userKey
            )
            VALUES(
                ${entity.player.name},
                ${entity.money},
                ${entity.junk},
                ${JSON.stringify(entity.itemList)},--itemList是数组, 需要用JSON.stringify才能存入类型为TEXT的字段
                ${entity.player.userKey}
            )
            ON CONFLICT(userKey)--如果玩家记录已经存在, 则不需要插入, 而是更新各个字段的值
            DO UPDATE SET

            userName=excluded.userName,
            money=excluded.money,
            junk=excluded.junk,
            itemList=excluded.itemList
        `
    }else{
        textDialog(entity, '请你先登录哦')
    }

}



async function loadPlayer(entity) {
    const [data] = await (db.sql`SELECT * FROM player WHERE userKey=${entity.player.userKey} limit 1`);
    if (data) { //如果存在这个玩家的存档
        entity.money = data.money //恢复金钱
        entity.junk = data.junk //恢复废品
        entity.itemList = JSON.parse(data.itemList) //恢复道具列表, 这里的JSON.parse用于把字符串变回数组
    }
}



async function showPlayers() {
    console.clear() // 清空控制台
    const playerList = await db.sql`SELECT * FROM player`
    for (const p of playerList) {
        console.log(JSON.stringify(p))

    }

}



async function createTable() {

    await db.sql`CREATE TABLE IF NOT EXISTS player (
        userName TEXT DEFAULT '',--玩家名字
        money INTEGER DEFAULT 0,--金钱
        junk INTEGER DEFAULT 0,--废品
        itemList TEXT DEFAULT '',--道具列表
        userKey TEXT PRIMARY KEY UNIQUE DEFAULT ''--玩家的识别码

    )`

    showPlayers()

}



createTable()

完整版如上

2021-05-02T19:40:39 点赞:0

谁才是究极整活冠军?《赤碧城》老活新整获奖名单公布 中回复

//我好难呀
//搞了200+行代码没获奖?
//这是人干的吗?

2021-05-08T20:23:46 点赞:0

【岛3更新了】新增“蹦蹦床”方块,不用写代码也能跳得更高 中回复

/*害得我《令人跑酷》使用模型的,
早说嘛*/

2021-05-21T17:55:02 点赞:1

5月玩什么?在资源紧缺的世界末日,如何生存到最后…… 中回复

"恐怖游戏"好像很简单

2021-05-22T15:06:34 点赞:0

(代码岛3.0)岛3多功能店铺开业~ 中回复

跑酷建筑帮帮忙~

/*https://box3.codemao.cn/e/fc8b565c7cb10043bf04?p=Ca2%2F35xa%2B73pCHfC2lKAoy8tteafi1M4xhYxY4vlnXA7HJg0mZLwblu7rnrZE%3D*/

2021-05-22T20:09:23 点赞:0

【每日一个岛3建图小技巧】拥有一个跟随的皮卡丘?就决定是你啦! 中回复

//交作业咯~

c喵ole.clear()
c喵t mscale = 1 / 16
c喵t Quat = new Box3Quaternion(0, 0, 0, 1)

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

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

    c喵t dist = 1
    c喵t yOffset = y //y轴位移, 保持僚机在头顶或脚下

    c喵t ticker = world.onTick(() => {

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


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

        //计算xyz方向上 当前位置向目标位置靠拢的速度
        c喵t 喵 = (xDiff + xOffset) * ratio
        c喵t vy = (yDiff + yOffset) * ratio
        c喵t 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', 2) //给玩家增加宠物
})

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

2021-05-23T08:08:06 点赞:0

【岛3更新了】新增“蹦蹦床”方块,不用写代码也能跳得更高 中回复

建议:

一般在地图里都不能换皮肤

在编辑器的设置里加一个"切换皮肤"的按钮

点进去就像游玩地图显示的那样

皮肤按分类摆好

点一下皮肤就可以切换

2021-05-23T08:15:16 点赞:2

【岛3更新了】新增“蹦蹦床”方块,不用写代码也能跳得更高 中回复

到是先把图形化和皮肤编辑器做好呀()

2021-05-26T18:33:55 点赞:2

当你传送到了kitten2.0...... 中回复

链接:https://old-kitten.codemao.cn

 

2021-05-29T13:40:40 点赞:0

【Box3.0】瓢虫“秘密”制作了一段时间的地图 中回复

姓名:TNT 属性:喵 伤害:Infinity 换弹时间:0.00000001 操作方法:互动

2021-05-29T16:01:44 点赞:0

【Box3.0】瓢虫“秘密”制作了一段时间的地图 中回复

名字:作业

属性:JS

伤害:答错一题扣999999999999点血

范围:无

方法:右键投出作业,可以交互,其他人需要答对9981道题才能战斗,并且其他玩家可以让答题的人受到伤害

2021-05-29T16:20:46 点赞:1

怎么把地面给替换成水呀? 中回复

for(let x=0;x<127;x++){
    for(let z=0;z<127;z++){
        voxels.setVoxel(x,8,z,"water")
    }
}

2021-05-29T16:28:49 点赞:0

【box3】触发什么事件后让所有玩家传送到一个地方,让所有玩家取消观战模式的代码怎么弄 中回复

if(world.querySelectorAll("player").length === 10){
    world.querySelectorAll("player").position.set(x,y,z)
    //观战模式按地图情况修改
    world.querySelectorAll("player").player./*自己修改*/ = /*布尔值*/
}

2021-05-29T16:35:41 点赞:0

来一起摧毁地图 中回复

/*举报!*/

2021-05-29T17:12:24 点赞:0

怎么让灯笼发光? 中回复

(async function (){
    await sleep(3000)
    world.querySelector('#???').meshinvisible = true
})();
//N年之后出现的代码

2021-05-29T17:18:48 点赞:0

【Box3.0】瓢虫“秘密”制作了一段时间的地图 中回复

姓名:喵锤子

属性:传说

攻击:Infinity

获取方式:

拍一张美术喵画的路西法一级虫,发给作者或我

攻击范围:new Box3Vector3(0,0,0),new Box3Vector3(232,99999999,232)

换弹时间:0

操作方法:点击左键

emotion_编程猫_紧张

2021-05-29T19:22:56 点赞:0

【Box3.0】瓢虫“秘密”制作了一段时间的地图 中回复

姓名:路西法舰队

属性:外星

获得捷径:完成《麻烦多的任务大楼》,并且是第一名 or 完成《荷花酷跑》 or 在《超时空对决》中获得第1名

样子:大型毛毛虫

伤害:999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999.999999999999999999999999999999999999999999999999999999999999999999999999999999999999999

伤害范围:new Box3Vector3(0,0,0),new Box3Vector3(232,99999999,232),

换弹时间:await sleep(NaN)

操作方法:E键索敌,左键攻击,右键摧毁,下蹲+

右键离开炮台。

链接:https://box3.codemao.cn/v/139966

emotion_编程猫_点赞

2021-05-30T09:05:48 点赞:0

【box3圈地之王改版】《圈地之王-升级版》发布啦!源代码全公开! 中回复

ohhhhhhhh

2021-05-30T18:54:23 点赞:0

【Box3.0】瓢虫“秘密”制作了一段时间的地图 中回复

名字:地雷 类型:喵 属性:雷 获得捷径:在《代码师与地下城》中用时1秒过关or第一个突破《荷花酷跑》的记录 伤害:S++(A=10,A++=20,B=50;B++=100;C++=2000;S=999*999;S++=Infinity) 伤害范围:S++(Infinity*Infinity*Infinity*Infinity) 伤害:entity.hp 方法:右键投出,别人踩到它会"当场去世"

2021-05-31T19:46:41 点赞:0

怎么让灯笼发光? 中回复

(async function (){
    await sleep(3000)
    world.querySelector('#???').color.set(0,0,1)
    world.querySelector('#???').meshInvisible = true
})();
//N年之后出现的代码

2021-06-03T19:04:24 点赞:0

代码岛3.0,再见! 中回复

官方语文不好emotion_doge

2021-06-03T19:08:53 点赞:1

【box3.0】SQL教程--创建02 中回复

逗号没了

2021-06-04T06:44:25 点赞:0

搬砖喵修代码!搬砖喵修代码! 中回复

注:建筑师也可以报名

最多招募:18人

2021-06-04T18:24:53 点赞:0

【box3.0】SQL教程--创建02 中回复

userKey的TEXT没了

2021-06-05T15:54:12 点赞:0