Unwhitelist Befehl - 2 Errors

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
  • Durch den Thread von FoxHound (Eine bestimmte Zeile aus einem File löschen) hab ich endlich gehofft, das ich einen Unwhitelist befehl erstellen kann, der Spieler von der Whitelist löscht. Doch nun habe ich noch 2 Errors im Befehl.


    dcmd_unwhitelist(playerid,params[]) {
    new name[128];
    if(Spieler[playerid][team] >= 2) {
    if(sscanf(params, "s",name)) {
    return SendClientMessage(playerid,rot,"Benutzung: /unwhitelist [Name]");
    }
    if(fexist("Whitelist.cfg")){
    new temp[256];
    new File:fhandle = fopen("Whitelist.cfg",io_read);
    fread(fhandle,temp,sizeof(temp),false);
    if(strfind(temp,name,true)==-1){return 0;}
    else{
    fclose(fhandle);
    fremove("Whitelist.cfg");
    for(new i=0;i<strlen(temp);i++){
    new templine[256];
    strmid(templine,temp,i,i+strlen(name));
    if(equal(templine,line,true)){
    strdel(temp,i,i+strlen(name));
    fcreate("Whitelist.cfg");
    fhandle = fopen("Whitelist.cfg",io_write);
    fwrite(fhandle,temp);
    fclose(fhandle);
    return 1;
    }
    }
    }
    }
    new string[128];
    format(string,sizeof(string),"%s wurde von der Whitelist entfernt!",name);
    SendClientMessage(playerid,gelb,string);
    print(string);
    }else{
    SendClientMessage(playerid,rot,"Du bist kein Teammitglied!");
    }
    return 1;
    }


    Heir die Errors: C:\Users\KKM\Desktop\samp03asvr_R8_win32\gamemodes\bRL.pwn(468) : error 017: undefined symbol "equal"


    Könnt ihr mir helfen?


    mfg

    Einmal editiert, zuletzt von KKM ()

  • Wenn ich jetzt jemanden aus der Whitelist löschen will, ist die ganze Whitelist.cfg leer...
    So, Befehl sieht nun so aus:


    dcmd_unwhitelist(playerid,params[]) {
    new name[128];
    if(Spieler[playerid][team] >= 2) {
    if(sscanf(params, "s",name)) {
    return SendClientMessage(playerid,rot,"Benutzung: /unwhitelist [Name]");
    }
    fdeleteline("Whitelist.cfg", name);
    new string[128];
    format(string,sizeof(string),"%s wurde von der Whitelist entfernt!",name);
    SendClientMessage(playerid,gelb,string);
    print(string);
    }else{
    SendClientMessage(playerid,rot,"Du bist kein Teammitglied!");
    }
    return 1;
    }


    Der stock:


    stock fdeleteline(filename[], line[]){
    if(fexist(filename)){
    new temp[256];
    new File:fhandle = fopen(filename,io_read);
    fread(fhandle,temp,sizeof(temp),false);
    if(strfind(temp,line,true)==-1){return 0;}
    else{
    fclose(fhandle);
    fremove(filename);
    for(new i=0;i<strlen(temp);i++){
    new templine[256];
    strmid(templine,temp,i,i+strlen(line));
    if(strcmp(templine, line, true) == 0){
    strdel(temp,i,i+strlen(line));
    fcreate(filename);
    fhandle = fopen(filename,io_write);
    fwrite(fhandle,temp);
    fclose(fhandle);
    return 1;
    }
    }
    }
    }
    return 0;
    }

    Einmal editiert, zuletzt von KKM ()

  • Ich glaube es liegt an dieser Zeile ^^:


    fwrite(fhandle,temp);



    Warum?


    Weil du temp löschst und dan wieder versuchst es zu speichern obwohl du den wert von temp an templine übergeben hast? ^^


    also lautet der befehl:


    fwrite(fhandle,templine);


    Sollte funktionieren.
    Ungetestet!

  • Jetzt steht dann in der Whitelist nur noch der Nick den ich entfernt habe...


    mfg

    3 Mal editiert, zuletzt von KKM ()

  • Das habe ich grade nach langem überlegen geschrieben ich hoffe es ist richtig.
    Probier es mal aus.
    Kann fehler enthalten!


    stock deleteFileLine(filename[], line[])
    {
    new nichtGefunden[33] = "Name wurde nicht gefunden";
    if(!fexist(filename)) { return nichtGefunden; }
    new File:fhandle = fopen(filename,io_read);
    new suche[256];
    fread(fhandle,suche);
    if(strfind(suche,line,true) != 1)
    {
    for(new fund=0;fund <strlen(suche);fund++)
    {
    new found[24],delete,pos;
    if(strfind(found,suche)) { delete = strlen(found); }
    new übergabe[256];
    strmid(übergabe,0,delete-(strlen(line)),256);
    strdel(delete,0,strlen(found));
    }
    }
    else { return nichtGefunden; }
    fclose(fhandle);
    new File:neu = fopen(filename,io_write);
    fwrite(neu,übergabe);
    fclose(neu);
    return 0;
    }

  • mhh, leider nicht, Übergabe muste ich in Uebergabe ändern, da es sonst lauter Errors gab wegen dem Ü.


    Hier die neuen Errors:


    C:\Users\KKM\Desktop\samp03asvr_R8_win32\gamemodes\bRL.pwn(2372) : error 035: argument type mismatch (argument 2)
    C:\Users\KKM\Desktop\samp03asvr_R8_win32\gamemodes\bRL.pwn(2373) : error 035: argument type mismatch (argument 1)
    C:\Users\KKM\Desktop\samp03asvr_R8_win32\gamemodes\bRL.pwn(2369) : warning 203: symbol is never used: "pos"
    C:\Users\KKM\Desktop\samp03asvr_R8_win32\gamemodes\bRL.pwn(2379) : error 017: undefined symbol "uebergabe"
    C:\Users\KKM\Desktop\samp03asvr_R8_win32\gamemodes\bRL.pwn(2381) : error 079: inconsistent return types (array & non-array)

  • stock deleteFileLine(filename[], line[])
    {
    new nichtGefunden[33] = "Name wurde nicht gefunden";
    if(!fexist(filename)) { return nichtGefunden; }
    new File:fhandle = fopen(filename,io_read);
    new suche[256];
    fread(fhandle,suche);
    if(strfind(suche,line,true) != 1)
    {
    for(new fund=0;fund <strlen(suche);fund++)
    {
    new found[24],delete,pos; //warning 203: symbol is never used: "pos"
    if(strfind(found,suche)) { delete = strlen(found); }
    new uebergabe[256];
    strmid(uebergabe,0,delete-(strlen(line)),256); //error 035: argument type mismatch (argument 2)
    strdel(delete,0,strlen(found)); //error 035: argument type mismatch (argument 1)
    }
    }
    else { return nichtGefunden; }
    fclose(fhandle);
    new File:neu = fopen(filename,io_write);
    fwrite(neu,uebergabe); //error 017: undefined symbol "uebergabe"
    fclose(neu);
    return 0; //error 079: inconsistent return types (array & non-array)
    }

  • Probier es mal so jetzt aus.
    Ungetestet!


    stock deleteFileLine(filename[], line[])
    {
    new nichtGefunden[33] = "Name wurde nicht gefunden";
    if(!fexist(filename)) { return nichtGefunden; }
    new File:fhandle = fopen(filename,io_read);
    new suche[256];
    fread(fhandle,suche);
    if(strfind(suche,line,true) != 1)
    {
    for(new fund=0;fund <strlen(suche);fund++)
    {
    new found[24],del; // Hatte Pos erstellt aber brauchte es nicht mehr
    if(strfind(found,suche)) { del = strlen(found); }
    new uebergabe[256];
    strmid(uebergabe,0,delete-strlen(line),256); // liegt an der klammer nach dem "-" glaube ich. So sollte es richtig sein.
    strdel(del,0,strlen(found)); // delete wird blau angezeigt vllt ist das eine funktion. Ich habe sie in "del" umbenannt.
    }
    else { return nichtGefunden; }
    fclose(fhandle);
    new File:neu = fopen(filename,io_write);
    fwrite(neu,uebergabe); // Zu früh die for schleife geschlossen
    fclose(neu);
    }
    return 0; // hier weis ich nicht ^^ .
    }