Swift Pilot Client model rematching – dauerhafter fix

TL;DR

Die Entwickler von SWIFT Pilot Client haben eine schöne Funktion geschaffen, um dauerhaft Flugzeuge „umzumünzen“.
Dafür gibt es die Matching Scripts.

Das Problem

zeigt sich wenn einer der Mitflieger ein Flugzeug fliegt, welches ich bei mir im Simulator nicht verfügbar habe.
Meist wird der Mitflieger dann irgendwie dargestellt. Z. B. eine Daher Kodiak als A320. Das fällt besonders bei Buschfliegerei als echter Mist auf.

Lösen kann ich es zwar im Flug, indem ich sein ggf. komplett falsch zugeordnetes Flugzeug manuell auf ein anderes Model umbiege.
Das macht man ein-zwei Mal noch ganz gern. Aber auf Dauer nervt es, wenn vor jedem Flug erst mal die Hälfte der Mitflieger ein neues Model zugeordnet bekommen müssen.
Z.B.: die Kodiak 1000 in eine C208 Grand Caravan, die Beechcraft BE58 in eine Diamond DA62, die Cirrus SR22 in eine DA40NG etc.

Die Lösung

Sieht das Swift Team allem Anschein nach in Javascript Files als Matching-Scripts in denen quasi auf dem Weg von der DB in den Simulator zwischendurch noch Matchings von Flugzeugen, Airlines, Liveries etc. „umgebogen“ werden können.

Damit entfällt dann das ständige manuelle korrigieren in SWIFT.

Beispielscript

mit dem die folgenden Re-Mappings vorgenommen werden:

  • SR22 => DA40NG
  • BE58 => DA62
  • C182 => C172
  • MD52 AND R66 => B407
  • H145 AND => H135
  • Everything else (default) will use the standard Swift matching

alle anderen Flugzeuge bleiben unverändert.

Joes’ModelMatching.js
(function () {
		try {
    switch (inObject.aircraftIcao) {
      case "SR22":
        outObject.aircraftIcao = "DA40";
        logMessage = " ----    => Changing to DA40 NG"; // display log
        break;
      case "BE58":
        outObject.aircraftIcao = "DA62";
        logMessage = " ----    => Changing to DA62";
        break;
      case "C182":
        outObject.aircraftIcao = "C172";
        logMessage = " ----    => Changing to C172";
        break;
      case "MD52":
      case "R66":
        outObject.aircraftIcao = "B407";
        logMessage = " ----    => Changing to B407";
        break;
      case "H145":
      case "H160":
        outObject.aircraftIcao = "H135";
        logMessage = " ----    => Changing to H135";
        break;
      default:
        logMessage = " ----    => No Model change, keeping " + inObject.aircraftIcao;
        break;
	  }
	  outObject.modelString = ""; // invalidate any model
	  outObject.dbModelId = -1; // invalidate
	  outObject.modified = true;
	  outObject.rerun = true; // treat the changed values as coming from network to get the right livery/color etc.
	  outObject.logMessage = logMessage; // display log
	} catch (err) {
		  return err.toString();
	}
	return outObject;
})

Speichere es einfach in einen Ordner deiner Wahl (z. B. „Eigene Dateien“) und teste es im „Swift mapping tool“. Das ist das mit dem grünen Icon.

  1. Mapping Tool laden
  2. Mapping-Editor öffnen
  3. Model-Matcher-Tab öffnen und in den „Settings“ die Datei laden:
  1. Datei auswählen/laden
  2. Checkmark setzen, um es zu aktivieren
  3. Settings-Fenster mit „OK“ schließen

Test-Beispiel mit Airbus Helicopters H160 von HPG, den Ich selbst nicht habe.
Dennoch möchte ich, dass nicht einfach „irgendein“ Hubschrauber gezogen wird, sondern es wenigstens ein Airbus H135 und nicht ggf. ein Bell oder Robinson Hubschrauber ist.

Zurück im Model Matcher kann ich nun Testen:

  1. Ich gebe den ICAO Aircraft Type Designator des Modells an, dessen Matching ich testen will: Hier H160
  2. Ein Klick auf „matching“ durchläuft den Swift Matching Mechanismus. So kann gut überprüft werden, warum ein Flugzeug/Heli dargestellt wird, wie man es im Sim angezeigt bekommt, auch ohne dass der Simulator laufen muss.
  3. In den Logs kann ich dann von oben nach unten verfolgen, wie das Modell das ein Mitflieger online gemeldet hat, bei mir in das angezeigte aufgelöst wird.

Beim Testen erhalte ich nun

Swift model matcher log (gekürzt)
SWIFT: Input model: 'SWIFT' ' 
  type: 'queried' 
  ICAO: { H160 H2T } 
  CG: null' 
  livery: {
    Livery cc: '_CC_RED_DARKBLUE' 
    airline: 'Op: yes VA: no Mil: no' 
    desc.: 'Color RED DARKBLUE' 
    F: 'FF0000' 
    T: '00008B' 
    Mil: no
  }
  file: ''
  '
...
SWIFT: Reverse lookup, ICAO 'H160' not resolved from DB
...
SWIFT: Reduce by aircraft ICAO first. Cannot reduce by 'H160' results: 0
SWIFT: Not found by family 'H160' (ICAO treated as family)
SWIFT: Found by pseudo family 'H2T/' (ICAO treated as family) size 11
...
SWIFT: Reduce aircraft ICAO by airline second. No airline designator, cannot reduce 11 entries
SWIFT: No airline, no secondary search for airline/aircraft
SWIFT: Reduced by aircraft ICAO: yes airline: no
SWIFT: category matching disabled
SWIFT: Models reduced to civilian aircraft, size 11
SWIFT: Found by combined code H2T, possible 11
SWIFT: Prefer color liveries: 'yes', airline: '', ignore zero scores: 'yes'
...
SWIFT: Matching script (Matching stage): 'C:/Users/you/Documents/Joes'ModelMatching.js'
...
SWIFT: Matching script input model ( 
  type: 'queried' 
  ICAO: { H160 H2T } 
  CG: null' 
  livery: {
    Livery cc: '_CC_RED_DARKBLUE' 
    airline: 'Op: yes VA: no Mil: no' 
    desc.: 'Color RED DARKBLUE' 
    F: 'FF0000' 
    T: '00008B' 
    Mil: no
  } 
  file: ''
): '%2'
...
SWIFT: Matching script log: '  ----    => Changing to H135'
...
SWIFT: Matching script: Modified values and re-run requested

SWIFT: Matching script: Now using model: 'AIRBUS H135 (53424)'  
  type: 'matching' 
  ICAO: { EC35 (10551) H2T L } 
  CG: null' 
  livery: {
    Livery cc: '_CC_NOCOLOR' 
    airline: 'Op: yes VA: no Mil: no' 
    desc.: 'Temp: No color, no airline' 
    F: '' 
    T: '' 
    Mil: no 
  } 
  file: 'C:/MSFS/Community/hpg-airbus-h135/Simobjects/Airplanes/H-135 DEV SERIES PROJECT/aircraft.cfg'

SWIFT: --- Start matching: UTC 22:20:26.798 ---

Es ist zu sehen, dass mein Script funktioniert. Damit weiß ich, dass wenn ich das Script im pilot client (blaues Icon) lade, ich einen H135 angezeigt bekomme, wenn ein Mitflieger einen H160 meldet.
Dort muss das Script allerdings noch geladen und aktiviert – und ggf. wenn das Matching schon durch gelaufen ist, noch mal das re-matching angetriggert werden.

So geht’s:

  1. Settings
  2. Tab „Matching“
  3. Auswählen deiner Javascript-Datei – Prüfe ob sie korrekt gewählt wurde
  4. Aktiviere die Checkbox um dein Matching-Script zu aktivieren
  5. Speichere die Matching-Einstellungen
  6. Falls Deine Mitflieger schon gematcht waren, solltest Du noch das re-matching anstoßen, damit dein Script seine Wirkung auch entfalten kann.

Das Coole daran ist, dass durch das erneute „einsteuern“ ins Matching nach dem Scriptlauf ein Flieger einer Airline in einen anderen Flieger derselben Airline geändert werden kann, ohne dass Du dich überhaupt um die Airline Livery kümmern musst.

Natürlich geht auch komplexeres z. B. um in der realen Welt nicht vorkommende Flugzeug/Livery Kombinationen wie z. B. eine Ryanair A380 in eine Ryanair 737 zu wandeln. 🙂

Oder Wenn einer mit einem bestimmten Callsign-online ist, bekommt er ein ganz besonderes Flugzeug verpasst. Z.B. kannst Du damit auch FSC740 – oder anderen FSC callsigns immer eine Four-Star-Cargo DC3 verpasst. Was anderes hatte die Airline ja auch nicht in der Flotte. 😉

Mehr dazu in der Dokumentation des Swift Model Matchings.