Hello, I have a problem, kindly help me. (Sorry if there is any grammar problem)
What do you want to achieve? I want to Iterate a table to a TextLabel, (error line will be highlighted with --> <-- ) and for the rest of the script to carry on.
What is the issue? I am looking to iterate the TextLabel with '/', '-', '\\', '|', but not as I expected, I got an error Unable to assign property Value. string expected, got nil as I did not sign any nil value to the TextLabel!
What solutions have you tried so far? Devforum, script-testing, and my own prior scripting knowledge.
Here’s my script (LocalScript), I put it in ReplicatedFirst and the descendants of the script has a Gui instance named Loader with the child descendant TextLabel named Sprite.
LocalScript
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local ContentProvider = game:GetService("ContentProvider")
ReplicatedFirst:RemoveDefaultLoadingScreen()
local Assets = game:GetDescendants()
local Player = game.Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")
local Common = script.Parent.Common
local P = require(Common.Logger)
P.Log("Startup", "Loading assets & scripts, hold on user!")
repeat task.wait() until game:IsLoaded()
local Loader = script.Loader:Clone()
Loader.Parent = PlayerGui
Sp = false
for i = 1, #Assets do
local asset = Assets[i]
local Sprites = {
["/"] = "-",
["-"] = "\\",
["\\"] = "|"
}
ContentProvider:PreloadAsync({
asset
})
if Sp == true then
--> Loader.Sprite.Text = Sprites[Loader.Sprite.Text] <--
elseif Sp == false then
Loader.Sprite.Text = '/'
Sp = true
end
Loader.Stat2.Text = '::' .. asset.Name
end
P.Log("Startup", "Scripts and Assets loaded!")
Loader:Destroy()
This is how I test the error:
ErrorTest
print(Sprites[Loader.Sprite.Text]) -- Not a nil, but got an error, or maybe im stupid.
The only issue I get in the output is Unable to assign property Value. string expected, got nil as I didn’t assign a nil value to Loader.Sprite.Text, and kind of confused what to do.
local Assets = game:GetDescendants()
local Player = game.Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")
local Common = script.Parent.Common
local P = require(Common.Logger)
for _, asset in pairs(Assets) do
local Sprites = {
["/"] = "-",
["-"] = "\\",
["\\"] = "|"
}
ContentProvider:PreloadAsync({
asset
})
if Sp == true then
Loader.Sprite.Text = Sprites[Loader.Sprite.Text] -- This bad boy
elseif Sp == false then
Loader.Sprite.Text = '/'
Sp = true
end
Loader.Stat2.Text = '::' .. asset.Name
end
for _,asset in pairs(Assets) do
ContentProvider:PreloadAsync({
asset
})
Loader.Sprite.Text = "/"
if Sp == true then
Loader.Sprite.Text = Sprites[Loader.Sprite.Text]
elseif Sp == false then
Loader.Sprite.Text = "/"
Sp = true
end
Loader.Stat2.Text = '::' .. asset.Name
end
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ReplicatedFirst = game:GetService("ReplicatedFirst")
local ContentProvider = game:GetService("ContentProvider")
local Common = script.Parent.Common
local P = require(Common.Logger)
ReplicatedFirst:RemoveDefaultLoadingScreen()
P.Log("Startup", "Loading assets & scripts, hold on user!")
repeat task.wait() until game:IsLoaded()
local Assets = game:GetDescendants()
local Player = game.Players.LocalPlayer
local PlayerGui = Player:WaitForChild("PlayerGui")
local Sprites = {
["/"] = "-",
["-"] = "\\",
["\\"] = "|"
}
local Loader = script.Loader:Clone()
local Sp = false
local passed = 0
Loader.Parent = PlayerGui
for _,asset in pairs(Assets) do
ContentProvider:PreloadAsync({
asset
})
Loader.Sprite.Text = "/"
if Sp == true then
Loader.Sprite.Text = Sprites[Loader.Sprite.Text]
elseif Sp == false then
Loader.Sprite.Text = "/"
Sp = true
end
Loader.Stat2.Text = '::' .. asset.Name
passed += 1
end
repeat wait() until passed==#Assets
Loader:Destroy()
P.Log("Startup", "Scripts and Assets loaded!")