/accept mit mehreren möglichkeiten hintendran

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 möchte gerne einen befehl wie /accept wo ich aber hintendran mehrere möglichkeiten habe z.B. /accept invite (dann soll was passieren) /accept pd(dann auch was anderes)


    so als beispiel mein bisheriger code


    ocmd:accept(playerid,params[])
    {
    return 1;
    }


    bitte auch wenn möglich erklären wie dies funktioniert


    für einen lerneffekt

  • Am leichtesten kriegst du das mit sscanf hin, das speichert dir den zweiten Parameter in einer extra Variable, die du dann nur noch mittels strcmp abfragen musst.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • gut und schön ich arbeite viel mit sscanf aber deine erklärung hilft insbesondere mir der mit worten nicht immer direkt alles versteht nicht immer:D
    were schön um eine genauere erklärung bzw ein beispiel
    bei fragen bitte fragen diese fragen beantworte ich gern

  • So könntest du das z.B. machen.. Falls du etwas davon nicht versteht, sag bitte bescheid!


    ocmd:accept(playerid,params[])
    {
    new aktion[32];
    if(sscanf(params,"s",aktion)){
    SendClientMessage(playerid,-1,"Benutzung: /accept [Aktion]"); // Die Benutzung vorlegen
    return SendClientMessage(playerid,-1,"Aktionen: invite, pd, ..."); // Alle Aktionen dem Spieler vorlegen
    }
    if(!strcmp(aktion,"invite")){ //Fragen, was der String "aktion" beinhaltet
    //Code für Invite!
    }
    else if(!strcmp(aktion,"pd")){ //Fragen, was der String "aktion" beinhaltet
    //Code für PD!
    }
    return 1;
    }



  • Ich würds dann eher so machen. ^^

  • mit sscanf, if(sscanf(params,"s",usage))return aktion;


    if(!strcmp(usage,"ak1",true)){
    }

    Du könntest das ganze aber auch mit strcmp & strtok klären.(OnPlayerCommandText)

    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }

    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }

    new cmd[128], idx, tmp[128];
    cmd = strtok(cmdtext, idx);
    if(!strcmp(cmd,"/accept",true)){
    tmp=strtok(cmdtext,idx);
    if(!strlen(tmp))return aktion;
    if(!strcmp(tmp,"ak1",true)){
    }
    }

  • oke danke euch allen aber dann verzichte ich auf sscanf und nehme in diesem fall strcmp zur auswahl
    ich werde mir die funktion strcmp durchlesen im wiki wenn ich fragen habe melde ich mich


    danke euch allen

  • Du kannst nicht nut strcmp benutzen!


    Doch in diesem Fall könnte er das tun:


    ocmd:accept(playerid,params[]) {
    if(!params[0]) return SendClientMessage(playerid,-1,"Benutzung: /accept [Aktion]");
    if(!strcmp(params,"invite",true)) {
    //Wenn invite angegben wurde...
    } else if(!strcmp(params,"pd",true)) {
    //Wenn pd angegben wurde...
    }
    return 1;
    }


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S