mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
Upload
This commit is contained in:
128
addons/sam-master/lua/sam/command/cl_command.lua
Normal file
128
addons/sam-master/lua/sam/command/cl_command.lua
Normal file
@@ -0,0 +1,128 @@
|
||||
--[[
|
||||
| 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 sam = sam
|
||||
local command = sam.command
|
||||
|
||||
local get_syntax = function(args, cmd_args, cmd_str)
|
||||
for i = 1, #cmd_args do
|
||||
cmd_str = cmd_str .. " "
|
||||
|
||||
local cmd_arg = cmd_args[i]
|
||||
local arg = args[i]
|
||||
|
||||
if arg == "" then
|
||||
arg = nil
|
||||
end
|
||||
|
||||
local optional = cmd_arg.optional
|
||||
local c_1, c_2 = "<", ">"
|
||||
if optional then
|
||||
c_1, c_2 = "[", "]"
|
||||
end
|
||||
|
||||
cmd_str = cmd_str .. (arg and "\"" or c_1)
|
||||
|
||||
cmd_str = cmd_str .. (arg or cmd_arg.hint or cmd_arg.name)
|
||||
|
||||
if not arg then
|
||||
local default = cmd_arg.default
|
||||
if default then
|
||||
cmd_str = cmd_str .. " = " .. tostring(default)
|
||||
end
|
||||
end
|
||||
|
||||
cmd_str = cmd_str .. (arg and "\"" or c_2)
|
||||
end
|
||||
|
||||
return cmd_str
|
||||
end
|
||||
|
||||
--
|
||||
-- Auto Complete
|
||||
--
|
||||
concommand.Add("sam", function(_, _, _, text)
|
||||
LocalPlayer():ConCommand("sam_run " .. text)
|
||||
end, function(_, text)
|
||||
local ply = LocalPlayer()
|
||||
local result = {}
|
||||
|
||||
local new_arg = text:EndsWith(" ")
|
||||
local args = sam.parse_args(text)
|
||||
|
||||
local cmd_name = (args[1] or ""):lower()
|
||||
local cmd = command.get_command(cmd_name)
|
||||
|
||||
if not cmd or (#args == 1 and not new_arg) then
|
||||
local commands = command.get_commands()
|
||||
|
||||
for _, v in ipairs(commands) do
|
||||
local name = v.name
|
||||
if name:find(cmd_name, nil, true) and ply:HasPermission(name) then
|
||||
table.insert(result, "sam " .. name)
|
||||
end
|
||||
end
|
||||
|
||||
return result
|
||||
end
|
||||
|
||||
if not ply:HasPermission(cmd_name) then return end
|
||||
|
||||
table.remove(args, 1)
|
||||
|
||||
if new_arg then
|
||||
local syntax = get_syntax(args, cmd.args, "sam " .. cmd.name)
|
||||
if #args == 0 then
|
||||
print(syntax)
|
||||
end
|
||||
table.insert(result, syntax)
|
||||
return result
|
||||
end
|
||||
|
||||
local arg_index = new_arg and #args + 1 or #args
|
||||
|
||||
local cmd_args = cmd.args
|
||||
local cmd_args_n = #cmd_args
|
||||
if cmd_args_n == 0 then return end
|
||||
|
||||
if arg_index >= cmd_args_n then
|
||||
arg_index = cmd_args_n
|
||||
|
||||
if cmd.get_rest_args then
|
||||
local arg = table.concat(args, " ", cmd_args_n)
|
||||
if arg ~= "" then
|
||||
args[cmd_args_n] = arg
|
||||
for i = cmd_args_n + 1, #args do
|
||||
args[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local arguments = command.get_arguments()
|
||||
local cmd_arg = cmd_args[arg_index]
|
||||
local func = arguments[cmd_arg.name].auto_complete
|
||||
if func then
|
||||
func(cmd_arg, result, args[arg_index] or "")
|
||||
end
|
||||
|
||||
local cmd_str = "sam " .. cmd_name .. " "
|
||||
if arg_index - 1 > 0 then
|
||||
cmd_str = cmd_str .. "\"" .. table.concat(args, "\" ", 1, arg_index - 1) .. "\" "
|
||||
end
|
||||
|
||||
for k, v in ipairs(result) do
|
||||
result[k] = cmd_str .. "\"" .. v .. "\""
|
||||
end
|
||||
|
||||
return result
|
||||
end)
|
||||
Reference in New Issue
Block a user