猫史档案馆


错误一只发

用户:搬码喵搬码喵查看:0 回复:0 评论:0 创建时间:2022-04-10T18:05:04


大加看看为啥SQL会报错啊,程序看见没问题啊???

world.onPlayerJoin(({ entity }) => {//每次玩家进入游戏都会运行
    entity.money = 0 //冰雪币
    entity.junk = 0 //钱
    entity.itemList = [] //口袋里的货品
    entity.hpP=0
    entity.player.runSpeed*=2
    loadPlayer(entity)
    entity.player.onPress(async ({ button }) => { //每当有按钮被按下
        console.log(button)
        if (button == Box3ButtonType.ACTION1) { //如果按钮是右键
            const selection = await entity.player.dialog({
                type: Box3DialogType.SELECT, //对话框类型为选择框
                content: `血量:100/${entity.hp}\n你身上有:\n\n${entity.money}冰雪币, ${entity.junk}元钱\n道具: [${entity.itemList}]`,
                options: ['保存','挂机'],
            })
            if (selection) { //确保对话框不是点击x关闭
                if (selection.value === '保存') { //被点击的是保存按钮
                    await savePlayer(entity) //等待写入结束才运行下一行
                    textDialog(entity, '保存完毕')
                }else if(selection.value==='挂机'){
                    entity.position.set(178,16,151)
                }
            }
        }
        else if (button == Box3ButtonType.ACTION0) { //如果按钮是左键
            const eaten = entity.itemList.pop() //口袋列表最右边的一个物品拿出来
            if (eaten) {
                entity.player.directMessage(`${entity.player.name}吃掉了"${eaten}"`)
                entity.hp+=5
            }
        }
    })
})
async function savePlayer(entity) {//定义保存玩家状态的函数
    if (entity.player.userKey) {//拥有userKey的玩家, 则玩家不是游客, 可以保存
        await db.sql`
            --尝试向player表插入一条记录, 向各个字段写入玩家身上对应的属性值
            INSERT INTO player (
                userName,
                money,
                junk,
                itemList,
                hpP,
                userKey
            )
            VALUES(
                ${entity.player.name},
                ${entity.money},
                ${entity.junk},
                ${JSON.stringify(entity.itemList)},--itemList是数组, 需要用JSON.stringify才能存入类型为TEXT的字段
                ${entity.hpP},
                ${entity.player.userKey}
            )
            ON CONFLICT(userKey)--如果玩家记录已经存在, 则不需要插入, 而是更新各个字段的值
            DO UPDATE SET

            userName=excluded.userName,
            money=excluded.money,
            junk=excluded.junk,
            
            itemList=excluded.itemList,
            hpP=excluded
        `
    }
}
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 (
            money INTEGER DEFAULT 0,--金钱, INTEGER类型用于存储整数
            junk INTEGER DEFAULT 0,--废品, INTEGER类型用于存储整数
            itemList TEXT DEFAULT '',--道具列表, TEXT类型用于存储字符串
            hpP INTEGER DEFAULT 0,--玩家血量
            userKey TEXT PRIMARY KEY UNIQUE DEFAULT ''--玩家的唯一识别码, TEXT类型用于存储字符串
        )
    `
    showPlayers() //每次运行代码都能查看数据库里所有记录
}
async function loadPlayer(entity) {
    const data = (await (db.sql`SELECT * FROM player WHERE userKey=${entity.player.userKey} limit 1`))[0]
    if (data) { //如果存在这个玩家的存档
        entity.money = data.money //恢复金钱
        entity.junk = data.junk //恢复废品
        entity.hpP=data.hp
        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 '',--道具列表
        hpP INTEGER DEFAULT 0,
        userKey TEXT PRIMARY KEY UNIQUE DEFAULT ''--玩家的识别码
    )`

    showPlayers()
}


回复

上一页1 页 / 共 0下一页