ArmA 3 Workshop Mods auf Server verwalten leicht gemacht.

  • Hiermit präsentiere ich euch ein nettes Script, was ich für euch geschrieben habe um kinderleicht Workshop Mods direkt auf eurem Root Server herunterzuladen und automatisch den gewünschten Modordnername zu vergeben. Es ist also für Repo Verwaltung von Mods, die speziell nur im Workshop verfügbar sind gedacht, um euch ein Mühsamens runter- und hochladen zu ersparen.



    Voraussetzung für dieses batch-Script ist:
    1. Steam Account mit einer Arma 3 Lizenz.
    2. Ein Windows Betriebsystem auf dem das Batch Script ausgeführt werden kann.


    Funktionen des Scripts:
    1. Login in Steam mit euren Zugangsdaten
    2. "DownloadFolder" Festlegung des Zwischenspeichers (Muss vorhanden sein für Steam)
    3. "FinalPath" Festlegung des entgültigen Verzeichnisses wo ihr eure Mods haben wollt.
    4. Festlegung des Ordners der Steamcmd.exe
    5. Auflistung der Mod ID Nummern (Reihenfolge ist wichtig!)
    6. Setzen der Modordnernamen für die oben eingegebenen IDs (Reihenfolge beachten!)
    7. Herunterladen der Mods in gegebener Reihenfolge.
    8. Umbennnen der Ordner in den von euch in 5. angegebenen Ordnernamen
    9. Kopieren der umbenannten Ordner in das FinalPath-Verzeichnis
    10. Löschen der Quellordner (von Steam angelegt)
    11. Löschen einer .acf datei die ein erneutes Herunterladen verhindert.


    Hier ersteinmal der Quellcode. Diesen Kopiert ihr in eine leere .cmd Datei:


    Es ist im Prinzip ganz einfach:
    Benutzername und Passwort eines Steam Accounts verwenden, der ArmA 3 besitzt. Dann nehmt Ihr den Quellcode und passt dort eure eigenen Ordnerpfade bei den SET Befehlen selbst an. Dann könnt ihr eure jeweiligen Workshop IDs setzen. Da könnt ihr einfach soviele IDs hinterlegen wie ihr wollt, beachtet aber die Syntax und die Reihenfolge.
    Alle Befehle, die sich in dem Script hintereinander wiederholen, können kopiert und für weitere Mods verwendet werden. Beachtet bitte hierbei das ihr dort nur die jeweiligen Dinge ändern müsst wie: %MODNAME4% und %MOD4%. Alles andere Entspricht euren Angegebenen Pfaden oder ist notwendig, damit SteamCMD arbeiten kann.


    Der Rest ist denke ich selbst erklärend.


    Ich stehe gerne für Fragen zur Verfügung und wünsche euch viel Spaß mit dem Script und ein angenehmes Verwalten der Workshop Mods für eure Repos.


    Mit freundlichen Grüßen


    Liquidblaze

  • Achja, wenn ihr mir noch einen kleinen Gefallen tun möchtet: Ich freue mich über Feedback, ob alles wie gewünscht funktioniert hat bzw. ob bei euch Probleme aufgetreten sind. Ich habe es bisher nur auf unserem Root Server getestet und dort kam es zu keinen Fehlermeldungen und alles lief.


    Mit freundlichen Grüßen


    LiquidBlaze

  • Moin,


    ich hab zwar das Script nicht getestet aber ein paar Anregungen:


    Anstelle pro Mod die Befehle auszuführen, könnte man das in einer Schleife laufen lassen (das verrringert auch den Aufwand wenn ein neuer Mod hinzu kommt und hält das Script sauber)
    Aktuell sind es pro Mod 5 Befehle (es sei denn ich habe mich verzählt) - bei 5 Mods sind es dann 25 usw. Bei einer Schleife bleiben es 5 Befehle - egal wie viele Mods du hast.



    Und naja Offtopic: Warum Batch und nicht Powershell?

    Cuiusvis hominis est errare, nullius nisi insipientis perseverare in errore.

    Einmal editiert, zuletzt von Yoshi ()

  • Achja, wenn ihr mir noch einen kleinen Gefallen tun möchtet: Ich freue mich über Feedback, ob alles wie gewünscht funktioniert hat bzw. ob bei euch Probleme aufgetreten sind. Ich habe es bisher nur auf unserem Root Server getestet und dort kam es zu keinen Fehlermeldungen und alles lief.


    Mit freundlichen Grüßen


    LiquidBlaze

    Ich werde es am Wochenende testen

  • Eine weitere Anregung:
    Anstatt die Ordner nach dem Download umbenennen und umkopieren wäre es sinnvoller die Ordner per symlink (mklink kommando) in sein Repo zu linken. Das erspart dann auch das alles komplett neu heruntergeladen werden muss, wenn man nur ein Update ziehen will.

  • Das Problem ist: Steam erzwingt einen Downloadordner im Format: \steamapps\workshop\content\10471\173747224
    Der Pfad ist leider automatisch durch Steam beschränkt. Auch die Ordnernamen entsprechen den Workshop IDs weshalb ein umbenennen zwingend notwendig ist. Daher habe ich die automatische Umbenennung unf verschiebung eingebaut. Du kannst natürlich den FinalPath direkt in dein Repo setzen so dass es direkt im richtigen Ordner landet.


    Ich werde mich aber dennoch mit den symlinks ausseinandersetzen. Es ist ja nur die erste Version. :)

  • @Yoshi ich schaue mal ob man nicht für jede Mod eine Datei erstellt die einfach im Namen bereits ID und Ordnernamen enthält de dann automatisch erkannt und eingebunden werden. Ansonsten sind es nur meine ersten Schritte in Batch. Ich werde mich mal mit schleifen ausseinandersetzen. Vielleicht sogar eine eigene "Datenbank".txt in der IDs und Ordnernamen stehen die dann über ein Batch Menü ausgewählt und einzeln geupdated werden.

  • Ich konnte mich mit Batch noch nicht so richtig anfreunden, daher hatte ich selbst auch die Idee wie du aber ich habe das ganze auf Python aufgebaut. Man braucht lediglich mehr oder minder nur Python auf dem Root zu installieren und man kann .py Dateien wie eine .bat oder .cmd aufrufen. Auch ist der Syntax teilweise etwas einfacher zu verstehen als bei Batch.


    Auch verwende ich einen anderen Weg als du, ich benenne den Ordner nicht um, sonder ich erstelle einen Symbolischen link, somit erspare ich mir dass erneute Runterladen des kompletten Mods, was zwar bei einem Root nicht zwingend nötig ist, aber doch unter Umständen Zeit sparen kann. Ich bin aber was Python angeht auch noch ein Anfänger, aber vielleicht kannst du aus meinen Script etwas für dich in dein Batch-Script übernehmen.

    Modder: Global Mobilization Enhancement Mod - ACE und ACRE Kompatibilität für GM

    Modder: vBundeswehr Mod - Fahrzeuge und Assets zur Darstellung der Bundeswehr in Arma

    Einmal editiert, zuletzt von sancron ()

  • Um an diese Python Idee anzuknüpfen,
    bei uns läuft ein ähnliches Skript als Cronjob welches einen neuen Download startet sobald sich die Versionsnummer auf dem Server und im Workshop unterscheiden.


    Um einen Mod neu zu installieren reicht es aus diesen zu einer Collection hinzufügen, das Skript fragt diese ab und startet den Download.

  • Zumindest ist das bei der Python Variante der Fall, dort wird für jeden Mod die entsprechende Info angezeigt und gefragt ob man das Update durchführen möchte, danach wird gefragt ob eine Symbolische Verknüpfung erstellt werden soll.

    Modder: Global Mobilization Enhancement Mod - ACE und ACRE Kompatibilität für GM

    Modder: vBundeswehr Mod - Fahrzeuge und Assets zur Darstellung der Bundeswehr in Arma

  • Dein Script ist kein wirkliches Script im klassischen Sinne. Wenn ich jede einzelne Mod, die ich haben möchte, hardcoden muss, sehe ich da keinen Benefit gegenüber manuell runterladen.
    Was wirklich sinnvoll wäre, wäre ein Script (Plattformübergreifend, also am Besten Python), das mithilfe der SteamAPI einfach eine (oder mehrere) Collection(s) abfragt und dann per Auswahl einfach geupdated wird.


    Jede Mod enthält eine meta.cpp, dort kann der entsprechende Ordnername einfach mit einem leading @ bestimmt werden. Ich würde gar nicht erst die Möglichkeit bieten, den Modordner umzubenennen, da das generell weder sinnvoll, noch nötig ist.
    Die meta.cpp enthält auch einen Timestamp, damit könnte man dem User anzeigen, auf welchem Stand die Mod ist und bestimmen, ob die Mod aktuell ist.


    Übrigens sind Batch-Scripts komplett veraltet. Entweder man benutzt dafür Powershell oder Python (wenn es plattformübergreifend sein soll). Die komplett veraltete Syntax und schlechte Kompatibilität sollte eigentlich jeden abschrecken. Man denke da mal an die Kontrollstrukturen...

    "Sie haben Feinde? Super! Das heißt, dass Sie sich in Ihrem Leben für etwas eingesetzt haben." - Winston Churchill

  • 1.
    Da Script nicht genauer definiert ist, ist seins ein Script. Auch wenn cmd nicht das gelbe vom Ei ist. Darauf wurde aber bereits hingewiesen.


    2.
    Man könnte, man könnte.
    Ja man kann vieles - wenn man das dementsprechende Wissen hat
    Oder die Zeit sich das genauer anzuschauen.


    Für den normalen 0815 Server admin der nur mods runterladen will, reicht das.




    3.
    Auch Powershell und Bash funktionieren mittleiweile Plattform übergreifend.

    Cuiusvis hominis est errare, nullius nisi insipientis perseverare in errore.

  • Eure Gebete wurden erhört. Mein Kumpel, nennen wir ihn im WWW "DoC" hat sich der Sache abgenommen und programmiert die Grundidee des Batch Scripts komplett neu in Java. Derzeit arbeitet er am GUI. Die Basisfunktion ist bereits lauffähig. Das schöne ist, es ist Plattformunabhängig und mit dem geplanten Feature von ihm, Workshop Projekte in einem Interface einfach an- und abhaken zu können wird es sehr benutzerfreundlich.


    Wann es fertig ist und welche Features das Tool haben wird steht jedoch noch in den Sternen.


    Mit freundlichen Grüßen


    LiquidBlaze

  • Das Tool in Java machen, damit es plattformunabhängig ist? Kaum ein Linux-Server hat ein GUI, was soll das Java-GUI denn dann bringen?
    Das wird das x-tausendste Tool für Armaserververwaltung, das kein Mensch braucht. Auf Windows gibts nen Haufen Tools und wer auf Linux einen Armaserver aufsetzt, der braucht solche Scripts nicht, weil er die entweder selber macht oder auf Handarbeit schwört.



    Auch Powershell und Bash funktionieren mittleiweile Plattform übergreifend.

    Bash nur in Wine und kein Mensch installiert sich PowerShell auf nem Linux-Server.

    "Sie haben Feinde? Super! Das heißt, dass Sie sich in Ihrem Leben für etwas eingesetzt haben." - Winston Churchill

  • Bash nur in Wine und kein Mensch installiert sich PowerShell auf nem Linux-Server.

    Da hat wohl jemand noch nie vom WSL gehört o.O



    The Fuck? Ich kenne genügend Linux Admins die Powershell auf Linux Systemen verwenden - gerade in Hybriden Infrastrukturen.

    Cuiusvis hominis est errare, nullius nisi insipientis perseverare in errore.