Ace Variablen

  • Sonstiges

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ace Variablen

    Hallo liebe ArmA World Community

    Ich suche eine Bibliothek, in der ich Ace Variablen finden kann.
    Um meine Anfrage klar zu machen, ein kleines Beispiel:

    Um ein Gebäude als "Medical Facility" zu definieren, füge ich "this setVariable ["ace_medical_isMedicalFacility",true,true];" in die init ein.

    So möchte ich gerne die variablen finden, um einer Einheit als medic zu definieren, ein medical Fahrzeug zu definieren usw.

    Mein konkretes Problem bezieht sich auf eine KI Einheit, der ich gerne ermöglichen möchte, per "ace medical" geheilt zu werden und ebenfalls in den "revive state" gehen soll, sodass diese bestimmte KI nicht einfach umfällt und nicht mehr aufsteht.
    Ich möchte gerne ein Tasks davon abhängig machen, dass man diese KI einheit rettet, möchte aber nur ungern einfach ALLE KI einheiten per ace "heilbar" machen (Über die Settings).

    Allerdings weiß ich ebenfalls, dass ich wahrscheinlich immer wieder über neue Probleme mit ace stolpern werde. Daher mölchte ich nicht einfach immer wieder in dieses Forum schreiben und nach Hilfe schreien, sonder ich suche Hilfe zur Selbsthilfe so zu sagen :)

    Ich bedanke mich bereits im vorraus ;)

    MfG

    Chibi
  • Mir wäre nicht bekannt, dass es so etwas bisher bereits gibt. Das meiste muss man sich entweder über die Export-Funktion der CBA-Settings ausgeben lassen oder mühselig aus dem github zusammensuchen: github.com/acemod/ACE3

    Für die häufigsten Verwendungen habe ich mir diese hier herausgeschrieben:

    Quellcode

    1. //define unit as medical-/repair-facility ACE:
    2. _unit setVariable ["ACE_medical_isMedicalFacility", true];
    3. _unit setVariable ["ACE_isRepairVehicle", 1];
    4. _unit setVariable ["ACE_isRepairFacility", 1];
    5. //medic/engineer/eod/pilot
    6. _unit setVariable ["ACE_medical_medicClass", 2];
    7. _unit setVariable ["ACE_isEngineer", 2];
    8. _unit setVariable ["ACE_isEOD", true];
    9. _unit setVariable ["ACE_GForceCoef", 0.3];
    10. //ACE-AI (medical):
    11. _unit setVariable ["ACE_medical_enableUnconsciousnessAI",1];
    12. _unit setVariable ["ACE_medical_enableRevive",1];
    13. _unit setVariable ["ACE_medical_preventInstaDeath",true];
    Alles anzeigen
    Aber vollständig ist das bei weitem nicht.
  • [JgZg-A] Schmitt schrieb:

    Exakt. allVariables hab ich gemeint. Zeigt gefühlt alle Variablen an. Mag sein dass ein paar wenige fehlen.
    Es zeigt alle an die auch gesetzt sind. Da getVariable aber das Verwenden von defaults ermöglicht werden nur die Variablen sichtbar sein die explizit aktiviert sind. Das werden dann die manuell eingestellten und ggf. die von Modulen Gesetzten sein... :/
    Entwickler von SQDev
    Co-Entwickler von OurAltis
  • Chibi Chi schrieb:

    Dorbedo schrieb:

    Mach doch eine Volltextsuche nach setVariable [QGVAR( im medical component um alle Medic-Variablen auf Einheiten zu bekommen.
    Dürfte ich dich dafür um ein konkretes Beispiel bitten, wie genau ich eine "Volltextsuche" medical component vollziehe?
    Erstmal vielen lieben Dank für die nette Hilfe! :)
    Runterladen. Und mit Notepad++ "In Dateien" suchen.
  • Okay, um das ganze nochmal auch für Andere Leser zusammen zu fassen:

    Belbo schrieb:

    Alternativ: copyToClipboard in Kombination mit allVariables.
    Das zeigt aber nur die derzeitig an eine Einheit angefügten Variablen an. Es zeigt einem leider nicht alle Variablen an, die möglich wären, um etwas anders einzustellen.
    klappt super und zeigt tatsächlich alle variablen an, die dem Object angehängt sind. Die Formatierung ist mehr so bäh ... aber hey es ist ArmA ;)
    Dabei werden leider die Werte (bzw. Syntax) , die an der Variable gebunden sind, nicht mit angegeben, sondern lediglich der Name der Variable.


    dedmen schrieb:

    Chibi Chi schrieb:

    Dorbedo schrieb:

    Mach doch eine Volltextsuche nach setVariable [QGVAR( im medical component um alle Medic-Variablen auf Einheiten zu bekommen.
    Dürfte ich dich dafür um ein konkretes Beispiel bitten, wie genau ich eine "Volltextsuche" medical component vollziehe?Erstmal vielen lieben Dank für die nette Hilfe! :)
    Runterladen. Und mit Notepad++ "In Dateien" suchen.
    Klappt ebenfalls und zeigt eine meeeenge Variablen an, die alle noch mehr möglichkeiten bieten! Hierbei wird sogar aufgegeben, welchen Wert die Variable erwartet / die Syntax (z.B.: _target setVariable [QGVAR(tourniquets), [0,0,0,0,0,0], true];. Super Hilfreich!

    Allerdings sind die Variablen, wie ich eine oben im Beispiel genannt habe, weiterhin im Ace-Nirvana verschwunden.
    Also solche wie this setVariable ["ace_medical_isMedicalFacility",true,true]; sind nicht in den ausgebenen Listen vorhanden.



    Zurück auf mein Eigentliches Problem, ein bestimmte KI Einheit, und nur dieser Einheit, dass Ace Medic System zu aktivieren.
    Nun bin ich auf Functions von Ace gestoßen, die Abfragen ermöglich sollen. Präzise gesagt, fragt folgendes Script ab, ob _unit das medical system von ace aktiviert hat:


    SQL-Abfrage

    1. /*
    2. * Author: Glowbal
    3. * Check if unit has CMS enabled
    4. *
    5. * Arguments:
    6. * 0: unit <OBJECT>
    7. *
    8. * Return Value:
    9. * enabled <BOOL>
    10. *
    11. * Example:
    12. * [Unit] call ace_medical_fnc_hasMedicalEnabled
    13. *
    14. * Public: No
    15. */
    16. #include "script_component.hpp"
    17. params ["_unit"];
    18. private _medicalEnabled = _unit getVariable QGVAR(enableMedical);
    19. if (isNil "_medicalEnabled") exitWith {
    20. (((GVAR(enableFor) == 0 && (isPlayer _unit || (_unit getVariable [QEGVAR(common,isDeadPlayer), false])))) || (GVAR(enableFor) == 1) || GVAR(level) == 1)
    21. };
    22. _medicalEnabled
    Alles anzeigen

    Dabei liest es _unit getVariable QGVAR(enableMedical); aus.
    Meine Frage: Kann ich das nicht einfach umdrehen? Sprich so etwas wie _unit setVariable [QGVAR(enableMedical), true];? Oder _unit setVariable [GVAR(enableFor), true];

    Natürlich habe ich das bereits ausprobiert und bekomme eine Fehlermeldung "Error Generic error in expression", da die Syntax des Befehls nicht stimmt, egal welchen ich benutze...



    Wie kann ich heraus finden, welche Werte der Befehl erwartet? Das da oben verstehe ich leider nicht :/

    Vielen lieben Dank für die tolle Unterstützung! :)
  • Natürlich musst du die Variablen anhand der Coding Guidelines von ACE auflösen. GVAR(XYZ) wird dabei zu ace_ADDON_XYZ, also im Falle von ace_medical zu ace_medical_XYZ. Steht ein Q davor, wird ein String daraus, also "ace_ADDON_XYZ" bzw. "ace_medical_XYZ".
    Nur damit da keine Unklarheit besteht.

    Und dann musst du dir überlegen, welchen Datentyp die Variable erwartet. Da kann es eigentlich nur BOOLEAN, STRING, NUMBER (oder SCALAR), ARRAY geben. Für viele davon kannst du dir anschauen, was die Variable für einen Wert enthält, indem du für eine spezifische Einheit mithilfe von _unit getVariable "VARIABLE" testest (in der Konsole hat man unten eine ganze Reihe Felder, die direkt Return-Werte ausgeben). Alternativ kann man einen Blick in die ACE_Settings.hpp des jeweiligen ACE-Addons werfen.

    Aber abgesehen davon hilft wieder nur ein Blick in den Code, indem du nach der spezifischen Variable suchst und dann schaust, was der default-Wert dafür ist.
  • Chibi Chi schrieb:

    Okay, um das ganze nochmal auch für Andere Leser zusammen zu fassen:

    Belbo schrieb:

    Alternativ: copyToClipboard in Kombination mit allVariables.
    Das zeigt aber nur die derzeitig an eine Einheit angefügten Variablen an. Es zeigt einem leider nicht alle Variablen an, die möglich wären, um etwas anders einzustellen.
    klappt super und zeigt tatsächlich alle variablen an, die dem Object angehängt sind. Die Formatierung ist mehr so bäh ... aber hey es ist ArmA ;) Dabei werden leider die Werte (bzw. Syntax) , die an der Variable gebunden sind, nicht mit angegeben, sondern lediglich der Name der Variable.
    "copyToClipboard str ((allVariables _object) apply {[_x, _object getVariable [_x,"undefined"]]})"
    ;)