Player Movement

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
  • Hallo Brotfische :)


    Tut mir Leid, wenn ich mal wieder mit meiner Langeweile nerve :rolleyes:


    Also, es handelt sich hierbei darum, den Spieler zu bewegen, ohne dass er Tasten drücken muss ;)


    Die Include bietet folgende Funktion:


    MovePlayer(playerid,Float:x,Float:y,Float:z,bool:speed);
    /*
    playerid = spielerid von dem Spieler der bewegt werden soll
    x,y,z = Ziel Koordinaten, wenn der Spieler da angekommen ist, hört er auf sich zu bewegen.
    speed = Wenn ihr da false eingebt, läuft er und auf true rennt er.
    */


    UpdateMovement(playerid,Float:angle,Float:x,Float:y,Float:z);
    /*
    playerid = spielerid von dem Spieler der bewegt werden soll
    angle = Neue Richtung, wo der Spieler hinrennen soll
    x,y,z = Neuen Ziel Koordinaten
    */


    StopMovement(playerid); //Beendet das Laufen des Spielers



    forward OnPlayerMovementEnd(playerid);
    //Das hier wird aufgerufen, sobald der Spieler an den Zielkoordinaten angekommen ist.


    //<< Bitte Beispielskript mal durchlesen! >>


    Sehr Wichtig:
    Also, so funktioniert die Include:
    Der Spieler rennt bzw läuft zu den Ziel-Koordinaten und das ist abhängig von seiner FacingAngle wo er lang läuft, denn in die Richtung von dem Winkel bewegt der Spieler sich.
    Sprich, er läuft immer gerade aus, sollte das Ziel nicht auf der geraden Linie des Spielers sein, rennt er endlos (oder bis er vor ein Objekt läuft).
    Wenn man auch Kurven o.ä. laufen möchte, dann muss man das so:


    Richtungswechsel Beispiel:
    //Unter OnPlayerSpawn
    SetPlayerFacingAngle(playerid,90.0); //Die Richtung wo der Spieler hinlaufen soll
    MovePlayer(playerid,300.0,200.0,10.0,false); //Jaja ich weiß komische Koordinaten :D

    Richtungswechsel Beispiel:
    //Hier wichtig StopMovement verwenden!!
    //Das mit a ist nur ein Beispiel, man kann natürlich auch mit Spieler-Variablen o.ä. arbeiten :)
    public OnPlayerMovementEnd(playerid) {
    new Float:a;
    GetPlayerFacingAngle(playerid,a);
    if(89 <= a <= 91) //Kleiner Toleranzbereich
    {
    return UpdateMovement(playerid,180.0,692.6395,-1866.9785,5.2367);
    }
    return StopMovement(playerid); //das ist wichtig, sonst stoppt er niemals
    }


    Download:
    Source-Code: Pastebin
    Direkter-Download: Mediafire


    Schlusswort:
    Wenn man es richtig macht, läuft er die ganze Zeit flüssig auch in Kurven :)
    Und er läuft nicht durch Objekte! Sondern wie ein normaler Spieler!
    Während er läuft, kann er keine Tasten drücken, aber die Kamera bewegen.


    Würde mich über ein kleines Feedback freuen :)


    PS: Eigentlich wollte ich ein Video reinstellen...aber meine Upload-Rate ist einfach zu scheiße dafür, dass hätte jetzt ewig gedauert :D Er rennt bzw läuft einfach wie ein normaler Spieler, als ob ihr laufen würdet..nur ihr tut es halt nicht ^^


    mfg. :thumbup:


    //Edit: Einen Fehler gefixxt, damit keine leeren Funktionen entstehen.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

    2 Mal editiert, zuletzt von Kaliber ()

  • return (!speed) ? ApplyAnimation(playerid,"ped","WALK_civi",4.1,1,1,1,1,0) : ApplyAnimation(playerid,"ped","sprint_civi",4.1,1,1,1,1,0);


    Diese "Bedingung" ist doch recht eigenartig :D
    Wäre es nicht effektiver 3 "Steps" zu haben ?


    0 -> Walk
    1 -> normal laufen
    2 -> Sprint

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

    Margarete Stokowski

  • Diese "Bedingung" ist doch recht eigenartig.
    Wäre es nicht effektiver 3 "Steps" zu haben ?


    0 -> Walk
    1 -> normal laufen
    2 -> Sprint


    Sollte man meinen...aber Walk = normal laufen...und Sprint ist halt sprinten. Es gäbe irgendwie noch run...aber sprint ist eigentlich schon schnell genug...


    Bei run müsste man wieder den Timer Tick runter setzen, sonst registriert der das ja nicht...hmm habe halt jetzt nur 2 gemacht, finde das reicht :S


    Man kann natürlich das auch gerne für seine Zwecke bearbeiten :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Wäre es vielleicht möglich, das ganze auch mit Fahrzeugen zumachen? Also der Spieler kann auch mit einen Fahrzeug zu den Koordinaten fahren.


    Das könnte man sehr gut halt mit nem NPC machen...oder man nutzt SetVehicleVelocity :)


    Ich schau mal, ob ich das für Autos erweitere, danke für den Vorschlag :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Beitrag von Mister.Anonym ()

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Okay bitte. :thumbup:


    Also, das ist keine gute Idee.


    Weil, wenn man es mit SetVehicleVelocity löst, dann muss man den Spieler freezen, sonst kann er sich ja bewegen, dadurch kann er aber die Kamera nicht mehr bewegen und das verfehlt einfach die Sache, die das bezwecken soll.


    Wenn man das mit einem Fahrzeug machen will, dann muss man halt eben einen NPC aufnehmen (das ist eh schöner und einfacher) :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Ich verstehe das jetzt schon richtig, dass ich erst den Spieler an die Position XYZ porten muss,
    wenn ich beispielsweise möchte, dass er von Haus Eingang zu Straße läuft?


    Wenn ich jedoch den Spieler an beispielsweise den Standart BSN (nähe Tankstelle) in Los Santos porte und koordinaten nehme, welche vor dem Standart Police Department ist,
    läuft/rennt er ja dementsprechend hin, kann das nicht dazu führen, dass er dann auch durch Wände etc. buggen kann? O_o


    Ansonsten sehr gute Include 9/10


    MfG ;)

  • läuft/rennt er ja dementsprechend hin, kann das nicht dazu führen, dass er dann auch durch Wände etc. buggen kann? O_o


    Bitte, lies dir mal den ganzen Text & das Schlusswort durch :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Bitte, lies dir mal den ganzen Text & das Schlusswort durch

    Hab ich und dort steht laut deiner Aussage:

    Wenn man es richtig macht, läuft er die ganze Zeit flüssig auch in Kurven
    Und er läuft nicht durch Objekte! Sondern wie ein normaler Spieler!

    Jedoch wird es sicherlich einige geben, die ihn nur normal laufen lassen, dass heißt es nicht so machen werden, damit der Spieler um die Ecken läuft.
    Kann es dann nicht dazu führen, da er immer gerade aus läuft (wenn man die Kurven nicht gemacht hat) er irgendwo durch "schlittert", er wird ja sozusagen nicht mehr vom Spieler geführt,
    sondern es bricht ja dann erst ab, wenn er die Koordinaten erreicht hat.
    Beispiel er rennt gegen ein Gebäude damit bleibt er doch daran stehen und kann es nicht einmal mehr abbrechen? Da er
    selbst keine Tasten drücken kann und er weiterhin versucht die Koordinaten zu erreichen. :huh:
    Oder verstehe ich es gerade komplett falsch? :S

  • Oder verstehe ich es gerade komplett falsch?


    Nein, natürlich muss man schon wissen, welche Strecke man den Spieler laufen lässt :wacko:


    Du machst doch auch keine InterpolateCamera, die dann irgendwo in der Wand hängt :rolleyes:


    Deshalb steht ja auch in meinem Text:


    Zitat von Kaliber

    Sprich, er läuft immer gerade aus, sollte das Ziel nicht auf der geraden Linie des Spielers sein, rennt er endlos (oder bis er vor ein Objekt läuft).


    mfg. :rolleyes:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Wollte nochmal darauf hinweisen, dass ich gestern noch was kurz nach dem Release hinzugefügt hatte, damit keine leeren Funktionen entstehen :)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S


  • Kaliber: TogglePlayerSpectating + PlayerSpectateVehicle + SetVehicleVelocity
    Das einzige dabei ist das man den Spieler nicht sieht, aber das ist ja nicht so gravierend man könnte die Camera auch dahinter fixxieren

  • Kaliber: TogglePlayerSpectating + PlayerSpectateVehicle + SetVehicleVelocity
    Das einzige dabei ist das man den Spieler nicht sieht, aber das ist ja nicht so gravierend man könnte die Camera auch dahinter fixxieren


    Darum geht es doch aber, dass man den Spieler sieht.


    Und wie gesagt, es ist viel einfacher kurz einen NPC zu machen und den dann zu spectaten, da der dann auch wirklich gut fährt und man einfach durch eine ChatBubble dem den Namen von dem Spieler geben könnte, somit vermittelt man das Gefühl, dass man selbst gerade fährt ;)


    mfg. :thumbup:

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Darum geht es doch aber, dass man den Spieler sieht.


    Und wie gesagt, es ist viel einfacher kurz einen NPC zu machen und den dann zu spectaten, da der dann auch wirklich gut fährt und man einfach durch eine ChatBubble dem den Namen von dem Spieler geben könnte, somit vermittelt man das Gefühl, dass man selbst gerade fährt ;)


    mfg


    Nur funktioniert das ganze nicht für mehrere Spieler ^^ gleichzeitig, also die selbe Sequenz