HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Wegpunkt an Einheit heften (https://hx3.de/editing-scripting-167/wegpunkt-einheit-heften-21893/)

MagicStyle 26.09.2012 13:43

Wegpunkt an Einheit heften
 
Hallo Community :wave:, vielleicht kann mir jemand bei einem Problem helfen.

Was ich vorhabe:
Ich sitze zum Start der Mission als Beifahrer in einem Auto und warte darauf das ein LKW in eine bestimmte Zone (Auslöser) fährt, wenn das passiert, möchte ich das mein Fahrer (Fahrer1) dem LKW folgt. Dazu müsste ich wahrscheinlich einen Wegpunkt an den LKW heften.


Ich habe es so probiert, hat aber nicht so funktioniert wie ich wollte:


WP1 = Fahrer1 addWaypoint[position LKW, 0];


Es wird zwar ein Wegpunkt erstellt, aber nur an der aktuellen Position des LKWs :ugly: also auf dem Boden . Ich hab schon alles probiert ich krigs einfach nicht hin :nixweiss:

PS: Ich habe auch schon Mr. Murrays Arma I - Hilfe Tutorial zu rate gezogen, aber bin noch nicht fündig geworden. Appropo Mr. Murray , arbeitet er noch an dem Tut für Arma II ? Übrigens danke an Mr. Murray für deine Arbeit :)

Gruß MagicStyle

Vienna 26.09.2012 17:35

Versuche es mit diesem Befehl: http://community.bistudio.com/wiki/doMove

Das muss aber in einer Schleife wiederholt werden:

Code:

temp = [Fahrer1,LKW] spawn
 {
  while {true} do {_this select 0 doMove position (_this select 1); sleep 1}
 }

Bei while {true} do ... musst du statt true eine Endbedingung einfügen.

MagicStyle 26.09.2012 21:28

Zitat:

Zitat von Vienna (Beitrag 430324)
Versuche es mit diesem Befehl: http://community.bistudio.com/wiki/doMove

Das muss aber in einer Schleife wiederholt werden:

Code:

temp = [Fahrer1,LKW] spawn
 {
  while {true} do {_this select 0 doMove position (_this select 1); sleep 1}
 }

Bei while {true} do ... musst du statt true eine Endbedingung einfügen.

Danke für deine Antwort :)
Ich versteh den Code aber nicht ganz, könntest du mir bitte erklären warum du "spawn" verwendet hast? Was hat der unterstrich bei _this zu bedeuten? Welchen zweck hat select? Ansonsten ist alles klar.

EDIT: Ich habe es gerade probiert, aber bekomms nicht gebacken :( Ich habe im Missionsordner eine script Datei mit dem Namen "script1.sqs" angelegt, dort ist dein Code gespeichert, bei Endbedinung war ich mir nicht sicher was ich reinschreiben soll, ich hab einfach mal "player alive" reingeschrieben.

Im Spiel habe ich dann einen Wegpunkt für den LKW gesetzt, irgendwo auf dem Weg liegt der Auslöser, dort habe ich unter "Bei aktivierung" folgendes hingeschrieben:

[] exec"script1.sqs"

Leider klappt es nicht :/

Moerderhoschi 26.09.2012 22:01

Zitat:

Zitat von MagicStyle (Beitrag 430347)
könntest du mir bitte erklären warum du "spawn" verwendet hast? Was hat der unterstrich bei _this zu bedeuten? Welchen zweck hat select? Ansonsten ist alles klar

Ich bin zwar nicht Vienna aber trotzdem mal so frei.

temp = [Fahrer1,LKW] spawn {while {true} do {_this select 0 doMove position (_this select 1); sleep 1}};

Mit spawn erzeugst Du ein neues Script und benoetigst dafuer nicht eine externe Datei.

Der untersrich bei _this gehoert zu _this select 0 / _this select 1 und bezieht sich auf den ertsten/zwoten Parameter den Du dem Script mit uebergibst.

Code:

0 = [Paramter1,Paramter2] spawn {
MeinErsterParameter = _this select 0;
MeinZweiterParameter = _this select 1;
}

Du koenntest auch direkt die Namen der Vehicle benutzen ohne _this select x
also Quasi

Code:

0= [] spawn {while {true} do {(driver NameDesVerfolgerAutos) doMove position NameDesZuVerfolgendenLKWs; sleep 1}};
gruß
hoschi

MagicStyle 27.09.2012 05:31

Danke Hoschi :daumen: Jetzt verstehe ich den ganzen Code, ich werde ihn heute Abend mal testen

PS: Du hast zufällig den gleichen Spitznamen wie mein Bruder :D

Vienna 27.09.2012 07:57

Den Code kopierst du in Bei Akt. in deinen Auslöser.

Der Befehl doMove lenkt Fahrer1 zur angegebenen Position von LKW. Da sich die Position von LKW immer verändert, wird sie nach der Pause von sleep 1 nach einer Sekunde nachgestellt.

Die erforderliche Pause ist von der Geschwindigkeit von LKW abhängig. Kann sein dass du die Pausezeit ändern musst.

Wie bereits erwähnt läuft die Schleife, durch "while {true} do ..." endlos. Anstelle von true musst du noch eine Bedingung fürs Beenden der Schleife einfügen.

z.B. wenn LKW eine bestimmte Position erreicht die du mit einer Fahne mit Namen Fahne1 markiert hast:

while {LKW distance Fahne1 > 10} do ...

Damit läuft die Schleife so lange, als LKW einen größeren Abstand als 10m zur Fahne1 hat.


Auch Fahne1 als Parameter übergeben sieht der Code dann so aus:

Code:

temp = [Fahrer1,LKW,Fahne1] spawn
 {
  while {(_this select 1) distance (_this select 2) > 10} do
    {
      (_this select 0) doMove position (_this select 1);
      sleep 1
    }
 }

Hinweise:

Es ist nicht notwendig (_this select x) in jedem Fall in Klammern zu setzen, aber so können in bestimmten Anwendungen Fehler vermieden werden.

Warum für den Code die Objekte als Parameter übergeben? Man kann so den Code auch für andere Objekte verwenden, ohne die Objektnamen im Code ändern zu müssen.

Übersichtlicher ist ein Code wenn man lokale Variable verwendet:

Code:

temp = [Fahrer1, LKW, Fahne1] spawn
 {
  private ["_Verfolger","_ZielObjekt","_EndObjekt"];

  _Verfolger  = _this select 0;
  _ZielObjekt = _this select 1;
  _EndObjekt  = _this select 2;

  while {_ZielObjekt distance _EndObjekt > 10} do
  {
    _Verfolger doMove position _ZielObjekt;
    sleep 1
  }
 }

Aber bei einfachen Routinen kann man sich das ersparen.

MagicStyle 27.09.2012 16:17

Vielen Dank Vienna, damit müsste ich es auf jedenfall hinbekommen!

Edit: :woop: Es hat geklappt und ich habe viel dazu gelernt! Vielen Dank für eure Hilfe, insbesondere Danke an Vienna :daumen:

MagicStyle 28.09.2012 20:34

Mir ist noch etwas eingefallen, ich möchte eine Zone um ein Dorf bauen indem alle Autos nur eine bestimmte Geschwindigkeit fahren dürfen, leider kenn ich mich mit den Klassen noch nicht aus,... Weiss jemand wie ich das umsetzen kann?

Ich hätte gesagt:

Klasse forceSpeed 15;

Nur weiss ich nicht was ich bei Klasse hinschreiben soll :confused:

Vienna 29.09.2012 09:50

Einmal-Auslöser mit Namen Trigger1
Aktivierung: "Jeder" oder "Blufor", "Opfor" usw.
Bedingung: true
Bei Akt.: folgenden Code reinkopieren:

Code:

temp = [20, Trigger1] spawn
 {
  while {true} do
  {
    {
    if (speed _x > (_this select 0)) then {_x limitSpeed (_this select 0)}
    } forEach list (_this select 1);
    sleep 0.1
  }
 }

Das begrenzt im Auslöserbereich die Geschwindigkeit auf 20 km/h. Aber nur wenn das Fahrzeug eine KI lenkt. Ein Spieler ist bei der Polizei anzuzeigen, wenn er zu schnell fährt.

MagicStyle 03.10.2012 13:55

"Ein Spieler ist bei der Polizei anzuzeigen, wenn er zu schnell fährt." :D geile Idee, das werd ich glaube ich sogar einbauen ^^ Von euch kann man so einiges lernen! :danke:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 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