用户:
小鹿UUyM查看:5 回复:9 评论:5 创建时间:2023-01-14T20:54:40
--------------------------------------------------------防窥线-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最近有人问我))屑小鹿会SQL排行榜吗)))于是今天我发个教程贴))))
async function initTable() {
return await db.sql`
CREATE TABLE IF NOT EXISTS "fen" (
"win" INT NOT NULL,
"userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL
)
`;
}
async function saveUser(entity) {
await db.sql`
INSERT INTO "fen" (
"win",
"userKey"
) VALUES (
${entity.win},
${entity.player.userKey}
)
ON CONFLICT("userKey")
DO UPDATE SET
"win"=excluded."win"
`
}
async function loadUser(entity) {
const [data] = await db.sql`SELECT * FROM "fen" WHERE "userKey"=${entity.player.userKey} LIMIT 1`
if (data) {
entity.win = data.win
}
else {
saveUser(entity)
}
}
initTable()
world.onPlayerJoin(async({entity}) => {
await loadUser(entity);
entity.player.directMessage('读档成功!');
});
world.onPlayerLeave(async({ entity }) => {
await saveUser(entity)
})
world.onChat(async({ entity, message }) => {
if (message === '保存') {
await saveUser(entity)
entity.player.directMessage('保存成功!');
}
})
这段代码实现的是玩家离开/说保存就会保存当前分数以及读档功能
world.onChat(({ entity, message }) => {
if (message === '排行榜') {
entity.player.directMessage('显示排行榜');
entity.player.dialog({
type: Box3DialogType.TEXT,
title: "赢次数排行榜",
content: dialogContent(),
})
}
})
function dialogContent() {
const allPlayerEntities = world.querySelectorAll('player');
const sortedPlayerEntities = allPlayerEntities.sort((a, b) => b.win - a.win);
let content = "";
for (const entity of sortedPlayerEntities) {
content = content + `${entity.player.name}赢了${entity.win}局\n`
}
return content
}
这些代码实现的是玩家说排行榜就显示排行榜的代码
完整代码:
async function initTable() {
return await db.sql`
CREATE TABLE IF NOT EXISTS "fen" (
"win" INT NOT NULL,
"userKey" CHAR(16) PRIMARY KEY UNIQUE NOT NULL
)
`;
}
async function saveUser(entity) {
await db.sql`
INSERT INTO "fen" (
"win",
"userKey"
) VALUES (
${entity.win},
${entity.player.userKey}
)
ON CONFLICT("userKey")
DO UPDATE SET
"win"=excluded."win"
`
}
async function loadUser(entity) {
const [data] = await db.sql`SELECT * FROM "fen" WHERE "userKey"=${entity.player.userKey} LIMIT 1`
if (data) {
entity.win = data.win
}
else {
saveUser(entity)
}
}
initTable()
world.onPlayerJoin(async({entity}) => {
await loadUser(entity);
entity.player.directMessage('读档成功!');
});
world.onPlayerLeave(async({ entity }) => {
await saveUser(entity)
})
world.onChat(async({ entity, message }) => {
if (message === '保存') {
await saveUser(entity)
entity.player.directMessage('保存成功!');
}
})
world.onChat(({ entity, message }) => {
if (message === '排行榜') {
entity.player.directMessage('显示排行榜');
entity.player.dialog({
type: Box3DialogType.TEXT,
title: "赢次数排行榜",
content: dialogContent(),
})
}
})
function dialogContent() {
const allPlayerEntities = world.querySelectorAll('player');
const sortedPlayerEntities = allPlayerEntities.sort((a, b) => b.win - a.win);
let content = "";
for (const entity of sortedPlayerEntities) {
content = content + `${entity.player.name}赢了${entity.win}局\n`
}
return content
}
好了)))这里不过多讲解了))))条件可以自行修改)))))))))))))
*注:代码来自汤圆))))))))))我就是搬运了亿点点)))))))))