AddCSLuaFile() SWEP.Base = "weapon_base" SWEP.BennyItemHandler = true SWEP.ViewModel = "models/weapons/c_arms.mdl" SWEP.ViewModelFOV = 74 SWEP.ViewModelFlip = false SWEP.UseHands = true SWEP.WorldModel = "models/weapons/w_pistol.mdl" SWEP.DrawWorldModel = true SWEP.Primary.ClipSize = -1 SWEP.Primary.DefaultClip = 0 SWEP.Primary.Ammo = "none" SWEP.Primary.Automatic = true SWEP.Secondary.ClipSize = -1 SWEP.Secondary.DefaultClip = 0 SWEP.Secondary.Ammo = "none" SWEP.Secondary.Automatic = true function SWEP:SetupDataTables() self:NetworkVar( "Entity", 0, "ActiveR" ) self:NetworkVar( "Entity", 1, "ActiveL" ) self:NetworkVar( "Entity", 2, "DesireR" ) self:NetworkVar( "Entity", 3, "DesireL" ) end function SWEP:ItemR( run ) local active = self:GetActiveR() if run and active:IsValid() then return active.Class[run]( active.Class, active, self ) else return active:IsValid() and active or false end end function SWEP:ItemL( run ) local active = self:GetActiveL() if run and active:IsValid() then active.Class[run]( active.Class, active, self ) else return active:IsValid() and active or false end end function SWEP:Initialize() end local size = 8/2 local tracedef = { mins = Vector( -size, -size, -size ), maxs = Vector( size, size, size ), } function SWEP:ItemCheckTrace() local p = self:GetOwner() p:LagCompensation( true ) tracedef.filter = p tracedef.start = p:EyePos() tracedef.endpos = p:EyePos() + (p:GetAimVector() * 90) local trace = util.TraceHull(tracedef) --print(trace.StartPos:Distance(trace.HitPos)) p:LagCompensation( false ) return trace end function SWEP:SetActive( ent ) local p = self:GetOwner() if ent:GetOwner() != p then return false end if self:GetActiveR():IsValid() then self:Deactive() end self:SetActiveR( ent ) if self:ItemR() then self:ItemR( "Deploy" ) self:ItemR():SetNoDraw( false ) end return true end function SWEP:Deactive() local p = self:GetOwner() if self:ItemR() then self:ItemR( "Holster" ) self:ItemR():SetNoDraw( true ) end self:SetActiveR( NULL ) end function SWEP:PrimaryAttack() local p = self:GetOwner() if self:ItemR() then self:ItemR("Attack") end end function SWEP:Reload() if self:ItemR() then self:ItemR("Reload") end end function SWEP:SecondaryAttack() local p = self:GetOwner() if self:ItemR() then --self:ItemR("Attack2") end end if SERVER then util.AddNetworkString("AEINV_PredictItem") else net.Receive("AEINV_PredictItem", function() local ent = net.ReadEntity() if ent:IsValid() then ent:SetPredictable( net.ReadBool() ) print("Starting prediction on", ent) else print("Tried to make an ent predictable but it wasn't valid.") debug.Trace() end end) end function SWEP:EquipItem( ent ) local p = self:GetOwner() if CLIENT then print("FUCK OFF") debug.Trace() return end if IsValid(ent) and ent.BennyItem then if ent:GetOwner() != NULL then print( ent, "belongs to", ent:GetOwner(), "!! Not equipping." ) return end if p:GetInventory()[ent] then print( ent, "is in", p, "'s inventory!" ) return end print("Pick up", ent) ent:AddEFlags( EFL_KEEP_ON_RECREATE_ENTITIES ) ent:AddEffects( EF_BONEMERGE ) ent:PhysicsInit( SOLID_NONE ) ent:SetMoveType( MOVETYPE_NONE ) ent:SetNoDraw( true ) ent:SetParent( p ) ent:SetOwner( p ) ent:SetPos( vector_origin ) ent:SetAngles( Angle( 0, p:EyeAngles().y, 0 ) ) ent:SetAcquisition( CurTime() ) ent:EmitSound( "ae/items/pickup.ogg", 70, 100, 1, CHAN_STATIC ) --self:SetActive( ent ) local inv = p:GetInventory() inv[ent] = true inv:Sync() net.Start("AEINV_PredictItem") net.WriteEntity( ent ) net.WriteBool( true ) net.Send( p ) end end function SWEP:DropItem() local p = self:GetOwner() local ent = self:GetActiveR() if ent:IsValid() then if CLIENT then print("DropItem called on CLIENT but certain things aren't finished yet.") return end self:Deactive() ent:SetParent( NULL ) ent:SetOwner( NULL ) ent:RemoveEFlags( EFL_KEEP_ON_RECREATE_ENTITIES ) ent:RemoveEffects( EF_BONEMERGE ) ent:PhysicsInit( SOLID_VPHYSICS ) ent:SetMoveType( MOVETYPE_VPHYSICS ) ent:SetCollisionGroup( COLLISION_GROUP_PROJECTILE ) ent:SetNoDraw( false ) ent:SetPos( p:EyePos() + p:GetAimVector() * 0 ) ent:SetAngles( p:EyeAngles() + Angle( 0, 180, 0 ) ) local inv = p:GetInventory() inv[ent] = nil inv:Sync() local ep = ent:GetPhysicsObject() ep:SetVelocity( p:GetAimVector() * 800 ) ep:SetAngleVelocity( Vector( 0, -360*3, 0 ) ) ep:Wake() --net.Start("AEINV_PredictItem") -- net.WriteEntity( ent ) -- net.WriteBool( false ) --net.Send( p ) end end function SWEP:Think() local p = self:GetOwner() if p:IsValid() then if p:KeyDown(IN_WEAPON1) then if SERVER then if !self:ItemR() then local trace = self:ItemCheckTrace() self:EquipItem( trace.Entity ) end end end if p:KeyReleased(IN_WEAPON1) then if SERVER then if self:ItemR() then self:DropItem() end end end if p:KeyPressed(IN_WEAPON2) then end if p:KeyPressed(IN_ALT1) then end if p:KeyPressed(IN_ALT2) then end if p:KeyPressed(IN_GRENADE1) then if self:ItemR() and self:ItemR().Class.Alt then self:ItemR("Alt") end end if p:KeyPressed(IN_GRENADE2) then end if self:ItemR() then self:ItemR("Think") end --self:SetHoldType( self:ItemR() and (self:ItemR().Class.HoldType or "rpg") or "normal" ) else print( self, "Thinking without an owner." ) end end function SWEP:Deploy() end function SWEP:Holster() end