I';我在Roblox Lua脚本中遇到问题。我想把它写成脚本,这样在死亡时就可以保存库存了。有什么建议吗?

I';我在Roblox Lua脚本中遇到问题。我想把它写成脚本,这样在死亡时就可以保存库存了。有什么建议吗?,lua,roblox,Lua,Roblox,我想写一个脚本,这样当一个玩家死了,库存中的东西就不会消失。这是我目前的脚本,关于如何实现这一点有什么建议或提示吗?我已经写了一个本地脚本和一个服务器脚本,它在工作区中,仍然没有运气 local Inventory = {} local function Spawned(Char) local Plr = game.Players:GetPlayerFromCharacter(Char) for i,v in pairs(Inventory[Plr]) do i

我想写一个脚本,这样当一个玩家死了,库存中的东西就不会消失。这是我目前的脚本,关于如何实现这一点有什么建议或提示吗?我已经写了一个本地脚本和一个服务器脚本,它在工作区中,仍然没有运气

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)

将你想要保存的物品保存在玩家中。StarterGear有几种不同的方法可以存储玩家清单。我会在下面展示一些,这样你就可以看到它们了

1.把武器放在起动器里 正如坐标牛顿所说,一旦玩家购买了一件武器,而不是只把它放在背包里,你也可以把它放在他们的.StarterGear文件夹中,这意味着每次他们产卵时,工具都会自动放在他们的新背包里。这非常简单,因为您只需将武器克隆到:

game.Players.LocalPlayer.StarterGear
还有球员的背包。你在评论中提到,你已经尝试过这个,但它不起作用,但很遗憾,我想不出它不起作用的原因

2.使用IntValue作为全局变量 如果无法使用,那么另一种方法是在每次购买武器时创建一个新的IntValue实例,并在移除武器时将其销毁。如果您将IntValue命名为玩家拥有的武器的名称,那么您可以使用代码在复制存储中查找该武器(如果该武器存储在复制存储中)

例如,如果将下面的代码放入本地脚本中,将创建一个文件夹来存储IntValue,然后每当玩家重生时,代码将遍历所有IntValue,获取名称并将相应的武器放入玩家背包中

game.Players.LocalPlayer.CharacterAdded:Connect(function()
    local Children = Storage:GetChildren()
    if #Children > 0 then --If there are stored weapons
        for _, child in pairs(Children) do
            -- Below: Clone the weapon from Replicated Storage using the name from the IntValue
            local WeaponClone = game.ReplicatedStorage:FindFirstChild(tostring(child.Name)):Clone()
            WeaponClone.Parent = game.Players.LocalPlayer.Backpack
        end
    end
end)

local Storage = Instance.new("Folder") --Folder to store current weapons in
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.Dead开火时已经清理完毕,因此你无法获得玩家拥有的武器清单


我希望这有助于你尝试做的事情,即使这不是你想要的。

代码有什么问题?我的问题是无论我如何更改代码,当玩家死亡时,这些项目仍然会消失。物品在复制存储中,当玩家购买物品时,它现在在他的背包和起动器装备中,但也许我说得不对。我想让它在玩家死亡时保存,而不是消失在玩家必须重新购买的地方。我该怎么做?