Files
wnsrc/lua/sam/sh_lang.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

184 lines
4.0 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/
--]]
if SAM_LOADED then return end
local lang = sam.load_file("sam_language.lua", "sh")
local original = lang
if not isstring(lang) then
lang = "english"
end
local lang_path = "sam_languages/" .. lang .. ".lua"
if not file.Exists(lang_path, "LUA") then
lang_path = "sam_languages/english.lua"
if not file.Exists(lang_path, "LUA") then
-- maybe they deleted english lang????
sam.print("SAM is broken!")
sam.print("Language '" .. tostring(original) .. "' doesn't exist and 'english' language file doesn't exist")
return false
else
sam.print("Language '" .. tostring(original) .. "' doesn't exist falling back to english")
end
end
local Language = sam.load_file(lang_path, "sh_")
local sub, find = string.sub, string.find
local white_color = Color(236, 240, 241)
do
local args = {}
function sam.add_message_argument(arg, func)
if isstring(arg) and isfunction(func) then
args[arg] = func
end
end
local insert = function(t, v)
t.__cnt = t.__cnt + 1
t[t.__cnt] = v
end
function sam.format_message(msg, tbl, result, result_n)
msg = Language[msg] or msg
result = result or {}
result.__cnt = result_n or 0
local pos = 0
local start, _end, arg, arg2 = nil, 0, nil, nil
while true do
start, _end, arg, arg2 = find(msg, "%{ *([%w_%#]+)([^%{}]-) *%}", _end)
if not start then break end
if pos ~= start then
local txt = sub(msg, pos, start - 1)
if txt ~= "" then
insert(result, white_color)
insert(result, txt)
end
end
local ma = args[sub(arg, 1, 1)]
if not ma then
insert(result, "{" .. arg .. " " .. arg2 .. "}")
else
ma(result, tbl and tbl[arg], arg, unpack(arg2:Trim():Split(" ")))
end
pos = _end + 1
end
if pos <= #msg then
insert(result, white_color)
insert(result, sub(msg, pos))
end
return result
end
/*
Admin
*/
sam.add_message_argument("A", function(result, admin)
if sam.isconsole(admin) then
-- we need to show that it's the real console!!!!!
insert(result, Color(236, 240, 241))
insert(result, "*")
insert(result, Color(13, 130, 223))
insert(result, "Console")
else
if sam.type(admin) == "Player" then
if CLIENT and LocalPlayer() == admin then
insert(result, Color(255, 215, 0))
insert(result, sam.language.get("You"))
else
insert(result, Color(13, 130, 223))
insert(result, admin:Name())
end
else
insert(result, Color(13, 130, 223))
insert(result, admin)
end
end
end)
/*
Target(s)
*/
sam.add_message_argument("T", function(result, targets)
for k, v in ipairs(sam.get_targets_list(targets)) do
insert(result, v)
end
end)
/*
Value(s)
*/
sam.add_message_argument("V", function(result, value)
insert(result, Color(0, 230, 64))
insert(result, tostring(value))
end)
/*
Text(s)
*/
sam.add_message_argument("S", function(result, text, _, color)
insert(result, sam.get_color(color) or white_color)
insert(result, tostring(text))
end)
-- https://gist.github.com/fernandohenriques/12661bf250c8c2d8047188222cab7e28
local hex_rgb = function(hex)
local r, g, b
if #hex == 4 then
r, g, b = tonumber(hex:sub(2, 2), 16) * 17, tonumber(hex:sub(3, 3), 16) * 17, tonumber(hex:sub(4, 4), 16) * 17
else
r, g, b = tonumber(hex:sub(2, 3), 16), tonumber(hex:sub(4, 5), 16), tonumber(hex:sub(6, 7), 16)
end
if not r or not g or not b then
return color_white
end
return Color(r, g, b)
end
/*
Colored Text(s)
*/
sam.add_message_argument("#", function(result, _, color, ...)
local text = table.concat({...}, " ")
insert(result, hex_rgb(color))
insert(result, text)
end)
end
function sam.get_message(msg)
msg = Language[msg]
if not msg then
return false
else
return {Color(236, 240, 241), msg}
end
end
function sam.language.get(key)
return Language[key]
end
function sam.language.Add(key, value)
Language[key] = value
end