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

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)
![]()
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.