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
  • Ja, so hab ich es jetzt auch. Aber wie nutzt man den Datentyp "u" richtig??


    Ich scripte NICHT mehr, ich möchte mit NIEMANDEM einen Server aufmachen habe auch NICHTS mehr mit LoH zu tun, also lasst es mit den PNs!

  • "u" ist ein spezieller Typ mit dem man Automatisch die Spieler ID bekommt.Bei dem Typ ist es egal ob man den Namen oder die ID direkt angibt,der Typ u würde bei der Eingabe von einem Namen diesen automatisch in die ID der Spielers umwandeln.
    Ich sehe jetzt auf den ersten blick keinen Fehler bei deinem Code,habs deshalb mal selber fix runtergeschrieben.
    public OnPlayerCommandText(playerid, cmdtext[]) {
    dcmd(heal,4,cmdtext);
    return 0;
    }
    dcmd_heal(playerid,params[]) {
    new
    giveid;
    if(sscanf(params,"u",giveid)) {
    return SendClientMessage(playerid,COLOR_RED,"Benutzung: /heal [Name / ID]");
    }
    if(!IsPlayerConnected(giveid)) {
    return SendClientMessage(playerid,COLOR_RED,"Spieler nicht gefunden!");
    }
    SetPlayerHealth(giveid,100.0);
    SendClientMessage(giveid,COLOR_YELLOW,"Du wurdest von einem Admin geheilt!");
    return 1;
    }

  • wie viele dcmd cmds darf man eig haben? DU sagtest ja das dcmd resorcen(oder wie mans schreibt) schonender is, aber ab wann wirds wieder kritisch??? ich habe ca 25 dcmd befehle drin aber es kommen noch viele hinzu. UNd sollte man dcmd auch für cmds ohne paramas verwenden??

  • ich arbeite jetz schon lange mit dcmd und ich muss ned so viel schreiben :D

  • ich verwende auch dcmd finde ich wersentlich einfacher



    //ja man kann kauch dcmd für befehle ohne params verwenden mach unter dem befehl einfach


    dcmd_wasweissich(playerid,params[])
    #pragma unused params

    Fähigkeiten:


    Lua - 90 %
    Delphi - 100 %

  • JA klar, nur dcmd ist ja nicht die "vorgesehne " variante von sa-mp du wurde ja erst von Y_Less hinzugefügt aber wenn ich die ohne paramas verwende is das auch egal?? naja dann ma los dachte das könnten vll zu viele werden

  • dcmd wurde von DracoBlue entwickelt, nicht von Y_Less. Y_Less hat "lediglich" sscanf gecodet.


    Es gibt kein Limit wieviele dcmd Commands man haben darf, da die Funktion ja lediglich aufgerufen wird, wenn man den dazu gehörigen Command eingibt.


    Was Cmds ohne Parameter betrifft, da ist dcmd auch schneller, jedoch kann es sein, dass die strcmp Variante genauso schnell ist.

  • //EDIT//
    hat sich gelöst


    //EDIT2//


    dcmd_test(playerid,params[])
    {
    new pID;
    if(sscanf(params, "d", pID))
    {
    return SendClientMessage(playerid,COLOR_RED, "Benutze: /test");
    }
    if(IsPlayerConnected(pID))
    {
    SendClientMessage(playerid,COLOR_RED,"Dies ist ein test, ID %d",pID);
    return 1;
    }
    }


    habe jetzt soeinen befehl drinne,
    müsste ja eig. alles richtig sein oder?
    wenn man /test macht muss doch der text kommen oder muss ich da nochwas machen?


    und jetzt mein richtiges problem:


    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(468) : error 017: undefined symbol "dcmd_test"
    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(471) : error 017: undefined symbol "params"
    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(475) : warning 217: loose indentation
    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(477) : warning 202: number of arguments does not match definition
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.


    2 Errors ; 2 Warnings


    wenn ich


    new dcmd_test;


    mache kommen nochmehr errors WARUM ?(


    bitte um schnelle hilfe

  • bei public OnPlayerCommandText(playerid,cmdtext[])
    {
    dcmd(test,4,cmdtext);
    return 0
    };
    und hast du das #define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == '\0') && (dcmd_%1(playerid, ""))) || (((%3)[(%2) + 1] == ' ') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 im Script oben?



    Ausserdem is es sinnlos diesen Command mit sscanf zu machen, da der Command keine Parameter hat. Ich weiß gar nicht, ob das dann überhaupt geht

  • C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(370) : error 017: undefined symbol "dcmd_test"
    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(377) : warning 225: unreachable code
    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(471) : error 017: undefined symbol "dcmd_test"
    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(476) : error 017: undefined symbol "params"
    C:\Dokumente und Einstellungen\lukas \Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(478) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\lukas\Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(473) : warning 203: symbol is never used: "pID"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.


    //EDIT//


    pls help


    //EDIT2//


    bitte brauche hilfe

  • Dann ließ das Tutorial noch einmal,irgendwo wirst du wohl etwas falsch gemacht haben.
    Grob sieht das immer so aus:
    #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1


    public OnPlayerCommandText(playerid,cmdtext[])
    {
    dcmd(test,4,cmdtext);
    return 0;
    }


    dcmd_test(playerid,params[]) {
    // hier code
    return 1;
    }

  • #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1


    public OnPlayerCommandText(playerid, cmdtext[])//-----(Befehle)---------------//
    {
    //-----(test)-----------------------------------------------------------------//
    dcmd(test,4,cmdtext);
    return 0;


    dcmd_test(playerid,params[])
    {
    new pID;
    if(sscanf(params, "d", pID))
    {
    return SendClientMessage(playerid,COLOR_RED, "Benutze: /test");
    }
    if(IsPlayerConnected(pID))
    {
    SendClientMessage(playerid,COLOR_RED,"Dies ist ein test, ID %d",pID);
    return 1;
    }
    }

    return 1;
    }


    so habe ich das (sind noch na ppar befehle dazwichen aber ist ja egal)

  • Ok, du hast nicht gründlich gelesen. War klar.....


    Der eigentliche Command muss AUSSERHALB eines Callbacks (für die Unwissenden: "public") sein.

  • [...]für die Unwissenden: "public"[...]


    Lesen tut nicht weh.....


    Wenn du es immernoch nicht kapierst solltest du dir mal was anderes als Pawn überlegen.


    // AUSSERHALB, was ist daran so schwer zu verstehen? -.-


    Man muss sein Hirn auch selber mal benutzen....

    Einmal editiert, zuletzt von [NSG]Bright ()

  • okay habe ich jetzt und dann bekomme ich jetzt 1 warning (die restlichen 3 habe ich weg gemacht)



    dcmd_test(playerid,params[])
    {
    new pID;
    if(sscanf(params, "d", pID))
    {
    SendClientMessage(playerid ,COLOR_RED,"Dies ist ein test, ID %d", pID);
    SendClientMessage(playerid , COLOR_RED,"Benutze /test");
    }
    return 1;
    }


    C:\Dokumente und Einstellungen\lukas\Desktop\Lukas\SA-MP Server\gamemodes\DM.pwn(477) : warning 202: number of arguments does not match definition
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Warning.

  • So kann es auch iwie nicht gehen oder?


    new pID;
    if(sscanf(params, "d", pID))
    {
    SendClientMessage(playerid ,COLOR_RED,"Dies ist ein test, ID %d", pID);
    SendClientMessage(playerid , COLOR_RED,"Benutze /test");


    ?

    Zitat

    Nimm die Dinge wie sie sind: schlag, wenn du schlagen musst, tritt, wenn du Treten musst
    -Bruce Lee

  • SendClientMessage(playerid ,COLOR_RED,"Dies ist ein test, ID %d", pID);


    Ähm, wie bitte soll das gehen?


    Schau dir mal SendClientMessage im Wiki an ;).


    Mach es so:


    dcmd_test(playerid,params[])
    {
    new
    pID,
    string[128];
    if(sscanf(params, "d", pID))
    {
    SendClientMessage(playerid, COLOR_INFO, "Benutze bitte: /test[ID]");
    return 1;
    }
    format(string, sizeof(string), "Dies ist ein Test. ID %d", pID);
    SendClientMessage(playerid ,COLOR_RED, string);
    return 1;
    }

    ...