starting stuff
This commit is contained in:
parent
7669c3a1c2
commit
5cfe0c8ea5
7 changed files with 279 additions and 1 deletions
2
LICENSE
2
LICENSE
|
@ -220,7 +220,7 @@ If you develop a new program, and you want it to be of the greatest possible use
|
||||||
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
|
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
cbox
|
cbox
|
||||||
Copyright (C) 2023 Cynosphere-gmod
|
Copyright (C) 2023 Cynthia Foxwell
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
|
1
lua/autorun/cbox_init.lua
Normal file
1
lua/autorun/cbox_init.lua
Normal file
|
@ -0,0 +1 @@
|
||||||
|
include("cbox/sh_init.lua")
|
62
lua/cbox/cl_hooks.lua
Normal file
62
lua/cbox/cl_hooks.lua
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
local hookTable = {}
|
||||||
|
if cbox.hooks then
|
||||||
|
hookTable = cbox.hooks.GetTable()
|
||||||
|
end
|
||||||
|
|
||||||
|
cbox.hooks = cbox.hooks or {}
|
||||||
|
|
||||||
|
---Returns all hooks
|
||||||
|
---@return table
|
||||||
|
function cbox.hooks.GetTable()
|
||||||
|
return hookTable
|
||||||
|
end
|
||||||
|
|
||||||
|
---Adds a hook
|
||||||
|
---@param name "PreChatAddText"
|
||||||
|
---@param identifier string
|
||||||
|
---@param callback function
|
||||||
|
function cbox.hooks.Add(name, identifier, callback)
|
||||||
|
hookTable[name] = hookTable[name] or {}
|
||||||
|
hookTable[name][identifier] = callback
|
||||||
|
end
|
||||||
|
|
||||||
|
---Removes a hook
|
||||||
|
---@param name "PreChatAddText"
|
||||||
|
---@param identifier string
|
||||||
|
function cbox.hooks.Remove(name, identifier)
|
||||||
|
if not hookTable[name] then return end
|
||||||
|
hookTable[name][identifier] = nil
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
cbox.detours = cbox.detours or {}
|
||||||
|
|
||||||
|
cbox.detours.chat_AddText = cbox.detours.chat_AddText or chat.AddText
|
||||||
|
local origChatAddText = cbox.detours.chat_AddText
|
||||||
|
|
||||||
|
function chat.AddText(...)
|
||||||
|
local args = {...}
|
||||||
|
|
||||||
|
local hooks = hookTable.PreChatAddText or {}
|
||||||
|
for id, callback in next, hooks do
|
||||||
|
local function catch(err)
|
||||||
|
cbox.utils.RealmError(("Failed to run callback for PreChatAddText hook %q:"):format(id), err)
|
||||||
|
end
|
||||||
|
|
||||||
|
local ok, ret = xpcall(callback, catch, args)
|
||||||
|
if not ok then continue end
|
||||||
|
|
||||||
|
if ret ~= nil then
|
||||||
|
if not istable(ret) then
|
||||||
|
cbox.utils.RealmError(("Got return for PreChatAddText hook %q, but it was not a table."):format(id))
|
||||||
|
|
||||||
|
continue
|
||||||
|
end
|
||||||
|
args = ret
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
origChatAddText(unpack(args))
|
||||||
|
|
||||||
|
hook.Run("OnChatAddText", args)
|
||||||
|
end
|
20
lua/cbox/modules/cl_greentext.lua
Normal file
20
lua/cbox/modules/cl_greentext.lua
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
local ENABLED = CreateClientConVar("cbox_greentext", "1", true, false, "Enables greentext", 0, 1)
|
||||||
|
local COLOR = CreateClientConVar("cbox_greentext_color", "175 201 96", true, false, "Color greentext should be")
|
||||||
|
|
||||||
|
local color_white = Color(255, 255, 255)
|
||||||
|
|
||||||
|
cbox.hooks.Add("PreChatAddText", "cbox.greentext", function(args)
|
||||||
|
if not ENABLED:GetBool() then return end
|
||||||
|
|
||||||
|
for i, arg in ipairs(args) do
|
||||||
|
if isstring(arg) and arg:StartsWith(": >") then
|
||||||
|
args[i] = arg:sub(3)
|
||||||
|
table.insert(args, i, cbox.utils.ParseColorString(COLOR:GetString()))
|
||||||
|
table.insert(args, i, ": ")
|
||||||
|
table.insert(args, i, color_white)
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return args
|
||||||
|
end)
|
36
lua/cbox/modules/cl_timestamps.lua
Normal file
36
lua/cbox/modules/cl_timestamps.lua
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
local ENABLED = CreateClientConVar("cbox_timestamps", "1", true, false, "Enables timestamps", 0, 1)
|
||||||
|
local TRUETIME = CreateClientConVar("cbox_timestamps_24hr", "1", true, false, "Whether timestamps should be 24 hour instead of 12 hour", 0, 1)
|
||||||
|
local SECONDS = CreateClientConVar("cbox_timestamps_seconds", "0", true, false, "Whether timestamps should display seconds", 0, 1)
|
||||||
|
local COLOR = CreateClientConVar("cbox_timestamps_color", "151 211 255", true, false, "Color timestamps should be")
|
||||||
|
|
||||||
|
local color_white = Color(255, 255, 255)
|
||||||
|
|
||||||
|
cbox.hooks.Add("PreChatAddText", "cbox.timestamps", function(args)
|
||||||
|
if not ENABLED:GetBool() then return end
|
||||||
|
|
||||||
|
local use24 = TRUETIME:GetBool()
|
||||||
|
local stamp = ""
|
||||||
|
|
||||||
|
if use24 then
|
||||||
|
stamp = stamp .. os.date("%H:")
|
||||||
|
else
|
||||||
|
stamp = stamp .. os.date("%I:")
|
||||||
|
end
|
||||||
|
|
||||||
|
stamp = stamp .. os.date("%M")
|
||||||
|
|
||||||
|
if SECONDS:GetBool() then
|
||||||
|
stamp = stamp .. os.date(":%S")
|
||||||
|
end
|
||||||
|
|
||||||
|
if not use24 then
|
||||||
|
stamp = stamp .. os.date(" %p")
|
||||||
|
end
|
||||||
|
|
||||||
|
local new_args = {cbox.utils.ParseColorString(COLOR:GetString()), stamp, color_white, " - "}
|
||||||
|
for _, arg in ipairs(args) do
|
||||||
|
new_args[#new_args + 1] = arg
|
||||||
|
end
|
||||||
|
|
||||||
|
return new_args
|
||||||
|
end)
|
33
lua/cbox/sh_init.lua
Normal file
33
lua/cbox/sh_init.lua
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
AddCSLuaFile()
|
||||||
|
|
||||||
|
cbox = cbox or {}
|
||||||
|
|
||||||
|
include("cbox/sh_utils.lua")
|
||||||
|
|
||||||
|
if SERVER then
|
||||||
|
AddCSLuaFile("cbox/cl_hooks.lua")
|
||||||
|
elseif CLIENT then
|
||||||
|
include("cbox/cl_hooks.lua")
|
||||||
|
end
|
||||||
|
|
||||||
|
local module_files = file.Find("cbox/modules/*", "LUA")
|
||||||
|
for _, name in ipairs(module_files) do
|
||||||
|
local full_path = "cbox/modules/" .. name
|
||||||
|
if name:StartsWith("cl_") then
|
||||||
|
if SERVER then
|
||||||
|
AddCSLuaFile(full_path)
|
||||||
|
elseif CLIENT then
|
||||||
|
cbox.utils.RealmPrint("Loading module:", name)
|
||||||
|
include(full_path)
|
||||||
|
end
|
||||||
|
elseif name:StartsWith("sv_") and SERVER then
|
||||||
|
cbox.utils.RealmPrint("Loading module:", name)
|
||||||
|
include(full_path)
|
||||||
|
else
|
||||||
|
if SERVER then
|
||||||
|
AddCSLuaFile(full_path)
|
||||||
|
end
|
||||||
|
cbox.utils.SharedPrint("Loading module:", name)
|
||||||
|
include(full_path)
|
||||||
|
end
|
||||||
|
end
|
126
lua/cbox/sh_utils.lua
Normal file
126
lua/cbox/sh_utils.lua
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
AddCSLuaFile()
|
||||||
|
|
||||||
|
local cbox = cbox
|
||||||
|
|
||||||
|
local MsgC = MsgC
|
||||||
|
local Color = Color
|
||||||
|
local ipairs = ipairs
|
||||||
|
local tonumber = tonumber
|
||||||
|
local tostring = tostring
|
||||||
|
|
||||||
|
local string = string
|
||||||
|
|
||||||
|
local string_Explode = string.Explode
|
||||||
|
|
||||||
|
local color_white = Color(255, 255, 255)
|
||||||
|
|
||||||
|
local utils = {}
|
||||||
|
utils.colors = {
|
||||||
|
BRAND = Color(132, 206, 181),
|
||||||
|
CLIENT = Color(143, 218, 230),
|
||||||
|
SERVER = Color(230, 218, 112),
|
||||||
|
SHARED = Color( 93, 200, 92),
|
||||||
|
ERROR = Color(255, 90, 90),
|
||||||
|
}
|
||||||
|
|
||||||
|
---Parses a string into a color
|
||||||
|
---@param str string Input color as "R G B" or "R G B A"
|
||||||
|
---@param alpha? boolean Whether to parse alpha or not (default false)
|
||||||
|
---@return Color
|
||||||
|
function utils.ParseColorString(str, alpha)
|
||||||
|
alpha = alpha ~= nil and alpha or false
|
||||||
|
|
||||||
|
local split = string_Explode(" ", str)
|
||||||
|
local r = tonumber(split[1]) or 255
|
||||||
|
local g = tonumber(split[2]) or 255
|
||||||
|
local b = tonumber(split[3]) or 255
|
||||||
|
local a = alpha and tonumber(split[4] or 255) or 255
|
||||||
|
|
||||||
|
return Color(r, g, b, a)
|
||||||
|
end
|
||||||
|
|
||||||
|
---Prints to console with realm prefix
|
||||||
|
---@vararg any
|
||||||
|
function utils.RealmPrint(...)
|
||||||
|
local args = {...}
|
||||||
|
for i, arg in ipairs(args) do
|
||||||
|
args[i] = tostring(arg)
|
||||||
|
end
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "[cbox -> ")
|
||||||
|
|
||||||
|
local realm, realm_color = "???", utils.colors.SHARED
|
||||||
|
if CLIENT then
|
||||||
|
realm = "CLIENT"
|
||||||
|
realm_color = utils.colors.CLIENT
|
||||||
|
elseif SERVER then
|
||||||
|
realm = "SERVER"
|
||||||
|
realm_color = utils.colors.SERVER
|
||||||
|
end
|
||||||
|
MsgC(realm_color, realm)
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "] ")
|
||||||
|
|
||||||
|
MsgC(color_white, table.concat(args, " "), "\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
---Prints to console with the "shared" prefix
|
||||||
|
---@vararg any
|
||||||
|
function utils.SharedPrint(...)
|
||||||
|
local args = {...}
|
||||||
|
for i, arg in ipairs(args) do
|
||||||
|
args[i] = tostring(arg)
|
||||||
|
end
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "[cbox -> ")
|
||||||
|
|
||||||
|
MsgC(utils.colors.SHARED, "SHARED")
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "] ")
|
||||||
|
|
||||||
|
MsgC(color_white, table.concat(args, " "), "\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
---Prints to console with realm prefix, but in red
|
||||||
|
---@vararg any
|
||||||
|
function utils.RealmError(...)
|
||||||
|
local args = {...}
|
||||||
|
for i, arg in ipairs(args) do
|
||||||
|
args[i] = tostring(arg)
|
||||||
|
end
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "[cbox -> ")
|
||||||
|
|
||||||
|
local realm, realm_color = "???", utils.colors.SHARED
|
||||||
|
if CLIENT then
|
||||||
|
realm = "CLIENT"
|
||||||
|
realm_color = utils.colors.CLIENT
|
||||||
|
elseif SERVER then
|
||||||
|
realm = "SERVER"
|
||||||
|
realm_color = utils.colors.SERVER
|
||||||
|
end
|
||||||
|
MsgC(realm_color, realm)
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "] ")
|
||||||
|
|
||||||
|
MsgC(utils.colors.ERROR, table.concat(args, " "), "\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
---Prints to console with the "shared" prefix, but in red
|
||||||
|
---@vararg any
|
||||||
|
function utils.SharedError(...)
|
||||||
|
local args = {...}
|
||||||
|
for i, arg in ipairs(args) do
|
||||||
|
args[i] = tostring(arg)
|
||||||
|
end
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "[cbox -> ")
|
||||||
|
|
||||||
|
MsgC(utils.colors.SHARED, "SHARED")
|
||||||
|
|
||||||
|
MsgC(utils.colors.BRAND, "] ")
|
||||||
|
|
||||||
|
MsgC(utils.colors.ERROR, table.concat(args, " "), "\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
cbox.utils = utils
|
Loading…
Reference in a new issue