Files
wnsrc/addons/pillpack/lua/entities/pill_proj_rocket.lua
lifestorm 6a58f406b1 Upload
2024-08-04 23:54:45 +03:00

115 lines
3.3 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/
--]]
AddCSLuaFile()
ENT.Type = "anim"
ENT.PrintName = "Rocket"
function ENT:SetupDataTables()
self:NetworkVar("String", 0, "Particle")
end
function ENT:Initialize()
if SERVER then
if not self.noPhys then
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
end
local phys = self:GetPhysicsObject()
if (phys:IsValid()) then
phys:Wake()
phys:EnableGravity(false)
phys:EnableDrag(false)
phys:SetDamping(0, 0)
phys:SetVelocity(self:GetAngles():Forward() * (self.speed or 3000))
end
if self.sound then
self.flySound = CreateSound(self, self.sound)
self.flySound:Play()
end
if self.trail then
util.SpriteTrail(self, 0, self.tcolor or Color(255, 255, 255), false, 40, 10, 5, 1 / 100, self.trail)
end
end
if self:GetParticle() ~= "" then
ParticleEffectAttach(self:GetParticle(), PATTACH_ABSORIGIN_FOLLOW, self, 0)
end
end
if SERVER then
function ENT:Think()
local tr
if self.noPhys then
tr = util.QuickTrace(self:GetPos(), self:GetAngles():Forward() * (self.speed or 3000) * FrameTime(), {self, self.shooter})
end
if self:WaterLevel() > 0 or tr and tr.Hit then
if self.altExplode then
ParticleEffect(self.altExplode.particle, self:GetPos(), Angle(0, 0, 0))
self:EmitSound(self.altExplode.sound)
util.BlastDamage(self, self:GetOwner(), self:GetPos(), 100 * (self.radmod or 1), 100 * (self.dmgmod or 1))
else
local explode = ents.Create("env_explosion")
explode:SetPos(self:GetPos())
--explode:SetOwner(ply)
explode:Spawn()
explode:SetKeyValue("iMagnitude", "100")
explode:Fire("Explode", 0, 0)
explode:SetOwner(self:GetOwner())
end
self:Remove()
end
if tr then
self:SetPos(tr.HitPos)
if self.spin then
self:SetAngles(self:GetAngles() + Angle(0, 0, 180) * FrameTime())
end
end
self:NextThink(CurTime())
return true
end
end
function ENT:OnRemove()
if SERVER and self.flySound then
self.flySound:Stop()
end
end
function ENT:PhysicsCollide(data, physobj)
if self.altExplode then
ParticleEffect(self.altExplode.particle, self:GetPos(), Angle(0, 0, 0))
self:EmitSound(self.altExplode.sound)
util.BlastDamage(self, self:GetOwner(), self:GetPos(), 100 * (self.radmod or 1), 100 * (self.dmgmod or 1))
else
local explode = ents.Create("env_explosion")
explode:SetPos(self:GetPos())
--explode:SetOwner(ply)
explode:Spawn()
explode:SetKeyValue("iMagnitude", "100")
explode:Fire("Explode", 0, 0)
explode:SetOwner(self:GetOwner())
end
self:Remove()
end