Befehle mit Übergabewerten

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
  • wie baue ich die dcmd und sccanf in den gm ein? also es funktioniert wenn ich es als filterscript unter onplayercommandtext mach, aber wenn ichs in den gm reinmachen will muss ichs ja irgendwie unter die commands ohne parameter bekommen...kann da jemand ein scriptbeispiel posten, oder sonst helfen?


    hab auch schon überlegt ein eigenes public dafür zu erstellen public dcmd oder so ähnlich


    thx

  • dcmd schneidet das Kommando Automatisch weg so werden nur die Werte danach in die Zeichenfolge kopiert,
    also musst du die Zeichenfolge ,,Params´´ in sscanf trennen, dazu noch die passenden Variable wo die Werte hinein sollen,
    Achtung, die Variablen müssen bei Zeichenfolgen Parameter ebenfalls den Typ Array besitzen genau das gleiche gilt für Integer / Floating Point Werte.

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • danke julian geht aber hier noch problem nr2.
    if(strcmp(cmd, "/straftat", true) == 0 || strcmp(cmd, "/st", true) == 0)
    {
    new string1[256];
    new string2[256];
    new string3[256];
    new
    pID,
    anzahl,
    grund;
    if(sscanf(cmdtext, "ddz",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }

    WantedPoints[pID] += anzahl;
    SetPlayerCriminal(pID,playerid, grund);
    SendClientMessage(playerid,COLOR_RED,"Erfolgreich!");
    format(string1,128,"Du hast ID:%d %d WantedPunkte gegeben![Grund:%z]",pID,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string1);
    format(string2,128,"ID:%d %d hat dir %d WantedPunkte gegeben![Grund:%z]",playerid,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string2);
    format(string3,128,"HQ:%d hat %d %d WantedPunkte gegeben, weil %z",playerid,pID,anzahl,grund);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_RED,string3);



    }
    }
    return 1;
    }


    C:\Dokumente und Einstellungen\thomas\Desktop\Server\0_Aktuel+SQLl\Server\Live Is A Party\gamemodes\gfl.pwn(26805) : error 035: argument type mismatch (argument 3)
    SetPlayerCriminal(pID,playerid, grund);
    ps:danke für diene schnelle und gute hilfe


  • if(strcmp(cmd, "/straftat", true) == 0 || strcmp(cmd, "/st", true) == 0)
    {
    new string1[256];
    new string2[256];
    new string3[256];
    new
    pID,
    anzahl,
    grund[128];
    if(sscanf(cmdtext, "dds",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }

    WantedPoints[pID] += anzahl;
    SetPlayerCriminal(pID,playerid, grund);
    SendClientMessage(playerid,COLOR_RED,"Erfolgreich!");
    format(string1,128,"Du hast ID:%d %d WantedPunkte gegeben![Grund:%z]",pID,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string1);
    format(string2,128,"ID:%d %d hat dir %d WantedPunkte gegeben![Grund:%z]",playerid,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string2);
    format(string3,128,"HQ:%d hat %d %d WantedPunkte gegeben, weil %z",playerid,pID,anzahl,grund);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_RED,string3);



    }
    }
    return 1;
    }

    RFT

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • if(strcmp(cmd, "/straftat", true) == 0 || strcmp(cmd, "/st", true) == 0)
    {
    new string1[256];
    new string2[256];
    new string3[256];
    new
    pID,
    anzahl,
    grund[128];
    if(sscanf(cmdtext, "dds",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }


    WantedPoints[pID] += anzahl;
    SetPlayerCriminal(pID,playerid, grund);
    SendClientMessage(playerid,COLOR_RED,"Erfolgreich!");
    format(string1,128,"Du hast ID:%d %d WantedPunkte gegeben![Grund:%s]",pID,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string1);
    format(string2,128,"ID:%d %d hat dir %d WantedPunkte gegeben![Grund:%s]",playerid,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string2);
    format(string3,128,"HQ:%d hat %d %d WantedPunkte gegeben, weil %s",playerid,pID,anzahl,grund);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_RED,string3);



    }
    }
    return 1;
    }
    Bei dem kommt nur die fehlermeldung :USAGE: /st [playerid][Anzahl an WantedPunkten][grund]

  • if(strcmp(cmd, "/straftat", true) == 0 || strcmp(cmd, "/st", true) == 0)
    {
    new string1[256];
    new string2[256];
    new string3[256];
    new
    pID,
    anzahl,
    grund[128];
    if(sscanf(cmdtext, "ids",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }


    WantedPoints[pID] += anzahl;
    SetPlayerCriminal(pID,playerid, grund);
    SendClientMessage(playerid,COLOR_RED,"Erfolgreich!");
    format(string1,128,"Du hast ID:%d %d WantedPunkte gegeben![Grund:%s]",pID,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string1);
    format(string2,128,"ID:%d %d hat dir %d WantedPunkte gegeben![Grund:%s]",playerid,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string2);
    format(string3,128,"HQ:%d hat %d %d WantedPunkte gegeben, weil %s",playerid,pID,anzahl,grund);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_RED,string3);



    }
    }
    return 1;
    }

  • if(sscanf(cmdtext, "ids",pID,anzahl,grund))


    hier für wäre u geeigneter


    if(sscanf(cmdtext, "uds",pID,anzahl,grund))// hier ein u statt einem i und es ist egal ob i oder d benutzt wird sind beide einfach integer werte


    Zur Eklärung bei u kann man dann die SpielerID und den Spielername eingeben


  • if(strcmp(cmdtext, "/straftat", true) == 0 || strcmp(cmd, "/st", true) == 0)
    {
    new string1[256];
    new string2[256];
    new string3[256];
    new
    pID,
    anzahl,
    grund[128];
    if(sscanf(cmdtext, "uds",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }


    WantedPoints[pID] += anzahl;
    SetPlayerCriminal(pID,playerid, grund);
    SendClientMessage(playerid,COLOR_RED,"Erfolgreich!");
    format(string1,128,"Du hast ID:%d %d WantedPunkte gegeben![Grund:%s]",pID,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string1);
    format(string2,128,"ID:%d %d hat dir %d WantedPunkte gegeben![Grund:%s]",playerid,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string2);
    format(string3,128,"HQ:%d hat %d %d WantedPunkte gegeben, weil %s",playerid,pID,anzahl,grund);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_RED,string3);



    }
    }
    return 1;
    }

    RFT

  • Ist auch richtig so,dass kein Spieler gefunden wird.

    if(sscanf(cmdtext, "uds",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }

    Du darfst da auch nicht in cmdtext suchen.
    Denn cmdtext wird vermutlich etwas sein wie :

    Zitat

    /strafttat Peter 2 Eine Testverwarnung


    Deshalb mach lieber mal,auch wenn Ich dir lieber zu DCMD oder ZCMD raten würde.

    //Removed


    //Edit:
    Moment,bin gerade etwas verwirrt.cmd dürfte auch nicht funktionieren,denn cmd ist doch auch nur mit strtok ein Teil von cmdtext,eben "/straftat".


    new
    _pos;
    _pos = strfind(cmdtext," ");
    if(sscanf(cmdtext[_pos], "uds",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }

    2 Mal editiert, zuletzt von Goldkiller ()

  • meine meinung nach dürfte sscanf cmdtext splitten und so dürfte es eigentlich funktionieren naja ich teste es mal


    //edit du benutzt bestimmt einfach /st und da steht noch cmd teste es mal so



    if(strcmp(cmdtext, "/straftat", true) == 0 || strcmp(cmdtext, "/st", true) == 0)
    {
    new string1[256];
    new string2[256];
    new string3[256];
    new
    pID,
    anzahl,
    grund[128];
    if(sscanf(cmdtext, "uds",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }


    WantedPoints[pID] += anzahl;
    SetPlayerCriminal(pID,playerid, grund);
    SendClientMessage(playerid,COLOR_RED,"Erfolgreich!");
    format(string1,128,"Du hast ID:%d %d WantedPunkte gegeben![Grund:%s]",pID,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string1);
    format(string2,128,"ID:%d %d hat dir %d WantedPunkte gegeben![Grund:%s]",playerid,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string2);
    format(string3,128,"HQ:%d hat %d %d WantedPunkte gegeben, weil %s",playerid,pID,anzahl,grund);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_RED,string3);



    }
    }
    return 1;
    }


    //edit obwohl nach Goldkiller sein Edit bin ich nun auch nicht mehr überzeugt von das meins klappt ich teste es mal kurz

    RFT

    Einmal editiert, zuletzt von RFT ()

  • if(sscanf(cmdtext, "uds",pID,anzahl,grund)) {


    cmdtext ist:

    Zitat

    /st Peter 2 Ein Test


    oder

    Zitat

    /straftat Peter 2 Ein Test


    Es wird nach 3 Parametern gesucht.
    Das Problem ist,der erste Parameter wird von sscanf() als /straftat erkannt./straftat passt aber nicht in den u Platzhalter,der nur für Spielername / SpielerID gedacht ist.Deshalb wird pID auch zu INVALID_PLAYER_ID ( Intern durch sscanf() ).
    Danach folgt das Peter als Integer gelesen werden soll. Peter ist aber keine Zahl,funktioniert als auch nicht es in anzahl zu speichern.
    Folglich wird dann 2 Ein Test als String gelesen.Das klappt,trotzdem war das ja nicht die Idee hinter dem ganzen.

  • dcmd_st(playerid,params[])
    {
    new string1[256];
    new string2[256];
    new string3[256];
    new
    pID,
    anzahl,
    grund[128];
    if(sscanf(params, "uds",pID,anzahl,grund)) {
    return SendClientMessage(playerid,COLOR_RED,"USAGE: /st [playerid][Anzahl an WantedPunkten][grund]");
    }
    if(!IsPlayerConnected(pID)) {
    return SendClientMessage(playerid,COLOR_RED,"Kein Spieler mit angegebener ID Online");
    }


    WantedPoints[pID] += anzahl;
    SetPlayerCriminal(pID,playerid, grund);
    SendClientMessage(playerid,COLOR_RED,"Erfolgreich!");
    format(string1,128,"Du hast ID:%d %d WantedPunkte gegeben![Grund:%s]",pID,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string1);
    format(string2,128,"ID:%d %d hat dir %d WantedPunkte gegeben![Grund:%s]",playerid,anzahl,grund);
    SendClientMessage(playerid,COLOR_RED,string2);
    format(string3,128,"HQ:%d hat %d %d WantedPunkte gegeben, weil %s",playerid,pID,anzahl,grund);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsACop(i))
    {
    SendClientMessage(i,COLOR_RED,string3);



    }
    }
    return 1;
    }


    Ist das so richtig?

    Einmal editiert, zuletzt von [CoS]Tom ()

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen