用户:
不爱做跑酷查看:5 回复:2 评论:5 创建时间:2021-11-30T19:23:02


源代码:
//封装成函数是因为它会被多次用到(显示玩家状态, 显示与NPC交互结果)
function textDialog(entity, content, title) {
return entity.player.dialog({ //弹出对话框
type: Box3DialogType.TEXT, //对话框类型为纯文本
content, //文本内容
title, //对话框左上角标题内容
})
}
world.onPlayerJoin(({ entity }) => {//每次玩家进入游戏都会运行
entity.money = 0 //钱
entity.junk = 0 //废品
entity.itemList = [] //口袋里的货品
loadPlayer(entity)
entity.player.onPress(async ({ button }) => { //每当有按钮被按下
if (button == Box3ButtonType.ACTION1) { //如果按钮是右键
const selection = await entity.player.dialog({
type: Box3DialogType.SELECT, //对话框类型为选择框
content: `你身上有:\n\n${entity.money}元, ${entity.junk}个废品\n道具: [${entity.itemList}]`,
options: ['保存'],
})
if (selection) { //确保对话框不是点击x关闭
if (selection.value === '保存') { //被点击的是保存按钮
await savePlayer(entity) //等待写入结束才运行下一行
textDialog(entity, '保存完毕')
}
}
}
})
})
async function savePlayer(entity) {//定义保存玩家状态的函数
if (entity.player.userKey) {//拥有userKey的玩家, 则玩家不是游客, 可以保存
await db.sql`
--尝试向player表插入一条记录, 向各个字段写入玩家身上对应的属性值
INSERT INTO player (
userName,
money,
junk,
itemList,
userKey
)
VALUES(
${entity.player.name},
${entity.money},
${entity.junk},
${JSON.stringify(entity.itemList)},--itemList是数组, 需要用JSON.stringify才能存入类型为TEXT的字段
${entity.player.userKey}
)
ON CONFLICT(userKey)--如果玩家记录已经存在, 则不需要插入, 而是更新各个字段的值
DO UPDATE SET
userName=excluded.userName,
money=excluded.money,
junk=excluded.junk,
itemList=excluded.itemList
`
}
}
async function showPlayers() {
console.clear() // 清空控制台
const playerList = await db.sql`SELECT * FROM player`
for (const p of playerList) {
console.log(JSON.stringify(p))
}
}
async function createTable() {
await db.sql`
CREATE TABLE IF NOT EXISTS player (
money INTEGER DEFAULT 0,--金钱, INTEGER类型用于存储整数
junk INTEGER DEFAULT 0,--废品, INTEGER类型用于存储整数
itemList TEXT DEFAULT '',--道具列表, TEXT类型用于存储字符串
userKey TEXT PRIMARY KEY UNIQUE DEFAULT ''--玩家的唯一识别码, TEXT类型用于存储字符串
)
`
showPlayers() //每次运行代码都能查看数据库里所有记录
}
async function loadPlayer(entity) {
const data = (await (db.sql`SELECT * FROM player WHERE userKey=${entity.player.userKey} limit 1`))[0]
if (data) { //如果存在这个玩家的存档
entity.money = data.money //恢复金钱
entity.junk = data.junk //恢复废品
entity.itemList = JSON.parse(data.itemList) //恢复道具列表, 这里的JSON.parse用于把字符串变回数组
}
}
async function showPlayers() {
console.clear() // 清空控制台
const playerList = await db.sql`SELECT * FROM player`
for (const p of playerList) {
console.log(JSON.stringify(p))
}
}
async function createTable() {
await db.sql`CREATE TABLE IF NOT EXISTS player (
userName TEXT DEFAULT '',--玩家名字
money INTEGER DEFAULT 0,--金钱
junk INTEGER DEFAULT 0,--废品
itemList TEXT DEFAULT '',--道具列表
userKey TEXT PRIMARY KEY UNIQUE DEFAULT ''--玩家的识别码
)`
showPlayers()
}
createTable()
help!!!!!!!!!!!!!