Hook.call problem

I dont know why this script dont work, no errors just not work.
I want to make a third person turn on with the T button. Can you please help me?

function GM:CalcView( ply, pos, angles, fov)
	local view = {
		origin = pos - (angles:Forward() * 100),
		angles = angles,
		fov = fov,
		drawviewer = true
	}
	hook.Call("thirdperson")


	
end

function GM:KeyPress(ply, key)

	if(key == KEY_T) then 
		return view
	end

end

hook.Add("thirdperson", "third person", GM:KeyPress())

You have made many mistakes such as using gamemode functions instead of the hook system (the difference is pretty simple, but the first one is used more in gamemode creation and the other in script creation). I also recommend to put most things as possible in local variables like in the case of the CalcView event which is called a lot of times and it is more appropriate to create the table outside the camera function first instead of recreating it every time. Here is what I would have done personally:

local thirdperson = false
local camera = {
	drawviewer = true
}

hook.Add( "CalcView", "ThirdPerson", function( ply, pos, angles, fov )
	if ( thirdperson ) then
		camera.origin = pos - ( angles:Forward() * 100 )
		camera.angles = angles
		camera.fov = fov
		return camera
	end
end )

hook.Add( "KeyPress", "ThirdPerson", function( ply, key )
	if ( key == KEY_T ) then 
		thirdperson = not thirdperson
	end
end )