Namen überprüfen

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
  • Guten Morgen zusammen,


    ich möchte ein Befehl machen.


    Dies soll zwei Namen überprüfen und wenn beide übereinstimmen soll eine Nachricht erscheinen.


    Eins von den beiden Namen stand vorher in einem enum.
    Sprich: HausInfo[hTest1]


    Wie macht man das?
    Ich habs versucht, scheitere jedoch an der Überprüfung.



    for(new i = 0; i < sizeof(HouseInfo); i++)
    {
    new plname[MAX_PLAYER_NAME];
    new fertig;
    fertig = GetPlayerName(playerid, plname, sizeof(plname));


    if(HouseInfo[i][hNameVonAnderem] == fertig)
    {
    //Befehl
    }


    3 Mal editiert, zuletzt von bfkj ()

  • Benutze einfach strfind:


    if(strfind(HausInfo[hTest1], fertig, true) != -1)

  • Hmm bekomme Error Meldungen:


    E:\gta\Grand Theft Auto San Andreas\gtaserver1\gamemodes\bfkj.pwn(24383) : error 032: array index out of bounds (variable "HausInfo")
    E:\gta\Grand Theft Auto San Andreas\gtaserver1\gamemodes\bfkj.pwn(24382) : warning 204: symbol is assigned a value that is never used: "fertig"


    Wie macht man das mit mehreren HausInfos?


    So z.B.?
    if(strfind(HausInfo[hTest1]||HausInfo[hTest2]||HausInfo[hTest3], fertig, true) != -1)


    Aber schonmal vielen Dank für Deine Hilfe.

  • Oh mein Fehler,
    HausInfo[i][hTest1] müsste dahin ;-).


    Jedoch kommt trotzdem eine Fehlermeldung:


    E:\gta\Grand Theft Auto San Andreas\gtaserver1\gamemodes\bfkj.pwn(24383) : error 035: argument type mismatch (argument 2)
    E:\gta\Grand Theft Auto San Andreas\gtaserver1\gamemodes\bfkj.pwn(24382) : warning 204: symbol is assigned a value that is never used: "fertig"

    5 Mal editiert, zuletzt von bfkj ()

  • Also ich meine, wenn der Name aus der Variable:


    HouseInfo[hNamevomAnderem]
    vom Spieler der den Befehl eingibt gleicht, dann soll der Befehl halt gehen.
    Wenn die Namen nicht gleichen soll halt ein Text erscheinen.


    Zur Not kann man ja auch die ID vergleichen.


    Mit GetPlayerID.

    2 Mal editiert, zuletzt von bfkj ()

  • Leider wird die erste Funktion ausgeführt. Auch wenn die Namen nicht übereinstimmen :/.


    Sprich:
    //hier den kram wenn das überein stimmt


    Ich verstehe einfach nicht was daran falsch sein kann =/.

    Egal wie ich es umgestalte funktioniert es nicht >.<.

    3 Mal editiert, zuletzt von bfkj ()

  • for(new i = 0; i < sizeof(HouseInfo); i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    new plname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, plname, sizeof(plname));


    if(!strcmp(HouseInfo[i][hNameVonAnderem], plname, true))
    {
    // wenn es stimmt
    }
    }

  • he irwie komm ich grad nicht mit
    for(new i = 0; i < sizeof(HouseInfo); i++)
    {
    if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
    new plname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, plname, sizeof(plname));


    if(strcmp(HouseInfo[i][hNameVonAnderem], plname, true))
    {
    // wenn es stimmt
    }
    if(!strcmp(HouseInfo[i][hNameVonAnderem], plname, true))
    {
    // wenn es nicht stimmt
    }
    }

  • Drugstar.


    if(strcmp(HouseInfo[hNameVonAnderem], plname, true)


    Das strcmp ist dazu da zwei Werte miteinander zu vergleichen und wenn diese beiden Werte übereinstimmen soll er halt ein Befehl ausführen z.B.


    Wenn du diest hast:
    if(strcmp(HouseInfo[i][hNameVonAnderem], plname, true))
    {
    // wenn es stimmt
    }
    if(!strcmp(HouseInfo[i][hNameVonAnderem], plname, true))
    {
    // wenn es nicht stimmt
    }


    würdest du sozusagen kein else haben, sprich du würdest keinen Befehl machen der ausgeführt werden soll falls die beiden Werte nicht gleich sind.


    Wäre ja sinnlos beides nochmal zu überprüfen.


    So wäre es richtig.
    if(strcmp(HouseInfo[i][hNameVonAnderem], plname, true))
    {
    // wenn es stimmt
    }
    else
    {
    // wenn es nicht stimmt
    }


    Trotzdem zurück zu meinem Fehler, es geht einfach nicht =(.

  • for(new i = 0; i < sizeof(HouseInfo); i++)
    {
    new plname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, plname, sizeof(plname));


    if(HouseInfo[i][hNameVonAnderem] == plname)
    {
    //Befehl
    }

  • Führt zu einem solchen Error:
    E:\gta\Grand Theft Auto San Andreas\gtaserver1\gamemodes\bfkj.pwn(24386) : error 033: array must be indexed (variable "plname")


    Hab ja soviel schon getestet,


    if(!strcmp(HouseInfo[i][hNameVonAnderem], plname, true))



    Scheint mir ja sehr logisch. Aber die Überprüfung von den Werten läuft einfach falsch.

    3 Mal editiert, zuletzt von bfkj ()

  • Also normalerweise muss es so gehen, wie ihr es oben gepostet habt:


    for(new i = 0; i<sizeof(HouseInfo); i++)
    {
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    if(strcmp(pname, HouseInfo[i][hNameVonAnderem], true) == 0)
    {
    SendClientMessage(playerid, COLOR_GREY, "Dein Name stimmt überein!");
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Dein Name stimmt NICHT überein!");
    }
    }


    Wenn es so halt nicht geht, prüf dann ob du beim Definieren von "hNameVonAnderem" auch eine Array gesetzt hast, also " ...hNameVonAnderem[MAX_PLAYER_NAME],". Es kann ja sein, dass du den Namen falsch reinschreibst, um ihn richtig erstmal reinzuschreiben, um den später zu prüfen geht es so:



    ...
    new pname[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pname, sizeof(pname));
    strmid(HouseInfo[i][hNameVonAnderem], pname, 0, strlen(pname), 255);
    ...


    Einfach nur als Info, falls du es vielleicht nicht wusstest^^