Probleme mit add- & holdActions

  • Multiplayer

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

  • Probleme mit add- & holdActions

    Ich möchte einige add- & holdActions automatisch bei Missionsstart an offene Laptops packen.
    Doch leider sind sie manchmal doppelt vorhanden oder nicht JIP Kompatibel.

    Mein Ansatz schaut wie folgt aus:

    Quellcode: initServer.sqf

    1. ["ThingX", "initPost", {["ThingX", _this select 0] call iV_fnc_initPost}, true, [], true] call CBA_fnc_addClassEventHandler;

    Quellcode: fn_initPost.sqf

    1. // VARIABLES
    2. params ["_type", "_target"];
    3. // SWITCH CASE
    4. switch _type do {
    5. case "ThingX": {
    6. ["Laptop", _target] call iV_fnc_addActions;
    7. };
    8. };
    Alles anzeigen

    Quellcode: fn_addActions.sqf

    1. // VARIABLES
    2. params ["_type", "_target"];
    3. // SWITCH CASE
    4. switch _type do {
    5. case "Laptop": {
    6. // ADD VEHICLE SERVICE
    7. if (typeOf _target == "Land_Laptop_device_F") exitWith {
    8. ["vehicleService", _target] call iV_fnc_holdAction;
    9. };
    10. // ADD OPREP, LICENSE- & RESOURCES MANAGER
    11. if (typeOf _target == "Land_Laptop_unfolded_F") exitWith {
    12. ["OPREP", _target] call iV_fnc_addAction;
    13. ["Resources", _target] call iV_fnc_addAction;
    14. ["Licenses", _target] call iV_fnc_addAction;
    15. };
    16. };
    Alles anzeigen

    Quellcode: fn_addAction.sqf

    1. // RUN ON DEDICATED SERVER OR PLAYER HOST
    2. if (!isServer) exitWith {};
    3. // VARIABLES
    4. params ["_type", "_object"];
    5. // SWITCH CASE
    6. switch _type do {
    7. case "OPREP": {
    8. [_object, ["Operations Report", {["PlayersReport"] call iV_fnc_displayCreate}, nil, -2, true, true, "", "true", 4]] remoteExec ["addAction", [0, -2] select isDedicated, _object];
    9. };
    10. case "Resources": {
    11. [_object, ["Resources Manager", {["ResourcesManager"] call iV_fnc_displayCreate}, nil, -3, true, true, "", "true", 4]] remoteExec ["addAction", [0, -2] select isDedicated, _object];
    12. };
    13. case "Licenses": {
    14. [_object, ["License Manager", {["Licenses"] call iV_fnc_displayCreate}, nil, -4, true, true, "", "true", 4]] remoteExec ["addAction", [0, -2] select isDedicated, _object];
    15. };
    16. };
    Alles anzeigen



    Hat vlt irgend jemand eine Idee, woran das liegen könnte?
    Wenn ich es ganz normal in die init-Zeile im 3den-Editor schreibe, funktioniert alles problemlos.
    Würde es aber gerne via Code automatisch hinzufügen.
  • Das sieht mir alles unnötig kompliziert aus. Ich würde es auf das hier zusammenstauchen:

    Quellcode

    1. // init.sqf
    2. ["Land_Laptop_unfolded_F", "InitPost", {
    3. params ["_object"];
    4. _object addAction ["Operations Report", {["PlayersReport"] call iV_fnc_displayCreate}, nil, -2, true, true, "", "true", 4];
    5. _object addAction ["Resources Manager", {["ResourcesManager"] call iV_fnc_displayCreate}, nil, -3, true, true, "", "true", 4];
    6. _object addAction ["License Manager", {["Licenses"] call iV_fnc_displayCreate}, nil, -4, true, true, "", "true", 4];
    7. }, nil, nil, true] call CBA_fnc_addClassEventHandler;
    Gleich ein Tip, das Statement der User Actions wird im Scheduler aufgerufen. Du benutzt hier eine Funktion namens "displayCreate", also wird es wohl UI sein. Es gibt nichts schlimmeres als eine UI, die sich erst langsam aufbaut. Wenn diese Funktion mehr ist als nur ein createDialog, sondern auch noch Controls erstellt und verschiebt etc, dann würde ich das auf jeden Fall in ein isNil packen.

    Mehr Mut zum Löschen.
  • Es ist so kompliziert, da ich nicht nur die Dialoge auf den Laptops damit erstelle. Auch Loot in Schränken und Ausrüstungskisten oder Funktionen auf den Huron Containern (z.B. Feldlazarett errichten) sind mit im ThingX-Case eingebunden. Habe jetzt nur das Wesentliche zu den Laptops geschrieben. Möchte nach Möglichkeit immer mit wenigen Funktionen viel erreichen und den Code bestmöglich bündeln. Die Laptops werden aber von mir im 3ditor vorplatziert. Schaue mir deinen Vorschlag aber auf jeden Fall nochmal genauer an.


    fn_displayCreate.sqf:
    Ja es werden neben createDialog auch Controls eingebunden.
    Läuft aber bisher alles ohne Probleme.


    Danke. Bleibe dran.
  • OK. Also nach einigen Versuchen hab ich es nun alles über die init.sqf und ohne remoteExec gelöst. Ich habe es zwar nicht direkt eingebunden, sondern über eine zusätzliche Funktion (Kopiere gerne einfach nur den Functions-Ordner bei neueren Versionen), aber wie es ausschaut läuft es nun. Die von mir vorher verwendete initServer.sqf habe ich nun ganz entfernt. Stattdessen verwende ich isServer um die Inhalte in der init.sqf zu trennen.

    Besten Dank nochmal...