Function wont take parameters (SOLVED)

I am making a custom version of knit for my own personal use and I have found some trouble passing parameters

this is the this is from the server side that converts the client table into remotes

for _, service in pairs(services) do
		local service_folder = Instance.new('Folder')
		service_folder.Name = service.Name

		local remote_events = Instance.new('Folder')
		remote_events.Name = 'remote_events'

		local remote_functions = Instance.new('Folder')
		remote_functions.Name = 'remote_functions'

		local properties = Instance.new('Folder')
		properties.Name = 'properties'

		for name, value in pairs(service.Client) do
			if typeof(value) == 'function' then --assumes as client function as they are the only functions present
				local remote_function = Instance.new('RemoteFunction')

				remote_function.OnServerInvoke = function(...)
					return value(...)
				end

				remote_function.Name = name
				remote_function.Parent = remote_functions
				service[name] = remote_function
			elseif value == 'event' then
				local remote_event = Instance.new('RemoteEvent')
				remote_event.Name = name
				remote_event.Parent = remote_events
				service[name] = remote_event
			elseif typeof(value) == 'table' then --assumes as property since that it the only marker that it a table
				local new_property = property.new(value[2])
				new_property.remote_event.Name = name
				new_property.remote_event.Parent = properties
				service[name] = new_property.remote_event
			end
		end

		remote_functions.Parent, remote_events.Parent, properties.Parent = service_folder, service_folder, service_folder

		for _, folder in ipairs(service_folder:GetChildren()) do
			if #folder:GetChildren() > 0 then continue end
			folder:Destroy()
		end

		service_folder.Parent = services_folder
	end

this is code from the client side that converts these remotes into usable funtions and values

local services = script.Parent.services
function client:GetService(name)
	local service_folder = services:WaitForChild(name)
	local service = {}
	local remote_functions = service_folder:FindFirstChild("remote_functions")
	local remote_events = service_folder:FindFirstChild("remote_events")
	local properties = service_folder:FindFirstChild("properties")
	
	if remote_functions then
		for _, remote_function in ipairs(remote_functions:GetChildren()) do
			service[remote_function.Name] = function(_self, ...)
				return remote_function:InvokeServer(...)
			end
		end
	end
	
	if remote_events then
		for _, remote_event in ipairs(remote_events:GetChildren()) do
			service[remote_event.Name] = remote_event
		end
	end
	
	if properties then
		for _, property in ipairs(properties:GetChildren()) do
			service[property.Name] = property
		end
	end

	return service
end

the main problem is with the tiny lines here

if remote_functions then
		for _, remote_function in ipairs(remote_functions:GetChildren()) do
			service[remote_function.Name] = function(_self, ...)
				return remote_function:InvokeServer(...)
			end
		end
	end

image
I can confirm that the remote function is here

but for some reason it can’t take parameters, so when I try to print the player it ends up with nil

local remotes = require(game:GetService('ReplicatedStorage').modules.remotes)
local service = remotes:CreateService({
    Name = 'IndigoIslesManager',
    Client = {}
})

local gort_manager = require(game:GetService('ServerStorage').modules.gort_manager)
local gorts = workspace.gorts['Indigo Isles']

function service.Client:GetFarmer(player)
    print('from the reciever', player)
    --if not (gort_manager:HasGort(player, gorts['Pig Gort']) and gort_manager:HasGort(player, gorts['Onion Gort'])) then return false end 
    --gort_manager:AwardGort(player, gorts['Farmer Gort'])
    --return true 
end

return service

this module is required in order to initialize the service
you can see that there is a print function

(for context the middle man is the print statement that gets called when you fire the function from the client)
(the receiver is the client function itself)
image

this is the problem I am having
can someone tell me why the player appears to the remotefunction but not to the function the remotefunction calls? even when all the arguments are passed down?

any help would be appreciated.

this thread saved me:

I was using colon syntax for functions and didnt even realize I had to pass the table
I am so dumb