Problem bei Befehl mit Parameter

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
  • Hey,


    ich habe ein kleines Problem.


    Ich möchte den Befehl /notruf programmieren. Dieser soll folgerndermaßen funktioneren: wird /notruf mit einer ID benutzt, dann soll zu dieser person ein Checkpoint führen. Wird der Befehl jedoch ohne ID verwendet, dann soll eine Liste angezeigt werden, wo alle aufgelistet sind.


    Das Problem welches ich habe ist, dass ich nicht weiß, wie man ausließt ob der Paramter leer ist oder ob eine ID angegeben wurde.

    #if !defined isnull
    #define isnull(%1) \
    ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
    #endif



    ocmd:notruf(playerid,params[])
    {
    new pID,str2[500],name[MAX_PLAYER_NAME];
    if(sInfo[playerid][pFraktion] != 6) return SendClientMessage(playerid,COLOR_HINWEIS,"Du bist kein Sanitäter!");
    //if(sscanf(params,"{u}",pID)) return SendClientMessage(playerid,COLOR_HINWEIS,"INFO: /wiederbeleben [ID]");
    //if(sInfo[playerid][pDuty] != 1) return SendClientMessage(playerid,COLOR_HINWEIS,"Du bist nicht im Dienst!");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_HINWEIS,"Der Spieler ist nicht online!");
    if(isnull(params))
    {
    format(str2,sizeof(str2),"Verbleibende Notrufe: \n");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(sInfo[i][pTot] == 1)
    {
    format(str2, sizeof(str2),"%s [%i] %s Ort: %s, %i Sekunden verbleibend. \n",str2,i,GetPlayerName(i,name,sizeof(name)),GetPlayerArea(i),sInfo[i][pTotZeit]);
    }
    }
    SendClientMessage(playerid,COLOR_RETTUNG,str2);
    return 1;
    }
    else
    {
    SetPlayerCheckpoint(playerid,sInfo[pID][pTotX],sInfo[pID][pTotY],sInfo[pID][pTotZ],5);
    return 1;
    }
    }


    Weiß jemand wie ich bei OCMD prüfe, ob der Paramter gefüllt ist oder nicht ?? (Siehe Zeile 11 & 14)



    Danke

  • /*WEG
    #if !defined isnull
    #define isnull(%1) \
    ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
    #endif*/



    ocmd:notruf(playerid,params[])
    {
    new pID,str2[500],name[MAX_PLAYER_NAME];
    if(sInfo[playerid][pFraktion] != 6) return SendClientMessage(playerid,COLOR_HINWEIS,"Du bist kein Sanitäter!");
    //if(sscanf(params,"{u}",pID)) return SendClientMessage(playerid,COLOR_HINWEIS,"INFO: /wiederbeleben [ID]"); WEG
    //if(sInfo[playerid][pDuty] != 1) return SendClientMessage(playerid,COLOR_HINWEIS,"Du bist nicht im Dienst!"); WEG
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_HINWEIS,"Der Spieler ist nicht online!");
    //if(isnull(params)) ändern in if(sscanf(params,"u",pID))return SetPlayerCheckpoint(playerid,sInfo[pID][pTotX],sInfo[pID][pTotY],sInfo[pID][pTotZ],5);
    {
    format(str2,sizeof(str2),"Verbleibende Notrufe: \n");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(sInfo[i][pTot] == 1)
    {
    format(str2, sizeof(str2),"%s [%i] %s Ort: %s, %i Sekunden verbleibend. \n",str2,i,GetPlayerName(i,name,sizeof(name)),GetPlayerArea(i),sInfo[i][pTotZeit]);
    }
    }
    SendClientMessage(playerid,COLOR_RETTUNG,str2);
    return 1;
    }
    /*else
    {ALLES WEG
    SetPlayerCheckpoint(playerid,sInfo[pID][pTotX],sInfo[pID][pTotY],sInfo[pID][pTotZ],5);
    return 1;
    }*/
    }


    Im Endeffekt sollte es so aussehen :


    ocmd:notruf(playerid,params[])
    {
    new pID,str2[500],name[MAX_PLAYER_NAME];
    if(sInfo[playerid][pFraktion] != 6) return SendClientMessage(playerid,COLOR_HINWEIS,"Du bist kein Sanitäter!");
    if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,COLOR_HINWEIS,"Der Spieler ist nicht online!");
    if(sscanf(params,"u",pID))return SetPlayerCheckpoint(playerid,sInfo[pID][pTotX],sInfo[pID][pTotY],sInfo[pID][pTotZ],5);
    {
    format(str2,sizeof(str2),"Verbleibende Notrufe: \n");
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)) continue;
    if(sInfo[i][pTot] == 1)
    {
    format(str2, sizeof(str2),"%s [%i] %s Ort: %s, %i Sekunden verbleibend. \n",str2,i,GetPlayerName(i,name,sizeof(name)),GetPlayerArea(i),sInfo[i][pTotZeit]);
    }
    }
    SendClientMessage(playerid,COLOR_RETTUNG,str2);
    return 1;
    }
    return 1;
    }

    Einmal editiert, zuletzt von iTsTiMe ()

  • Ach guter Lösungansatz, bin ich nicht drauf gekommen.


    Trotzdem gibt es ein weiteres problem. Wenn Ich nur /notruf benutze, dann zeigt er mir einen Checkpoint an. und wenn ich /notruf 0 schreibe, dann zeigt er mir die leere Liste


    Bin grade dabei es zu versuchen, wie man es löst, aber vielleicht fällt es hier einem ja schneller ein.

  • Danke, hab es aber selber grade festgestellt.


    Probiere grade noch etwas rum, weil es immer noch nicht so funktioniert wie ich es brauche, aber melde mich dann nochmal.


    Trotzdem danke für die Hilfe, hatte die Lösung nicht bedacht.