Benny/gamemodes/benny/entities/weapons/itemhandler.lua

205 lines
4.5 KiB
Lua

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" )
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() * 72)
local trace = util.TraceHull(tracedef)
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 )
self:ItemR( "Deploy" )
return true
end
function SWEP:Deactive()
local p = self:GetOwner()
self:SetActiveR( NULL )
end
function SWEP:PrimaryAttack()
local p = self:GetOwner()
if self:ItemR() then
self:ItemR("Attack")
elseif SERVER then
local trace = self:ItemCheckTrace()
self:EquipItem( trace.Entity )
end
end
function SWEP:Reload()
if self:ItemR() then
self:ItemR("Reload")
end
end
function SWEP:SecondaryAttack()
local p = self:GetOwner()
if p:KeyPressed(IN_ATTACK2) then
self:DropItem()
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() )
else
print("Tried to make an ent predictable")
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:SetMoveType( MOVETYPE_NONE )
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:SetMoveType( MOVETYPE_VPHYSICS )
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() * 700 )
ep:SetAngleVelocity( Vector( 0, -360*4, 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 self:ItemR() then
self:ItemR("Think")
end
self:SetHoldType( self:ItemR() and "revolver" or "normal" )
else
print( self, "Thinking without an owner." )
end
end
function SWEP:Deploy()
end
function SWEP:Holster()
end