How to reduce exponential lag from script use?
This script here;
001 | local RockScript = require(game.ServerScriptService.RockScript) |
002 | print (RockScript.allrocktable) |
005 | local startpos = rock.Position |
006 | table.insert(RockScript.allrocktable, rock.Position) |
016 | toolactive = game.ServerStorage.toolactive.Event:Connect( function (player, mousetarget) |
017 | if rock.Transparency ~ = 1 then |
021 | if mousetarget = = rock then |
022 | rock.Transparency = 1 |
032 | propchange = rock:GetPropertyChangedSignal( "Transparency" ):Connect( function () |
033 | if rock.Transparency = = 1 then |
034 | rock.CanCollide = false |
035 | local right_pos = Vector 3. new(startpos.X-rock.Size.X,startpos.Y,startpos.Z) |
038 | if table.find(RockScript.allrocktable, right_pos) then |
039 | print ( "pos already used" ) |
044 | if no_right_rock = = 0 then |
045 | local coal = math.random( 1 , 2 ) |
046 | local right_rock = rock:Clone() |
048 | table.insert(RockScript.allrocktable, right_rock.Position) |
051 | right_rock.CanCollide = true |
052 | right_rock.Position = right_pos |
057 | right_rock.Name = "rightrock" |
058 | right_rock.Transparency = NumberSequence.new( 0 ) |
059 | right_rock.Parent = workspace.rocks |
061 | print (RockScript.allrocktable) |
068 | local left_pos = Vector 3. new(startpos.X+rock.Size.X,startpos.Y,startpos.Z) |
070 | if table.find(RockScript.allrocktable, left_pos) then |
072 | print ( "pos already used" ) |
074 | if no_left_rock = = 0 then |
075 | local left_rock = rock:Clone() |
076 | table.insert(RockScript.allrocktable, left_rock.Position) |
077 | left_rock.CanCollide = true |
078 | left_rock.Position = left_pos |
083 | left_rock.Name = "leftrock" |
084 | left_rock.Transparency = NumberSequence.new( 0 ) |
085 | left_rock.Parent = workspace.rocks |
087 | print (RockScript.allrocktable) |
094 | local back_pos = Vector 3. new(startpos.X,startpos.Y,startpos.Z+rock.Size.Z) |
096 | if table.find(RockScript.allrocktable, back_pos) then |
098 | print ( "pos already used" ) |
101 | if no_back_rock = = 0 then |
102 | local back_rock = rock:Clone() |
103 | table.insert(RockScript.allrocktable, back_rock.Position) |
104 | back_rock.CanCollide = true |
105 | back_rock.Position = back_pos |
110 | back_rock.Name = "backrock" |
111 | back_rock.Transparency = NumberSequence.new( 0 ) |
112 | back_rock.Parent = workspace.rocks |
114 | print (RockScript.allrocktable) |
120 | local front_pos = Vector 3. new(startpos.X,startpos.Y,startpos.Z-rock.Size.Z) |
122 | if table.find(RockScript.allrocktable, front_pos) then |
124 | print ( "pos already used" ) |
127 | if no_front_rock = = 0 then |
128 | local front_rock = rock:Clone() |
129 | table.insert(RockScript.allrocktable, front_rock.Position) |
130 | front_rock.CanCollide = true |
131 | front_rock.Position = front_pos |
136 | front_rock.Name = "frontrock" |
137 | front_rock.Transparency = NumberSequence.new( 0 ) |
138 | front_rock.Parent = workspace.rocks |
140 | print (RockScript.allrocktable) |
146 | local up_pos = Vector 3. new(startpos.X,startpos.Y+rock.Size.Y,startpos.Z) |
148 | if table.find(RockScript.allrocktable, up_pos) then |
150 | print ( "pos already used" ) |
153 | if no_up_rock = = 0 then |
154 | local up_rock = rock:Clone() |
155 | table.insert(RockScript.allrocktable, up_rock.Position) |
156 | up_rock.CanCollide = true |
157 | up_rock.Position = up_pos |
162 | up_rock.Name = "uprock" |
163 | up_rock.Transparency = NumberSequence.new( 0 ) |
164 | up_rock.Parent = workspace.rocks |
166 | print (RockScript.allrocktable) |
173 | local down_pos = Vector 3. new(startpos.X,startpos.Y-rock.Size.Y,startpos.Z) |
175 | if table.find(RockScript.allrocktable, down_pos) then |
177 | print ( "pos already used" ) |
180 | if no_down_rock = = 0 then |
181 | local down_rock = rock:Clone() |
182 | table.insert(RockScript.allrocktable, down_rock.Position) |
183 | down_rock.CanCollide = true |
184 | down_rock.Position = down_pos |
189 | down_rock.Name = "downrock" |
190 | down_rock.Transparency = NumberSequence.new( 0 ) |
191 | down_rock.Parent = workspace.rocks |
193 | print (RockScript.allrocktable) |
209 | rock:GetPropertyChangedSignal( "Position" ):Connect( function () |
210 | startpos = rock.Position |
Works fine the first 6 or so runs and then it starts to lag, very, very badly, as shown in this video
https://vimeo.com/806579252
Hopefully you can see it lags more and more every use, I have no idea what causes it, any help is appreciated.