93 lines
2.1 KiB
Lua
93 lines
2.1 KiB
Lua
AddCSLuaFile( "shared.lua" )
|
|
AddCSLuaFile( "cl_init.lua" )
|
|
include("shared.lua")
|
|
|
|
function ENT:Mount( ent )
|
|
if IsValid( self._MountEnt ) or ent._IsMounted then return end
|
|
|
|
if ent:IsPlayerHolding() then return end
|
|
local ID = self:LookupAttachment( "muzzle" )
|
|
local Attachment = self:GetAttachment( ID )
|
|
|
|
ent:SetOwner( self )
|
|
ent:SetPos( Attachment.Pos+Attachment.Ang:Up()*ent.CatapultPos or 0 )
|
|
ent:SetAngles( Attachment.Ang )
|
|
ent:SetlvsLockedStatus( true )
|
|
ent:SetHP(ent:GetMaxHP())
|
|
ent:WeaponRestoreAmmo()
|
|
ent:OnMaintenance()
|
|
|
|
|
|
ent._MountOriginalCollision = ent:GetCollisionGroup()
|
|
self._MountEnt = ent
|
|
ent._IsMounted = true
|
|
|
|
ent:SetCollisionGroup( COLLISION_GROUP_WORLD )
|
|
|
|
self._MountConstraint = constraint.Weld( ent, self, 0, 0, 0, false, false )
|
|
|
|
ent:RebuildCrosshairFilterEnts()
|
|
end
|
|
|
|
function ENT:Dismount()
|
|
if not IsValid( self._MountEnt ) or not IsValid( self._MountConstraint ) then return end
|
|
|
|
self._MountConstraint:Remove()
|
|
|
|
self._MountEnt._IsMounted = nil
|
|
|
|
local ent = self._MountEnt
|
|
|
|
timer.Simple(0.1, function()
|
|
if not IsValid( ent ) then return end
|
|
|
|
ent:SetOwner( NULL )
|
|
ent:SetlvsLockedStatus( true )
|
|
if not ent:IsPlayerHolding() then
|
|
ent:SetEngineActive(true)
|
|
ent:GetPhysicsObject():AddVelocity(ent:GetUp()*150)
|
|
ent:GetPhysicsObject():AddVelocity(ent:GetForward()*1500)
|
|
end
|
|
end)
|
|
|
|
timer.Simple(1,function()
|
|
if ent._MountOriginalCollision then
|
|
ent:SetCollisionGroup( ent._MountOriginalCollision )
|
|
|
|
ent._MountOriginalCollision = nil
|
|
end
|
|
|
|
self._MountEnt.CrosshairFilterEnts = nil
|
|
|
|
self._MountEnt = nil
|
|
end)
|
|
end
|
|
|
|
function ENT:OnCollision( data, physobj )
|
|
local ent = data.HitEntity
|
|
|
|
if not IsValid( ent ) or not (ent.LVSUAV and ent.CatapultLaunchable) then return end
|
|
|
|
timer.Simple(0, function()
|
|
if not IsValid( self ) or not IsValid( ent ) then return end
|
|
|
|
self:Mount( ent )
|
|
end)
|
|
end
|
|
|
|
function ENT:OnTick()
|
|
if not IsValid( self._MountEnt ) or not self._MountEnt:IsPlayerHolding() then return end
|
|
|
|
self:Dismount()
|
|
end
|
|
|
|
function ENT:Use( ply )
|
|
if not IsValid( self._MountEnt ) then return end
|
|
|
|
self:Dismount()
|
|
end
|
|
|
|
function ENT:OnRemove()
|
|
self:Dismount()
|
|
end
|