Globalen Spielernamen (MySQL)

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Ich möchte mittels einer Funktion den globalen Spielernamen (aus der Datenbank) ausgeben.
    Wie mache ich das bei MySQL? Publics returnen keinen String und stocks kann ich für den Callback ja nicht nutzen.
    Gibt es eine Variante ohne Callbacks zu arbeiten?
    stock GetPlayerGlobalName(globalid) {
    new Name[128];
    // sql..
    return Name;
    }

  • Du kannst auch beim neuen Plugin mysql_query verwenden, dann kannst du das über einen stock zurück geben, aber empfohlen ist es nicht.

    Wenn ich es per Array mache sprich, wenn ich die Spielernamen in einem Array beim Serverstart und bei der Registrierung hinzufüge, würde es doch auch klappen oder? Aber wie sieht es dann bei 500 registrierten Nutzer aus :S

  • Das ist auch keine so gute Idee, da du davon ausgehen musst, dass du vielleicht mal 100.000 registrierte Benutzer hast, und das würde doch ziemlich Speicher nutzen und auch etwas beim Laden dauern.
    Kannst du zwar machen (funktioniert auch), ist aber ebenfalls nicht empfohlen.

  • Das ist auch keine so gute Idee, da du davon ausgehen musst, dass du vielleicht mal 100.000 registrierte Benutzer hast, und das würde doch ziemlich Speicher nutzen und auch etwas beim Laden dauern.
    Kannst du zwar machen (funktioniert auch), ist aber ebenfalls nicht empfohlen.

    Wie kann ich's denn am besten lösen?
    Also das der Serverstart etwas länger braucht ist ja egal, aber würde es Ladeprobleme geben, wenn ich dann bspw.
    new test[128] = PlayerGlobalName[PlayerInfo[playerid][pId]];
    nutzen würde?

  • Die Nutzung von
    PlayerGlobalName[PlayerInfo[playerid][pId]]
    würde keinerlei Ladedauer haben, da es ja komplett im RAM steht.


    Du kannst also problemlos
    format(string, sizeof(string), "Globaler Name: %s", PlayerGlobalName[PlayerInfo[playerid][pId]]);
    nutzen.


    Wenn ich mir die Varianten so durchdenke, ist das wahrscheinlich sogar die beste Möglichkeit. Es kann halt sein, dass du etwas Verzögerung beim Server-Start hast.

  • Jeffry:
    So habe ich es nun. Zu meinem Problem:
    public LoadGlobalNames() {
    new num_fields, num_rows;
    cache_get_data(num_rows, num_fields, Database);
    if(num_rows) {
    new id, name[MAX_PLAYER_NAME];
    for(new i = 0; i < num_rows; i++) {
    id = cache_get_field_content_int(i, "Id", Database);
    cache_get_field_content(i, "Username", name, Database);
    PlayerGlobalName[id] = name;
    printf("Spielername: #%i %s (%s)", id, name, PlayerGlobalName[id]);
    }
    }
    }

    Zitat

    [18:06:37] Spielername: #1 xQueen. ()
    [18:06:37] Spielername: #3 xKing. (xKing.)
    [18:06:37] Spielername: #6 Portgras (Portgras)
    [18:06:37] Spielername: #7 Portgas (Portgas)

    Es liegt aufjedenfall nicht an der Datenbank, das habe ich bereits geprüft.
    Ist etwas am Code falsch?


    Edit:
    So habe ich's definiert
    new PlayerGlobalName[][MAX_PLAYER_NAME];

  • Naja, übertreiben solltest du es nicht, weil du bedenken musst, dass der Speicher dafür reserviert wird, die amx Datei größer wird und der Compiler länger braucht zum kompilieren.
    Das Limit ist also abhängig von den Ressourcen.


    Angenommen du hast 10 Registrationen pro Tag auf deinem Server, dann reichen 10000 für die nächsten drei Jahre. Erst dann müsstest du es erhöhen. Ich, an deiner Stelle, würde es auf 1000 lassen und beobachten wie viele Spieler pro Tag dazu kommen. Entsprechend kannst du es dann anpassen.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Naja, übertreiben solltest du es nicht, weil du bedenken musst, dass der Speicher dafür reserviert wird, die amx Datei größer wird und der Compiler länger braucht zum kompilieren.
    Das Limit ist also abhängig von den Ressourcen.


    Angenommen du hast 10 Registrationen pro Tag auf deinem Server, dann reichen 10000 für die nächsten drei Jahre. Erst dann müsstest du es erhöhen. Ich, an deiner Stelle, würde es auf 1000 lassen und beobachten wie viele Spieler pro Tag dazu kommen. Entsprechend kannst du es dann anpassen.

    Ich mache es dann lieber so, dass der Benutzername in der Datenbank vom Besitzer des Fahrzeuges gespeichert wird und lese es direkt aus.
    Ich glaube das wird so sonst zu resourcefressend.