Auslöser für UAV Nutzung

  • Gibt es eine performante Möglichkeit festzustellen,
    wenn ein Spieler eine Drohne besetzt oder ein UAV Terminal öffnet?


    Wir nutzen bei uns Lizenzen für die Fahrzeuge, welche die Spieler sich für ihr erspieltes Geld kaufen können.
    Leider kann ich das bei den UAV's nicht vernünftig handeln. Vlt hat ja jemand eine Idee?
    Für die anderen Fahrzeuge regel ich das über die Eventhandler "GetInMan" und "SeatSwitchedMan".

  • Du könntest PlayerViewChanged Mission Eventhandler nutzen, damit hatten wir unsere Drohnen Whitelist implementiert.
    Dieser triggerd sobald ein Spieler eine UAV übernimmt, da er ja seine Unit verlässt und die Unit in der Drohne übernimmt.




    Code
    1. addMissionEventHandler ["PlayerViewChanged", {
    2. params [
    3. "_oldUnit", "_newUnit", "_vehicle",
    4. "_oldCamera", "_newCamera", "_uav"
    5. ];
    6. }];

    Du bekommst außerdem im Argument _uav die UAV übergeben, wenn es keine UAV ist, ist die Variable objNull.

  • Umgesetzt habe ich das jetzt wie folgt:


    init.sqf


    Leider haben wir manchmal das Problem, dass das Display nicht geschlossen wird.
    Es passiert fast immer beim ersten Connecten mit der UAV wenn ich die Drohne ab- und wieder aufbaue.
    Hat da vlt jemand eine Erklärung für?

  • Race Condition? Was bedeutet das?


    Ich habe aktuell eine Mischung aus beiden Varianten verbaut, muss das aber nochmal testen.
    Mit dem EDLEH "RscDisplayAVTerminal" versuche ich jetzt nur das öffnen das Terminals zu unterbinden
    und mit dem MEH "PlayerViewChanged" hoffe ich das "Steuerung übernehemen ohne Terminal zu öffnen" zu handeln.
    Aber ohne zu testen, könnte ich mir auch hier vorstellen, dass jeweils der 1. Kontakt zum UAV durchfällt.
    Und ja, dann wäre ich komplett bei deiner Lösung.^^


    Etwas ärgerlich ist das schon, da ich eine modunabhägige Lösung definitiv bevorzugen würde.
    Schade, dass es dafür keinen richtigen EH gibt...

  • Race Condition heißt, dass zwei Instanzen Code mehr oder weniger gleichzeitig laufen, aber das Programm nur funktioniert, wenn zuerst die eine und dann die andere Operation ausgeführt wird.


    Dein PlayerViewChanged möchte RscDisplayAVTerminal schließen, aber dafür muss RscDisplayAVTerminal erst erstellt sein.


    Weil es dafür keine Engine-Lösung gibt wurde es ja überhaupt erst in @cba_a3 aufgenommen.