@[GeD]Max:
Das playerid in der Klammer beim public StatsUpdateTimer kann weg, das brauchst du nicht.
Dann zu deinem Problem: Es ist ja generell nicht verboten einen Timer mit 300ms zu machen, aber einen Timer der mehr als 3x pro Sekunde MAX_PLAYERS * MAX_PLAYERS (!), das werden wohl noch die 500 sein, durchgeht und zwischen 250000 und 1000000 (je nach dem ob das else-if aufgerufen wird) Anfragen an die Datenbank schickt, dass ist dann doch ein klein bisschen sehr viel zu viel.
Selbst wenn du eine der beiden Schleifen weg machst (was ja an sich schonmal Sinn macht, da du ja sonst jeden Spieler MAX_PLAYERS mal aktualisierst), werden noch zwischen 500 und 1000 Anfragen gesendet, pro Sekunde also mehr als 1500 - 3000 Anfragen, das ist immer noch viel zu viel. Mach das mit dem MySQL Zeugs da weg, und nimm eine Variable, die du beim Login auf 1 setzt, so weißt du ob der Spieler ein Konto hat oder nicht, und mach auf jeden Fall eine der beiden Schleifen weg.
@FerienFreak:
Wer auch immer dir gesagt hat, dass es besser ist alles in eine Zeile zu schreiben gehört geschlagen (sorry, ist aber so
). Unter Programmieren gilt allgemein eine ungeschriebene Regel: Eine Anweisung pro Zeile.
An der Performance ändert es nämlich gar nichts, im Gegenteil, du kannst es nur nicht mehr lesen.
ocmd:punkte(playerid,params[])
{
if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
new pID,reason[64],string[144],punkte;
if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /punkte [ID][Anzahl][Grund]");
format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte eingetragen! Grund: %s",NamePlayer(playerid),punkte,reason);
SendClientMessage(pID,BLUTROT,string);
format(string,144,"Du hast %s %d Strafpunkte eingetragen! Grund: %s",NamePlayer(pID),punkte,reason);
SendClientMessage(playerid,BABYBLAU,string);
format(string,144,"(( HQ: %s hat %s %d Strafpunkte eingetragen! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
for(new i;i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
SendClientMessage(i,BLAU,string);//244
}
SpielerInfo[pID][pFscheinPunkte]+=punkte;
SpielerSpeichern(pID);
return 1;
}
ocmd:clearpunkte(playerid,params[])
{
if(!isPlayerInFrakt(playerid,2))return SendClientMessage(playerid,ROT,"Du bist nicht beim Ordnungsamt!");
if(SpielerInfo[playerid][pRang] < 5)return SendClientMessage(playerid,ROT,"Du bist nicht Rank 5!");
new pID,reason[64],string[144],punkte;
if(sscanf(params,"uis[64]",pID,punkte,reason))return SendClientMessage(playerid,GELB,"Tippe: /clearpunkte [ID][Anzahl][Grund]");
format(string,144,"Ordnungsbeamter %s hat dir %d Strafpunkte gelöscht! Grund: %s",NamePlayer(playerid),punkte,reason);
SendClientMessage(pID,BLUTROT,string);
format(string,144,"Du hast %s %d Strafpunkte gelöscht! Grund: %s",NamePlayer(pID),punkte,reason);
SendClientMessage(playerid,BABYBLAU,string);
format(string,144,"(( HQ: %s hat %s %d Strafpunkte gelöscht! Grund: %s ))",NamePlayer(playerid),NamePlayer(pID),punkte,reason);
for(new i;i<GetMaxPlayers();i++)
{
if(!IsPlayerConnected(i) || SpielerInfo[i][pFraktion] != SpielerInfo[playerid][pFraktion])continue;
SendClientMessage(i,BLAU,string);//259
}
SpielerInfo[pID][pFscheinPunkte]-=punkte;
SpielerSpeichern(pID);
return 1;
}