Problem with elseif

I have a completely simple script without any errors but it doesn’t work properly

function graphicChange()
	local graphics = UserSettings():GetService("UserGameSettings").SavedQualityLevel
	if graphics == Enum.SavedQualitySetting.QualityLevel1 then
		print("qiality 1")
		game.Lighting.FogStart = 25
		game.Lighting.FogEnd = 35
	elseif graphics == Enum.SavedQualitySetting.QualityLevel2 or Enum.SavedQualitySetting.QualityLevel3 or Enum.SavedQualitySetting.QualityLevel4 then
		print("qiality 2/3/4")
		game.Lighting.FogStart = 400
		game.Lighting.FogEnd = 450
	elseif graphics == Enum.SavedQualitySetting.QualityLevel5 then
		print("qiality 5")
		game.Lighting.FogStart = 500
		game.Lighting.FogEnd = 800
	elseif graphics == Enum.SavedQualitySetting.QualityLevel6 or Enum.SavedQualitySetting.QualityLevel7 or Enum.SavedQualitySetting.QualityLevel8 or Enum.SavedQualitySetting.QualityLevel9 or Enum.SavedQualitySetting.QualityLevel10 then
		print("qiality 6/7/8/9/10")
		game.Lighting.FogStart = 500
		game.Lighting.FogEnd = 850
	end
end

UserSettings().GameSettings.Changed:connect(function()
	graphicChange()
end)

and here’s the output ingame while changing graphic level

The issue here is how you use the elseif command.

What you do is this

elseif graphics == Enum.SavedQualitySetting.QualityLevel6 or Enum.SavedQualitySetting.QualityLevel6 then
print(graphics)

That’s not how Luau works with elseif.
The way I remember how to use if statements is like this: I need a requirement and then the given condition. (Condition == requirement, or Condition > requirement, or Condition < requirement | That’s what you generally need.)

You will know what I mean if you analyze the code below.

local function ChangedQuality()

	local graphics = UserSettings():GetService("UserGameSettings").SavedQualityLevel
	
	if graphics == Enum.SavedQualitySetting.QualityLevel1 then
		print("qiality 1")
		game.Lighting.FogStart = 25
		game.Lighting.FogEnd = 35
	elseif graphics == Enum.SavedQualitySetting.QualityLevel2 or graphics == Enum.SavedQualitySetting.QualityLevel3 or graphics == Enum.SavedQualitySetting.QualityLevel4 then
		print("qiality 2/3/4")
		game.Lighting.FogStart = 400
		game.Lighting.FogEnd = 450
	elseif graphics == Enum.SavedQualitySetting.QualityLevel5 then
		print("qiality 5")
		game.Lighting.FogStart = 500
		game.Lighting.FogEnd = 800
	elseif graphics == Enum.SavedQualitySetting.QualityLevel6 or graphics == Enum.SavedQualitySetting.QualityLevel7 or graphics == Enum.SavedQualitySetting.QualityLevel8 or graphics == Enum.SavedQualitySetting.QualityLevel9 or graphics == Enum.SavedQualitySetting.QualityLevel10 then
		print("qiality 6/7/8/9/10")
		game.Lighting.FogStart = 500
		game.Lighting.FogEnd = 850
	end
end


UserSettings().GameSettings.Changed:Connect(ChangedQuality)

Hope this helped!

3 Likes
local qualitySettings = {Enum.SavedQualitySetting.QualityLevel1, Enum.SavedQualitySetting.QualityLevel2, Enum.SavedQualitySetting.QualityLevel3, Enum.SavedQualitySetting.QualityLevel4, Enum.SavedQualitySetting.QualityLevel5, Enum.SavedQualitySetting.QualityLevel6, Enum.SavedQualitySetting.QualityLevel7, Enum.SavedQualitySetting.QualityLevel8, Enum.SavedQualitySetting.QualityLevel9, Enum.SavedQualitySetting.QualityLevel10}

local lighting = game:GetService("Lighting")

function graphicChange()
	local graphics = UserSettings():GetService("UserGameSettings").SavedQualityLevel
	local i = table.find(qualitySettings, graphics)
	
	if i then
		if i == 1 then
			lighting.FogStart = 25
			lighting.FogEnd = 35
		elseif i >= 2 and i <= 4 then
			lighting.FogStart = 25
			lighting.FogEnd = 35
		elseif i == 5 then
			lighting.FogStart = 500
			lighting.FogEnd = 800
		elseif i >= 6 and i <= 10 then
			lighting.FogStart = 500
			lighting.FogEnd = 850
		end
	end
end

UserSettings().GameSettings.Changed:Connect(function()
	graphicChange()
end)

While this has been solved this would be a much better way of achieving the same task. Also avoid using the deprecated connection method, you should use “:Connect()” instead.

2 Likes