#Question 0005

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

#Question 0006

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?

3 comments

0

Why are you numbering those questions? Are you making a series on purpose? Do you have OCD? You can just post them normally like everyone else does.

0

yes i am serialyzing them :)

0

and just because i like, if you want you can get the links of 4, 3, 2 and 1