Files
wnsrc/lua/includes/extensions/player_auth.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

140 lines
3.5 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/
--]]
local meta = FindMetaTable( "Player" )
if ( not meta ) then return end
--[[---------------------------------------------------------
Name: IsAdmin
Desc: Returns if a player is an admin.
-----------------------------------------------------------]]
function meta:IsAdmin()
if ( self:IsSuperAdmin() ) then return true end
if ( self:IsUserGroup( "admin" ) ) then return true end
return false
end
--[[---------------------------------------------------------
Name: IsSuperAdmin
Desc: Returns if a player is a superadmin.
-----------------------------------------------------------]]
function meta:IsSuperAdmin()
return self:IsUserGroup( "superadmin" )
end
--[[---------------------------------------------------------
Name: IsUserGroup
Desc: Returns if a player is in the specified usergroup.
-----------------------------------------------------------]]
function meta:IsUserGroup( name )
if ( not self:IsValid() ) then return false end
return self:GetUserGroup() == name
end
--[[---------------------------------------------------------
Name: GetUserGroup
Desc: Returns the player's usergroup.
-----------------------------------------------------------]]
function meta:GetUserGroup()
return self:GetNWString( "UserGroup", "user" )
end
--[[---------------------------------------------------------
This is the meat and spunk of the player auth system
-----------------------------------------------------------]]
if ( not SERVER ) then return end
--[[---------------------------------------------------------
Name: SetUserGroup
Desc: Sets the player's usergroup. ( Serverside Only )
-----------------------------------------------------------]]
function meta:SetUserGroup( name )
self:SetNWString( "UserGroup", name )
end
-- SteamIds table..
-- STEAM_0:1:7099:
-- name = garry
-- group = superadmin
local SteamIDs = {}
local function LoadUsersFile()
local txt = file.Read( "settings/users.txt", "MOD" )
if ( not txt ) then MsgN( "Failed to load settings/users.txt!" ) return end
-- Load the users file
local UsersKV = util.KeyValuesToTable( txt )
if ( not UsersKV ) then MsgN( "Failed to parse settings/users.txt!" ) return end
SteamIDs = {}
-- Extract the data into the SteamIDs table
for key, tab in pairs( UsersKV ) do
for name, steamid in pairs( tab ) do
SteamIDs[ steamid ] = {}
SteamIDs[ steamid ].name = name
SteamIDs[ steamid ].group = key
end
end
end
LoadUsersFile()
function util.GetUserGroups()
return SteamIDs
end
hook.Add( "PlayerInitialSpawn", "PlayerAuthSpawn", function( ply )
local steamid = ply:SteamID()
if ( game.SinglePlayer() or ply:IsListenServerHost() ) then
ply:SetUserGroup( "superadmin" )
return
end
if ( SteamIDs[ steamid ] == nil ) then
ply:SetUserGroup( "user" )
return
end
-- Admin SteamID need to be fully authenticated by Steam!
if ( ply.IsFullyAuthenticated and not ply:IsFullyAuthenticated() ) then
ply:ChatPrint( string.format( "Hey '%s' - Your SteamID wasn't fully authenticated, so your usergroup has not been set to '%s'.", SteamIDs[ steamid ].name, SteamIDs[ steamid ].group ) )
ply:ChatPrint( "Try restarting Steam." )
return
end
ply:SetUserGroup( SteamIDs[ steamid ].group )
ply:ChatPrint( string.format( "Hey '%s' - You're in the '%s' group on this server.", SteamIDs[ steamid ].name, SteamIDs[ steamid ].group ) )
end )