我有一个本地脚本,当我调用其中的函数并提供项目名称作为参数时,该脚本应该将一个项目添加到玩家的 StarterPack 中。
local replicatedStorage = game:GetService("ReplicatedStorage")
local assets = replicatedStorage:WaitForChild("Assets")
local player = game.Players.LocalPlayer
local function addItem(itemName)
local item = assets:FindFirstChild(itemName)
if not item then return end
print(item)
print("Adding "..itemName.." to backpack!")
item:Clone().Parent = player.Backpack
end
我尝试item:Clone().Parent = player.Backpack
用这个替换:
local clone = item:Clone()
clone.Parent = player.Backpack
这也不会将该项目添加到 StarterPack 中。
没有出现任何错误或警告。如您所见,我print()
在其中添加了一些函数,它们打印的内容如下:
布束腰外衣——来自print(item)
将布束腰外衣添加到背包中! - 来自其他印刷品
布裤——来自print(item)
在背包里添加布裤!——来自另一张印刷品
(该函数在游戏开始时被调用两次,针对库存中的每个物品调用一次)
Clone()
因此,如果代码能够运行并且项目名称正确,我不确定为什么这些项目没有被放入 StarterPack 中。
此脚本的一个问题是,它将物品添加到玩家的背包中,而不是添加到他们的 Starter Gear 中。每当玩家生成时,背包都会被清除,而 StarterGear 是持久的(请参阅背包文档)。
另一个问题是,您的代码似乎在 LocalScript 上执行,这通常仅适用于仅用于客户端的对象(请参阅LocalScript 文档)。您应该在 ServerScriptService 中的常规脚本上运行它。
以下脚本将在玩家加入游戏时向每个玩家的 StarterGear 添加一个名为“Tool”的工具:
(当然放入
Tool
StarterPack文件夹也可以达到类似的效果。)