Scripting HelpersARCHIVE
A little piece of Roblox history. Preserved for everyone, one question at a time.Read about the archive →
✓ ANSWER ACCEPTED

More efficiency out of this script?

I've made a script for a Fire Response group, where a GUI will fire an event which then a script picks up and then does a certain thing dependant on what the event fired was. It's a bit clunky and can cause eye cancer, which is why I'm asking the SH community to help me make it more efficient, as I've hit a wall at how to do so.

local function createFire(part,size,heat,PColor,SColor)
	local fire = Instance.new("Fire",game.Workspace.Events.Fires:FindFirstChild(part))
	fire.Size = size
	fire.Heat = heat
	fire.Color = PColor
	fire.SecondaryColor = SColor
	print("Generated a fire in "..part)
	return "Finished"
end

local function createAccident(part,what)
	if what == "Car" then
		local thing = game.ServerStorage.Events.CarAccident:Clone()
		thing.Parent = part
		thing:SetPrimaryPartCFrame(part.CFrame)
		print("Generated a CarAccident in "..part.Name)
		return "Finished"
	elseif what == "Truck" then
		local thing = game.ServerStorage.Events.TruckAccident:Clone()
		thing.Parent = part
		thing:SetPrimaryPartCFrame(part.CFrame)	
		print("Generated a TruckAccident in "..part.Name)
		return "Finished"
	end
end

game.Workspace.RemoteEvents.RandomEvent.OnServerEvent:connect(function(msg)
	local number = math.random(1,#game.Workspace.Events:GetChildren())
	if number == 1 then
		createFire("A",5,10,Color3.new(255/255, 0/255, 0/255),Color3.new(250/255, 0/255, 0/255))
	elseif number == 2 then
		createFire("B",10,15,Color3.new(170/255, 0/255, 127/255),Color3.new(170/255, 0/255, 127/255))
	elseif number == 3 then
		createFire("C",15,20,Color3.new(85/255, 85/255, 0/255),Color3.new(85/255, 85/255, 0/255))
	elseif number == 4 then
		createFire("D",20,25,Color3.new(0/255, 85/255, 255/255),Color3.new(0/255, 85/255, 255/255))
	elseif number == 5 then
		createAccident(game.Workspace.Events.Accidents.A,"Car")
	elseif number == 6 then
		createAccident(game.Workspace.Events.Accidents.B,"Truck")
	end
end)
game.Workspace.RemoteEvents.RestoreGame.OnServerEvent:connect(function(msg)
	for i,v in pairs(game.Workspace.Events:GetChildren()) do
		if v.ClassName == "Folder" then
			for i,x in pairs(v:GetChildren()) do
				if x:FindFirstChild("Fire") ~= nil then
					repeat x.Fire:Destroy() wait() until x:FindFirstChild("Fire") == nil
				end
				if x:FindFirstChild("CarAccident") ~= nil then
					repeat x.CarAccident:Destroy() wait() until x:FindFirstChild("CarAccident") == nil
				end
				if x:FindFirstChild("TruckAccident") ~= nil then
					repeat x.TruckAccident:Destroy() wait() until x:FindFirstChild("TruckAccident") == nil
				end
			end
		end
	end
end)
game.Workspace.RemoteEvents.FireA.OnServerEvent:connect(function(msg)
	createFire("A",5,10,Color3.new(255/255, 0/255, 0/255),Color3.new(250/255, 0/255, 0/255))
end)
game.Workspace.RemoteEvents.FireB.OnServerEvent:connect(function(msg)
	createFire("B",10,15,Color3.new(170/255, 0/255, 127/255),Color3.new(170/255, 0/255, 127/255))
end)
game.Workspace.RemoteEvents.FireC.OnServerEvent:connect(function(msg)
	createFire("C",15,20,Color3.new(85/255, 85/255, 0/255),Color3.new(85/255, 85/255, 0/255))
end)
game.Workspace.RemoteEvents.FireD.OnServerEvent:connect(function(msg)
	createFire("D",20,25,Color3.new(0/255, 85/255, 255/255),Color3.new(0/255, 85/255, 255/255))		
end)
game.Workspace.RemoteEvents.CarAccident.OnServerEvent:connect(function(msg)
	createAccident(game.Workspace.Events.Accidents.A,"Car")
end)
game.Workspace.RemoteEvents.TruckAccident.OnServerEvent:connect(function(msg)
	createAccident(game.Workspace.Events.Accidents.B,"Truck")
end)

Like I said, Eye cancer

Layout


Thank you!

1 answer

✓ Accepted answer

You don't need tons of different RemoteEvents/RemoteFunctions to communicate. You could use a single one and pass an integer code as first argument to act as a "request".

local remoteEvent = game.Workspace.myOnlyRemoteEvent

RemoteEvent.onServerEvent:connect(function(player, request)
	if request == 0 then
		-- Do something...
	elseif request == 1 then
		-- Do something else...
	end
end)

2 comments

0

Oh, so when I invoke the event. "remoteEvent:FireServer(1)" for example?

0

Exactly.

This discussion is preserved as it was. New answers, comments, and votes are closed.