So what this does is it checks to see if you backstabbed someone from....behind but its not working for some reason. What i did was i put the code into the Blow function of a sword script i really don't want to explain this code so you will just have to skim through it but the point is the message is not printing.

function dotProduct(a,b)
	return a.x*b.x+a.y*b.y+a.z*b.z
end

function blow(hit)
	if (hit.Parent == nil) then return end -- happens when bullet hits sword
     
    local humanoid = hit.Parent:findFirstChild("Humanoid")
	local vCharacter = Tool.Parent
	local vPlayer = game.Players:playerFromCharacter(vCharacter)
	local hum = vCharacter:findFirstChild("Humanoid") -- non-nil if tool held by a character
	
	local Torso=humanoid.Torso.Position
	local vTorso=vCharacter.Torso.Position
	local distance=Torso-vTorso
	local normDistance=distance/distance.magnitude
	if humanoid~=nil and humanoid ~= hum and hum ~= nil then
		-- final check, make sure sword is in-hand
      
		local right_arm = vCharacter:FindFirstChild("Right Arm")
		if (right_arm ~= nil) then
			local joint = right_arm:FindFirstChild("RightGrip")
			if (joint ~= nil and (joint.Part0 == sword or joint.Part1 == sword)) then
				     local Player = game.Players:GetPlayerFromCharacter(hit.Parent)
                                if Player.TeamColor ~= vPlayer.TeamColor then end
                                    local dp = dotProduct(normDistance,humanoid.Torso.CFrame.lookVector)
				    tagHumanoid(humanoid, vPlayer)
				    humanoid:TakeDamage(damage)
				    wait(1)
				    untagHumanoid(humanoid)
				    if dp < -0.5 then
			           local m=Instance.new("Message")
			           m.Parent=game.Workspace
			           m.Text="BACKSTAB!!!"
			           wait(2)
			           m:Destroy()
				   end
			end
		end


	end
	
		
end