用户:
全能代码师查看: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