Mod Einstellungen (Modder)

Willkommen in der Transport Fever Community

Wir begrüßen euch in der Fan-Community zu den Spielen Transport Fever und Train Fever, den Wirtschaftssimulatoren von Urban Games. Die Community steht euch kostenlos zur Verfügung damit ihr euch über das Spiel austauschen und informieren könnt. Wir pflegen hier einen freundlichen und sachlichen Umgang untereinander und unser Team steht euch in allen Fragen gerne beiseite.

 

Die Registrierung und Nutzung ist selbstverständlich kostenlos.

 

Wir wünschen euch viel Spaß und hoffen auf rege Beteiligung.

Das Team der Transport-Fever Community


Sie betrachten gerade eine ältere Version des Eintrags. Klicken Sie hier, um zur aktuellen Version zu gelangen.

  • Ein kurzes Tutorial zur Verwendung der neuen "Mod Einstellungen" im TPFMM.

    [Blockierte Grafik: https://ftp.train-fever.net/flaggen/gb.png] The English version can be found here: Settings for Mods


    1 Einleitung


    Mit hat es schon öfter gestört, dass man, wegen kleiner Anpassungen an die Vorlieben der Nutzer, zwei nur leicht verschiedene Mods oder einen Hauptmod mit Zusatzmods anbieten musste. Meine Lösung war ein einfaches Lua Script (settings.lua), das im Ordner des Mods liegt und alle Optionen in der Form Option = Wert enthält:

    Lua: settings.lua
    return {
      option1 = true,
      option2 = 4,
    }

    Diese Datei kann dann entweder direkt ausgelesen werden oder man nutzt die dafür vorgesehenen Funktionen meines ModUtil Scripts (einfach den Inhalt des angehängten Archivs in den Mod Ordner kopieren). Erstgenannte Variante ist etwas komplizierter und nur zu empfehlen, wenn man sich mit Lua auskennt. Daher werde ich hier auch nur die Variante mit dem ModUtil Script vorstellen.


    2 Optionen definieren


    Um den Mod Nutzern die Mühe zu sparen, die settings.lua selbst mit einem Texteditor zu bearbeiten, war @Xanos so freundlich dem TPFMM ein weiteres Fenster zu spendieren (eines großes Danke dafür :thumbup: ), in dem die Optionen grafisch dargestellt und bearbeitet werden können. Natürlich kann der TPFMM das aber nur leisten, wenn er die möglichen Optionen und deren erlaubte Werte kennt.
    Wir haben uns dazu entschlossen, die dafür nötigen Informationen aus der mod.lua auszulesen, dazu müssen sie dort aber erst definiert werden. Das geht über den Eintrag settings, zusätzlich zum Eintrag info, wo man beliebig viele Optionen definieren kann:

    Lua: mod.lua
    function data()
        return {
            info = { 
                -- ...
            },
            settings = { -- optionen },
        }
    end

    Jede Option wird dann durch verschiedene Parameter bestimmt:

    Die ID der Option sollte innerhalb des Mods einzigartig sein. Anders gesagt, wird immer nur die zuletzt definierte Option, mit dieser ID, verwendet.
    Sofern nicht anders angegeben, stellen bei den optionalen Parametern, die in diesem Bespiel genutzten Werte, auch die Standarwerte dar, falls dieser Parameter fehlt.


    Wird das ModUtil Script verwendet, ist es sinnvoll die Optionen erst in einer Variable zu speichern damit diese dann sowohl für den TPFMM als auch für das Script verwendet werden kann:

    Mit der Zeile modUtil.userSettings.create("mod_id", settings_def) wird dem Script mitgeteilt, welche Optionen erwartet werden. Außerdem werden automatisch die settings.lua des Mods ausgelesen (sofern vorhanden) und die dort angegeben Werte für die spätere Verwendung gespeichert. Die "mod_id" wird intern genutzt, um zu unterscheiden, von welchem Mod die Einstellungen stammen. Zwei unterschiedliche Mods sollten also nicht die gleiche ID haben. Meiner Meinung nach bietet sich daher der Ordnername des Mods an.


    3 Optionen auslesen


    Nachdem das Script die settings.lua ausgelesen hat, kann jederzeit auf die Werte der Optionen zugegriffen werden und zwar in jeder beliebigen Scriptdatei (runFn der mod.lua, .con, .mdl, .msh, etc.). Wenn man direkt nach der Definition darauf zugreifen möchte (also noch in der runFn der mod.lua), empfehle ich folgenden Code:

    Lua
    local options = modUtil.userSettings.get("mod_id")

    In allen anderen Dateien ist folgender Code sinnvoller (damit man nicht jedes mal das ModUtil Script einbinden muss):

    Lua
    if merk_modutil and merk_modutil[1] then
        local options = merk_modutil[1].userSettings.get("mod_id")
        -- Einstellungen verarbeiten
    end

    "mod_id" bestimmt in beiden Fällen von welchem Mod man die Einstellungen haben möchte. Im Normalfall wird es also die gleiche ID wie bei "create" sein, man kann aber auch die Einstellungen eines anderen Mods auslesen (z.B. wenn der eigene diesen nur ergänzt und daher auch zum Teil die gleichen Optionen nutzt). Der Zugriff auf die einzelnen Optionen funktioniert ebenfalls in beiden Fällen identisch, z.B. mit options.option1.

Teilen

Kommentare 1

  • Wie hier schon geschrieben habe (CommonAPI2), wäre es nützlich, wenn Änderungen von Mod Einstellungen über die GUI der CommonApi im laufenden Spiel direkt von den Mods erfasst werden könnten. Dazu ist wahrscheinlich eine Art Interface notwendig.


    Konzeptidee:

    Momentan werden ja die Einstellungen einmal beim Laden des Spiels von settings.lua eingelesen und gespeichert. Da manche Mods möglicherweise sehr oft die Einstellungen mit local options = merk_modutil[1].userSettings.get("mod_id") aufrufen, wäre es wahrscheinlich ineffizient, jedes Mal die Datei auszulesen. Daher sollte die CommonApi beim Ändern eines Wertes dieses modutil informieren, sodass die geänderten Einstellungen erkannt und aktualisiert werden. Rufen Mods danach wieder ihre Einstellungen ab, erhalten sie die neuen Werte.