Files
VnUtest/garrysmod/addons/swbombs/lua/entities/sw_uav_catapult/init.lua
2026-03-31 10:27:04 +03:00

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