If ply is ghost

I have a killer notifier setup on my server that I got from workshop, I also have TTT spectator deathmatch on the server. I was fiddling around with the code to try to make it so that if the player is in spectator deathmatch it does not say who you were killed by. Whatever I try I just get errors. Could someone help me out a bit and get me pointed in the right direction. The code for the killer notifier is below, Thanks in advanced.



//  ____________              ________            ____________ __
//  __  ___/_  /______ __________  __/_________  ___  ___/_  // /
//  _____ \_  __/  __ `/_  ___/_  /_ _  __ \_  |/_/  __ \_  // /_
//  ____/ // /_ / /_/ /_  /   _  __/ / /_/ /_>  < / /_/ //__  __/
//  /____/ \__/ \__,_/ /_/    /_/    \____//_/|_| \____/   /_/   
//                                                               

AddCSLuaFile()
function

timer.Simple(1, function() -- Required to let the gamemode initialize properly
	if gmod.GetGamemode().Name == "Trouble in Terrorist Town"
		if SERVER then
			util.AddNetworkString("tttDeathNotify")
			hook.Add("PlayerDeath", "TTT_PlayerDeath_SayRole", function(victim, weapon, killer)
				if killer:IsPlayer() and killer != victim then
					net.Start("tttDeathNotify")
					net.WriteInt(1, 4)
					net.WriteString(killer:GetRoleString())
					net.WriteEntity(killer)
					net.Send(victim)
				elseif killer:IsPlayer() and killer == victim then
					net.Start("tttDeathNotify")
					net.WriteInt(2, 4)
					net.Send(victim)
				else
					net.Start("tttDeathNotify")
					net.WriteInt(3, 4)
					net.Send(victim)
				end
			end)
		else
			local roleColors = {
				["traitor"] = Color(200, 25, 25),
				["detective"] = Color(25, 25, 200),
				["innocent"] = Color(25, 200, 25),
				["noround"] = Color(100, 100, 100)
			}

			local default = Color(255, 255, 255, 255)

			net.Receive("tttDeathNotify", function()
				local killerType = net.ReadInt(4)
				local role = net.ReadString()
				local killer = net.ReadEntity()

				if killerType == 1 then
					local color = roleColors[role] or roleColors["noround"]
					local a = "a"
					if role == "innocent" then
						a = "an"
					end
					chat.AddText(default, "You were killed by ", color, killer:Name(), default, " he was "..a.." ", color, role, default, ".")
				elseif killerType == 2 then
					chat.AddText(default, "You were killed by someone called yourself...")
				elseif killerType == 3 then
					chat.AddText(default, "You were killed by the world.")
				end
			end)
		end
	end
end)

I think that there is a network bool for the ghosted players. You can check if the player is in specdm.

edit
Yeah, the nwbool is SpecDM_Enabled. You can add a check in the first hook.

Player:IsGhost() ?

Could use IsGhost. I don’t remember if that was declared locally or not.

If not, you can use !victim:GetNWBool(“SpecDM_Enabled”, false) OP. Maybe should also check killer. Not sure how that will turn out if someone jumped off a building and killed themselves.