Still trying to fix Money Gui

Hi, in my previous topic i was trying to fix CashGui
I tried to import LocalScript into TextLabel like in tutorials
image
The LocalScript:


while wait(1) do
	script.Parent.Text = "Cash : "..game:GetService("Players").LocalPlayer.leaderstats.Cash.Value
end

Any idea why its not working?

2 Likes

Change it to:

--VARIABLES--
local plr = game.Players.LocalPlayer
local cash = plr:WaitForChild("leaderstats"):WaitForChild("Cash")


--EVENTS--
script.Parent.Text = "Cash : "..cash.Value

cash:GetPropertyChangedSignal("Value"):Connect(function()
    script.Parent.Text = "Cash : "..cash.Value
end)

Rather than endlessly updating it, you can either use .Changed or :GetPropertyChangedSignal("Value"). You would use either of those to recognize a change in its value, and it will only update the text when the cash’s value changes.

1 Like

I have problem, i need the CashGui show “Cash” Value from this Script:
image
Any ideas? xD

1 Like

Well, if you change the player’s cash value from that server script, the local script will automatically recognize the change from the :GetPropertyChangedSignal("Value")

If you want me to type something out for you, then you need to show me the script. Other than that, simply update the player’s cash value from the server script and that’s all you have to do.

1 Like

Well in an Tycoon Kit i used there is a script the (LinkedLeaderboard)

local Settings = require(script.Parent.Settings)
script.Parent = game.ServerScriptService
stands = {}
CTF_mode = false

function onHumanoidDied(humanoid, player)
	local stats = player:findFirstChild("leaderstats")
	if stats ~= nil then
		local deaths = stats:findFirstChild(Settings.LeaderboardSettings.DeathsName)
		if deaths then
			deaths.Value = deaths.Value + 1
		end
		-- do short dance to try and find the killer
		if Settings.LeaderboardSettings.KOs then
			local killer = getKillerOfHumanoidIfStillInGame(humanoid)
			handleKillCount(humanoid, player)
		end
	end
end

function onPlayerRespawn(property, player)
	-- need to connect to new humanoid
	
	if property == "Character" and player.Character ~= nil then
		local humanoid = player.Character.Humanoid
		local p = player
		local h = humanoid
		if Settings.LeaderboardSettings.WOs then
			humanoid.Died:connect(function() onHumanoidDied(h, p) end )
		end
	end
end

function getKillerOfHumanoidIfStillInGame(humanoid)
	-- returns the player object that killed this humanoid
	-- returns nil if the killer is no longer in the game

	-- check for kill tag on humanoid - may be more than one - todo: deal with this
	local tag = humanoid:findFirstChild("creator")

	-- find player with name on tag
	if tag ~= nil then
		
		local killer = tag.Value
		if killer.Parent ~= nil then -- killer still in game
			return killer
		end
	end

	return nil
end

function handleKillCount(humanoid, player)
	local killer = getKillerOfHumanoidIfStillInGame(humanoid)
	if killer ~= nil then
		local stats = killer:findFirstChild("leaderstats")
		if stats ~= nil then
			local kills = stats:findFirstChild(Settings.LeaderboardSettings.KillsNames)
			if kills then
				if killer ~= player then
					kills.Value = kills.Value + 1	
				else
					kills.Value = kills.Value - 1
				end
			else
				return
			end
		end
	end
end


-----------------------------------------------



function findAllFlagStands(root)
	local c = root:children()
	for i=1,#c do
		if (c[i].className == "Model" or c[i].className == "Part") then
			findAllFlagStands(c[i])
		end
		if (c[i].className == "FlagStand") then
			table.insert(stands, c[i])
		end
	end
end

function hookUpListeners()
	for i=1,#stands do
		stands[i].FlagCaptured:connect(onCaptureScored)
	end
end

function onPlayerEntered(newPlayer)

	if CTF_mode == true then

		local stats = Instance.new("IntValue")
		stats.Name = "leaderstats"

		local captures = Instance.new("IntValue")
		captures.Name = "Captures"
		captures.Value = 0


		captures.Parent = stats

		-- VERY UGLY HACK
		-- Will this leak threads?
		-- Is the problem even what I think it is (player arrived before character)?
		while true do
			if newPlayer.Character ~= nil then break end
			wait(5)
		end

		stats.Parent = newPlayer

	else

		local stats = Instance.new("IntValue")
		stats.Name = "leaderstats"
		local kills = false
		if Settings.LeaderboardSettings.KOs then
			kills = Instance.new("IntValue")
			kills.Name = Settings.LeaderboardSettings.KillsName
			kills.Value = 0
		end
		local deaths = false
		if Settings.LeaderboardSettings.WOs then
			deaths = Instance.new("IntValue")
			deaths.Name = Settings.LeaderboardSettings.DeathsName
			deaths.Value = 0
		end
		
		local cash = false
		if Settings.LeaderboardSettings.ShowCurrency then
			cash = Instance.new("StringValue")
			cash.Name = Settings.CurrencyName
			cash.Value = 0
		end
		
		local PlayerStats = game.ServerStorage.PlayerMoney:FindFirstChild(newPlayer.Name)
		if PlayerStats ~= nil then
			if cash then
				local Short = Settings.LeaderboardSettings.ShowShortCurrency
				PlayerStats.Changed:connect(function()
					if (Short) then
						cash.Value = Settings:ConvertShort(PlayerStats.Value)
					else
						cash.Value = Settings:ConvertComma(PlayerStats.Value)
					end
				end)
			end
		end
		if kills then
		kills.Parent = stats
		end
		if deaths then
		deaths.Parent = stats
		end
		if cash then
		cash.Parent = stats
		end

		-- VERY UGLY HACK
		-- Will this leak threads?
		-- Is the problem even what I think it is (player arrived before character)?
		while true do
			if newPlayer.Character ~= nil then break end
			wait(5)
		end

		local humanoid = newPlayer.Character.Humanoid

		humanoid.Died:connect(function() onHumanoidDied(humanoid, newPlayer) end )

		-- start to listen for new humanoid
		newPlayer.Changed:connect(function(property) onPlayerRespawn(property, newPlayer) end )


		stats.Parent = newPlayer

	end

end


function onCaptureScored(player)

		local ls = player:findFirstChild("leaderstats")
		if ls == nil then return end
		local caps = ls:findFirstChild("Captures")
		if caps == nil then return end
		caps.Value = caps.Value + 1

end


findAllFlagStands(game.Workspace)
hookUpListeners()
if (#stands > 0) then CTF_mode = true end
game.Players.ChildAdded:connect(onPlayerEntered)

and i want the CashGui show the cash from the script.
Sorry im bad at scripting… im at the basics at the moment. (Thats also why i use kit)

1 Like

Let me get this straight…

You’re wanting to update the cash gui text from the server script?

1 Like

The CashGui is working with the normal leaderstats in ServerScriptService.
I want to make it work with the Cash Value from the script above

--VARIABLES--
local plr = game.Players.LocalPlayer
local cash = plr:WaitForChild("leaderstats"):WaitForChild("Cash")


--EVENTS--
script.Parent.Text = "Cash : "..cash.Value

cash:GetPropertyChangedSignal("Value"):Connect(function()
    script.Parent.Text = "Cash : "..cash.Value
end)
1 Like

There’s nothing you need to do in the script above. All premade server scripts will recognize a change in value, so you don’t need to do anything in it.

1 Like


uhm :confused:

1 Like

Is there any errors in the output?

1 Like

No errors have anything with the cash. :confused:

1 Like

If you already know the basics of scripting, the only way you can get the cash value from server scripts to local scripts is by using remote functions. If you don’t know how to do this you should watch a couple tutorials on remote functions it’s not too complicated.

1 Like

image

1 Like

I meant the real basics like print, or local… xD

1 Like

It’s not the only way. Using a simple .Changed and :GetPropertyChanged signal works just as well, and does change the text (I’ve used this in many games)

1 Like

i think the script gets confused which leaderstats should it use, put everything in the folder leaderstat and remove the intvalue one

1 Like

Yaaay, it works! Thank you so much! Simple thing as remove the intvalue one, i was so stupid, thank you so so much! Have an awesome day! :smiley: :heart:

2 Likes