Guidance on table

Hello guys,
I am working on a team switcher system, but I have noticed it takes many lines to build this. Are there any other shorter methods I can use?

My team manager module script

local teams = {
	Afk = {},
	Non_afk = {},
}

function teams:JoinedTeam(player : Instance, Type : string)
	if player then
		if Type == "Afk" then
			local index = table.find(teams.Afk, player)
			local findAfk = table.find(teams.Non_afk, player)
			if not index then
				table.insert(teams.Afk, player)
				table.remove(teams.Non_afk, findAfk)
				print(player.Name.." joined afk")
			else
				warn(player.Name.. " has already joined team afk")
			end
		end
		if Type == "Non_afk" then
			local index = table.find(teams.Non_afk, player)
			local findAfk = table.find(teams.Afk, player)
			if not index then
				table.insert(teams.Non_afk, player)
				table.remove(teams.Afk, findAfk)
				print(player.Name.." joined Non_afk")
			else
				warn(player.Name.. " has already joined team Non_afk")
			end
		end
	end
end

return teams

1 Like

Actually If I have more of this, might get confused

1 Like

Lets End This Thread.

This is a Complete Organized Code That Will Work With Any Team You Add In!

local TeamsHandler = {
	Teams = {
		["OG"] = {},
		["AFK"] = {},
		["NonAfk"] = {},
		["WhatEver"] = {},
	}
}

function TeamsHandler:RemovePlayerFromTeams(Player)
	for _, TeamTable in pairs(self.Teams) do
		local index = table.find(TeamTable, Player)
		if index then table.remove(TeamTable, index) end
	end
end

function TeamsHandler:JoinTeam(player, teampassed)
	local TeamFound = self.Teams[teampassed]
	if TeamFound then
		table.insert(TeamFound, player)
	end
end

function TeamsHandler:OnJoinTeam(player, teanmpassed)
	self:RemovePlayerFromTeams(player)
	self:JoinTeam(player, teanmpassed)
end

return TeamsHandler
1 Like

First tip:

function teams:JoinedTeam(player: Player, Type : string) -- There's already built in instance for player if I'm correct.

Second tip:

Might be less readable but, in this code you could also use only 2 variables at all, just switch them. Example:

-- Afk
if not index then
-- rest of the function
-- Not afk
if not findAfk then
-- rest of the function
1 Like

This is only example of what you could do to short the code a little bit. Other might have better method.

1 Like

Or in case you wanted to add additional teams later on…

local teams = {
	Afk = {},
	Non_afk = {},
}

function teams:JoinedTeam(player : Instance, Type : string)
	if player and teams[Type] then
		for k, team in teams do
            local index = table.find(team, player)
            if index  and k == Type then
                warn(player.Name, "is already in team", Type)
                return teams
            elseif index then
                 table.remove(team, index)
            end
        end
        table.insert(teams[Type], player)
        print(player.Name, "joined", Type)
    else
          warn(Type, "is not a valid team!")
    end
    return teams
end
1 Like

Lets End This Thread.

This is a Complete Organized Code That Will Work With Any Team You Add In!

local TeamsHandler = {
	Teams = {
		["OG"] = {},
		["AFK"] = {},
		["NonAfk"] = {},
		["WhatEver"] = {},
	}
}

function TeamsHandler:RemovePlayerFromTeams(Player)
	for _, TeamTable in pairs(self.Teams) do
		local index = table.find(TeamTable, Player)
		if index then table.remove(TeamTable, index) end
	end
end

function TeamsHandler:JoinTeam(player, teampassed)
	local TeamFound = self.Teams[teampassed]
	if TeamFound then
		table.insert(TeamFound, player)
	end
end

function TeamsHandler:OnJoinTeam(player, teanmpassed)
	self:RemovePlayerFromTeams(player)
	self:JoinTeam(player, teanmpassed)
end

return TeamsHandler