Feind schießt leider auf UK3CB Zivilisten

  • Ich ärgere mich gerade mit ungewolltem Beschuss des Feindes (EAST Einheiten) auf Zivilisten herum. Ich hab mittlerweile auch die Ursache gefunden. Mit Vanilla Zivilisten funktioniert alles wunderbar. Wenn ich aber aus der UK3CB Mod die Zivilisten nutze (z. B. "UK3CB_CHC_B_BODYG" oder jede andere beliebige Zivilistenklasse aus dieser Mod), dann wird die Einheit als WEST angesehen, obwohl sie beim Erstellen einer CIVILIAN Gruppe zugeordnet wird. Hier der Quellcode:

    Ist von euch schon jemand über dieses Problem gestolpert? Hat jemand einen Tipp für mich, wie ich dem UK3CB Zivilisten beibringen kann dass er eine CIVILIAN Einheit sein soll oder keine WEST Einheit?

  • Der oben gezeigte isolierte Code funktioniert nun lokal wie auch auf dem Dedicated Server wunderbar.

    Eingebaut in meinen Molloch an Skripten habe ich jedoch noch ein Problem, also einen Fehler in den Tiefen meiner sqf Files, vermutlich in der /functions/62_kiSpawn/fn_spawneKiEinheit_server.sqf (Skripte im Anhang). Meine Erwartungshaltung ist jedoch nun nicht, dass irgendjemand da reinschaut. Daher will ich die Frage lieber ganz allgemein halten.


    Derzeit ergibt sich beim Testen meiner Mission auf einem Dedicated Server folgende Situation für die UK3CB Zivilisten:

    Ich stelle mich unmittelbar vor den Zivilisten:

    Code
    1. side cursorTarget; // = WEST (lokale Konsole; unmittelbar nach serverseitigem Spawn der Einheit)
    2. str player; // = sch_001


    Ich prüfe via Target-Debugging auf dem Server welcher Seite die Einheit angehört die vor dem Spieler steht (aus Server-Sicht):

    Code
    1. side (((units civilian) select { _x distance2d sch_001 < 5 }) select 0); // = CIV (Server-Sicht via Target Debugging ermittelt)


    Kann mir jemand erklären, wie es überhaupt sein kann dass der Server eine Einheit als CIV ansieht, der Client aber dieselbe Einheit als WEST ansieht?

    Die passiert nur unmittelbar nach dem Spawn des Zivilisten für ca. eine Minute. Anschließend wechselt auch clientseitig die Anzeige side cursorTarget von WEST auf CIV.


    Code
    1. side cursorTarget; // = CIV (lokale Konsole; eine Minute nach serverseitigem Spawn der Einheit)
  • Anders ausgedrückt: Wenn ich zwei Zivilisten spawne, ergeben sich unmittelbar nach Spawn für ca. 1 Minute folgende Werte in der Debug Konsole:


    Prüfung auf Server:

    Code
    1. { side _x == civilian } count (units civilian); // = 2
    2. { side _x == west } count (units civilian); // = 0

    Prüfung auf Client:

    Code
    1. { side _x == civilian } count (units civilian); // = 0
    2. { side _x == west } count (units civilian); // = 2

    Erst nach ca. einer Minute weiß dann auch der Client, dass die civilians zu CIV und eben nicht zu WEST gehören.


    Während der Server schon die ganze Zeit die Situation korrekt einschätzt (alle sind CIV) wissen es die Clients also erst ca. 1 Minute zu spät. Da auch die Headless Clients somit erst zu spät Bescheid wissen, schießen Feinde, die auf Headless Clients laufen, eine Minute lang munter auf Zivilisten. Leider deutlich zu lang, um sie vor dem sicheren Tod zu schützen.


    // edit: Die Kollegen von 3CB haben mir zwischenzeitlich gesagt ich müsse die gleich aussehende Klasse UK3CB_CHC_C_BODYG nutzen (also alle Zivilisten mit einem "_C_" im Namen). Diese wären bereits initial der zivilen Fraktion zugehörig. Demnach verhalten sich die genauso wie die Vanilla Zivilisten. Damit ist zwar mein akutes Problem gelöst. Interessant bleibt es dennoch wieso der Client eine derartige Verzögerung hat was das Bekanntwerden der neuen side der unit anbelangt. Aber für mich persönlich hat sich das Thema damit erledigt.

  • Grundsätzlich immer side group <unit> benutzen. Was zeigt das an?

    side group <unit> funktioniert wunderbar. In den Skripten habe ich also auch keine Fehler. ABER der die KI schießt auf die WEST Einheiten. Und das macht ja die Engine. Da hab ich skriptseitig ja keinen Einfluss drauf. Mittels joinSilent konnte ich den Server bereits überzeugen, die WEST Einheit in der CIV Gruppe sofort auch als CIV Einheit anzuerkennen. Aber der Client braucht ca. 1 Minute um das auch zu verstehen. In dieser Zwischenzeit gibt es großes Geballer in den Ortschaften zwischen Feindeinheiten und (unbewaffneten) Zivilisten.