mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
157 lines
3.5 KiB
Lua
157 lines
3.5 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 sam = sam
|
||
|
|
local netstream = sam.netstream
|
||
|
|
|
||
|
|
do
|
||
|
|
local connected_players = {}
|
||
|
|
|
||
|
|
function sam.player.kick_id(id, reason)
|
||
|
|
reason = sam.isstring(reason) and reason or sam.language.get("default_reason")
|
||
|
|
reason = reason:sub(1, 400)
|
||
|
|
game.KickID(id, reason)
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.player.is_connected(steamid)
|
||
|
|
return connected_players[steamid] and true or false
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.get_connected_players()
|
||
|
|
return connected_players
|
||
|
|
end
|
||
|
|
|
||
|
|
gameevent.Listen("player_connect")
|
||
|
|
hook.Add("player_connect", "SAM.ConnectedPlayers", function(data)
|
||
|
|
connected_players[data.networkid] = true
|
||
|
|
end)
|
||
|
|
|
||
|
|
gameevent.Listen("player_disconnect")
|
||
|
|
hook.Add("player_disconnect", "SAM.ConnectedPlayers", function(data)
|
||
|
|
connected_players[data.networkid] = nil
|
||
|
|
end)
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.player.set_exclusive(ply, reason)
|
||
|
|
ply.sam_exclusive_reason = reason
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.player.get_exclusive(ply, admin)
|
||
|
|
local reason = ply.sam_exclusive_reason
|
||
|
|
if reason then
|
||
|
|
if ply == admin then
|
||
|
|
return "You are " .. reason .. "!"
|
||
|
|
else
|
||
|
|
return ply:Name() .. " is " .. reason .. "!"
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local hide_weapons = function(ply, should_hide)
|
||
|
|
for _, v in pairs(ply:GetWeapons()) do
|
||
|
|
v:SetNoDraw(should_hide)
|
||
|
|
end
|
||
|
|
|
||
|
|
local physgun_beams = ents.FindByClassAndParent("physgun_beam", ply)
|
||
|
|
if physgun_beams then
|
||
|
|
for i = 1, #physgun_beams do
|
||
|
|
physgun_beams[i]:SetNoDraw(should_hide)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local cloak = function(ply, should_cloak)
|
||
|
|
ply:SetNoDraw(should_cloak)
|
||
|
|
ply:DrawWorldModel(not should_cloak)
|
||
|
|
ply:SetRenderMode(should_cloak and RENDERMODE_TRANSALPHA or RENDERMODE_NORMAL)
|
||
|
|
ply:Fire("alpha", should_cloak and 0 or 255, 0)
|
||
|
|
ply:sam_set_nwvar("cloaked", should_cloak)
|
||
|
|
hide_weapons(ply, should_cloak)
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.player.cloak(ply)
|
||
|
|
cloak(ply, true)
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.player.uncloak(ply)
|
||
|
|
cloak(ply, false)
|
||
|
|
end
|
||
|
|
|
||
|
|
hook.Add("PlayerSpawn", "SAM.CloakPlayer", function(ply)
|
||
|
|
if ply:sam_get_nwvar("cloaked") then
|
||
|
|
cloak(ply, true)
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
|
||
|
|
hook.Add("PlayerSwitchWeapon", "SAM.CloakPlayer", function(ply)
|
||
|
|
if ply:sam_get_nwvar("cloaked") then
|
||
|
|
timer.Create("SAM.HideWeapons" .. ply:SteamID(), 0, 1, function()
|
||
|
|
if IsValid(ply) and ply:sam_get_nwvar("cloaked") then
|
||
|
|
hide_weapons(ply, true)
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
end
|
||
|
|
end)
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local call_hook = function(ply)
|
||
|
|
local can_spawn = hook.Call("SAM.CanPlayerSpawn", nil, ply)
|
||
|
|
if can_spawn ~= nil then
|
||
|
|
return can_spawn
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
local spawn_hooks = {
|
||
|
|
"Effect", "NPC",
|
||
|
|
"Object", "Prop",
|
||
|
|
"Ragdoll", "SENT",
|
||
|
|
"SWEP", "Vehicle"
|
||
|
|
}
|
||
|
|
|
||
|
|
for k, v in ipairs(spawn_hooks) do
|
||
|
|
hook.Add("PlayerSpawn" .. v, "SAM.CanPlayerSpawn", call_hook)
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
do
|
||
|
|
local persistent_data = {}
|
||
|
|
|
||
|
|
function sam.player.set_pdata(ply, key, value)
|
||
|
|
local ply_pdata = persistent_data[ply:AccountID()]
|
||
|
|
if ply_pdata then
|
||
|
|
ply_pdata[key] = value
|
||
|
|
else
|
||
|
|
persistent_data[ply:AccountID()] = {
|
||
|
|
[key] = value
|
||
|
|
}
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.player.get_pdata(ply, key, default)
|
||
|
|
local ply_pdata = persistent_data[ply:AccountID()]
|
||
|
|
if ply_pdata then
|
||
|
|
local value = ply_pdata[key]
|
||
|
|
if value ~= nil then
|
||
|
|
return value
|
||
|
|
end
|
||
|
|
end
|
||
|
|
return default
|
||
|
|
end
|
||
|
|
end
|
||
|
|
|
||
|
|
function sam.player.play_sound(ply, sound)
|
||
|
|
netstream.Start(ply, "PlaySound", sound)
|
||
|
|
end
|
||
|
|
|
||
|
|
--[[/*953ed60e46bbecc33df4049c215b53951c0dfcb21fbe82bbeb63c201211c72dc*/]]
|