无法分配 属性 值。预期字符串,得到实例
Unable to assign property Value. string expected, got Instance
值有问题。它说 'Unable to assign property Value. string expected, got Instance'。有人知道怎么解决吗?
local DataStoreService = game:GetService("DataStoreService")
local RankStore = DataStoreService:GetDataStore("RankStore")
local players = game:GetService("Players")
players.PlayerAdded:Connect(function(Player)
local UserId = Player.UserId
local Rank = RankStore:GetAsync(UserId)
if Rank == nil then
Rank = "-"
RankStore:SetAsync(UserId, Rank)
end
local leaderstats = Instance.new("Folder", Player)
leaderstats.Name = "leaderstats"
local Rank = Instance.new("StringValue", leaderstats)
Rank.Name = "Rank"
Rank.Value = Rank
Rank.Changed:Connect(function(NewRank)
RankStore:SetAsync(UserId, NewRank)
end)
end)
让我们逐步了解正在发生的事情。第一
local Rank = RankStore:GetAsync(UserId)
您将 Rank
定义为数据存储查找的结果。然后
if Rank == nil then
Rank = "-"
RankStore:SetAsync(UserId, Rank)
end
如果您没有得到任何回复,可能是因为它是新玩家,您可以将 Rank
设置为字符串 "-"
。此时,Rank
的值可能是 "-"
或之前保存在那里的任何值。
local Rank = Instance.new("StringValue", leaderstats)
Rank.Name = "Rank"
您用新的定义覆盖了以前的值;您创建一个 StringValue 实例并将其分配给 Rank
。此时,当您请求变量 Rank
时,它指向 StringValue.
Rank.Value = Rank
在这里,您的代码抛出了错误。您正在尝试将 StringValue 的值 属性(应该是一个字符串)分配给 StringValue 本身的实例。
要解决此问题,您需要更加小心地命名变量,并避免命名冲突。最简单的解决方案是将 StringValue 重命名为其他名称:
local RankStatsValue = Instance.new("StringValue", leaderstats)
RankStatsValue.Name = "Rank"
RankStatsValue.Value = Rank
RankStatsValue.Changed:Connect( function(NewRank)
值有问题。它说 'Unable to assign property Value. string expected, got Instance'。有人知道怎么解决吗?
local DataStoreService = game:GetService("DataStoreService")
local RankStore = DataStoreService:GetDataStore("RankStore")
local players = game:GetService("Players")
players.PlayerAdded:Connect(function(Player)
local UserId = Player.UserId
local Rank = RankStore:GetAsync(UserId)
if Rank == nil then
Rank = "-"
RankStore:SetAsync(UserId, Rank)
end
local leaderstats = Instance.new("Folder", Player)
leaderstats.Name = "leaderstats"
local Rank = Instance.new("StringValue", leaderstats)
Rank.Name = "Rank"
Rank.Value = Rank
Rank.Changed:Connect(function(NewRank)
RankStore:SetAsync(UserId, NewRank)
end)
end)
让我们逐步了解正在发生的事情。第一
local Rank = RankStore:GetAsync(UserId)
您将 Rank
定义为数据存储查找的结果。然后
if Rank == nil then
Rank = "-"
RankStore:SetAsync(UserId, Rank)
end
如果您没有得到任何回复,可能是因为它是新玩家,您可以将 Rank
设置为字符串 "-"
。此时,Rank
的值可能是 "-"
或之前保存在那里的任何值。
local Rank = Instance.new("StringValue", leaderstats)
Rank.Name = "Rank"
您用新的定义覆盖了以前的值;您创建一个 StringValue 实例并将其分配给 Rank
。此时,当您请求变量 Rank
时,它指向 StringValue.
Rank.Value = Rank
在这里,您的代码抛出了错误。您正在尝试将 StringValue 的值 属性(应该是一个字符串)分配给 StringValue 本身的实例。
要解决此问题,您需要更加小心地命名变量,并避免命名冲突。最简单的解决方案是将 StringValue 重命名为其他名称:
local RankStatsValue = Instance.new("StringValue", leaderstats)
RankStatsValue.Name = "Rank"
RankStatsValue.Value = Rank
RankStatsValue.Changed:Connect( function(NewRank)