Haussystem Kommand Problem /createh

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 Tag,
    ich arbeite derzeit an meinem Haussystem für mein Dorfreallifeprojekt,
    nun habe ich ein Problem beim erstellen:
    if(strcmp(cmd, "/createh", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(pInfo[playerid][pAdminlevel] < 4)
    {
    SendClientMessage(playerid, COLOR_RED, "Du bist nicht befugt diesen Befehl zu benutzten.");
    return 1;
    }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    return 1;
    }
    new priceh;
    priceh = strval(tmp);
    if(priceh < 1) { SendClientMessage(playerid, COLOR_GREY, "Das Haus kann nicht weniger als 1$ kosten."); return 1; }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    return 1;
    }
    new inter;
    inter = strval(tmp);
    if(inter < 0 || inter > 15) { SendClientMessage(playerid, COLOR_GREY, "Die Interior-ID kann nicht unter 0 und über 15 sein."); return 1; }
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    return 1;
    }
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    format(string, sizeof(string), "Du hast ein Haus welches %d kostet mit dem Interrior: %d erstellt.",priceh,inter);
    SendClientMessage(playerid, COLOR_GREY, string);
    CreateHaus(X,Y,Z,priceh,"Keiner",inter);
    }
    return 1;
    }
    Wenn ich nun InGame /createh 5 0 eingebe, dann wird mir angezeigt:
    "Benutzung: /createh [Preis] [Interrior]"
    Ich hoffe mir kann jemand helfen.


    Mit freundlichen Grüßen
    Sven


    //edit Überschrift
    //edit Rechtschreibfehler


    Bewerte mich und meine Transaktionen als Mittelsmann

    2 Mal editiert, zuletzt von lollipop ()

  • Vielleicht klappt es wenn du dieses hier if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    return 1;
    }
    mit sscanf machst. Bin mir aber nicht sicher.

  • Mal ganz ehrlich.
    Wie benutzt du nicht einfach sscanf? Es ist nicht sonderlich schwer, und es verkleinert deinen Befehl enorm wodurch du eine bessere Übersicht behälst.


    Zu deinem Problem kann ich dir aber leider nicht weiterhelfen.

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Warum so komplex mach es so :


    if(strcmp(cmd, "/createh", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(pInfo[playerid][pAdminlevel] != 4) return SendClientMessage(playerid, COLOR_RED, "Du bist nicht befugt diesen Befehl zu benutzten.");
    new priceh,inter;
    if(sscanf(params,"ii",priceh,inter)) return SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    if(priceh != 1) return SendClientMessage(playerid, COLOR_GREY, "Das Haus kann nicht weniger als 1$ kosten.");
    if(inter < 0 || inter > 15) return SendClientMessage(playerid, COLOR_GREY, "Die Interior-ID kann nicht unter 0 und über 15 sein.");
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    format(string, sizeof(string), "Du hast ein Haus welches %d kostet mit dem Interrior: %d erstellt.",priceh,inter);
    SendClientMessage(playerid, COLOR_GREY, string);
    CreateHaus(X,Y,Z,priceh,"Keiner",inter);
    }
    return 1;
    }


    Hier im Editor geschrieben können Fehler vorhanden sein ;)...

  • Angenommen du hast Sscanf und OCMD.



    ocmd:createh(playerid, params[]) //wenn /createh geschrieben wird
    {
    if(pInfo[playerid][pAdminlevel] < 4)
    {
    SendClientMessage(playerid, COLOR_RED, "Du bist nicht befugt diesen Befehl zu benutzten.");
    return 1;
    }
    new priceh, inter;
    if(sscanf(params, "ii", priceh, inter)) // wird priceh oder inter nicht ausgefüllt (zb nur /createh 0 statt /createh 0 1
    return SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    if(priceh < 1)
    return SendClientMessage(playerid, COLOR_GREY, "Das Haus kann nicht weniger als 1$ kosten.");
    if(inter < 0 || inter > 15)
    return SendClientMessage(playerid, COLOR_GREY, "Die Interior-ID kann nicht unter 0 und über 15 sein.");
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    format(string, sizeof(string), "Du hast ein Haus welches %d kostet mit dem Interrior: %d erstellt.",priceh,inter);
    SendClientMessage(playerid, COLOR_GREY, string);
    CreateHaus(X,Y,Z,priceh,"Keiner",inter);
    }

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Ich bleib lieber bei den standart Commands mit OCMD habe ich nur Probleme ;D
    So nun habe ich es eig soweit nur:
    C:\Users\Sven\Desktop\0.3e\gamemodes\Selfmade.pwn(540) : error 017: undefined symbol "params"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.
    Dank an: [BJR]Big_Ben


    Wie fixe ich das?


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Weil sscanf nicht mit dem standart strcmp geht sondern nur mit ocmd, dcmd etc :rolleyes:


    Nimm einfach meins.


    Achja.


    bei deinem format



    %d == float (kommazahl)
    %i == integer (ganzzahl)


    ergo -> benutz %i statt %d

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Habs selber gefixt ;D Trotzdem dank an alle ;D
    Habs mit ocmd ^^
    Hier der Code der passt:
    ocmd:hcreate(playerid, params[])
    {
    if(pInfo[playerid][pAdminlevel] < 4)
    {
    SendClientMessage(playerid, COLOR_RED, "Du bist nicht befugt diesen Befehl zu benutzten.");
    return 1;
    }
    new priceh, inter,string[100];
    if(sscanf(params, "ii", priceh, inter)) return SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    if(priceh < 1) return SendClientMessage(playerid, COLOR_GREY, "Das Haus kann nicht weniger als 1$ kosten.");
    if(inter < 0 || inter > 15)return SendClientMessage(playerid, COLOR_GREY, "Die Interior-ID kann nicht unter 0 und über 15 sein.");
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    format(string, sizeof(string), "Du hast ein Haus welches %d kostet mit dem Interrior: %d erstellt.",priceh,inter);
    SendClientMessage(playerid, COLOR_GREY, string);
    CreateHaus(X,Y,Z,priceh,"Keiner",inter);
    return 1;
    }


    Bewerte mich und meine Transaktionen als Mittelsmann

  • Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?

  • Ob Aaron da Recht hat ka...
    Ich würde dir ZCMD empfehlen ist nach meinem Wissen die schnellste CMD Variante
    dazu einfach die ZCMD Include von hier : http://forum.sa-mp.com/showthread.php?t=91354
    in den Includes Ordner und oben ins Script #include <zcmd>
    Nun einfach das
    if(strcmp(cmd, "/createh", true) == 0)


    mit dem ersetzen :


    COMMAND:createh(playerid,params[])


    Wichtig alle estra CMD Arten wie ZCMD dürfen nicht unter dem Callback
    public OnPlayerCommandText(playerid, cmdtext[])
    {
    return 1;
    }


    stehen sie müssen immer außerhalb eines Callbacks stehen Beispiel :


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    return 1;
    }
    COMMAND:createh(playerid,params[])


    {
    if(IsPlayerConnected(playerid))
    {
    if(pInfo[playerid][pAdminlevel] != 4) return SendClientMessage(playerid, COLOR_RED, "Du bist nicht befugt diesen Befehl zu benutzten.");
    new priceh,inter;
    if(sscanf(params,"ii",priceh,inter)) return SendClientMessage(playerid, COLOR_RED, "Benutzung: /createh [Preis] [Interrior]");
    if(priceh != 1) return SendClientMessage(playerid, COLOR_GREY, "Das Haus kann nicht weniger als 1$ kosten.");
    if(inter < 0 || inter > 15) return SendClientMessage(playerid, COLOR_GREY, "Die Interior-ID kann nicht unter 0 und über 15 sein.");
    new Float:X,Float:Y,Float:Z;
    GetPlayerPos(playerid, X,Y,Z);
    format(string, sizeof(string), "Du hast ein Haus welches %d kostet mit dem Interrior: %d erstellt.",priceh,inter);
    SendClientMessage(playerid, COLOR_GREY, string);
    CreateHaus(X,Y,Z,priceh,"Keiner",inter);
    }
    return 1;
    }


    MFG

  • I know im not stupid ;D
    Wie gesagt muss nur grade bissl neu lernen bzw. erneut lernen ansosnten kenn ich ja alles ;D
    Bin hier seit 2010 registriert habe shcon Ahnung ;D


    Bewerte mich und meine Transaktionen als Mittelsmann



  • Kollege, gewähn dir mal was an...


    Wenn du schreibst
    if(pInfo[playerid][pAdminlevel] != 4) return SendClientMessage(playerid, COLOR_RED, "Du bist nicht befugt diesen Befehl zu benutzten.");


    Kann NUR Adminrang 4 es ausführen.


    Es müsste heissen:


    if(pInfo[playerid][pAdminlevel] < 4) return SendClientMessage(playerid, COLOR_RED, "Du bist nicht befugt diesen Befehl zu benutzten.");


    Selbiges beim Geld.


    Du hast:
    if(priceh != 1) return SendClientMessage(playerid, COLOR_GREY, "Das Haus kann nicht weniger als 1$ kosten.");


    So KANN das Haus nur 1$ kosten. Bei mehr oder weniger, gibts ne Fehlermeldung.

    Wer ist der Mensch hinter der Uniform? Ist euch das bekannt?
    Es ist der selbe der noch eben in Zivil neben euch stand.
    Warum wird er gehasst und so selten respektiert?
    Warum ist er derjenige der seinen Hals für euch riskiert?
    Trägt der Bulle eine Weste, das hat er früher nie gemacht,
    die Zeiten haben sich geändert und jeder Dienst ist ein Kampf!
    Warum gibt’s das SEK und warum sind sie so brutal?
    Und wieso hat wieder einer mit seinem Leben bezahlt?