HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-167/)
-   -   Co-Pilot übernimmt Steuerung? (https://hx3.de/editing-scripting-167/co-pilot-uebernimmt-steuerung-21497/)

Sol.LrMartyn 26.05.2012 15:37

Co-Pilot übernimmt Steuerung?
 
Heyho und guten Samstag Nachmittag,

weiß jemand von Euch ob es möglich ist, dass der Co-Pilot die Steuerung eines Helis übernehmen kann? Es ist halt schade, wenn eine MH-60S mit 16 Passagieren abstürzt, nur weil ein teamkiller dem piloten nen headshot gegeben hat.

Falls keiner eine Lösung hat, womit könnte ich es denn möglicherweise zusammenbasteln? Bin ja schließlich nicht faul, studieren geht über probieren ;-)

Grüße
Sol.LrMartyn

AyzOn 26.05.2012 15:53

Wie kann man denn einem Piloten der in einem Heli unterwegs ist, mal eben in den Kopf schiessen?^^

Vienna 26.05.2012 16:08

Du erstellst eine Schleife die den Driver (http://community.bistudio.com/wiki/driver) abfragt und ersetzt diesen beim Tod durch einen aus der Crew (http://community.bistudio.com/wiki/crew) mit http://community.bistudio.com/wiki/moveInDriver

Sol.LrMartyn 26.05.2012 16:35

Danke
 
Danke Vienna, auf die Idee bin ich vor 2 minuten auch gekommen, xD...

AyzOn, es geht. Glaub es mir, ich hab letzlich mit 2 weiteren Leuten gezockt und es kam ein gegnerischer Helikopter angeflogen, und was hatten wir? DMRs!!!! Zack gefeuert, Pilot tod, Kampf-Hubschrauber abgestürzt. Klingt bescheuert ist aber so.

Poste später hier mal das ganze Skript, sobald ich es fertig habe.
Grüße

@Vienna, was vorgefertigtes gibt es noch nicht, oder? Denn ich wollte ja quasi gerne, das der moveinCargo platz 1 sitzen bleibt und trotzdem lenken kann... Sodass man wie in real life, falls der pilot mal einschläft, abgelenkt ist oder so, der co-pilot von seinem Sitz aus eingreifen kann...

Sol.LrMartyn 26.05.2012 16:46

Hm, ganz einfach problem was ich nun habe. Wie mache ich es bei Arma 2 dass er mir den Namen der Einheit z.B. "Tölel 1", "Treper 2" etc etc ausgibt bzw. den namen derjenigen Einheit ausliest die im Fahrzeug oder Helikopter sitzt und diese dann für den Driver ersetzt?

Denn:

Bedingung: isNull driver Fhz1 and player in (crew Fhz1)
Aktivierung: player moveInDriver Fhz1;

ist ja schön und gut. Aber welchen player nimmt er denn nun? Wirklich einen der in der Crew ist, oder einen x-beliebigen der grade auf dem server ist?

Vienna 26.05.2012 22:57

Im Folgenden die Routine welche einen toten Piloten austauscht. Genommen wird eine Einheit aus der Crew-Liste.

Keine Ahnung wie man den Copiloten aus der Liste raus finden kann.

Den Code in die Initialisierungszeile des Helis kopieren.

Code:

temp = this spawn
 {
  if (!isServer) exitWith {};
  while {damage _this < 0.9} do
  {
    waitUntil {(position _this)select 2 > 10 or damage _this > 0.9};
    if (! alive driver _this) then
    {
      {
      if ((!alive driver _this )and driver _this != _x) then 
        {
        driver _this setPos (getPos _this);
        _x setPos [0,0,50];
        _x moveInDriver _this;
        sleep 0.1
        }
      } forEach crew _this
    };
    sleep 1
  }
 }


Sol.LrMartyn 27.05.2012 15:36

Nicht schlecht
 
Das funktioniert soweit, einzige Fehler:

Wenn der Pilot (Spieler) abspringt und KI sitzt im Flugzeug reagiert niemand und alle sterben!?

Ansonsten gutes Skript!

Vienna 27.05.2012 17:28

Wenn auch ein abgesprungener Pilot ersetzt werden soll, dann muss das so ausshen:

Code:

temp = this spawn
 {
  private "_d";
  if (!isServer) exitWith {};
  while {damage _this < 0.9} do
  {
    waitUntil {(position _this)select 2 > 10 or damage _this > 0.9};
    if ((! alive driver _this) and damage _this < 0.9 and count crew _this > 0) then
    {
      if (isNull driver _this) then
      {
        _d = (crew _this)select 0;
        _d setPos [0,0,50];
        _d moveInDriver _this;
        sleep 0.1
      }
      else
      {
        {
        if ((!alive driver _this )and driver _this != _x) then
          {
          driver _this setPos (getPos _this);
          _x setPos [0,0,50];
          _x moveInDriver _this;
          sleep 0.1
          }
        } forEach crew _this
      }
    };
  sleep 1
  }
 }

alive driver Heli gibt auch false zurück, wenn gar kein Pilot vorhanden ist.

driver Heli dagegen muss mit isNull abgefragt werden um festzustellen ob überhaupt wer auf diesem Platz sitzt.

Sol.LrMartyn 27.05.2012 21:31

Also ist das folgende Skript nur so geschrieben, damit ein Pilot (Spieler) abspringen und ersetzt werden kann?

Denn ein KI-Pilot wird mit deinem 1. Skript schon ersetzt, wenn er abspringt.

Vienna 28.05.2012 10:56

Das erste Skript geht davon aus, dass der tote Pilot im Heli am Platz verbleibt (was normal üblich ist). Der Tote ist noch in der Crew-Liste vorhanden. Ist der Pilotenplatz leer, dann führt das zu einem Programmfehler.

Darum im zweiten Skript zuvor die Abfrage ob der Driver-Platz überhaupt belegt ist.

Wie aus den Skripten ersichtlich, muss der neue Pilot zuerst aus dem Heli entfernt werden, bevor er auf den Driverplatz gesetzt werden kann. Um etwaige Probleme zu vermeiden, wird auch ein toter Pilot zuvor aus dem Heli entfernt.

Leider ist aus der Crew-Liste nicht ersichtlich, wer an welchem Platz sitzt. Die Reihung in der Liste ist abhängig wann wer einsteigt, nicht auf welchem Platz wer sitzt.

Im zweiten Skript ist es egal ob der Pilot tot oder abgesprungen ist. Er wird durch den nächstmöglichen der Crew-Liste ersetzt.

Sol.LrMartyn 28.05.2012 17:35

Sauber
 
Alles klar, Vienna. Besten Dank! Ich teste es in naher Zukunft aus. :daumen:


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