HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Auslöser per kommando aktivieren (https://hx3.de/editing-scripting-167/ausloeser-per-kommando-aktivieren-22889/)

McDonalds 07.09.2013 11:14

Auslöser per kommando aktivieren
 
Hey ^^

also meine frage ist eigentlich ganz simpel.. ich hab lange rumprobiert aber ohne erfolg

ich will einen auslöser, also wen ich zumbeispiel in ein fahrzeug sitze eine aktion zur auswahl haben die einen auslöser aktiviert... das soll nur in den fahrzeug möglich sein diesen auslöser zu aktivieren

kann mir vorstellen das das möglich ist, hat jemand ne ahnung? ^^

(sorry fals ich zu ungenau erklärt habe oder sowas ist mein erster beitrag im forum :D)
//edit:
ich hätte noch eine nebensächliche frage..
wen ich ein auslöser habe der zb. eine nachricht erscheinen lässt wen ich durch sein auslösegebiet laufe wer kann die dan sehen? nur derjenige der durchläuft oder das ganze team?

[GNC]JamesRyan 07.09.2013 13:11

Zum Fahrzeug:

Aktionmenüeintrag kannst du mit addAction hinzufügen, im einfachsten Fall:

player addAction ["Das ist der Eintrag im Menü", "meinscript.sqf",[optionale Parameter]]

Willst du das nur innerhalb des Fahrzeuges, kannst du das ganze mit einer if-Bedingung umschließen oder den addAction-Befehl um eine condition erweitern, steht alles im BI Wiki zum Nachlesen. Für den Fahrer am einfachsten:

if (driver auto == player) then {};

Soll es auch möglich sein, wenn der Spieler nur drinsitzt, gibt es noch andere Befehle wie Gunner, Commander und crew (kannst du mit player in crew nutzen).

Dann zum Auslöser:

Prinzipiell kannst du jeden Auslöser über die Befehle setTriggerActivation genau steuern. Noch wichtiger für dich ist aber setTriggerStatements. Probier einfach mal deinen Trigger so wie du ihn brauchst im Editor vorzubereiten, aber in der Bedingungszeile, wo standardmäßig this steht false zu schreiben. Damit wird er jetzt niemals aktiviert. Dann sollte man mittels setTriggerStatements quasi wieder auf true schalten können oder eben die Bedingung die du brauchst. Achte nur dabei darauf, bei der Aktivierung das reinzuschreiben was schon in deinem Trigger steht, weiß sonst nichjt ob er das nicht durch nichts ersetzt.

Also Beispiel wäre ja wie im BI Wiki

_trg setTriggerStatements ["this", "hint 'trigger on'", "hint 'trigger off'"]

d.h. du gibst deinem Trigger einen Namen, z.B: trg1. Dann nutzt du den addAction Befehl um dem Spieler im Fahrzeug einen Aktionmenüeintrag auf ein Skript zu geben. Im Skript führst du dann

trg1 setTriggerStatements [];

aus. 1. Parameter ist die Bedingung. Mit "this" oder noch besser "true" wird er sofort ausgelöst, bzw. bei "this" löst er aus, wenn seine Bedingungen erfüllt sind. 2. Parameter ist die Aktivierungszeile, also was passiert, wenn der Trigger ausgerlöst wird. Das solltest du dann aus deinem Trigger einfach kopieren, einfache "" müssen durch doppelte """" ersetzt werden.

McDonalds 07.09.2013 13:30

momment xD also wir nehmen jetz mal an mein fahrzeugname ist "Fahrzeug1" und der name vom auslöser ist "Auslöser1", was muss ich jetzt schreiben um im Fahrzeug1 die aktion im menü "Aktiviere Auslöser" haben will?

this addAktion ["aktiviere Auslöser", ......?

[GNC]JamesRyan 07.09.2013 15:04

Zitat:

Zitat von McDonalds (Beitrag 458216)
momment xD also wir nehmen jetz mal an mein fahrzeugname ist "Fahrzeug1" und der name vom auslöser ist "Auslöser1", was muss ich jetzt schreiben um im Fahrzeug1 die aktion im menü "Aktiviere Auslöser" haben will?

this addAktion ["aktiviere Auslöser", ......?

Entschuldige ;) Heute sehr im Zeitdruck.

Also addAction (mit c!) fügt immer dem Onjekt ,das an 1. Stelle steht, einen Aktioneintrag hinzu. Da du willst, dass der Fahrer das im Fahrzeug kann, sollte man hier sicherheitshalber das Fahrzeug als Ziel wählen, das geht genausogut wie der Spieler selbst, also zunächst:

Code:


if (player in (crew Fahrzeug1)) then
{
Fahrzeug1 addAction ["Auslöser aktivieren!", "meinSkript.sqf"];
};

Damit hast du dem Fahrzeug ein Aktionmenüeintrag zugewiesen. Problem ist nur, dass du das so mit dem if-Befehl nur in einem Skript nutzen kannst. Daher musst du erstmal uns sagen, wie du den Aktionmenüeintrag anbringen willst. Du kannst z.B: nur die Zeile

Fahrzeug1 addAction ["Auslöser aktivieren!", "meinSkript.sqf"];

in die Init-Zeile schreiben, dann hat das Fahrzeug aber von Anfang an diesen Befehl. Möchtest du, dass es nur geht, wenn der Spieler einsteigt, musst du das entweder über ein Skript lösen, das z.B. zu Missionsbeginn gestartet wird oder über einen Auslöser:

Auslöser auf 0,0 und alles egal, in die Bedingungszeile:

Code:

player in (crew Fahrzeug1)
(also komplett ohne this, einfach das this des Auslösers löschen und ersetzen)

In die Aktivierungszeile

Code:

ID1 = Fahrzeug1 addAction ["Auslöser aktivieren!", "meinSkript.sqf"];
In die Deaktivierungszeile

Code:

Fahrzeug1 removeAction ID1;
Damit hättest du schonmal den Eintrag und der verschwindet, sobald der Spieler wieder aussteigt.

Ab jetzt spielt sich der Rest im Skript ab, dass durch das Aktionmenü aufgerufen wird, in meinem obigen Beispiel also meinSkript.sqf

Den Rest können dir dann andere machen. Hoffe jetzt keinen Fehler mit crew gemacht zu haben.

McDonalds 07.09.2013 15:24

geht das nicht einfacher? D: ich mein danke das du dir so viel mühe machst und mir das hier so gut erklärst aber geht das nicht einfacher? D: ich will doch nur ein Auslöser der ein objekt an mein flugzeug befestigt im menü des flugzeugs aktivieren xD den auslöser hab ich ja so weit schon konfiguriert :D ich muss ihn nurnoch irgendwie über das flugzeugmenü aktivieren können...

[GNC]JamesRyan 07.09.2013 16:16

Leider nein, denn addAction, also der Befehl für einen Eintrag im Aktionsmenü ist zwingend an ein Skript gekoppelt, du kannst damit also nur Skripte starten.

Du kannst dann nur Auslöser benutzen und bist damit nicht ganz so flexibel. Du kannst ja einen Auslöser basteln, der prüft, wann eine Einheit einsteigt und dann deinen anderen Auslöser aktivieren.

Du kannst generell in die Bedingungszeile jede beliebige Variable schreiben. Z.B. anstatt "this", "meineBedingung", also einfach einen Variablennamen. Das ist gleichbedeutend mit "meineBedingung = true". Mit anderen Worten: Der Auslöser löst aus, sobald du meineBedingung auf true setzt.

Also könntest du einen Auslöser machen, der prüft, ob der Spieler im Fahrzeug1 ist und in der Aktivierungszeile die Variable meineBedingung auf true setzen mit meineBedingung = true;. Damit würde dann dein zweiter Auslöser, der in der Bedingungszeile nur meineBedingung stehen hat, auslösen, das ganze kann man dann noch mit Zeitverzögerung/Countdown zeitlich timen. Aber wenn du willst, dass der Spieler das selbst auslösen kann...

es gibt noch eine einfache Variante: Mach nen Funkauslöser! Den kann jeder über 0-0-Kanal auswählen. Schreibe dann in den Funkauslöser bei Aktivierung: meineVariable = true.

Und in deinen anderen Auslöser, den du soweit fertig hast, wie gesagt, in die Bedingungszeile meineVariable. Das wars.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:45 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119