Tore mit verschiedenen Öffnungsmöglichkeiten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Tore mit verschiedenen Öffnungsmöglichkeiten

    Moin,
    Da ich schon mehrmals gefragt wurde,
    wie man Tore so und so öffnet,
    dachte ich mal, ich mache hier ein Tutorial, bzw. eigentlich eine kleine Tutorialsammlung,
    die erklärt, wie man Tore scriptet, die sich öffnen lassen.
    Hier erkläre ich gleich mehrere Mögilchkeiten.

    Inhaltsverzeichnis:
    1. Tor via Befehl öffnen (mit Timer)
    2. Tore via Befehl öffnen OCMD (mit Timer)
    3. Tor via Tastendruck öffnen (mit Timer)
    Ihr werdet merken, dass die Funktion im Grunde ähnlich sind.
    Im Grunde wird immer ein Tor erstellt, das man mit einer Function verschiebt und dann wieder auf die ursprüngliche Position zurücksetzt.
    Alle Tore werde ich erstmal mit Timer erklären, das sich das Tor nach X Sekunden schließt, da dies am häufigsten bisher gefragt wurde.
    Später werde ich auch auch eine Erklärung für ein Tor ohne Timer machen.
    Auch der Timer ist in jedem Teil gleich.

    Da die erstellung der Public immer gleich bleibt, wird sie nur im erstem Tutorial Tor via Befehl öffnen (mit Timer) erklärt.
    In den kommenden Tutorials wird vorrausgesetzt, dass man dies vom ersten Tutorial her kennt und nur in der Übersicht nochmal auftauchen.

    Um die Übersicht besser beizubehalten werde ich für jede Art ein neuen Post hier machen.
    Dies hat sich meiner Meinung nach als das übersichtlichste herrausgestellt.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Dennis321 ()

  • 1. Tor via Befehl öffnen

    Das Beispieltor wird ein Tor sein,
    dass an der Tiefgarage zum LSPD ist.

    Als erstes müssen wir das Tor (Objekt ID Nr. 980) erstellen.
    Damit wir es nachher bewegen können, müssen wir es aber quasi definieren,
    daher schreiben wir in unserem Script oben erstmal unter den news:
    [pwn]new lspdtor;[/pwn]

    Nun können wir das Tor unter der Public OnGameModeInit erstellen.
    Hierzu erstellen wir mit CreateObject das Object.
    Die Syntax ist: CreateObject(OBJECTID, X, Y, Z, RotationX, RotationY, RotationZ, DRAWDISTANCE);
    Die DRAWDISTANCE kann man weglassen, wie im beispiel. Dann wird der Automatische Wert benutzt.
    Wir erstellen also unter OnGameModeInit das geschlossene Tor und weisen es zu:
    [pwn]lspdtor = CreateObject(980, 1588.4385986328, -1637.9038085938, 15.204790115356, 0, 0, 180);[/pwn]

    Nun kommen wir zu dem Befehl.
    Hierzu gehen wir zu der Public OnPlayerCommandText.
    Hier werden wir nun einen Befehl:
    [pwn]
    if(strcmp("/lspd1", cmdtext, true) == 0)
    {
    return 1;
    }
    [/pwn]

    Dieser Befehl alleine bringt noch nix.
    Daher werden wir nun mit der Function MoveObject das Tor nun bewegen.
    Die Syntax von MoveObject ist:
    MoveObject(OBJEKT, X, Y, Z, GESCHWINDIGKEIT);

    Unser Object ist lspdtor, X, Y, Z sind die Koordinaten des Tores im offenem Zustand und die Geschwindiglkeit ist die Geschwindigkeit, wie schnell sich das Object bewegen soll.
    Als Geschwindigkeit nehmen wir 2, da das meiner Meinung nach zimlich reell ist.

    Weiter brauchen wir noch einen Timer, der nach X Sekunden auf eine Public wechselt, die unser Tor automatisch wieder schließt.
    Die Function heißt SetTimer("PUBLICNAME", ZEIT, WIEDERHOHLUNG);
    Publicname nehmen wir mal lspdtortimer, Zeit wird in Millisekunden gerechnet, wir nehmen hier 10000, was 10 Sekunden entspricht.
    Wiederhohlung bedeutet, ob sich der Timer immer wiederhohlen soll oder nicht (true = Ja, false = Nein).
    Hier nehmen wir false.
    Zum Schluss noch mit SendClientMessage eine Meldung anzeigen, das das Tor offen ist (Im Beispiel hellgrün):
    SendClientMessage(playerid, 0x00FFAAFF, "LSPD Tor geöffnet, es schließt sich automatisch in 10 sec!.");

    Dies packen wir nun alles in unserem Befehl rein,
    der dann so aussieht:
    [pwn]
    if(strcmp("/lspd1", cmdtext, true) == 0)
    {
    MoveObject(lspdtor1, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    SetTimer("lspdtortimer", 10000, false);
    SendClientMessage(playerid, FARBE_GELB1, "LSPD Tor 1 geöffnet, es schließt sich automatisch in 10 sec!.");
    return 1;
    }
    [/pwn]

    Nun brauchen wir noch die Public lspdtortimer,
    die wir nun erstellen werden.
    Hierzu müssen wir erstmal oben im Script ein forward machen:
    [pwn]forward lspdtortimer();[/pwn]

    Nun können wir die Public lspdtortimer iwo frei im Script erstellen (z.B. ganz unten im Script).
    Diese sieht erstmal so aus:
    [pwn]
    public lspdtortimer()
    {
    return 1;
    }
    [/pwn]

    Hier alssen wir das Tor nun wieder auf die Ursprungsstelle zurückfahren,
    dafür benutzen wir wieder MoveObject:
    MoveObject(lspdtor, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);

    Unsere Public sieht nun so aus:
    [pwn]
    public lspdtortimer()
    {
    MoveObject(lspdtor, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    return 1;
    }
    [/pwn]

    Nun haben wir ein Tor,
    dass sich mit dem Befehl /lspd öffnet.




    Nochmal im Überblick:
    Oben im Script:
    [pwn]
    new lspdtor;
    forward lspdtortimer();
    [/pwn]

    Unter OnPlayerCommandText:
    [pwn]
    if(strcmp("/lspd1", cmdtext, true) == 0)
    {
    MoveObject(lspdtor1, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    SetTimer("lspdtortimer", 10000, false);
    SendClientMessage(playerid, FARBE_GELB1, "LSPD Tor 1 geöffnet, es schließt sich automatisch in 10 sec!.");
    return 1;
    }
    [/pwn]

    und die Public:
    [pwn]
    public lspdtortimer()
    {
    MoveObject(lspdtor, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    return 1;
    }
    [/pwn]

    Dieses Tutorial dient als Standart für die nächsten,
    das erstellen der Public für das Tor soewie der Timer werden nicht noch einmal in den nächsten Tutorials erklärt,
    in den kommenden Tutorials werden nur noch erklärt, wie man die Tore auf anderer Weise öffnet.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von Dennis321 ()

  • 2. Tore via Befehl öffnen OCMD (mit Timer)

    Im ersten Tutorial wurde nun schon erklärt,
    wie man mit einem normalen Befehl ein Tor öffnen kann, dass sich nach 10 Sekunden automatisch wieder schließt.
    Da viele gerne OCMD benutzen,
    erkläre ich hier nun mal, wie man dies in OCMD umsetzt.

    Gleich am Anfang:
    [messagebox=info]Ich empfehle die Variente des ersten Tutorials:Tor via Befehl öffnen (mit Timer),
    OCMD empfehle ich nur für Befehle mit Parametern. Ich erkläre dies hier nur, da manche unbedingt nur mit OCMD arbeiten wollen.[/messagebox]

    Hierzu erstellen wir oben wieder unsere 2 Zeilen:
    [pwn]new lspdtor;
    forward lspdtortimer();[/pwn]

    Unter OnGameModeInit dann wieder unser Object:
    [pwn]lspdtor = CreateObject(980, 1588.4385986328, -1637.9038085938, 15.204790115356, 0, 0, 180);[/pwn]


    Und nun kommen wir zu unserem Befehl.
    Wir benutzen hierbei wie gesagt OCMD.
    Wichtig hierbei ist, das OCMD Befehle frei im Script stehen müssen,
    also in keiner Public, stock, etc.
    Ein OCMD Befehl sieht erstmal so aus:
    [pwn]
    ocmd:lspd(playerid, params[])
    {
    return 1;
    }
    [/pwn]

    Dort tragen wir nun wie im ersten Tutorial beschrieben unsere Functionen ein.
    Hier wieder MoveObjekt, den Timer und den ClientText.
    Da wir nun keine Parameter verwenden,
    benutzen wir noch #pragma unused params um diese quasi zu deaktiviren.

    Nun sieht unser Befehl so aus:
    [pwn]
    ocmd:lspd(playerid, params[])
    {
    #pragma unused params
    MoveObject(lspdtor1, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    SetTimer("lspdtortimer", 10000, false);
    SendClientMessage(playerid, FARBE_GELB1, "LSPD Tor 1 geöffnet, es schließt sich automatisch in 10 sec!.");
    return 1;
    }
    [/pwn]




    Nochmal im Überblick:
    Oben im Script:
    [pwn]
    new lspdtor;
    forward lspdtortimer();
    [/pwn]
    Der OCMD Befehl, frei im Script stehend:
    [pwn]
    ocmd:lspd(playerid, params[])
    {
    #pragma unused params
    MoveObject(lspdtor1, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    SetTimer("lspdtortimer", 10000, false);
    SendClientMessage(playerid, FARBE_GELB1, "LSPD Tor 1 geöffnet, es schließt sich automatisch in 10 sec!.");
    return 1;
    }
    [/pwn]

    und die Public:
    [pwn]
    public lspdtortimer()
    {
    MoveObject(lspdtor, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    return 1;
    }
    [/pwn]

    Das wars soweit mit dem öffnen eines Tores via OCMD Befehl.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Dennis321 ()

  • 2. Tore via Tor via Tastendruck öffnen (mit Timer)

    Hier kommt nun das Tutorial zum öffnen von Toren über das Betetigen einer Taste.
    Die Erklärung der Benutzung von Tasten für Pawn findet ihr in dem Tutorial von iPsy hier: Tastenbefehle | Erklärung

    Da im ersten Tutorial Tor via Befehl öffnen (mit Timer) die erstellung einer Public erklärt wurde,
    wird das hier nur in der Übersicht nochmal auftauchen.

    Wir erstellen wie immer oben im Script:
    [pwn]new lspdtor;
    forward lspdtortimer();[/pwn]

    Unter OnGameModeInit dann unser Object:
    [pwn]lspdtor = CreateObject(980, 1588.4385986328, -1637.9038085938, 15.204790115356, 0, 0, 180);[/pwn]

    Diesmal wollen wir nun keinen Befehl haben, sondern das das Tor sich öffnet, wenn man nahe dran ist und eine Taste drückt.
    Hierzu gehen wir zu der Public OnPlayerKeyStateChange.

    Hier erstellen wir nun eine Abfrage, ob der Spieler in der Nähe des Tors ist.
    Dies geht mit IsPlayerInRangeOfPoint(playerid, UMKREIS, X, Y, Z);
    Wir nehmen als UMKREIS nun einfach mal 8.0 und als X, Y, Z die Koordinaten des Tores im geschlossenem Zustand.

    Dies sieht dann so aus:
    [pwn]
    if(newkeys == DEINETASTE)
    {
    if(IsPlayerInRangeOfPoint(playerid, 8.0, 1588.4385986328, -1637.9038085938, 15.204790115356))
    {
    MoveObject(lspdtor1, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    SetTimer("lspdtortimer", 10000, false);
    SendClientMessage(playerid, FARBE_GELB1, "LSPD Tor 1 geöffnet, es schließt sich automatisch in 10 sec!.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, FARBE_GELB1, "Du bist nicht in der Nähe vom Tor!");
    }
    }
    [/pwn]

    DEINETASTE muss mit eurer Wunschtaste ersetzt werden, mit der ihr das Tor öffnen wollt.
    Wird die Taste gedrückt, so wird erstmal abgefragt, ob man in der Nähe des Tors ist.
    Ist man nun in der Nähe des Tores, wo wird es geöffnet, der Timer wird aktivirt der zur Public fürhrt und die Nachricht wird ausgegeben.
    Ist man nicht in der Nähe vom Tor, so wird ausgegeben: "Du bist nicht in der Nähe vom Tor!".

    Die Tasten findest du hier: Tastenbefehle | Erklärung



    Nochmal im Überblick:
    Oben im Script:
    [pwn]
    new lspdtor;
    forward lspdtortimer();
    [/pwn]

    unter OnPlayerKeyStateChange
    [pwn]
    if(newkeys == DEINETASTE)
    {
    if(IsPlayerInRangeOfPoint(playerid, 8.0, 1588.4385986328, -1637.9038085938, 15.204790115356))
    {
    MoveObject(lspdtor1, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    SetTimer("lspdtortimer", 10000, false);
    SendClientMessage(playerid, FARBE_GELB1, "LSPD Tor 1 geöffnet, es schließt sich automatisch in 10 sec!.");
    return 1;
    }
    else
    {
    SendClientMessage(playerid, FARBE_GELB1, "Du bist nicht in der Nähe vom Tor!");
    }
    }
    [/pwn]

    und die Public:
    [pwn]
    public lspdtortimer()
    {
    MoveObject(lspdtor, 1588.4385986328, -1637.9038085938, 15.204790115356, 2);
    return 1;
    }
    [/pwn]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Dennis321 ()