ModuleScript doesnt detect Folder Children Count as 5

I’m trying to make an equip system, but if I were to have the max of 5 towers equipped and equip another tower, it would replace the 5th slot with the tower, but instead, it attempts to create a new slot.

(specifically on module:equipTower function)
ModuleScript:

local module = {}
local serverscriptservice = game:GetService('ServerScriptService')
local profileservice = require(serverscriptservice.Services.ProfileService)
local players = game:GetService('Players')
local serverstorage = game:GetService('ReplicatedStorage')
local goodsignal = require(serverstorage.Services.GoodSignal)
local cachedProfiles = {}
local key = '!34w@!'
local dataformat = {
	[1] = 'Warrior',
	[2] = 'Slingshooter',
	[3] = nil,
	[4] = nil,
	[5] = nil
}

local equipDatastore = profileservice.GetProfileStore('equipdatastore',dataformat)

local function loadData(player)
	local profile = cachedProfiles[player]

	if not player:FindFirstChild("towersEquipped") then
		folder = Instance.new('Folder')
		folder.Name = 'towersEquipped'
		folder.Parent = player
	else
		task.spawn(function()
			for _, v in ipairs(player:WaitForChild("towersEquipped"):GetChildren()) do
				v:Destroy()
			end
		end)
	end

	for i, v in ipairs(profile.Data) do
		if v ~= nil and v ~= '' then
			local foo = v..'Lvl0'
			local val = Instance.new('ObjectValue')
			val.Value = serverstorage.Units[v]['LEVEL0'][foo]
			val.Parent = folder
			val.Name = i
			val:SetAttribute('order',i)
			val:SetAttribute('tower',v)
		elseif v == '' then
			local r = table.find(profile.Data,'')
			table.remove(profile.Data,r)
		end
	end
end

function module:startModule(player)
	local profile = equipDatastore:LoadProfileAsync(player.UserId..key,'ForceLoad')

	if profile ~= nil then
		profile:ListenToRelease(function()
			cachedProfiles[player] = nil
			player:Kick('Your data has been loaded remotely, Please rejoin.')
		end)

		if players:FindFirstChild(player.Name) then
			cachedProfiles[player] = profile
			loadData(player)
		end
	else
		player:Kick('Unable to load equip data, Please rejoin.')
	end
end

local function towerAlreadyEquipped(player, tower)
	local profile = cachedProfiles[player]
	local equippedTowers = player:FindFirstChild('towersEquipped')
	for i, v in ipairs(profile.Data) do
		if v == tower then
			return true
		end
	end
	return false
end

function module:equipTower(player,tower)
	local profile = cachedProfiles[player]
	local equippedTowers = player:FindFirstChild('towersEquipped') 
	
	print(#equippedTowers:GetChildren())
	if profile ~= nil and #equippedTowers:GetChildren() ~= 5 and tower ~= nil or tower ~= '' then
		if not towerAlreadyEquipped(player, tower)  then
			local place = #equippedTowers:GetChildren() + 1
			table.insert(profile.Data,tower)
			loadData(player)
		elseif profile == nil then
			return false 
		elseif tower == nil or tower == '' then
			return false
		end
	elseif profile ~= nil and #equippedTowers:GetChildren() <= 5 and tower ~= nil or tower ~= '' then
		--profile.Data[5] = tower
		table.insert(profile.Data,5,tower)
		loadData(player)
	end
end

function module:unequipTower(player,tower)
	local profile = cachedProfiles[player]
	local equippedTowers = player:FindFirstChild('towersEquipped')

	if profile ~= nil and tower then
		for i, v in ipairs(equippedTowers:GetChildren()) do
			if v:GetAttribute('tower') == tower then
				local test = table.find(profile.Data,tower)
				table.remove(profile.Data,test)
			end
			v:Destroy()
		end

		loadData(player)
	end
end

players.PlayerRemoving:Connect(function(player)
	local profile = cachedProfiles[player]
	if profile ~= nil then
		profile:Release()
	end
end)

game:BindToClose(function()
	for _, v in ipairs(players:GetChildren()) do
		local profile = cachedProfiles[players]
		if v:IsA('Player') and profile ~= nil then
			profile:Release()
		end
	end
end)


return module

Try changing

if profile ~= nil and #equippedTowers:GetChildren() ~= 5 and tower ~= nil or tower ~= '' then

To

if profile ~= nil and #equippedTowers:GetChildren() <= 5 and tower ~= nil or tower ~= '' then
if profile ~= nil and #equippedTowers:GetChildren() ~= 5 and tower ~= nil or tower ~= '' then

try

if profile ~= nil and #equippedTowers:GetChildren() ~= 5 and (tower ~= nil or tower ~= '') then

I think the or part of the if query is pretty much cancelling out the rest of it.

tower ~= nil or tower ~= ''

What’s the purpose of this, an empty string value is considered truthy anyway, the following would suffice.

if profile and tower and #equippedTowers:GetChildren() < 6 then