Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- EXAMPLE OF CLIENT-SERVER COMM WITH LUANOID. CLIENT DOESNT REQUEST CHARS.
- local ReplicatedFirst = game:GetService("ReplicatedFirst")
- local ReplicatedStorage = game:GetService("ReplicatedStorage")
- local apiObjects = Instance.new("Folder")
- apiObjects.Name = "CharacterControllerApi"
- apiObjects.Parent = ReplicatedStorage
- local Api = {}
- Api.Spec = require(ReplicatedFirst.CharacterControllerCore.ApiSpec)
- function Api.implement(implementation)
- for methodName, remoteData in pairs(Api.Spec.Methods) do
- local object = apiObjects:FindFirstChild(remoteData.Type) or Instance.new(remoteData.Type)
- object.Name = methodName
- local serverMethod = implementation[methodName]
- if not serverMethod then
- error(string.format("Server is missing implementation for client method %q", methodName))
- end
- if remoteData.Type == "RemoteFunction" then
- if remoteData.ClientServer then -- can use for client-server comm
- object.OnServerInvoke = function(...)
- return serverMethod(...)
- end;
- end
- if remoteData.ServerClient then -- can use for server-client comm
- Api[methodName] = function(...)
- return object:InvokeClient(...)
- end
- end
- elseif remoteData.Type == "RemoteEvent" then
- if remoteData.ClientServer then -- can use for client-server comm
- object.OnServerEvent:Connect(serverMethod)
- end
- if remoteData.ServerClient then -- can use for server-client comm
- Api[methodName] = function(players, ...)
- if type(players) == 'table' then
- for p=1,#players do
- local player = players[p]
- object:FireClient(player, ...)
- end
- else
- local player = players
- object:FireClient(player, ...)
- end
- end
- end
- end
- object.Parent = apiObjects
- end
- end
- return Api
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement