Beiträge von Zumi

    Da gibt es viele Varianten. Ich liste jetzt mal nach persönlicher Präferenz drei auf:


    1. Du registrierst einen Chat-Befehl-Handler mit CBA und lässt dir die Infos in gewünschter Form ausspucken

    2. Du loggst es alle X Sekunden in die Server-Console

    3. Du erstellst Marker im Editor und benennst sie, ähnlich wie bei KP-Liberation und lässt alle 30 Sekunden beispielsweise mittels cba_fnc_waitAndExecute die Marker aktualisieren mit den gewünschten Informationen, also serverseitig ein Skript mit:


    Code
    1. deinMarker setMarkerText format ["%1 Blufor-Gruppen werden von %2 gesteuert", count blufor_groups, HC_1];

    Das Skript rufst du dann z. Bsp alle 30 Sekunden auf. Alle drei erfordern Code und sind unterschiedlich informativ und sichtbar.

    Also ich dachte, du willst ja wissen, welche Gruppe jeweils von einem HC gerechnet wird, oder? Dann bringt dir das Liberation-Teil nichts. Es war mehr als Überlegungs-Stütze gedacht, im Sinne von: Du musst auf den jeweiligen Clients etwas zählen lassen, weil der Command "local" sonst keinen Sinn macht.

    Alternativ kannst du auch direkt abfragen, welcher Client ne Gruppe besitzt mit:
    groupOwner - Bohemia Interactive Community

    Die Funktion von der Liberation da gibt jeweils die lokalen Einheiten gezählt als Nummer aus. Das Skript wird jeweils auf dem Server und auf den jeweiligen Headless Clients ausgeführt vermutlich. Je nach Inputvariable zählt es dann die vom Server oder HC z. Bsp. Mein Post danach wäre die bessere Variante.

    Also wenn dein HC beispielsweise HC_1 heisst, kannst du


    Code
    1. Fnc_Was_steuert_der_hc = {
    2.     blufor_groups = allGroups select {(local _x) && (side _x == west)};
    3.     publicVariableServer "blufor_groups";
    4. };
    5. [] remoteExecCall ["Fnc_Was_steuert_der_hc", HC_1];

    ausführen. Danach findest du es raus. Bedenke, dass die Variable nur dem Server und dem HC_1 bekannt ist. Ist schonender, als wenn du die Info allen Clients sendest.

    Also du könntest theoretisch den folgenden Code mit remoteExecCall auf dem Headless Client deiner Wahl ausführen:


    Code
    1. blufor_groups = allGroups select {(local _x) && (side _x == west)};
    2. publicVariableServer "blufor_groups";  

    Alle Blufor Gruppen auf dem jeweiligen Client würden dir dann als globale Variable auf dem Server zur Verfügung stehen.

    Abend


    Ich bin auf Hilfe angewiesen, weswegen ich es hier mal versuche. Ist jemand des Terrainbuildings kundig?

    Ich wollte einen zweiten Anlauf nehmen und mich in den Karten-Bau einfuchsen.
    Ich halte mich dabei an dieses Tutorial:

    arma3:terrain:ultimate-terrain-tutorial [PMC Editing Wiki]
    Ich habe alle Schritte unternommen bis zum erstellen eines Mapframes. Ich komme aber schon beim Mapframe nicht weiter.


    Die Problemlage ist folgende:

    - Bei den mapframe properties müssen offenbar noch layers generiert werden (bild)? Das ist im Tutorial nicht so beschrieben.

    - Die Heightmap (weder im .asc noch im .xyz Format) lässt sich nicht öffnen bzw. es wird dann einfach schlicht nichts im terrainbuilder angezeigt (ohne Fehlermeldung..)


    Hat einer eine Idee? Wäre froh um Hilfe!

    Zwischenbilanz des Publicservers der Gruppe Keiler

    • Der Einsatz in Reshmaan dauert bereits einen Monat
    • Es wurden bisher drei kleine Ausbildungsevents abgehalten
    • Wir kommen teilweise Abends zwischen 18 und 22 Uhr auf bis zu 20 Spieler, auch unter der Woche
    • Der Server läuft seit 84 Restarts durch
    • Über 4000 Feinde wurden bekämpft
    • Über 200 eigene sind gefallen o7
    • 75 Fahrzeuge wurden bisher in Dienst gestellt. Einige davon wurden zerstört
    • Über 50 Zivilisten mussten ihr Leben im Krieg lassen
    • Über 20 Unabhängige wurden Opfer von Angriffen
    • Es wurden 49 zivile Gebäude beschädigt
    • Es wurden 21 zivile Gebäude zerstört

    //Racks
    [_fhz, {}] call acre_api_fnc_initVehicleRacks;

    Das hier ist obsolet, weil du das hier bereits tust:


    [_fhz, ["ACRE_VRC64", "Upper Dash", "ComA", false, ["Crew"], [], "ACRE_PRC77", [], ["intercom_1"]], true, {}] call acre_api_fnc_addRackToVehicle;


    private _racks = [_fhz] call acre_api_fnc_getVehicleRacks;
    [_fhz, (_racks select 0)] call acre_api_fnc_removeRackFromVehicle;

    Das wird nicht funktionieren. Versuche es mal mit dem CBA-Event.

    Hatte nen Typo drin beim CBA-event in der Eile...
    Das hier teste ich jetzt selber.


    Code
    1. {
    2.     ["acre_sys_rack_removeVehicleRacks", [deincoolerfahrzeugname, _x], deincoolerfahrzeugname] call cba_fnc_targetEvent;
    3. } foreach ([deincoolerfahrzeugname] call acre_sys_rack_fnc_getVehicleRacks);

    Dieser Block hier in der API Funktion erklärt es:

    Und mit dem CBA Event wird dann eben das hier gemacht:

    Code
    1. [QGVAR(addVehicleRacks), {
    2. params ["_vehicle", "_rackClassname", "_displayName", "_rackName", "_rackShortName", "_isRadioRemovable", "_allowed", "_disabled", "_mountedRadio", "_components", "_intercoms"];
    3. [_vehicle, _rackClassname, _displayName, _rackName, _rackShortName, _isRadioRemovable, _allowed, _disabled, _mountedRadio, _components, _intercoms] call FUNC(addRack);
    4. // Give some time for the racks to initialise properly
    5. [{
    6. [_this select 0] call FUNC(configureRackIntercom);
    7. }, [_vehicle], 0.5] call CBA_fnc_waitAndExecute;
    8. }] call CBA_fnc_addEventHandler;

    Ich hatte jetzt noch ein wenig herumprobiert und es scheint als ob ACRE beim ersten Aufsitzen das Rack des Fahrzeuges initialisiert. Führe ich nämlich das Script nach dem ersten Aufsitzen aus, wird die 117 Funke entfernt und ich habe 2x 77er an Bord.

    Meine aktuelle Lösung des Problems ist: Ich lasse die Crew einfach im Fahrzeug bei Missionsstart spawnen und führe das Script mit kurzer Verzögerung aus. Wenn jemand einen eleganteren Weg hat, dann gerne her damit!

    Soweit ich das beurteilen kann, fügt Acre die Racks nach 0.5 Sekunden ungefähr dem Fahrzeug hinzu. Initialisiert werden sie, wie du richtig sagtest, nachdem mit cba_fnc_waitUntilandExecute der erste Spieler im Fahrzeug gefunden wurde bzw. er defaultet es auf den ersten Spieler aufm Server überhaupt.

    Ich würde mit dem CBA-Event von acre_sys_racks hier arbeiten:

    Also einfach bevor du die Funken per Script addest:

    Code
    1. {
    2. ["acre_sys_rack_removeVehicleRacks", [deincoolerfahrzeugname, _x], deincoolerfahrzeugname] call cba_fnc_targetEvent;
    3. } foreach ([deincoolerfahrzeugname] call acre_sys_rack_fnc_getVehicleRacks);

    Ja richtig, das this impliziert das fälschlicherweise. Ersetze this mit dem Variablennamen und führe das irgendwo aus. Kannst in der initServer ohne remoteExecCall ausführen zum Beispiel. Was ich vermute ist eben erstens, dass die Funktion nicht serverseitig ausgeführt wird und zweitens, dass, weil er den Parameter nach der intercom mit "false" rübergibt statt mit true, das Rack nicht initialisiert wird.

    Du musst die Funktion erstens auf dem Server callen, zweitens musst du die Initialisierung forcieren.

    EDIT

    Also z. Bsp. in der InitServer-sqf:


    Code
    1. [meincoolesfahrzeug, ["ACRE_VRC64", "Upper Dash", "ComA", false, ["Crew"], [], "ACRE_PRC77", [], ["intercom_1"]], true, {}] call acre_api_fnc_addRackToVehicle;
    2. [meincoolesfahrzeug, ["ACRE_VRC64", "Lower Dash", "ComB", false, ["Crew"], [], "ACRE_PRC77", [], ["intercom_1"]], true, {}] call acre_api_fnc_addRackToVehicle;