我在Roblox Lua脚本中遇到了问题,我想编写脚本以便在死亡时保留库存。有什么建议吗?
我想编写一份脚本,以便玩家死亡时库存中的东西不会消失。这是我的当前脚本,您有关于如何实现此目标的任何指针或提示?我已将其编写为本地和服务器脚本,并放在工作区,但仍然没有成功
local Inventory = {}
local function Spawned(Char)
local Plr = game.Players:GetPlayerFromCharacter(Char)
for i,v in pairs(Inventory[Plr]) do
if Plr['Backpack']:findFirstChild(v.Name) then
Plr['Backpack'][v.Name]:Destroy()
end
v.Parent = Plr['Backpack']
end
Inventory[Plr] = {}
Char:WaitForChild('Humanoid').Died:connect(function()
for i,v in pairs({Plr['Backpack'], Char}) do
for ii,vv in pairs(v:GetChildren()) do
if vv:IsA('Tool') then
table.insert(Inventory[Plr], vv:Clone())
vv:Destroy()
end
end
end
end)
end
game.Players.PlayerAdded:connect(function(Plr)
Inventory[Plr] = {}
local Char = Plr.Character or Plr.CharacterAdded:wait()
Spawned(Char)
Plr.CharacterAdded:connect(Spawned)
end)
有几种不同的方法可以存储玩家的物品清单,我会展示一些,以便您可以看到它们。
1. 在 StarterGear 中存储武器
正如 Coordinate Newton 所说,一旦玩家购买武器,您可以将武器放入他们的 .StarterGear 文件夹中,这意味着每次重生时,工具将自动放置在他们的新背包中。这很简单,因为您只需要将武器克隆到:
game.Players.LocalPlayer.StarterGear
以及玩家的背包中。您在评论中提到您已经尝试过这个方法,但是没有起作用,但是我恐怕无法想出原因。
2. 使用 IntValue 作为全局变量
如果不能使用上面的方法,则另一种方法是在购买武器时创建一个新的 IntValue 实例,并在移除武器时销毁它。如果您使用武器的名称来命名 IntValue,则可以使用代码在复制存储中查找该武器。
例如,下面的代码,如果放入本地脚本中,将创建一个用于存储 IntValues 的文件夹,然后每次玩家重生时,代码将遍历所有这些 IntValues 获取名称,并将相应的武器放入玩家的背包中。
game.Players.LocalPlayer.CharacterAdded:Connect(function()
local Children = Storage:GetChildren()
if #Children > 0 then -- 如果有存储的武器
for _, child in pairs(Children) do
-- 下面: 使用 IntValue 中的名称从复制存储中克隆武器
local WeaponClone = game.ReplicatedStorage:FindFirstChild(tostring(child.Name)):Clone()
WeaponClone.Parent = game.Players.LocalPlayer.Backpack
end
end
end)
local Storage = Instance.new("Folder") -- 用于存储当前武器的文件夹
Storage.Name = "BoughtWeapons"
Storage.Parent = game.Player.LocalPlayer
我还制作了两个可以调用以创建和销毁 IntValue 的函数。
local function WeaponBought(WeaponName)
local WeaponSave = Instance.new("IntValue")
WeaponSave.Name = WeaponName
WeaponSave.Parent = game.Players.LocalPlayer.BoughtWeapons
end
local function WeaponRemoved(WeaponName)
game.Players.LocalPlayer.BoughtWeapons:FindFirstChild(WeaponName):Destroy()
end
您可以将这两个函数放在任何本地脚本中,它们不必与其他主要代码在一起。您只需要将玩家拥有的武器名称传递给函数即可,例如:
WeaponBought("GravityCoil")
这将在文件夹中创建一个名为 "GravityCoil" 的 IntValue,以便玩家重生时使用。这不如简单地使用 StarterGear 文件夹舒适,但如果由于某种原因无法使用它,则这是一个很好的第二选择。
这种解决方案的一个小问题是需要将武器存储在复制存储中,而剥削者可以很容易地获取它们而不必购买它们。不幸的是,这仅是使用本地脚本执行此操作导致的问题。
您的代码
我相信您的代码没有按预期工作的原因是,据我所知,在 Humanoid.Died 触发时,玩家的背包已经被清空,因此您将无法获取玩家拥有的武器列表。
我希望这有助于您正在尝试的内容,即使这不完全是您要求的。
- 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 代码?

将想要在玩家死亡时持续存在的物品放在
Player.StarterGear中。