add sborka
This commit is contained in:
161
garrysmod/addons/lvs_base/lua/entities/lvs_item_spikestrip.lua
Normal file
161
garrysmod/addons/lvs_base/lua/entities/lvs_item_spikestrip.lua
Normal file
@@ -0,0 +1,161 @@
|
||||
AddCSLuaFile()
|
||||
|
||||
ENT.Type = "anim"
|
||||
|
||||
ENT.PrintName = "Spike Strip"
|
||||
ENT.Author = "Luna"
|
||||
ENT.Information = "Pops Tires"
|
||||
ENT.Category = "[LVS]"
|
||||
|
||||
ENT.Spawnable = true
|
||||
ENT.AdminOnly = false
|
||||
|
||||
ENT.RenderGroup = RENDERGROUP_BOTH
|
||||
|
||||
ENT.PhysicsSounds = true
|
||||
|
||||
if SERVER then
|
||||
function ENT:SetAttacker( ent ) self._attacker = ent end
|
||||
function ENT:GetAttacker() return self._attacker or self end
|
||||
|
||||
function ENT:SpawnFunction( ply, tr, ClassName )
|
||||
if not tr.Hit then return end
|
||||
|
||||
local ent = ents.Create( ClassName )
|
||||
ent:SetPos( tr.HitPos + tr.HitNormal )
|
||||
ent:Spawn()
|
||||
ent:Activate()
|
||||
ent:SetAttacker( ply )
|
||||
|
||||
return ent
|
||||
end
|
||||
|
||||
function ENT:OnTakeDamage( dmginfo )
|
||||
end
|
||||
|
||||
function ENT:Initialize()
|
||||
self:SetModel( "models/diggercars/shared/spikestrip_static.mdl" )
|
||||
self:PhysicsInit( SOLID_VPHYSICS )
|
||||
self:SetTrigger( true )
|
||||
self:SetCollisionGroup( COLLISION_GROUP_WEAPON )
|
||||
self:AddEFlags( EFL_NO_PHYSCANNON_INTERACTION )
|
||||
end
|
||||
|
||||
function ENT:UpdateFold()
|
||||
end
|
||||
|
||||
function ENT:Think()
|
||||
local PhysObj = self:GetPhysicsObject()
|
||||
|
||||
if IsValid( PhysObj ) and PhysObj:IsMotionEnabled() then
|
||||
if PhysObj:IsAsleep() then
|
||||
PhysObj:EnableMotion( false )
|
||||
end
|
||||
end
|
||||
|
||||
self:UpdateFold()
|
||||
|
||||
self:NextThink( CurTime() )
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
function ENT:Use( ply )
|
||||
end
|
||||
|
||||
function ENT:OnRemove()
|
||||
end
|
||||
|
||||
function ENT:PhysicsCollide( data, physobj )
|
||||
end
|
||||
|
||||
function ENT:StartTouch( entity )
|
||||
end
|
||||
|
||||
function ENT:EndTouch( entity )
|
||||
end
|
||||
|
||||
function ENT:Touch( entity )
|
||||
if not IsValid( entity ) or entity:GetClass() ~= "lvs_wheeldrive_wheel" then return end
|
||||
|
||||
local Destroy = entity:GetVelocity():Length() > 200
|
||||
|
||||
if not Destroy then
|
||||
for i = 1,3 do
|
||||
local L = self:LookupAttachment( "l"..i )
|
||||
local R = self:LookupAttachment( "r"..i )
|
||||
|
||||
local attL = self:GetAttachment( L )
|
||||
local attR = self:GetAttachment( R )
|
||||
|
||||
if not attL or not attR then continue end
|
||||
|
||||
local trace = util.TraceLine( {
|
||||
start = attL.Pos,
|
||||
endpos = attR.Pos,
|
||||
filter = entity,
|
||||
whitelist = true,
|
||||
} )
|
||||
|
||||
if trace.Hit then
|
||||
Destroy = true
|
||||
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if not Destroy then return end
|
||||
|
||||
local T = CurTime()
|
||||
|
||||
if (entity._LastSpikeStripPop or 0) > T then return end
|
||||
|
||||
entity._LastSpikeStripPop = T + 2
|
||||
|
||||
local dmginfo = DamageInfo()
|
||||
dmginfo:SetDamage( entity:GetHP() )
|
||||
dmginfo:SetAttacker( self:GetAttacker() )
|
||||
dmginfo:SetDamageType( DMG_PREVENT_PHYSICS_FORCE )
|
||||
|
||||
entity:TakeDamageInfo( dmginfo )
|
||||
|
||||
local base = entity:GetBase()
|
||||
|
||||
if not IsValid( base ) then return end
|
||||
|
||||
local PhysObj = base:GetPhysicsObject()
|
||||
|
||||
if not IsValid( PhysObj ) then return end
|
||||
|
||||
PhysObj:ApplyTorqueCenter( Vector(0,0, PhysObj:GetVelocity():Length() * 100 * (PhysObj:GetAngleVelocity().z > 0 and 1 or -1) ) )
|
||||
end
|
||||
|
||||
return
|
||||
end
|
||||
|
||||
function ENT:Think()
|
||||
end
|
||||
|
||||
function ENT:Draw( flags )
|
||||
self:DrawModel( flags )
|
||||
end
|
||||
|
||||
local spritemat = Material( "sprites/light_glow02_add" )
|
||||
local spritecolor = Color( 255, 93, 0, 255)
|
||||
|
||||
function ENT:DrawTranslucent( flags )
|
||||
self:DrawModel( flags )
|
||||
|
||||
local size1 = 16 * (math.abs( math.cos( CurTime() * 4 ) ) ^ 10)
|
||||
local size2 = 16 * (math.abs( math.sin( CurTime() * 4 ) ) ^ 10)
|
||||
|
||||
render.SetMaterial( spritemat )
|
||||
render.DrawSprite( self:LocalToWorld( Vector(8,-116.5,10) ), size1, size1, spritecolor )
|
||||
render.DrawSprite( self:LocalToWorld( Vector(-7,-116.5,10) ), size2, size2, spritecolor )
|
||||
render.DrawSprite( self:LocalToWorld( Vector(8,118,10) ), size2, size2, spritecolor )
|
||||
render.DrawSprite( self:LocalToWorld( Vector(-7,118,10) ), size1, size1, spritecolor )
|
||||
end
|
||||
|
||||
function ENT:OnRemove()
|
||||
end
|
||||
Reference in New Issue
Block a user