如何使用 file.Write 和 file.Read 来保存玩家数据
2021-2-14 3:28:33
收藏:0
阅读:145
评论:2
我正在尝试制作一款经验脚本。唯一我似乎无法理解的是数据保存。我正在使用 file.Write ,每当我的脚本从数据中读取玩家的等级和经验时,它都不能显示出来。我有我的变量 xp 等于 0 和 level 等于 1。如果我想使用 file.Write 将我分配的数字或添加到此数字的任何数字保存为新数字并将其读取为玩家刷新,我该如何做到这一点?
local xp = 0
local level = 1
local players = player.GetAll()
for k ,v in pairs(players) do
file.Write("xpdata.txt", xp)
file.Write("leveldata.txt", level)
end
hook.Add("PlayerSpawn", "leveldata", function()
file.Read("xpdata.txt", "DATA")
file.Read("leveldata.txt", "DATA")
end)
点赞
用户2858170
如果您只是将文件读取到虚空中,您希望发生什么?
hook.Add("PlayerSpawn", "leveldata", function()
file.Read("xpdata.txt", "DATA")
file.Read("leveldata.txt", "DATA")
end)
这里您读取了两个文件,但是您没有对返回值做任何操作。
如果成功,则file.Read返回一个字符串,其中包含文件的内容。
您需要对返回值做些什么。
local xpData = file.Read("xpdata.txt", "DATA")
if not xpData then
print("Reading data/xpdata.txt failed!")
else
print("XP: ", xpData)
end
当然,您应该为每个玩家存储那些数据,并确保每个玩家都获得其自己的经验值分配。
local xp = 0
local level = 1
local players = player.GetAll()
for k ,v in pairs(players) do
file.Write("xpdata.txt", xp)
file.Write("leveldata.txt", level)
end
这也没有太多意义。 您正在为每个玩家写入相同的文件。 每个循环周期都将覆盖之前的循环的文件。
而且,使用相同的经验值和等级对每个玩家也没有太大帮助。
因此,您要么为每个玩家都有一个文件,要么在常见文件中具有某种类似结构,以便您可以编写和读取特定于玩家的数据。
在将数据写入文件之前,您需要“序列化”您的数据,并在稍后对其进行反序列化。
这可以通过使用两个实用程序函数来实现
https://wiki.facepunch.com/gmod/util.TableToJSON
https://wiki.facepunch.com/gmod/util.JSONToTable
然后您可以这样做
local playerData = {}
-- 对于每个玩家
for k, player in pairs(players) do
-- 添加一个带有xp和lvl的表,以便稍后可以通过AccountID访问它
playerData[player.AccountID] = {xp = player.xp, lvl = player.lvl}
end
local jsonStr = util.TableToJSON(playerData)
file.Write("playerdata.xp", jsonStr")
我会让剩下的给您学习。
2021-02-14 07:20:15
评论区的留言会收到邮件通知哦~
推荐文章
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

我认为你需要使用 JSON。
我现在不能提供一个完整的例子,但是你可以查看这个页面 https://wiki.gideros.rocks/index.php/Start_Here#Save.2Fread_data_persistently ,或许可以帮助你理解这个概念。