Eine kleine Frage zum Thema Variablen

  • Hallo Community,


    ich habe mal eine kleine Frage warum mein Ambiente Script ein Fehler auswirft mit folgender Meldung. Ich stelle euch das Script zur Verfügung es funktioniert halt derzeit nur der obere Teil und kann auf jede menschliche KI angewendet werden. Es ist noch nicht fertig aufgrund des Fehlers das es auswirft. Wenn es fertig ist soll es auch dafür sorgen sobald der Combatstatus sich ändert das die Animation beendet wird. Gleich vorweg ich wollte das Script etwas generischer gestalten weil ich natürlich nicht tonnenweise "waitUntil" in der Mission auslösen möchte was nur unötig die Serverperformance versaut.


    Edit: Script aktualisiert. Es funktioniert jetzt einwandfrei. Es ist derzeit noch nicht auf einen Dedicated Server getestet aber ich bin zuversichtlich das dies funktioniert.

    Code
    1. 7:05:20 Error in expression <spawn {sleep 0.2; waitUntil {behaviour _einheit == "combat"};
    2. 7:05:20 Error position: <_einheit == "combat"};
    3. 7:05:20 Error Nicht definierte Variable in Ausdruck: _einheit
    Code: CfgBishopfunctions.hpp
    1. class bishop {
    2. class bishop {
    3. file = "scripts";
    4. class animations;
    5. };
    6. };




    Mit freundlichen Gruß Bishop

  • PFH ist hier komplett ungeeignet da der Code nur einmal ausgeführt wird. Wenn CBA verfügbar ist wäre waitUntilAndExecute eine Möglichkeit.

    Code
    1. _einheit spawn {
    2. sleep 0.2;
    3. waitUntil {behaviour _this == "combat"};
    4. _this call BIS_fnc_ambientAnim__terminate;
    5. };

    Das 0 = ist komplett unnötig übrigens. Das braucht man höchstens in Triggern.
    Und das private ["_einheit", "_anim", "_stance"]; ist unnötig und unintelligent. params macht schon alle Variablen private.


    Der Header der Funktion is gut gemacht. Daumen hoch dafür.
    Aber das Beispiel ist nicht wirklich ein funktionierendes Beispiel. Als Beispiel solltest du eher das Script aus Zeile 6 auflisten.

  • 1. Variablen in "params" gehören bereits zum derzeitigen Scope. Das "private" sollte man weglassen, da es dadurch überflüssig ist.
    2. Wenn man eine Funktion über "remoteExec" ausführen möchte, dann sollte man nicht die gesamte Funktion übergeben (langer Text), da dies unnötig viel Netwerktraffic verursacht. Außerdem könnte man als "JIP" Ziel die Einheit statt "true" angeben, damit der Server die Funktion automatisch vom JIP-Stack für zukünftig verbindende Spieler enternt, sollte die Einheit im Verlauf der Mission gelöscht werden.


    C
    1. [_einheit, _anim, _stance] remoteExec ["BIS_fnc_ambientAnim", 0, _einheit];

    3. Lokale Variablen existieren, im Gegensatz zu globalen Variablen, nur in der Skriptinstanz, in der sie definiert wurden. Der Code-Block nach "spawn" stellt eine neue Skriptinstanz da und daher müssen alle lokalen Variablen übergeben werden.
    4. Ich würde nicht jeden Frame testen, sondern ein "sleep" in das "waitUntil" einbauen.
    5. Man könnte das "behaviour" einer gesamten Gruppe testen und nicht nur einer Einheit, und dann alle Einheiten der Gruppe animieren. "beahviour" sollte sowieso bei allen Grupenmitgliedern gleich sein und so spart man evtl. viele Schleifen.

  • So Danke erstmal für die zahlreichen Antworten und Beispiele. Ich habe das Script im oberen Thread aktualisiert und es funktioniert derzeit ohne Fehler. Es wurde noch nicht auf den Dedicated Server getestet. Auf jedenfall habe ich etwas dazu gelernt und commy hat auch nochmal ein paar interessante Ansätze geliefert. Ich werde das Script auf jedenfall noch auf dem Dedicated testen und gegebenfalls erweitern. Wenn dieses klappt wird dies hier auch aktualisiert. Das mit der Gruppenerkennung bei Statuswechsel auf Combat werde ich später noch anpassen. Das ist zumindest eine gute Idee das Gruppenweise auszuführen.


    Wer das Script benutzen möchte kann das gerne tun. Es bietet halt die Möglichkeit eine Mission nochmal aufzuwerten und etwas mehr Ambiente zu erzeugen.


    Gruß Bishop

  • Ich habe mal was ausprobiert und zwar habe ich den Teil in Zeile 11 abgeändert.


    Mein Gedanke war das eventuell lebende Einheiten die aber den Combatstatus gewechselt haben bei JIP trotzdem in der Animation bleiben was ntürlich unerwünscht wäre. Deswegen habe ich den Code in Zeile 11 so gestaltet. Falls das unsinnig ist so kann sich ja mal jemand dazu äußern.


    Gruß Bishop