add sborka
This commit is contained in:
85
garrysmod/addons/tacrp/lua/entities/tacrp_proj_m202.lua
Normal file
85
garrysmod/addons/tacrp/lua/entities/tacrp_proj_m202.lua
Normal file
@@ -0,0 +1,85 @@
|
||||
AddCSLuaFile()
|
||||
|
||||
ENT.Base = "tacrp_proj_base"
|
||||
ENT.PrintName = "M202 Rocket"
|
||||
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(255, 200, 150)
|
||||
|
||||
ENT.Radius = 400
|
||||
|
||||
function ENT:Detonate(ent)
|
||||
local attacker = self.Attacker or self:GetOwner()
|
||||
|
||||
local mult = TacRP.ConVars["mult_damage_explosive"]:GetFloat()
|
||||
local dmg = DamageInfo()
|
||||
dmg:SetDamagePosition(self:GetPos())
|
||||
dmg:SetInflictor(self)
|
||||
dmg:SetAttacker(attacker)
|
||||
|
||||
// Apply a small instance of damage to ignite first, before doing the real damage
|
||||
// This will ensure if the target dies it is on fire first (so it can ignite its ragdolls etc.)
|
||||
dmg:SetDamageType(DMG_SLOWBURN)
|
||||
dmg:SetDamage(5)
|
||||
util.BlastDamageInfo(dmg, self:GetPos(), self.Radius)
|
||||
|
||||
dmg:SetDamageType(DMG_BLAST + DMG_BURN)
|
||||
dmg:SetDamage(250 * mult)
|
||||
util.BlastDamageInfo(dmg, self:GetPos(), self.Radius)
|
||||
|
||||
self:ImpactTraceAttack(ent, 100 * mult, 100)
|
||||
|
||||
local decaltr = util.TraceLine({
|
||||
start = self:GetPos(),
|
||||
endpos = self:GetPos() + self:GetForward() * 128,
|
||||
filter = self,
|
||||
mask = MASK_SOLID,
|
||||
})
|
||||
util.Decal("Scorch", decaltr.StartPos, decaltr.HitPos - (decaltr.HitNormal * 16), self)
|
||||
|
||||
local fx = EffectData()
|
||||
fx:SetOrigin(self:GetPos())
|
||||
|
||||
if self:WaterLevel() > 0 then
|
||||
util.Effect("WaterSurfaceExplosion", fx)
|
||||
else
|
||||
util.Effect("tacrp_m202_explode", fx)
|
||||
self:EmitSound("^weapons/explode5.wav", 100, 110)
|
||||
self:EmitSound("^ambient/fire/ignite.wav", 110, 110)
|
||||
end
|
||||
|
||||
self:Remove()
|
||||
end
|
||||
|
||||
local burn = {
|
||||
tacrp_proj_m202 = 12,
|
||||
tacrp_proj_p2a1_flare = 4,
|
||||
tacrp_proj_p2a1_paraflare = 4,
|
||||
tacrp_proj_p2a1_incendiary = 8,
|
||||
}
|
||||
|
||||
hook.Add("PostEntityTakeDamage", "tacrp_pa_m202", function(ent, dmginfo, took)
|
||||
local infl = dmginfo:GetInflictor()
|
||||
if took and IsValid(infl) and burn[infl:GetClass()] and dmginfo:IsDamageType(DMG_SLOWBURN) then
|
||||
local fr = Lerp(1 - (ent:GetPos():Distance(infl:GetPos())) / infl.Radius, 0.25, 1)
|
||||
ent:Ignite(fr * burn[infl:GetClass()] * (ent:IsPlayer() and 1 or 2.5))
|
||||
end
|
||||
end)
|
||||
Reference in New Issue
Block a user