ArmA 3 Workshop Mods auf Server verwalten leicht gemacht.

    • Tut- Complete

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

    • 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:

      Shell-Script

      1. @echo off
      2. REM Hier die Steam Logindaten Eintragen!
      3. SET STEAMLOGIN=BENUTZERNAME PASSWORT
      4. REM DownloadFolder bezeichnet den Ordner wo die Mods später reingeladen werden
      5. REM FinalPath ist der entgültige Ordner wo die Mods am Ende hin sollen.
      6. REM Steampath ist der Ordner wo eure steamcmd.exe drin ist.
      7. SET DownloadFolder=C:\ArmA3\Repositorys\workshop_temp
      8. SET FinalPath=C:\ArmA3\Repositorys\Workshop_Mods
      9. SET STEAMPATH="C:\Users\Administrator\Desktop\steam"
      10. REM Hier könnt ihr beliebig viele Mod IDs hinterlegen. Beachtet dabei bitte das Schema
      11. echo Setzen der Mod-IDs...
      12. SET MOD1=1115612632
      13. SET MOD2=815366548
      14. SET MOD3=970709033
      15. REM Hier könnt ihr beliebige Name für die Modordner festlegen.
      16. echo Setzen der Modordner
      17. SET MODNAME1=@XYZ
      18. SET MODNAME2=@Beispiel
      19. SET MODNAME3=@ACRE
      20. :: _________________________________________________________
      21. echo.
      22. echo Du bist gerade dabei Workshop Mods für ArmA herunterzuladen
      23. echo Dir: %DownloadFolder%
      24. echo
      25. echo.
      26. echo Key "ENTER" to proceed
      27. pause
      28. echo.
      29. echo.
      30. echo.
      31. REM Hier könnt ihr soviele Mods wie ihr wollt laden.
      32. REM Kopiert einfach die nächsten 4 Zeilen und fügt sie etwas weiter unten ein.
      33. REM Beachtet bitte dabei das übereinstimmend die %MODX% mit der jeweiligen oben angegebenen ID passt.
      34. echo %MODNAME1% wird heruntergeladen...
      35. %STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +force_install_dir %DownloadFolder% +workshop_download_item 107410 %MOD1% validate +quit
      36. echo.
      37. echo.
      38. echo %MODNAME2% wird heruntergeladen...
      39. %STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +force_install_dir %DownloadFolder% +workshop_download_item 107410 %MOD2% validate +quit
      40. echo.
      41. echo.
      42. echo %MODNAME3% wird heruntergeladen...
      43. %STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +force_install_dir %DownloadFolder% +workshop_download_item 107410 %MOD3% validate +quit
      44. echo.
      45. echo.
      46. echo.
      47. echo.
      48. REM Hier werden die Ordner nurnoch euren Bedürfnissen entsprechend umbenannt.
      49. echo.
      50. echo Modordner werden umbenannt...
      51. echo.
      52. RENAME %DownloadFolder%\steamapps\workshop\content\107410\%MOD1% %MODNAME1%
      53. RENAME %DownloadFolder%\steamapps\workshop\content\107410\%MOD2% %MODNAME2%
      54. RENAME %DownloadFolder%\steamapps\workshop\content\107410\%MOD3% %MODNAME3%
      55. echo.
      56. echo Modordner wurden erfolgreich umbenannt!
      57. echo.
      58. XCOPY /Y %DownloadFolder%\steamapps\workshop\content\107410\%MODNAME1% %FinalPath%\%MODNAME1%\ /E /S
      59. XCOPY /Y %DownloadFolder%\steamapps\workshop\content\107410\%MODNAME2% %FinalPath%\%MODNAME2%\ /E /S
      60. XCOPY /Y %DownloadFolder%\steamapps\workshop\content\107410\%MODNAME3% %FinalPath%\%MODNAME3%\ /E /S
      61. RD /S /Q %DownloadFolder%\steamapps\workshop\content\107410\%MODNAME1%
      62. RD /S /Q %DownloadFolder%\steamapps\workshop\content\107410\%MODNAME2%
      63. RD /S /Q %DownloadFolder%\steamapps\workshop\content\107410\%MODNAME3%
      64. REM Diese Dateien müssen gelöscht werden, damit es IMMER zu einem erzwungenen Download der Mods kommt.
      65. echo Löschen der ACF Datei...
      66. del %DownloadFolder%\steamapps\workshop\*.ACF
      67. echo Fertig!
      68. echo.
      69. echo.
      70. echo.
      71. echo.
      72. echo Deine Arma 3 Workshop Mods wurden erfolgreich heruntergeladen und umbenannt!
      73. echo key "ENTER" to exit
      74. pause
      Alles anzeigen
      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
      Tactical Corporation, ein ArmA 3 Projekt, dass Communitys zusammenschweißt: tac-corp.de/forum/

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von 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
      Tactical Corporation, ein ArmA 3 Projekt, dass Communitys zusammenschweißt: tac-corp.de/forum/
    • 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.

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

    • LiquidBlaze schrieb:

      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
    • 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. :)
      Tactical Corporation, ein ArmA 3 Projekt, dass Communitys zusammenschweißt: tac-corp.de/forum/
    • @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.
      Tactical Corporation, ein ArmA 3 Projekt, dass Communitys zusammenschweißt: tac-corp.de/forum/
    • 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.

      Python-Quellcode: Arma3_WSUpdater.py

      1. import os
      2. #Default Settings
      3. steamCmdPath = 'C:\\steamcmd\\'
      4. steamCmdExe = 'steamcmd.exe'
      5. steamAppId = '107410'
      6. finalModPath = 'C:\\files\\repo_create\\workshop\\'
      7. #Login
      8. steamUser = 'userName'
      9. steamPass = 'userPassword'
      10. #Mods to Download
      11. steamMods = [
      12. ['623475643','@3den'],
      13. ['463939057','@ace3'],
      14. ['708250744','@acex'],
      15. ['751965892','@acre2'],
      16. ['620260972','@alive'],
      17. ['723217262','@ares'],
      18. ['713709341','@advanced_rappelling'],
      19. ['730310357','@advanced_urban_rappelling'],
      20. ['870276636','@bwa3'],
      21. ['870313336','@bwa3_ace'],
      22. ['835394852','@bw_kleiderkammer'],
      23. ['450814997','@cba_a3'],
      24. ['583496184','@cup_terrains_core'],
      25. ['583544987','@cup_terrains_maps'],
      26. ['853743366','@cup_terrains_cwa'],
      27. ['820994401','@ffaa'],
      28. ['792383905','@ffaa_ace'],
      29. ['909547724','@lythium'],
      30. ['520618345','@jbad'],
      31. ['1128145626','@red_n_tank'],
      32. ['753946944','@murshun_cigs'],
      33. ['421620913','@kunduz'],
      34. ['735566597','@project_opfor'],
      35. ['825179978','@lax_es'],
      36. ['825181638','@lax_ds2'],
      37. ['721359761','@vcomai']
      38. ]
      39. def fnc_modDownload(ModId, ModDir):
      40. steamModId = ModId
      41. finalModDir = ModDir
      42. cmdCommand = (steamCmdPath+steamCmdExe+' +login '+steamUser+' '+steamPass+' +"workshop_download_item '+steamAppId+' '+steamModId+'" validate +quit')
      43. symbolicLink = ('mklink /J "'+finalModPath+finalModDir+'" "'+steamCmdPath+'steamapps\\workshop\\content\\'+steamAppId+'\\'+steamModId+'"')
      44. print(
      45. '-- Verify final command --\n'
      46. 'AppId: '+steamAppId+'\n'
      47. 'ModId: '+steamModId+'\n'
      48. 'Mod Directory: '+finalModDir+'\n'
      49. 'SteamCmd command: '+cmdCommand+'\n'
      50. 'Symbolic link command: '+symbolicLink+'\n'
      51. '--- End of verification ---\n'
      52. )
      53. #Ask if the Update should be started
      54. runCode = input('Continue? y or n: ')
      55. if runCode == 'y':
      56. os.system(cmdCommand)
      57. symLink = input('Create symbolic link? y or n (default: n): ')
      58. #Ask if a SymbolicLink should be created
      59. if symLink == 'y':
      60. os.system(symbolicLink)
      61. print('Symbolic link created \n')
      62. else:
      63. print('No symbolic link created \n')
      64. else:
      65. print('No Update')
      66. for Mods in steamMods:
      67. fnc_modDownload(*Mods)
      68. input('Hit a key to exit')
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal 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.
    • 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
      Tactical Corporation, ein ArmA 3 Projekt, dass Communitys zusammenschweißt: tac-corp.de/forum/
    • 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.


      Yoshi schrieb:

      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
    • chris579 schrieb:



      Yoshi schrieb:

      Auch Powershell und Bash funktionieren mittleiweile Plattform übergreifend.
      Bash nur in Wine und kein Mensch installiert sich PowerShell auf nem Linux-Server.
      Da hat wohl jemand noch nie vom WSL gehört 8|

      Spoiler anzeigen

      Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux


      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.