So, ich finde hier sollte auch wieder mal was rein und da ich mal wieder Langeweile habe, schreibe ich hier mal ein paar Sachen rein:
Booleans:
Wenn eine Variable nur 2 Werte annehmen brauch, sagen wir 0 und 1, dann sollte man anstatt so:
//Falsche Variante
new var;
//In irgendeinem Callback
var = 1;
//Unter einem anderen Callback
if(var == 1)
Sollte man es so machen:
//Richtige Variante
new bool:var;
//In irgendeinem Callback
var = true;
//Unter einem anderen Callback
if(var == true)
Das sorgt dafür, dass von Anfang an weniger Speicherplatz für diese Variable verbraucht wird.
Char Arrays
Das ist ein Thema was ich wirklich jedem ans Herz lege !
Jeder kennt folgendes:
new var[MAX_PLAYERS];
if(var[playerid] == 1)
Nun das ist aber verdammt schlecht !
Jede Zelle bzw Spalte im Array verbraucht 4 Bytes, da MAX_PLAYERS (ohne das Makro zu verändern) eine größe von 500 hat, würde diese Variable:
4Bytes * 500Bytes = 2000 Bytes
verbrauchen !
Aus diesem Grund sogenannte char-Arrays verwenden, dass sähe dann so aus:
new var[MAX_PLAYERS char];
if(var{playerid} == 1) //Vorsicht: Hier { } verwenden anstatt [ ] !!!
Hier würde jede Zelle bzw Spalte im Array nur 1nen Byte verbrauchen !
Sprich wir verbrauchen 500 Bytes anstatt 2000 ! 
Wichtig noch zu beachten, das geht nur bei 1 dimensionalen Arrays und auch nur bei Integern, wenn man das mit strings machen will muss man strpack benutzen (aber das ist eine andere Geschichte)...
Außerdem ist zu beachten, dass nur Werte von 0-255 möglich sind!
Sprich:
new test[MAX_PLAYERS char];
test{0} = 259; //Ist nicht möglich, da größer 255!
Strings-returnen
Viele von euch werden wahrscheinlich diese Funktion kennen:
stock PlayerName(playerid) {
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}
Nun, hier returnen wir einen string, das führt zu sog. Memory Leaks und sorgt dafür dass euer Speicher unnötig belegt wird, denn diese Variable "name" wird Lokal erzeugt, aber sie wird durch das return nicht wieder "zerstört", somit bleibt der Speicher vorhanden.
Aus diesem Grund empfehle ich diese Variante:
//Oben im Script
new pName[MAX_PLAYERS][MAX_PLAYER_NAME];
//Unter OnPlayerConnect
GetPlayerName(playerid,pName[playerid],MAX_PLAYER_NAME);
//Nutzung:
format(string,sizeof(string),"Willkommen lieber %s",pName[playerid]);
Unnötig große Arrays
Wie oben schon mal angesprochen verbrauchen große Arrays viel Speicherplatz !
Ich zeige euch mal einige Beispiele die ihr sicher kennen werdet:
new string[256], string1[300], string2[499]; /* usw... */
format(string,sizeof(string),"bla...");
Also abgesehen davon, dass man das meistens eh mit 1ner Variable lösen kann, zeige ich euch nun das:
new string[] = "Hier euren Text rein...lieber %s",name[] = "Kaliber";
format(string,sizeof(string)+sizeof(name),string,name);
print(string); //würde ausgeben: "Hier euren Text rein...lieber Kaliber"
So das wars erstmal mit dem gröbsten, werde vielleicht noch einen 2. Part dranhängen, mal sehen 
mfg.