Hi, everyone. So, I’m gonna get to the point.
I’m making a sports game, and I need to generate rigs. I’ve been making a “rig table”, as so:
1/2
2/2

After generating these tables, I have a function which generates the rigs by looping through the tables:
Is there any more efficient way to do this? Here is my code block to generate the player table:
function generateTeam()
local team = {}
local teamToIterate = {}
local availablePositions = {"QB", "RB", "WR", "SS", "TE", "OL", "DL", "CB", "FS", "MLB", "ROLB", "LOLB"}
local available = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2}
for i = 0, 25, 1 do
local basePlrModels = baseModels:GetChildren()
local hairBases = baseHairs:GetChildren()
local baseNum = utilities.random(1, #basePlrModels)
local SkinBaseModel = baseModels:FindFirstChild("base_"..baseNum)
if not SkinBaseModel then return end
local hairBaseNum = math.random(1, #hairBases)
local charHair = baseHairs:FindFirstChild("hair_"..hairBaseNum)
if not charHair then return end
local player = utilities.createTable()
player.cleetColor = CleetColors[utilities.random(1, #CleetColors)]
player.baseModel = SkinBaseModel
player.hair = charHair
local randomPosNum = utilities.random(1, #availablePositions)
player.position = availablePositions[randomPosNum]
available[randomPosNum] -= 1
local first_name_Num = utilities.random(1, #firstNames)
local firstName = firstNames[first_name_Num]
local lastName_Num = utilities.random(1, #lastNames)
local lastName = lastNames[lastName_Num]
player.name = firstName.." "..lastName
if available[randomPosNum] == 0 then
table.remove(availablePositions, randomPosNum)
end
player.overalls = {}
local len
for i, v in pairs(statsNeeded[player.position]) do
if v == "Injury" then
player.overalls[v] = utilities.random(85, 99)
else
local min
local max
if minStat[player.position] and minStat[player.position][v] then min = minStat[player.position][v] else min = 65 end
if maxStat[player.position] and maxStat[player.position][v] then max = maxStat[player.position][v] else max = 99 end
player.overalls[v] = utilities.random(min, max)
end
len = i
end
player.totalOverall = math.round(utilities.calculateTable(player.overalls)/len)
player.importance = importance[player.position]
player.morale = utilities.random(50, 100)
player.contract = {}
player.contract.length = utilities.random(1, 5)
player.contract.salary = utilities.random(10000000 + (10000000 * player.totalOverall/100) + (10000000 * player.importance/100) - 1000000 * player.morale/10 , 30000000 + (10000000 * player.totalOverall/100) + (10000000 * player.importance/100) - 1000000 * player.morale/10)
player.contract.total = player.contract.length * player.contract.salary
table.insert(teamToIterate, player)
end
team.offense = {}
team.defense = {}
for i, v in pairs(teamToIterate) do
if table.find(offensive, v.position) then
table.insert(team.offense, v)
elseif table.find(defensive, v.position) then
table.insert(team.defense, v)
end
end
warn("A team has just been generated!")
return team
end
Here are the folders for bases, hairs, and such, they are structured as followed
Anything is appreciated, thank you!