猫史档案馆


爽快的小电鼠bMMb

爽快的小电鼠bMMb

Lv.1

az......

获赞:13收藏:0浏览:21作品收藏:0
回复帖子评论
上一页1 页 / 共 1下一页

https://box3.codemao.cn/e/6d41882fc4636b1d47ab做图 中回复

没人?

 

2022-05-10T12:26:40 点赞:0

【神岛】代码问题来找我() 中回复

掉落伤害代码发吗?

2022-07-13T08:07:26 点赞:0

【Box3科普帖】满满的干货及喵代码,快来看看 中回复

ddd

2022-08-02T19:10:51 点赞:0

论常见的三种SQL报错() 中回复

why我直接复制吉吉的还会错?

上代码:

async function initTable() {//创建玩家数据表
    return await db.sql`
        CREATE TABLE IF NOT EXISTS "player" (
            "coin" INT NOT NULL,--金币
            "exp" INT NOT NULL,--经验
            "item" TEXT NOT NULL,--物品列表
            "userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL --用户识别码
        )
    `;
}

async function saveUser(user) {//玩家存档
    await db.sql`
        INSERT INTO "player" (-- player虽然是小写, 建议统一用""包住
            "exp",-- 经验
            "coin",-- 金币
            "item",-- 道具
            "userKey"-- 用户识别码
        ) VALUES (
            ${user.exp}, --尝试新建经验值
            ${user.coin}, --尝试新建金币值
            ${JSON.stringify(user.item)}, --尝试新建道具值
            ${user.player.userKey} --尝试新建当前玩家识别码
        )
        ON CONFLICT("userKey") -- 如果已经存在同样的用户识别码
        DO UPDATE SET
            "exp"=excluded."exp",-- 更新经验值
            "coin"=excluded."coin",-- 虽然是小写, 建议统一用""包住
            "item"=excluded."item"-- 虽然是小写, 建议统一用""包住
    `
}

async function loadUser(user) {//玩家读档
    const [data] = await db.sql`SELECT * FROM "player" WHERE "userKey"=${user.player.userKey} LIMIT 1`
    if (data) {//如果这个玩家已经有存档
        user.exp = data.exp
        user.coin = data.coin
        user.item = JSON.parse(data.item)
    }
    else {//玩家无存档
        saveUser(user)
    }
}

async function deleteUser(user) {//删除玩家存档
    await db.sql`DELETE FROM "player" WHERE "userKey"=${user.player.userKey}`
}

async function poll(fn, msg) {//无限轮询执行sql语句直到成功
    while (true) {
        try {
            return await fn()//一旦成功执行, 停止无限轮询, 并返回查询结果
        } catch (e) {
            const m = e.message//需要简略显示的异常消息
            //sql偶尔会执行超时, 但如果反复显示timeout 15秒以上一直不停, 大概是数据库出了故障只能等官方修复
            if (m.includes('timeout')) {
                world.say(m)
            }
            else {
                world.say(msg || e.stack)//如果sql执行出错, 广播错误消息, 用来排查错误原因
            }
        }
        await sleep(2000) //每2秒重试一次
    }
}





poll(initTable, '等待数据库启动中...')

2022-08-04T19:31:20 点赞:0

论常见的三种SQL报错() 中回复

再补一段代码:

world.onPlayerJoin(async ({ entity }) => {
    entity.player.exp = 10;
    entity.player.coin = 100;
    entity.player.item = []
    await loadUser(entity)//尝试读取存档
    entity.player.onPress(async ({ button }) => {//右键显示状态栏
        if (button == Box3ButtonType.ACTION1) {
            await entity.player.dialog({
                type: Box3DialogType.SELECT,
                content: `
                金币:${entity.coin}
                经验:${entity.exp}
                道具:[${entity.item}]
                `,
            })
        }
    })
})


world.onPlayerLeave(async({entity}) => {
    await saveUser(entity)
})

2022-08-04T19:35:26 点赞:0

【闲的】JavaScript代码人工解密 中回复

谁教我怎么加密啊()()()

2022-08-04T19:49:10 点赞:0

屑屑的教程之——数组 中回复

ddd

2022-08-07T16:39:09 点赞:0

【box3】隆重推出波浪山地形速建! 中回复

考古ddd

2022-08-07T16:59:28 点赞:0

每日一个岛3建图小技巧:教你飞檐走壁! 中回复

ddd

2022-08-07T21:39:41 点赞:0

【神奇代码岛】新编辑器GUI模板 中回复

ddd

2023-06-29T18:21:05 点赞:0

[Box3 Arena]带按钮GUI模板 中回复

直接写data``他不香吗()

2023-06-29T22:06:38 点赞:0

【PRO版编辑器】新版数据库模板(附排行榜+清档) 中回复

DDD

2023-07-22T14:29:58 点赞:0

我拿出了分身术,阁下又当如何应对呢 中回复

??????怎么做到的?

2023-08-06T19:09:13 点赞:1