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

179 lines
5.4 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
AddCSLuaFile()
DEFINE_BASECLASS( "sw_base_bomb_v3" )
local ImpSnds = {}
ImpSnds[1] = "sw/bomb/impact_1.wav"
ImpSnds[2] = "sw/bomb/impact_2.wav"
ImpSnds[3] = "sw/bomb/impact_3.wav"
local WtrImpSnds = {}
WtrImpSnds[1] = "sw/bomb/impact_wtr_1.wav"
WtrImpSnds[2] = "sw/bomb/impact_wtr_2.wav"
WtrImpSnds[3] = "sw/bomb/impact_wtr_3.wav"
local DbrSnds = {}
DbrSnds[1] = "sw/bomb/debris_1.wav"
DbrSnds[2] = "sw/bomb/debris_2.wav"
DbrSnds[3] = "sw/bomb/debris_3.wav"
DbrSnds[4] = "sw/bomb/debris_4.wav"
local ExpSnds = {}
ExpSnds[1] = "sw/explosion/exp_sml_cls_1.wav"
ExpSnds[2] = "sw/explosion/exp_sml_cls_2.wav"
ExpSnds[3] = "sw/explosion/exp_sml_cls_3.wav"
ExpSnds[4] = "sw/explosion/exp_sml_cls_4.wav"
ExpSnds[5] = "sw/explosion/exp_sml_cls_5.wav"
ExpSnds[6] = "sw/explosion/exp_sml_cls_6.wav"
ExpSnds[7] = "sw/explosion/exp_sml_cls_7.wav"
ExpSnds[8] = "sw/explosion/exp_sml_cls_8.wav"
local FarExpSnds = {}
FarExpSnds[1] = "sw/explosion/exp_sml_dst_1.wav"
FarExpSnds[2] = "sw/explosion/exp_sml_dst_2.wav"
FarExpSnds[3] = "sw/explosion/exp_sml_dst_3.wav"
FarExpSnds[4] = "sw/explosion/exp_sml_dst_4.wav"
FarExpSnds[5] = "sw/explosion/exp_sml_dst_5.wav"
FarExpSnds[6] = "sw/explosion/exp_sml_dst_6.wav"
FarExpSnds[7] = "sw/explosion/exp_sml_dst_7.wav"
FarExpSnds[8] = "sw/explosion/exp_sml_dst_8.wav"
local DstExpSnds = {}
DstExpSnds[1] = "sw/explosion/exp_sml_far_1.wav"
DstExpSnds[2] = "sw/explosion/exp_sml_far_2.wav"
DstExpSnds[3] = "sw/explosion/exp_sml_far_3.wav"
DstExpSnds[4] = "sw/explosion/exp_sml_far_4.wav"
DstExpSnds[5] = "sw/explosion/exp_sml_far_5.wav"
DstExpSnds[6] = "sw/explosion/exp_sml_far_6.wav"
DstExpSnds[7] = "sw/explosion/exp_sml_far_7.wav"
DstExpSnds[8] = "sw/explosion/exp_sml_far_8.wav"
local WtrExpSnds = {}
WtrExpSnds[1] = "sw/explosion/exp_trp_1.wav"
WtrExpSnds[2] = "sw/explosion/exp_trp_2.wav"
WtrExpSnds[3] = "sw/explosion/exp_trp_3.wav"
--Main info
ENT.Type = "anim"
ENT.Spawnable = true
ENT.AdminSpawnable = false
ENT.AdminOnly = false
ENT.PrintName = "ТМ-62"
ENT.Author = "Shermann Wolf"
ENT.Contact = "shermannwolf@gmail.com"
ENT.Category = "SW Bombs V3 | RUS"
ENT.Editable = true
ENT.SWBombV3 = true
--Visual
ENT.Model = "models/sw/rus/bombs/tm62.mdl"
ENT.Effect = "ins_rpg_explosion"
ENT.EffectAir = "ins_rpg_explosion"
ENT.EffectWater = "ins_water_explosion"
ENT.Decal = "scorch_1kg"
ENT.AngEffect = true
--Sounds
ENT.ImpactSound = table.Random(ImpSnds)
ENT.WaterImpactSoundSound = table.Random(WtrImpSnds)
ENT.DebrisSound = table.Random(DbrSnds)
ENT.WhistleSound = "sw/bomb/whistle.wav"
ENT.ExplosionSound = table.Random(ExpSnds)
ENT.FarExplosionSound = table.Random(FarExpSnds)
ENT.DistExplosionSound = table.Random(DstExpSnds)
ENT.WaterExplosionSound = table.Random(WtrExpSnds)
ENT.WaterFarExplosionSound = nil
--Physics
ENT.TraceLength = 50
ENT.ImpactSpeed = 25
ENT.ImpactDepth = 2
ENT.Mass = 1
ENT.Durability = 100
--Explosion
ENT.ExplosionDamage = 1000
ENT.ExplosionRadius = 50
ENT.BlastRadius = 200
ENT.FragDamage = 150
ENT.FragRadius = 300
ENT.FragCount = 0
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:SetAngles( Angle(0, ply:EyeAngles().y, 0 ) )
ent:Spawn()
ent:Activate()
ent.ImpactSound = table.Random(ImpSnds)
ent.WaterImpactSoundSound = table.Random(WtrImpSnds)
ent.DebrisSound = table.Random(DbrSnds)
ent.ExplosionSound = table.Random(ExpSnds)
ent.FarExplosionSound = table.Random(FarExpSnds)
ent.DistExplosionSound = table.Random(DstExpSnds)
ent.WaterExplosionSound = table.Random(WtrExpSnds)
return ent
end
function ENT:Initialize()
self:SetModel(self.Model)
self:SetSolid(SOLID_VPHYSICS)
self:PhysicsInit(SOLID_VPHYSICS)
self:SetCollisionGroup( COLLISION_GROUP_NONE )
self:PhysWake()
local pObj = self:GetPhysicsObject()
pObj:SetMass( self.Mass )
pObj:EnableGravity( false )
pObj:EnableMotion( true )
pObj:EnableDrag( false )
self:StartMotionController()
self:PhysWake()
self.InGround = false
self.InEntity = false
self.Exploded = false
self.Buried = false
self.Armed = false
self.CurDurability = self.Durability
end
function ENT:PhysicsCollide( data, physobj )
end
function ENT:OnTick()
if self.Armed and not self.Used then
timer.Simple(3, function()
if IsValid(self) then
self:SetPos(self:GetPos()-self:GetUp()*2)
self:GetPhysicsObject():EnableMotion(false)
self.Buried = true
end
end)
self.Used = true
end
if self.Armed and self.Buried then
for k, v in pairs(ents.FindInSphere(self:LocalToWorld(self:OBBCenter()),self.ExplosionRadius/2)) do
if v:IsValid() and v:IsVehicle() then
timer.Simple(0.5,function()
if IsValid(self) then
self.Exploded = true
self:Explode(self:GetPos())
end
end)
end
end
end
end
function ENT:Touch( ent )
if self.Armed and self.Buried then
if ent:IsVehicle() then
self.Exploded = true
self:Explode(self:GetPos())
end
end
end