function ulx.silence( calling_ply, target_plys, should_perm ) if should_perm then for k,v in pairs( target_plys ) do if ( v:GetPData( "silenced" ) and v:GetPData( "silenced" ) == "true" ) then ULib.tsayError( calling_ply, "This player is already perma-silenced!" ) elseif ( not v:GetPData( "silenced" ) or v:GetPData( "silenced" ) ~= "true" ) then if ( v:GetPData( "silenced_temp" ) and v:GetPData( "silenced_temp" ) == "true" ) then v:RemovePData( "silenced_temp" ) v:SetPData( "silenced", "true" ) ulx.fancyLogAdmin( calling_ply, "#A permanently silenced #T", target_plys ) else v:SetPData( "silenced", "true" ) ulx.fancyLogAdmin( calling_ply, "#A permanently silenced #T", target_plys ) end end end elseif ( not should_perm ) then for k,v in pairs( target_plys ) do if ( v:GetPData( "silenced_temp" ) and v:GetPData( "silenced_temp" ) == "true" ) then ULib.tsayError( calling_ply, "This player is already temp-silenced!" ) elseif ( not v:GetPData( "silenced_temp" ) or v:GetPData( "silenced_temp" ) ~= "true" ) then if ( v:GetPData( "silenced" ) and v:GetPData( "silenced" ) == "true" ) then v:RemovePData( "silenced" ) v:SetPData( "silenced_temp", "true" ) ulx.fancyLogAdmin( calling_ply, "#A silenced #T", target_plys ) elseif ( not v:GetPData( "silenced" ) or v:GetPData( "silenced" ) ~= "true" ) then v:SetPData( "silenced_temp", "true" ) ulx.fancyLogAdmin( calling_ply, "#A silenced #T", target_plys ) end end end end end local silence = ulx.command( "Chat", "ulx silence", ulx.silence, "!silence" ) silence:addParam{ type=ULib.cmds.PlayersArg } silence:addParam{ type=ULib.cmds.BoolArg, invisible=true } silence:defaultAccess( ULib.ACCESS_ADMIN ) silence:help( "Gags and mutes a player\npsilence - persists between mapchanges/server restarts." ) silence:setOpposite ( "ulx psilence", { _, _, true }, "!psilence" ) function ulx.unsilence( calling_ply, target_plys ) for k,v in pairs( target_plys ) do if ( v:GetPData( "silenced_temp" ) and v:GetPData( "silenced_temp" ) == "true" ) then v:RemovePData( "silenced_temp" ) end if ( v:GetPData( "silenced" ) and v:GetPData( "silenced" ) == "true" ) then v:RemovePData( "silenced" ) end end ulx.fancyLogAdmin( calling_ply, "#A un-silenced #T", target_plys ) end local unsilence = ulx.command( "Chat", "ulx unsilence", ulx.unsilence, "!unsilence" ) unsilence:addParam{ type=ULib.cmds.PlayersArg } unsilence:defaultAccess( ULib.ACCESS_ADMIN ) unsilence:help( "Gags and mutes a player.\npsilence - persists between mapchanges/server restarts." ) function ulx.printsilenced( calling_ply ) s_temp = {} for k,v in pairs( player.GetAll() ) do if v:GetPData( "silenced_temp" ) == "true" then table.insert( s_temp, v:Nick() ) end end local temptable = table.concat( s_temp, ", " ) ulx.fancyLog( {calling_ply}, "Silenced: #s ", temptable ) silence = {} for k,v in pairs( player.GetAll() ) do if v:GetPData( "silenced" ) == "true" then table.insert( silence, v:Nick() ) end end local p_silence = table.concat( silence, ", " ) ulx.fancyLog( {calling_ply}, "Perma-Silenced: #s ", p_silence ) end local printsilenced = ulx.command( "Chat", "ulx printsilenced", ulx.printsilenced, "!printsilenced", true ) printsilenced:defaultAccess( ULib.ACCESS_ADMIN ) printsilenced:help( "Prints players who are silenced and perma-silenced." ) function silencedisconnect( ply ) if ( ply:GetPData( "silenced_temp" ) and ply:GetPData( "silenced_temp" ) == "true" ) then ply:RemovePData( "silenced_temp" ) end if ply:GetPData( "silenced" ) and ply:GetPData( "silenced" ) == "true" then for k,v in pairs( player.GetAll() ) do if v:IsAdmin() or v:IsUserGroup( "operator" ) then ULib.tsayError( v, ply:Nick() .. " has disconnected and is silenced!" ) end end end end hook.Add( "PlayerDisconnected", "disconnectedprint", silencedisconnect ) function silenceUserAuthed( ply ) if ply:GetPData( "silenced" ) and ply:GetPData( "silenced" ) == "true" then for k,v in pairs( player.GetAll() ) do if v:IsAdmin() or v:IsUserGroup( "operator" ) then ULib.tsayError( v, ply:Nick() .. " has connected and is silenced!" ) end end end if ply:GetPData( "silenced_temp" ) and ply:GetPData( "silenced_temp" ) == "true" then ply:RemovePData( "silenced_temp" ) --failsafe end end hook.Add( "PlayerAuthed", "silenceduserauthed", silenceUserAuthed ) local function silencedchat( ply ) if ( ply:GetPData( "silenced_temp" ) and ply:GetPData( "silenced_temp" ) == "true" ) or ( ply:GetPData( "silenced" ) and ply:GetPData( "silenced" ) == "true" ) then return "" end end hook.Add( "PlayerSay", "silencedplayerchat", silencedchat ) --[[ local function ulxsilencechathook( text, tOnly, listener, talker ) if ( talker:GetPData( "silenced_temp" ) and talker:GetPData( "silenced_temp" ) == "true" ) or ( talker:GetPData( "silenced" ) and talker:GetPData( "silenced" ) == "true" ) then return false end end hook.Add("PlayerCanSeePlayersChat", "ulxsilencechathooks", ulxsilencechathook ) --]] local function ulxsilencegaghook( listener, talker ) if ( talker:GetPData( "silenced_temp" ) and talker:GetPData( "silenced_temp" ) == "true" ) or ( talker:GetPData( "silenced" ) and talker:GetPData( "silenced" ) == "true" ) then return false end end hook.Add("PlayerCanHearPlayersVoice", "ulxsilencegaghooks", ulxsilencegaghook )