Garry's Mod custom spectate player
There's a few things to comment on:



I'm not a Gmod developer, so I'm not familiar with the spectating abilities built in, but, I'd assume that if any exist, they're probably better to use than re-inventing the wheel.



There's only two states: not spectating, and spectating. What happens if I want to simply switch between players? Do I have to stop spectating, and then select a new player to spectate?

Why can I not just press lmb and go to the next?




util.AddNetworkString( "spectatePlayer" )



You've got extraneous whitespace in your brackets.




print(client:Nick() .. "Started spectating: " .. net.ReadEntity():Nick())
print(playerLocal:Nick().."Finished Spectating")



String concatenation joins the strings, as they are. Meaning, it would read like:


  QuillStarted spectating: James Heald.
  QuillFinished Spectating


Add some whitespace in there.

print(client:Nick() .. " Started spectating: " .. net.ReadEntity():Nick())
print(playerLocal:Nick().." Finished Spectating")




Oh, and you should be keeping the cases (upper and lower) consistent in your messages:


"Started spectating: "
         ^
"Finished Spectating"
          ^