Hello reader, I am creating a game where players must climb a slope and reach the top of what I describe as a mountain while having blocks chucked at them. My script has an issue in it that I cannot seem to solve, I have been working for a few hours now trying to fix it but I just can't get my head around what I have done wrong.
--generates ice blocks
local function newice()
local ice = Instance.new("Part", game.Workspace)
local icex = math.random(5,100)
local icey = math.random(icex/6, icex/5)
local icez = math.random(icex/6, icex/1.3)
local icedensity = 2.403
local iceelasticity = 0.1
local iceelasticityweight = 1
local icefriction = 0.25
local icefrictionweight = 1
ice.Name = "Ice"
ice.Size = Vector3.new(icex, icey, icez)
ice.Material = "Glass"
ice.Transparency = 0.1
ice.BrickColor = BrickColor.new("Cadet blue")
ice.CustomPhysicalProperties = PhysicalProperties.new(icedensity,iceelasticity,iceelasticityweight,icefriction,icefrictionweight)
ice.Position = Vector3.new(math.random(-249.5+icex, 249-icex), 6537+icey, 13356+icey)
ice.Orientation = Vector3.new(127.5)
local clonedscript = script.Delete:Clone()
clonedscript.Parent = ice
clonedscript.Disabled = false
end
--generates boulders
local function boulderclone()
local bc = game.ReplicatedStorage.Objects.Boulder:Clone()
bc.Parent = game.Workspace
bc:SetPrimaryPartCFrame(CFrame.new(math.random(-238, 238), 6539.443, 13362.494))
local clonedscript = script.Delete:Clone()
clonedscript.Parent = bc
clonedscript.Disabled = false
end
--generates logs
local function newlog()
local log = Instance.new("Part", game.Workspace)
local logx = math.random(10,50)
local logyz = math.random(logx/15, logx/10)
log.Name = "Log"
log.Shape = Enum.PartType.Cylinder
log.BrickColor = BrickColor.new("Brown")
log.Material = "Wood"
log.Size = Vector3.new(logx,logyz,logyz)
log.Position = Vector3.new(math.random(-248+logx, 248-logx), 6560, 13388)
local clonedscript = script.Delete:Clone()
clonedscript.Parent = log
clonedscript.Disabled = false
end
--generates snow blocks
local function newsnow()
local snow = Instance.new("Part", game.Workspace)
local snowx = math.random(5,25)
local snowy = math.random(snowx/10, snowx/8)
local snowz = math.random(snowx*2, snowx*5)
snow.Name = "Snow"
snow.Color = Color3.fromRGB(182, 181, 184)
snow.Material = "Sand"
snow.Size = Vector3.new(snowx,snowy,snowz)
snow.Position = Vector3.new(math.random(-248+snowx, 248-snowx), 6537+snowy, 13356+snowy)
snow.Orientation = Vector3.new(127.5)
snow.CustomPhysicalProperties = PhysicalProperties.new(1.602,0.05,1,0.5,5)
local clonedscript = script.Delete:Clone()
clonedscript.Parent = snow
clonedscript.Disabled = false
end
--setting starting cooldown
local initialcooldown = {2,5}
--changes cooldown
local function cooldown()
local change = math.random(1,100) --sets chance
if change <80 then --80% chance then values will go down
if initialcooldown[2] - initialcooldown[1] <=2 then --making sure value I doesnt go over value II
initialcooldown[1] = initialcooldown[1] - math.random(1,2)
elseif initialcooldown[1] <2 then --making sure value I doesnt go under 0
initialcooldown[2] = initialcooldown[2] - math.random(1,2)
else --if all is good then both values change
initialcooldown[1] = initialcooldown[1] - math.random(1,2)
initialcooldown[2] = initialcooldown[2] - math.random(1,2)
end
--20% chance values go up
elseif initialcooldown[2] - initialcooldown[1] <=2 then --making sure value I doesnt go over value II
initialcooldown[2] = initialcooldown[2] + math.random(1,2)
else --if all is good then both values change
initialcooldown[1] = initialcooldown[1] + math.random(1,2)
initialcooldown[2] = initialcooldown[2] + math.random(1,2)
end
end
local quantity = script.quantity.Value --referancing the value "quantity" in the scripts children
--for avalanches
local function quantitycontrol()
if quantity >=1 then --checks quantity is greater than 1
local decider = math.random(1,100) --determines what will spawn
print("run!") --TEST
if decider >30 then --70% chance of spawning snow
newsnow()
quantity = quantity-1 --removes 1 from quantity
elseif decider <30 and decider >10 then --20% chance of spawning ice
newice()
quantity = quantity-1
elseif decider <10 and decider >6 then --4% chance of spawning a log
newlog()
quantity = quantity-1
elseif decider <6 and decider >2 then --4% chance of spawning a boulder
boulderclone()
quantity = quantity-1
else --2% chance of adding more to quantity
quantity = quantity + math.random(20,40)
end
wait(0.01) --cooldown per item spawned
end
end
local selection = {newice, boulderclone, newlog, newsnow} --the selection of all the things that can spawn
while true do
if quantity >=1 then --checking quantity
quantitycontrol() --runs avalanche
else
selected = selection[math.random(1,#selection)] --chooses item from selection
selected() --adds () to the item chosen from selection
cooldown() --changes cooldown
print(initialcooldown) --TEST
wait(initialcooldown[math.random(1,2)]) --waits through the cooldown
if initialcooldown[2] <3 then --checks cooldown position 2
initialcooldown[1] = 15 --resets cooldown to standard
initialcooldown[2] = 25 --resets cooldown to standard
quantity = quantity + math.random(50,100) --adds to avalanche
end
end
end
I have marked everything out since it is hard to read it all without the notes. I think I have identified that the problem lies in the quantitycontrol() function. It will not stop creating parts once it has started, even when the quantity value is at 0.
Hope one of you can identify the problem for me. Sorry for all the reading you may have to do.
