Fraktionschat Problem | MySQL Ausgabe

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
  • Guten Tag,


    Ich habe mich an ein Fraktions Rangsystem gesetzt. Diese sind per Befehl InGame vom Leader änderbar.
    Nun habe ich versucht einen Fraktionschat zu schreiben. Jedoch funktioniert dies nicht ganz so wie ich wollte.
    Der Rang Name wird nicht angezeigt. Beispiel: (( Akira_Miyako: Test )) und nicht wie gewollt: (( Rang3 Akira_Miyako: Test ))


    Der Fraktionschat Befehl

    ocmd:f(playerid,params[])
    {
    if(SpielerInfo[playerid][pFrak] == 4 || SpielerInfo[playerid][pFrak] == 5 || SpielerInfo[playerid][pFrak] == 6)
    {
    new text[128];
    new textstring[128];
    new Rangname[64];
    if(sscanf(params,"s",text))return SendClientMessage(playerid,weiss,"Benutzung: /f [TEXT]");
    {
    new fID = SpielerInfo[playerid][pFrak];
    LoadRang(fID);
    switch(SpielerInfo[playerid][pFrakRank])
    {
    case 0:{Rangname="Unbekannt";}
    case 1:{Rangname=fInfo[fID][fRang1];}
    case 2:{Rangname=fInfo[fID][fRang2];}
    case 3:{Rangname=fInfo[fID][fRang3];}
    case 4:{Rangname=fInfo[fID][fRang4];}
    case 5:{Rangname=fInfo[fID][fRang5];}
    case 6:{Rangname=fInfo[fID][fRang6];}
    }
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(isPlayerInFrakt(i,SpielerInfo[playerid][pFrak]))
    {
    format(textstring,sizeof(textstring)," (( %s %s: %s. ))",Rangname,SpielerName(playerid),text);
    SendClientMessage(i,blau,textstring);
    }
    }
    }
    }
    }
    return 1;
    }

    Hier der LoadRang stock

    stock LoadRang(frakid)
    {
    for(new i = 0; i < MAX_FRACS; i++)
    {
    new string[128];
    format(string,sizeof(string), "%d", frakid);
    format(fInfo[i][fRang1],64,"%s",mysql_GetString("frakranks", "Rang1", "ID", string));
    format(fInfo[i][fRang2],64,"%s",mysql_GetString("frakranks", "Rang2", "ID", string));
    format(fInfo[i][fRang3],64,"%s",mysql_GetString("frakranks", "Rang3", "ID", string));
    format(fInfo[i][fRang4],64,"%s",mysql_GetString("frakranks", "Rang4", "ID", string));
    format(fInfo[i][fRang5],64,"%s",mysql_GetString("frakranks", "Rang5", "ID", string));
    format(fInfo[i][fRang6],64,"%s",mysql_GetString("frakranks", "Rang6", "ID", string));
    }
    }


    Ich hoffe mir kann wer helfen. Danke schonmal im Vorraus.

  • Naja ich weiß zwar nicht wieso der Rang nicht angezeigt wird aber dennoch habe ich einen kleinen Fehler beim laden der Ränge entdeckt.
    Mit LoadRang erreichst du derzeit, dass die jeweiligen Ränge aus der angegebenen frakid ALLEN Fraktionen zugewiesen wird. Ich denke nicht, dass dies gewollt ist (oder?). Falls du möchtest, dass die Ränge mit LoadRang nur für eine Fraktion geladen wird, streich die for schleife weg und lass nur die formats (setze als Arrayindex frakid statt i).


    Anderenfalls (würde ich auch eher empfehlen) könntest du auch alle Ränge bei OnGameModeInit einmal in die fInfos mit der Forschliefe laden und lässt frakid einfach ganz aus dem Spiel. Statt frakid konvertierst du einfach i in einen string. Somit würde auch nur einmal beim Laden des GameModes auf die Datenbank zugegriffen werden, statt bei jeder /f-Chat aktion.

  • Nein, LoadRang lädt nur die Ränge der Fraktion die angegeben wird.
    fID steht ja auch für die Fraktion (Steht auch im Befehl).
    Jedoch danke ich dir für deinen Tipp. Hoffe mir kann jemand helfen.

  • Nein, LoadRang lädt nur die Ränge der Fraktion die angegeben wird.
    fID steht ja auch für die Fraktion (Steht auch im Befehl).
    Jedoch danke ich dir für deinen Tipp. Hoffe mir kann jemand helfen.


    Gerade das tut es nicht (ganz so) ...


    So müsste es aussehen, um die Ränge für nur 1 Fraktion zu laden:

    stock LoadRang(frakid)
    {
    new string[128];
    format(string,sizeof(string), "%d", frakid);
    format(fInfo[frakid][fRang1],64,"%s",mysql_GetString("frakranks", "Rang1", "ID", string));
    format(fInfo[frakid][fRang2],64,"%s",mysql_GetString("frakranks", "Rang2", "ID", string));
    format(fInfo[frakid][fRang3],64,"%s",mysql_GetString("frakranks", "Rang3", "ID", string));
    format(fInfo[frakid][fRang4],64,"%s",mysql_GetString("frakranks", "Rang4", "ID", string));
    format(fInfo[frakid][fRang5],64,"%s",mysql_GetString("frakranks", "Rang5", "ID", string));
    format(fInfo[frakid][fRang6],64,"%s",mysql_GetString("frakranks", "Rang6", "ID", string));
    }


    Die for schleife würde sonst wirklich jede Fraktion mit den Rängen EINER EINZIGEN fraktion besetzen.