function SmokerGrapple(projectile, activator, weapon) local HitSomething = false projectile.Owner = activator -- projectile:AcceptInput("RunScriptCode","NetProps.SetPropBool(self, `m_bForcePurgeFixedupStrings`, true);function GrappleThink() { local owner = self.GetOwner();if (!owner || !owner.IsPlayer() || owner.GetGrapplingHookTarget() == self) self.Destroy()};AddThinkToEnt(self,`GrappleThink`)") projectile.CollidedCallback = projectile:AddCallback( ON_START_TOUCH, function( ent, other, hitPos, hitNormal ) if other:IsWorld() then if activator and IsValid(activator) and activator:IsAlive() then activator:WeaponSwitchSlot(2) end projectile:Kill() elseif other:IsPlayer() then HitSomething = true end ent:RemoveCallback( ON_START_TOUCH, ent.CollidedCallback ) end) timer.Simple(2.5, function() if projectile and IsValid(projectile) and HitSomething ~= true then if activator and IsValid(activator) and activator:IsAlive() then activator:WeaponSwitchSlot(2) end projectile:Kill() end end) end