Can you return 2 metatables inside a module script

So I made a module where it has 2 constructor functions with their own unique functions, The problem I have right now Is I don’t know how to return 2 metatables so I can use else where.

image


local rs = game:GetService("ReplicatedStorage")

--Remotes 
local RemoteEvent = rs:WaitForChild("RemoteEvent")

--Modules 
local spawnfireball = require(rs:WaitForChild("ModuleScript")) -- this line is causing the error 
local spawnFireball = spawnfireball.SpawnFireball 

RemoteEvent.OnServerEvent:Connect(function(player)
	spawnFireball.new(player)
	
	
	
end)



This is the module script if you want to see

local fireball = {}
fireball.__index = fireball

local spawnFireball = {}
spawnFireball.__index = spawnFireball

--Services 
local rs = game:GetService("ReplicatedStorage")
local starterPack = game:GetService("StarterPack")
local tweenService = game:GetService("TweenService")
local runService = game:GetService("RunService")
local Players = game:GetService("Players")

--Remotes 
local remoteEvent = rs:WaitForChild("RemoteEvent")

local Player = Players.LocalPlayer

function spawnFireball.new(player, size)
	local newFireball = {}
	setmetatable(newFireball, spawnFireball)
	
	local char = player.Character 
	local hmr = char.HumanoidRootPart 
	local rightHand = char.RightHand 
	local leftHand = char.LeftHand
	
	local fireParticle = rs:WaitForChild("Part")
	fireParticle.CanCollide = false
	local clone = fireParticle:Clone()
	clone.Parent = rightHand 
	
	local clone2 = fireParticle:Clone()
	clone2.Parent = leftHand
	
	runService.RenderStepped:Connect(function()
		clone.CFrame = rightHand.CFrame 
		clone2.CFrame = leftHand.CFrame
	end)
	
	newFireball.Clone = clone
	newFireball.Clone2 = clone2
	
	return newFireball
end

function fireball.new(player)
	local newFireball = {}
	setmetatable(newFireball, fireball)
	
	local tool = rs:WaitForChild("Tool")
	local tool = tool:Clone()
	tool.RequiresHandle = false
	tool.Parent = player.Backpack
	newFireball.Tool = tool
	
	return newFireball
end

function fireball:OnEquipped()
	self.Tool.Equipped:Connect(function()
		print("Equipped Tool")
		--local fireHand = spawnFireball.new(Player)
		remoteEvent:FireServer()
		
	end)
end



return fireball, spawnFireball

Why not split them into separate modules?

1 Like

Thats probably a good idea, I didn’t think of that thanks

You can return a table, and then unpack it once you get it.
Like this:

local foo = 2
local bar = 4
return {foo, bar}
local foo, bar = unpack(require(PATH))
2 Likes