Fehler mit strcmp

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 Community,


    ich habe ein Problem mit strcmp bei vergleichen zweier Strings.


    Code

    // Strukturen


    // Spieler
    enum Player
    {
    Player_ID, // Derzeitige ID im Spiel
    Player_Name, // Spielername
    Player_Team, // Team (Polizei/Gangster)
    Player_Money, // Geld
    bool:Player_IsUsed // Ob der Slot benutzt wird
    };


    // Globale Variablen
    new Players[200][Player];
    new Playernames[200][MAX_PLAYER_NAME];


    // Funktionen zum ermitteln der ID's
    stock GetMySQLID(playerid)
    {
    for (new i = 0; i < 199; i++)
    {
    new Name[MAX_PLAYER_NAME] = GetPlayerName(playerid);
    if (Players[i][Player_ID] == playerid &&
    Players[i][Player_IsUsed] == true &&
    strcmp(Players[i][Player_Name],Name , true, MAX_PLAYER_NAME) == 0) // 44
    {
    return i;
    }
    }
    return -1;
    }


    Ich bekomme folgende Warnungen/Fehler

    (44) warning 202: number of arguments does not match definition
    (44) warning 202: number of arguments does not match definition
    (44) error 008: must be a constant expression; assumed zero


    Ich weiß echt nicht was ich falsch mache.
    Gibt es vielleicht auch einen anderen Weg für OOP in Pawn außer dieses Pseudo OOP?


    MfG CookieWarrior

  • Gibt es vielleicht auch einen anderen Weg für OOP in Pawn außer dieses Pseudo OOP?


    Nope, pawn unterstützt kein OOP. Es sei denn du kannst C++, dann kannste das über umwege per plugin machen.


    Zu deinem Problem: Versuchs mal so:
    [pwn=44]if(Players[i][Player_ID] == playerid && Players[i][Player_IsUsed] && !strcmp(Players[i][Player_Name], Name , true))[/pwn]

    The fact is, I am right. And if you think I'm wrong, you are wrong.

  • enum Player
    {
    Player_ID, // Derzeitige ID im Spiel
    Player_Name, // Spielername
    Player_Team, // Team (Polizei/Gangster)
    Player_Money, // Geld
    bool:Player_IsUsed // Ob der Slot benutzt wird
    }; // Hier das ; musste weg machen^^



    Mfg Fabii


  • Wer hat denn überhaupt die Idee gehabt, dass das ; dort einen Unterschied macht ? Das ist völlig egal, ob dort ein ; ist oder nicht.


    new Name[MAX_PLAYER_NAME] = GetPlayerName(playerid);
    Das ist schon mal falsch.


    stock GetMySQLID(playerid) {
    new
    Name[MAX_PLAYER_NAME];
    for (new i = 0; i < 200 ; i++) // Wieso hattest du hier 199 ?
    {
    GetPlayerName(playerid,Name,sizeof(Name));
    if( ( Players[i][Player_ID] == playerid ) &&
    ( Players[i][Player_IsUsed] == true ) &&
    ( !strcmp(Players[i][Player_Name],Name , true, MAX_PLAYER_NAME) )
    )
    {
    return i;
    }
    }
    return -1;
    }


    Wie auch immer,Ich versteh die Idee hinter deiner Player-Verwaltung nicht.Für mich sieht das nämlich nicht so aus, als würdest du mit einmaligen UserID's arbeiten.

  • Ja ich hab mir noch mal Gedanken über das ganze gemacht und die Player "Strukur" umstrukturiert.


    Wenn ich ein Plugin in C++ schreiben will muss ich es doch als DLL kompilieren, oder wie handelt SA MP Plugins?