用户:
化石茄子的铁镐查看:2 回复:4 评论:2 创建时间:2021-08-16T08:25:40
如题,
以下代码完全选自Gitbook:
console.clear()
/// 创建表
async function createTable() {
await db.sql`CREATE TABLE IF NOT EXISTS playerlogin (
name VARCHAR(50) NOT NULL,
jointime REAL NOT NULL,
leavetime REAL
)`
}
// 第一次进入游戏时,新建玩家数据
async function insertPlayer(name, join, leave = 0) {
try {
await db.sql`INSERT INTO playerlogin VALUES (${name}, ${join}, ${leave})`;
} catch (e) {
console.log(`insert sql error: ${e}`) ;
}
}
// 更新玩家进入游戏时间
async function updatePlayerJoin(name, value) {
try {
await db.sql`UPDATE playerlogin SET jointime = ${value} WHERE name = ${name}`;
} catch (e) {
console.log(`[jointime] update sql error: ${e}`) ;
}
}
// 更新玩家离开游戏时间
async function updatePlayerLeave(name, value) {
try {
await db.sql`UPDATE playerlogin SET leavetime = ${value} WHERE name = ${name}`;
} catch (e) {
console.log(`[leavetime] update sql error: ${e}`) ;
}
}
// 查询数据。如果数据不存在,返回空。
async function getPlayerData(name) {
const rows = await db.sql`SELECT * FROM playerlogin WHERE name=${name}`;
if (rows && !rows.length) {
return null;
}
return rows[0];
}
// 清空所有数据
async function clearLoginRecord () {
await db.sql`DELETE FROM playerlogin`
world.say(`清空所有登陆数据!`);
}
//-------------------------------------------------------
// 玩家进入游戏
world.onPlayerJoin( async ({entity}) => {
const now = new Date().valueOf(); // 获取真实世界的时间戳 timestamp
const playerData = await getPlayerData(entity.player.name); // 获取上次登录记录
// 如果数据不存在,说明时第一次进入游戏
if (playerData === null) {
insertPlayer(entity.player.name, now); // 插入玩家数据
world.say(`${entity.player.name} 第一次进入游戏。`);
} else {
updatePlayerJoin(entity.player.name, now); // 更新玩家进入游戏时间
const leaveTime = (now - playerData.leavetime) / 1000;
entity.player.directMessage(`${entity.player.name} 距离上次登录经过了 ${leaveTime.toFixed(2)} 秒`);
}
});
// 玩家离开游戏
world.onPlayerLeave( async ({entity}) => {
const now = new Date().valueOf();
updatePlayerLeave(entity.player.name, now)
});
原链接:https:// docs.box3.codemao.cn/ box3database. html
的示例代码2
自行去空格