How do I set a variable in an If statement?

Hi other developers,
I’ve been running into the problem where I can’t set a variable inside an if statement.

code below;

	if NormEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Normal.NormEnemy:Clone()
	end
	if FastEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Fast.FastEnemy:Clone()
	end
	if StrongEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Strong.StrongEnemy:Clone()
	end

help would be greatly apprciated!

1 Like

Assuming I understand you correctly, you would pre-create the variable before the if-statement.

    local NewNormalEnemy = nil -- Variable is pre-defined and can be set later
    if NormEnemyNumberSize > 0 then
		NewNormalEnemy = EnemyStatsModule.Normal.NormEnemy:Clone()
	end
	if FastEnemyNumberSize > 0 then
		NewNormalEnemy = EnemyStatsModule.Fast.FastEnemy:Clone()
	end
	if StrongEnemyNumberSize > 0 then
		NewNormalEnemy = EnemyStatsModule.Strong.StrongEnemy:Clone()
	end
1 Like

I have already tried that, it comes back with: Players.Blumaimn.PlayerGui.Waves.EnemyLocalScript:34: attempt to compare number < nil

Ill give u the whole script maybe that will help:


local WaveScreenGUI = script.Parent
local TextLabel = WaveScreenGUI:WaitForChild("TextLabel")
local WaveNumber = 1
local ReplicatedStorage = game:GetService("ReplicatedStorage")

TextLabel.Text = "Wave " .. WaveNumber
task.wait(2)

local EnemyFolder = ReplicatedStorage:WaitForChild("Enemy")
local EnemyStatsModule = require(EnemyFolder:WaitForChild("EnemyStats"))

local TPLocation = game.Workspace:WaitForChild("SpawnPart")
local TweenService = game:GetService("TweenService")

local MovementTargetsFolder = game.Workspace:WaitForChild("Movement")

local TargetFirst = MovementTargetsFolder:WaitForChild("Target 1")
local TargetSecond = MovementTargetsFolder:WaitForChild("Target 2")
local TargetThird = MovementTargetsFolder:WaitForChild("Target 3")
local TargetFourth = MovementTargetsFolder:WaitForChild("Target 4")
local NewNormalEnemy = nil

local EnemyFolder = Instance.new("Folder")
EnemyFolder.Name = "Enemies"
EnemyFolder.Parent = game
	.Workspace
local EnemyID = 0
local NewNormalEnemy = nil
local function SpawnEnemy(EnemyID, FastEnemyNumberSize, NormEnemyNumberSize, StrongEnemyNumberSize)
	EnemyID += 1

	
	if NormEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Normal.NormEnemy:Clone()
	end
	if FastEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Fast.FastEnemy:Clone()
	end
	if StrongEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Strong.StrongEnemy:Clone()
	end
	
	print(NewNormalEnemy)
		
	NewNormalEnemy.Parent = EnemyFolder
	NewNormalEnemy.CFrame = TPLocation.CFrame + Vector3.new(0, 0.5, 0)
	NewNormalEnemy.Name = tostring(EnemyID)

	print(TargetFirst.Position)
	print(NewNormalEnemy)

	local NormEnemyInfo = TweenInfo.new(EnemyStatsModule.Normal.Speed, Enum.EasingStyle.Linear, Enum.EasingDirection.Out, 0, false)

	local MoveEnemy = TweenService:Create(NewNormalEnemy, NormEnemyInfo, {Position = TargetFirst.Position})
	local MoveEnemy2 = TweenService:Create(NewNormalEnemy, NormEnemyInfo, {Position = TargetSecond.Position})
	local MoveEnemy3 = TweenService:Create(NewNormalEnemy, NormEnemyInfo, {Position = TargetThird.Position})
	local MoveEnemy4 = TweenService:Create(NewNormalEnemy, NormEnemyInfo, {Position = TargetFourth.Position})

	MoveEnemy:Play()
	MoveEnemy.Completed:Wait()
	MoveEnemy:Cancel()

	MoveEnemy2:Play()
	MoveEnemy2.Completed:Wait()
	MoveEnemy2:Cancel()

	MoveEnemy3:Play()
	MoveEnemy3.Completed:Wait()
	MoveEnemy3:Cancel()

	MoveEnemy4:Play()
	MoveEnemy4.Completed:Wait()
	MoveEnemy4:Cancel()
	
	
end

local function Waves(FastEnemyNumberSize, NormEnemyNumberSize, StrongEnemyNumberSize)
	
	while true do
		TextLabel.Text = "Wave " .. WaveNumber
		
		if WaveNumber == 1 then
			NormEnemyNumberSize = 10
			
			for i=1, tonumber(NormEnemyNumberSize) do
				spawn(function()
					SpawnEnemy(0)
				end)
				task.wait(2)
			end
			WaveNumber += 1
			
		elseif WaveNumber == 2 then
			NormEnemyNumberSize = 12
			FastEnemyNumberSize = 3
			for i=1, tonumber(NormEnemyNumberSize, FastEnemyNumberSize) do
				spawn(function()
					SpawnEnemy(0)
				end)
			end
		end
		task.wait()
	end

end

Waves()


1 Like

The parameters to the SpawnEnemy function are never sent (you only send 1 argument)

1 Like

oops mb, but it still comes back with attempt to index nil with ‘Parent’

1 Like

Make sure the if checks look like this:

if NormEnemyNumberSize > 0 then
		NewNormalEnemy = EnemyStatsModule.Normal.NormEnemy:Clone()
	end
	if FastEnemyNumberSize > 0 then
		NewNormalEnemy = EnemyStatsModule.Fast.FastEnemy:Clone()
	end
	if StrongEnemyNumberSize > 0 then
		NewNormalEnemy = EnemyStatsModule.Strong.StrongEnemy:Clone()
	end

and not this:

if NormEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Normal.NormEnemy:Clone()
	end
	if FastEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Fast.FastEnemy:Clone()
	end
	if StrongEnemyNumberSize > 0 then
		local NewNormalEnemy = EnemyStatsModule.Strong.StrongEnemy:Clone()
	end
2 Likes

Aint no way

1 Like

One slightly easier way to do this is to do it in one line of code. Like this:

newNormalEnemy = (StrongEnemyNumberSize > 0) and (EnemyStatsModule.Strong.StrongEnemy:Clone()) or ((FastEnemyNumberSize > 0) and (EnemyStatsModule.Fast.FastEnemy:Clone()) or ((NormEnemyNumberSize > 0) and (EnemyStatsModule.Normal.NormEnemy:Clone()) or (newNormalEnemy)))

I don’t really know how to explain how this works. But it just does. It’s a special type of if statement that you put inside of a variable, but I don’t remember what it is called.

Edit: I think I remember now. I think it’s called a “ternary operator” or a “ternary if statement”. I might be wrong though.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.