用户:yee剑走天下查看:15 回复:11 评论:15 创建时间:2023-03-19T14:43:43
之前屑剑发了一个屑sql模板(
然后今天尝试做排行榜(
不知道为什么没用(
还望大佬指出错误)
具体错误看getTop100处(
console.clear();
const PlayerData = {
money: [0, true],
lv: [1, true],
item: [[], true],
test: ['yee', false]
};
(async () => {
await db.sql`
CREATE TABLE IF NOT EXISTS YJZTX (
datas TEXT NOT NULL,
userKey CHAR(16) PRIMARY KEY UNIQUE NOT NULL
)
`
})();
function initPlayer(entity) {
for (let i in PlayerData) {
entity[i] = PlayerData[i][0]
}
};
function getPlayerData(entity) {
var data = { "name": entity.player.name };
for (let i in PlayerData) {
PlayerData[i][1] ? data[i] = entity[i] : null
};
return JSON.stringify(data);
};
async function savePlayer(entity) {
if (!entity.player.userKey) return;
await db.sql`
INSERT INTO YJZTX (
datas,
userKey
)
VALUES (
${getPlayerData(entity)},
${entity.player.userKey}
)
ON CONFLICT(userKey)
DO UPDATE SET
datas = excluded.datas
`
};
async function loadPlayer(entity) {
const [data] = await db.sql`SELECT * FROM YJZTX WHERE userKey = ${entity.player.userKey} LIMIT 1`;
if (data) {
var Data = JSON.parse(data.datas);
for (let i in PlayerData) {
Data[i] ? entity[i] = Data[i] : entity[i] = PlayerData[i][0]
};
console.log(getPlayerData(entity));
} else {
initPlayer(entity);
}
};
async function getTop100(type, typeName) {
var list = [];
for await (const row of await db.sql`SELECT * FROM YJZTX`) {
list.push([row.datas.name, row.datas[type]])
};
var sortedPlayers = list.sort((a, b) => a[1] - b[1]);
for (let i = 0; i <= 100; i++) {
if (sortedPlayers[i]) {
sortedPlayers[i] = [`第${i}名 | ${sortedPlayers[0]} | ${sortedPlayers[1]}${typeName}${type}`]
}
}
return sortedPlayers
}
async function deletePlayer(entity) {
await db.sql`DELETE FROM YJZTX WHERE "userKey" = ${entity.player.userKey}`;
};
world.onPlayerJoin(async ({ entity }) => {
await loadPlayer(entity);
await getTop100('money', '枚')
});
world.onPlayerLeave(async ({ entity }) => {
await savePlayer(entity)
})
const r = await db.sql`SELECT * FROM 表格名 ORBER BY 数据名 ASC LIMIT 100`;
//这段代码的作用是在“表格名”里面以“数据名”排序的方法读取数据,ASC和DESC的作用就是排名是由高到低还是由低到高
//然后,用for循环整理数据并以dialog的形式输出,就ok了点赞0
评论
XiaoLiQAQconsole.clear();
const PlayerData = {
money: [0, true],
lv: [1, true],
item: [[], true],
test: ['yee', false]
};
(async () => {
await db.sql`
CREATE TABLE IF NOT EXISTS YJZTX (
datas TEXT NOT NULL,
userKey CHAR(16) PRIMARY KEY UNIQUE NOT NULL
)
`
})();
function initPlayer(entity) {
for (let i in PlayerData) {
entity[i] = PlayerData[i][0]
}
};
function getPlayerData(entity) {
var data = { "name": entity.player.name };
for (let i in PlayerData) {
PlayerData[i][1] ? data[i] = entity[i] : null
};
return JSON.stringify(data);
};
async function savePlayer(entity) {
if (!entity.player.userKey) return;
await db.sql`
INSERT INTO YJZTX (
datas,
userKey
)
VALUES (
${getPlayerData(entity)},
${entity.player.userKey}
)
ON CONFLICT(userKey)
DO UPDATE SET
datas = excluded.datas
`
};
async function loadPlayer(entity) {
const [data] = await db.sql`SELECT * FROM YJZTX WHERE userKey = ${entity.player.userKey} LIMIT 1`;
if (data) {
var Data = JSON.parse(data.datas);
for (let i in PlayerData) {
Data[i] ? entity[i] = Data[i] : entity[i] = PlayerData[i][0]
};
} else {
initPlayer(entity);
}
};
async function getTop100(type, typeName) {
var list = [];
for await (const row of await db.sql`SELECT * FROM YJZTX`) {
list.push([JSON.parse(row.datas).name, JSON.parse(row.datas)[type]])
};
var sortedPlayers = list.sort((a, b) => b[1] - a[1]);
for (let i = 0; i <= 100; i++) {
if (sortedPlayers[i]) {
sortedPlayers[i] = [`第${i+1}名 | ${sortedPlayers[i][0]} | ${sortedPlayers[i][1]}${typeName}${type}`]
}
}
return sortedPlayers
}
async function deletePlayer(entity) {
await db.sql`DELETE FROM YJZTX WHERE "userKey" = ${entity.player.userKey}`;
};
world.onPlayerJoin(async ({ entity }) => {
await loadPlayer(entity);
await savePlayer(entity)
await getTop100('money', '枚')
});
world.onPlayerLeave(async ({ entity }) => {
await savePlayer(entity)
})点赞0
评论