strcmp mit parametern

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 liebe Scripter,


    Ich Scripte ja schon ein ziemliches weilchen an meinem Selfmade Script,
    Ich habe aber nie strcmp Befehle mit Parametern erstellt nur OCMD: befehle ... Kann mir jemand erklären wie ich mit STRCMP Befehle machen kann mit parametern


    Danke im Vorraus :D

    Mit freundlichen Grüßen,
    Dachdecker

  • strcmp steht für "string compare" - es vergleicht zwei Strings miteinander.
    Grundsätzlich hat das nichts mit Parametern zu tun.
    Du müsstest den Command Text (cmdtext) splitten (strtok ist dafür nützlich) und erst dann mit strcmp vergleichen.


    #Brotfischbaron


    In schā'a llāh

  • public OnPlayerCommandText(playerid, cmdtext[])
    {
    new cmd[30], parameter[128];
    sscanf(cmdtext, "ss", cmd, parameter);

    if(strcmp(cmd, "/befehl", true) == 0)
    {
    sscanf(parameter, "ddd", variablen);
    }

    return 0;
    }


    So ists korrekt, denk ich mal..

  • COMMAND:test(playerid,params[])
    {
    new cmd[35];
    if(sscanf(params,"s[35]",cmd))
    {
    SendClientMessage(playerid,-1,"BENUTZE: /Test [Art]");
    SendClientMessage(playerid,-1,"ART: Test, Test2");
    return 1;
    }
    if(strcmp(cmd,"Test",true) == 0)
    {
    //Wenn du InGame "/Test Test" ein gegeben hast
    return 1;
    }
    else if(strcmp(cmd,"Test2",true) == 0)
    {
    //Wenn du InGame "/Test Test2" ein gegeben hast
    return 1;
    }
    return 1;
    }
    Brauchst du da noch eine genauere Erklärung zu?

  • Wie mache ich jetzt weiter?

    ocmd:kick(playerid,params[])
    {
    new Grund[128],
    Kickspieler;
    if(sscanf(params,"us[128]",Kickspieler,Grund))
    {
    Nachricht(playerid,Weiss,"Benutzen Sie : /Kick [ Spielername/ID ] [ Grund ]");
    }
    return 1;
    }

    Mit freundlichen Grüßen,
    Dachdecker

  • ocmd:kick(playerid,params[])
    {
    new Grund[128],
    pID;//Ich würde dir raten es pID zu nennen, da dies nicht so lang ist und man sich gut merken kann für den weiteren verlauf
    if(sscanf(params,"us[128]",pID,Grund))return Nachricht(playerid,Weiss,"Benutzen Sie : /Kick [ Spielername/ID ] [ Grund ]"); //Hier gibt er durch das "return" die Nachricht aus wenn ein Parameter nicht berücksichtigt wurde
    Kick(pID); //Hier wird nun die angegebene ID oder der angegebene Name gekickt
    return 1;
    }


  • ocmd:kick(playerid,params[])
    {
    new Grund[128] ,
    pID ,
    string[128] ,
    string2[128];
    if(sscanf(params,"us[128]",pID,Grund)) return Nachricht(playerid,Weiss,"Benutzen Sie : /Kick [Spielername (ID)] [Grund]");
    format(string,sizeof(string),"Der Spieler %s wurde vom Server gekickt. Grund : %s",pID,Grund);
    NachrichtAnAlle(Rot,string);
    format(string2,sizeof(string2),"Sie wurden vom Server gekickt. Grund : %s",Grund);
    Nachricht(pID,Rot,string2);
    Kick(pID);
    return 1;
    }


    bisschen ausgearbeitet. Würde aber so klappen oder?

    Mit freundlichen Grüßen,
    Dachdecker

  • ocmd:kick(playerid,params[])
    {
    new Grund[128],pID,string[128];
    if(sscanf(params,"us[128]",pID,Grund)) return Nachricht(playerid,Weiss,"Benutzen Sie : /Kick [Spielername (ID)] [Grund]");
    format(string,sizeof(string),"Der Spieler %s wurde vom Server gekickt. Grund : %s",pID,Grund);
    NachrichtAnAlle(Rot,string);
    format(string,sizeof(string),"Sie wurden vom Server gekickt. Grund : %s",Grund);
    Nachricht(pID,Rot,string);
    SetTimerEx("KickPlayer",100,0,"i",pID);
    return 1;
    }
    forward KickPlayer(playerid);
    public KickPlayer(playerid)return Kick(pID);


    Da der Kick ausgeführt wird bevor die Nachricht geschickt wird musst du einen Timer Starten sprich hier SetTimerEx.
    Er reicht ebenfalls wenn du ein String hast diesen kannst du dann öfters verwenden wie jetzt hier oben


    Hast du da grade fragen zu?

  • Da der Kick ausgeführt wird bevor die Nachricht geschickt wird musst du einen Timer Starten sprich hier SetTimerEx.


    Eigentlich unnötig, da es eine Include gibt, die es ganz ohne Timer regelt.
    [ INCLUDE ] Kick/Ban Fix


    Viel besser ;)

  • namespace: Na gut, dann nehme ich das ohne Timer mal zurück, aber trotzdem finde ich das mit der Include noch am besten.