Looks pretty good. Btw: use [lua] [/ lua] tags around your code, it looks neater.
One more thing: Since you are now using the PlayerSpawn hook, the function will be called every single time a player spawns. You probably see what the problem is right now.
At the moment, your function cycles through all the players and creates a timer, while this should only be a one time thing.
You now have 2 choices. Either create a unique timer for each player on the PlayerInitialSpawn hook (this would give everybody their pay after the same interval, but at different times)
you could create a global timer that cycles through the players every x seconds and gives them their pay at the same time. You would create this timer just after server initialization (sorry, I forgot the name and I don’t have access to the gmod wiki right now).
I personally would go for the global timer variant. Here is the code I would use:
PAYDAY_TIME = 8
PAYDAY_AMOUNT = 50
PADYDAY_SOUND = true
timer.Create( "payday_timer", PAYDAY_TIME, 0, function()
for k, ply in pairs(player.GetAll()) do
ply:Money_Add( PAYDAY_AMOUNT )
ply:PrintMessage( HUD_PRINTTALK, "SRP:Payday! $" .. PAYDAY_AMOUNT)
if PAYDAY_SOUND then
hook.Add(“SomeHook”,“Timer”,Timer) --look up the right hook, I forgot