用户:yee剑走天下查看:20 回复:11 评论:20 创建时间:2023-07-16T08:12:45
代码无误,但代码的注释可能解释并不十分准确,敬请谅解
用法:在savedPlayer中放入玩家要保存的数据,unsavedPlayer中放入玩家无需保存的数据
如需增添玩家新的需要保存的数据,直接在savePlayer中加即可
代码如下:
console.clear();
const unsavedData = {
nowDoing: '闲逛中'
};// 玩家初始无需保存的数据,可增添或删除
const savedData = {
money: 100,
lv: 0,
exp: 0,
itemList: ['铁剑']
};// 玩家初始需要保存的数据,可增添或删除
var SQL = storage.getDataStorage('player'); // 获取数据库,名称为 player
(async () => {
var sqlData = await SQL.get('player'); // 获取数据库当前内容
if (!sqlData) { // 如果数据库无初始值
await SQL.set('player', {}) // 设置初始值,为一个空的对象
}
})();
function initPlayer(entity) {
for (let i in savedData) {
entity[i] = savedData[i];
};
for (let e in unsavedData) {
entity[e] = unsavedData[e];
}
}; // 初始化玩家数据
async function getPlayerData(entity) {
var data = { "name": entity.player.name };
for (let i in savedData) {
data[i] = entity[i]
}; // 遍历savedData,获取玩家数据,放入data对象中
var sqlData = await SQL.get('player'); // 获取数据库 player
sqlData = sqlData.value; // 将sqlData设置成数据库当前的数据
sqlData[entity.player.userKey] = data; // 新增玩家数据,以玩家userKey为键
return sqlData;
};
async function savePlayer(entity) {
await SQL.set('player', await getPlayerData(entity))
}; // 存储玩家数据
async function deletePlayer(entity) {
var sqlData = await SQL.get('player'); // 获取数据库
var data = sqlData.value; // 设置data为数据库当前数据 player
delete data[entity.player.userKey]; // 删除玩家在data中的键
await SQL.set('player', data); // 将data存入数据库 player
}
async function loadPlayer(entity) {
var sqlData = await SQL.get('player'); // 获取数据库 player
var data = sqlData.value[entity.player.userKey]; // 获取玩家在数据库中的数据
if (data) { // 如果数据存在
for (let i in savedData) {
data[i] ? entity[i] = data[i] : entity[i] = savedData[i]
// 遍历要保存的初始数据对象savedPlayer,若数据中不存在该新增元素,则将玩家的属性设置为新增元素初始值,若存在则读取玩家的数据
};
for (let i in unsavedData) {
entity[i] = unsavedData[i] // 初始玩家无需保存的数据
}
} else {
initPlayer(entity); // 初始化玩家数据
await SQL.set('player', await getPlayerData(entity)) // 存入数据库 player
entity.player.directMessage('已为您创建数据!')
}
};
world.onPlayerJoin(async ({ entity }) => {
await loadPlayer(entity); // 调用loadPlayer
});
world.onPlayerLeave(async ({ entity }) => {
await savePlayer(entity); // 调用savePlayer
});助力创作节()()顺便看看有没有哪个好心人愿意带我()![]()
再放一段可用来测试的代码(
world.onPress(async ({ entity, button }) => {
if (button == GameButtonType.ACTION1) {
const ask = await entity.player.dialog({
type: 'select',
title: '测试',
content: `你目前[${entity.lv}]级\n[${entity.exp}]点经验\n[${entity.money}]枚金币\n背包:[${entity.itemList}]\n当前状态:${entity.nowDoing}`,
options: ['点我加等级', '点我加经验', '点我加金币']
});
if (!ask) return;
if (ask) {
entity[['lv', 'exp', 'money'][ask.index]]++;
}
}
});点赞0
评论
七式草莓警告!
请不要使用帖子中的模板!
有重大BUG!
请参照下面的文档,将键设置成玩家的user id,而不是用一个键存储所有的数据!
不听我警告者,数据库的读取速度会变慢!玩家一多服务器就会崩溃!
附storage使用文档:https://shequ.codemao.cn/community/550947
点赞1
评论