Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local util = require(script.Parent)
- local Event = util.get "Event"
- local ReplicatedStorage = util.services.ReplicatedStorage
- local RunService = util.services.RunService
- local Players = util.services.Players
- local networkEvent
- local networkFunction
- if not ReplicatedStorage:FindFirstChild("networkEvent") and RunService:IsServer() then -- Need to do the first condition for play solo testing
- networkEvent = Instance.new("RemoteEvent")
- networkEvent.Name = "networkEvent"
- networkFunction = Instance.new("RemoteFunction")
- networkFunction.Name = "networkFunction"
- networkEvent.Parent = ReplicatedStorage
- networkFunction.Parent = ReplicatedStorage
- elseif RunService:IsClient() then
- networkEvent = ReplicatedStorage:WaitForChild("networkEvent")
- networkFunction = ReplicatedStorage:WaitForChild("networkFunction")
- end
- --
- local networkUtil = {}
- networkUtil.events = {} -- [name] = {func, ...}
- networkUtil.callbacks = {}
- --
- if RunService:IsServer() then
- networkEvent.OnServerEvent:Connect(function(playerObject, name, ...)
- if networkUtil.events[name] then
- networkUtil.events[name]:fire(playerObject, ...)
- end
- end)
- networkFunction.OnServerInvoke = function(playerObject, name, ...)
- if networkUtil.callbacks[name] then
- return networkUtil.callbacks[name](playerObject, ...)
- end
- end
- end
- if RunService:IsClient() then
- networkEvent.OnClientEvent:Connect(function(name, ...)
- if networkUtil.events[name] then
- networkUtil.events[name]:fire(...)
- end
- end)
- networkFunction.OnClientInvoke = function(name, ...)
- if networkUtil.callbacks[name] then
- return networkUtil.callbacks[name](...)
- end
- end
- end
- --
- function networkUtil:fireClient(playerObject, name, ...)
- networkEvent:FireClient(playerObject, name, ...)
- end
- function networkUtil:fireAllClients(name, ...)
- networkEvent:FireAllClients(name, ...)
- end
- function networkUtil:fireOtherClients(playerObject, name, ...)
- for _, otherPlayerObject in next, Players:GetPlayers() do
- if otherPlayerObject ~= playerObject then
- networkEvent:FireClient(otherPlayerObject, name, ...)
- end
- end
- end
- function networkUtil:fireServer(name, ...)
- networkEvent:FireServer(name, ...)
- end
- function networkUtil:invokeClient(playerObject, name, ...)
- return networkFunction:InvokeClient(playerObject, name, ...)
- end
- function networkUtil:invokeServer(name, ...)
- return networkFunction:InvokeServer(name, ...)
- end
- function networkUtil:createEventListener(name, func)
- if not self.events[name] then
- self.events[name] = Event.new()
- end
- return self.events[name]:connect(func)
- end
- function networkUtil:setCallback(name, callback)
- self.callbacks[name] = callback
- end
- return networkUtil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement