init commit
This commit is contained in:
230
lua/autorun/sh_squad_menu.lua
Normal file
230
lua/autorun/sh_squad_menu.lua
Normal file
@@ -0,0 +1,230 @@
|
||||
SquadMenu = SquadMenu or {}
|
||||
|
||||
if CLIENT then
|
||||
-- Settings file
|
||||
SquadMenu.DATA_FILE = "squad_menu.json"
|
||||
end
|
||||
|
||||
-- Chat prefixes that allow messaging squad members only
|
||||
SquadMenu.CHAT_PREFIXES = { "/s", "!s", "/p", "!pchat" }
|
||||
|
||||
-- Primary color used for the UI theme
|
||||
SquadMenu.THEME_COLOR = Color( 34, 52, 142 )
|
||||
|
||||
-- Max. length of a squad name
|
||||
SquadMenu.MAX_NAME_LENGTH = 30
|
||||
|
||||
-- Size limit for JSON data
|
||||
SquadMenu.MAX_JSON_SIZE = 49152 -- 48 kibibytes
|
||||
|
||||
-- Used on net.WriteUInt for the command ID
|
||||
SquadMenu.COMMAND_SIZE = 4
|
||||
|
||||
-- Command IDs (Max. ID when COMMAND_SIZE = 4 is 15)
|
||||
SquadMenu.BROADCAST_EVENT = 0
|
||||
SquadMenu.SQUAD_LIST = 1
|
||||
SquadMenu.SETUP_SQUAD = 2
|
||||
SquadMenu.JOIN_SQUAD = 3
|
||||
SquadMenu.LEAVE_SQUAD = 4
|
||||
SquadMenu.ACCEPT_REQUESTS = 5
|
||||
SquadMenu.REQUESTS_LIST = 6
|
||||
SquadMenu.KICK = 7
|
||||
SquadMenu.PING = 8
|
||||
|
||||
-- Reasons given when a member is removed from a squad
|
||||
SquadMenu.LEAVE_REASON_DELETED = 0
|
||||
SquadMenu.LEAVE_REASON_LEFT = 1
|
||||
SquadMenu.LEAVE_REASON_KICKED = 2
|
||||
|
||||
-- Server settings
|
||||
local maxMembersCvar = CreateConVar(
|
||||
"squad_max_members",
|
||||
"10",
|
||||
FCVAR_ARCHIVE + FCVAR_REPLICATED + FCVAR_NOTIFY,
|
||||
"Limits how many members a single squad can have.",
|
||||
1, 100
|
||||
)
|
||||
|
||||
local squadListPosCvar = CreateConVar(
|
||||
"squad_members_position",
|
||||
"6",
|
||||
FCVAR_ARCHIVE + FCVAR_REPLICATED + FCVAR_NOTIFY,
|
||||
"Sets the position of the squad members on the screen. Takes numbers betweek 1-9 and uses the same positions as a numpad.",
|
||||
1, 9
|
||||
)
|
||||
|
||||
local broadcastCvar = CreateConVar(
|
||||
"squad_broadcast_creation_message",
|
||||
"1",
|
||||
FCVAR_ARCHIVE + FCVAR_REPLICATED + FCVAR_NOTIFY,
|
||||
"When set to 1, Squad Menu will print when a new squad is created on the chat.",
|
||||
0, 1
|
||||
)
|
||||
|
||||
local friendlyfireCvar = CreateConVar(
|
||||
"squad_force_friendly_fire",
|
||||
"0",
|
||||
FCVAR_ARCHIVE + FCVAR_REPLICATED + FCVAR_NOTIFY,
|
||||
"Makes so squads always have friendly fire enabled.",
|
||||
0, 1
|
||||
)
|
||||
|
||||
function SquadMenu.PrintF( str, ... )
|
||||
MsgC( SquadMenu.THEME_COLOR, "[Squad Menu] ", Color( 255, 255, 255 ), string.format( str, ... ), "\n" )
|
||||
end
|
||||
|
||||
function SquadMenu.TableToJSON( t )
|
||||
return util.TableToJSON( t, false )
|
||||
end
|
||||
|
||||
function SquadMenu.JSONToTable( s )
|
||||
if type( s ) ~= "string" or s == "" then
|
||||
return {}
|
||||
end
|
||||
|
||||
return util.JSONToTable( s ) or {}
|
||||
end
|
||||
|
||||
function SquadMenu.GetMemberLimit()
|
||||
return maxMembersCvar:GetInt()
|
||||
end
|
||||
|
||||
function SquadMenu.GetMembersPosition()
|
||||
return squadListPosCvar:GetInt()
|
||||
end
|
||||
|
||||
function SquadMenu.GetShowCreationMessage()
|
||||
return broadcastCvar:GetInt() > 0
|
||||
end
|
||||
|
||||
function SquadMenu.GetForceFriendlyFire()
|
||||
return friendlyfireCvar:GetInt() > 0
|
||||
end
|
||||
|
||||
function SquadMenu.GetPlayerId( ply )
|
||||
if ply:IsBot() then
|
||||
return "BOT_" .. ply:AccountID()
|
||||
end
|
||||
|
||||
return ply:SteamID()
|
||||
end
|
||||
|
||||
local PID = SquadMenu.GetPlayerId
|
||||
|
||||
function SquadMenu.AllPlayersById()
|
||||
local all = player.GetAll()
|
||||
local byId = {}
|
||||
|
||||
for _, ply in ipairs( all ) do
|
||||
byId[PID( ply )] = ply
|
||||
end
|
||||
|
||||
return byId
|
||||
end
|
||||
|
||||
function SquadMenu.FindPlayerById( id )
|
||||
local all = player.GetAll()
|
||||
|
||||
for _, ply in ipairs( all ) do
|
||||
if id == PID( ply ) then return ply end
|
||||
end
|
||||
end
|
||||
|
||||
function SquadMenu.ValidateNumber( n, default, min, max )
|
||||
return math.Clamp( tonumber( n ) or default, min, max )
|
||||
end
|
||||
|
||||
function SquadMenu.ValidateString( s, default, maxLength )
|
||||
if type( s ) ~= "string" then
|
||||
return default
|
||||
end
|
||||
|
||||
s = string.Trim( s )
|
||||
|
||||
if s == "" then
|
||||
return default
|
||||
end
|
||||
|
||||
if s:len() > maxLength then
|
||||
return string.Left( s, maxLength - 3 ) .. "..."
|
||||
end
|
||||
|
||||
return s
|
||||
end
|
||||
|
||||
function SquadMenu.StartCommand( id )
|
||||
net.Start( "squad_menu.command", false )
|
||||
net.WriteUInt( id, SquadMenu.COMMAND_SIZE )
|
||||
end
|
||||
|
||||
function SquadMenu.WriteTable( t )
|
||||
local data = util.Compress( SquadMenu.TableToJSON( t ) )
|
||||
local bytes = #data
|
||||
|
||||
net.WriteUInt( bytes, 16 )
|
||||
|
||||
if bytes > SquadMenu.MAX_JSON_SIZE then
|
||||
SquadMenu.PrintF( "Tried to write JSON that was too big! (%d/%d)", bytes, SquadMenu.MAX_JSON_SIZE )
|
||||
return
|
||||
end
|
||||
|
||||
net.WriteData( data )
|
||||
end
|
||||
|
||||
function SquadMenu.ReadTable()
|
||||
local bytes = net.ReadUInt( 16 )
|
||||
|
||||
if bytes > SquadMenu.MAX_JSON_SIZE then
|
||||
SquadMenu.PrintF( "Tried to read JSON that was too big! (%d/%d)", bytes, SquadMenu.MAX_JSON_SIZE )
|
||||
return {}
|
||||
end
|
||||
|
||||
local data = net.ReadData( bytes )
|
||||
return SquadMenu.JSONToTable( util.Decompress( data ) )
|
||||
end
|
||||
|
||||
if SERVER then
|
||||
-- Shared files
|
||||
include( "squad_menu/player.lua" )
|
||||
AddCSLuaFile( "squad_menu/player.lua" )
|
||||
|
||||
-- Server files
|
||||
include( "squad_menu/server/main.lua" )
|
||||
include( "squad_menu/server/squad.lua" )
|
||||
include( "squad_menu/server/network.lua" )
|
||||
|
||||
-- Client files
|
||||
AddCSLuaFile( "includes/modules/styled_theme.lua" )
|
||||
AddCSLuaFile( "includes/modules/styled_theme_tabbed_frame.lua" )
|
||||
|
||||
AddCSLuaFile( "squad_menu/client/main.lua" )
|
||||
AddCSLuaFile( "squad_menu/client/config.lua" )
|
||||
AddCSLuaFile( "squad_menu/client/menu.lua" )
|
||||
AddCSLuaFile( "squad_menu/client/hud.lua" )
|
||||
|
||||
AddCSLuaFile( "squad_menu/client/vgui/member_status.lua" )
|
||||
AddCSLuaFile( "squad_menu/client/vgui/squad_list_row.lua" )
|
||||
end
|
||||
|
||||
if CLIENT then
|
||||
-- Shared files
|
||||
include( "squad_menu/player.lua" )
|
||||
|
||||
-- Setup UI theme
|
||||
require( "styled_theme" )
|
||||
require( "styled_theme_tabbed_frame" )
|
||||
|
||||
StyledTheme.RegisterFont( "SquadMenuInfo", 0.016, {
|
||||
font = "Roboto-Condensed",
|
||||
weight = 600,
|
||||
} )
|
||||
|
||||
-- Client files
|
||||
include( "squad_menu/client/main.lua" )
|
||||
include( "squad_menu/client/config.lua" )
|
||||
include( "squad_menu/client/menu.lua" )
|
||||
include( "squad_menu/client/hud.lua" )
|
||||
|
||||
include( "squad_menu/client/vgui/member_status.lua" )
|
||||
include( "squad_menu/client/vgui/squad_list_row.lua" )
|
||||
end
|
||||
Reference in New Issue
Block a user