diff --git a/.gitignore b/.gitignore index 5cc91bae9..ecb5dc13e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules/ .vuepress/* .vscode +/.vs .idea \ No newline at end of file diff --git a/README.md b/README.md index afc174a2d..7b947e337 100644 --- a/README.md +++ b/README.md @@ -245,6 +245,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Avorion](game_eggs/steamcmd_servers/avorion) * [Barotrauma](game_eggs/steamcmd_servers/barotrauma) * [BATTALION: Legacy](game_eggs/steamcmd_servers/battalion_legacy) +* [BattleBit Remastered](game_eggs/steamcmd_servers/battlebit_remastered) * [Black Mesa](game_eggs/steamcmd_servers/black_mesa) * [Citadel: Forged with Fire](game_eggs/steamcmd_servers/citadel) * [Conan Exiles](game_eggs/steamcmd_servers/conan_exiles) diff --git a/game_eggs/steamcmd_servers/battlebit_remastered/README.md b/game_eggs/steamcmd_servers/battlebit_remastered/README.md new file mode 100644 index 000000000..958757483 --- /dev/null +++ b/game_eggs/steamcmd_servers/battlebit_remastered/README.md @@ -0,0 +1,22 @@ +# BattleBit and BattleBitAPIRunner + +## From their [Website](https://joinbattlebit.com/) + +BattleBit Remastered is a low-poly, massive multiplayer FPS, supporting 254 players per server. Battle on a near-fully destructible map with various vehicles! + +## Important Information +On Linux the server becomes unstable around 80-90 players ! + +## Server Ports + +BattleBit Remastered servers require 2 ports to be open (Server and Query) + +BattleBitAPIRunner require 1 port to be open + +| Port | default | +|-----------|---------| +| Server | 30000 | +| Query | 30001 | +| BattleBitAPIRunner | 29294 | + +## Steam Download [SteamStore](https://store.steampowered.com/app/671860/BattleBit_Remastered/) diff --git a/game_eggs/steamcmd_servers/battlebit_remastered/appsettings.json b/game_eggs/steamcmd_servers/battlebit_remastered/appsettings.json new file mode 100644 index 000000000..d44d12af5 --- /dev/null +++ b/game_eggs/steamcmd_servers/battlebit_remastered/appsettings.json @@ -0,0 +1,8 @@ +{ + "IP": "0.0.0.0", + "Port": "30000", + "ModulePath": "./modules", + "DependencyPath": "./dependencies", + "ConfigurationPath": "./configurations", + "LogLevel": "None" +} diff --git a/game_eggs/steamcmd_servers/battlebit_remastered/egg-battle-bit-a-p-i-runner-battle-bit-remastered.json b/game_eggs/steamcmd_servers/battlebit_remastered/egg-battle-bit-a-p-i-runner-battle-bit-remastered.json new file mode 100644 index 000000000..eeb076e86 --- /dev/null +++ b/game_eggs/steamcmd_servers/battlebit_remastered/egg-battle-bit-a-p-i-runner-battle-bit-remastered.json @@ -0,0 +1,132 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2023-09-09T15:36:23+02:00", + "name": "BattleBitAPIRunner BattleBit Remastered", + "author": "contact@clan-rmg.com", + "description": "A generic C# (dotnet6) for BattleBitAPIRunner", + "features": null, + "docker_images": { + "Dotnet_6": "ghcr.io\/parkervcp\/yolks:dotnet_6" + }, + "file_denylist": [], + "startup": "if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; cd {{PROJECT_DIR}}; dotnet restore; dotnet build {{PROJECT_FILE}} -o {{APP_DIR}}; cd {{APP_DIR}}; dotnet {{PROJECT_APP}}", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": [\r\n \"Listener started at\"\r\n ]\r\n}", + "logs": "{}", + "stop": "^^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y git curl jq file unzip\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\n## add git ending if it's not on the address\r\nif [[ ${GIT_ADDRESS} != *.git ]]; then\r\n GIT_ADDRESS=${GIT_ADDRESS}.git\r\nfi\r\n\r\nif [ -z \"${USERNAME}\" ] && [ -z \"${ACCESS_TOKEN}\" ]; then\r\n echo -e \"using anon api call\"\r\nelse\r\n GIT_ADDRESS=\"https:\/\/${USERNAME}:${ACCESS_TOKEN}@$(echo -e ${GIT_ADDRESS} | cut -d\/ -f3-)\"\r\nfi\r\n\r\n## pull git js bot repo\r\nif [ \"$(ls -A \/mnt\/server)\" ]; then\r\n echo -e \"\/mnt\/server directory is not empty.\"\r\n if [ -d .git ]; then\r\n echo -e \".git directory exists\"\r\n if [ -f .git\/config ]; then\r\n echo -e \"loading info from git config\"\r\n ORIGIN=$(git config --get remote.origin.url)\r\n else\r\n echo -e \"files found with no git config\"\r\n echo -e \"closing out without touching things to not break anything\"\r\n exit 10\r\n fi\r\n fi\r\n\r\n if [ \"${ORIGIN}\" == \"${GIT_ADDRESS}\" ]; then\r\n echo \"pulling latest from github\"\r\n git pull\r\n fi\r\nelse\r\n echo -e \"\/mnt\/server is empty.\\ncloning files into repo\"\r\n if [ -z ${BRANCH} ]; then\r\n echo -e \"cloning default branch\"\r\n git clone ${GIT_ADDRESS} .\r\n else\r\n echo -e \"cloning ${BRANCH}'\"\r\n git clone --single-branch --branch ${BRANCH} ${GIT_ADDRESS} .\r\n fi\r\nfi\r\n\r\n## install end\r\necho \"-----------------------------------------\"\r\necho \"Installation completed...\"\r\necho \"-----------------------------------------\"", + "container": "debian:bullseye-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Git Repo Address", + "description": "GitHub Repo to clone\r\n\r\nI.E. https:\/\/github.com\/parkervcp\/repo_name", + "env_variable": "GIT_ADDRESS", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Install Branch", + "description": "The branch to install.", + "env_variable": "BRANCH", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "User Uploaded Files", + "description": "Skip all the install stuff if you are letting a user upload files.\r\n\r\n0 = false (default)\r\n1 = true", + "env_variable": "USER_UPLOAD", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "required|boolean", + "field_type": "text" + }, + { + "name": "Auto Update", + "description": "Pull the latest files on startup when using a GitHub repo.", + "env_variable": "AUTO_UPDATE", + "default_value": "0", + "user_viewable": true, + "user_editable": true, + "rules": "required|boolean", + "field_type": "text" + }, + { + "name": "Git Username", + "description": "Username to auth with git.", + "env_variable": "USERNAME", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Git Access Token", + "description": "Password to use with git.\r\n\r\nIt's best practice to use a Personal Access Token.\r\nhttps:\/\/github.com\/settings\/tokens\r\nhttps:\/\/gitlab.com\/-\/profile\/personal_access_tokens", + "env_variable": "ACCESS_TOKEN", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "project file", + "description": "The main project file if multiple are present", + "env_variable": "PROJECT_FILE", + "default_value": "BattleBitAPIRunner.sln", + "user_viewable": true, + "user_editable": false, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Project location", + "description": "The location of where the .csproj file is located. not the .sln file!", + "env_variable": "PROJECT_DIR", + "default_value": "\/home\/container\/", + "user_viewable": true, + "user_editable": false, + "rules": "required|string|", + "field_type": "text" + }, + { + "name": "App Directory", + "description": "", + "env_variable": "APP_DIR", + "default_value": "\/home\/container\/app\/", + "user_viewable": true, + "user_editable": false, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "Project DLL", + "description": "", + "env_variable": "PROJECT_APP", + "default_value": "BattleBitAPIRunner.dll", + "user_viewable": true, + "user_editable": false, + "rules": "required|string|", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/game_eggs/steamcmd_servers/battlebit_remastered/egg-battle-bit-remastered.json b/game_eggs/steamcmd_servers/battlebit_remastered/egg-battle-bit-remastered.json new file mode 100644 index 000000000..b14792bbf --- /dev/null +++ b/game_eggs/steamcmd_servers/battlebit_remastered/egg-battle-bit-remastered.json @@ -0,0 +1,254 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2023-08-30T23:03:00+02:00", + "name": "BattleBit Remastered", + "author": "contact@clan-rmg.com", + "description": "BattleBit Remastered Dedicated Server Wine Debian", + "features": [ + "steam_disk_space" + ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:wine_staging": "ghcr.io\/parkervcp\/yolks:wine_staging" + }, + "file_denylist": [], + "startup": "cd \/home\/container\/ ; winetricks sound=disabled; export WINEARCH=\"win64\"; export WINEDLLOVERRIDES=\"mscoree=n,b;mshtml=n,b\"; wine \/home\/container\/BattleBit.exe -batchmode -nographics \"-Name=\"{{SERVER_NAME}}\"\" \"-Port={{SERVER_PORT}}\" \"-Hz={{SERVER_RATEHZ}}\" \"-AntiCheat=EAC\" \"-MaxPing={{SERVER_MAXPING}}\" \"-VoxelMode={{SERVER_VOXELMODE}}\" \"-ApiEndPoint={{SERVER_APIENDPOINT}}\" \"-apitoken={{SERVER_APITOCKEN}}\" \"-FirstMap={{SERVER_FIRSTMAP}}\" \"-FirstGamemode={{SERVER_FIRSTGAMEMODE}}\" \"-FixedSize={{SERVER_FIXEDSIZE}}\" \"-FirstSize={{SERVER_FIRSTSIZE}}\" \"-MaxSize={{SERVER_MAXSIZE}}\" \"-Password=\"{{SERVER_PASSWORD}}\"\" \"-MaxPlayers={{SERVER_MAXPLAYERS}}\"", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"Successfully registered to steam servers\"\r\n}", + "logs": "{}", + "stop": "^^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# Installation Script\r\n#\r\n\r\n## Define variables\r\ndlurl=\"https:\/\/fastdl.clan-rmg.com\/BattleBit\/\"\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 install curl lib32gcc-s1 ca-certificates unzip\r\n\r\n\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## Admin Files\r\ntouch $HOME\/Permissions.txt\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": "The ID corresponding to the game to download.", + "env_variable": "SRCDS_APPID", + "default_value": "671860", + "user_viewable": false, + "user_editable": false, + "rules": "required|numeric|digits_between:1,6", + "field_type": "text" + }, + { + "name": "WINDOWS_INSTALL", + "description": "", + "env_variable": "WINDOWS_INSTALL", + "default_value": "1", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "WINETRICKS_RUN", + "description": "", + "env_variable": "WINETRICKS_RUN", + "default_value": "vcrun2013 vcrun2017 corefonts dotnet48", + "user_viewable": false, + "user_editable": false, + "rules": "required|string", + "field_type": "text" + }, + { + "name": "WINEPREFIX", + "description": "WINEPREFIX", + "env_variable": "WINEPREFIX", + "default_value": "\/home\/container\/.wine", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:64", + "field_type": "text" + }, + { + "name": "WINEDEBUG", + "description": "", + "env_variable": "WINEDEBUG", + "default_value": "-all", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "Server Name", + "description": "Name of the server, appears in Battlebit's server browser.", + "env_variable": "SERVER_NAME", + "default_value": "A Pterodactyl hosted Battlebit Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:64", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "Maximum number of players", + "env_variable": "SERVER_MAXPLAYERS", + "default_value": "128", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric|digits_between:1,254", + "field_type": "text" + }, + { + "name": "Server Password", + "description": "", + "env_variable": "SERVER_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "max:64", + "field_type": "text" + }, + { + "name": "Steam Username", + "description": "", + "env_variable": "STEAM_USER", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:64", + "field_type": "text" + }, + { + "name": "Steam Password", + "description": "", + "env_variable": "STEAM_PASS", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "Default Size Map", + "description": "TINY - 8v8\r\nSMALL - 16v16\r\nMEDIUM - 32v32\r\nBIG - 64v64\r\nULTRA - 127v127", + "env_variable": "SERVER_FIXEDSIZE", + "default_value": "tiny", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:tiny,small,medium,big,ultra", + "field_type": "text" + }, + { + "name": "First Max Size", + "description": "TINY - 8v8\r\nSMALL - 16v16\r\nMEDIUM - 32v32\r\nBIG - 64v64\r\nULTRA - 127v127", + "env_variable": "SERVER_FIRSTSIZE", + "default_value": "tiny", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:tiny,small,medium,big,ultra", + "field_type": "text" + }, + { + "name": "Max Size Map", + "description": "TINY - 8v8\r\nSMALL - 16v16\r\nMEDIUM - 32v32\r\nBIG - 64v64\r\nULTRA - 127v127", + "env_variable": "SERVER_MAXSIZE", + "default_value": "tiny", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:tiny,small,medium,big,ultra", + "field_type": "text" + }, + { + "name": "First GameMode", + "description": "CONQ : CONQUEST | INFCONQ : INFARTRY CONQUEST | DOMI : DOMINATION | RUSH : RUSH | CTF : CAPTURE THE FLAG | FRONTLINE : FRONTLINE", + "env_variable": "SERVER_FIRSTGAMEMODE", + "default_value": "CONQ", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:CONQ,INFCONQ,DOMI,RUSH,CTF,FRONTLINE", + "field_type": "text" + }, + { + "name": "First Map", + "description": "Server startup MAP", + "env_variable": "SERVER_FIRSTMAP", + "default_value": "Eduardovo", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:64", + "field_type": "text" + }, + { + "name": "SteamCMD Branch", + "description": "Community-testing branch for test server and API Test | Community-server live branch for community server (do not use currently)", + "env_variable": "SRCDS_BETAID", + "default_value": "community-testing", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:community-testing,community-server", + "field_type": "text" + }, + { + "name": "Server API Endpoint", + "description": "IP + PORT where is the api", + "env_variable": "SERVER_APIENDPOINT", + "default_value": "127.0.0.1:29294", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + }, + { + "name": "VoxelMode", + "description": "", + "env_variable": "SERVER_VOXELMODE", + "default_value": "false", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false", + "field_type": "text" + }, + { + "name": "Max Ping", + "description": "Maximum ping allowed on the server", + "env_variable": "SERVER_MAXPING", + "default_value": "500", + "user_viewable": true, + "user_editable": true, + "rules": "required|numeric|digits_between:1,1000", + "field_type": "text" + }, + { + "name": "Server Hz", + "description": "Tickrate of the server in Hz", + "env_variable": "SERVER_RATEHZ", + "default_value": "60", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:60,120,240", + "field_type": "text" + }, + { + "name": "API Token", + "description": "Token generated by API", + "env_variable": "SERVER_APITOKEN", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|max:20", + "field_type": "text" + }, + { + "name": "STEAM_AUTH_URL", + "description": "Should return the current 2FA code in plain text (Only used in installation)", + "env_variable": "STEAM_AUTH_URL", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string", + "field_type": "text" + } + ] +}