猫史档案馆


黎明SQL模版

用户:全能代码师全能代码师查看:2 回复:16 评论:2 创建时间:2023-01-29T17:46:17


let sqlCheck = {
    team: '地球',
    name: '',
    exp: 0,
    bag: { '可折叠': {}, '不可折叠': [] },
    hand: 1,
    danger: 0,//危险程度,0:普通,1:禁言,2:封号
    dangerTime: 0,//解封时间
    wears: {
        //4把武器
        '1': {

        },
        '2': {

        },
        '3': {

        },
        '4': {

        },
        '头盔': {

        },
        '护甲': {

        },
        '护腿': {

        },
        '护臂': {

        },
        '靴子': {

        },
        '手套': {

        },
        '臂章': {

        },
        '机甲': {

        },
        '飞船': {

        },
        '宠物': {

        },
    },
    buff: [

    ],
    present: {
        '礼包码': [],
    },
    settings: { '视角': 'follow' },
    state: { '玩家状态': '喵', },//属性
    position: [256, 10, 256],//玩家位置
    id: 0,//玩家编号
    tasks: { '主线': 0, '主线进度': 0, '支线': [{}, []] },//任务,主线是必须要完成上一项才能开始下一项
    //支线:[{支线任务1:进度...},[完成任务]]
    success: [],//成就
    money: 0,//联邦币
    hp: 100,
    maxHp: 100,
    titles: ['学员'],//第一~二个是玩家的称号,其他的是备选称号
    others: {
        'joinGameTime': new Date().toLocaleDateString(),
        '靶场总打靶数': 0,
        '本月打靶数': 0,
    },//乱丢杂物,啥都能放
}
Object.freeze(sqlCheck)//冻结集合无法改变
global.sqlCheck = sqlCheck
global.createTable = createTable
async function createTable() {//创建玩家数据表
    return await db.sql`
        CREATE TABLE IF NOT EXISTS "player" (
            "userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL,
            "data" TEXT NOT NULL
        )
    `;
}

createTable()
global.getPlayerData = getPlayerData
async function getPlayerData(entity = new Box3Entity) {
    var a = await db.sql`SELECT * FROM "player" WHERE "userKey"=${entity.player.userKey} LIMIT 1`
    if (a != undefined) {
        if (a[0] != undefined) {
            if (a[0].data != undefined) {
                return JSON.parse(a[0].data)
            }
        }
    }
    return null
}
global.checkKeys = checkKeys
function checkKeys(object1 = {}, object2 = {}) {//object1是被修改对象,object2是参照对象
    var object3 = new Object(object2)
    for (let i in object3) {
        if (object1[i] == undefined) {
            object1[i] = object3[i]
        } else if (typeof object1[i] == 'object') {
            checkKeys(object1[i], object3[i])
        }
    }
}
global.loadPlayer = loadPlayer
async function loadPlayer(entity = new Box3Entity) {
    var data = await getPlayerData(entity)
    if (data) {
        for (let i in data) {
            if (i != 'position') {
                entity[i] = data[i]
                if (i == 'settings') {
                    entity.player.cameraMode = data[i]['视角']
                }
            } else {
                entity.position.set(data[i][0], data[i][1], data[i][2])
            }
        }
        for (let i in sqlCheck) {
            if (entity[i] == undefined) {
                entity[i] = sqlCheck[i]
            } else {
                if (typeof entity[i] == 'array' || typeof entity[i] == 'object') {
                    checkKeys(entity[i], sqlCheck[i])
                }
            }
        }
        return '有存档'
    } else {
        for (let i in sqlCheck) {
            if (i != 'position') {
                entity[i] = sqlCheck[i]
            }
            if (i == 'id') {
                var datas = await db.sql`SELECT * FROM "player"`
                entity[i] = datas.length + 1000
            }
        }
        return '无存档'
    }
}
global.savePlayer = savePlayer
async function savePlayer(entity = new Box3Entity) {//玩家存档
    var data = {}
    for (let i in sqlCheck) {
        try {
            if (i != 'position') {
                data[i] = entity[i]
                if (i == 'settings') {
                    data[i]['视角'] = entity.player.cameraMode
                }
            } else {
                data[i] = [entity[i].x, entity[i].y, entity[i].z]
            }
        } catch (e) {
            return console.log(e);
        }
    }
    data = JSON.stringify(data)
    await db.sql`
        INSERT INTO "player" (
            "userKey",
            "data"
        ) VALUES (
            ${entity.player.userKey},
            ${data} 
        )
        ON CONFLICT("userKey") -- 如果已经存在同样的用户识别码
        DO UPDATE SET
            "data"=excluded."data"
    `
}

function dropTable() {
    db.sql`DROP TABLE player`
}
global.dropTable = dropTable


回复

上一页1 页 / 共 1下一页
全能代码师全能代码师

world.onPlayerJoin(async({entity})=>{

await loadPlayer(entity)

})

点赞0


评论


屑怪盗屑怪盗

收藏

点赞0


评论


145a145a

深受启发

点赞0


评论


mkonnzikmkonnzik

盗走力

点赞1


评论


FML饭米粒FML饭米粒

这不就是lo大佬一年前的那个模板吗)

虽然修改了不少?

点赞0


评论


仙之鹤仙之鹤

dddd

点赞0


评论


yyds二营长yyds二营长

顶顶顶

点赞0


评论


锦衣侠客锦衣侠客

牛~

点赞0


评论


AokenAoken

。。

点赞0


评论


全能代码师全能代码师

ddd.jpg

点赞0


评论


Forzen_SevenForzen_Seven

黎明?(意味深长)

点赞0


评论


fjskdfjslkdfjskdfjslkd

复制走了

 

点赞0


评论


全能代码师全能代码师

jntm

点赞0


评论


yee剑走天下yee剑走天下

屑啊(咋就抄袭你的了(也不看看相差多大(?雾

点赞0


评论


全能代码师全能代码师

d d d d

点赞0


评论


NomenNomen

ddd

点赞0


评论