Freezing lua question

So I believe there is two ways to freeze player and it is lock and freeze, But lock doesn’t seem to work and freeze only worked on a bot Im doing this with a darkrp bnaton that was modified.

The code:


function SWEP:PrimaryAttack()
	if CurTime() < self.NextStrike then return end

	self:SetHoldType("melee")
	timer.Simple(0.3, function() if self:IsValid() then self:SetHoldType("normal") end end)

	self.NextStrike = CurTime() + 0.51 -- Actual delay is set later

	if CLIENT then return end

	timer.Stop(self:GetClass() .. "_idle" .. self:EntIndex())
	local vm = self.Owner:GetViewModel()
	if IsValid(vm) then
		vm:ResetSequence(vm:LookupSequence("idle01"))
		timer.Simple(0, function()
			if not IsValid(self) or not IsValid(self.Owner) or not IsValid(self.Owner:GetActiveWeapon()) or self.Owner:GetActiveWeapon() ~= self then return end
			self.Owner:SetAnimation(PLAYER_ATTACK1)

			if IsValid(self.Weapon) then
				self.Weapon:EmitSound(self.Sound)
			end

			local vm = self.Owner:GetViewModel()
			if not IsValid(vm) then return end
			vm:ResetSequence(vm:LookupSequence("attackch"))
			vm:SetPlaybackRate(1 + 1/3)
			local duration = vm:SequenceDuration() / vm:GetPlaybackRate()
			timer.Create(self:GetClass() .. "_idle" .. self:EntIndex(), duration, 1, function()
				if not IsValid(self) or not IsValid(self.Owner) then return end
				local vm = self.Owner:GetViewModel()
				if not IsValid(vm) then return end
				vm:ResetSequence(vm:LookupSequence("idle01"))
			end)
			self.NextStrike = CurTime() + duration
		end)
	end

	self.Owner:LagCompensation(true)
	local trace = util.QuickTrace(self.Owner:EyePos(), self.Owner:GetAimVector() * 90, {self.Owner})
	self.Owner:LagCompensation(false)
	if IsValid(trace.Entity) and trace.Entity.onUnArrestStickUsed then
		trace.Entity:onUnArrestStickUsed(self.Owner)
		return
	end

	local ent = self.Owner:getEyeSightHitEntity(nil, nil, function(p) return p ~= self.Owner and p:IsPlayer() and p:Alive() end)
	if not ent then return end

	if not IsValid(ent) or not ent:IsPlayer() or not ent:IsBot() or (self.Owner:EyePos():Distance(ent:GetPos()) > 115) then
		return
	end
	

	
	ent:Freeze(true) 
	timer.Simple( 5, function() ent:Freeze(false)(self.Owner) end )
	DarkRP.notify(ent, 0, 4, DarkRP.getPhrase("youre_frozen_by", self.Owner:Nick "for 5 Seconds"()))

end

If it’s working on bots and not players maybe check your if statements?