mod.lua und strings.lua - Erklärung und Inhalt

  • Anhand von Beispielen werden alle benötigten und optionalen Einträge für die mod.lua und strings.lua Dateien in diesem Artikel erklärt.
    The English version can be found here: mod.lua and strings.lua - Explaining the content and requirements

    Offizielles Mod Format von Urban Games (mod.lua)


    Die Basis für die mod.lua, welche für jeden Mod benötigt wird und im Hauptverzeichnis des Mods liegen muss:

    Source Code: mod.lua

    1. function data()
    2. return {
    3. info = {
    4. name = _("Sample mod"), -- Name des Mods
    5. description = _("modDesc"), -- optional, Beschreibung
    6. minorVersion = 0, -- minorVersion (integer)
    7. severityAdd = "WARNING", -- NONE, WARNING, CRITICAL
    8. severityRemove = "CRITICAL", --
    9. visible = true, -- optional, standard: true
    10. -- wenn "false", wird der Mod nicht zur Auswahl angezeigt (zB, wenn er automatisch mit einem Missions-Spielstand geladen wird)
    11. },
    12. -- options = ..
    13. -- runFn = ..
    14. -- checkActiveFn = ..
    15. }
    16. end
    Display All


    Zusätzliche Parameter für Mod Manager (TPFMM)


    Die folgenden Parameter können angegeben werden, um erweiterte Informationen zur Verfügung zu stellen, zB um eine Webseite oder den Ersteller der Mod zu verknüpfen.
    Basisinformationen

    Source Code

    1. tfnetId = 0, -- optional, transportfever.net id
    2. steamId = 0, -- optional, steam workshop id
    3. url = "https://transportfever.net" -- optional, URL zur Webseite des Mods


    Autoren

    Source Code

    1. authors = { -- optional, Informationen über die Autoren
    2. { -- Angaben über einen oder mehrere Autoren
    3. name = "Author 1", -- Autor Name
    4. role = "CREATOR", -- CREATOR, CO_CREATOR, TESTER, BASED_ON, OTHER
    5. tfnetId = 00000, -- optional, id vom Autor auf transportfever.net
    6. steamId = 0000, -- optional, steam id
    7. }, -- optional, weiter Autoren, durch Komma getrennt
    8. },


    Tags

    Source Code

    1. tags = { "tag1", "tag2", "tag3" }, --optional, Liste von Tags (strings)


    Abhängigkeiten
    Abhängigkeiten zu anderen Mods können angegeben werden. Das Spiel wertet diese Informationen nicht aus, aber Mod-Manager können damit sicher stellen, dass alle benötigten Mods installiert sind.
    Um eine Abhängigkeit zu einem anderen Mod zu definieren, kann einfach der Ordnername benötigten Mods in die Liste aufgenommen werden:

    Source Code

    1. dependencies = { "other_mod_1", "another_mod_1", "something_else_1" },



    Zusätzliche Parameter für CommonAPI


    Es können erweiterte Informationen im info Bereich übergeben werden:

    modid
    Damit Mods auch aus einer Steam Quelle erkannt werden können , kann hier die originale modid übergeben werden. Bitte die Schreibweise beachten!

    Source Code: mod.lua

    1. modid = "beispiel_1"



    requiredMods (ab Version 2019)
    Eine Liste mit detaillierten Informationen zu Abhängigkeiten, im Gegensatz zu dependencies können hier zu jedem Mod optional modId, steamId (WorkshopID), tfnetId (Webdisk Eintrag), url angeben werden.
    Es muss mindestens eine modId oder steamId angeben werden.
    CommonAPI überprüft die Angabe und gibt eine Warnung in der stdout.txt aus, sollte die Mod nicht geladen sein. Darüber hinaus gibt CommonAPI automatisch Download URLs aus

    Source Code: mod.lua

    1. info = {
    2. ...
    3. requiredMods = { -- optional, Informationen über geladene Mods
    4. { -- Angaben über einen oder mehrere Mods
    5. modId= "example_1", -- optional, modid
    6. steamId = 0000, -- optional, steam workshop id
    7. tfnetId = 0000, -- optional, id der Webdisk auf transportfever.net
    8. url = "http://", -- optional, url zum Download der Mod
    9. minMinorVersion = 0 -- optional, minimale minorVersion
    10. }, -- optional, weitere Mods, durch Komma getrennt
    11. },
    12. ...
    Display All




    Übersetzungen (strings.lua)


    Alle Strings, die der Übersetzungsfunktion _("") übergeben werden, werden mithilfe der strings.lua Datei übersetzt:

    Source Code

    1. function data()
    2. return {
    3. de = {
    4. ["my mod"] = "Mein Mod", -- Alle vorkommen von _("my mod") werden
    5. -- mit dem Text "mein Mod" ersetzt,
    6. -- falls die ausgewählte Sprache deutsch ist ("de")
    7. ["the description"] = "Beschreibung",
    8. -- _("the description") ⇒ "Beschreibung"
    9. },
    10. }
    11. end
    Display All


    Beachte:
    Wenn eine Variable an die _() Funktion übergeben wird, wird der Inhalt der Variable, nicht der Name der Variable selbst an die Funktion übergeben!
    In Kombination mit globalen Variablennamen in LUA kann dies dazu führen, dass sich Variablen von unterschiedlichen Dateien oder sogar Mods gegenseitig überschreiben. In einem Beta-Patch von Transport Fever konnte dieses Scenario beobachtet werden. Viele Mods nutzten die selbe Variable, um strings mit der _() Funktion zu übersetzen - allerdings hat ein Mods bereits den Text in der Variable für alle anderen Mods überschrieben - so kann keine korrekte Übersetzung für den eigenen Mods gefunden werden.
    Zwar wird dieses Verhalten in TPF mittleweile aktiv verhindert - allerdings rät Urban Games dazu, in Mods nur lokale Variablen (local) zu Benutzen.
    Ich empfehle zusätzlich, immer mit Strings statt Variablen zu arbeiten.


    Weitere Informationen zur strings.lua wurden hier von @Tom zusammen getragen.

    Beispiel Dateien


    Sehr einfaches Beispiel eines Mods mit einem Autor

    Source Code: mod.lua

    1. function data()
    2. return {
    3. info = {
    4. name = _("name"),
    5. description = _("desc"),
    6. minorVersion = 2,
    7. severityAdd = "NONE"
    8. severityRemove = "CRITICAL"
    9. authors = {
    10. {
    11. name = "John Doe",
    12. role = "CREATOR"
    13. },
    14. },
    15. tags = {"train", "multiple_unit"},
    16. },
    17. }
    18. end
    Display All





    Ein "Repaint"-Mod, welcher den Mod aus dem ersten Beispiel als Abhängigkeit benötigt

    Source Code: mod.lua

    1. function data()
    2. return {
    3. info = {
    4. name = _("name"),
    5. description = _("desc"),
    6. minorVersion = 1,
    7. severityAdd = "NONE"
    8. severityRemove = "CRITICAL",
    9. authors = {
    10. {
    11. name = "jane",
    12. role = "CREATOR",
    13. tfnetId = 00000,
    14. steamId = 0000,
    15. text = "text",
    16. },
    17. {
    18. name = "John Doe",
    19. role = "BASED_ON",
    20. tfnetID = 1,
    21. },
    22. },
    23. dependencies = { "base_mod_1" },
    24. tags = {"repaint", "train", "multiple_unit"},
    25. },
    26. }
    27. end
    Display All



    Source Code: strings.lua

    1. function data()
    2. return {
    3. en = {
    4. ["name"] = "My Repaint Mod",
    5. ["desc"] = "My first Repaint",
    6. },
    7. de = {
    8. ["name"] = "Mein Repaint Mod",
    9. ["desc"] = "Mein erstes Repaint.",
    10. },
    11. }
    12. end
    Display All

    7,176 times viewed

Comments 2

  • dampf19 -

    Welche Begriffe können denn als 'Tag' angegeben werden? Ich habe gemerkt dass Begriffe wie "europe" oder "tram" in der Modvorwahl des Spiels angezeigt werden, nicht jedoch selbst gewählte Begriffe wie "Dampflok" oder "DB". Eigentlich wollte ich meine Modvorwahl übersichtlicher machen.
    Offensichtlich weis das auch die Hälfte der Modder nicht, dass da keine beliebigen Begriffe angegeben werden dürfen, weshalb bei der Hälfte der Modder die Spalte "Tag" in der Modvorwahl leer ist. Bei der anderen Hälfte steht zum großen Teil nur "europe" was als SortierKriterium wenig hilfreich ist. Daher werde ich wohl mal die Mod.lua aller meiner Mods überarbeiten müssen um in Zukunft Mods leichter finden zu können.

    Nachtrag: Ich glaube ich habe inzwischen was gefunden - allerdings unter TF bei Info.lua und nicht unter TPF.
    Gilt die Liste ohne Änderung auch für TPF? Ist der Inhalt von Info.lua und mod.lua identisch?

    • Xanos -

      Die Liste aus Train Fever Zeiten wurde von mir entworfen und im TFMM entsprechend übersetzt. Leider hält sich (genau wie bei TPF jezt) niemand an solche Listen ;)
      50 Stunden modden aber keine 5 Minuten schauen, dass die Info-Dateien für das Spiel auch korrekt sind - so ist das nun ein mal ;)

      Die Liste der tags für TPF entspricht genau den Tags, die man im Workshop zum filtern von Mods findet.