Array zu klein?!

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
  • Hallo!
    Ich kenn wieder mal meinen Fehler nicht^^
    if(strcmp(cmd, "/setrankname", true) == 0)
    {
    if(AccountInfo[playerid][leader] >= 1)
    {
    if(!strlen(strget(cmdtext,1)))
    return
    SendClientMessage(playerid,COLOR_GREY,"Benutze: /setrankname [Rank-ID] [Rankname]");
    new rankid = strval(strget(cmdtext,1));
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[21];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(result[idx]>21){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}
    else{
    new PlayerGangID = AccountInfo[playerid][leader];
    if(rankid==1){GangInfo[PlayerGangID][RankN1]=result;} //Zeile 2797
    else if(rankid==2){GangInfo[PlayerGangID][RankN2]=result;}//Zeile 2798
    else if(rankid==3){GangInfo[PlayerGangID][RankN3]=result;}//Zeile 2799
    else if(rankid==4){GangInfo[PlayerGangID][RankN4]=result;}//Zeile 2800
    else if(rankid==5){GangInfo[PlayerGangID][RankN5]=result;}//Zeile 2801
    else if(rankid==6){GangInfo[PlayerGangID][RankN6]=result;}//Zeile 2802
    else if(rankid==7){GangInfo[PlayerGangID][RankNL]=result;}//Zeile 2803
    else{SendClientMessage(playerid,COLOR_RED,"Ungültige Rank-ID!");}
    }


    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }


    Errors:

  • Hallo,


    kein wuneder Result ist ein Strnig es heißt strval(result);


    MFG RFT




    if(strcmp(cmd, "/setrankname", true) == 0)
    {
    if(AccountInfo[playerid][leader] >= 1)
    {
    if(!strlen(strget(cmdtext,1)))
    return
    SendClientMessage(playerid,COLOR_GREY,"Benutze: /setrankname [Rank-ID] [Rankname]");
    new rankid = strval(strget(cmdtext,1));
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[21];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(result[idx]>21){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}
    else{
    new PlayerGangID = AccountInfo[playerid][leader];
    if(rankid==1){GangInfo[PlayerGangID][RankN1]=result;} //Zeile 2797
    else if(rankid==2){GangInfo[PlayerGangID][RankN2]=strval(result);}//Zeile 2798
    else if(rankid==3){GangInfo[PlayerGangID][RankN3]=strval(result);}//Zeile 2799
    else if(rankid==4){GangInfo[PlayerGangID][RankN4]=strval(result);}//Zeile 2800
    else if(rankid==5){GangInfo[PlayerGangID][RankN5]=strval(result);}//Zeile 2801
    else if(rankid==6){GangInfo[PlayerGangID][RankN6]=strval(result);}//Zeile 2802
    else if(rankid==7){GangInfo[PlayerGangID][RankNL]=strval(result);}//Zeile 2803
    else{SendClientMessage(playerid,COLOR_RED,"Ungültige Rank-ID!");}
    }


    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }

    RFT

  • GangInfo[PlayerGangID][RankN2] ist doch ein String (wenn ich das richtig sehe). Dann bringt strval ja auch nicht viel. Du kannst einen String nicht einfach mit = zuweisen:


    format(GangInfo[PlayerGangID][RankN2],sizeof(GangInfo[PlayerGangID][RankN2]),"%s",result);

  • Stimmt du hast recht.
    Habe nicht genau aufgepasst.




    if(strcmp(cmd, "/setrankname", true) == 0)
    {
    if(AccountInfo[playerid][leader] >= 1)
    {
    if(!strlen(strget(cmdtext,1)))
    return
    SendClientMessage(playerid,COLOR_GREY,"Benutze: /setrankname [Rank-ID] [Rankname]");
    new rankid = strval(strget(cmdtext,1));
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[21];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(result[idx]>21){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}
    else{
    new PlayerGangID = AccountInfo[playerid][leader];
    if(rankid==1){GangInfo[PlayerGangID][RankN1], result, 0, strlen(result), 32);
    else if(rankid==2)strmid({GangInfo[PlayerGangID][RankN2], result, 0, strlen(result), 32);
    else if(rankid==3)strmid({GangInfo[PlayerGangID][RankN3] , result, 0, strlen(result), 32);
    else if(rankid==4)strmid(strmid(GangInfo[PlayerGangID][RankN4] , result, 0, strlen(result), 32);
    else if(rankid==5)strmid(GangInfo[PlayerGangID][RankN5], result, 0, strlen(result), 32);
    else if(rankid==6)strmid(GangInfo[PlayerGangID][RankN6], result, 0, strlen(result), 32);
    else if(rankid==7){GangInfo[PlayerGangID][RankNL]=strval(result);}// RankNL muss oben ein Integer sein kein String
    else{SendClientMessage(playerid,COLOR_RED,"Ungültige Rank-ID!");}
    }


    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }

    RFT

  • Ok, Danke erstemal :)
    Der Befehl klappt mal:
    if(strcmp(cmd, "/setrankname", true) == 0)
    {
    if(AccountInfo[playerid][leader] >= 1)
    {
    if(!strlen(strget(cmdtext,1)))
    return
    SendClientMessage(playerid,COLOR_GREY,"Benutze: /setrankname [Rank-ID] [Rankname]");
    new rankid = strval(strget(cmdtext,1));
    new length = strlen(cmdtext);
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[21];
    while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
    {
    result[idx - offset] = cmdtext[idx];
    idx++;
    }
    result[idx - offset] = EOS;
    if(result[idx]>21){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}
    else{
    new PlayerGangID = AccountInfo[playerid][leader];
    if(rankid==1){strmid(GangInfo[PlayerGangID][RankN1], result, 0, strlen(result), 32);}
    else if(rankid==2){strmid(GangInfo[PlayerGangID][RankN2], result, 0, strlen(result), 32);}
    else if(rankid==3){strmid(GangInfo[PlayerGangID][RankN3], result, 0, strlen(result), 32);}
    else if(rankid==4){strmid(GangInfo[PlayerGangID][RankN4], result, 0, strlen(result), 32);}
    else if(rankid==5){strmid(GangInfo[PlayerGangID][RankN5], result, 0, strlen(result), 32);}
    else if(rankid==6){strmid(GangInfo[PlayerGangID][RankN6], result, 0, strlen(result), 32);}
    else if(rankid==7){strmid(GangInfo[PlayerGangID][RankNL], result, 0, strlen(result), 32);}
    else{SendClientMessage(playerid,COLOR_RED,"Ungültige Rank-ID!");}
    format(string,sizeof(string),"Du hast den Namen von Rang %d auf '%s' geändert!",rankid,result);
    SendClientMessage(playerid,LIGHTBLUE,string);
    }


    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }


    Mein Problem ist jetzt, dass wenn ich "/setrankname 1 Blubb" eingebe, dann ist der Rankname "1 Blubb"
    Wie kann ich denn das jetzt machen..


    Also mein Problem ist halt, ich will nur den 2. Teil den man eingibt abfragen, aber mir ist noch immer ein Rätsel wie ich das anstellen soll.

    2 Mal editiert, zuletzt von Firefox ()

  • Ich würde dir einfach empfehlen sscanf zu benutzen,damit wäre das leicht gelößt.


    if(strcmp(cmd, "/setrankname", true) == 0)
    {
    if(AccountInfo[playerid][leader] >= 1)
    {
    new
    iRank,
    sRankname[32];
    if(sscanf(cmdtext[13],"ds",iRank,sRankname)) {
    SendClientMessage(playerid,COLOR_GREY,"Benutze: /setrankname [Rank-ID] [Rankname]");
    }
    if( strlen(sRankname) > 20 ){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}
    new PlayerGangID = AccountInfo[playerid][leader];
    if(rankid==1){strmid(GangInfo[PlayerGangID][RankN1], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==2){strmid(GangInfo[PlayerGangID][RankN2], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==3){strmid(GangInfo[PlayerGangID][RankN3], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==4){strmid(GangInfo[PlayerGangID][RankN4], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==5){strmid(GangInfo[PlayerGangID][RankN5], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==6){strmid(GangInfo[PlayerGangID][RankN6], sRankname, 0, strlen(sRankname), 32);}
    else if(rankid==7){strmid(GangInfo[PlayerGangID][RankNL], sRankname, 0, strlen(sRankname), 32);}
    else{SendClientMessage(playerid,COLOR_RED,"Ungültige Rank-ID!");}
    format(string,sizeof(string),"Du hast den Namen von Rang %d auf '%s' geändert!",iRank,sRankname);
    SendClientMessage(playerid,LIGHTBLUE,string);
    }


    }
    else
    {
    SendClientMessage(playerid, COLOR_LIGHTRED,"Du darfst diesen Befehl nicht benutzen !");
    }
    return 1;
    }


    Möglich dass es mit
    strget(cmdtext,2)
    auch funktioniert.Das müsstest du dann anstatt result beim kopieren benutzen.


    Übrigens ist
    if(result[idx]>21){SendClientMessage(playerid,COLOR_RED,"Maximal 20 Zeichen!");}

    völiger Mist.Das überprüft nur ob an der Stellen von idx ein Wert höher als 21 gespeichert ist. Die Länge müsstest du schon mit strlen prüfen oder ob idx größer als 32 ist.