Erklärung für Codeschnippsel

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
  • Hey,


    ich habe folgenden Codeschnippsel:


    ocmd:goto(playerid,params[])
    {
    new pid; //Id des anderen Spielers
    if(sscanf(params,"u",pid)) return SendClientMessage(playerid,0xFFFA00FF,"Benutzung:/goto [ID]");
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,0xFFFA00FF,"Du bist kein Admin");
    if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,0xFF0000FF,"Dieser Spieler ist nicht Aktiv!");
    new Float:pos[3];
    GetPlayerPos(pid,pos[0],pos[1],pos[2]);
    SetPlayerPos(playerid,pos[0],pos[1],pos[2]);
    SendClientMessage(playerid,0xFFFA00FF,"Du hast dich erfolgreich Telepotiert");
    return 1;
    }


    Mich interissiert daran folgendes:


    Welche Rolle hat "sscanf" bei der sache? Und was bedeutet das:


    if(sscanf(params,"u",pid))


    Und was ist mit dem:


    GetPlayerPos(pid,pos[0],pos[1],pos[2]);


    SetPlayerPos(playerid,pos[0],pos[1],pos[2]);


    SendClientMessage(playerid,0xFFFA00FF,"Du hast dich erfolgreich Telepotiert");
    Was GetPlayerPos und SetPlayerPos ist, weiss ich, aber was ist das dahinter (pos[0],etc.)
    Ich denke mal das in "pos[0]" X gespeichert wird, usw.



    Danke für die Hilfe im voraus ^^

  • GetPlayerPos(pid,pos[0],pos[1],pos[2]);
    Noch nie was von Arrays gehört hmm?
    -> damit sparst du die z.B. pos1,pos2,pos3


    if(sscanf(params,"u",pid))
    sscanf hilft dir dabei einzelne sachen aus strings zu filtern.
    Standart mäßig ist es für Leerzeichen ausgelegt worden.
    Mitlerweile kann man damit viel mehr machen ;)


    Das u steht für User d.h. man kann Usernamen oder die ID des User eingeben.
    Das wird dann in der angegebenen Variable gespeichert

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Zitat

    Noch nie was von Arrays gehört hmm?

    Doch die gibts auch in VB :P
    Ich meinte mehr wieso die nicht Deklariert werden müssen?
    Sind die als Standard dabei, oder wie?


    //Edit:


    Wer lesen kann ist klar im Vorteil :pinch: :


    new Float:pos[3];


    Sorry, habs einfach nicht gesehen :wacko:


    Danke für die Hilfe @BlackAce

  • sscanf ist ein Plugin von Y_Less (kann man hier downloaden). Das ist quasi das Gegenteil der Funktion format. Es splittet einen String und weist die einzelnen Parameter direkt verschiedenen weiteren zu.
    Die Syntax lautet in dem Fall sscanf(string[], format[], {Float,_}:...). Dabei wird der Wert 0 returned, wenn der String erfolgreich gesplittet werden konnte, etwas anderes als null wenn nicht. Die Abfrage if(sscanf...) überprüft also, ob der String die angegebenen Parameter beinhaltet. Wenn nicht (und ein anderer Wert als 0 returned wird), soll er eine Nachricht ausgeben.
    format[] entspricht dabei dem Typ des zu ermittelnden Strings ("u" beispielsweise steht für einen Nutzer (Name oder ID), "s" für einen weiteren Text/String, ...) - der letzte/die letzten Parameter sind einfach die Variablennamen, in die die entsprechenden gesplitteten Bereiche reingespeichert werden.
    War das so weit verständlich? Hoffe ich doch^^


    Zum pos: Das ist ein Array. Der Array (mit der Größe 3 -> pos[3]) besitzt sozusagen 3 verschiedene Speicherplätze. Die da wären pos[0], pos[1] und pos[2]. In deinem Beispiel entsprechen sie einfach den X-, Y- und Z-Koordinaten.
    Ich hoffe, dass ich helfen konnte.


    Mit freundl. Grüßen
    Padarom

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

  • Super erklärt Danke.


    Wenn ich die gelegenheit habe:


    Return gibt einen Wert zurück, aber wo genau gibt return 0 oder return 1 den wert hin?

  • new returnWert, pID;
    returnWert = sscanf(params, "u", pID);
    if(returnWert != 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Hey! Du musst auch Parameter angeben!!"); // Oder:
    if(sscanf(params, "u", pID) != 0) return SendClientMessage(playerid, 0xFFFFFFFF, "Hey! Du musst auch Parameter angeben!!");


    So gibt das den Wert zurück.

    Ich bin
    .. seit etwa 2007 in der Webentwicklung tätig, seit 2013 professionell
    .. Erfahrener Entwickler in PHP, Swift, Javascript, Typescript und Ruby. Zusätzlich habe ich Erfahrung in Python, Java, C#, C++, Prolog und einigen esoterischen Programmiersprachen
    .. Luftfahrtenthusiast und Segelflieger

    Einmal editiert, zuletzt von Padarom ()