Tore per Hupen öffnen [Anfängerfreundlich]

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
  • [align=center][b][align=center]Liebe Community,


    heute möchte ich euch ein einfaches Torsystem beibringen.
    Ich benutze in diesem Tutorial das LSPD Tor, es geht jedoch mit jedem Tor. Ihr müsst nur die
    Koordinaten ändern!


    ________________________________________________________________


    Ihr benötigt:


    - die Geschlossene Position des Tores (z.B. mit MTA gemappt)


    - die Geöffnete Position des Tores


    ________________________________________________________________


    Schritt 1:
    ________________________________________________________


    Ganz nach oben zu den new's forward's und define's erstellen wir eine neue Variable und einen forward.


    new LSPDTor = 0;
    forward LSPDClose();


    Mit new wird eine neue Variable festgelegt,
    mit forward erstellen wir einen neuen puclic.


    ________________________________________________________________


    Schritt 2:
    ________________________________________________________




    nun müssen wir die Koordinaten des Tores in unser Script einfügen, so das das Tor erstellt wird!


    !WICHTIG!
    nur die Koordinaten des Geschlossenen Tor!

    ---


    Ein neues Objeckt erstellt man mit der Funktion:


    CreateObject


    Folgende Daten verden für CreateObject benötigt:


    modelid = Die model-ID die das Objeckt besitzt (nicht die objecktid im script)
    Float:X = Die Position auf der X - Achse
    Float:Y = Die Position auf der Y - Achse
    Float:Z = Die Position auf der Z - Achse
    Float:rX = Die Rotation auf der X - Achse
    Float:rY = Die Rotation auf der Y - Achse
    Float:rZ = Die Rotation auf der Z - Achse
    ___________________________________________________________________________
    hier gillt es zu wissen:
    Es gibt verschiedene Arten von Variablen. 3 Der wichtigsten:
    -Strings: Strings sind Variablen, die einen Text Speichern
    -Integer(Int): Ganzzahlen, sie können keine kommastellen speichern
    -Float: Floats sind wie Integer, nur das sie Zahlen mit kommastellen speichern können!


    ___________________________________________________________________________


    Fertig sähe dies so aus (für das LSPD Tor):


    CreateObject(972, 1584, -1642, 9.5, 0, 0, 90); //CreateObject(Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ);


    Das wird einfach unter dem public OnGameModeInit eingefügt!


    ________________________________________________________________


    Schritt 3:
    ________________________________________________________




    jetzt dem Objeckt eine "neue ID" im Script zuweisen, damit wir ihn besser "steuern" können. Täten wir dies nicht,
    müssten wir immer wenn wir ein Objeckt erstellen, nachzählen, an welcher stelle es in das Spiel erstellt wird,
    da dies dann die Objeckt ID ist!


    Dies machen wir ganz leicht, indem wir unsere Variable LSPDTor vor das CreateObjeckt schreiben.


    LSPDTor = CreateObject(972, 1584, -1642, 9.5, 0, 0, 90);



    ________________________________________________________________


    Schritt 4:
    ________________________________________________________



    Nun müssen wir den public:
    OnPlayerKeyStateChange


    finden!
    Wer diesen public nicht in seinem Script drinne hat, der füngt einfach außerhalb eines pulics folgendes ein:



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){ return 1;}


    Dort wird abgefragt, welche Taste der Spieler grade drückt.


    hier fügen wir folgendes ein:


    if(newkeys == 2)
    {


    }


    damit fragen wir ab, ob der Spieler die Taste mit der ID 2 drückt.
    Die ID's der Tasten findet ihr hier.


    _____________


    Nun fragen wir ab, ob der Spieler in der nähe des Tores ist, das wir erstellt haben.
    Dies fragen wir wieder mit einem if-Befehl ab.:


    if(IsPlayerInRangeOfPoint(playerid,20,1584, -1642, 9.5)
    Erklärung:
    Die playerid steht dafür, dass er es nur für den spieler abfragt, der die Taste gedrückt hat.
    Die 20 stehen für den Radius um die Koordinaten in dem sich der Spieler befinden muss.
    Die 1584 ist die X-Koordinate des Tores
    Die -1642 ist die Y-Koordinate des Tores


    Die 9.5 ist die Z-Koordinate des Tores

    MFG.:
    manumeyer


    if (strcmp("/Hatschi", cmdtext, true) == 0)
    {
    SendClientMessage(playerid,0xAA3333,"Gesundheit!");
    return 1;
    }

    3 Mal editiert, zuletzt von manumeyer ()

  • _______________________________________________________________


    Zwischensicht
    ________________________________________________________


    momentan sollte unser public ungefähr so aussehen:


    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == 2)
    {
    if (IsPlayerInRangeOfPoint(playerid,20,1584, -1642, 9.5)
    {

    }
    }
    return 1;
    }




    ________________________________________________________________


    Schritt 5:
    ________________________________________________________




    Nun müssen wir das Objeckt zu bewegen bringen. Und dass beste ist, wir müssen
    keine kraft dafür haben



    Das einzige was wir benötigen ist die Funktion:
    MoveObject.



    Diese benötigt folgende Dinge:
    objecktid = die ID, die das objeckt im script hat (nicht die modelid)
    Float:X = Die Position auf der X-Achse, wo es sich hinbewegen soll
    Float:Y = Die Position auf der Y-Achse, wo es sich hinbewegen soll
    Float:Z = Die Position auf der Z-Achse, wo es sich hinbewegen soll
    Float:Speed = Die Geschwindigkeit mit der es sich zu der Position bewegen soll.


    Fertig sähe das für das LSPD tor folgendermaßen aus:


    MoveObject(LSPDTor, 1584, -1642, 4, 0, 0, 90);


    hier kommt auch unsere Variable LSPDTor zum einsatz.
    Sie kann als Objecktid genutzt werden und ist damit sehr hilfreich.








    ________________________________________________________________


    Zwischensicht
    ________________________________________________________






    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == 2)
    {
    if(IsPlayerInRangeOfPoint(playerid,20,1584, -1642, 9.5)
    {
    MoveObject(LSPDTor, 1584, -1642, 4, 0, 0, 90);
    }
    }
    return 1;
    }



    ... nun nurnoch einen Timer unter die Funktion MoveObject setzten,
    dann sind wir auch schon fast fertig
    _____________________


    Der Timer ist Simpel aufgebaut. es gibt eine function die ausgeführt werden soll,
    eine zeit nach der die Funktion ausgeführt werden soll (in Millisekunden)
    und eine repeater, falls man eine funktion immer wieder ausführen will.
    (0 = nein, 1 = Ja)


    SetTimer("LSPDClose",5000,0);



    ________________________________________________________________


    Schritt 6:
    ________________________________________________________




    Jetzt sind wir fast fertig. Nun müssen wir nur noch die funktion schreiben, die nach der angegebenen
    Zeit von dem Timer ausgeführt werden soll.



    Hierzu erstellen wir einen neuen Public:



    public LSPDClose()
    {
    return 1;
    }



    hier hinein wollen wir schreiben, dass sich das Objekt wieder zurück bewegt.
    Also erstellen wir wieder eine MoveObject funktion.



    MoveObject(LSPDTor,1584, -1642, 9.5, 0, 0, 90);







    ________________________________________________________________


    Ende:
    ________________________________________________________



    Ich bedanke mich das ihr mein Tutorial gelesen habt,
    freue mich über jede Kritik, aber auch gegen ein lob habe ich nichts



    Mit freundlichen Grüßen



    manumeyer


    Edit: Thema in 2 geteilt!
    Edit2: Fehler
    Edit3: Link eingefügt

    MFG.:
    manumeyer


    if (strcmp("/Hatschi", cmdtext, true) == 0)
    {
    SendClientMessage(playerid,0xAA3333,"Gesundheit!");
    return 1;
    }

    3 Mal editiert, zuletzt von manumeyer ()

  • Mal ne frage.


    Warum hast du soviel in eine Zeile gequetscht?
    Das nicht wirklich Anfägerfreundlich, da das total unübersichtlich ist...

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

    Margarete Stokowski

  • Hey BlackAce,


    habe mir gedacht dass es Anfänger abschreckt, wenn dort 3-4 Post sind....


    Werde es aber bei meinem 2. Tutorial berücksichtigen :thumbup:


    Mfg.


    manu

    MFG.:
    manumeyer


    if (strcmp("/Hatschi", cmdtext, true) == 0)
    {
    SendClientMessage(playerid,0xAA3333,"Gesundheit!");
    return 1;
    }

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ich habe hier mal ein keines beispiel gemacht wie es bei onplayerkeywie man es mit timer auch machen könnte ;)


    if(newkeys & 2)
    {
    if(IsPlayerInRangeOfPoint(playerid,25.0,1811.6479,-1889.3391,13.4075))
    {
    if(PlayerInfo[playerid][pLeader] == 11 || PlayerInfo[playerid][pMember] == 11)
    {
    MoveDynamicObject(fstor,1811.2634277344,-1893.3382568359,12.408962249756,0.4);
    PlaySoundForPlayer(playerid,1035);
    SetTimer("fstorclose",20000,0);
    SendClientMessage(playerid,COLOR_RED,"Tor geht in 20 sec wieder zu");
    }
    }

  • Nicht schlecht, aber für den public benötigst du ein forward.
    Sonst 10/10

    Die besten Zitate aus dem sa-mp.de Forum

    Zitat

    -Wenn hier die sache nicht drine ist aber sie brachen es vlt kann ich es und dann mache ich es für sie!)

    Zitat

    Die Prüfungen(Fahrprüfungen), welche sehr realitätsnah entworfen sind, kann jeder Spieler allein absolvieren ohne auf andere angewiesen zu sein.

    Zitat

    Features: Ausgeprägte und leicht verständliche Serverregeln!

    Zitat

    aber wer dumme Antworten gibt bekommt eine Dumme zurück ... und chill mal dein Leben!

    Zitat

    Ich bin für Luca, wieso weiß ich nicht, aber der andere hat so hässlige Haare..

    Zitat

    Ich habe mir eig. immer nur die Castings angesehen, weil die da immer Runtergemacht wurden.

    Zitat

    Unknown processor
    übersetzt (by google translator)
    unbekannten Prozessor

    Zitat

    Verkaufe Minecraft Keys
    Nur für 20,-€ PaySafeCard.
    Unfassbar in mindestens 5 Minuten hast du dein Key!

  • public LSPDClose()
    {
    return 1;
    }

    Die besten Zitate aus dem sa-mp.de Forum

    Zitat

    -Wenn hier die sache nicht drine ist aber sie brachen es vlt kann ich es und dann mache ich es für sie!)

    Zitat

    Die Prüfungen(Fahrprüfungen), welche sehr realitätsnah entworfen sind, kann jeder Spieler allein absolvieren ohne auf andere angewiesen zu sein.

    Zitat

    Features: Ausgeprägte und leicht verständliche Serverregeln!

    Zitat

    aber wer dumme Antworten gibt bekommt eine Dumme zurück ... und chill mal dein Leben!

    Zitat

    Ich bin für Luca, wieso weiß ich nicht, aber der andere hat so hässlige Haare..

    Zitat

    Ich habe mir eig. immer nur die Castings angesehen, weil die da immer Runtergemacht wurden.

    Zitat

    Unknown processor
    übersetzt (by google translator)
    unbekannten Prozessor

    Zitat

    Verkaufe Minecraft Keys
    Nur für 20,-€ PaySafeCard.
    Unfassbar in mindestens 5 Minuten hast du dein Key!


  • public LSPDClose()
    {
    return 1;
    }


    Er hat doch ein Forward für das Public erstellt...


  • Er hat doch ein Forward für das Public erstellt...


    Oh sorry, hab ich anscheinend überlesen.
    Tut mir leid.

    Die besten Zitate aus dem sa-mp.de Forum

    Zitat

    -Wenn hier die sache nicht drine ist aber sie brachen es vlt kann ich es und dann mache ich es für sie!)

    Zitat

    Die Prüfungen(Fahrprüfungen), welche sehr realitätsnah entworfen sind, kann jeder Spieler allein absolvieren ohne auf andere angewiesen zu sein.

    Zitat

    Features: Ausgeprägte und leicht verständliche Serverregeln!

    Zitat

    aber wer dumme Antworten gibt bekommt eine Dumme zurück ... und chill mal dein Leben!

    Zitat

    Ich bin für Luca, wieso weiß ich nicht, aber der andere hat so hässlige Haare..

    Zitat

    Ich habe mir eig. immer nur die Castings angesehen, weil die da immer Runtergemacht wurden.

    Zitat

    Unknown processor
    übersetzt (by google translator)
    unbekannten Prozessor

    Zitat

    Verkaufe Minecraft Keys
    Nur für 20,-€ PaySafeCard.
    Unfassbar in mindestens 5 Minuten hast du dein Key!

  • Ich will das Tor nun auch wieder mit einem key zumachen(also genau so zu wie ich auf gemacht habe)
    Was muss ich ändern, damit das geht?
    Also ohne timer schließen...

    Mit freundlichen Grüßen,
    hundi :thumbup:


    "Wuff!, Wuff!"
    hundi, 2017

  • einfach das move objekt vertauschen villeicht für das Tor ne Variable erstellen,
    new GateState;
    GateState = 1; //wenn das tor offen ist wird die Variable auf 1 gesetzt
    GateState = 0; // wenn das tor zu ist wird es wieder auf 0 gesetzt
    so kannst du das Tor per hupen öffnen und schließen
    Man kann die variable auch als bool deklarieren aber mit bool arbeite ich nicht so.