Author Topic: ULX Physgun  (Read 23292 times)

0 Members and 1 Guest are viewing this topic.

Offline LuaTenshi

  • Hero Member
  • *****
  • Posts: 545
  • Karma: 47
  • Just your ordinary moon angel!
    • Mirai.Red
ULX Physgun
« on: April 05, 2013, 02:08:35 PM »
I feel that the physgun has become quite outdated so I am aiming to change it, as you can see currently this is very simple and lets admins freeze players like they would props.

Code: [Select]
-- Last Updated On JUN 21ST, 2015 --
-- I need to recode allot of my old stuff, maybe I'll release a pack someday (#valvetime). --

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)

How to install: Put it in "lua/autorun/" make sure that its a ".lua" file.

Current Error: Players can still kill them selves while being held.

I plan this to be expanded with new and innovative ideas, if you have an idea but don't know how to code feel free to post any way because I am sure that some one who does know how to code may pick it up.

(This is not a release because it is not done yet. I will make a release post when its done or close to being done.)
(This does work tho.)

---------------------------------------------------------------
P.S: A big thanks to CapsAdmin and Python1320. (You see I got the idea from QBox.)
« Last Edit: June 10, 2017, 08:43:27 PM by LuaTenshi »
I cry every time I see that I am not a respected member of this community.

Offline Joram

  • Newbie
  • *
  • Posts: 4
  • Karma: -1
Re: ULX Physgun
« Reply #1 on: August 14, 2014, 10:46:24 AM »
Excuse me if I am grave digging here but is there a way to add a usergroup and command to it?

An Error Has Occurred!

array_keys(): Argument #1 ($array) must be of type array, null given