Beiträge von Schmitt

    Zum Testen:
    TFAR aktivieren
    Fahrzeug "rhsusf_m113_usarmy_supply" hinstellen
    Eine Person abgesessen, also neben das Fahrzeug
    Eine Person aufgesessen, Kommandantenplatz, Oberluke


    Obwohl sich die Personen natürlich sehen, sich so nah sind, dass sie sich fast berühren könnten, haben sie keine Chance sich zu hören. Man hört keine Stimme des anderen. Als wäre eine unsichtbare Wand dazwischen.


    Das - und NUR das - ist der Grund, weshalb ich bei einigen Missionen ACRE einbaue. Sonst nutze ich ausnahmslos TFAR.


    Aber das ist vermutlich ein TFAR Bug und kein Feature. Ich werde das Thema also noch einmal im TFAR Thread aufgreifen mit Bitte um Bug Behebung. Wer dazu mit diskutieren will, kann mir gerne unauffällig folgen zum TFAR Thread.


    HIER bitte nicht mehr speziell zum M113 Thema diskutieren, zumal es sonst lauter Doppelposts geben könnte.

    Ich hab gerade an einer COOP mit >30 Mann und ACRE teilgenommen. Viele Leute hatte Probleme mit dem Funken, sodass sich einige nur einseitig verständigen konnten (hören aber nicht funken). Schade dass ACRE bei mehreren Events Probleme zu verursachen scheint. Der Grund weshalb ich persönlich ACRE hin und wieder einsetze liegt darin, dass einige Fahrzeuge nur via ACRE eine Kommunikation zwischen z. B. Kommandant und abgesessenen Teilen ermöglichen, Beispiel M113. Versucht mal beim M113 als Kommandant abgesessene Teile (ohne Funk, nur durch Sprechen) zu erreichen. Mit TFAR keine Chance. Mit ACRE problemlos. Wäre super, wenn TFAR das auch noch hinbekommt. Dann gäbe es für mich keinen Grund mehr ACRE einzusetzen.

    acre_sys_core_onRevealUnit is ein globales Event. Somit wird dieses Script überall ausgeführt.

    Ok, fairer Punkt. Wenn das Event natürlich nicht nur bei dem auslösenden Spieler stattfindet (wovon ich ausging) sondern auf allen Clients ausgelöst wird, dann muss ich natürlich noch eine Prüfung bauen, ob wir uns aktuell auf dem Client befinden, der auch der echte Auslöser ist. Habe also noch ergänzt "(str _player) == (str player) &&"


    Jo, passt prinzipiell.
    Jetzt musst du dir nur noch einmal Gedanken über die Lokalitäten der einzelnen Variablen und Einheiten machen :-)

    Meine Funktion meldet lediglich clientseitig an den Server "Hallo ich bin so laut, dass Feind neben mir mich vermutlich gehört hat". Um den Rest kümmern sich ausschließlich serverseitige Skripte. Da "player" clientseitig eindeutig ist, und Feindeinheiten clientseitig bzgl. Position zumindest bekannt sind, hab ich kein Problem mit den Lokalitäten :-)

    Zusammenfassend kann man dann also sagen, es gab eine Mindestgeschwindigkeit die Engine-bedingt auch nötig war => Also seitens ACE Team gut gelöst
    Es scheint durch die ganzen Engine Updates mittlerweile aber keine Mindestgeschwindigkeit mehr nötig zu sein => ACE Update bzgl. der einen Code Zeile nötig


    Jetzt brauchen wir nur noch einen ACE Ansprechpartner der die Änderung in den Begrenzer einfließen lassen kann. Haben wir einen ACE Entwickler in unseren Reihen?


    Änderungswunsch bzgl. \ace_vehicles\z\ace\addons\vehicles\functions\fnc_speedLimiter.sqf Zeil 31


    Aktuell:


    private _maxSpeed = speed _vehicle max 10;



    Neu:


    private _maxSpeed = speed _vehicle;



    Das sollte ja kein Streitthema innerhalb der ACE Entwickler sein, zumal der Grund für die Mindestgeschwindigkeit des Begrenzers technisch (und nicht inhaltlich) war.

    So. Endlich gefunden: acre_sys_gui_VolumeControl_Level


    Auf lautester ACRE Einstellung hören mich die Feinde sogar aus 150 Meter. Krass. Wie dem auch sei, wie komm ich an die aktuelle Sprechlautstärke ran?


    Die Sprechlautstärke (-2, -1, 0, +1, +2) ist gespeichert in einer globalen Variable "PRÄFIX_VolumeControl_Level". Nur kenn ich den Präfix nicht.


    https://github.com/IDI-Systems…VolumeControl_Level&type=


    Wer kann mir den GVAR(VolumeControl_Level) auflösen in den tatsächlichen globalen Variablennamen?


    Hab das gefunden im ACRE Code:



    Code
    1. MAINPREFIX = "idi"
    2. PREFIX = "acre"

    Hab daraus zusammengereimt, die gesuchte Variable müsste idi_acre_sys_core_VolumeControl_Level heißen. Kein Glück :-(


    Komme mit GVAR nicht klar... https://cbateam.github.io/CBA_…cros_common-hpp.html#GVAR

    Normale Unterhaltung auf 70 Meter hören? Das ist schon ne Leistung ... Mal sehen ob ich die ACRE Hörreichweiten (bei Idealbedingungen ohne Hindernisse) irgendwo rauslesen kann aus dem ACRE Code. Ich werde auch mal mit menschlichen Spielern testen, ob 70 Meter Distanz wirklich hörbar ist in ACRE. Falls nicht, muss ich das irgendwie modifizieren.

    Die Distanz kann man mit _player distance _unit berücksichtigen.

    Aber ACRE sollte doch nur einen reveal Befehl ausführen, WENN der Gegner die sprechende Einheit hört. Macht ja keinen Sinn, dass ich jetzt NOCH EINMAL die Distanz prüfen muss. Sehr seltsam. Gerade ein mich der Feind aus 66 Meter gehört ...

    Ich will einen sehr aggresiven Feind erzeugen, der sofort angreift, wenn er in unmittelbarer Nähe Feinde hört. Es stört mich, wenn man sich unterhalten kann und der Feind einfach vorbeiläuft obwohl er einen 5 Meter hinter sich locker hören müsste.


    Für TFAR hab ich dazu 2 Funktionen geschrieben. Eine prüft, ob der Gegner den Spieler hätte hören müssen. Wenn ja, wird die zweite Funktion wie folgt ausgelöst.


    [[player, _feindEinheit], "schmitt_fnc_lasseFeindAufZuLautenSpielerReagieren", "AN_SERVER"] spawn schmitt_fnc_mpPaketSenden;


    Die Funktion funktioniert auch wunderbar im TFAR Umfeld. Jetzt muss ich eben umprogrammieren, sodass die Mission auch im ACRE Umfeld funktioniert. Dazu möchte ich meine Funktion im ACRE Code verstecken:

    Code
    1. if (_lastRevealed + 15 < time) then
    2. {
    3. _curUnit setVariable ["acre_sys_core_lastRevealed", time, false];
    4. ["acre_sys_core_onRevealUnit", [acre_player, _curUnit, 1.6 ] ] call CBA_fnc_globalEvent;
    5. // Es folgt die neue Schmitt-spezifische Zeile
    6. [[acre_player, _curUnit], "schmitt_fnc_lasseFeindAufZuLautenSpielerReagieren", "AN_SERVER"] spawn schmitt_fnc_mpPaketSenden;
    7. };


    Mein erster Versuch dazu lautete gerade



    Code
    1. // Zunächst den originalen ACRE Handler entfernen:
    2. [acre_sys_core_monitorAIHandle] call CBA_fnc_removePerFrameHandler;
    3. // Dann den modifizierten ACRE Handler starten:
    4. acre_sys_core_fnc_enableRevealAI =
    5. { ...

    Aber das klappt nicht. Wie ihr geschrieben habt, liegt das an der finalen Kompilierung von acre_sys_core_fnc_enableRevealAI. Schade ^^



    Code
    1. => 18:07:52 Attempt to override final function - acre_sys_core_fnc_enablerevealai



    Ich werde nun commy2s Ansatz verfolgen und das bedeutet konkret in meiner init.sqf (da müsste doch die initPlayerLocal.sqf der bessere Platz sein weil die Funktion den Server nicht interessiert?):



    Code
    1. ["acre_sys_core_onRevealUnit",
    2. {
    3. params ["_player", "_unit", "_revealAmount"];
    4. systemChat format ["%1 revealed for %2", _player, _unit];
    5. [[_player, _unit], "schmitt_fnc_lasseFeindAufZuLautenSpielerReagieren", "AN_SERVER"] spawn schmitt_fnc_mpPaketSenden;
    6. }
    7. ] call CBA_fnc_addEventHandler;

    ... Trommelwirbel ...


    Juhu!! Funktioniert wunderbar! https://steamuserimages-a.akam…B81862687928F10AE9FFEF76/



    Besten Dank an die Runde!

    Also die Funktion acre_sys_core_fnc_enableRevealAI hab ich überprüft. Darin wird via


    Code
    1. ["acre_sys_core_onRevealUnit", [acre_player, _curUnit, 1.6 ] ] call CBA_fnc_globalEvent ;


    der aktuelle Spieler gegenüber der feindlichen Einheit aufgedeckt in dem in der verlinkten acre_sys_core_onRevealUnit via


    Code
    1. _unit reveal [_player, _revealAmount];


    der eigentliche reveal Code ausgeführt wird.


    Die große Frage, die sich mir nun stellt ist, wie mische ich mich ein in den Code ohne das die @acre2 PBO modifizieren zu müssen.


    Gehe ich Recht in der Annahme, dass ich die Code-Variable acre_sys_core_fnc_enableRevealAI in meiner init.sqf (oder reicht initPlayerLocal.sqf?) mit meinem modifizierten Code austauschen muss?


    Der originale Code in der Variablen acre_sys_core_fnc_enableRevealAI ist wie folgt aufgebaut:



    Ich nehme also an ich muss zunächst den FrameHandler entfernen via

    Code
    1. [acre_sys_core_monitorAIHandle] call CBA_fnc_removePerFrameHandler;

    Im Anschluss überschreib ich dann die globale Variable acre_sys_core_fnc_enableRevealAI mit meinem eigenen Code. Oder hab ich einen Denkfehler?

    Extrahieren alleine würde ja nicht helfen. Dann müsste man ja noch oben drauf die Funktionalität programmieren, dass via Tastendruck die Funktion aufgerufen wird. Das wäre aber nicht das Hindernis. Problematisch sehe ich dann, dass es gleichzeitig zwei Begrenzer gibt. Den eigenen und den von ACE. Schöner wäre es da den ACE Minspeed rauszunehmen. Sind ACE Entwickler unter uns, die mir die Notwendigkeit von min 10 erklären können oder falls nicht diese beim nächsten Update rausnehmen?

    Ein Blick in die


    \ace_vehicles\z\ace\addons\vehicles\functions\fnc_speedLimiter.sqf


    zeigt in Zeile 31 den Befehl, welcher es nicht möglich macht unterhalb von 10 km/h zu limitieren:


    private _maxSpeed = speed _vehicle max 10;


    Da stellt sich mir die Frage, warum haben die ACE Entwickler diese Zeile reingepackt? Was ist daran so schlimm bei z. B. 6 km/h zu limitieren?

    Hallo zusammen,


    kann mir jemand einen Mod empfehlen, mit welchem man beliebige Geschwindigkeiten wie bei einem Tempomat festlegen kann mit einer Taste? Es gibt einen Begrenzer (weiß grad nicht in welchem Mod der drin steckt) der aber erst ab ca. 20/30 kmh funktioniert. Speziell interessiert bin ich an einem Tempomat/Begrenzer der für Schrittgeschwindigkeit geeignet ist. Einsatzzweck: Panzergrenadiere. Synchrone Geschwindigkeit von Fahrzeug von abgesessenen Teilen soll erzielt werden.


    Danke und Gruß,
    Schmitt

    Falls du mit den Macros nichts anfangen kannst, kopier dir die compilierte Version ingame in den Zwischenspeicher.

    Da ich es in der Tat sehr mühsam finde, die Macros in lesbaren Code umzuwandeln (sofern ich mich erinnern kann muss ich dazu gedanklich zwischen der HPP Datei und dem makro-basierten Code hin und her wechseln bis ich die Makros entschlüsselt habe) würde ich gern deinem Tipp folgen.


    Wie kann ich die kompilierte Version ingame in den Zwischenspeicher kopieren? Code in eine globale Variable packen und dann über Debug Konsole auslesen in etwas so


    meineglobalevariable = { [QGVAR(onRevealUnit), [acre_player, _curUnit, ACRE_REVEAL_AMOUNT ] ] call CALLSTACK(CBA_fnc_globalEvent); };


    ? Oder was meinst du?