I was creating a tycoon, and with it, a Mineral Producer. It was supposed to explode and leave all parts and unions black and on fire, but it does not work properly. It still kills unions and parts inside of models, and after the 20 seconds after the explosion, the model is not removed. Can someone help me? Script below:
local DrillMaxTemp = script.Parent.DrillMaxTemperature local DrillTemp = script.Parent.DrillTemperature local Fan = script.Parent.FanSpeed local Safety = script.Parent.HasSafetySystem local Hull = script.Parent.HullPoints local On = script.Parent.IsMachineOn local MaxStorage = script.Parent.MaximumStorage local CurrentStorage = script.Parent.MineStorage local Mining = script.Parent.MiningSpeed local Heat = script.Parent.HeatGeneration while true do if CurrentStorage.Value < MaxStorage.Value and On.Value then wait(3) script.Parent.MineStorage.Value = script.Parent.MineStorage.Value + script.Parent.MiningSpeed.Value DrillTemp.Value = DrillTemp.Value + ((Heat.Value - Fan.Value - 150)/1000) if DrillMaxTemp.Value > DrillTemp.Value and DrillTemp.Value >= 0.9 * DrillMaxTemp.Value and Safety.Value then repeat wait(2) DrillTemp.Value = DrillTemp.Value + (( - Fan.Value - 150)/1000) until DrillMaxTemp.Value > DrillTemp.Value >= 0.75 * DrillMaxTemp.Value elseif DrillMaxTemp.Value < DrillTemp.Value then for i,v in pairs(script.Parent:GetChildren()) do if v.ClassName == "Part" then v.Anchored = false v.BrickColor = BrickColor.Black() v:BreakJoints() local f = Instance.new("Fire", v) f.Size = 30 f.Heat = 25 elseif v.ClassName == "UnionOperation" then v.UsePartColor = true v.Anchored = false v.BrickColor = BrickColor.Black() v:BreakJoints() local f = Instance.new("Fire", v) f.Size = 30 f.Heat = 25 elseif v.ClassName == "Model" then for m,r in pairs (v:GetChildren()) do if r.ClassName == "Part" then r.Anchored = false r.BrickColor = BrickColor.Black() r:BreakJoints() local f = Instance.new("Fire", r) f.Size = 30 f.Heat = 25 else r:Destroy() end end else v:Destroy() end end local expl = Instance.new("Explosion", script.Parent["Your Storage: "..script.Parent.MineStorage.Value.."/"..script.Parent.MaximumStorage.Value].Drill) expl.BlastRadius = 500000 expl.BlastPressure = 1000000000 wait (20) script.Parent:Destroy() end elseif On.Value then DrillTemp.Value = DrillTemp.Value + ((- Fan.Value - 150)/1000) wait(2) script.Parent.MineStorage.Value = script.Parent.MaximumStorage.Value else DrillTemp.Value = DrillTemp.Value + ((- Fan.Value - 150)/1000) wait(2) end wait(1) end
When I runned the script and exploded the machine, i got this error:
Workspace.Model.Melt Metal.Factory.MineralProducer.Producer:54: attempt to index field 'Parent' (a nil value)
EDIT: I could solve the glitch by myself. I also created some speaks so the NPC could talk with the owner about that. Script below for who wants to learn:
local DrillMaxTemp = script.Parent.DrillMaxTemperature local DrillTemp = script.Parent.DrillTemperature local Fan = script.Parent.FanSpeed local Safety = script.Parent.HasSafetySystem local Hull = script.Parent.HullPoints local On = script.Parent.IsMachineOn local MaxStorage = script.Parent.MaximumStorage local CurrentStorage = script.Parent.MineStorage local Mining = script.Parent.MiningSpeed local Heat = script.Parent.HeatGeneration --gets the values while true do if CurrentStorage.Value < MaxStorage.Value and On.Value then -- if there is storage space and the machine is on wait(2) CurrentStorage.Value = CurrentStorage.Value + Mining.Value -- add mineral to the storage DrillTemp.Value = DrillTemp.Value + ((Heat.Value - Fan.Value - 150)/1000) -- heats up the drill if DrillMaxTemp.Value > DrillTemp.Value and DrillTemp.Value >= 0.9 * DrillMaxTemp.Value and Safety.Value then -- check if the drill is about 90% of maximum temperature and if there's an safety system repeat wait(3) DrillTemp.Value = DrillTemp.Value + (( - Fan.Value - 150)/1000) -- cooldown the machine until the machine is 75% heated until DrillMaxTemp.Value > DrillTemp.Value >= 0.75 * DrillMaxTemp.Value elseif DrillMaxTemp.Value < DrillTemp.Value then -- if the machine is too hot then explode for i,v in pairs(script.Parent:GetChildren()) do -- get all machine childs print (v.ClassName) if v.ClassName == "Model" then -- if the analyzed child is a model then check its childs and create an explosion local expl = Instance.new("Explosion", v.Drill) expl.Position = v.Drill.Position expl.BlastRadius = 5 expl.BlastPressure = 1000000 for m,r in pairs (v:GetChildren()) do if r:IsA("BasePart") then -- if the analyzed object is a part or union then burn it r.Anchored = false r.BrickColor = BrickColor.Black() r:BreakJoints() local f = Instance.new("Fire", r) f.Size = 30 f.Heat = 25 else r:Destroy() -- if the object is something like an humanoid or script then clear it end end elseif v ~= script then v:Destroy() -- if it is not a model nor the current script then destroy it end end wait (5) local c = game:GetService("Chat") -- chat with the user c:Chat(script.Parent.Parent.Parent.Parent["Stevyl Karol"].Head, script.Parent.Parent.Parent.OwnerShipSystem.Owner.Value..", I need to talk with you, quickly!", "Red") wait(3) c:Chat(game.Workspace:FindFirstChild(script.Parent.Parent.Parent.OwnerShipSystem.Owner.Value).Head,"Man, what's up?", "Red") wait(3) c:Chat(script.Parent.Parent.Parent.Parent["Stevyl Karol"].Head, "Being sincerly, YOU DESTROYED THE MINING MACHINE!!!!", "Red") wait(3) c:Chat(game.Workspace:FindFirstChild(script.Parent.Parent.Parent.OwnerShipSystem.Owner.Value).Head,"Yay!!", "Red") wait(3) c:Chat(script.Parent.Parent.Parent.Parent["Stevyl Karol"].Head, "That's not a easy decision, but... you're fired.", "Red") wait(3) script.Parent:Destroy() -- destroy the machine end elseif On.Value then -- if the machine is ON but the system is full then just cooldown the machine DrillTemp.Value = DrillTemp.Value + ((- Fan.Value - 150)/1000) wait(2) script.Parent.MineStorage.Value = script.Parent.MaximumStorage.Value -- equal the storage to maxstorage else -- if the machine is turned off then just cooldown DrillTemp.Value = DrillTemp.Value + ((- Fan.Value - 150)/1000) wait(2) end wait(1) -- give time to check if any propety has changed end
I've made a script for a fan (a fan like the ones you have on your computer, but much bigger), so it will spin according of the fanspeed set in a value. Script below:
while true do script.Parent.CFrame = CFrame.new(script.Parent.CFrame.p)*CFrame.Angles(math.rad(script.Parent.Rotation.X), math.rad(script.Parent.Rotation.Y) + math.rad(tonumber(script.Parent.Parent.Parent.FanSpeed.Value)*360/60/30),math.rad(script.Parent.Rotation.X)) wait() end
When runned, it looks the fan is stuck somewhere, and even more stuck when runned on a server. Why?