mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-15 21:03:46 +03:00
115 lines
3.3 KiB
Lua
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
|