-- common grenade projectile code AddCSLuaFile() ENT.Type = "anim" ENT.Model = Model("models/weapons/w_eq_flashbang_thrown.mdl") AccessorFunc( ENT, "thrower", "Thrower") function ENT:SetupDataTables() self:NetworkVar("Float", 0, "ExplodeTime") end function ENT:Initialize() self:SetModel(self.Model) self:PhysicsInit(SOLID_VPHYSICS) self:SetMoveType(MOVETYPE_VPHYSICS) self:SetSolid(SOLID_BBOX) self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE) if SERVER then self:SetExplodeTime(0) end end function ENT:SetDetonateTimer(length) self:SetDetonateExact( CurTime() + length ) end function ENT:SetDetonateExact(t) self:SetExplodeTime(t or CurTime()) end -- override to describe what happens when the nade explodes function ENT:Explode(tr) ErrorNoHalt("ERROR: BaseGrenadeProjectile explosion code not overridden!\n") end function ENT:Think() local etime = self:GetExplodeTime() or 0 if etime != 0 and etime < CurTime() then -- if thrower disconnects before grenade explodes, just don't explode if SERVER and (not IsValid(self:GetThrower())) then self:Remove() etime = 0 return end -- find the ground if it's near and pass it to the explosion local spos = self:GetPos() local tr = util.TraceLine({start=spos, endpos=spos + Vector(0,0,-32), mask=MASK_SHOT_HULL, filter=self.thrower}) local success, err = pcall(self.Explode, self, tr) if not success then -- prevent effect spam on Lua error self:Remove() ErrorNoHalt("ERROR CAUGHT: ttt_basegrenade_proj: " .. err .. "\n") end end end