From 94a89062d60689f0021d83e9cbac7a82288f9cda Mon Sep 17 00:00:00 2001 From: Quinten <67589015+QuintenQVD0@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:04:05 +0100 Subject: [PATCH] add Palworld Proton egg --- game_eggs/steamcmd_servers/palworld/README.md | 8 +- .../palworld/egg-palworld-proton.json | 154 ++++++++++++++++++ game_eggs/steamcmd_servers/palworld/winmm.dll | Bin 0 -> 34304 bytes 3 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 game_eggs/steamcmd_servers/palworld/egg-palworld-proton.json create mode 100644 game_eggs/steamcmd_servers/palworld/winmm.dll diff --git a/game_eggs/steamcmd_servers/palworld/README.md b/game_eggs/steamcmd_servers/palworld/README.md index 578e473c..25d5b033 100644 --- a/game_eggs/steamcmd_servers/palworld/README.md +++ b/game_eggs/steamcmd_servers/palworld/README.md @@ -118,4 +118,10 @@ Those who need more variables will have to add them themselves. See a list of what key matches with what variable [Here](https://github.com/QuintenQVD0/Palword-server-config-parser?tab=readme-ov-file#key-with-variables) -**Variables that do not exist will automatically be skipped parsing so you do not have to worry about it emptying your config file** \ No newline at end of file +**Variables that do not exist will automatically be skipped parsing so you do not have to worry about it emptying your config file** + +### Proton + +There is a special egg that uses proton instad of the native linux version what shipes with `winmm.dll` and `RE-UE4SS` so for they who want to run mods then that is possible. + +Keep in mind this eggs console output is broken (thanks proton / wine) so you will only see the parser output. The RCON console does still work. \ No newline at end of file diff --git a/game_eggs/steamcmd_servers/palworld/egg-palworld-proton.json b/game_eggs/steamcmd_servers/palworld/egg-palworld-proton.json new file mode 100644 index 00000000..045e18c6 --- /dev/null +++ b/game_eggs/steamcmd_servers/palworld/egg-palworld-proton.json @@ -0,0 +1,154 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2024-02-27T16:03:37+01:00", + "name": "Palworld Proton", + "author": "josdekurk@gmail.com", + "description": "Fight, farm, build and work alongside mysterious creatures called \"Pals\" in this completely new multiplayer, open world survival and crafting game!", + "features": [ + "steam_disk_space" + ], + "docker_images": { + "Proton": "ghcr.io\/parkervcp\/steamcmd:proton" + }, + "file_denylist": [], + "startup": ".\/PalworldServerConfigParser; (while read cmd; do rcon -s -a \"localhost:$RCON_PORT\" -p \"$ADMIN_PASSWORD\" \"$cmd\";done) < \/dev\/stdin & proton run \/home\/container\/Pal\/Binaries\/Win64\/PalServer-Win64-Test.exe -publiclobby -useperfthreads -NoAsyncLoadingThread -UseMultithreadForDS -port={{SERVER_PORT}} -publicport={{SERVER_PORT}} -servername=\"{{SERVER_NAME}}\" -players={{MAX_PLAYERS}} $(if [ -n \"$SERVER_PASSWORD\" ]; then echo \"-serverpassword=\\\"${SERVER_PASSWORD}\\\"\"; fi) -adminpassword=\"{{ADMIN_PASSWORD}}\" -rcon", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"fsync: up and running.\"\r\n}", + "logs": "{}", + "stop": "shutdown 5" + }, + "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# 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\n## copy template config file\r\necho \"Copy template config file into config folder!\"\r\n\r\nif [ -f \"\/mnt\/server\/Pal\/Saved\/Config\/WindowsServer\/PalWorldSettings.ini\" ]; then\r\n echo \"Config file already exitis, backing up and overwriting with a new one\"\r\n mv \/mnt\/server\/Pal\/Saved\/Config\/WindowsServer\/PalWorldSettings.ini \/mnt\/server\/Pal\/Saved\/Config\/WindowsServer\/PalWorldSettings_$(date +\"%Y%m%d%H%M%S\").ini\r\n cp \/mnt\/server\/DefaultPalWorldSettings.ini \/mnt\/server\/Pal\/Saved\/Config\/WindowsServer\/PalWorldSettings.ini\r\nelse \r\n echo \"Creating new config file\"\r\n mkdir -p \/mnt\/server\/Pal\/Saved\/Config\/WindowsServer\r\n cp \/mnt\/server\/DefaultPalWorldSettings.ini \/mnt\/server\/Pal\/Saved\/Config\/WindowsServer\/PalWorldSettings.ini\r\nfi\r\n\r\ncd \/mnt\/server\r\n# Download self made replace tool\r\necho \"Downloading config parser aplication\"\r\ncurl -sSL -o PalworldServerConfigParser https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/steamcmd_servers\/palworld\/PalworldServerConfigParser-linux-amd64\r\nchmod +x PalworldServerConfigParser\r\n\r\ncd \/tmp\r\ncurl -sSL -o \/mnt\/server\/Pal\/Binaries\/Win64\/winmm.dll https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/steamcmd_servers\/palworld\/winmm.dll\r\n\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/UE4SS-RE\/RE-UE4SS\/releases\/latest\")\r\nMATCH=\"UE4SS_\"\r\nDOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\necho ${DOWNLOAD_URL}\r\ncurl -sSL -o ue4ss.zip ${DOWNLOAD_URL}\r\nunzip -o ue4ss.zip -d \/mnt\/server\/Pal\/Binaries\/Win64\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", + "container": "ghcr.io\/parkervcp\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "App ID", + "description": "Do not edit!", + "env_variable": "SRCDS_APPID", + "default_value": "2394010", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|in:2394010", + "field_type": "text" + }, + { + "name": "Auto Update", + "description": "Auto update the server on start.", + "env_variable": "AUTO_UPDATE", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "required|boolean", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "", + "env_variable": "MAX_PLAYERS", + "default_value": "32", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric|between:1,32", + "field_type": "text" + }, + { + "name": "Server Name", + "description": "", + "env_variable": "SERVER_NAME", + "default_value": "A Pterodactyl hosted Palworld Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:64", + "field_type": "text" + }, + { + "name": "Server Password", + "description": "If specified, players must provide this password to join the server.", + "env_variable": "SERVER_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|alpha_dash|between:1,30", + "field_type": "text" + }, + { + "name": "Admin Password", + "description": "If specified, players must provide this password (via the in-game chat or RCON) to gain access to administrator commands on the server.", + "env_variable": "ADMIN_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|alpha_dash|between:1,30", + "field_type": "text" + }, + { + "name": "Public IP", + "description": "Set this to the server public ip address.\r\nOnly needed if the allocation is a local ip, else the allocate ip will be used automatically", + "env_variable": "PUBLIC_IP", + "default_value": "", + "user_viewable": true, + "user_editable": false, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "RCON Port", + "description": "Does not need to be allocated!", + "env_variable": "RCON_PORT", + "default_value": "25575", + "user_viewable": true, + "user_editable": false, + "rules": "required|numeric", + "field_type": "text" + }, + { + "name": "Enable RCON", + "description": "Must Be ON", + "env_variable": "RCON_ENABLE", + "default_value": "True", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|in:True", + "field_type": "text" + }, + { + "name": "bEnableInvaderEnemy", + "description": "Turns off or on bEnableInvaderEnemy,\r\nCan be used to slow download memory leaks.\r\nOff should slow down the memory leaks.", + "env_variable": "ENABLE_ENEMY", + "default_value": "True", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:True,False", + "field_type": "text" + }, + { + "name": "Server Description", + "description": "The description of the server.", + "env_variable": "SERVER_DESCRIPTION", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|max:128", + "field_type": "text" + }, + { + "name": "WINDOWS_INSTALL", + "description": "", + "env_variable": "WINDOWS_INSTALL", + "default_value": "1", + "user_viewable": false, + "user_editable": false, + "rules": "required|in:1", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/game_eggs/steamcmd_servers/palworld/winmm.dll b/game_eggs/steamcmd_servers/palworld/winmm.dll new file mode 100644 index 0000000000000000000000000000000000000000..48c2bc6685cfec10ef37e20cb50d247dd759b893 GIT binary patch literal 34304 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