If You're creating / destroying TD's in OnPlayerConnect/Disconnect I suggest you re-make the TD's to be created in OnGameModeInit, and destroy in OnExit, show in OnConnect, hide in OnDisconnect. Avoids 99% of all TD problems as many scripters make player TD's in OnPlayerconnect because they're not comfortable with using loops in Ongamemodeinit or whatever reasons they have..
next make sure to create the variable correctly,
"wrong" (not really wrong but may cause problems):
pawn Code:
new Text:HelloWorld[MAX_PLAYERS];
//after destroying
TextDrawDestroy(HelloWorld[playerid]);
good:
pawn Code:
new Text:HelloWorld[MAX_PLAYERS] = {_:INVALID_TEXTDRAW_ID,...};
//after destroying:
TextDrawDestroy(HelloWorld[playerid]);
HelloWorld[playerid] = _:INVALID_TEXTDRAW_ID;
And there are other ways to avoid TD problems, make sure you don't go over 2048 while creating, if you have 4 TD's, when you loop 800 players, all players have their own TD, you're out of luck cuz u making 3200 TD's.
also using ~r~ ~g~ etc etc thing in TD strings larger than 127 chars makes the TD's go weird too.
and last but not least: Make sure nothing is messing with your server memory and variables (plugin?)
@ALL people above me, you don't always need the source, if you think so - re-read this post,
if you have re-read it and still think you need the source, re-read my post again.
Re-Read until you get it.
Then go on
I prefer this kind of help instead of analyzing someone's 100k line GM.