猫史档案馆


【box3】超级好用的sql模板!而且不易报错~

用户:GPUawaGPUawa查看:19 回复:19 评论:19 创建时间:2022-05-28T19:57:16


我这个大屑又双叒来(fa)搞(mu)事(ban)了~

SQL这东西搞不好就会出bug

so,模板很重要(bushi)

今天,屑就来分享一个自制sql模板

上菜!

//在开始运行的时候创建表
(async function() {
    await db.sql`CREATE TABLE IF NOT EXISTS playerdata (
        userKey CHAR(16) PRIMARY KEY UNIQUE NOT NULL,--识别码
        money INT NOT NULL,--钱
        exps INT NOT NULL,--经验
        level INT NOT NULL,--等级
        item TEXT NOT NULL--物品
    )`
}())

//存档
async function update(entity) {
    await db.sql`UPDATE playerdata SET 
        money=${entity.money},
        exps=${entity.exp},
        level=${entity.level},
        item=${JSON.stringify(entity.item)}
    WHERE userKey=${entity.player.userKey}`
}


//清档
async function del(entity) {
    await db.sql`DELETE FROM playerdata WHERE userKey=${entity.player.userKey}`
}

//当玩家进入地图
world.onPlayerJoin(async({entity})=>{
    var data = await db.sql`SELECT * FROM playerdata WHERE userKey=${entity.player.userKey} LIMIT 1`//读取用户数据
    world.say(JSON.stringify(data))
    if (data && !data.length) {//当玩家没有数据
        //初始化数据
        entity.money=1000
        entity.exp=0
        entity.level=1
        entity.item=[]
        //插入数据
        await db.sql`INSERT INTO playerdata VALUES (
            ${entity.player.userKey},
            ${entity.money},
            ${entity.exp},
            ${entity.level},
            ${JSON.stringify(entity.item)}
        )`
    }else{//当玩家数据存在时
        var row = data[0]//作用:本来data是Object(对象),我们可以用[0]这个索引把读取到的数据从data里取出并赋值到row
        //恢复数据
        entity.money=row.money
        entity.exp=row.exps
        entity.level=row.level
        entity.item=JSON.parse(row.item)//用JSON.parse使item变成数组
    }
    entity.maxExp=entity.level*100//设置升级所需的经验
    entity.onVoxelContact(() => {//玩家每走一步
        entity.exp += 1//经验+1
    })
    entity.player.onPress(async({button})=>{//当按下按键
        if(button === Box3ButtonType.ACTION1){//当按下的按键是右键
            //打开控制面板    
            var ctrl = await entity.player.dialog({
                type: Box3DialogType.SELECT,
                title: `${entity.player.name} 的信息`,
                titleTextColor: new Box3RGBAColor(0, 0, 0, 1),
                titleBackgroundColor: new Box3RGBAColor(0, 0.3, 1, 1),
                content: `血量:${entity.maxHp}/${entity.hp}
                        金币:${entity.money}
                        等级:${entity.level}
                        经验:${entity.exp}/${entity.maxExp}
                        `,
                options: ['手动保存','背包','升级','删档'],
                contentTextColor:  new Box3RGBAColor(0, 0, 0, 1),
                contentBackgroundColor: new Box3RGBAColor(1, 1, 1, 1),
            })
            if(!ctrl||ctrl==null){
                return
            }
            if(ctrl.value=='手动保存'){
                await update(entity)
            }else if(ctrl.value=='删档'){
                await del(entity)    
            }else if(ctrl.value=='升级'){
                if(entity.exp>=entity.maxExp){
                    entity.level+=1
                    entity.exp-=entity.maxExp
                    entity.maxExp=entity.level*100
                    await update(entity)
                    await entity.player.dialog({
                        type: Box3DialogType.TEXT,
                        title: `升级`,
                        titleTextColor: new Box3RGBAColor(0, 0, 0, 1),
                        titleBackgroundColor: new Box3RGBAColor(0, 0.3, 1, 1),
                        content: `恭喜升级到第${entity.level}级!`,
                        contentTextColor:  new Box3RGBAColor(0, 0, 0, 1),
                        contentBackgroundColor: new Box3RGBAColor(1, 1, 1, 1),
                    })
                }else{
                    await entity.player.dialog({
                        type: Box3DialogType.TEXT,
                        title: `升级`,
                        titleTextColor: new Box3RGBAColor(0, 0, 0, 1),
                        titleBackgroundColor: new Box3RGBAColor(0, 0.3, 1, 1),
                        content: `升级失败\n原因:经验不足`,
                        contentTextColor:  new Box3RGBAColor(0, 0, 0, 1),
                        contentBackgroundColor: new Box3RGBAColor(1, 1, 1, 1),
                    })                   
                }
            }else if(ctrl.value=='背包'){
                var bag = await entity.player.dialog({
                    type: Box3DialogType.SELECT,
                    title: `背包`,
                    titleTextColor: new Box3RGBAColor(0, 0, 0, 1),
                    titleBackgroundColor: new Box3RGBAColor(0, 0.3, 1, 1),
                    content: `${entity.player.name} 的背包\n共${entity.item.length}件`,
                    options: entity.item,
                    contentTextColor:  new Box3RGBAColor(0, 0, 0, 1),
                    contentBackgroundColor: new Box3RGBAColor(1, 1, 1, 1),
                })
                if(!bag||bag==null){
                    return
                }
            }
         }
    })
})


回复

上一页1 页 / 共 1下一页
GPUawaGPUawa

world.say(JSON.stringify(data))

这段代码是为了检测data里是否有数据的,不用的小伙伴可以注释哦~

(别删 以备不时之需)

点赞0


评论


GPUawaGPUawa

搞错了

var row = data[0]//作用:本来data是数组,我们可以用[0]这个索引把读取到的数据(也就是Object(对象))从data里取出并赋值到row

这才是row的作用

点赞0


评论


1086爱编程1086爱编程

我只能说很强()

点赞0


评论


灵清帝王吃爆一切厕所灵清帝王吃爆一切厕所

我只能说这个太复杂了()完全可以简化()emotion_doge

点赞0


评论


GPUawaGPUawa

难道你们都没发现我没加onplayerleave吗

点赞1


评论


GPUawaGPUawa

亲测有效!

代码仅供学习参考

 

点赞0


评论


神秘蟑螂zl神秘蟑螂zl

爱了,感谢大佬

点赞0


评论


神秘蟑螂zl神秘蟑螂zl

感觉hp放反了

点赞0


评论


该账号已被封禁该账号已被封禁

。。。

点赞0


评论


飞跃的流星丨冲四千粉飞跃的流星丨冲四千粉

能发布跑酷sql教程吗?

点赞0


评论


未名用户未名用户

收藏

点赞0


评论


萌新大佬萌新大佬

lolitaYYDS

点赞0


评论


神秘蟑螂zl神秘蟑螂zl

为啥加一个元素就会报错?

点赞0


评论


GPUawaGPUawa

如出现no such table/world.say(JSON.stringify(data))返回值为[]等错误请输入以下代码:

db.sql`DROP TABLE playerdata`

就有几率解决报错了~

点赞0


评论


双鱼冬寒双鱼冬寒

//在开始运行的时候创建表 (async function() {     await db.sql`CREATE TABLE IF NOT EXISTS playerdata (         userKey CHAR(20) PRIMARY KEY UNIQUE NOT NULL,--识别码         money INT NOT NULL,--钱         exps INT NOT NULL,--经验         level INT NOT NULL,--等级         candy INT NOT NULL,--糖果         runAccelerationgo INT NOT NULL,--奔跑加速度         runspeedgo INT NOT NULL,--最大奔跑速度         hp INT NOT NULL,--血量         maxHp INT NOT NULL,--最大血量         item TEXT NOT NULL--物品     )` }())

 

//存档 async function update(entity) {     await db.sql`UPDATE playerdata SET          money=${entity.money},         exps=${entity.exp},         level=${entity.level},         candy=${entity.candy},         runAccelerationgo=${entity.runAccelerationgo},         runspeedgo=${entity.runspeedgo},         hp=${entity.hp},         maxHp=${entity.maxHp},         item=${JSON.stringify(entity.item)}     WHERE userKey=${entity.player.userKey}` }

 

//清档 async function del(entity) {     await db.sql`DELETE FROM playerdata WHERE userKey=${entity.player.userKey}` }

 

 

点赞0


评论


AokenAoken

,,

点赞0


评论


憨白不憨awa憨白不憨awa

))

点赞0


评论


飞阁_Pallad飞阁_Pallad

D   

点赞0


评论


锦衣侠客锦衣侠客

大神

点赞0


评论