From 6401cc42bdf3af3c2c730f661c3b693329f176f1 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:48:36 +0100 Subject: [PATCH 1/6] Update Mount & Blade II: Bannerlord to Linux (dotnet) --- .../egg-mount--blade-i-i--bannerlord.json | 66 +++---------------- 1 file changed, 8 insertions(+), 58 deletions(-) diff --git a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json index 9061421cc..9eeaa95fa 100644 --- a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json +++ b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json @@ -4,42 +4,32 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2023-10-21T17:16:27+02:00", + "exported_at": "2024-01-10T09:46:32+01:00", "name": "Mount & Blade II: Bannerlord", "author": "josdekurk@gmail.com", "description": "A strategy\/action RPG. Create a character, engage in diplomacy, craft, trade and conquer new lands in a vast medieval sandbox. Raise armies to lead into battle and command and fight alongside your troops in massive real-time battles using a deep but intuitive skill-based combat system.", "features": null, "docker_images": { - "ghcr.io\/parkervcp\/yolks:wine_latest": "ghcr.io\/parkervcp\/yolks:wine_latest" + "Dotnet_6": "ghcr.io\/parkervcp\/yolks:dotnet_6" }, "file_denylist": [], - "startup": "cd \/home\/container\/bin\/Win64_Shipping_Server\/ && wine DedicatedCustomServer.Starter.exe \/port {{SERVER_PORT}} \/dedicatedcustomserverauthtoken \"{{AUTH_TOKEN}}\" \/dedicatedcustomserverconfigfile tdm_config.txt _MODULES_*Native*Multiplayer*DedicatedCustomServerHelper*_MODULES_", + "startup": "cd \/home\/container\/bin\/Linux64_Shipping_Server\/ && dotnet TaleWorlds.Starter.DotNetCore.Linux.dll \/port {{SERVER_PORT}} \/dedicatedcustomserverauthtoken \"{{AUTH_TOKEN}}\" \/dedicatedcustomserverconfigfile tdm_config.txt _MODULES_*Native*Multiplayer*DedicatedCustomServerHelper*_MODULES_", "config": { "files": "{}", "startup": "{\r\n \"done\": \"Custom Game server is ready! You can now enter console commands\"\r\n}", "logs": "{}", - "stop": "^^C" + "stop": "^C" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# steamcmd Base Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n\r\n\r\n# Install packages. Default packages below are not required if using our existing install image thus speeding up the install process.\r\n#apt -y update\r\n#apt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n## just in case someone removed the defaults.\r\nif [[ \"${STEAM_USER}\" == \"\" ]] || [[ \"${STEAM_PASS}\" == \"\" ]]; then\r\n echo -e \"steam user is not set.\\n\"\r\n echo -e \"Using anonymous user.\\n\"\r\n STEAM_USER=anonymous\r\n STEAM_PASS=\"\"\r\n STEAM_AUTH=\"\"\r\nelse\r\n echo -e \"user set to ${STEAM_USER}\"\r\nfi\r\n\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\nmkdir -p \/mnt\/server\/steamapps # Fix steamcmd disk write error when this folder is missing\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n## install game using steamcmd\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) ${INSTALL_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6\r\n\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\r\n\r\n## add below your custom commands if needed\r\nmkdir -p \/mnt\/server\/Modules\/Native\/\r\ncd \/mnt\/server\/Modules\/Native\/\r\n[ -f \"tdm_config.txt\" ] || curl -sSL -o \"tdm_config.txt\" \"https:\/\/pteropaste.com\/z67k16z608ty\"\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "script": "#!\/bin\/bash\r\n# steamcmd Base Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n# Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n\r\n# Install packages. Default packages below are not required if using our existing install image thus speeding up the install process.\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc-s1 ca-certificates\r\n\r\n## just in case someone removed the defaults.\r\nif [[ \"${STEAM_USER}\" == \"\" ]] || [[ \"${STEAM_PASS}\" == \"\" ]]; then\r\n echo -e \"steam user is not set.\\n\"\r\n echo -e \"Using anonymous user.\\n\"\r\n STEAM_USER=anonymous\r\n STEAM_PASS=\"\"\r\n STEAM_AUTH=\"\"\r\nelse\r\n echo -e \"user set to ${STEAM_USER}\"\r\nfi\r\n\r\n## download and install steamcmd\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\nmkdir -p \/mnt\/server\/steamapps # Fix steamcmd disk write error when this folder is missing\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\n# This is changed at the end of the install process anyways.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n## install game using steamcmd\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) ${INSTALL_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6\r\n\r\n## set up 32 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk32\r\ncp -v linux32\/steamclient.so ..\/.steam\/sdk32\/steamclient.so\r\n\r\n## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\r\n\r\n## add below your custom commands if needed\r\nmkdir -p \/mnt\/server\/Modules\/Native\/\r\ncd \/mnt\/server\/Modules\/Native\/\r\n[ -f \"tdm_config.txt\" ] || curl -sSL -o \"tdm_config.txt\" \"https:\/\/pteropaste.com\/z67k16z608ty\"\r\n\r\ncd \/opt\/bitnami\/dotnet-sdk\/bin\/shared\/Microsoft.AspNetCore.App\/6.0.*\/\r\ncp *.dll \/mnt\/server\/bin\/Linux64_Shipping_Server\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", + "container": "bitnami\/dotnet-sdk:6-debian-11", "entrypoint": "bash" } }, "variables": [ { - "name": "Windows", - "description": "", - "env_variable": "WINDOWS_INSTALL", - "default_value": "1", - "user_viewable": false, - "user_editable": false, - "rules": "required|boolean", - "field_type": "text" - }, - { - "name": "App id", + "name": "App ID", "description": "", "env_variable": "SRCDS_APPID", "default_value": "1863440", @@ -58,46 +48,6 @@ "rules": "required|boolean", "field_type": "text" }, - { - "name": "[SYSTEM] WINEDEBUG", - "description": "don't change this !!!", - "env_variable": "WINEDEBUG", - "default_value": "-all", - "user_viewable": false, - "user_editable": false, - "rules": "required|string|max:64", - "field_type": "text" - }, - { - "name": "[SYSTEM] WINEARCH", - "description": "", - "env_variable": "WINEARCH", - "default_value": "win64", - "user_viewable": false, - "user_editable": false, - "rules": "required|string|max:20", - "field_type": "text" - }, - { - "name": "WINEPATH", - "description": "", - "env_variable": "WINEPATH", - "default_value": "\/home\/container", - "user_viewable": false, - "user_editable": false, - "rules": "required|string|max:32", - "field_type": "text" - }, - { - "name": "WINETRICKS_RUN", - "description": "", - "env_variable": "WINETRICKS_RUN", - "default_value": "vcrun2019 dotnet472", - "user_viewable": false, - "user_editable": false, - "rules": "required|string|", - "field_type": "text" - }, { "name": "Auth token", "description": "See: https:\/\/www.youtube.com\/watch?v=9Hvuz12Bfzg", @@ -109,4 +59,4 @@ "field_type": "text" } ] -} \ No newline at end of file +} From 5343f113157bd1af61a25f25cf9501e33c3b7bd6 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Wed, 10 Jan 2024 09:57:32 +0100 Subject: [PATCH 2/6] Mention the need to disable IPV6 --- .../mount_blade_II_bannerlord/README.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md index d7efa9c7e..07b21e0c9 100644 --- a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md +++ b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md @@ -26,4 +26,29 @@ Ports required to run the server You need to get your own AUTH token to run this server generated by an offical client [YT](https://www.youtube.com/watch?v=9Hvuz12Bfzg) + [Docs](https://moddocs.bannerlord.com/multiplayer/hosting_server/#generating-a-token) + +## IPV6 +Because something is wrong with there server you will be ubanble to join as there IPV6 logic is broken (even if you dot not have IPV6). +To fix this go to `bin/Linux64_Shipping_Server`, open the `TaleWorlds.Starter.DotNetCore.Linux.runtimeconfig.json` file and add: +```json +"System.Net.DisableIPv6": true +``` +Your file should then look something like this: +```json +{ + "runtimeOptions": { + "tfm": "net6.0", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "6.0.0" + }, + "configProperties": { + "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, + "System.Net.DisableIPv6": true + } + } +} + +``` From bdae92e022de4887f78c1d2f79d51f83e88bae49 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:29:26 +0100 Subject: [PATCH 3/6] Fix some grammer --- .../steamcmd_servers/mount_blade_II_bannerlord/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md index 07b21e0c9..a86f6c8ff 100644 --- a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md +++ b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md @@ -30,12 +30,14 @@ You need to get your own AUTH token to run this server generated by an offical c [Docs](https://moddocs.bannerlord.com/multiplayer/hosting_server/#generating-a-token) ## IPV6 -Because something is wrong with there server you will be ubanble to join as there IPV6 logic is broken (even if you dot not have IPV6). -To fix this go to `bin/Linux64_Shipping_Server`, open the `TaleWorlds.Starter.DotNetCore.Linux.runtimeconfig.json` file and add: +Because something is wrong with their server, you will be unable to join as their IPV6 logic is broken (even if you don't have IPV6). +To fix this, go to `bin/Linux64_Shipping_Server`, open the `TaleWorlds.Starter.DotNetCore.Linux.runtimeconfig.json` file and add: ```json "System.Net.DisableIPv6": true ``` +To the `configProperties` object. Your file should then look something like this: + ```json { "runtimeOptions": { From 36160e8dd20a9e31334ffe5c346ceaed605bcbbf Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:33:21 +0100 Subject: [PATCH 4/6] V is lowercase --- game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md index a86f6c8ff..bf2538bde 100644 --- a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md +++ b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md @@ -29,7 +29,7 @@ You need to get your own AUTH token to run this server generated by an offical c [Docs](https://moddocs.bannerlord.com/multiplayer/hosting_server/#generating-a-token) -## IPV6 +## IPv6 Because something is wrong with their server, you will be unable to join as their IPV6 logic is broken (even if you don't have IPV6). To fix this, go to `bin/Linux64_Shipping_Server`, open the `TaleWorlds.Starter.DotNetCore.Linux.runtimeconfig.json` file and add: ```json From f1940010e0f6a10d19cfd07e52be749a8beb70b8 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:34:35 +0100 Subject: [PATCH 5/6] Cleanup Readme --- game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md index bf2538bde..4a3939a86 100644 --- a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md +++ b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/README.md @@ -21,7 +21,7 @@ Ports required to run the server |---------|---------| | Game | 7210 (UDP) | -### Notes +## Notes You need to get your own AUTH token to run this server generated by an offical client @@ -30,6 +30,7 @@ You need to get your own AUTH token to run this server generated by an offical c [Docs](https://moddocs.bannerlord.com/multiplayer/hosting_server/#generating-a-token) ## IPv6 + Because something is wrong with their server, you will be unable to join as their IPV6 logic is broken (even if you don't have IPV6). To fix this, go to `bin/Linux64_Shipping_Server`, open the `TaleWorlds.Starter.DotNetCore.Linux.runtimeconfig.json` file and add: ```json From 84a541e38ab8c4f9ec39c7249927967442b8f692 Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:52:32 +0100 Subject: [PATCH 6/6] Allow to set custom modules --- .../egg-mount--blade-i-i--bannerlord.json | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json index 9eeaa95fa..eb5afd190 100644 --- a/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json +++ b/game_eggs/steamcmd_servers/mount_blade_II_bannerlord/egg-mount--blade-i-i--bannerlord.json @@ -4,7 +4,7 @@ "version": "PTDL_v2", "update_url": null }, - "exported_at": "2024-01-10T09:46:32+01:00", + "exported_at": "2024-01-15T15:51:23+01:00", "name": "Mount & Blade II: Bannerlord", "author": "josdekurk@gmail.com", "description": "A strategy\/action RPG. Create a character, engage in diplomacy, craft, trade and conquer new lands in a vast medieval sandbox. Raise armies to lead into battle and command and fight alongside your troops in massive real-time battles using a deep but intuitive skill-based combat system.", @@ -13,7 +13,7 @@ "Dotnet_6": "ghcr.io\/parkervcp\/yolks:dotnet_6" }, "file_denylist": [], - "startup": "cd \/home\/container\/bin\/Linux64_Shipping_Server\/ && dotnet TaleWorlds.Starter.DotNetCore.Linux.dll \/port {{SERVER_PORT}} \/dedicatedcustomserverauthtoken \"{{AUTH_TOKEN}}\" \/dedicatedcustomserverconfigfile tdm_config.txt _MODULES_*Native*Multiplayer*DedicatedCustomServerHelper*_MODULES_", + "startup": "cd \/home\/container\/bin\/Linux64_Shipping_Server\/ && dotnet TaleWorlds.Starter.DotNetCore.Linux.dll \/port {{SERVER_PORT}} \/dedicatedcustomserverauthtoken \"{{AUTH_TOKEN}}\" \/dedicatedcustomserverconfigfile tdm_config.txt _MODULES_{{MODULES}}_MODULES_", "config": { "files": "{}", "startup": "{\r\n \"done\": \"Custom Game server is ready! You can now enter console commands\"\r\n}", @@ -57,6 +57,16 @@ "user_editable": true, "rules": "required|string|", "field_type": "text" + }, + { + "name": "Modules", + "description": "The modules that the server will be running. Ensure that it's in the format of *module1*module2*module3* etc.", + "env_variable": "MODULES", + "default_value": "*Native*Multiplayer*DedicatedCustomServerHelper*", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:128", + "field_type": "text" } ] -} +} \ No newline at end of file