我有一个本地脚本,当我调用其中的函数并提供项目名称作为参数时,应该将项目添加到玩家的 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 中。
此脚本的一个问题是它将物品添加到玩家的背包而不是他们的入门装备中。每当玩家生成时,背包就会被清除,而 StarterGear 会持续存在(请参阅背包文档)。
另一个问题是您的代码似乎在 LocalScript 上执行,这通常仅适用于仅使用客户端对象(请参阅 LocalScript 文档)。您应该在 ServerScriptService 中的常规脚本上运行它。
以下脚本将在每个玩家加入游戏时向他们的 StarterGear 添加一个名为“Tool”的工具:
local replicatedStorage = game:GetService("ReplicatedStorage")
local assets = replicatedStorage:WaitForChild("Assets")
local function addItem(player, itemName)
local item = assets:FindFirstChild(itemName)
if not item then return end
item:Clone().Parent = player:WaitForChild("StarterGear")
end
game:GetService("Players").PlayerAdded:Connect(function(player) addItem(player, "Tool") end)
(当然,只要将
Tool
放入StarterPack文件夹中也能达到类似的效果。)