๖ۣۜJuice Posted June 9, 2020 Share Posted June 9, 2020 This is a more admin-orientated suggestion, but I notice and have actually fallen victim to this, but a lot of staff will use "ulx freeze @" or "ulx jail @" which always ends up accidentally missing the intended target, and hitting an innocent player. What I'm suggesting is this; it allows admins, mods, or anyone who have access to ulx physgunplayers to simply freeze someone with their right mouse button. Although not needed, this can be very helpful in the future and can avoid mistakes. Please consider this. if CLIENT then return end; if not SERVER then return end hook.Remove( "PhysgunDrop", "ulxPlayerDrop") -- We don't need this hook since we have a better hook here. local function isPlayer(ent) return (IsValid(ent) && ent.GetClass && ent:GetClass() == "player") end local function playerPickup( ply, ent ) local access, tag = ULib.ucl.query( ply, "ulx physgunplayer" ) if isPlayer(ent) and access then local restrictions = {} ULib.cmds.PlayerArg.processRestrictions( restrictions, ply, {}, tag and ULib.splitArgs( tag )[ 1 ] ) if restrictions.restrictedTargets == false or (restrictions.restrictedTargets and not table.HasValue( restrictions.restrictedTargets, ent )) then return false end return true end end timer.Simple(0.01, function() hook.Add("PhysgunPickup", "_ply_physgungrab", function(ply, targ) if IsValid(ply) and isPlayer(targ) then if ply:query("ulx physgunplayer") and playerPickup( ply, targ ) then local allowed = ULib.getUser( "@", true, ply ) if isPlayer(allowed) then if allowed.frozen && ply:query( "ulx unfreeze" ) then allowed.phrozen = true; allowed.frozen = false; end allowed._ulx_physgun = {p=targ:GetPos(), b=true, a=ply} end end end end, tonumber(HOOK_HIGH)-2); MsgAll('LOADED! 1') end) hook.Add("PlayerSpawn", "_ply_physgungrab", function(ply) timer.Simple(0.001, function() if IsValid(ply) and ply._ulx_physgun then local admin = ply._ulx_physgun.a if ply._ulx_physgun.b and ply._ulx_physgun.p and IsValid(admin) then ply:SetPos(ply._ulx_physgun.p); ply:SetMoveType(MOVETYPE_NONE); timer.Simple(0.001, function() if not (IsValid(admin) and admin:KeyDown(IN_ATTACK)) then ply:SetMoveType( MOVETYPE_WALK ) ply._ulx_physgun = nil ply:Spawn() end end) end end end) end) local function physgun_freeze( calling_ply, target_ply, should_unfreeze ) local v = target_ply if v:InVehicle() then v:ExitVehicle() end if not should_unfreeze then v:Lock() v.frozen = true v.phrozen = true ulx.setExclusive( v, "frozen" ) else v:UnLock() v.frozen = nil v.phrozen = nil ulx.clearExclusive( v ) end v:DisallowSpawning( not should_unfreeze ) ulx.setNoDie( v, not should_unfreeze ) if v.whipped then v.whipcount = v.whipamt -- Will make it remove end end timer.Simple(0.01, function() hook.Add("OnPhysgunFreeze", "_ulx_physgunfreeze", function(pl, ent) if isPlayer(ent) then ent:SetMoveType( MOVETYPE_WALK ) ent._ulx_physgun = nil end end) hook.Add("PhysgunDrop", "_ulx_physgunfreeze", function(pl, ent) if isPlayer(ent) then ent:SetMoveType( MOVETYPE_WALK ) ent._ulx_physgun = nil end if IsValid(pl) and isPlayer(ent) then if pl:query("ulx freeze") then local isFrozen = ( ent:IsFrozen() or ent.frozen or ent.phrozen ); ent:SetMoveType(pl:KeyDown(IN_ATTACK2) and MOVETYPE_NONE or MOVETYPE_WALK); timer.Simple(0.001, function() if pl:KeyDown(IN_ATTACK2) and not isFrozen then if pl:query( "ulx freeze" ) then ent:SetVelocity(ent:GetVelocity()*-1); ulx.freeze( pl, {ent}, false ); if ent.frozen then ent.phrozen = true end; end elseif pl:query( "ulx unfreeze" ) and isFrozen then if pl:KeyDown(IN_ATTACK2) and pl:query( "ulx freeze" ) then physgun_freeze(pl, ent, true) timer.Simple(0.001, function() physgun_freeze(pl, ent, false) end); else ulx.freeze( pl, {ent}, true ); if not ent.frozen then ent.phrozen = nil end; end end end); else ent:SetMoveType( MOVETYPE_WALK ) end end end); MsgAll('LOADED! 2') end) Link to comment
๖ۣۜJuice Posted June 9, 2020 Author Share Posted June 9, 2020 (edited) Non ULX version (works better, no command echo.) hook.Add("PhysgunPickup", "PhysgunFreeze.PhysgunPickup", function(pl, ent) if ent:IsPlayer() and pl:IsAdmin() then --ent.physAdmin = pl ent:Freeze(true) ent:SetMoveType(MOVETYPE_NOCLIP) return true end end) hook.Add("PhysgunDrop", "PhysgunFreeze.PhysgunDrop", function(pl, ent) if ent:IsPlayer() and pl:IsAdmin() then if pl:KeyPressed(IN_ATTACK2) then return end --ent.physAdmin = nil ent:DropToFloor() ent:Freeze(false) ent:SetMoveType(MOVETYPE_WALK) end end) hook.Add("playerCanChangeTeam", "PhysgunFreeze.playerCanChangeTeam", function(ply) if ply:IsFrozen() then return false, "Unable to change job while frozen." end end) print("PhysFreeze Loaded") Edited June 9, 2020 by ๖ۣۜJuice fixed code Link to comment
Saddy Posted June 10, 2020 Share Posted June 10, 2020 https://forums.ulyssesmod.net/index.php?topic=6173.0 Link to comment
๖ۣۜJuice Posted June 10, 2020 Author Share Posted June 10, 2020 35 minutes ago, Saddy said: https://forums.ulyssesmod.net/index.php?topic=6173.0 Thank you! Original post^ I’ve had these on my PC for like the past 2 years or something, had no clue where they came from. Link to comment
Penny Posted June 11, 2020 Share Posted June 11, 2020 i know nothing about code so when i first looked at it i was thinking i had fucked up my eyes Link to comment
Recommended Posts
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now