Beiträge von Jeffry

    An dem Code liegt es nicht, sondern an einem Code der
    mysql_fetch_row_format
    aufruft.


    Da:

    Zitat

    [11:14:24] >> mysql_fetch_row_format( Connection handle: 1 )
    [11:14:24] CMySQLHandler::FetchRow() - You cannot call this function now. (Reason: Empty Result)


    Du rufst irgendwo mysql_fetch_row_format auf, ohne ein mysql_query davor zu haben.

    Reloggen muss er sich nicht, das würde ja keinen Sinn geben, das könnte man ebenso wie bei MySQL automatisch machen.


    Allerdings verstehe ich das Problem nicht. Mit dem Code, wenn du den eingefügt hast, kannst du nicht zwei mal Leader werden, oder geht es trotzdem noch? Könntest du ggf mal ein Bild von dem Dialog zeigen?

    Naja, dann musst du noch abfragen ob PlayerInfo[pID][pLeader] auch wirklich 0 ist, und wenn nicht, returnst du eine Nachricht.
    if(PlayerInfo[pID][pLeader]!=0 && Fraktion!=0) return SendClientMessage...


    Das fügst du nach der Zeile unter dem IsPlayerConnected Teil ein, also zwei Zeilen drunter.

    Nicht ganz.
    So sollte es passen:
    ocmd:makeleader(playerid,params[])
    {
    new pID,Fraktion;
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    if(PlayerInfo[playerid][pAdminlevel] <= 1337)return SendClientMessage(playerid,Grau,"Du bist nicht befugt, diesen Befehl zu nutzen!");
    if(sscanf(params,"ui",pID,Fraktion))
    {
    SendClientMessage(playerid,Gelb,"Benutze: /makeleader [playerid/PartOfName] [Fraktion]");
    SendClientMessage(playerid,Gelb,"1 = LSPD, 2 = FBI, 3 = Army, 4 = Medic, 5 = News, 6 = T-GmbH,");
    SendClientMessage(playerid,Gelb,"7 = Abfallwirtschaft, 8 = Hitman, 9 = Grove Street, 10 = Al-Qaida,");
    SendClientMessage(playerid,Gelb,"11 = Ballas, 12 = Fahrschule, 13 = La Cosa Nostra, 14 = Taxi,");
    SendClientMessage(playerid,Gelb,"15 = Yakuza, 16 = Staatsverwaltung, 17 = SAPD, 18 = Aztecas,");
    SendClientMessage(playerid,Gelb,"19 = Rifas, 20 = RS, 21 = Cripz, 22 = Russische Mafia, 23 = SFBC,");
    SendClientMessage(playerid,Gelb,"24 = Vagos, 25 = Wheelmen");
    return 1;
    }
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,Grau,"Der angegebene Spieler ist nicht Online!");
    if(Fraktion < 0 || Fraktion > 25) return SendClientMessage(playerid,Grau,"Bitte nimm eine Fraktion zwischen 0 und 25!");
    if(frakGeschlossen[Fraktion] == true) return SendClientMessage(playerid,Grau,"Die Fraktion ist geschlossen!");
    if(Fraktion == 0)
    {
    new Fraktionsdatei[64];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(PlayerInfo[pID][pFraktion]));
    dini_Set(Fraktionsdatei, "LeaderName", "Niemand");
    }
    else
    {
    new Fraktionsdatei[64];
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(Fraktion));
    dini_Set(Fraktionsdatei, "LeaderName", SpielerName(pID));
    }
    PlayerInfo[pID][pLeader] = Fraktion;
    PlayerInfo[pID][pFraktion] = Fraktion;
    PlayerInfo[pID][pMember] = Fraktion;
    PlayerInfo[pID][pRank] = 7;
    SpawnPlayer(pID);
    if(Fraktion == 0)
    {
    Leaders--;
    }
    else if(Fraktion >= 1)
    {
    Leaders++;
    }
    new string[128],name[MAX_PLAYER_NAME];
    GetPlayerName(pID,name,sizeof(name));
    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"Du hast %s Leader der Fraktion %s gemacht.",name,LeaderRank(pID));
    SendClientMessage(playerid,Blau,string);
    format(string,sizeof(string),"%s hat dich Leader der Fraktion %s gemacht.",name,LeaderRank(pID));
    SendClientMessage(pID,Blau,string);
    return 1;
    }


    Edit:
    TheTutoFreak: Fehler ausgebessert. Kopiere es nochmal.

    Wenn das Level das du ihm gibst gleich 0 ist, dann setzt du den leader in dem Pfad der Fraktionsdatei einfach auf Niemand.


    Wenn du nicht weißt wie, poste deinen makeleader Befehl.

    Nein, in dem Fall nicht, da du ausschließlich nach dem genauen Name suchst. Wenn du meine Funktion schon hast, dann benenne den kleinen stock den ich dir grade gegeben habe um, hänge einfach eine 2 dran, ebenso im leaderlist Befehl.

    ocmd:leaderliste(playerid) //params kannst du weg lassen
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    new Fraktionsdatei[64], leadername[MAX_PLAYER_NAME];
    for(new i=1; i<26; i++)
    {
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(i));
    format(leadername, MAX_PLAYER_NAME, dini_Get(Fraktionsdatei, "LeaderName"));
    if(ReturnPlayerID(leadername) != INVALID_PLAYER_ID)
    {
    if(frakGeschlossen[i]) format(string, sizeof(string), "%s%s Leader: %s [Online] [Geschlossen]\n", string, FraktionsNamen(i), leadername);
    else format(string, sizeof(string), "%s%s Leader: %s [Online]\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    else
    {
    if(frakGeschlossen[i]) format(string, sizeof(string), "%s%s Leader: %s [Offline] [Geschlossen]\n", string, FraktionsNamen(i), leadername);
    else format(string, sizeof(string), "%s%s Leader: %s [Offline]\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }



    stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
    {
    new l_name[MAX_PLAYER_NAME];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
    {
    if(!strcmp(l_name,l_PlayerName, true)) return i;
    }
    }
    return INVALID_PLAYER_ID;
    }



    Man könnte es auch noch etwas anders schreiben, aber so ist es besser für dich verständlich, daher lasse ich es so.

    new string[25];
    format(string,sizeof string,"Wantedlevel: %d",Spieler[killerid][pWanteds]);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerStreamedIn(killerid, i)) //killerid ist für i eingestreamt
    {
    UpdatePlayer3DTextLabelText(i, WantedLevel[i][killerid], 0xC50000FF, string);
    }
    }


    Einfügen in deinen Code musst es aber selbst. ;)

    ocmd:leaderliste(playerid) //params kannst du weg lassen
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    new Fraktionsdatei[64];
    for(new i=1; i<26; i++)
    {
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(i));
    if(frakGeschlossen[i]) format(string, sizeof(string), "%s%s Leader: %s [Geschlossen]\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    else format(string, sizeof(string), "%s%s Leader: %s\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }

    for(new i=0; i<26; i++)
    zu:
    for(new i=1; i<26; i++)



    Willst du die Niemande auch weg haben, oder soll das bleiben? Ich persönlich finde es besser wenn es da ist, dann weiß man es. Ansonsten, sollen Fraktionen ohne Leader nicht angezeigt werden? Und was ist mit den Geschlossenen?

    Dort wo du das Wanted Level erhöhst:
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerStreamedIn(killerid, i))
    {
    //Den anzuzeigenden string formatieren, das bekommst du hin
    UpdatePlayer3DTextLabelText(WantedLevel[i][killerid], ...
    }
    }


    Kommst du damit klar?

    Fast.
    So:
    ocmd:leaderliste(playerid) //params kannst du weg lassen
    {
    if(PlayerInfo[playerid][pEingeloggt] < 1 ) return SendClientMessage(playerid,Rot,"Du kannst diesen Befehl nicht nutzen, weil du nicht eingeloggt bist.");
    new string[1024];
    new Fraktionsdatei[64];
    for(new i=0; i<26; i++)
    {
    format(Fraktionsdatei,sizeof(Fraktionsdatei),"/Fraktionen/%s.txt",FraktionsNamen(i));
    format(string, sizeof(string), "%s%s Leader: %s\n", string, FraktionsNamen(i), dini_Get(Fraktionsdatei, "LeaderName"));
    }
    ShowPlayerDialog(playerid,DIALOG_LEADERS,DIALOG_STYLE_MSGBOX,"Leader Liste",string,"Schliesen","");
    return 1;
    }


    Erkennst du die Unterschiede?

    Nein.
    Das muss aus der Schleife raus:
    if(PlayerInfo[i][pLeader] == 0) continue;


    Dann musst du das Format so schreiben wie ich es geschrieben habe. Das dini_Get muss da drin sein, du willst es ja aus der Datei lesen.
    Außerdem musst du den Fraktionspfad in die Schleife packen.
    Den FraktionsName bekommst du mit deinem stock über i zwischen den ( ).


    Mach das mal.

    Nein, schau dir meinen Post an. Da steht nichts mit MAX_PLAYERS. Du sollst durch die Fraktionen loopen (deshalb die 26). Und dann auf die Datei zugreifen (i = Fraktions ID).
    Passe deinen Befehl dahingehend an.


    Ich will es dir nicht einfach hinschreiben, weil es eigentlich ziemlich einfach ist, und du die Grundlagen lernen sollst und sicher willst.

    public OnPlayerStreamIn(playerid,forplayerid)
    {
    if(Spieler[forplayerid][pFraktion] == 1)
    {
    if(Spieler[playerid][pWanteds] >= 1)
    {
    new string[25];
    format(string,sizeof string,"Wantedlevel: %d",Spieler[playerid][pWanteds]);
    WantedLevel[forplayerid][playerid] = CreatePlayer3DTextLabel(forplayerid,string,0xC50000FF,0.0,0.0,0.5, 30.0, playerid,INVALID_VEHICLE_ID, 0);
    }
    else DeletePlayer3DTextLabel(playerid,WantedLabel[forplayerid][playerid]);
    }
    return 1;
    }


    Außerdem musst du die Variable dann mit [MAX_PLAYERS][MAX_PLAYERS] deklarieren (ja, zwei mal!), da es sonst ab mehr als einem Spieler der angezeigt wird nicht mehr geht.


    Zudem musst du beim StreamOut das Label wieder löschen, sonst erstellst du es X mal.

    Ja! :thumbup:


    Vom Prinzip her so:
    new string[512];
    for(new i=0; i<26; i++)
    {
    format(Fraktionspfad, ...
    format(string, sizeof(string), "%sFraktion: %s | Leader: %s\n", FrakName(i), dini_Get(Fraktionspfad, "LeaderName"));
    }
    ShowPlayerDialog...


    Den Rest bekommst du sicher hin. Ansonsten einfach fragen!