mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
Upload
This commit is contained in:
121
addons/sam-master/lua/sam/command/arguments/steamid.lua
Normal file
121
addons/sam-master/lua/sam/command/arguments/steamid.lua
Normal file
@@ -0,0 +1,121 @@
|
||||
--[[
|
||||
| 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, command = sam, sam.command
|
||||
|
||||
local cached_ranks = {}
|
||||
local targeting_offline = {}
|
||||
|
||||
local check_steamid = function(steamid)
|
||||
if not sam.is_steamid(steamid) then
|
||||
if sam.is_steamid64(steamid) then
|
||||
return util.SteamIDFrom64(steamid)
|
||||
else
|
||||
return nil
|
||||
end
|
||||
end
|
||||
|
||||
return steamid
|
||||
end
|
||||
|
||||
local can_target_steamid_callback = function(data, promise)
|
||||
local ply, steamid = promise.ply, promise.steamid
|
||||
|
||||
if not data or sam.ranks.can_target(promise.rank, data.rank) then
|
||||
promise:resolve({steamid})
|
||||
elseif IsValid(ply) then
|
||||
ply:sam_send_message("cant_target_player", {
|
||||
S = steamid
|
||||
})
|
||||
end
|
||||
|
||||
targeting_offline[ply] = nil
|
||||
cached_ranks[steamid] = data ~= nil and data or false
|
||||
end
|
||||
|
||||
command.new_argument("steamid")
|
||||
:OnExecute(function(argument, input, ply, _, result, i)
|
||||
local steamid = check_steamid(input)
|
||||
if not steamid then
|
||||
ply:sam_send_message("invalid", {
|
||||
S = "steamid/steamid64", S_2 = input
|
||||
})
|
||||
return false
|
||||
end
|
||||
|
||||
if argument.allow_higher_target then
|
||||
result[i] = steamid
|
||||
return
|
||||
end
|
||||
|
||||
local promise = sam.Promise.new()
|
||||
promise.ply = ply
|
||||
promise.rank = ply:sam_getrank()
|
||||
promise.steamid = steamid
|
||||
|
||||
local target = player.GetBySteamID(steamid)
|
||||
if sam.isconsole(ply) then
|
||||
promise:resolve({steamid})
|
||||
elseif target then
|
||||
if ply:CanTarget(target) then
|
||||
promise:resolve({steamid, target})
|
||||
else
|
||||
ply:sam_send_message("cant_target_player", {
|
||||
S = steamid
|
||||
})
|
||||
end
|
||||
elseif cached_ranks[steamid] ~= nil then
|
||||
can_target_steamid_callback(cached_ranks[steamid], promise)
|
||||
else
|
||||
targeting_offline[ply] = true
|
||||
|
||||
sam.SQL.FQuery([[
|
||||
SELECT
|
||||
`rank`
|
||||
FROM
|
||||
`sam_players`
|
||||
WHERE
|
||||
`steamid` = {1}
|
||||
]], {steamid}, can_target_steamid_callback, true, promise)
|
||||
end
|
||||
|
||||
result[i] = promise
|
||||
end)
|
||||
:Menu(function(set_result, body, buttons, argument)
|
||||
local steamid_entry = buttons:Add("SAM.TextEntry")
|
||||
steamid_entry:SetTall(25)
|
||||
steamid_entry:SetUpdateOnType(true)
|
||||
steamid_entry:SetPlaceholder("steamid/steamid64")
|
||||
|
||||
steamid_entry:SetCheck(function(steamid)
|
||||
steamid = check_steamid(steamid)
|
||||
set_result(steamid)
|
||||
return steamid or false
|
||||
end)
|
||||
|
||||
return steamid_entry
|
||||
end)
|
||||
:End()
|
||||
|
||||
timer.Create("SAM.ClearCachedRanks", 60 * 2.5, 0, function()
|
||||
table.Empty(cached_ranks)
|
||||
end)
|
||||
|
||||
hook.Add("SAM.ChangedSteamIDRank", "RemoveIfCached", function(steamid)
|
||||
cached_ranks[steamid] = nil
|
||||
end)
|
||||
|
||||
hook.Add("SAM.CanRunCommand", "StopIfTargetingOffline", function(ply)
|
||||
if targeting_offline[ply] then
|
||||
return false
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user