65 lines
		
	
	
		
			No EOL
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			No EOL
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
Batch = Batch or {}
 | 
						|
Batch.Event = Batch.Event or {}
 | 
						|
Batch.Event.Queued = Batch.Event.Queued or {}
 | 
						|
Batch.Event.IsQueued = Batch.Event.IsQueued or false
 | 
						|
 | 
						|
local SERVER = IsDuplicityVersion()
 | 
						|
 | 
						|
-- could do a callback from client to server back to client with a time stamp. Use that timestamp to generate some random string/number and use that fo
 | 
						|
-- this event name. Would help by masking from exploits. Thinking about making a module out of it
 | 
						|
 | 
						|
--- This is used to batch single events together to reduce network strain
 | 
						|
--- 
 | 
						|
if SERVER then
 | 
						|
    function Batch.Event.Queue(src, event, ...)
 | 
						|
        if src == -1 then
 | 
						|
            src = GetPlayers()
 | 
						|
            for k, v in pairs(src) do
 | 
						|
                local strSrc = tostring(v)   
 | 
						|
                Batch.Event.Queued[strSrc] = Batch.Event.Queued[strSrc] or {}
 | 
						|
                table.insert(Batch.Event.Queued[strSrc], {
 | 
						|
                    src = v,
 | 
						|
                    event = event,
 | 
						|
                    args = {...}
 | 
						|
                })
 | 
						|
            end
 | 
						|
        else
 | 
						|
            local strSrc = tostring(src)   
 | 
						|
            Batch.Event.Queued[strSrc] = Batch.Event.Queued[strSrc] or {}
 | 
						|
            table.insert(Batch.Event.Queued[strSrc], {
 | 
						|
                src = src,
 | 
						|
                event = event,
 | 
						|
                args = {...}
 | 
						|
            })
 | 
						|
        end
 | 
						|
 | 
						|
        if Batch.Event.IsQueued then return end
 | 
						|
        Batch.Event.IsQueued = true
 | 
						|
        SetTimeout(100, function()
 | 
						|
            for k, v in pairs(Batch.Event.Queued) do
 | 
						|
                TriggerClientEvent('community_bridge:client:BatchEvents', v.src, v)
 | 
						|
            end  
 | 
						|
            Batch.Event.IsQueued = false
 | 
						|
            Batch.Event.Queued = {}
 | 
						|
        end)
 | 
						|
    end
 | 
						|
    return Batch
 | 
						|
else
 | 
						|
 | 
						|
    Batch.Event.Fire = function(array)
 | 
						|
        local playerSrc = PlayerId()
 | 
						|
        for k, v in pairs(array) do
 | 
						|
            if v.src == playerSrc then
 | 
						|
                local event = v.event
 | 
						|
                local args = v.args
 | 
						|
                TriggerEvent(event, table.unpack(args))
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
 | 
						|
    RegisterNetEvent('community_bridge:client:BatchEvents', function(array)
 | 
						|
        Batch.Event.Fire(array)
 | 
						|
    end)
 | 
						|
 | 
						|
    return Batch
 | 
						|
end |