function countOre()
_G.OreSpawned = 0
for i, s in pairs(OreSpawnTable) do
if s:FindFirstChild('Wood') or s:FindFirstChild('Stone') then
_G.OreSpawned += 1
end
end
print(_G.OreSpawned)
return _G.OreSpawned
end
В этой функции мы считаем сколько всего заспавнилось блоков
function OresSpawner()
while true do
local AmountOres = countOre()
if AmountOres < maxOres then
local RandomOre = Ores[math.random(1, #Ores)]
local OreClone = RandomOre:Clone()
local RandomSpawn
repeat
RandomSpawn = OreSpawnTable[math.random(1, #OreSpawnTable)]
until not RandomSpawn:FindFirstChild('Stone') or not RandomSpawn:FindFirstChild('Wood')
OreClone.Parent = RandomSpawn
OreClone.CFrame = RandomSpawn.CFrame + Vector3.new(0,3,0)
end
wait(2)
end
end
Это бесконечный цикл на спавн блоков. Где идёт проверка if AmountOres < maxOres then (Если количество заспавленых блоков < Максимального количества, то цикл не будет ничего спавнить)
Проблема заключается в том что 2 блока могут заспавниться в 1 месте
НО если поменять в коде то что спавнить нужно только Stone, получиться вот такой код:
function countOre()
_G.OreSpawned = 0
for i, s in pairs(OreSpawnTable) do
if s:FindFirstChild('Wood') or s:FindFirstChild('Stone') then
_G.OreSpawned += 1
end
end
print(_G.OreSpawned)
return _G.OreSpawned
end
function OresSpawner()
while true do
local AmountOres = countOre()
if AmountOres < maxOres then
local RandomOre = Ores[1]
local OreClone = RandomOre:Clone()
local RandomSpawn
repeat
RandomSpawn = OreSpawnTable[math.random(1, #OreSpawnTable)]
until not RandomSpawn:FindFirstChild('Stone')
OreClone.Parent = RandomSpawn
OreClone.CFrame = RandomSpawn.CFrame + Vector3.new(0,3,0)
end
wait(2)
end
end
То в итоге всё хорошо работает