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开火时已经清理完毕,因此你无法获得玩家拥有的武器清单
我希望这有助于你尝试做的事情,即使这不是你想要的。代码有什么问题?我的问题是无论我如何更改代码,当玩家死亡时,这些项目仍然会消失。物品在复制存储中,当玩家购买物品时,它现在在他的背包和起动器装备中,但也许我说得不对。我想让它在玩家死亡时保存,而不是消失在玩家必须重新购买的地方。我该怎么做?