Mit OCMD Befehle erstellen/ausführen

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
  • Serwus Breadfish!


    Hier zeige ich euch, wie ihr mit OCMD Befehle erstellen und auch ausführen könnt. Was wir als erstes brauchen ist das OCMD Include, klick.Wenn ihr dies habt, packt ihr das in euren Include's Ordner. So nun gehen wir nach oben ins Script zu den ganzen Includes, dann machen wir
    #include <ocmd>


    Wenn dies geschafft ist können wir irgendwo im Script anfangen diese OCMD Befehle zu scripten. Am sinnvollsten wäre es ÜBER public OnPlayerCommandText(). Nun machen wir mal einen /goto Befehl. Jetzt erstmal das "Grundgerüst", jeder sollte es sich so gut wie möglich merken.
    ocmd:goto(playerid,params[])// ocmd ist der "Erzeuger" des Befehls, goto ist der Befehl, playerid ist klar, params ist das was alles hinter dem Befehl steht. Wichtig : ocmd:goto , niemals das : vergessen!
    {
    return 1;// nicht vergessen!
    }


    Nun fangen wir an den Befehl richtig zu scripten. Als erstes wird immer die Variable definiert, das machen wir dann so :
    ocmd:goto(playerid,params[])// ocmd ist der "Erzeuger" des Befehls, goto ist der Befehl, playerid ist klar, params ist das was alles hinter dem Befehl steht. Wichtig : ocmd:goto , niemals das : vergessen!
    {
    new pID; // pID ist die Variable des anderen Spielers( du bist playerid, der andere ist pID) , am ende immer das ; hinmachen
    return 1;// nicht vergessen!
    }


    Nun brauchen wir eine Admin- oder Supporter Abfrage, jeder hat es wahrscheinlich anders, also passt die Abfrage an euer Script an.
    ocmd:goto(playerid,params[])// ocmd ist der "Erzeuger" des Befehls, goto ist der Befehl, playerid ist klar, params ist das was alles hinter dem Befehl steht. Wichtig : ocmd:goto , niemals das : vergessen!
    {
    new pID; // pID ist die Variable des anderen Spielers( du bist playerid, der andere ist pID) , string ist die nachricht die ausgesendet wird. man kann auch andere namen verwenden. am ende immer das ; hinmachen
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Admin!");// if(!isPlayer... ist die Abrage (playerid,1)) bedeutet das er die playerid abfragt und den rang abfragt in meinem fall wäre es rang 1
    return 1;// nicht vergessen!
    }


    Jetzt erstellen wir eine Sscanf Abrage, den Sscanf Code müsst ihr irgendwo in euer Script reinkopieren, am besten wäre es ganz unten. Hier den Sscanf Code : klick. Jetzt müssen wir eine Sscanf Abfrage machen. Die Sscanf Abfrage überprüft ob alle Parameter (=params) angegeben wurden. Also z.B. wenn jemand nur /goto eingibt, dass gleich eine Errormeldung kommt. Wie z.B. "Fehler: /goto [ID]" da man vergessen hat die ID einzugeben. Und so machen wir das :
    ocmd:goto(playerid,params[])
    {
    new pID;
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Admin!");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Hellblau,"Benutzung: /goto [ID]");
    return 1;
    }
    Erklärung :
    - sscanf ist die Abfrage an sich
    - params sind die einzelnen Parameter
    - "u" ist die ID oder "PartOfName" von der pID
    - pID beinhaltet das "u"
    - return SendClientMessage..... bedeutet das wenn er nicht alles angegeben hat, das eine Errormeldung kommt mit einem Hinweis.


    Nun müssen wir die Position des Spielers ermitteln, und das müssen wir definieren und zwar so:
    ocmd:goto(playerid,params[])
    {
    new pID;
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Admin!");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Hellblau,"Benutzung: /goto [ID]");
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(pid,X,Y,Z);
    return 1;
    }
    Erklärung :
    - Float:X ... sind die Koordinaten die das Script herausfinden soll.
    - GetPlayerPos... so werden die Koordinaten ermittelt und man zum Admin geportet wird, wichtig ist es das gleiche wie in der Definition anzugeben : X,Y,Z (Rechtschreibung FTW!)


    Wenn ihr das alles habt ist der Befehl so gut wie fertig. Natürlich können wir noch eine Nachricht ausgeben. Dazu gehen wir wieder nach oben zu unserem Befehl und machen nach "new pID;" : "new pID, string[128];
    Wenn ihr das habt müssen wir die Farbe definieren, da das nicht in Pawn vorgefertigt ist. Das machen wir mit einem SA:MP ColorPicker, link. Wenn ihr eine Farbe ausgewählt habt z.B. Hellblau müssen wir das oben bei diesen ganzen Includes definieren. und zwar gehen wir nach ben ins Script und machen z.B. #define Hellblau 0x00A5FFFF Dann müsste das so aussehen :

    ocmd:goto(playerid,params[])
    {
    new pID, string[128];
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Admin!");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Hellblau,"Benutzung: /goto [ID]");
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(pID,X,Y,Z);
    SetPlayerPos(playerid,X,Y,Z);
    new Interior = GetPlayerInterior(pID);
    SetPlayerInterior(playerid, Interior);
    format(string,sizeof(string),"Admin %s hat sich zu dir geportet.",SpielerName(playerid));
    SendClientMessage(pID,Hellblau,string);
    return 1;
    }
    Erklärung :
    - #define bedeutet das wir etwas definieren wollen, in diesem Fall eine Farbe, also machen wir #define [FarbenName] [Code]
    - string[128]; die 128 ist die Länge des Textes.
    - SetPlayerPos.... bedeutet das der Admin zu dem Spieler geportet wird.
    - Interior = GetPlayer... und SetPlayerInteror.... bedeuten einfach das dieses Interior definiert wird und mit SetPlayerInterior ausgegeben wird, falls man durch den Boden fliegt oder ähnliches.
    - format bedeutet das wir diesen string den wir oben angegeben haben formatieren wollen.
    - string ist das was wir oben angegeben haben, es kann auch eine andere Bezeichnung wie z.B. "Text" oder so haben.
    - sizeof bedeutet das diese Nachricht auf die Größe des string's formatiert wird , also auf die Größe von [128]
    - %s ist die Angabe des Namens eines Spielers oder Bots oder sowas. Es gibt noch %i und %d, das ist aber was anderes.
    - SpielerName(playerid) ist eine Function mit der man den Namen eines Spielers ermitteln kann, natürlich ist diese Function nicht vorgefertigt in Pawno! Die müsst ihr euch mit einem sogenannten "stock" machen, und zwar fügt ihr dies irgendwo im Script ein : stock SpielerName(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    return name;
    }

    - SendClientMessage(pID,Hellblau,string); so wird der string den wir oben formatiert haben ausgesendet. Mann muss darauf achten, wem man die Nachricht aussendet, in diesem Fall wollen wir die Nachricht dem anderen Spieler aussenden also die pID, wenn ihr playerid angebt, wird die Nachricht an euch versendet.


    So dies wars! Es kann sein das einige Fehler auftreten werden, bitte postet sie unter dem Beitrag, ich werde euch helfen. Dann sollte so der Befehl insgesamt aussehn :
    ocmd:goto(playerid,params[])
    {
    new pID, string[128];
    if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Admin!");
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Hellblau,"Benutzung: /goto [ID]");
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(pid,X,Y,Z);
    SetPlayerPos(playerid,X,Y,Z);
    new Interior = GetPlayerInterior(pID);
    SetPlayerInterior(playerid, Interior);
    format(string,sizeof(string),"Admin %s hat sich zu dir geportet.",SpielerName(playerid));
    SendClientMessage(pID,Hellblau,string);
    return 1;
    }


    Mit Freundlichen Grüßen
    __________________________________________________


    -S-...kill.exe<3_ftw


    // Edit : Befehl verbessert.
    // Edit2 : Interior hinzugefügt.
    // Edit3 : Rechtschreibung verbessert.

    Mit unfreundlichen Grüßen
    Buschmensch

    4 Mal editiert, zuletzt von ParliamenT ()

  • Serwus Leute,


    Vielen Dank für eure netten & positiven Feedbacks.


    Ja es tut mir leid das ich so eine Schrift verwendet habe,
    aber ich finde das diese Schrift übersichtlicher ist.


    Falls es evtl. Fragen geben wird oder ähnliches -> PN oder Kommi :)


    Mfg

    Mit unfreundlichen Grüßen
    Buschmensch

  • Jep, müsste dann so aussehen:


    ocmd:goto(playerid,params[]){ new pID, string[128]; if(!isPlayerAnAdmin(playerid,1))return SendClientMessage(playerid,Rot,"Du bist kein Admin!"); if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Hellblau,"Benutzung: /goto [ID]"); new Float:X, Float:Y, Float:Z; GetPlayerPos(pid,X,Y,Z);SetPlayerPos(playerid,X,Y,Z);format(string,sizeof(string),"Admin %s hat sich zu dir geportet.",SpielerName(playerid)); SendClientMessage(pID,Hellblau,string); return 1; }


    @ [GRE]Mr.Stein


    Warum


    Fehlt da nicht das SetPlayerPos(pID.... ? ????? pID? dann käme die Person wohin man möchte zu sich selbst

    Back to the roots!

  • Schriftart ist nicht sonderlich schön,
    aber an sich gut erklärt und mit Besipielen.


    Die liest nun die Koordinaten von pID aus und sendest pID eine Nachricht,
    aber du setzt dich selber nicht mit SetPlayerPos(playerid, X, Y, Z); (Was oben schon angesprochen wurde).


    als kleiner Zusatz würde ich noch den Interior auslesen und setzen, da man sonst, wenn der User sich in einem Interior befindet evt. durch die Map fällt.


    Also:

    Interior = GetPlayerInterior(pID);
    SetPlayerInterior(playerid, Interior);

    noch hinzufügen^^


    Dazu sollte man evt., da es ja mehr für Anfänger ist die Farbe Hellblau definieren.


    Nur als Vorschlag,
    An sich aber wie gesagt gut gelungen.
    Gruß,
    Dennis


    //EDIT: Sry, gerade im Browser nen Fehler gehabt...

    Wer Rechtschreibfehler findet, darf sie behalten ;)
    -> Forentechniker | WBB Entwickler pn

  • Tolles tut Hilfreich für Anfänger so wie mich :) 8/10

    Script-Neuling:[x]
    50 Beiträge: []
    100 Beiträge: []
    200 Beiträge: []
    350 Beiträge: []
    500 Beiträge: []
    Script-Fortgeschrittener: []
    600 Beiträge: []
    700 Beiträge: []
    900 Beiträge: []
    Script-Professioneller: []
    1500 Beiträge: []
    Script-Experte:[]
    _______________________


    Selfmade Fortschritt: 5%


    _______________________

  • ocmd ist doch totaler Dreck, lieber strcmp nutzen, ist genauso leicht, wenn man mit strrest arbeitet ;)


    Aber ok, 7/10.

  • Mir gefällt ocmd nicht. Einmal integer anstatt string benutzen, funktionieren alle ocmd Befehle nicht mehr :)


    Absoluter Quatsch.

    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?

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