Leaderliste Funkt nicht warum

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
  • DIALOG:


    #define DIALOG_VOGELLEADER 13597


    if(strcmp("/leaderlist", cmd, true) == 0)
    {
    new data[128],fName,sName[MAX_PLAYER_NAME],ShowList[1200];
    mysql_query("SELECT `Name`, `Leader` FROM `users` WHERE `Leader` > 0");
    mysql_store_result();
    while(mysql_fetch_row_format(data)){
    sscanf(data,"p<|>s[20]d",sName,fName);
    format(data,128,"{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",GetFraktion(fName),sName,((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online")));
    strcat(ShowList,data);
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOG_VOGELLEADER,DIALOG_STYLE_MSGBOX,"Leaders",ShowList,"Bestätigen","");
    return 1;
    }


    Unter stocks:
    stock GetFraktion(frak){
    new fName[20]="Unbekannt";
    switch(frak){
    case 1:fName="N.S.A";
    case 2:fName="Parkhouse Drifer";
    case 3:fName="Feuerwehr";
    case 4:fName="Medic";
    case 5:fName="La Cosa Nostra";
    case 6:fName="Yakuza";
    case 7:fName="F.B.I";
    case 8:fName="Hitman";
    case 9:fName="News Reporter";
    case 10:fName="Wheelman";
    case 11:fName="Fahrschule";
    case 12:fName="Regierung";
    case 13:fName="Ordnungsamt";
    case 14:fName="SAPD";
    case 15:fName="Hells Angels";
    case 16:fName="Nichts";
    case 17:fName="Russen Mafia";
    case 18:fName="Aztecas";
    case 19:fName="Grove Street";
    case 20:fName="Ballas";
    case 21:fName="WCC";
    case 22:fName="Triaden";
    case 23:fName="Red Soliders";
    case 24:fName="L.S Vagos";
    case 25:fName="Guerilla";
    case 26:fName="Cali Kartell";
    }
    return fName;


    }


    stock OnlineByName(string[]){
    new i;
    for(; i < MAX_PLAYERS ; ++i)if(IsPlayerConnected(i) && !strcmp(string,PlayerInfo[i][pLeaderListe],false))return 1;
    return 0;
    }


    OnPlayerConnect:
    GetPlayerName(playerid,PlayerInfo[playerid][pLeaderListe],MAX_PLAYER_NAME);


    InGame Steht jedoch "Unbekannt Leader"

  • Was wird geprintet, wenn du es so schreibst?
    if(strcmp("/leaderlist", cmd, true) == 0)
    {
    new data[128],fName,sName[MAX_PLAYER_NAME],showList[1200];
    mysql_query("SELECT `Name`, `Leader` FROM `users` WHERE `Leader` > 0");
    mysql_store_result();
    while(mysql_fetch_row_format(data)){
    printf("data: %s", data);
    sscanf(data,"p<|>s[20]d",sName,fName);
    printf("sName: %s | fName: %d | return: %s", sName, fName, GetFraktion(fName));
    format(showList,sizeof(showList),"%s{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",showList,GetFraktion(fName),sName,((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online")));
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOG_VOGELLEADER,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen","");
    return 1;
    }

  • [14:52:25] data: Jayden|24
    [14:52:25] sName: Jayden|24 | fName: 0 | return: Unbekannt
    [14:52:25] data: Anabulism|4
    [14:52:25] sName: Anabulism|4 | fName: 0 | return: Unbekannt
    [14:52:25] data: Paco_Shakur|14
    [14:52:25] sName: Paco_Shakur|14 | fName: 0 | return: Unbekannt
    [14:52:25] data: Syntro|14
    [14:52:25] sName: Syntro|14 | fName: 0 | return: Unbekannt

  • So sollte es dann klappen:
    if(strcmp("/leaderlist", cmd, true) == 0)
    {
    new data[128],fName,sName[MAX_PLAYER_NAME],showList[1200];
    mysql_query("SELECT `Name`, `Leader` FROM `users` WHERE `Leader` > 0");
    mysql_store_result();
    while(mysql_fetch_row_format(data)){
    format(data, sizeof(data), "%s|", data);
    printf("data: %s", data);
    sscanf(data,"p<|>s[20]d",sName,fName);
    printf("sName: %s | fName: %d | return: %s", sName, fName, GetFraktion(fName));
    format(showList,sizeof(showList),"%s{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",showList,GetFraktion(fName),sName,((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online")));
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOG_VOGELLEADER,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen","");
    return 1;
    }


    Wenn nicht, poste nochmal den Log.


  • [15:00:13] data: Jayden|24|
    [15:00:13] sName: Jayden|24| | fName: 0 | return: Unbekannt
    [15:00:13] data: Anabulism|4|
    [15:00:13] sName: Anabulism|4| | fName: 0 | return: Unbekannt
    [15:00:13] data: Paco_Shakur|14|
    [15:00:13] sName: Paco_Shakur|14| | fName: 0 | return: Unbekannt
    [15:00:13] data: Syntro|19|
    [15:00:13] sName: Syntro|19| | fName: 0 | return: Unbekannt
    Kommt immer noch so^^


    //EDIT: Fraktionen werden nun angezeigt habe jetzt #include <sscanf2> hinzugefügt.
    Jedoch klappt die Online / Offline anzeige Leider nicht wäre lieb wenn du mir helfen könntest dies zu beheben.

    2 Mal editiert, zuletzt von Geeflow ()

  • Immer dieses sscanf...


    Schreibe es so:

    Spoiler anzeigen
    if(strcmp("/leaderlist", cmd, true) == 0)
    {
    new data[128],fName,sName[MAX_PLAYER_NAME],showList[1200];
    mysql_query("SELECT `Name`, `Leader` FROM `users` WHERE `Leader` > 0");
    mysql_store_result();
    while(mysql_fetch_row_format(data)){
    strins(data, "|", strlen(data));
    printf("data: %s", data);
    new oldi=0, count=0;
    for(new i=0; i<strlen(data); i++)
    {
    if(data[i]=='|')
    {
    count++;
    new tmpstring[sizeof(data)]; tmpstring=data;
    strdel(tmpstring, i, strlen(tmpstring));
    strdel(tmpstring, 0, oldi+1);
    switch(count)
    {
    case 1: format(sName, sizeof(sName), "%s", tmpstring);
    case 2: fName = strval(tmpstring);
    }
    oldi=i;
    }
    }
    printf("sName: %s | fName: %d | return: %s", sName, fName, GetFraktion(fName));
    format(showList,sizeof(showList),"%s{FFFFFF}%s Leader: %s (%s{FFFFFF})\n",showList,GetFraktion(fName),sName,((!OnlineByName(sName))?("{F6000F}Offline"):("{00EE14}Online")));
    }
    mysql_free_result();
    ShowPlayerDialog(playerid,DIALOG_VOGELLEADER,DIALOG_STYLE_MSGBOX,"Leaders",showList,"Bestätigen","");
    return 1;
    }


    Ist im Prinzip das gleiche wie sscanf, nur manuell.


    Nutzt du die Funktion oder das Plugin?




    EDIT: Edit erst nach dem posten gesehen.
    Ok, gut.



    Dann poste mal deine OnlineByName Funktion.

  • Ich habe jetzt im Script einen sscanf stock
    und include sscanf2
    sowie das sscanf plugin^^


    Nur die Online anzeige geht halt nicht


    //EDIT:
    habe ich bei pInfo: pLeaderListe


    stock OnlineByName(string[]){
    new i;
    for(; i < MAX_PLAYERS ; ++i)if(IsPlayerConnected(i) && !strcmp(string,PlayerInfo[pLeaderListe],false))return 1;
    return 0;
    }
    OnPlayerConnect:
    GetPlayerName(playerid,PlayerInfo[playerid][pLeaderListe],MAX_PLAYER_NAME);

  • Schreibe die Funktion mal so, geht es dann?
    Wenn nein, wer von den 4'en ist online?


    stock OnlineByName(string[])
    {
    for(new i; i < MAX_PLAYERS ; ++i) if(IsPlayerConnected(i) && !strcmp(string,PlayerInfo[i][pLeaderListe],false) && strlen(PlayerInfo[i][pLeaderListe]) > 1) return 1;
    return 0;
    }


  • Klappt leider nicht Syntro ist Online also ich^^

  • Ich habe es bei mir mal so geschrieben, da klappt es:
    stock OnlineByName(string[])
    {
    for(new i; i < MAX_PLAYERS ; ++i) if(IsPlayerConnected(i) && !strcmp(string,pName(i),false)) return 1;
    return 0;
    }


    stock pName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
    }


    Teste es mal so. Ich hab es halt ohne die Variable geschrieben, da ich die ja nicht habe, aber vom Prinzip her ist es das gleiche.


  • Klappt leider nicht Syntro ist Online also ich^^



    Klappt nun mit Online Offline sind halt nur paar neue Warnings 3 stück


    C:\Users\bizzi\Desktop\Los Santos Roleplay - by Source 2.0\gamemodes\LsR-RP455.pwn(81054) : warning 219: local variable "pName" shadows a variable at a preceding level
    C:\Users\bizzi\Desktop\Los Santos Roleplay - by Source 2.0\gamemodes\LsR-RP455.pwn(81070) : warning 219: local variable "pName" shadows a variable at a preceding level
    C:\Users\bizzi\Desktop\Los Santos Roleplay - by Source 2.0\gamemodes\LsR-RP455.pwn(81085) : warning 219: local variable "pName" shadows a variable at a preceding level
    ist aber nicht weiter schlimm denke ich^^

  • Würdet ihr das mit denn Vollzitaten bitte unterlassen? Danke.


    Schreibe es so:
    stock OnlineByName(string[])
    {
    for(new i; i < MAX_PLAYERS ; ++i) if(IsPlayerConnected(i) && !strcmp(string,f_pName(i),false)) return 1;
    return 0;
    }


    stock f_pName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, MAX_PLAYER_NAME);
    return name;
    }


    Das solltest du noch nicht deklariert haben.

  • Du machst eine Schleife in deinen Befehl, etwa so:
    new string[1024];
    for(new i=0; i<MAX_FRAKTIONEN; i++)
    {
    //Pfad zur Datei:
    new path[128];
    format(path, sizeof(path), "fraktionen/%s.txt", FrakName[i]);
    if(fexist(path))
    {
    //dann den Leader-Name auslesen:
    new leader[24];
    format(leader, sizeof(leader), dini_Get(path, "Leader"));
    //und dann zum string hinzufügen:
    format(string, sizeof(string), "%s%s: Leader: %s\n", string, FrakName[i], leader);
    }
    }
    //hier dann...
    ShowPlayerDialog...

  • Jetzt habe ich es so:

    ocmd:leaderliste(playerid,params[])
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024],Leaderliste;
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    //Pfad zur Datei:
    new path[128];
    format(path, sizeof(path), "Accounts/%s.txt", dini_Get(path, "Leader"));
    if(fexist(path))
    {
    //dann den Leader-Name auslesen:
    new leader[24];
    format(leader, sizeof(leader), dini_Get(path, "Leader"));
    //und dann zum string hinzufügen:
    format(string, sizeof(string), "%s%s: Leader: %s\n", string, dini_Get(path, "Leader"), leader);
    }
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",Leaderliste,"Schliesen","");
    return 1;
    }

    ist das richtig ?

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen