Files
wnsrc/lua/weapons/arccw_base/sh_rocket.lua
lifestorm 94063e4369 Upload
2024-08-04 22:55:00 +03:00

79 lines
2.4 KiB
Lua

--[[
| This file was obtained through the combined efforts
| of Madbluntz & Plymouth Antiquarian Society.
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
| Maloy, DrPepper10 @ RIP, Atle!
|
| Visit for more: https://plymouth.thetwilightzone.ru/
--]]
function SWEP:FireRocket(ent, vel, ang, dontinheritvel)
if CLIENT then return end
local rocket = ents.Create(ent)
ang = ang or (self:GetOwner():EyeAngles() + self:GetFreeAimOffset())
local src = self:GetShootSrc()
if !rocket:IsValid() then print("!!! INVALID ROUND " .. ent) return end
local rocketAng = Angle(ang.p, ang.y, ang.r)
if ang and self.ShootEntityAngleCorrection then
local up = ang:Up()
local right = ang:Right()
local forward = ang:Forward()
rocketAng:RotateAroundAxis(up, self.ShootEntityAngleCorrection.y)
rocketAng:RotateAroundAxis(right, self.ShootEntityAngleCorrection.p)
rocketAng:RotateAroundAxis(forward, self.ShootEntityAngleCorrection.r)
end
rocket:SetAngles(rocketAng)
rocket:SetPos(src)
rocket:SetOwner(self:GetOwner())
rocket.Inflictor = self
local randfactor = self:GetBuff("DamageRand")
local mul = 1
if randfactor > 0 then
mul = mul * math.Rand(1 - randfactor, 1 + randfactor)
end
rocket.Damage = self:GetBuff("Damage") * mul
if self.BlastRadius then
local r_randfactor = self:GetBuff("DamageRand")
local r_mul = 1
if r_randfactor > 0 then
r_mul = r_mul * math.Rand(1 - r_randfactor, 1 + r_randfactor)
end
rocket.BlastRadius = self:GetBuff("BlastRadius") * r_mul
end
local RealVelocity = (!dontinheritvel and self:GetOwner():GetAbsVelocity() or Vector(0, 0, 0)) + ang:Forward() * vel
rocket.CurVel = RealVelocity -- for non-physical projectiles that move themselves
rocket:Spawn()
rocket:Activate()
if !rocket.NoPhys and rocket:GetPhysicsObject():IsValid() then
rocket:SetCollisionGroup(rocket.CollisionGroup or COLLISION_GROUP_DEBRIS)
rocket:GetPhysicsObject():SetVelocityInstantaneous(RealVelocity)
end
if rocket.Launch and rocket.SetState then
rocket:SetState(1)
rocket:Launch()
end
if rocket.ArcCW_Killable == nil then
rocket.ArcCW_Killable = true
end
rocket.ArcCWProjectile = true
self:GetBuff_Hook("Hook_PostFireRocket", rocket)
return rocket
end