Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

Problem when using a Global variable?

Hello, so I have a script in the workspace that contains this:

_G.codes = {
"TEST1",
"TEST2",
"TEST3"
}

And a LocalScript in the StarterGui that contains this:


local target = script.Parent.code

function suc()
	 script.Parent:TweenPosition(
        UDim2.new(0, -450,0.098, 0),
        "Out",
        "Elastic",
        2.1,
        true,
        function()
                script.Parent.Visible = false
	    end)
		target.Text = "<enter code here>"
end

function unsuc()
	target.Text = "Code Invalid!"
	wait(3)
	 script.Parent:TweenPosition(
        UDim2.new(0, -450,0.098, 0),
        "Out",
        "Elastic",
        2.1,
        true,
        function()
                script.Parent.Visible = false
	    end)
		target.Text = "<enter code here>"
end

script.Parent.submit.MouseButton1Down:Connect(function()
	while _G.codes == nil do wait() end 
	--CODE TWO (Works)
if target.Text == _G.codes[2] then
	target.Text = "Code Redeemed!"
	print("Test")
	local p = game.Players.LocalPlayer
	local b = game:GetService("BadgeService")
			b:AwardBadge(p.userId, 918606619)
	wait(3)
	suc()
else
	unsuc()
end

	--CODE ONE (Doesn't Work)
	
if target.Text == _G.codes[1] then
	target.Text = "Code Redeemed!"
	local player = game.Players.LocalPlayer
player.leaderstats.XP.Value = player.leaderstats.XP.Value + 100
	wait(3)
	suc()
else
	unsuc()
end

	--CODE THREE (Doesn't Work)
	
	if target.Text == _G.codes[4] then
	target.Text = "Code Redeemed!"
print("test")
	wait(3)
	suc()
else
	unsuc()
end
end)

And for some reason when I enter in the correct code and hit submit, it returns the unsuc() function. Also, Code 2 works fine and the others dont. Help please!

1 answer

✓ Accepted answer

I don't see a use of global variables in this. You can have a module script that holds the codes using an array, and use a global script to require the module.

Inside the localscript, make a function that gets called when submit is clicked. Then invoke a remotefunction giving the input from the textbox as an argument.

Inside the global script, have a function that handles the invoke and make it call a function inside the module script to get the codes, if the input is a valid code (Check via for loop) then return true.

Lets say the remotefunction is located inside ReplicatedStorage

Since examples are worth a thousand words, here you go

Global Script

local module = require(script.Module)

game.ReplicatedStorage.RemoteFunction.OnServerInvoke = function(input)
return module:verifyCode(input)
end

Module Script Inside global script

local module = {}

local codes = {
"Test", "Test1", "Test2"
}

function module.verifyCode(input)
for _,v in pairs(codes) do
	if v == input then
		return true
 	end 
end
-- If all fails
return false
end

return module

Local Script

script.Parent.submit.MouseButton1Click:connect(function()
if game.ReplicatedStorage.RemoteFunction:InvokeServer(script.Parent.code.Text) == true then
	-- CODE
end
end

This discussion is preserved as it was. New answers, comments, and votes are closed.