Server-seitige Mod mit .sqe Dateien erstellen

  • Multiplayer

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

  • Server-seitige Mod mit .sqe Dateien erstellen

    Guten Tag Community,

    Ich habe ein Problem eine Server-seitige Mod, mit Compositionen im .sqe Dateiformat, zu erstellen bzw. in meine MP Mission zu laden.

    Ich nutze für meine Mission das Eden Composition Spawning Script von Larrow. Hierbei werden Compositionen die man im Eden-Editor abgespeichert hat, für die Erstellung in Missionen, wieder genutzt. In meiner Mission wird diese Variante bis jetzt wie in Larrows Anweisung genutzt. Die .sqe Compositions-Dateien werden in einen Ordner, in meine Mission gepackt und in einer .cfg Datei definiert. In dieser .cfg Datei befinden sich die verschiedenen Klassennamen der Compositionen. Die .cfg Datei wird dann über die description.ext abgerufen.

    Da die .sqe Dateien etwas Größer seien können (viele verschiedene Compositionen), möchte ich diese Dateien gerne nur auf den Server ablegen, somit muss nicht jeder Client unnötig diese Dateien mitladen (Missions-Datei wird viel kleiner).


    Nun ist mein Gedanke dass ich die .sqe Dateien, unter den Klassennamen die ich im Mod festgelegt habe, wieder in der Mission abrufen kann.

    Ich habe schon mehrere Versuche unternommen, doch noch kein Ergebnis erreicht.
    hier mal mein letzter Versuch die Datei ist Angehängt.


    Ich hoffe mir kann jemand bei diesem Problem helfen. Danke im voraus.

    mfg MBMC
    Dateien
    • @MBMCserver.zip

      (22,98 kB, 15 mal heruntergeladen, zuletzt: )
  • Die Composition werden in der Mission, über den definierten Klassenname, durch eine Function des Scripts von Larrow aufgerufen.

    Quellcode

    1. _comp = ["xy_Stellung", _position, [0, 0, 0], (random 360)] call LARs_fnc_spawnComp;
    hierbei ist "xy_Stellung" der Klassenname einer Composition.


    Hier noch die Function:

    Quellcode

    1. //Entry function - calls function to spawn composition and handles composition references
    2. //Composition spawning is designed to be used via the server
    3. //If we are not the server exit with error
    4. if !( isServer ) exitWith {
    5. "LARs_fnc_spawnComp must be called on the server" call BIS_fnc_error;
    6. objNull
    7. };
    8. private[ "_objects", "_index", "_compReference" ];
    9. params[ "_compName" ];
    10. //If the data structure for spawned compositions is Nil then we are spawning a comp for the first time
    11. if ( isNil "LARs_spawnedCompositions" ) then {
    12. //Initialise data structure array
    13. LARs_spawnedCompositions = [];
    14. };
    15. //Call function to spawn composition
    16. _objects = _this call LARs_fnc_createComp;
    17. //For each of the objects returned that the composition spawned
    18. {
    19. //Some index will be blank as objects are placed in the array according to their Eden ID
    20. //If it is not blank
    21. if !( isNil "_x" ) then {
    22. //Set the index as [ Eden ID, OBJECT ]
    23. _objects set [ _forEachIndex, [ _forEachIndex, _x ] ];
    24. }else{
    25. //Otherwise fill it with null
    26. _objects set [ _forEachIndex, objNull ];
    27. };
    28. }forEach _objects;
    29. //Remove all null elements from the objects array
    30. _objects = _objects - [ objNull ];
    31. //Find a blank index in the data structure to store a reference to the spawned composition
    32. _index = {
    33. if ( isNil "_x" ) exitWith { _forEachIndex };
    34. }forEach LARs_spawnedCompositions;
    35. //If we dont have a blank index
    36. if ( isNil "_index" ) then {
    37. //Format a reference STRING for this composition using its name and index in the data structure
    38. _compReference = format[ "%1_%2", _compName, count LARs_spawnedCompositions ];
    39. //Add it to the end of the data structure as an array of [ reference name, objects spawned ]
    40. _nul = LARs_spawnedCompositions pushBack [ _compReference, _objects ];
    41. }else{
    42. //Format a reference STRING for this composition using its name and index in the data structure
    43. _compReference = format[ "%1_%2", _compName, _index ];
    44. //Insert it into the blank position as an array of [ reference name, objects spawned ]
    45. LARs_spawnedCompositions set [ _index, [ _compReference, _objects ] ];
    46. };
    47. //Return reference to user
    48. _compReference
    Alles anzeigen
    mit meiner Server-seitigen Mod versuche ich das ganze genauso.
  • In fn_createComp.sqf ersetze Zeile 32
    private _compCfg = missionConfigFile >> "CfgCompositions" >> _compName;
    mit
    private _compCfg = configFile >> "CfgCompositions" >> _compName;

    Der ließt die Kompositionen nur aus der Missionskonfig und nicht der Addonkonfig. Schade, dass das ganze nur auf Dropbox hochgeladen wurde und nicht Github. Der Autor ist außerdem das beste Beispiel, wie man seinen Code NICHT kommentiert.
  • Super Vielen Dank erstmal für die Hilfe. Das habe ich total übersehen. Aber es muss etwas mit der Mod selbst (die ich erstellt habe) noch nicht stimmen, denn wenn ich es teste ob es die Klasse gibt, kommt bei mir immer "false" raus.

    für den Test nutze ich im MP-Editor, wenn die Mod mit aktiviert ist:


    Quellcode

    1. test = isClass (configFile >> "cfgPatches" >> "xy_stellung1")
    ich vermute das ich in der config.cpp irgendwas falsch habe. Die Mod an sich ist im Hauptmenü aktiviert und wird angezeigt.
  • Ja, in deinem Konfigpatch fehlt CfgPatches. Damit wird er nicht geladen, sondern komplett ignoriert. Im Hauptmenü wird nur die mod.cpp angezeigt. Das bedeutet noch nicht, dass in deiner Mod ein einziger korrekt geladener Konfigpatch ist.

    Quellcode

    1. class CfgPatches {
    2. class MBMC_Compositions {
    3. requiredAddons[] = {};
    4. requiredVersion = 0.1;
    5. units[] = {};
    6. weapons[] = {};
    7. };
    8. };

    Andererseits kann BIS_AddonInfo.hpp komplett gelöscht werden. Das ist Blödsinn.

    Ich würde zum Testen, ob Klassen existieren den Ingame Konfigbrowser benutzen. xy_stellung1 ist btw. in CfgCompositions, nicht CfgPatches. CfgCompositions ist ein schrecklicher Name für das, denn da die Klasse keinen Tag hat, sieht es so aus, als ob sie zum Basisspiel gehört. Sehr konfus gemacht, und sowas kann auch zu Fehlern führen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von commy2 ()

  • Vielen Dank commy2 für die schnelle, präzise und super erklärte Hilfe. Es ist genau an diese 2 Punkten gelegen. Nun funktioniert alles.


    Für alle zusammengefasst:

    Quellcode

    1. //In fn_createComp.sqf ersetze Zeile 32
    2. private _compCfg = missionConfigFile >> "CfgCompositions" >> _compName;
    3. //mit
    4. private _compCfg = configFile >> "CfgCompositions" >> _compName;
    config.cpp der Server-seitigen Mod


    Quellcode

    1. class CfgPatches {
    2. class MBMC_serverCompositions {
    3. requiredAddons[] = {};
    4. requiredVersion = 0.1;
    5. units[] = {};
    6. weapons[] = {};
    7. };
    8. };
    9. class MBMC_compositions {
    10. class xy_intel_Kaserne1 {
    11. #include "compositions\xy_intel_Kaserne1.sqe"
    12. };
    13. class xy_intel_milBuero1 {
    14. #include "compositions\xy_intel_milBuero1.sqe"
    15. };
    16. };
    Alles anzeigen

    und wer einen Linuxserver besitzt nicht vergessen groß/klein-Schreibung beachten, sowie ACE Nutzer die Check PBO nutzen, die Server-seitig Mod in die Whitelist eintragen.

    mfg MBMC