add sborka
This commit is contained in:
134
garrysmod/addons/tacrp/lua/entities/tacrp_proj_m202_apers.lua
Normal file
134
garrysmod/addons/tacrp/lua/entities/tacrp_proj_m202_apers.lua
Normal file
@@ -0,0 +1,134 @@
|
||||
AddCSLuaFile()
|
||||
|
||||
ENT.Base = "tacrp_proj_base"
|
||||
ENT.PrintName = "M202 Rocket (APERS)"
|
||||
ENT.Spawnable = false
|
||||
|
||||
ENT.Model = "models/weapons/tacint/rocket_deployed.mdl"
|
||||
|
||||
ENT.IsRocket = false // projectile has a booster and will not drop.
|
||||
|
||||
ENT.InstantFuse = false // projectile is armed immediately after firing.
|
||||
ENT.RemoteFuse = false // allow this projectile to be triggered by remote detonator.
|
||||
ENT.ImpactFuse = true // projectile explodes on impact.
|
||||
|
||||
ENT.ExplodeOnDamage = true
|
||||
ENT.ExplodeUnderwater = true
|
||||
|
||||
ENT.Delay = 0
|
||||
ENT.SafetyFuse = 0.05
|
||||
|
||||
ENT.AudioLoop = "TacRP/weapons/rpg7/rocket_flight-1.wav"
|
||||
|
||||
ENT.SmokeTrail = true
|
||||
|
||||
ENT.FlareColor = Color(200, 200, 255)
|
||||
|
||||
ENT.ExplodeSounds = {
|
||||
"TacRP/weapons/grenade/smoke_explode-1.wav",
|
||||
}
|
||||
|
||||
|
||||
DEFINE_BASECLASS(ENT.Base)
|
||||
|
||||
function ENT:PhysicsCollide(data, collider)
|
||||
if self:Impact(data, collider) then
|
||||
return
|
||||
end
|
||||
|
||||
BaseClass.PhysicsCollide(self, data, collider)
|
||||
end
|
||||
|
||||
function ENT:Think()
|
||||
if self.SpawnTime + self.SafetyFuse < CurTime() and (self.NextTraceTime or 0) < CurTime() then
|
||||
self.NextTraceTime = CurTime() + 0.1
|
||||
|
||||
local dir = self:GetVelocity():GetNormalized()
|
||||
local deg = 1 //math.Clamp(1.5 - dir:Cross(Vector(0, 0, -1)):Length(), 0.5, 1)
|
||||
|
||||
local tr = util.TraceHull({
|
||||
start = self:GetPos(),
|
||||
endpos = self:GetPos() + dir * (1024 * deg),
|
||||
filter = self,
|
||||
mins = Vector(-32, -32, -32),
|
||||
maxs = Vector(32, 32, 32)
|
||||
})
|
||||
if tr.Hit then
|
||||
self:PreDetonate()
|
||||
end
|
||||
end
|
||||
|
||||
BaseClass.Think(self)
|
||||
end
|
||||
|
||||
|
||||
function ENT:Detonate()
|
||||
local dir = self:GetForward()
|
||||
local attacker = self.Attacker or self:GetOwner() or self
|
||||
local src = self:GetPos() - dir * 64
|
||||
local fx = EffectData()
|
||||
fx:SetOrigin(src)
|
||||
|
||||
if self:WaterLevel() > 0 then
|
||||
util.Effect("WaterSurfaceExplosion", fx)
|
||||
else
|
||||
fx:SetMagnitude(8)
|
||||
fx:SetScale(2)
|
||||
fx:SetRadius(8)
|
||||
fx:SetNormal(dir)
|
||||
util.Effect("Sparks", fx)
|
||||
|
||||
local tr = util.TraceHull({
|
||||
start = src,
|
||||
endpos = src + dir * 1024,
|
||||
filter = self,
|
||||
mins = Vector(-16, -16, -8),
|
||||
maxs = Vector(16, 16, 8)
|
||||
})
|
||||
fx:SetMagnitude(4)
|
||||
fx:SetScale(1)
|
||||
fx:SetRadius(2)
|
||||
fx:SetNormal(dir)
|
||||
for i = 1, math.floor(tr.Fraction * 6) do
|
||||
fx:SetOrigin(tr.StartPos + tr.Normal * (i / 6) * 1024)
|
||||
util.Effect("Sparks", fx)
|
||||
end
|
||||
end
|
||||
|
||||
local mult = TacRP.ConVars["mult_damage_explosive"]:GetFloat()
|
||||
|
||||
self:FireBullets({
|
||||
Attacker = attacker,
|
||||
Damage = 5,
|
||||
Force = 1,
|
||||
Distance = 1024,
|
||||
HullSize = 16,
|
||||
Num = 48,
|
||||
Tracer = 1,
|
||||
Src = src,
|
||||
Dir = dir,
|
||||
Spread = Vector(1, 1, 0),
|
||||
IgnoreEntity = self,
|
||||
})
|
||||
local dmg = DamageInfo()
|
||||
dmg:SetAttacker(attacker)
|
||||
dmg:SetDamageType(DMG_BULLET + DMG_BLAST)
|
||||
dmg:SetInflictor(self)
|
||||
dmg:SetDamageForce(self:GetVelocity() * 100)
|
||||
dmg:SetDamagePosition(src)
|
||||
for _, ent in pairs(ents.FindInCone(src, dir, 1024, 0.707)) do
|
||||
local tr = util.QuickTrace(src, ent:GetPos() - src, {self, ent})
|
||||
if tr.Fraction == 1 then
|
||||
dmg:SetDamage(mult * 60 * math.Rand(0.75, 1) * Lerp((ent:GetPos():DistToSqr(src) / 1048576) ^ 0.5, 1, 0.25) * (self.NPCDamage and 0.5 or 1) * mult)
|
||||
if !ent:IsOnGround() then dmg:ScaleDamage(1.5) end
|
||||
ent:TakeDamageInfo(dmg)
|
||||
end
|
||||
end
|
||||
|
||||
util.BlastDamage(self, attacker, src, 256, 50 * mult)
|
||||
|
||||
self:EmitSound("TacRP/weapons/rpg7/explode.wav", 125, 100)
|
||||
self:EmitSound("physics/metal/metal_box_break1.wav", 100, 200)
|
||||
|
||||
self:Remove()
|
||||
end
|
||||
Reference in New Issue
Block a user