dobrograd-13-06-2022/garrysmod/addons/util-dlib/lua/dlib/modules/server/friendstatus.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

102 lines
No EOL
3.2 KiB
Lua

-- Copyright (C) 2017-2020 DBotThePony
-- Permission is hereby granted, free of charge, to any person obtaining a copy
-- of this software and associated documentation files (the "Software"), to deal
-- in the Software without restriction, including without limitation the rights
-- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-- of the Software, and to permit persons to whom the Software is furnished to do so,
-- subject to the following conditions:
-- The above copyright notice and this permission notice shall be included in all copies
-- or substantial portions of the Software.
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
-- INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
-- PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
-- FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-- DEALINGS IN THE SOFTWARE.
net.pool('DLib.friendstatus')
local IsValid = FindMetaTable('Entity').IsValid
local enums = DLib.Enum('none', 'friend', 'blocked', 'requested')
local table = table
local net = net
local DLib = DLib
DLib.getinfo.Replicate('cl_dlib_steamfriends')
local function friendstatus(len, ply)
if not IsValid(ply) then return end
local amount = net.ReadUInt(8)
ply.DLibFriends = {}
local status = ply.DLibFriends
local reply = {}
for i = 1, amount do
local readPly = net.ReadPlayer()
local readEnum = enums:read()
if IsValid(readPly) then
status[readPly] = readEnum
table.insert(reply, {readPly, readEnum})
end
end
if #reply ~= 0 then
net.Start('DLib.friendstatus')
net.WritePlayer(ply)
net.WriteUInt(#reply, 8)
for i, plyData in ipairs(reply) do
net.WritePlayer(plyData[1])
enums:write(plyData[2])
end
net.SendOmit(ply)
end
end
net.receive('DLib.friendstatus', friendstatus)
local plyMeta = FindMetaTable('Player')
function plyMeta:GetFriendStatus(target)
local status = self.DLibFriends
return status and status[target] or 'none'
end
function plyMeta:IsFriend(target)
local f = self:GetFriendStatus(target)
return f == 'friend' or f == 'requested'
end
function plyMeta:IsFriend2(target)
if not IsValid(self) or not IsValid(target) then return false end
if not self:GetInfoBool('cl_dlib_steamfriends', true) then return false end
if not target:GetInfoBool('cl_dlib_steamfriends', true) then return false end
local f = self:GetFriendStatus(target)
return f == 'friend' or f == 'requested'
end
function plyMeta:IsSteamFriend(target)
local f = self:GetFriendStatus(target)
return f == 'friend' or f == 'requested'
end
function plyMeta:IsSteamFriend2(target)
if not IsValid(self) or not IsValid(target) then return false end
if not self:GetInfoBool('cl_dlib_steamfriends', true) then return false end
if not target:GetInfoBool('cl_dlib_steamfriends', true) then return false end
local f = self:GetFriendStatus(target)
return f == 'friend' or f == 'requested'
end
function plyMeta:IsSteamBlocked(target)
local f = self:GetFriendStatus(target)
return f == 'blocked'
end