Greetings! I’m currently working on a medieval coop game and I need some help with an specific function, the function itself runs flawlessly, the only problem is that it only affects the first children of the folder I provided, even though it’s an i,v in pairs function, it is properly enclosed and no errors pop up at the console, would be really happy if anyone can spot any problems with it.
local function StartCooking()
for i,v in pairs(posis:GetChildren()) do
wait(5)
v['1'].Transparency = 1
v['2'].Transparency = 0
v['1'].CanCollide = false
v['2'].CanCollide = true
wait(10)
v['2'].Transparency = 1
v['3'].Transparency = 0
v['2'].CanCollide = false
v['3'].CanCollide = true
wait(5)
v['3'].CanCollide = false
v['3'].Transparency = 1
local itemspawn = game.ServerStorage.Items
local targetitem = itemspawn['Bread']:Clone()
targetitem.Parent = workspace
targetitem.Anchored = false
targetitem.CanCollide = true
targetitem.CFrame = v.CFrame
for i,v in pairs(cookers:GetChildren()) do
levelcore.AddEXP(v.Name, 5)
v:Destroy()
end
bread_amount.Value = 0
end
end
Oh, I understood the problem now that I ran the script longer, it is affecting all children, just one at a time like it’s supposed to, thanks for trying to assist me though. Apparently, it’ll cook each bread individually instead of the whole group, I kind of liked it better this way but thanks for your help. Pretty sure :GetChildren() and :GetDescendants() are the same thing though.
Glad you solved the problem, but to clarify GetChildren just loops in the children of the part while GetDescendants gets the children of the children so you can get even deeper and get everything
Example: if i have a Part that has a model inside with 5 Parts, if i do GetChildren in the first part it will only get the model, if I do GetDescendants it gets the model and the 5 Parts inside of the model.
Good luck with your game
the ipairs generator is specially built for the purpose of iterating over arrays with all numerical indices (can’t index non-list items) , use that here for quicker results (by a few thousand microseconds)
for _, child in ipairs(posis:GetChildren()) do
...
end
use pairs when you need to either iterate through dictionaries or use the index later on
It might be because you’re yielding in the loop. It needs to finish all of your wait()'s before continuing with the next item in the for loop. You can use coroutine.wrap, spawn, or your favorite fastSpawn implementation for an easy fix.
for i,v in pairs(posis:GetChildren()) do
spawn(function()
-- you can wait here without delaying other children.
end)
end
A more ideal solution might be to go through each child during each step of the process in parallel instead of in series.
I meant a few thousand microseconds, not milliseconds;
talking micro-optimization , pairs wasn’t being used correctly for it’s purpose and thus would have taken significantly longer (significantly longer as in by about a hundred to a thousand microseconds).