Files
wnsrc/lua/gm_express/sv_init.lua
lifestorm 9c918c46e5 Upload
2024-08-04 23:12:27 +03:00

95 lines
2.6 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
require( "playerload" )
util.AddNetworkString( "express_access" )
-- Registers a basic receiver --
function express.Receive( message, cb )
express:_setReceiver( message, cb )
end
-- Broadcasts the given data to all connected players --
function express.Broadcast( message, data, onProof )
express.Send( message, data, player.GetAll(), onProof )
end
-- Registers with the current API, storing and distributing access tokens --
function express.Register()
-- All stored items expire after a day
-- That includes tokens, so we need
-- to re-register if we make it this far
local oneDay = 60 * 60 * 24
timer.Create( "Express_Register", oneDay, 0, express.Register )
local url = express:makeBaseURL() .. "/register"
http.Fetch( url, function( body, _, _, code )
express._checkResponseCode( code )
local response = util.JSONToTable( body )
assert( response, "Invalid JSON" )
assert( response.server, "No server access token" )
assert( response.client, "No client access token" )
express:SetAccess( response.server )
express._clientAccess = response.client
if player.GetCount() == 0 then return end
net.Start( "express_access" )
net.WriteString( express._clientAccess )
net.Broadcast()
end, error, express.jsonHeaders )
end
-- Passthrough for the shared _send function --
function express.Send( ... )
express:_send( ... )
end
-- Sets a callback for each of the recipients that will run when they provide proof --
function express:SetExpected( hash, cb, plys )
if not istable( plys ) then plys = { plys } end
for _, ply in ipairs( plys ) do
local key = ply:SteamID64() .. "-" .. hash
self._awaitingProof[key] = cb
end
end
-- Runs a hook when a player makes a new express Receiver --
function express._onReceiverMade( _, ply )
local messageCount = net.ReadUInt( 8 )
for _ = 1, messageCount do
local name = string.lower( net.ReadString() )
hook.Run( "ExpressPlayerReceiver", ply, name )
end
end
net.Receive( "express_receivers_made", express._onReceiverMade )
-- Send the player their access token as soon as it's safe to do so --
function express._onPlayerLoaded( ply )
net.Start( "express_access" )
net.WriteString( express._clientAccess )
net.Send( ply )
end
hook.Add( "PlayerFullLoad", "Express_PlayerReady", express._onPlayerLoaded )