diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index e17866da..bedeb50f 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -79,8 +79,10 @@ body: description: | Run the command below on the SSH terminal of your Wings machine and provide the link to logs. - `tail -n 100 $(ls -Alrt /var/log/pterodactyl/install/*.log | tail -1 | sed 's/ */ /g' | cut -s -d' ' -f9) | nc pteropaste.com 99` + ``` + tail -n 1000 $(ls -Alrt /var/log/pterodactyl/install/*.log | tail -1 | sed 's/ */ /g' | cut -s -d' ' -f9) | nc pteropaste.com 99 + ``` placeholder: | https://pteropaste.com/exampleLogs validations: - required: true \ No newline at end of file + required: true diff --git a/README.md b/README.md index 93214e83..204ce52e 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [discord.java](bots/discord/discord.java) Java generic * [discord.js](bots/discord/discord.js) Node JS generic * [discord.py](bots/discord/discord.py) Python generic +* [discord.rs](bots/discord/discord.rs) Rust generic * [Dynamica](/bots/discord/dynamica) Node JS * [fragbot](/bots/discord/fragbot) Golang * [JMusicBot](/bots/discord/jmusicbot) Java @@ -76,6 +77,7 @@ If you are reading this it looks like you are looking to add an egg to your serv ## [Voice Servers](/voice_servers) * [Lavalink](/voice_servers/lavalink) +* [Teamspeak_ARM64](/voice_servers/teamspeak_ARM64) * [TeaSpeak](/voice_servers/teaspeak) * [TS3-Manager](/voice_servers/ts3_manager) @@ -120,12 +122,14 @@ If you are reading this it looks like you are looking to add an egg to your serv * GTA * [GTAC](game_eggs/gta/gtac) +[League Sandbox](game_eggs/leaguesandbox) + +[Los Angeles Crimes](game_eggs/losangelescrimes) + [Mindustry](game_eggs/mindustry) * [Mindustry](game_eggs/mindustry/mindustry) -[League Sandbox](game_eggs/leaguesandbox) - [Minetest](game_eggs/minetest) (including MTG) * [Minetest](game_eggs/minetest/minetest) @@ -142,9 +146,9 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Airplane](game_eggs/minecraft/java/airplane) * [Cuberite](game_eggs/minecraft/java/cuberite) * [Fabric](game_eggs/minecraft/java/fabric) - * [Feather](game_eggs/minecraft/java/feather) - * [Feed The Beast](game_eggs/minecraft/java/ftb) - * [Forge](game_eggs/minecraft/java/forge) + * [Feather](game_eggs/minecraft/java/feather) + * [Feed The Beast](game_eggs/minecraft/java/ftb) + * [Forge](game_eggs/minecraft/java/forge) * [Glowstone](game_eggs/minecraft/java/glowstone) * [Magma](game_eggs/minecraft/java/magma) * [Mohist](game_eggs/minecraft/java/mohist) @@ -194,6 +198,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Assetto Corsa](game_eggs/steamcmd_servers/assetto_corsa) * [Avorion](game_eggs/steamcmd_servers/avorion) * [Barotrauma](game_eggs/steamcmd_servers/barotrauma) +* [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) * [Craftopia](game_eggs/steamcmd_servers/craftopia) @@ -213,6 +218,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [Mordhau](game_eggs/steamcmd_servers/mordhau) * [No More Room in Hell](game_eggs/steamcmd_servers/nmrih) * [Onset](game_eggs/steamcmd_servers/onset) +* [Open Fortress](game_eggs/steamcmd_servers/open_fortress) * [Pavlov VR](game_eggs/steamcmd_servers/pavlov_vr) * [PixARK](game_eggs/steamcmd_servers/pixark) * [Post Scriptum](game_eggs/steamcmd_servers/post_scriptum) @@ -255,6 +261,7 @@ If you are reading this it looks like you are looking to add an egg to your serv * [TShock](game_eggs/terraria/tshock) [Tycoon Games](game_eggs/tycoon_games) + * [OpenRCT2](game_eggs/tycoon_games/openrct2) * [OpenTTD](game_eggs/tycoon_games/openttd) @@ -270,6 +277,10 @@ If you are reading this it looks like you are looking to add an egg to your serv ## [Monitoring](/monitoring/) +### Loki + +* [Loki](/monitoring/loki) + ### Prometheus * [Prometheus](/monitoring/prometheus) @@ -302,13 +313,19 @@ If you are reading this it looks like you are looking to add an egg to your serv * [haste-server](/software/haste-server) +### Owncast + +* [owncast](/software/owncast) + ### RabbitMQ * [rabbitmq](/software/rabbitmq) -### 5e Tools -* [5e Tools](/software/5e-tools) - ### Reposilite * [Reposilite](/software/reposilite) + +### 5e Tools + +* [5e Tools](/software/5e-tools) + diff --git a/bots/discord/discord.js/egg-discord-js-generic.json b/bots/discord/discord.js/egg-discord-js-generic.json index 3085b663..dd8ce583 100644 --- a/bots/discord/discord.js/egg-discord-js-generic.json +++ b/bots/discord/discord.js/egg-discord-js-generic.json @@ -10,6 +10,7 @@ "description": "a generic discord js bot egg\r\n\r\nThis will clone a git repo for a bot. it defaults to master if no branch is specified.\r\n\r\nInstalls the node_modules on install. If you set user_upload then I assume you know what you are doing.", "features": null, "images": [ + "ghcr.io\/parkervcp\/yolks:nodejs_18", "ghcr.io\/parkervcp\/yolks:nodejs_17", "ghcr.io\/parkervcp\/yolks:nodejs_16", "ghcr.io\/parkervcp\/yolks:nodejs_15", diff --git a/bots/discord/discord.rs/README.md b/bots/discord/discord.rs/README.md new file mode 100644 index 00000000..5e9499f7 --- /dev/null +++ b/bots/discord/discord.rs/README.md @@ -0,0 +1,3 @@ +# discord.rs generic + +This egg is designed to run any generic Rust application with cargo, allowing users to pull their own Rust discord bot from a GitHub repository. diff --git a/bots/discord/discord.rs/egg-discord-rs-generic.json b/bots/discord/discord.rs/egg-discord-rs-generic.json new file mode 100644 index 00000000..2457cfa5 --- /dev/null +++ b/bots/discord/discord.rs/egg-discord-rs-generic.json @@ -0,0 +1,89 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "exported_at": "2022-04-17T16:56:51+01:00", + "name": "discord.rs generic", + "author": "ethan.coward@icloud.com", + "description": "Creates a container that runs rust with cargo.", + "features": null, + "images": [ + "ghcr.io\/parkervcp\/yolks:rust_1.31", + "ghcr.io\/parkervcp\/yolks:rust_1.56", + "ghcr.io\/parkervcp\/yolks:rust_1.60", + "ghcr.io\/parkervcp\/yolks:rust_latest" + ], + "file_denylist": [], + "startup": "if [[ -d .git ]] && [[ {{AUTO_UPDATE}} == \"1\" ]]; then git pull; fi; cargo run --release", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": [\r\n \"Finished\"\r\n ]\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# Rust Bot Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\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\n\r\nfi\r\n\r\nexport HOME=\/mnt\/server\r\n\r\necho -e \"install complete\"\r\nexit 0", + "container": "debian:buster-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Git Repo Address", + "description": "Git 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" + }, + { + "name": "Git Branch", + "description": "What branch to pull from github.\r\n\r\nDefault is blank to pull the repo default branch", + "env_variable": "BRANCH", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "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" + }, + { + "name": "Git Username", + "description": "Username to auth with git.", + "env_variable": "USERNAME", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + }, + { + "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" + }, + { + "name": "Bot Token", + "description": "The discord token used to run your bot. Sets to the environment variable `DISCORD_TOKEN`\r\n\r\nAlternatively, you can use a .env file", + "env_variable": "DISCORD_TOKEN", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string" + } + ] +} diff --git a/bots/teamspeak3/jts3servermod/egg-j-t-s3-server-mod.json b/bots/teamspeak3/jts3servermod/egg-j-t-s3-server-mod.json index 8bdf21d3..ec7cda59 100644 --- a/bots/teamspeak3/jts3servermod/egg-j-t-s3-server-mod.json +++ b/bots/teamspeak3/jts3servermod/egg-j-t-s3-server-mod.json @@ -1,36 +1,42 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1" + "version": "PTDL_v2", + "update_url": null }, - "exported_at": "2019-01-11T00:40:33+01:00", + "exported_at": "2022-07-03T18:18:04-04:00", "name": "JTS3ServerMod", "author": "teamwuffy@gmail.com", "description": "Setup:\r\n- Install the latest version\r\n- Go into config\/server1 and edit JTS3ServerMod_server.cfg\r\n- Save and start the server\r\n\r\nAuthor: https:\/\/www.stefan1200.de\/forum\/index.php?topic=2.0", - "image": "quay.io\/pterodactyl\/core:java", - "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar .\/JTS3ServerMod.jar", + "features": null, + "docker_images": { + "ghcr.io\/pterodactyl\/yolks:java_8": "ghcr.io\/pterodactyl\/yolks:java_8" + }, + "file_denylist": [], + "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar JTS3ServerMod.jar", "config": { "files": "{}", - "startup": "{\r\n \"done\": \"Successful connected to \",\r\n \"userInteraction\": []\r\n}", - "logs": "{\r\n \"custom\": false,\r\n \"location\": \"logs\/latest.log\"\r\n}", + "startup": "{\r\n \"done\": \"Successful connected to \"\r\n}", + "logs": "{}", "stop": "^C" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# JTS3ServerMod\r\n#\r\n# Server Files: \/mnt\/server\r\napt -y update\r\napt -y install wget unzip\r\n\r\ncd \/tmp\r\n\r\nif [ -z \"$SERVER_VERSION\" ] || [ \"$SERVER_VERSION\" == \"latest\" ]; then\r\n wget -q -O JTS3ServerMod.zip 'https:\/\/www.stefan1200.de\/dlrequest.php?file=jts3servermod&type=.zip'\r\nelse\r\n wget -q -O JTS3ServerMod.zip 'https:\/\/www.stefan1200.de\/downloads\/JTS3ServerMod_$SERVER_VERSION.zip'\r\nfi\r\n\r\nunzip JTS3ServerMod.zip\r\n\r\nmkdir -p \/mnt\/server\r\nexport HOME=\/mnt\/server\r\n\r\nmv \/tmp\/JTS3ServerMod\/* \/mnt\/server\/", - "container": "ubuntu:18.04", + "script": "#!\/bin\/bash\r\n# JTS3ServerMod\r\n#\r\n# Server Files: \/mnt\/server\r\n# All required packages are installed in the used install image ghcr.io\/parkervcp\/installers:debian\r\n\r\nexport HOME=\/mnt\/server\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ -z \"$SERVER_VERSION\" ] || [ \"$SERVER_VERSION\" == \"latest\" ]; then\r\n echo -e \"Downloading latest version with curl -L \"https:\/\/www.stefan1200.de\/dlrequest.php?file=jts3servermod &\r\n type=.zip\" -o JTS3ServerMod.zip\"\r\n curl -L \"https:\/\/www.stefan1200.de\/dlrequest.php?file=jts3servermod&type=.zip\" -o JTS3ServerMod.zip\r\nelse\r\n echo -e \"running curl -L \"https:\/\/www.stefan1200.de\/downloads\/JTS3ServerMod_$SERVER_VERSION.zip\" -o JTS3ServerMod.zip\"\r\n curl -L \"https:\/\/www.stefan1200.de\/downloads\/JTS3ServerMod_$SERVER_VERSION.zip\" -o JTS3ServerMod.zip\r\nfi\r\n\r\n# no need to continue if we don't have an archive\r\nif [ ! -f JTS3ServerMod.zip ]; then\r\n echo \"JTS3ServerMod.zip not found. Something went wrong. Exiting\"\r\n exit 2\r\nfi\r\n\r\nunzip JTS3ServerMod.zip\r\nrm JTS3ServerMod.zip JTS3ServerMod-Windows.exe JTS3ServerMod-Windows_NoWindow.exe jts3servermod_startscript.sh\r\necho -e \"Installation completed.\\nConfiguration of the server must be done in the config folder to proceed.\"", + "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } }, "variables": [ { "name": "Version", - "description": "", + "description": "Version to download. Use latest to install latest version", "env_variable": "SERVER_VERSION", "default_value": "latest", - "user_viewable": 1, - "user_editable": 1, - "rules": "required|string|max:20" + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20", + "field_type": "text" } ] -} +} diff --git a/bots/twitch/phantombot/README.md b/bots/twitch/phantombot/README.md index ab9e186f..5055ed09 100644 --- a/bots/twitch/phantombot/README.md +++ b/bots/twitch/phantombot/README.md @@ -1,6 +1,6 @@ # PhantomBot -[WebSite](https://phantombot.github.io/PhantomBot/) +[Website](https://phantombot.github.io/PhantomBot/) [GitHub](https://github.com/phantombot/PhantomBot) PhantomBot is an actively developed open source interactive Twitch bot with a vibrant community that provides entertainment and moderation for your channel, allowing you to focus on what matters the most to you - your game and your viewers. diff --git a/database/redis/redis-5/egg-redis.json b/database/redis/redis-5/egg-redis-5.json similarity index 78% rename from database/redis/redis-5/egg-redis.json rename to database/redis/redis-5/egg-redis-5.json index 6ac93d66..440ace5f 100644 --- a/database/redis/redis-5/egg-redis.json +++ b/database/redis/redis-5/egg-redis-5.json @@ -1,13 +1,18 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1" + "version": "PTDL_v2", + "update_url": null }, - "exported_at": "2020-03-04T11:05:29-05:00", + "exported_at": "2022-07-11T13:17:43+02:00", "name": "Redis", "author": "parker@parkervcp.com", "description": "Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams.", - "image": "quay.io\/parkervcp\/pterodactyl-images:db_redis", + "features": null, + "docker_images": { + "ghcr.io\/parkervcp\/yolks:redis_5": "ghcr.io\/parkervcp\/yolks:redis_5" + }, + "file_denylist": [], "startup": "redis-server --bind 0.0.0.0 --port {{SERVER_PORT}} --requirepass {{SERVER_PASSWORD}} --maxmemory {{SERVER_MEMORY}}mb --daemonize yes && redis-cli -p {{SERVER_PORT}} -a {{SERVER_PASSWORD}} && redis-cli -p {{SERVER_PORT}} -a {{SERVER_PASSWORD}} shutdown save", "config": { "files": "{}", @@ -28,9 +33,10 @@ "description": "The password redis should use to secure the server.", "env_variable": "SERVER_PASSWORD", "default_value": "P@55w0rd", - "user_viewable": 1, - "user_editable": 1, - "rules": "required|string" + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" } ] -} \ No newline at end of file +} diff --git a/database/redis/redis-6/egg-redis-6.json b/database/redis/redis-6/egg-redis-6.json index d82fcb0e..ead0ed28 100644 --- a/database/redis/redis-6/egg-redis-6.json +++ b/database/redis/redis-6/egg-redis-6.json @@ -1,13 +1,18 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1" + "version": "PTDL_v2", + "update_url": null }, - "exported_at": "2020-09-28T21:07:40-04:00", + "exported_at": "2022-07-11T13:18:27+02:00", "name": "Redis-6", "author": "parker@parkervcp.com", "description": "Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker. It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geospatial indexes with radius queries and streams.", - "image": "quay.io\/parkervcp\/pterodactyl-images:db_redis-6", + "features": null, + "docker_images": { + "ghcr.io\/parkervcp\/yolks:redis_6": "ghcr.io\/parkervcp\/yolks:redis_6" + }, + "file_denylist": [], "startup": "\/usr\/local\/bin\/redis-server \/home\/container\/redis.conf --save 60 1 --dir \/home\/container\/ --bind 0.0.0.0 --port {{SERVER_PORT}} --requirepass {{SERVER_PASSWORD}} --maxmemory {{SERVER_MEMORY}}mb --daemonize yes && redis-cli -p {{SERVER_PORT}} -a {{SERVER_PASSWORD}}; redis-cli -p {{SERVER_PORT}} -a {{SERVER_PASSWORD}} shutdown save", "config": { "files": "{}", @@ -28,9 +33,10 @@ "description": "The password redis should use to secure the server.", "env_variable": "SERVER_PASSWORD", "default_value": "P@55w0rd", - "user_viewable": 1, - "user_editable": 1, - "rules": "required|string" + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" } ] -} \ No newline at end of file +} diff --git a/game_eggs/README.md b/game_eggs/README.md index 1a62e6e1..aa0e540c 100644 --- a/game_eggs/README.md +++ b/game_eggs/README.md @@ -39,6 +39,8 @@ * GTA * [GTAC](gta/gtac) +[Los Angeles Crimes](losangelescrimes) + [League Sandbox](leaguesandbox) [Mindustry](mindustry) @@ -112,6 +114,7 @@ * [Assetto Corsa](steamcmd_servers/assetto_corsa) * [Avorion](steamcmd_servers/avorion) * [Barotrauma](steamcmd_servers/barotrauma) +* [Black Mesa](steamcmd_servers/black_mesa) * [Citadel: Forged with Fire](steamcmd_servers/citadel) * [Conan Exiles](steamcmd_servers/conan_exiles) * [CryoFall](steamcmd_servers/cryofall) @@ -130,6 +133,7 @@ * [Mordhau](steamcmd_servers/mordhau) * [No More Room in Hell](steamcmd_servers/nmrih) * [Onset](steamcmd_servers/onset) +* [Open Fortress](steamcmd_servers/open_fortress) * [Pavlov VR](steamcmd_servers/pavlov_vr) * [PixARK](steamcmd_servers/pixark) * [Post Scriptum](steamcmd_servers/post_scriptum) diff --git a/game_eggs/among_us/README.md b/game_eggs/among_us/README.md index a87d34a4..7a63dd78 100644 --- a/game_eggs/among_us/README.md +++ b/game_eggs/among_us/README.md @@ -1,5 +1,8 @@ # Among Us +[BetterCrewLink Server](bettercrewlink_server) +This project implements proximity voice chat in Among Us. Everyone in an Among Us lobby with this program running will be able to communicate over voice in-game, with no third-party programs required. + [CrewLink Server](crewlink_server) This project implements proximity voice chat in Among Us. Everyone in an Among Us lobby with this program running will be able to communicate over voice in-game, with no third-party programs required. diff --git a/game_eggs/among_us/bettercrewlink_server/README.md b/game_eggs/among_us/bettercrewlink_server/README.md new file mode 100644 index 00000000..55a4cab3 --- /dev/null +++ b/game_eggs/among_us/bettercrewlink_server/README.md @@ -0,0 +1,15 @@ +# Among Us - BetterCrewLink Server + +## From their [Github](https://github.com/OhMyGuus/BetterCrewLink) + +This project implements proximity voice chat in Among Us. Everyone in an Among Us lobby with this program running will be able to communicate over voice in-game, with no third-party programs required. Spatial audio ensures that you can only hear people close to you. + +## Server Port + +Ports required to run the server in a table format. + +| Port | default (HTTPS enabled) | default (HTTPS disabled) | +|---------|---------|---------| +| Game | 443 | 9736 | + +Default port is 443 if HTTPS is enabled, and 9736 if not. But you can change to any port or domain/ip in the egg diff --git a/game_eggs/among_us/bettercrewlink_server/egg-better-crewlink-server.json b/game_eggs/among_us/bettercrewlink_server/egg-better-crewlink-server.json new file mode 100644 index 00000000..8ffd1b97 --- /dev/null +++ b/game_eggs/among_us/bettercrewlink_server/egg-better-crewlink-server.json @@ -0,0 +1,92 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2022-07-25T23:48:33+02:00", + "name": "BetterCrewlink Server", + "author": "tobiornotto@gmail.com", + "description": "An egg designed to allow support for Proximity Chat in Among Us using BetterCrewLink Server", + "features": null, + "docker_images": { + "ghcr.io\/parkervcp\/yolks:nodejs_12": "ghcr.io\/parkervcp\/yolks:nodejs_12" + }, + "file_denylist": [], + "startup": "yarn start", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \" BetterCrewLink Server started\"\r\n}", + "logs": "{}", + "stop": "^c" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nINSTALL_REPO=\"https:\/\/github.com\/OhMyGuus\/BetterCrewLink-server.git\"\r\necho -e Install repo set to ${INSTALL_REPO}\r\necho -e \"\/mnt\/server is empty.\\ncloning files from repo\"\r\necho -e \"running 'git clone --single-branch --branch ${BRANCH} ${INSTALL_REPO} .'\"\r\ngit clone --single-branch --branch ${BRANCH} ${INSTALL_REPO} .\r\n\r\nif [ -f \/mnt\/server\/package.json ]; then\r\n \/usr\/local\/bin\/yarn install\r\nfi\r\n\r\necho -e \"install complete\"\r\nexit 0", + "container": "node:12-buster-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Github branch", + "description": "Select one of the available BetterCrewLink-server branches. Master per default.", + "env_variable": "BRANCH", + "default_value": "master", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "Domain", + "description": "Domain of your server or ip of your server", + "env_variable": "HOSTNAME", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|max:50", + "field_type": "text" + }, + { + "name": "Server name", + "description": "Specifiy the name of your BetterCrewLink server", + "env_variable": "NAME", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:75", + "field_type": "text" + }, + { + "name": "Use HTTPS", + "description": "Enables https. You must place privkey.pem and fullchain.pem in your CWD.", + "env_variable": "HTTPS", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|max:20", + "field_type": "text" + }, + { + "name": "Path to SSL", + "description": "Alternate path to SSL certificates.", + "env_variable": "SSLPATH", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "nullable|string|max:250", + "field_type": "text" + }, + { + "name": "Port", + "description": "Choose the port your server should run on", + "env_variable": "PORT", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/game_eggs/among_us/impostor_server/egg-among-us--impostor-server.json b/game_eggs/among_us/impostor_server/egg-among-us--impostor-server.json index 0e91ab91..876b4a19 100644 --- a/game_eggs/among_us/impostor_server/egg-among-us--impostor-server.json +++ b/game_eggs/among_us/impostor_server/egg-among-us--impostor-server.json @@ -7,10 +7,10 @@ "exported_at": "2021-07-23T12:00:05+03:00", "name": "Among Us - Impostor Server", "author": "info@goover.de", - "description": "Impostor is one of the first Among Us private servers, written in C#.\r\n\r\nThe latest version supported is 2020.9.22, both desktop and mobile.\r\n\r\nThere are no special features at this moment, the goal is aiming to be as close as possible to the real server, for now. In a later stage, making modifications to game logic by modifying GameData packets can be looked at.", + "description": "Impostor is one of the first Among Us private servers, written in C#.\r\n\r\nThe latest version supported is 2022.4.19, both desktop and mobile.\r\n\r\nThere are no special features at this moment, the goal is aiming to be as close as possible to the real server, for now. In a later stage, making modifications to game logic by modifying GameData packets can be looked at.", "features": null, "images": [ - "quay.io\/parkervcp\/pterodactyl-images:debian_dotnet-5" + "ghcr.io/parkervcp/yolks:dotnet_6" ], "file_denylist": [], "startup": ".\/Impostor.Server", @@ -38,4 +38,4 @@ "rules": "required|string|max:30" } ] -} \ No newline at end of file +} diff --git a/game_eggs/beamng/beammp/beammp.json b/game_eggs/beamng/beammp/beammp.json index 83c088a5..40eb5fd4 100644 --- a/game_eggs/beamng/beammp/beammp.json +++ b/game_eggs/beamng/beammp/beammp.json @@ -7,7 +7,7 @@ "exported_at": "2021-12-22T09:10:34+00:00", "name": "BeamMP Servers", "author": "noah@noahserver.online", - "description": "This is the server for the multiplayer mod BeamMP for the game BeamNG.drive. The server is the point throug which all clients communicate. You can write lua mods for the server, detailed instructions on the BeamMP Wiki.", + "description": "This is the server for the multiplayer mod BeamMP for the game BeamNG.drive. The server is the point through which all clients communicate. You can write lua mods for the server, detailed instructions on the BeamMP Wiki.", "features": null, "images": [ "ghcr.io\/parkervcp\/yolks:debian" @@ -15,45 +15,81 @@ "file_denylist": [], "startup": ".\/BeamMP-Server", "config": { - "files": "{\r\n \"Server.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"MaxPlayers\": \"MaxPlayers = {{server.build.env.MAX_PLAYER}}\",\r\n \"Port\": \"Port = {{server.build.default.port}}\",\r\n \"AuthKey =\": \"AuthKey = \\\"{{env.AUTH}}\\\"\"\r\n }\r\n }\r\n}", + "files": "{\r\n \"ServerConfig.toml\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"Name =\": \"Name = \\\"{{env.NAME}}\\\"\",\r\n \"Port =\": \"Port = {{server.build.default.port}}\",\r\n \"AuthKey =\": \"AuthKey = \\\"{{env.AUTHKEY}}\\\"\",\r\n \"Private =\": \"Private = {{env.PRIVATE}}\",\r\n \"MaxPlayers =\": \"MaxPlayers = {{server.build.env.MAX_PLAYERS}}\",\r\n \"Description =\": \"Description = \\\"{{env.NAME}}\\\"\",\r\n \"MaxCars =\": \"MaxCars = {{env.MAX_CARS}}\",\r\n \"Map =\": \"Map = \\\"{{env.MAP}}\\\"\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"[INFO] Vehicle data network online\"\r\n}", "logs": "{}", "stop": "^C" }, "scripts": { "installation": { - "script": "mkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nrm -f BeamMP-Server\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/BeamMP\/BeamMP-Server\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/BeamMP\/BeamMP-Server\/releases\")\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n echo -e \"Using latest version\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i Server-linux)\r\nelse\r\n echo -e \"Chosen version :${VERSION}. Verifying version from releases\"\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i Server-linux)\r\n else\r\n echo -e \"No valid versions found. Defaulting to the latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\necho -e \"Running curl -sSL ${DOWNLOAD_URL} -o BeamMP-Server\"\r\ncurl -L ${DOWNLOAD_URL} -o BeamMP-Server\r\nchmod +x BeamMP-Server\r\n\r\necho \"# This is the BeamMP Server Configuration File v0.60\r\nDebug = false # true or false to enable debug console output\r\nPrivate = true # Private?\r\nPort = 30814 # Port to run the server on UDP and TCP\r\nCars = 1 # Max cars for every player\r\nMaxPlayers = 10 # Maximum Amount of Clients\r\nMap = \\\"\/levels\/gridmap\/info.json\\\" # Default Map\r\nName = \\\"BeamMP New Server\\\" # Server Name\r\nDesc = \\\"BeamMP Default Description\\\" # Server Description\r\nuse = \\\"Resources\\\" # Resource file name\r\nAuthKey = \\\"\\\" # Auth Key\" > Server.cfg", + "script": "#Create the server directory\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\n#Remove any old versions\r\nrm -f BeamMP-Server\r\n\r\n#Check for latest release & download URLs\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/BeamMP\/BeamMP-Server\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/BeamMP\/BeamMP-Server\/releases\")\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n echo -e \"Using latest BeamMP server version\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i Server-linux)\r\nelse\r\n echo -e \"Chosen version :${VERSION}. Verifying version from releases\"\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i Server-linux)\r\n else\r\n echo -e \"No valid versions found. Defaulting to the latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\n#Download the BeamMP server binary\r\necho -e \"Running curl -sSL ${DOWNLOAD_URL} -o BeamMP-Server\"\r\ncurl -L ${DOWNLOAD_URL} -o BeamMP-Server\r\nchmod +x BeamMP-Server\r\n\r\n#Create a default configuration file\r\necho \"[HTTP]\r\n# Recommended to keep enabled. With SSL the server will serve https and requires valid key and cert files\r\nUseSSL = true\r\n# Enables the internal HTTP server\r\nHTTPServerEnabled = false\r\nSSLKeyPath = \\\".\/.ssl\/HttpServer\/key.pem\\\"\r\nHTTPServerPort = 8080\r\nSSLCertPath = \\\".\/.ssl\/HttpServer\/cert.pem\\\"\r\n\r\n[General]\r\n# If SendErrors is `true`, the server will send helpful info about crashes and other issues back to the BeamMP developers. This info may include your config, who is on your server at the time of the error, and similar general information. This kind of data is vital in helping us diagnose and fix issues faster. This has no impact on server performance. You can opt-out of this system by setting this to `false`\r\nSendErrorsShowMessage = true\r\nName = \\\"BeamMP Server\\\"\r\nPort = 30814\r\nResourceFolder = \\\"Resources\\\"\r\n# AuthKey has to be filled out in order to run the server\r\nAuthKey = \\\"\\\"\r\nPrivate = true\r\nMaxPlayers = 10\r\nDebug = false\r\nDescription = \\\"BeamMP Default Description\\\"\r\nMaxCars = 1\r\nMap = \\\"\/levels\/gridmap_v2\/info.json\\\"\r\n# You can turn on\/off the SendErrors message you get on startup here\r\nSendErrors = true\" > ServerConfig.toml", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } }, "variables": [ { - "name": "Version to install", - "description": "Latest or invalid versions would default to latest. See all versions visit https:\/\/github.com\/BeamMP\/BeamMP-Server\/releases", + "name": "Server Name", + "description": "The name of your server. This is what appears on the server list.", + "env_variable": "NAME", + "default_value": "BeamMP Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:64" + }, + { + "name": "BeamMP Server Version", + "description": "The BeamMP server version to be installed. Latest or invalid versions will default to latest. See all available versions at https:\/\/github.com\/BeamMP\/BeamMP-Server\/releases", "env_variable": "VERSION", "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:32" + "rules": "required|string|max:8" }, { "name": "Authentication Key", - "description": "BeamMP Server Key (https:\/\/beamng-mp.com\/k\/keys)", - "env_variable": "AUTH", + "description": "The authentication key for your server. A key can be obtained from the BeamMP keymaster at https:\/\/beamng-mp.com\/k\/dashboard", + "env_variable": "AUTHKEY", "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:50" + "rules": "required|string|max:64" }, { "name": "Max Players", - "description": "The maximum number of allowed players", - "env_variable": "MAX_PLAYER", + "description": "The maximum number of players allowed on the server.", + "env_variable": "MAX_PLAYERS", "default_value": "6", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:32" + "rules": "required|integer|max:100" + }, + { + "name": "Private", + "description": "Should the server be private?", + "env_variable": "PRIVATE", + "default_value": "false", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "Max Cars", + "description": "The maximum number of cars allowed to be spawned per player.", + "env_variable": "MAX_CARS", + "default_value": "1", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|max:4" + }, + { + "name": "Map", + "description": "The map for your server. Stock maps are listed below.\r\n\r\n\/levels\/gridmap_v2\/info.json\r\n\/levels\/automation_test_track\/info.json\r\n\/levels\/east_coast_usa\/info.json\r\n\/levels\/hirochi_raceway\/info.json\r\n\/levels\/italy\/info.json\r\n\/levels\/jungle_rock_island\/info.json\r\n\/levels\/industrial\/info.json\r\n\/levels\/small_island\/info.json\r\n\/levels\/smallgrid\/info.json\r\n\/levels\/utah\/info.json\r\n\/levels\/west_coast_usa\/info.json\r\n\/levels\/driver_training\/info.json\r\n\/levels\/derby\/info.json", + "env_variable": "MAP", + "default_value": "\/levels\/gridmap_v2\/info.json", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:64" } ] -} +} \ No newline at end of file diff --git a/game_eggs/gta/altv/egg-alt--v.json b/game_eggs/gta/altv/egg-alt--v.json index 5052a307..ef127936 100644 --- a/game_eggs/gta/altv/egg-alt--v.json +++ b/game_eggs/gta/altv/egg-alt--v.json @@ -1,19 +1,19 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2021-01-31T13:27:52+00:00", + "exported_at": "2022-07-20T17:34:40+02:00", "name": "alt:V", "author": "parker@parkervcp.com", "description": "alt:V Multiplayer a third-party multiplayer modification for Grand Theft Auto: V", "features": null, - "images": [ - "quay.io\/parkervcp\/pterodactyl-images:game_altv" - ], - "file_denylist": "", - "startup": "chmod +x .\/altv-server && .\/altv-server", + "docker_images": { + "ghcr.io\/parkervcp\/games:altv": "ghcr.io\/parkervcp\/games:altv" + }, + "file_denylist": [], + "startup": ".\/altv-server", "config": { "files": "{\r\n \"server.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"host:\": \"host: 0.0.0.0\",\r\n \"port:\": \"port: {{server.build.default.port}}\",\r\n \"password:\": \"password: {{server.build.env.PASSWORD}}\",\r\n \"description:\": \"description: {{server.build.env.SERVER_DESC}}\"\r\n }\r\n },\r\n \"update.cfg\": {\r\n \"parser\": \"json\",\r\n \"find\": {\r\n \"branch\": \"{{server.build.env.BUILD}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Server started\"\r\n}", @@ -22,7 +22,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n#\r\n# Script Name: update.sh\r\n#\r\n# Author: Lhoerion\r\n#\r\n# Description: The following script compares SHA-1 hashes of remote and local alt:V files. If local file is missing or outdated, script automatically downloads it to script directory.\r\n# Old files are preserved as *.old. Script also keep track of current branch and build. Server start script gets created if missing.\r\n#\r\n# Run Information: This script is run manually.\r\n# Dependencies: coreutils, wget, >=jq_1.4, pcregrep\r\n#\r\n\r\napt update\r\napt install -y libatomic1 zip unzip jq curl wget libc-bin\r\ncd \/mnt\/server\r\n\r\nnoBackup=false\r\nnoLogFile=false\r\ndryRun=false\r\nsilent=false\r\nfor arg in \"$@\"\r\ndo\r\n if [ $arg = '--no-logfile' ]; then\r\n noLogFile=true\r\n elif [ $arg = '--no-backup' ]; then\r\n noBackup=true\r\n elif [ $arg = '--dry-run' ]; then\r\n dryRun=true\r\n elif [ $arg = '--silent' ]; then\r\n silent=true\r\n fi\r\ndone\r\nfiles=()\r\nprintAndLog() {\r\n if [[ \"$silent\" == false ]]; then\r\n outFd=1\r\n else\r\n exec {outFd}>\/dev\/null\r\n fi\r\n if [ \"$2\" = 'ERR' ]; then\r\n printf \"\\e[91m[$(date +%T)][Error] $1\\e[39m\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n elif [ \"$2\" = 'WARN' ]; then\r\n printf \"\\e[93m[$(date +%T)][Warning] $1\\e[39m\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n elif [ \"$2\" = 'APP' ]; then\r\n printf \"$1\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n else\r\n printf \"[$(date +%T)] $1\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n fi\r\n}\r\nsemVerCmp() {\r\n declare -r \"semVerRegex=^(0|[1-9]\\d*)(?:\\.(0|[1-9]\\d*))?\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$\"\r\n local matchA=(${1##v})\r\n local matchB=(${2##v})\r\n for i in {1..5}\r\n do\r\n matchA+=(`echo ${1##v} | pcregrep \"-o$i\" $semVerRegex`)\r\n matchB+=(`echo ${2##v} | pcregrep \"-o$i\" $semVerRegex`)\r\n done\r\n if [ ${1##v} == ${2##v} ]; then\r\n echo 0 && return 0\r\n fi\r\n if [ \\( -z $matchA[4] \\) -a \\( ! -z $matchB[4] \\) ]; then\r\n echo 1 && return 0\r\n elif [ \\( ! -z $matchA[4] \\) -a \\( -z $matchB[4] \\) ]; then\r\n echo -1 && return 0\r\n fi\r\n local i=0\r\n for a in ${matchA[@]}\r\n do\r\n local b=\"${matchB[$i]}\"\r\n if [ \\( $i -eq 2 \\) -a \\( \\( -z $a \\) -o \\( -z $b \\) \\) ]; then\r\n continue\r\n fi\r\n if [[ $a > $b ]]; then\r\n echo 1 && return 0\r\n elif [[ $a < $b ]]; then\r\n echo -1 && return 0\r\n fi\r\n i=$((i + 1))\r\n done\r\n echo 0 && return 0\r\n}\r\nfetchUpdateData() {\r\n updateData=$(curl -s \"https:\/\/cdn.altv.mp\/server\/$localBranch\/x64_linux\/update.json\" -A 'AltPublicAgent')\r\n echo $updateData | jq -e '.' >\/dev\/null 2>&1\r\n if [ $? -ne 0 ]; then\r\n printAndLog \"Failed to check for update, try again later\\n\" 'ERR'\r\n exit 1\r\n fi\r\n str='. | to_entries | map(if .key==\"hashList\" then {\"key\":.key} + {\"value\":(.value | to_entries | map(. + {\"value\":[.value, \"%s\"]}) | from_entries)} else . end) | from_entries'\r\n local updateTmp=($(mktemp '\/tmp\/update.sh.XXX'))\r\n echo '{}' > ${updateTmp[0]}\r\n echo $updateData | jq -c \"$(printf \"$str\" 'server')\" > ${updateTmp[0]}\r\n for (( i=0; i < ${#modules[@]}; i++ ))\r\n do\r\n if [[ \"${modules[$i]}\" == 'csharp-module' ]]; then\r\n modules[$i]='coreclr-module'\r\n fi\r\n local moduleName=${modules[$i]}\r\n updateData=$(curl -s \"https:\/\/cdn.altv.mp\/$moduleName\/$localBranch\/x64_linux\/update.json\" -A 'AltPublicAgent')\r\n echo $updateData | jq -e '.' >\/dev\/null 2>&1\r\n if [ $? -ne 0 ]; then\r\n printAndLog \"Failed to check for $moduleName update\\n\" 'WARN'\r\n else\r\n if [[ \"$moduleName\" == 'csharp-module' ]]; then\r\n if [[ $(echo $updateData | jq -c '.hashList | has(\"AltV.Net.Host.dll\")') == false ]]; then\r\n updateData=$(echo $updateData | jq '.hashList |= . + {\"AltV.Net.Host.dll\":\"'$(printf \"%0.s0\" {1..40})'\"}')\r\n updateData=$(echo $updateData | jq '.hashList |= . + {\"AltV.Net.Host.runtimeconfig.json\":\"'$(printf \"%0.s0\" {1..40})'\"}')\r\n fi\r\n if [[ $(echo $updateData | jq -c '.hashList | has(\"modules\/libcsharp-module.so\")') == false ]]; then\r\n updateData=$(echo $updateData | jq '.hashList |= . + {\"modules\/libcsharp-module.so\":\"'$(printf \"%0.s0\" {1..40})'\"}')\r\n fi\r\n fi\r\n updateTmp+=($(mktemp '\/tmp\/update.sh.XXX'))\r\n echo '{}' > \"${updateTmp[${#updateTmp[@]} - 1]}\"\r\n echo $updateData | jq -c \"$(printf \"$str\" \"$moduleName\")\" > \"${updateTmp[${#updateTmp[@]} - 1]}\"\r\n fi\r\n done\r\n updateData=$(jq -s '.[0].latestBuildNumber as $b | .[0].version as $c | reduce .[] as $x ({}; . * $x) | .latestBuildNumber=$b | .version=$c' ${updateTmp[@]})\r\n remoteBuild=\"$(echo \"$updateData\" | jq -r '.latestBuildNumber')\"\r\n [[ $remoteBuild -eq -1 ]] && remoteBuild=$(echo \"$updateData\" | jq -r '.version')\r\n}\r\nvalidateFiles() {\r\n files=()\r\n for file in $(echo $updateData | jq -r '.hashList | keys[]')\r\n do\r\n if [[ ! -e \"$file\" || $(sha1sum \"$file\" | awk '{print $1}') != \"$(echo \"$updateData\" | jq -r \".hashList.\\\"$file\\\"[0]\")\" ]]; then\r\n files+=(\"$file\")\r\n fi\r\n done\r\n if [ ! -e 'server.cfg' ]; then\r\n printAndLog \"Server file server.cfg not found, creating one . . . \"\r\n if [[ \"$dryRun\" == false ]]; then\r\n printf 'name: \"alt:V Server\"\\nhost: 0.0.0.0\\nport: 7788\\nplayers: 128\\n#password: ultra-password\\nannounce: false\\n#token: YOUR_TOKEN\\ngamemode: Freeroam\\nwebsite: example.com\\nlanguage: en\\ndescription: \"alt:V Sample Server\"\\nmodules: [\\n \\n]\\nresources: [\\n \\n]\\n' > 'server.cfg' && printAndLog 'done\\n' 'APP' || printAndLog 'failed\\n' 'APP'\r\n else\r\n printAndLog 'done\\n' 'APP'\r\n fi\r\n fi\r\n if [[ ! $localBuild =~ ^[0-9]+$ || $localBuild -ge 1232 ]]; then\r\n local nodeExist=$([ -e 'libnode.so.72' ] && echo true || echo false)\r\n local moduleExist=$([ -e 'modules\/libnode-module.so' ] && echo true || echo false)\r\n if [[ \"$nodeExist\" == true || \"$moduleExist\" == true ]]; then\r\n printAndLog \"Found old node-module files, removing . . . \"\r\n if [[ \"$dryRun\" == false ]]; then\r\n local result1=true\r\n local result2=true\r\n if [[ \"$nodeExist\" == true ]]; then\r\n rm -f 'libnode.so.72'\r\n result1=$([[ \"$?\" -eq 0 ]] && echo true || echo false)\r\n fi\r\n if [[ \"$moduleExist\" == true ]]; then\r\n rm -f 'modules\/libnode-module.so'\r\n result2=$([[ \"$?\" -eq 0 ]] && echo true || echo false)\r\n fi\r\n if [[ \"$result1\" == true && \"$result2\" == true ]]; then\r\n printAndLog 'done\\n' 'APP'\r\n else\r\n printAndLog 'failed\\n' 'APP'\r\n fi\r\n else\r\n printAndLog 'done\\n' 'APP'\r\n fi\r\n fi\r\n fi\r\n if [ $localBuild != $remoteBuild ]; then\r\n printAndLog \"Server files update is available\\n\"\r\n elif [ \"${#files[@]}\" -ne 0 ]; then\r\n printAndLog \"Server files are invalidated\/corrupted, ${#files[@]} in total\\n\"\r\n else\r\n printAndLog \"Server files are up-to-date, no action required\\n\"\r\n fi\r\n\r\n if [[ \"$dryRun\" == false ]]; then\r\n localBuild=$remoteBuild\r\n modulesTemp=\"\"\r\n for (( i=0; i < ${#modules[@]}; i++ ))\r\n do\r\n modulesTemp+=\"\\\"${modules[$i]}\\\"\"\r\n if [ $(($i + 1)) -ne ${#modules[@]} ]; then\r\n modulesTemp+=','\r\n fi\r\n done\r\n if [[ $localBuild =~ ^[0-9]+$ ]]; then\r\n printf '{\"branch\":\"%s\",\"build\":%d,\"modules\":[%s]}' $localBranch $localBuild $modulesTemp | jq '.' > 'update.cfg'\r\n else\r\n printf '{\"branch\":\"%s\",\"build\":\"%s\",\"modules\":[%s]}' $localBranch $localBuild $modulesTemp | jq '.' > 'update.cfg'\r\n fi\r\n fi\r\n }\r\n downloadFiles() {\r\n if [ \"${#files[@]}\" -eq 0 ]; then\r\n return\r\n fi\r\n for file in ${files[@]}\r\n do\r\n dlType=\"$(echo \"$updateData\" | jq -r \".hashList.\\\"$file\\\"[1]\")\"\r\n outDir=\"$(dirname $file)\"\r\n printAndLog \"Downloading file $file . . . \"\r\n if [[ \"$dryRun\" == false ]]; then\r\n if [[ \"$noBackup\" == false && -e \"$file\" ]]; then\r\n mv \"$file\" \"$file.old\"\r\n fi\r\n if [[ ! -e \"$outDir\/\" ]]; then\r\n mkdir -p \"$outDir\/\"\r\n fi\r\n wget \"https:\/\/cdn.altv.mp\/$dlType\/$localBranch\/x64_linux\/${file}?build=$localBuild\" -U 'AltPublicAgent' -O \"$file\" -N -q && printAndLog 'done\\n' 'APP' || printAndLog 'failed\\n' 'APP'\r\n if [ ! -e \"$file\" ]; then\r\n continue\r\n fi\r\n if [ -e \"$file.old\" ]; then\r\n chmod --reference=\"$file.old\" \"$file\" || printAndLog \"Failed to copy chmod to file $file\\n\" 'ERR'\r\n chmod -x \"$file.old\" || printAndLog \"Failed to remove execution permissions from file $file.old\\n\" 'ERR'\r\n else\r\n chmod +x \"$file\" || printAndLog \"Failed to add execution permissions to file $file\\n\" 'ERR'\r\n fi\r\n else\r\n printAndLog 'done\\n' 'APP'\r\n fi\r\n done\r\n validateFiles\r\n }\r\n\r\n if [ $noLogFile != true ]; then\r\n truncate -s 0 'update.log'\r\n fi\r\n if [[ ( \"$dryRun\" == false ) && ( ! -e 'update.cfg' ) ]]; then\r\n printf '{\"branch\":\"release\",\"modules\":[\"js-module\"]}' | jq '.' > 'update.cfg'\r\n fi\r\n updateCfg=$([[ -e 'update.cfg' ]] && cat 'update.cfg' || printf '{\"branch\":\"release\",\"modules\":[\"js-module\"]}' | jq '.')\r\n localBranch=$(echo \"$updateCfg\" | jq -r '.branch')\r\n [[ ! -n \"$localBranch\" || \"$localBranch\" != 'release' && \"$localBranch\" != 'rc' && \"$localBranch\" != 'dev' ]] && localBranch='release'\r\n modules=($(echo \"$updateCfg\" | jq -r '.modules \/\/ \"\"' | tr -d '[],\"'))\r\n [[ ! -n \"$modules\" ]] && modules=('js-module')\r\n fetchUpdateData\r\n localBuild=\"$(echo \"$updateCfg\" | jq -r 'if .build == null then empty else .build end')\"\r\n [[ -z $localBuild || $localBuild == \"-1\" ]] && localBuild=$remoteBuild\r\n printAndLog \"Current version: $localBuild\\n\"\r\n printAndLog \"Latest version: $remoteBuild\\n\"\r\n validateFiles\r\n downloadFiles\r\nchmod +x .\/altv-server\r\necho -e \"install complete\"", + "script": "#!\/bin\/bash\r\n#\r\n# Script Name: update.sh\r\n#\r\n# Author: Lhoerion\r\n#\r\n# Description: The following script compares SHA-1 hashes of remote and local alt:V files. If local file is missing or outdated, script automatically downloads it to script directory.\r\n# Old files are preserved as *.old. Script also keep track of current branch and build. Server start script gets created if missing.\r\n#\r\n# Run Information: This script is run manually.\r\n# Dependencies: coreutils, wget, >=jq_1.4, pcregrep\r\n#\r\n\r\napt update\r\napt install -y libatomic1 zip unzip jq curl wget libc-bin coreutils pcregrep\r\ncd \/mnt\/server\r\n\r\n\r\n#!\/bin\/bash\r\n#\r\n# Script Name: update.sh\r\n#\r\n# Author: Lhoerion\r\n#\r\n# Description: The following script compares SHA-1 hashes of remote and local alt:V files. If local file is missing or outdated, script automatically downloads it to script directory.\r\n# Old files are preserved as *.old. Script also keep track of current branch and build. Server start script gets created if missing.\r\n#\r\n# Run Information: This script is run manually.\r\n# Dependencies: coreutils, wget, >=jq_1.4, pcregrep\r\n#\r\n\r\nnoBackup=false\r\nnoLogFile=false\r\ndryRun=false\r\nsilent=false\r\nfor arg in \"$@\"\r\ndo\r\n if [ $arg = '--no-logfile' ]; then\r\n noLogFile=true\r\n elif [ $arg = '--no-backup' ]; then\r\n noBackup=true\r\n elif [ $arg = '--dry-run' ]; then\r\n dryRun=true\r\n elif [ $arg = '--silent' ]; then\r\n silent=true\r\n fi\r\ndone\r\nfiles=()\r\nprintAndLog() {\r\n if [[ \"$silent\" == false ]]; then\r\n outFd=1\r\n else\r\n exec {outFd}>\/dev\/null\r\n fi\r\n if [ \"$2\" = 'ERR' ]; then\r\n printf \"\\e[91m[$(date +%T)][Error] $1\\e[39m\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n elif [ \"$2\" = 'WARN' ]; then\r\n printf \"\\e[93m[$(date +%T)][Warning] $1\\e[39m\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n elif [ \"$2\" = 'APP' ]; then\r\n printf \"$1\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n else\r\n printf \"[$(date +%T)] $1\" |& ([ $noLogFile != true ] && tee -a 'update.log' >& $outFd || cat)\r\n fi\r\n}\r\nsemVerCmp() {\r\n declare -r \"semVerRegex=^(0|[1-9]\\d*)(?:\\.(0|[1-9]\\d*))?\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$\"\r\n local matchA=(${1##v})\r\n local matchB=(${2##v})\r\n for i in {1..5}\r\n do\r\n matchA+=$(`echo ${1##v} | pcregrep \"-o$i\" $semVerRegex`)\r\n matchB+=$(`echo ${2##v} | pcregrep \"-o$i\" $semVerRegex`)\r\n done\r\n if [ ${1##v} == ${2##v} ]; then\r\n echo 0 && return 0\r\n fi\r\n if [ \\( -z $matchA[4] \\) -a \\( ! -z $matchB[4] \\) ]; then\r\n echo 1 && return 0\r\n elif [ \\( ! -z $matchA[4] \\) -a \\( -z $matchB[4] \\) ]; then\r\n echo -1 && return 0\r\n fi\r\n local i=0\r\n for a in ${matchA[@]}\r\n do\r\n local b=\"${matchB[$i]}\"\r\n if [ \\( $i -eq 2 \\) -a \\( \\( -z $a \\) -o \\( -z $b \\) \\) ]; then\r\n continue\r\n fi\r\n if [[ $a > $b ]]; then\r\n echo 1 && return 0\r\n elif [[ $a < $b ]]; then\r\n echo -1 && return 0\r\n fi\r\n i=$((i + 1))\r\n done\r\n echo 0 && return 0\r\n}\r\ngetFileHash() {\r\n local file=(${1##v})\r\n sha1sum \"$file\" | awk '{print $1}'\r\n}\r\nfetchUpdateData() {\r\n updateData=$(curl -s \"https:\/\/cdn.altv.mp\/server\/$localBranch\/x64_linux\/update.json\" -A 'AltPublicAgent')\r\n echo $updateData | jq -e '.' >\/dev\/null 2>&1\r\n if [ $? -ne 0 ]; then\r\n printAndLog \"Failed to check for update, try again later\\n\" 'ERR'\r\n exit 1\r\n fi\r\n\r\n str='. | to_entries | map(if .key==\"hashList\" then {\"key\":.key} + {\"value\":(.value | to_entries | map(. + {\"value\":[.value, \"%s\"]}) | from_entries)} else . end) | from_entries'\r\n \r\n local updateTmp=($(mktemp '\/tmp\/update.sh.XXX'))\r\n\r\n echo '{}' > ${updateTmp[0]}\r\n echo $updateData | jq -c \"$(printf \"$str\" 'server')\" > ${updateTmp[0]}\r\n\r\n updateData=$(curl -s \"https:\/\/cdn.altv.mp\/data\/$localBranch\/update.json\" -A 'AltPublicAgent')\r\n if [ $? -ne 0 ]; then\r\n printAndLog \"Failed to check for update, try again later\\n\" 'ERR'\r\n exit 1\r\n fi\r\n\r\n updateTmp+=($(mktemp '\/tmp\/update.sh.XXX'))\r\n echo '{}' > \"${updateTmp[${#updateTmp[@]} - 1]}\"\r\n echo $updateData | jq -c \"$(printf \"$str\" 'data')\" > \"${updateTmp[${#updateTmp[@]} - 1]}\"\r\n\r\n for (( i=0; i < ${#modules[@]}; i++ ))\r\n do\r\n if [[ \"${modules[$i]}\" == 'csharp-module' ]]; then\r\n modules[$i]='coreclr-module'\r\n fi\r\n local moduleName=${modules[$i]}\r\n updateData=$(curl -s \"https:\/\/cdn.altv.mp\/$moduleName\/$localBranch\/x64_linux\/update.json\" -A 'AltPublicAgent')\r\n echo $updateData | jq -e '.' >\/dev\/null 2>&1\r\n if [ $? -ne 0 ]; then\r\n printAndLog \"Failed to check for $moduleName update\\n\" 'WARN'\r\n else\r\n updateTmp+=($(mktemp '\/tmp\/update.sh.XXX'))\r\n echo '{}' > \"${updateTmp[${#updateTmp[@]} - 1]}\"\r\n echo $updateData | jq -c \"$(printf \"$str\" \"$moduleName\")\" > \"${updateTmp[${#updateTmp[@]} - 1]}\"\r\n fi\r\n done\r\n updateData=$(jq -s '.[0].latestBuildNumber as $b | .[0].version as $c | reduce .[] as $x ({}; . * $x) | .latestBuildNumber=$b | .version=$c' ${updateTmp[@]})\r\n remoteBuild=\"$(echo \"$updateData\" | jq -r '.latestBuildNumber')\"\r\n [[ $remoteBuild -eq -1 ]] && remoteBuild=$(echo \"$updateData\" | jq -r '.version')\r\n}\r\nvalidateFiles() {\r\n files=()\r\n for file in $(echo $updateData | jq -r '.hashList | keys[]')\r\n do\r\n if [[ ! -e \"$file\" || (\"$(printf \"%0.s0\" {1..40})\" != \"$(echo \"$updateData\" | jq -r \".hashList.\\\"$file\\\"[0]\")\" && $(getFileHash \"$file\") != \"$(echo \"$updateData\" | jq -r \".hashList.\\\"$file\\\"[0]\")\") ]]; then\r\n files+=(\"$file\")\r\n fi\r\n done\r\n if [ ! -e 'server.cfg' ]; then\r\n printAndLog \"Server file server.cfg not found, creating one . . . \"\r\n if [[ \"$dryRun\" == false ]]; then\r\n printf 'name: \"alt:V Server\"\\nhost: 0.0.0.0\\nport: 7788\\nplayers: 128\\n#password: ultra-password\\nannounce: false\\n#token: YOUR_TOKEN\\ngamemode: Freeroam\\nwebsite: example.com\\nlanguage: en\\ndescription: \"alt:V Sample Server\"\\nmodules: [\\n \\n]\\nresources: [\\n \\n]\\n' > 'server.cfg' && printAndLog 'done\\n' 'APP' || printAndLog 'failed\\n' 'APP'\r\n else\r\n printAndLog 'done\\n' 'APP'\r\n fi\r\n fi\r\n if [[ ! $localBuild =~ ^[0-9]+$ || $localBuild -ge 1232 ]]; then\r\n local nodeExist=$([ -e 'libnode.so.72' ] && echo true || echo false)\r\n local moduleExist=$([ -e 'modules\/libnode-module.so' ] && echo true || echo false)\r\n if [[ \"$nodeExist\" == true || \"$moduleExist\" == true ]]; then\r\n printAndLog \"Found old node-module files, removing . . . \"\r\n if [[ \"$dryRun\" == false ]]; then\r\n local result1=true\r\n local result2=true\r\n if [[ \"$nodeExist\" == true ]]; then\r\n rm -f 'libnode.so.72'\r\n result1=$([[ \"$?\" -eq 0 ]] && echo true || echo false)\r\n fi\r\n if [[ \"$moduleExist\" == true ]]; then\r\n rm -f 'modules\/libnode-module.so'\r\n result2=$([[ \"$?\" -eq 0 ]] && echo true || echo false)\r\n fi\r\n if [[ \"$result1\" == true && \"$result2\" == true ]]; then\r\n printAndLog 'done\\n' 'APP'\r\n else\r\n printAndLog 'failed\\n' 'APP'\r\n fi\r\n else\r\n printAndLog 'done\\n' 'APP'\r\n fi\r\n fi\r\n fi\r\n if [ $localBuild != $remoteBuild ]; then\r\n printAndLog \"Server files update is available\\n\"\r\n elif [ \"${#files[@]}\" -ne 0 ]; then\r\n printAndLog \"Server files are invalidated\/corrupted, ${#files[@]} in total\\n\"\r\n else\r\n printAndLog \"Server files are up-to-date, no action required\\n\"\r\n fi\r\n\r\n if [[ \"$dryRun\" == false ]]; then\r\n localBuild=$remoteBuild\r\n modulesTemp=\"\"\r\n for (( i=0; i < ${#modules[@]}; i++ ))\r\n do\r\n modulesTemp+=\"\\\"${modules[$i]}\\\"\"\r\n if [ $(($i + 1)) -ne ${#modules[@]} ]; then\r\n modulesTemp+=','\r\n fi\r\n done\r\n if [[ $localBuild =~ ^[0-9]+$ ]]; then\r\n printf '{\"branch\":\"%s\",\"build\":%d,\"modules\":[%s]}' $localBranch $localBuild $modulesTemp | jq '.' > 'update.cfg'\r\n else\r\n printf '{\"branch\":\"%s\",\"build\":\"%s\",\"modules\":[%s]}' $localBranch $localBuild $modulesTemp | jq '.' > 'update.cfg'\r\n fi\r\n fi\r\n}\r\ndownloadFiles() {\r\n if [ \"${#files[@]}\" -eq 0 ]; then\r\n return\r\n fi\r\n for file in ${files[@]}\r\n do\r\n dlType=\"$(echo \"$updateData\" | jq -r \".hashList.\\\"$file\\\"[1]\")\"\r\n platform=$([ \"$dlType\" == \"data\" ] && echo \"\" || echo \"x64_linux\/\")\r\n updateData=\"$(echo $updateData | jq -r '.hashList.\"altv-server\"[1] = \"server\"')\"\r\n outDir=\"$(dirname $file)\"\r\n printAndLog \"Downloading file $file . . . \"\r\n if [[ \"$dryRun\" == false ]]; then\r\n if [[ \"$noBackup\" == false && -e \"$file\" ]]; then\r\n mv \"$file\" \"$file.old\"\r\n fi\r\n if [[ ! -e \"$outDir\/\" ]]; then\r\n mkdir -p \"$outDir\/\"\r\n fi\r\n\r\n wget \"https:\/\/cdn.altv.mp\/$dlType\/$localBranch\/$platform${file}?build=$localBuild\" -U 'AltPublicAgent' -O \"$file\" -N -q && printAndLog 'done\\n' 'APP' || printAndLog 'failed\\n' 'APP'\r\n if [ ! -e \"$file\" ]; then\r\n continue\r\n fi\r\n if [ -e \"$file.old\" ]; then\r\n chmod --reference=\"$file.old\" \"$file\" || printAndLog \"Failed to copy chmod to file $file\\n\" 'ERR'\r\n chmod -x \"$file.old\" || printAndLog \"Failed to remove execution permissions from file $file.old\\n\" 'ERR'\r\n else\r\n chmod +x \"$file\" || printAndLog \"Failed to add execution permissions to file $file\\n\" 'ERR'\r\n fi\r\n else\r\n printAndLog 'done\\n' 'APP'\r\n fi\r\n done\r\n validateFiles\r\n}\r\n\r\nif [ $noLogFile != true ]; then\r\n truncate -s 0 'update.log'\r\nfi\r\nif [[ ( \"$dryRun\" == false ) && ( ! -e 'update.cfg' ) ]]; then\r\n printf '{\"branch\":\"release\",\"modules\":[\"js-module\"]}' | jq '.' > 'update.cfg'\r\nfi\r\nupdateCfg=$([[ -e 'update.cfg' ]] && cat 'update.cfg' || printf '{\"branch\":\"release\",\"modules\":[\"js-module\"]}' | jq '.')\r\nlocalBranch=$(echo \"$updateCfg\" | jq -r '.branch')\r\n[[ ! -n \"$localBranch\" || \"$localBranch\" != 'release' && \"$localBranch\" != 'rc' && \"$localBranch\" != 'dev' ]] && localBranch='release'\r\nmodules=($(echo \"$updateCfg\" | jq -r '.modules \/\/ \"\"' | tr -d '[],\"'))\r\n[[ ! -n \"$modules\" ]] && modules=('js-module')\r\nfetchUpdateData\r\nlocalBuild=\"$(echo \"$updateCfg\" | jq -r 'if .build == null then empty else .build end')\"\r\n[[ -z $localBuild || $localBuild == \"-1\" ]] && localBuild=$remoteBuild\r\nprintAndLog \"Current version: $localBuild\\n\"\r\nprintAndLog \"Latest version: $remoteBuild\\n\"\r\nvalidateFiles\r\ndownloadFiles\r\n\r\nchmod +x .\/altv-server\r\n\r\ncd \/mnt\/server\/data\r\n\r\nif [ -f \"vehmodels.bin\" ];\r\nthen\r\n echo \"vehmodels.bin found.\"\r\nelse\r\n echo \"vehmodels.bin has not been found, downloading it\"\r\n wget https:\/\/cdn.altv.mp\/data\/${BUILD}\/data\/vehmodels.bin\r\nfi\r\n\r\nif [ -f \"vehmods.bin\" ];\r\nthen\r\n echo \"vehmods.bin found.\"\r\nelse\r\n echo \"vehmods.bin has not been found, downloading it\"\r\n wget https:\/\/cdn.altv.mp\/data\/${BUILD}\/data\/vehmods.bin\r\nfi\r\n\r\nif [ -f \"clothes.bin\" ];\r\nthen\r\n echo \"clothes.bin found.\"\r\nelse\r\n echo \"clothes.bin has not been found, downloading it\"\r\n wget wget https:\/\/cdn.altv.mp\/data\/${BUILD}\/data\/clothes.bin\r\nfi\r\n\r\ncd \/mnt\/server\r\necho -e \"install complete\"", "container": "debian:buster-slim", "entrypoint": "bash" } @@ -35,7 +35,8 @@ "default_value": ".", "user_viewable": false, "user_editable": false, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "Release Branch", @@ -44,7 +45,8 @@ "default_value": "release", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "Server Password", @@ -53,7 +55,8 @@ "default_value": "ChangeMe", "user_viewable": true, "user_editable": true, - "rules": "nullable|string|min:6" + "rules": "nullable|string|min:6", + "field_type": "text" }, { "name": "Server Description", @@ -62,7 +65,8 @@ "default_value": "A Pterodactyl Hosted Server", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" } ] } diff --git a/game_eggs/gta/fivem/README.md b/game_eggs/gta/fivem/README.md index 12f44451..151897eb 100644 --- a/game_eggs/gta/fivem/README.md +++ b/game_eggs/gta/fivem/README.md @@ -5,7 +5,7 @@ Pterodactyl will not be providing support for FiveM. You are free to run a FiveM server but no support will be provided in the Pterodactyl Discord, check the discord annoucement below for details. Worth a read if you plan on running a FiveM server -[Pterodactyl Discord Announcement](https://ptb.discord.com/channels/122900397965705216/124919575534895105/869733533495746560) +[Pterodactyl Discord Announcement](https://discord.com/channels/122900397965705216/124919575534895105/869733533495746560) ## From the [FiveM](https://fivem.net/) Site diff --git a/game_eggs/gta/fivem/egg-five-m.json b/game_eggs/gta/fivem/egg-five-m.json index 142588eb..7d08e922 100644 --- a/game_eggs/gta/fivem/egg-five-m.json +++ b/game_eggs/gta/fivem/egg-five-m.json @@ -1,29 +1,29 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2022-01-11T10:14:56-05:00", + "exported_at": "2022-07-19T11:53:00-04:00", "name": "FiveM", "author": "parker@parkervcp.com", "description": "A new FiveM egg for the latest builds due to recent changes in FiveM", "features": null, - "images": [ - "quay.io\/parkervcp\/pterodactyl-images:base_debian" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, "file_denylist": [], "startup": "$(pwd)\/alpine\/opt\/cfx-server\/ld-musl-x86_64.so.1 --library-path \"$(pwd)\/alpine\/usr\/lib\/v8\/:$(pwd)\/alpine\/lib\/:$(pwd)\/alpine\/usr\/lib\/\" -- $(pwd)\/alpine\/opt\/cfx-server\/FXServer +set citizen_dir $(pwd)\/alpine\/opt\/cfx-server\/citizen\/ +set sv_licenseKey {{FIVEM_LICENSE}} +set steam_webApiKey {{STEAM_WEBAPIKEY}} +set sv_maxplayers {{MAX_PLAYERS}} +set serverProfile default +set txAdminPort {{TXADMIN_PORT}} $( [ \"$TXADMIN_ENABLE\" == \"1\" ] || printf %s '+exec server.cfg' )", "config": { "files": "{\r\n \"server.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"endpoint_add_tcp\": \"endpoint_add_tcp \\\"0.0.0.0:{{server.build.default.port}}\\\"\",\r\n \"endpoint_add_udp\": \"endpoint_add_udp \\\"0.0.0.0:{{server.build.default.port}}\\\"\",\r\n \"sv_hostname\": \"sv_hostname \\\"{{server.build.env.SERVER_HOSTNAME}}\\\"\",\r\n \"set sv_licenseKey\": \"set sv_licenseKey {{server.build.env.FIVEM_LICENSE}}\",\r\n \"set steam_webApiKey\": \"set steam_webApiKey {{server.build.env.STEAM_WEBAPIKEY}}\",\r\n \"sv_maxclients\": \"sv_maxclients {{server.build.env.MAX_PLAYERS}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"succeeded. Welcome!\"\r\n}", - "logs": "{\r\n \"custom\": true,\r\n \"location\": \"logs\/latest.log\"\r\n}", + "logs": "{}", "stop": "quit" }, "scripts": { "installation": { - "script": "#!\/bin\/ash\r\n# FiveM Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update -y\r\napt install -y tar xz-utils curl git file jq\r\n\r\nmkdir -p \/mnt\/server\/resources\r\n\r\ncd \/mnt\/server\r\n\r\necho \"updating citizenfx resource files\"\r\ngit clone https:\/\/github.com\/citizenfx\/cfx-server-data.git \/tmp\r\ncp -Rf \/tmp\/resources\/* resources\/\r\n\r\nRELEASE_PAGE=$(curl -sSL https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/)\r\nCHANGELOGS_PAGE=$(curl -sSL https:\/\/changelogs-live.fivem.net\/api\/changelog\/versions\/linux\/server)\r\n\r\nif [[ \"${FIVEM_VERSION}\" == \"latest\" ]] || [[ -z ${FIVEM_VERSION} ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.latest_download')\r\nelse\r\n VERSION_LINK=$(echo -e \"${RELEASE_PAGE}\" | grep -Eo '\".*\/*.tar.xz\"' | grep -Eo '\".*\"' | sed 's\/\\\"\/\/g' | sed 's\/\\.\\\/\/\/1' | grep ${CFX_VERSION})\r\n if [[ \"${VERSION_LINK}\" == \"\" ]]; then\r\n echo -e \"defaulting to latest as the version requested was invalid.\"\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.latest_download')\r\n else\r\n DOWNLOAD_LINK=$(echo https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/${VERSION_LINK})\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else\r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\necho -e \"Running curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\n\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\necho \"Extracting fivem files\"\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\nrm -rf ${DOWNLOAD_LINK##*\/} run.sh\r\n\r\nif [ -e server.cfg ]; then\r\n echo \"Skipping downloading default server config file as one already exists\"\r\nelse\r\n echo \"Downloading default fivem config\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/gta\/fivem\/server.cfg >>server.cfg\r\nfi\r\n\r\nmkdir -p logs\/\r\n\r\necho \"install complete\"", - "container": "debian:buster-slim", + "script": "#!\/bin\/bash\r\n# FiveM Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update -y\r\napt install -y tar xz-utils file jq\r\n\r\nmkdir -p \/mnt\/server\/resources\r\n\r\ncd \/mnt\/server\r\n\r\necho \"updating citizenfx resource files\"\r\ngit clone https:\/\/github.com\/citizenfx\/cfx-server-data.git \/tmp\r\ncp -Rf \/tmp\/resources\/* resources\/\r\n\r\nRELEASE_PAGE=$(curl -sSL https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/)\r\nCHANGELOGS_PAGE=$(curl -sSL https:\/\/changelogs-live.fivem.net\/api\/changelog\/versions\/linux\/server)\r\n\r\nif [[ \"${FIVEM_VERSION}\" == \"recommended\" ]] || [[ -z ${FIVEM_VERSION} ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.recommended_download')\r\nelif [[ \"${FIVEM_VERSION}\" == \"latest\" ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.latest_download')\r\nelse\r\n VERSION_LINK=$(echo -e \"${RELEASE_PAGE}\" | grep -Eo '\".*\/*.tar.xz\"' | grep -Eo '\".*\"' | sed 's\/\\\"\/\/g' | sed 's\/\\.\\\/\/\/1' | grep ${CFX_VERSION})\r\n if [[ \"${VERSION_LINK}\" == \"\" ]]; then\r\n echo -e \"defaulting to recommedned as the version requested was invalid.\"\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.recommended_download')\r\n else\r\n DOWNLOAD_LINK=$(echo https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/${VERSION_LINK})\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else\r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\necho -e \"Running curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\n\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\necho \"Extracting fivem files\"\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\nrm -rf ${DOWNLOAD_LINK##*\/} run.sh\r\n\r\nif [ -e server.cfg ]; then\r\n echo \"Skipping downloading default server config file as one already exists\"\r\nelse\r\n echo \"Downloading default fivem config\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/gta\/fivem\/server.cfg >>server.cfg\r\nfi\r\n\r\nmkdir -p logs\/\r\n\r\necho \"install complete\"", + "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } }, @@ -35,7 +35,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:33" + "rules": "required|string|max:33", + "field_type": "text" }, { "name": "Max Players", @@ -44,7 +45,8 @@ "default_value": "48", "user_viewable": true, "user_editable": false, - "rules": "required|integer|between:1,48" + "rules": "required|integer|between:1,48", + "field_type": "text" }, { "name": "Server Hostname", @@ -53,16 +55,18 @@ "default_value": "My new FXServer!", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "fivem version", - "description": "The fivem version that is to be installed. Invalid versions will default to latest.\r\n\r\nAn example is `1383-e5ea040353ce1b8bc86e37982bf5d888938e3096`\r\n\r\nYou can get the latest version from here - https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/", + "description": "The fivem version that is to be installed. Invalid versions will default to recommended.\r\n\r\nAn example is `1383-e5ea040353ce1b8bc86e37982bf5d888938e3096`\r\n\r\nYou can get the latest version from here - https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/", "env_variable": "FIVEM_VERSION", - "default_value": "latest", + "default_value": "recommended", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:50" + "rules": "required|string|max:50", + "field_type": "text" }, { "name": "Download Link", @@ -71,7 +75,8 @@ "default_value": "", "user_viewable": false, "user_editable": false, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Steam Web Api Key", @@ -80,7 +85,8 @@ "default_value": "none", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "txAdmin Port", @@ -89,7 +95,8 @@ "default_value": "40120", "user_viewable": true, "user_editable": false, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "Enable txadmin", @@ -98,7 +105,8 @@ "default_value": "0", "user_viewable": true, "user_editable": true, - "rules": "required|boolean" + "rules": "required|boolean", + "field_type": "text" } ] } diff --git a/game_eggs/losangelescrimes/README.md b/game_eggs/losangelescrimes/README.md new file mode 100644 index 00000000..5829770b --- /dev/null +++ b/game_eggs/losangelescrimes/README.md @@ -0,0 +1,33 @@ +# Los Angeles Crimes +This egg makes it easy for you to create a public server in the game [Los Angeles Crimes](https://play.google.com/store/apps/details?id=com.MA.LAC&hl=in&gl=US). + +I made it because I was confused about how to create a server manually which requires using a vpn and so on... But here such a method is not needed. This egg uses a Linux Server that has been provided by the Game Developer. + +## Game Description +Los Angeles Crimes lets you play, create, and discover a variety of immersive worlds created by a global community! + +Features: +- Free roam, team death-match, zombie survival, car race & soccer +- Third-person & first-person view +- Active-ragdoll and realistic physics +- LAN support +- PS4 controller support (Bluetooth) + +Website: https://lacrimesonline.com/ + +## Minimum Requirement +1024MB Ram and 1024MB Disk is enough to run the server. Better to add ram & disk as this is a public server and dozens of people can join. + +## Server Port + +> **The LAC server can only run on port 7777. So the server port in the pterodactyl panel that you will use must be 7777.** + +| Port | Default | +|---|---| +| Public Server | 7777 | + +## To Do +- [ ] Can change version. + +# Contributors +- [JastinXyz](https://github.com/JastinXyz) diff --git a/game_eggs/losangelescrimes/egg-l-a-c--online-public-server.json b/game_eggs/losangelescrimes/egg-l-a-c--online-public-server.json new file mode 100644 index 00000000..0505673d --- /dev/null +++ b/game_eggs/losangelescrimes/egg-l-a-c--online-public-server.json @@ -0,0 +1,41 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "exported_at": "2022-04-27T11:33:59+07:00", + "name": "LAC-Online Public Server", + "author": "jastinlt16@gmail.com", + "description": "To make the Los Angeles Crimes public server. Los Angeles Crimes lets you play, create, and discover a variety of immersive worlds created by a global community!", + "features": null, + "images": [ + "quay.io\/parkervcp\/pterodactyl-images:ubuntu_source" + ], + "file_denylist": [], + "startup": ".\/LAC_Linux_v{{VER}}.x86_64", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"Done!\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\ncd \/mnt\/server &&\r\n\r\n# installing dependencies\r\napt-get update -y &&\r\napt-get install -y wget screen unzip libc6-i386 lib32stdc++6 &&\r\n\r\n# delete the previous file (if it is in the file manager)\r\nrm -f LAC_Linux_v${VER}.x86_64 && rm -rf LAC_Linux_v${VER}_Data &&\r\n\r\n# Using another version still under development!\r\n#echo \"checking the given version file and download it... v${VER}.\"\r\n#wget https:\/\/dl.lacrimesonline.com\/builds\/LAC_v${VER}\/LAC_Linux_Server_v${VER}.zip -O LAC_Linux_Server_v${VER}.zip || echo \"VERSION v${VER} IS NOT FOUND! Use v1.6 instead...\" && exit 1\r\n\r\nwget https:\/\/dl.lacrimesonline.com\/builds\/LAC_v${VER}\/LAC_Linux_Server_v${VER}.zip -O LAC_Linux_Server_v${VER}.zip &&\r\necho \"successfully downloaded v${VER} files.!\" &&\r\n\r\n# Extracting & remove the zip file\r\nunzip .\/LAC_Linux_Server_v${VER}.zip &&\r\nrm -f .\/LAC_Linux_Server_v${VER}.zip &&\r\n\r\n# Make the main file executable....\r\nchmod +x LAC_Linux_v${VER}.x86_64 &&\r\n\r\necho \"INSTALATION COMPLETE!\"", + "container": "ubuntu:18.04", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Version", + "description": "The build version is available at https:\/\/dl.lacrimesonline.com\/builds\/. Just write a numeric version like 1.6, don't use any other characters than numbers and periods. If the entered version is incorrect\/non-existent it will use version 1.6 (for now). After replacing it, then reinstall this server. [ THIS FEATURE IS STILL IN DEVELOPMENT ]", + "env_variable": "VER", + "default_value": "1.6", + "user_viewable": true, + "user_editable": false, + "rules": "required|string|max:20" + } + ] +} \ No newline at end of file diff --git a/game_eggs/minecraft/README.md b/game_eggs/minecraft/README.md index 29f64f6f..f949b939 100644 --- a/game_eggs/minecraft/README.md +++ b/game_eggs/minecraft/README.md @@ -13,26 +13,26 @@ It’s set in infinitely-generated worlds of wide open terrain - icy mountains, ## [Java](java) Servers for Java Minecraft -* [Airplane](minecraft/java/airplane) -* [Cuberite](minecraft/java/cuberite) -* [Fabric](minecraft/java/fabric) -* [Feather](minecraft/java/feather) -* [Forge](minecraft/java/forge) - * [Forge](minecraft/java/forge/forge) - * [CusreForge Generic](minecraft/java/forge/curseforge-generic) -* [Feed The Beast](minecraft/java/ftb) -* [Glowstone](/minecraft/java/glowstone) -* [Krypton](/minecraft/java/krypton) -* [Magma](minecraft/java/magma) -* [Mohist](minecraft/java/mohist) -* [NanoLimbo](/minecraft/java/nanolimbo) -* [Paper](minecraft/java/paper) -* [Purpur](minecraft/java/purpur) -* [Spigot](minecraft/java/spigot) -* [SpongeForge](minecraft/java/spongeforge) -* [SpongeVanilla](minecraft/java/spongevanilla) -* [Technic](minecraft/java/technic) -* [VanillaCord](minecraft/java/vanillacord) +* [Airplane](java/airplane) +* [Cuberite](java/cuberite) +* [Fabric](java/fabric) +* [Feather](java/feather) +* [Forge](java/forge) + * [Forge](java/forge/forge) + * [CusreForge Generic](java/forge/curseforge-generic) +* [Feed The Beast](java/ftb) +* [Glowstone](java/glowstone) +* [Krypton](java/krypton) +* [Magma](java/magma) +* [Mohist](java/mohist) +* [NanoLimbo](java/nanolimbo) +* [Paper](java/paper) +* [Purpur](java/purpur) +* [Spigot](java/spigot) +* [SpongeForge](java/spongeforge) +* [SpongeVanilla](java/spongevanilla) +* [Technic](java/technic) +* [VanillaCord](java/vanillacord) ## [Proxies](proxy) Minecraft Server Proxies diff --git a/game_eggs/minecraft/bedrock/bedrock/README.md b/game_eggs/minecraft/bedrock/bedrock/README.md index 3d58ffa3..191afb52 100644 --- a/game_eggs/minecraft/bedrock/bedrock/README.md +++ b/game_eggs/minecraft/bedrock/bedrock/README.md @@ -18,4 +18,7 @@ Also see the [Mojang Issue tracker](https://bugs.mojang.com/projects/BDS/issues/ * On start the server will report is is listening on port 19132 but is listening on the correct port * Constant `NO LOG FILE` in the console before every log line. * Server chat is not printed to the console. -* when you set ops in game they do not get saved. \ No newline at end of file +* when you set ops in game they do not get saved. + +### arm64 +* The arm64 may not perform as expected due to the amd64 to arm emulaton. diff --git a/game_eggs/minecraft/bedrock/bedrock/egg-vanilla-bedrock-ARM64.json b/game_eggs/minecraft/bedrock/bedrock/egg-vanilla-bedrock-ARM64.json new file mode 100644 index 00000000..30a6633f --- /dev/null +++ b/game_eggs/minecraft/bedrock/bedrock/egg-vanilla-bedrock-ARM64.json @@ -0,0 +1,94 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2022-07-06T17:14:36+02:00", + "name": "Vanilla Bedrock ARM64", + "author": "josdekurk@gmail.com", + "description": "Bedrock Edition (also known as the Bedrock Version, Bedrock Codebase, Bedrock Engine or just Bedrock) refers to the multi-platform family of editions of Minecraft developed by Mojang AB, Microsoft Studios, 4J Studios, and SkyBox Labs. Prior to this term, as the engine originated with Pocket Edition, this entire product family was referred to as \"Pocket Edition\", \"MCPE\", or \"Pocket\/Windows 10 Edition\".", + "features": [ + "pid_limit" + ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:box64": "ghcr.io\/parkervcp\/yolks:box64" + }, + "file_denylist": [], + "startup": "box64 .\/bedrock_server", + "config": { + "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-port\": \"{{server.build.default.port}}\",\r\n \"server-name\": \"{{server.build.env.SERVERNAME}}\",\r\n \"gamemode\": \"{{server.build.env.GAMEMODE}}\",\r\n \"difficulty\": \"{{server.build.env.DIFFICULTY}}\",\r\n \"allow-cheats\": \"{{server.build.env.CHEATS}}\",\r\n \"max-threads\": \"2\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"Server started\"\r\n}", + "logs": "{}", + "stop": "stop" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\napt update\r\napt install -y zip unzip wget curl\r\n\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Minecraft CDN Akamai blocks script user-agents\r\nRANDVERSION=$(echo $((1 + $RANDOM % 4000)))\r\n\r\nif [ -z \"${BEDROCK_VERSION}\" ] || [ \"${BEDROCK_VERSION}\" == \"latest\" ]; then\r\n echo -e \"\\n Downloading latest Bedrock server\"\r\n curl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -H \"Accept-Encoding: gzip, deflate\" -o versions.html.gz https:\/\/www.minecraft.net\/en-us\/download\/server\/bedrock\r\n DOWNLOAD_URL=$(zgrep -o 'https:\/\/minecraft.azureedge.net\/bin-linux\/[^\"]*' versions.html.gz)\r\nelse \r\n echo -e \"\\n Downloading ${BEDROCK_VERSION} Bedrock server\"\r\n DOWNLOAD_URL=https:\/\/minecraft.azureedge.net\/bin-linux\/bedrock-server-$BEDROCK_VERSION.zip\r\nfi\r\n\r\nDOWNLOAD_FILE=$(echo ${DOWNLOAD_URL} | cut -d\"\/\" -f5) # Retrieve archive name\r\n\r\necho -e \"backing up config files\"\r\nrm *.bak versions.html.gz\r\ncp server.properties server.properties.bak\r\ncp permissions.json permissions.json.bak\r\ncp whitelist.json whitelist.json.bak\r\n\r\necho -e \"Downloading files from: $DOWNLOAD_URL\"\r\n\r\ncurl -L -A \"Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/90.0.$RANDVERSION.212 Safari\/537.36\" -H \"Accept-Language: en\" -o $DOWNLOAD_FILE $DOWNLOAD_URL\r\n\r\necho -e \"Unpacking server files\"\r\nunzip -o $DOWNLOAD_FILE\r\n\r\necho -e \"Cleaning up after installing\"\r\nrm $DOWNLOAD_FILE\r\n\r\necho 'emit-server-telemetry=true' >> server.properties\r\n\r\necho -e \"restoring backup config files - on first install there will be file not found errors which you can ignore.\"\r\ncp -rf server.properties.bak server.properties\r\ncp -rf permissions.json.bak permissions.json\r\ncp -rf whitelist.json.bak whitelist.json\r\n\r\nchmod +x bedrock_server\r\n\r\necho -e \"Install Completed\"", + "container": "debian:buster-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Bedrock Version", + "description": "The version of bedrock. (Ex. 1.7.0.13)\r\n\r\nDefault version is latest.", + "env_variable": "BEDROCK_VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "ld lib path", + "description": "Dumb reasons to need this", + "env_variable": "LD_LIBRARY_PATH", + "default_value": ".", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "Server Name", + "description": "The name for the server", + "env_variable": "SERVERNAME", + "default_value": "Bedrock Dedicated Server", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:50", + "field_type": "text" + }, + { + "name": "Gamemode", + "description": "Allowed values: \"survival\", \"creative\", or \"adventure\"", + "env_variable": "GAMEMODE", + "default_value": "survival", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:survival,creative,adventure", + "field_type": "text" + }, + { + "name": "Difficulty", + "description": "Allowed values: \"peaceful\", \"easy\", \"normal\", or \"hard\"", + "env_variable": "DIFFICULTY", + "default_value": "easy", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:peaceful,easy,normal,hard", + "field_type": "text" + }, + { + "name": "Allow cheats", + "description": "If true then cheats like commands can be used.\r\n\r\nAllowed values: \"true\" or \"false\"", + "env_variable": "CHEATS", + "default_value": "false", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|in:true,false", + "field_type": "text" + } + ] +} diff --git a/game_eggs/minecraft/bedrock/pocketmine_mp/egg-pocketmine-m-p.json b/game_eggs/minecraft/bedrock/pocketmine_mp/egg-pocketmine-m-p.json index aebd5da2..add3021f 100644 --- a/game_eggs/minecraft/bedrock/pocketmine_mp/egg-pocketmine-m-p.json +++ b/game_eggs/minecraft/bedrock/pocketmine_mp/egg-pocketmine-m-p.json @@ -1,17 +1,17 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2021-12-11T19:52:34+00:00", + "exported_at": "2022-07-28T19:04:48+02:00", "name": "PocketmineMP", "author": "info@swisscrafting.ch", "description": "Pocketmine Egg\r\nby onekintaro from swisscrafting.ch\r\nwith the nice help from #eggs Channel on Pterodactyl-Discord :)", "features": null, - "images": [ - "ghcr.io\/parkervcp\/yolks:debian" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, "file_denylist": [], "startup": ".\/bin\/php7\/bin\/php .\/PocketMine-MP.phar --no-wizard --disable-ansi", "config": { @@ -22,8 +22,8 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\n# This is already installed in our Script container image. Leaving it here for future reference | apt install -y curl jq\r\n\r\ncd \/mnt\/server\r\n\r\n# Restrict versions to latest pm3 and pm4 for now.\r\nif [[ \"${VERSION}\" == \"pm4\" ]] || [[ \"${VERSION}\" == \"\" ]]; then\r\n DOWNLOAD_LINK=$(curl -ssL https:\/\/update.pmmp.io\/api?channel=stable | grep 'download_url' | cut -d '\"' -f 4)\r\n echo -e \"Downloading latest PocketMine 4 from ${DOWNLOAD_LINK}\"\r\n curl -ssL \"${DOWNLOAD_LINK}\" -o PocketMine-MP.phar\r\nelif [[ \"${VERSION}\" == \"pm3\" ]]; then\r\n DOWNLOAD_LINK=$(curl -ssL https:\/\/update.pmmp.io\/api?channel=pm3 | grep 'download_url' | cut -d '\"' -f 4)\r\n echo -e \"Downloading latest PocketMine 3 from ${DOWNLOAD_LINK}\"\r\n curl -ssL \"${DOWNLOAD_LINK}\" -o PocketMine-MP.phar\r\nelse\r\n echo -e \"Unknown version ${VERSION}\"\r\n exit 1\r\nfi\r\n\r\necho -e \"\\n downloading latest php build from PocketMine https:\/\/jenkins.pmmp.io\/job\/PHP-8.0-Aggregate\/lastStableBuild\/artifact\/PHP-8.0-Linux-x86_64.tar.gz\"\r\ncurl -sSL -o php.binary.tar.gz https:\/\/jenkins.pmmp.io\/job\/PHP-8.0-Aggregate\/lastStableBuild\/artifact\/PHP-8.0-Linux-x86_64.tar.gz\r\n\r\nif [[ ! -f server.properties ]]; then\r\n echo -e \"\\n downloading default server.properties\"\r\n curl -sSL https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/bedrock\/pocketmine_mp\/server.properties >server.properties\r\nfi\r\n\r\necho -e \"\\n unpacking php binaries\"\r\ntar -xzvf php.binary.tar.gz\r\n\r\necho -e \"\\n removing php packages\"\r\nrm -rf \/mnt\/server\/php.binary.tar.gz\r\n\r\necho -e \"\\n configuring PHP extensions library directory\"\r\nEXTENSION_DIR=$(find \"bin\" -name *debug-zts*)\r\ngrep -q '^extension_dir' bin\/php7\/bin\/php.ini && sed -i'bak' \"s{^extension_dir=.*{extension_dir=\\\"$EXTENSION_DIR\\\"{\" bin\/php7\/bin\/php.ini || echo \"extension_dir=\\\"$EXTENSION_DIR\\\"\" >>bin\/php7\/bin\/php.ini\r\n\r\necho -e \"\\n creating files and folders\"\r\ntouch banned-ips.txt banned-players.txt ops.txt white-list.txt server.log\r\nmkdir -p players worlds plugins resource_packs\r\n\r\necho -e \"\\n\\nInstall script completed. Enjoy!\"", - "container": "ghcr.io\/parkervcp\/installers:debian", + "script": "#!\/bin\/bash\r\n\r\n\r\napt update\r\napt install -y git curl wget jq file tar unzip zip\r\n\r\ncd \/mnt\/server\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"amd64\" || echo \"arm64\")\r\n\r\n# Restrict versions to latest pm3 and pm4 for now.\r\nif [[ \"${VERSION}\" == \"pm4\" ]] || [[ \"${VERSION}\" == \"\" ]]; then\r\n DOWNLOAD_LINK=$(curl -ssL https:\/\/update.pmmp.io\/api?channel=stable | grep 'download_url' | cut -d '\"' -f 4)\r\n echo -e \"Downloading latest PocketMine 4 from ${DOWNLOAD_LINK}\"\r\n curl -ssL \"${DOWNLOAD_LINK}\" -o PocketMine-MP.phar\r\nelif [[ \"${VERSION}\" == \"pm3\" ]]; then\r\n DOWNLOAD_LINK=$(curl -ssL https:\/\/update.pmmp.io\/api?channel=pm3 | grep 'download_url' | cut -d '\"' -f 4)\r\n echo -e \"Downloading latest PocketMine 3 from ${DOWNLOAD_LINK}\"\r\n curl -ssL \"${DOWNLOAD_LINK}\" -o PocketMine-MP.phar\r\nelse\r\n echo -e \"Unknown version ${VERSION}\"\r\n exit 1\r\nfi\r\n\r\n\r\n\r\nif [[ \"${ARCH}\" == \"amd64\" ]]; then\r\necho -e \"\\n downloading latest php build from PocketMine https:\/\/jenkins.pmmp.io\/job\/PHP-8.0-Aggregate\/lastStableBuild\/artifact\/PHP-8.0-Linux-x86_64.tar.gz\"\r\ncurl -sSL -o php.binary.tar.gz https:\/\/jenkins.pmmp.io\/job\/PHP-8.0-Aggregate\/lastStableBuild\/artifact\/PHP-8.0-Linux-x86_64.tar.gz\r\n\r\necho -e \"\\n unpacking php binaries\"\r\ntar -xzvf php.binary.tar.gz\r\n\r\necho -e \"\\n removing php packages\"\r\nrm -rf \/mnt\/server\/php.binary.tar.gz\r\n\r\necho -e \"\\n configuring PHP extensions library directory\"\r\nEXTENSION_DIR=$(find \"bin\" -name *debug-zts*)\r\ngrep -q '^extension_dir' bin\/php7\/bin\/php.ini && sed -i'bak' \"s{^extension_dir=.*{extension_dir=\\\"$EXTENSION_DIR\\\"{\" bin\/php7\/bin\/php.ini || echo \"extension_dir=\\\"$EXTENSION_DIR\\\"\" >>bin\/php7\/bin\/php.ini\r\nelse\r\napt install -y libtool-bin libtool make autoconf automake m4 gzip bzip2 bison g++ git cmake pkg-config re2c\r\n\r\nwget https:\/\/raw.githubusercontent.com\/pmmp\/php-build-scripts\/stable\/compile.sh -O compile.sh \r\nchmod +x compile.sh\r\n\r\necho \"please wait, this will take some time\"\r\n.\/compile.sh\r\nrm compile.sh\r\nrm -rf install_data\/\r\n\r\necho -e \"\\n configuring PHP extensions library directory\"\r\nEXTENSION_DIR=$(find \"bin\" -name *debug-zts*)\r\ngrep -q '^extension_dir' bin\/php7\/bin\/php.ini && sed -i'bak' \"s{^extension_dir=.*{extension_dir=\\\"$EXTENSION_DIR\\\"{\" bin\/php7\/bin\/php.ini || echo \"extension_dir=\\\"$EXTENSION_DIR\\\"\" >>bin\/php7\/bin\/php.ini\r\n\r\nfi\r\n\r\n\r\nif [[ ! -f server.properties ]]; then\r\n echo -e \"\\n downloading default server.properties\"\r\n curl -sSL https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/minecraft\/bedrock\/pocketmine_mp\/server.properties >server.properties\r\nfi\r\n\r\n\r\necho -e \"\\n creating files and folders\"\r\ntouch banned-ips.txt banned-players.txt ops.txt white-list.txt server.log\r\nmkdir -p players worlds plugins resource_packs\r\n\r\necho -e \"\\n\\nInstall script completed. Enjoy!\"", + "container": "ghcr.io\/pterodactyl\/installers:debian", "entrypoint": "bash" } }, @@ -35,7 +35,8 @@ "default_value": "pm4", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:pm3,pm4" + "rules": "required|string|in:pm3,pm4", + "field_type": "text" } ] -} \ No newline at end of file +} diff --git a/game_eggs/minecraft/bedrock/pocketmine_mp/server.properties b/game_eggs/minecraft/bedrock/pocketmine_mp/server.properties index 92d323d6..f3bbc192 100644 --- a/game_eggs/minecraft/bedrock/pocketmine_mp/server.properties +++ b/game_eggs/minecraft/bedrock/pocketmine_mp/server.properties @@ -20,9 +20,9 @@ level-seed= level-type=DEFAULT enable-query=true enable-rcon=off -rcon.password=BhPTpB1bvi +rcon.password= auto-save=on view-distance=8 xbox-auth=on server-ip=0.0.0.0 -query.port=25573 \ No newline at end of file +query.port=25573 diff --git a/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json b/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json index 8b9255af..b86afb49 100644 --- a/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json +++ b/game_eggs/minecraft/java/forge/curseforge-generic/egg-curseforge-generic.json @@ -1,10 +1,10 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2022-06-10T15:54:18-04:00", + "exported_at": "2022-07-03T17:12:36-04:00", "name": "Curseforge Generic", "author": "parker@parkervcp.com", "description": "A generic egg for a forge modpack", @@ -13,23 +13,23 @@ "java_version", "pid_limit" ], - "images": [ - "ghcr.io\/pterodactyl\/yolks:java_8", - "ghcr.io\/pterodactyl\/yolks:java_11", - "ghcr.io\/pterodactyl\/yolks:java_16", - "ghcr.io\/pterodactyl\/yolks:java_17" - ], + "docker_images": { + "Java 8": "ghcr.io\/pterodactyl\/yolks:java_8", + "Java 11": "ghcr.io\/pterodactyl\/yolks:java_11", + "Java 16": "ghcr.io\/pterodactyl\/yolks:java_16", + "Java 17": "ghcr.io\/pterodactyl\/yolks:java_17" + }, "file_denylist": [], "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar server.jar", "config": { - "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"server-port\": \"{{server.build.default.port}}\",\r\n \"query.port\": \"{{server.build.default.port}}\"\r\n }\r\n }\r\n}", - "startup": "{\r\n \"done\": \")! For help, type \",\r\n \"userInteraction\": [\r\n \"Go to eula.txt for more info.\"\r\n ]\r\n}", + "files": "{\r\n \"server.properties\": {\r\n \"parser\": \"properties\",\r\n \"find\": {\r\n \"server-ip\": \"0.0.0.0\",\r\n \"server-port\": \"{{server.build.default.port}}\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \")! For help, type \"\r\n}", "logs": "{}", "stop": "stop" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\nif [ ! -d \/mnt\/server ]; then\r\n mkdir -p \/mnt\/server\r\nfi\r\n\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq unzip dos2unix\r\n}\r\n\r\nfunction get_download {\r\n # get json data to work with\r\n echo -e \"Curling the json for the modpack\"\r\n echo -e \"running: curl -sSLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H 'x-api-key: API_KEY'\"\r\n JSON_DATA=$(curl -ssLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\")\r\n\r\n # if no modpack version is set or is set to latest\r\n if [ -z ${MODPACK_VERSION} ] || [ \"${MODPACK_VERSION}\" = \"latest\" ]; then\r\n echo -e \"Getting latest download url\"\r\n # parse data to get the download url\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r \".data.mainFileId\")\r\n echo -e \"File ID is: ${FILE_ID}\"\r\n if [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .isServerPack\")\" == \"false\" ] && [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\" != \"null\" ]; then\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n else\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n fi\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n else\r\n echo -e \"Looking for download url for version ${MODPACK_VERSION}\"\r\n # parse files for version match\r\n FILES_JSON_DATA=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files)\r\n # get element number to get the exact location in the json\r\n FILES_JSON_ELEMENT=$(echo -e ${FILES_JSON_DATA} | jq --arg VERSION \"${MODPACK_VERSION}\" '.[] | select(.displayName) | .displayName | contains($VERSION)' | grep -n true | cut -f1 -d: | tail -1)\r\n # if there wasn't a match default to latest\r\n if [ ! -z ${FILES_JSON_ELEMENT} ]; then\r\n echo -e \"No matching version found\"\r\n echo -e \"defaulting to latest\"\r\n DOWNLOAD_URL=$(echo -e ${FILES_JSON_DATA} | jq --arg ELEMENT \"${FILES_JSON_ELEMENT}\" '.[$ELEMENT|tonumber-1] | .downloadUrl')\r\n else\r\n echo -e \"Version match found\"\r\n DOWNLOAD_URL=$(echo -e ${JSON_DATA} | jq -r .latestFiles[0].downloadUrl)\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n fi\r\n fi\r\n ## download modpack files\r\n cd \/mnt\/server\r\n echo \"Executing curl -L ${DOWNLOAD_URL} -o server.zip\"\r\n curl -L -g \"${DOWNLOAD_URL}\" -o server.zip\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction forge_install {\r\n echo -e \"\\nInstalling forge server using the installer jar file.\\n\"\r\n if [ -f \/mnt\/server\/*installer.jar ]; then\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n else\r\n echo \"No forge installer found moving on.\"\r\n fi\r\n mv FTBServer.jar server.jar\r\n}\r\n\r\nfunction forge_cleanup {\r\n echo -e \"\\nDeleting installer jar file and cleaning up.\\n\"\r\n rm -rf *installer.jar\r\n if [ ! -f \/mnt\/server\/forge*universal.jar ]; then\r\n mv -v \/mnt\/server\/*\/* \/mnt\/server\/\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv forge*.jar server.jar\r\n else\r\n mv forge*universal.jar server.jar \r\n fi\r\n else\r\n mv forge*universal.jar server.jar\r\n fi\r\n}\r\n\r\nfunction json_download_prework {\r\n mkdir -p \/mnt\/server\/mods\r\n cd \/mnt\/server\/mods\r\n}\r\n\r\nfunction json_download_mods {\r\n MANIFEST=\/mnt\/server\/manifest.json\r\n for mod in $(jq -c '.files[]' ${MANIFEST} ); do\r\n projID=$(echo $mod | jq -r \".projectID\")\r\n fileID=$(echo $mod | jq -r \".fileID\")\r\n URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${projID}\/files\/${fileID}\/download-url jq -r \".data\")\r\n # this is saving everything as \/mnt\/server\/mods\/download\r\n echo \"Mod direct url: ${URL}\"\r\n curl -JLO \"${URL}\"\r\n done\r\n}\r\n\r\nfunction json_download_forge {\r\n cd \/mnt\/server\r\n FORGE=$(jq -r '.minecraft.modLoaders[0].id' \/mnt\/server\/manifest.json | cut -d '-' -f2)\r\n MCVER=$(jq -r '.minecraft.version' \/mnt\/server\/manifest.json)\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n \r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\"\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-installer.jar -o installer.jar\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction json_download_overrides {\r\n if [ -d \/mnt\/server\/overrides ]; then\r\n mv \/mnt\/server\/overrides\/mods\/* \/mnt\/server\/mods\/\r\n rmdir \/mnt\/server\/overrides\/mods\r\n mv \/mnt\/server\/overrides\/* \/mnt\/server\r\n rmdir \/mnt\/server\/overrides\r\n fi\r\n}\r\n\r\nfunction cfg_download_forge {\r\n dos2unix settings.cfg # In case the pack was distributed with Windows-style line endings in the cfg file\r\n MCVER=`grep 'MCVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n FORGE=`grep 'FORGEVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n \r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n echo -e ${FORGE_VERSION}\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n PARSED_LINK=$(echo -e \"$FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\" | sed 's\/ \/\/g')\r\n\r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $PARSED_LINK\"\r\n curl -sSL $PARSED_LINK-installer.jar -o installer.jar\r\n curl -sSL $PARSED_LINK-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction ftb_install {\r\n chmod +x \/mnt\/server\/settings.sh \r\n . \/mnt\/server\/settings.sh \r\n curl https:\/\/s3.amazonaws.com\/Minecraft.Download\/versions\/${MCVER}\/minecraft_server.${MCVER}.jar -o ${JARFILE} \r\n curl https:\/\/libraries.minecraft.net\/${LAUNCHWRAPPER} -o \/mnt\/server\/libraries\/${LAUNCHWRAPPER}\r\n}\r\n\r\ninstall_required\r\nget_download\r\n\r\nif [ -f \/mnt\/server\/manifest.json ]; then\r\n json_download_prework\r\n json_download_mods\r\n json_download_overrides\r\n json_download_forge\r\nelif [ -f \/mnt\/server\/settings.cfg ]; then\r\n cfg_download_forge\r\nelif [ -f \/mnt\/server\/version.json ]; then\r\n if [ \"$(cat \/mnt\/server\/version.json | jq -r '.packID | contains(\"FTB\")')\" == \"true\" ]; then\r\n ftb_install\r\n fi\r\nelse\r\n forge_install\r\n forge_cleanup\r\nfi\r\n\r\necho -e \"\\n\\nInstall completed succesfully, enjoy!\"", + "script": "#!\/bin\/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\nmkdir -p \/mnt\/server\r\n\r\nfunction install_required {\r\n apt update\r\n apt install -y curl jq unzip dos2unix\r\n}\r\n\r\nfunction get_download {\r\n # get json data to work with\r\n echo -e \"Curling the json for the modpack\"\r\n echo -e \"running: curl -sSLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H 'x-api-key: API_KEY'\"\r\n JSON_DATA=$(curl -ssLX GET https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID} -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\")\r\n\r\n # if no modpack version is set or is set to latest\r\n if [ -z ${MODPACK_VERSION} ] || [ \"${MODPACK_VERSION}\" = \"latest\" ]; then\r\n echo -e \"Getting latest download url\"\r\n # parse data to get the download url\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r \".data.mainFileId\")\r\n echo -e \"File ID is: ${FILE_ID}\"\r\n if [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .isServerPack\")\" == \"false\" ] && [ \"$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\" != \"null\" ]; then\r\n FILE_ID=$(echo -e ${JSON_DATA} | jq -r --arg FILE_ID \"$FILE_ID\" \".data.latestFiles[] | select(.id==$FILE_ID) | .serverPackFileId\")\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n else\r\n DOWNLOAD_URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files\/${FILE_ID}\/download-url | jq -r \".data\")\r\n fi\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n else\r\n echo -e \"Looking for download url for version ${MODPACK_VERSION}\"\r\n # parse files for version match\r\n FILES_JSON_DATA=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${MODPACK_ID}\/files)\r\n # get element number to get the exact location in the json\r\n FILES_JSON_ELEMENT=$(echo -e ${FILES_JSON_DATA} | jq --arg VERSION \"${MODPACK_VERSION}\" '.[] | select(.displayName) | .displayName | contains($VERSION)' | grep -n true | cut -f1 -d: | tail -1)\r\n # if there wasn't a match default to latest\r\n if [ ! -z ${FILES_JSON_ELEMENT} ]; then\r\n echo -e \"No matching version found\"\r\n echo -e \"defaulting to latest\"\r\n DOWNLOAD_URL=$(echo -e ${FILES_JSON_DATA} | jq --arg ELEMENT \"${FILES_JSON_ELEMENT}\" '.[$ELEMENT|tonumber-1] | .downloadUrl')\r\n else\r\n echo -e \"Version match found\"\r\n DOWNLOAD_URL=$(echo -e ${JSON_DATA} | jq -r .latestFiles[0].downloadUrl)\r\n echo -e \"Download url set to ${DOWNLOAD_URL}\"\r\n fi\r\n fi\r\n ## download modpack files\r\n cd \/mnt\/server\r\n echo \"Executing curl -L ${DOWNLOAD_URL} -o server.zip\"\r\n curl -L -g \"${DOWNLOAD_URL}\" -o server.zip\r\n unzip -o server.zip\r\n rm -rf server.zip\r\n}\r\n\r\nfunction unpack_zip {\r\n cd \/mnt\/server\r\n unzip -o server.zip\r\n}\r\n\r\nfunction forge_install {\r\n echo -e \"\\nInstalling forge server using the installer jar file.\\n\"\r\n if [ -f \/mnt\/server\/*installer.jar ]; then\r\n\t\tmv *installer.jar installer.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n else\r\n echo \"No forge installer found moving on.\"\r\n fi\r\n mv FTBServer.jar server.jar\r\n}\r\n\r\nfunction forge_cleanup {\r\n echo -e \"\\nDeleting installer jar file and cleaning up.\\n\"\r\n rm -rf *installer.jar\r\n if [ ! -f \/mnt\/server\/forge*universal.jar ]; then\r\n mv -v \/mnt\/server\/*\/* \/mnt\/server\/\r\n if [ ! -f \/mnt\/server\/*universal.jar ]; then\r\n mv forge*.jar server.jar\r\n else\r\n mv forge*universal.jar server.jar \r\n fi\r\n else\r\n mv forge*universal.jar server.jar\r\n fi\r\n}\r\n\r\nfunction json_download_prework {\r\n mkdir -p \/mnt\/server\/mods\r\n cd \/mnt\/server\/mods\r\n}\r\n\r\nfunction json_download_mods {\r\n MANIFEST=\/mnt\/server\/manifest.json\r\n for mod in $(jq -c '.files[]' ${MANIFEST} ); do\r\n projID=$(echo $mod | jq -r \".projectID\")\r\n fileID=$(echo $mod | jq -r \".fileID\")\r\n URL=$(curl -sSL -H 'Accept: application\/json' -H \"x-api-key: ${API_KEY}\" https:\/\/api.curseforge.com\/v1\/mods\/${projID}\/files\/${fileID}\/download-url jq -r \".data\")\r\n # this is saving everything as \/mnt\/server\/mods\/download\r\n echo \"Mod direct url: ${URL}\"\r\n curl -JLO \"${URL}\"\r\n done\r\n}\r\n\r\nfunction json_download_forge {\r\n cd \/mnt\/server\r\n FORGE=$(jq -r '.minecraft.modLoaders[0].id' \/mnt\/server\/manifest.json | cut -d '-' -f2)\r\n MCVER=$(jq -r '.minecraft.version' \/mnt\/server\/manifest.json)\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n \r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\"\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-installer.jar -o installer.jar\r\n curl -sS $FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction json_download_overrides {\r\n if [ -d \/mnt\/server\/overrides ]; then\r\n mv \/mnt\/server\/overrides\/mods\/* \/mnt\/server\/mods\/\r\n rmdir \/mnt\/server\/overrides\/mods\r\n mv \/mnt\/server\/overrides\/* \/mnt\/server\r\n rmdir \/mnt\/server\/overrides\r\n fi\r\n}\r\n\r\nfunction cfg_download_forge {\r\n dos2unix settings.cfg # In case the pack was distributed with Windows-style line endings in the cfg file\r\n MCVER=`grep 'MCVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n FORGE=`grep 'FORGEVER' settings.cfg | sed 's\/;\/\/g' | cut -d '=' -f 2-`\r\n\r\n\tif [ ${MCVER} == \"1.7.10\" ] || [ ${MCVER} == \"1.8.9\" ]; then\r\n\t\tFORGE=\"${FORGE}-${MCVER}\"\r\n\tfi\r\n \r\n FORGE_VERSION=\"${MCVER}-${FORGE}\"\r\n echo -e ${FORGE_VERSION}\r\n FORGE_DOWNLOAD=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\r\n PARSED_LINK=$(echo -e \"$FORGE_DOWNLOAD\/$FORGE_VERSION\/forge-$FORGE_VERSION\" | sed 's\/ \/\/g')\r\n\r\n echo -e \"\\nDownloading Forge Version $FORGE_VERSION\\n\"\r\n echo -e \"Download link is $PARSED_LINK\"\r\n curl -sSL $PARSED_LINK-installer.jar -o installer.jar\r\n curl -sSL $PARSED_LINK-universal.jar -o universal.jar\r\n java -jar installer.jar --installServer || { echo -e \"install failed\"; exit 4; }\r\n mv *universal.jar server.jar\r\n rm installer.jar\r\n}\r\n\r\nfunction ftb_install {\r\n chmod +x \/mnt\/server\/settings.sh \r\n . \/mnt\/server\/settings.sh \r\n curl https:\/\/s3.amazonaws.com\/Minecraft.Download\/versions\/${MCVER}\/minecraft_server.${MCVER}.jar -o ${JARFILE} \r\n curl https:\/\/libraries.minecraft.net\/${LAUNCHWRAPPER} -o \/mnt\/server\/libraries\/${LAUNCHWRAPPER}\r\n}\r\n\r\ninstall_required\r\nif [ ! -z ${MODPACK_ID} ] && [ ! \"${MODPACK_ID}\" = \"zip\" ]; then\r\n\tget_download\r\n\tunpack_zip\r\n rm -rf server.zip\r\nelse\r\n\tunpack_zip\r\nfi\r\n\r\nif [ -f \/mnt\/server\/manifest.json ]; then\r\n json_download_prework\r\n json_download_mods\r\n json_download_overrides\r\n json_download_forge\r\nelif [ -f \/mnt\/server\/settings.cfg ]; then\r\n cfg_download_forge\r\nelif [ -f \/mnt\/server\/version.json ]; then\r\n if [ \"$(cat \/mnt\/server\/version.json | jq -r '.packID | contains(\"FTB\")')\" == \"true\" ]; then\r\n ftb_install\r\n fi\r\nelse\r\n forge_install\r\n forge_cleanup\r\nfi\r\n\r\necho -e \"\\n\\nInstall completed succesfully, enjoy!\"", "container": "openjdk:8-jdk-slim", "entrypoint": "bash" } @@ -37,12 +37,13 @@ "variables": [ { "name": "Modpack Project ID", - "description": "The modpack project ID from the curseforge site on the pack page.\r\n\r\n(Ex. https:\/\/www.curseforge.com\/minecraft\/modpacks\/bofa-mods ID is 375152)", + "description": "The modpack project ID from the curseforge site on the pack page.\r\nOr 'zip' if installing from an uploaded server.zip file.\r\n(Ex. https:\/\/www.curseforge.com\/minecraft\/modpacks\/bofa-mods ID is 375152)", "env_variable": "MODPACK_ID", "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "Modpack Version", @@ -51,7 +52,8 @@ "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "API Key", @@ -60,7 +62,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" } ] } \ No newline at end of file diff --git a/game_eggs/minecraft/java/forge/forge/egg-forge-enhanced.json b/game_eggs/minecraft/java/forge/forge/egg-forge-enhanced.json index 5038cae9..0f173522 100644 --- a/game_eggs/minecraft/java/forge/forge/egg-forge-enhanced.json +++ b/game_eggs/minecraft/java/forge/forge/egg-forge-enhanced.json @@ -4,7 +4,7 @@ "version": "PTDL_v1", "update_url": null }, - "exported_at": "2021-12-11T23:06:46+00:00", + "exported_at": "2022-06-11T19:29:34-04:00", "name": "Forge Enhanced", "author": "parker@parkervcp.com", "description": "Minecraft Forge Server. Minecraft Forge is a modding API (Application Programming Interface), which makes it easier to create mods, and also make sure mods are compatible with each other.", @@ -29,7 +29,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y curl jq\r\n\r\nif [[ ! -d \/mnt\/server ]]; then\r\n mkdir \/mnt\/server\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\r\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\r\n\r\nif [[ ! -z ${FORGE_VERSION} ]]; then\r\n DOWNLOAD_LINK=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/${FORGE_VERSION}\/forge-${FORGE_VERSION}\r\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\r\nelse\r\n JSON_DATA=$(curl -sSL https:\/\/files.minecraftforge.net\/maven\/net\/minecraftforge\/forge\/promotions_slim.json)\r\n\r\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\r\n echo -e \"getting latest version of forge.\"\r\n MC_VERSION=$(echo -e ${JSON_DATA} | jq -r '.promos | del(.\"latest-1.7.10\") | del(.\"1.7.10-latest-1.7.10\") | to_entries[] | .key | select(contains(\"latest\")) | split(\"-\")[0]' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -1)\r\n BUILD_TYPE=latest\r\n fi\r\n\r\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] && [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\r\n BUILD_TYPE=recommended\r\n fi\r\n\r\n echo -e \"minecraft version: ${MC_VERSION}\"\r\n echo -e \"build type: ${BUILD_TYPE}\"\r\n\r\n ## some variables for getting versions and things\r\n FILE_SITE=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\r\n VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION \"${MC_VERSION}\" --arg BUILD_TYPE \"${BUILD_TYPE}\" '.promos | del(.\"latest-1.7.10\") | del(.\"1.7.10-latest-1.7.10\") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains($BUILD_TYPE))')\r\n\r\n ## locating the forge version\r\n if [[ \"${VERSION_KEY}\" == \"\" ]] && [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\r\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\r\n VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION \"${MC_VERSION}\" '.promos | del(.\"latest-1.7.10\") | del(.\"1.7.10-latest-1.7.10\") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains(\"latest\"))')\r\n fi\r\n\r\n ## Error if the mc version set wasn't valid.\r\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\r\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\r\n\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\r\n fi\r\n else\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}.jar\r\n fi\r\nfi\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\r\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\r\nfi\r\n\r\n#Downloading jars\r\necho -e \"Downloading forge version ${FORGE_VERSION}\"\r\necho -e \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"installer jar download link is valid.\"\r\n else\r\n echo -e \"link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\nelse\r\n echo -e \"no download link provided. Exiting now\"\r\n exit 3\r\nfi\r\n\r\ncurl -s -o installer.jar -sS ${DOWNLOAD_LINK}-installer.jar\r\n\r\n#Checking if downloaded jars exist\r\nif [[ ! -f .\/installer.jar ]]; then\r\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\r\n exit\r\nfi\r\n\r\nfunction unix_args {\r\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n}\r\n\r\n# Delete args to support downgrading\/upgrading\r\nrm -rf libraries\/net\/minecraftforge\/forge\r\nrm unix_args.txt\r\n\r\n#Installing server\r\necho -e \"Installing forge server.\\n\"\r\njava -jar installer.jar --installServer || { echo -e \"install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}\"; exit 4; }\r\n\r\n# Check if we need a symlink for 1.17+ Forge JPMS args\r\nif [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n unix_args\r\n\r\n# Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\r\nelif [[ $MC_VERSION == \"latest\" && $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n unix_args\r\nelse\r\n # For versions below 1.17 that ship with jar\r\n mv $FORGE_JAR $SERVER_JARFILE\r\nfi\r\n\r\necho -e \"Deleting installer.jar file.\\n\"\r\nrm -rf installer.jar", + "script": "#!\/bin\/bash\r\n# Forge Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y curl jq\r\n\r\nif [[ ! -d \/mnt\/server ]]; then\r\n mkdir \/mnt\/server\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\n# Remove spaces from the version number to avoid issues with curl\r\nFORGE_VERSION=\"$(echo \"$FORGE_VERSION\" | tr -d ' ')\"\r\nMC_VERSION=\"$(echo \"$MC_VERSION\" | tr -d ' ')\"\r\n\r\nif [[ ! -z ${FORGE_VERSION} ]]; then\r\n DOWNLOAD_LINK=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/${FORGE_VERSION}\/forge-${FORGE_VERSION}\r\n FORGE_JAR=forge-${FORGE_VERSION}*.jar\r\nelse\r\n JSON_DATA=$(curl -sSL https:\/\/files.minecraftforge.net\/maven\/net\/minecraftforge\/forge\/promotions_slim.json)\r\n\r\n if [[ \"${MC_VERSION}\" == \"latest\" ]] || [[ \"${MC_VERSION}\" == \"\" ]]; then\r\n echo -e \"getting latest version of forge.\"\r\n MC_VERSION=$(echo -e ${JSON_DATA} | jq -r '.promos | del(.\"latest-1.7.10\") | del(.\"1.7.10-latest-1.7.10\") | to_entries[] | .key | select(contains(\"latest\")) | split(\"-\")[0]' | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n | tail -1)\r\n BUILD_TYPE=latest\r\n fi\r\n\r\n if [[ \"${BUILD_TYPE}\" != \"recommended\" ]] && [[ \"${BUILD_TYPE}\" != \"latest\" ]]; then\r\n BUILD_TYPE=recommended\r\n fi\r\n\r\n echo -e \"minecraft version: ${MC_VERSION}\"\r\n echo -e \"build type: ${BUILD_TYPE}\"\r\n\r\n ## some variables for getting versions and things\r\n FILE_SITE=https:\/\/maven.minecraftforge.net\/net\/minecraftforge\/forge\/\r\n VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION \"${MC_VERSION}\" --arg BUILD_TYPE \"${BUILD_TYPE}\" '.promos | del(.\"latest-1.7.10\") | del(.\"1.7.10-latest-1.7.10\") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains($BUILD_TYPE))')\r\n\r\n ## locating the forge version\r\n if [[ \"${VERSION_KEY}\" == \"\" ]] && [[ \"${BUILD_TYPE}\" == \"recommended\" ]]; then\r\n echo -e \"dropping back to latest from recommended due to there not being a recommended version of forge for the mc version requested.\"\r\n VERSION_KEY=$(echo -e ${JSON_DATA} | jq -r --arg MC_VERSION \"${MC_VERSION}\" '.promos | del(.\"latest-1.7.10\") | del(.\"1.7.10-latest-1.7.10\") | to_entries[] | .key | select(contains($MC_VERSION)) | select(contains(\"latest\"))')\r\n fi\r\n\r\n ## Error if the mc version set wasn't valid.\r\n if [ \"${VERSION_KEY}\" == \"\" ] || [ \"${VERSION_KEY}\" == \"null\" ]; then\r\n echo -e \"The install failed because there is no valid version of forge for the version of minecraft selected.\"\r\n exit 1\r\n fi\r\n\r\n FORGE_VERSION=$(echo -e ${JSON_DATA} | jq -r --arg VERSION_KEY \"$VERSION_KEY\" '.promos | .[$VERSION_KEY]')\r\n\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]] || [[ \"${MC_VERSION}\" == \"1.8.9\" ]]; then\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}.jar\r\n if [[ \"${MC_VERSION}\" == \"1.7.10\" ]]; then\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}-${MC_VERSION}-universal.jar\r\n fi\r\n else\r\n DOWNLOAD_LINK=${FILE_SITE}${MC_VERSION}-${FORGE_VERSION}\/forge-${MC_VERSION}-${FORGE_VERSION}\r\n FORGE_JAR=forge-${MC_VERSION}-${FORGE_VERSION}.jar\r\n fi\r\nfi\r\n\r\n#Adding .jar when not eding by SERVER_JARFILE\r\nif [[ ! $SERVER_JARFILE = *\\.jar ]]; then\r\n SERVER_JARFILE=\"$SERVER_JARFILE.jar\"\r\nfi\r\n\r\n#Downloading jars\r\necho -e \"Downloading forge version ${FORGE_VERSION}\"\r\necho -e \"Download link is ${DOWNLOAD_LINK}\"\r\n\r\nif [[ ! -z \"${DOWNLOAD_LINK}\" ]]; then\r\n if curl -sSL --output \/dev\/null --head --fail ${DOWNLOAD_LINK}-installer.jar; then\r\n echo -e \"installer jar download link is valid.\"\r\n else\r\n echo -e \"link is invalid. Exiting now\"\r\n exit 2\r\n fi\r\nelse\r\n echo -e \"no download link provided. Exiting now\"\r\n exit 3\r\nfi\r\n\r\ncurl -sSL -o installer.jar ${DOWNLOAD_LINK}-installer.jar\r\n\r\n#Checking if downloaded jars exist\r\nif [[ ! -f .\/installer.jar ]]; then\r\n echo \"!!! Error downloading forge version ${FORGE_VERSION} !!!\"\r\n exit\r\nfi\r\n\r\nfunction unix_args {\r\n echo -e \"Detected Forge 1.17 or newer version. Setting up forge unix args.\"\r\n ln -sf libraries\/net\/minecraftforge\/forge\/*\/unix_args.txt unix_args.txt\r\n}\r\n\r\n# Delete args to support downgrading\/upgrading\r\nrm -rf libraries\/net\/minecraftforge\/forge\r\nrm unix_args.txt\r\n\r\n#Installing server\r\necho -e \"Installing forge server.\\n\"\r\njava -jar installer.jar --installServer || { echo -e \"install failed using Forge version ${FORGE_VERSION} and Minecraft version ${MINECRAFT_VERSION}\"; exit 4; }\r\n\r\n# Check if we need a symlink for 1.17+ Forge JPMS args\r\nif [[ $MC_VERSION =~ ^1\\.(17|18|19|20|21|22|23) || $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n unix_args\r\n\r\n# Check if someone has set MC to latest but overwrote it with older Forge version, otherwise we would have false positives\r\nelif [[ $MC_VERSION == \"latest\" && $FORGE_VERSION =~ ^1\\.(17|18|19|20|21|22|23) ]]; then\r\n unix_args\r\nelse\r\n # For versions below 1.17 that ship with jar\r\n mv $FORGE_JAR $SERVER_JARFILE\r\nfi\r\n\r\necho -e \"Deleting installer.jar file.\\n\"\r\nrm -rf installer.jar", "container": "openjdk:8-jdk-slim", "entrypoint": "bash" } @@ -72,4 +72,4 @@ "rules": "nullable|string|max:25" } ] -} +} \ No newline at end of file diff --git a/game_eggs/mohaa/README.md b/game_eggs/mohaa/README.md new file mode 100644 index 00000000..5c61607b --- /dev/null +++ b/game_eggs/mohaa/README.md @@ -0,0 +1,15 @@ +# Medal of Honor: Allied Assault + +Medal of Honor: Allied Assault is a first-person shooter video game developed by 2015, Inc. + +### Server Ports + +| Port | default | +| ---- | ------- | +| Game | 12203 | + +This egg uses the Unofficial MoH:AA 1.12 Patch that addes several features and security updates to allow a fair multiplayer experience. + +Ones the server is installed you can check the File Manager for `Medal of Honor Reborn Patch Documentation RC3.5.1.pdf` for more information. + +Check the `main/server.cfg` in the File Manager for more configuration options. diff --git a/game_eggs/mohaa/egg-mohaa.json b/game_eggs/mohaa/egg-mohaa.json new file mode 100644 index 00000000..832621d3 --- /dev/null +++ b/game_eggs/mohaa/egg-mohaa.json @@ -0,0 +1,104 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "exported_at": "2021-09-29T23:01:20+02:00", + "name": "mohaa", + "author": "th3dilli@gmx.at", + "description": null, + "features": null, + "images": [ + "ghcr.io\/parkervcp\/games:mohaa" + ], + "file_denylist": [], + "startup": ".\/mohaa_lnxded +set sv_punkbuster 0 +set fs_basepath {{BASE_PATH}} +set fs_outputpath {{LOG_DIR}} +set dedicated 2 +set sv_maxclients {{SERVER_MAXCLIENTS}} +set net_ip 0.0.0.0 +set net_port {{SERVER_PORT}} +exec server.cfg", + "config": { + "files": "{\r\n \"main\/server.cfg\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"seta sv_hostname\": \"seta sv_hostname \\\"{{env.SERVER_NAME}}\\\"\",\r\n \"seta sv_maxClients\": \"seta sv_maxClients \\\"{{env.SERVER_MAXCLIENTS}}\\\"\",\r\n \"seta rconPassword\": \"seta rconPassword \\\"{{env.RCON_PASSWORD}}\\\"\",\r\n \"seta g_password\": \"seta g_password \\\"{{env.SERVER_PASSWORD}}\\\"\",\r\n \"Map\": \"Map {{env.SERVER_MAP}}\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"------ Server Initialization Complete ------\",\r\n \"userInteraction\": []\r\n}", + "logs": "{}", + "stop": "quit" + }, + "scripts": { + "installation": { + "script": "apk --no-cache add curl\r\n\r\nif [[ ! -d \/mnt\/server\/ ]]; then\r\n mkdir -p \/mnt\/server\/\r\nfi\r\n\r\ncd \/mnt\/server\/\r\n\r\nDOWNLOAD_URL=https:\/\/linuxgsm.download\/MedalofHonorAlliedAssault\/moh_revival_v1.12_RC3.5.1.tar.xz\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then \r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else \r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\necho -e \"running 'curl -sSL ${DOWNLOAD_LINK} -o mohaaserver.tar.xz'\" \r\ncurl -sSL ${DOWNLOAD_LINK} -o mohaaserver.tar.xz\r\n\r\necho -e \"Unpacking server files\"\r\ntar xvf mohaaserver.tar.xz\r\n\r\nrm mohaaserver.tar.xz\r\n\r\necho -e \"checking for default server.cfg\"\r\n[[ -f main\/server.cfg ]] || curl -sSL ${CONFIG_URL} -o main\/server.cfg\r\n\r\necho -e \"running 'chmod +x .\/mohaa_lnxded'\"\r\nchmod +x .\/mohaa_lnxded", + "container": "alpine:3.4", + "entrypoint": "ash" + } + }, + "variables": [ + { + "name": "SERVER_MAXCLIENTS", + "description": "", + "env_variable": "SERVER_MAXCLIENTS", + "default_value": "14", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer" + }, + { + "name": "CONFIG_URL", + "description": "URL from where to get the initial server.cfg", + "env_variable": "CONFIG_URL", + "default_value": "https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/mohaa\/game_eggs\/mohaa\/server.cfg", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "SERVER_NAME", + "description": "The name of the server", + "env_variable": "SERVER_NAME", + "default_value": "MOHAA Server running on Pterodactyl", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "RCON_PASSWORD", + "description": "Admin password for rcon", + "env_variable": "RCON_PASSWORD", + "default_value": "ADMINPASSWORD", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "SERVER_MAP", + "description": "Select the map\r\n\r\nobj\/obj_team2\r\ndm\/mohdm7\r\ndm\/mohdm1\r\ndm\/mohdm3\r\ndm\/mohdm2\r\ndm\/mohdm6", + "env_variable": "SERVER_MAP", + "default_value": "dm\/mohdm7", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "LOG_DIR", + "description": "", + "env_variable": "LOG_DIR", + "default_value": "\/home\/container\/Logs", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "BASE_PATH", + "description": "", + "env_variable": "BASE_PATH", + "default_value": "\/home\/container", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + }, + { + "name": "SERVER_PASSWORD", + "description": "", + "env_variable": "SERVER_PASSWORD", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string" + } + ] +} \ No newline at end of file diff --git a/game_eggs/mohaa/server.cfg b/game_eggs/mohaa/server.cfg new file mode 100644 index 00000000..48a6edd2 --- /dev/null +++ b/game_eggs/mohaa/server.cfg @@ -0,0 +1,109 @@ +// General Settings + +seta sv_hostname "SERVERNAME" +seta sv_maxRate "10000" // DO NOT SET OVER 15000 OR YOUR ACCOUNT WILL BE LOCKED! +seta sv_timeout "200" //amount of time before assuming a disconnected state +seta sv_precache "1" +seta sv_fps "19" //max frame rate to clients - increasing will raise pings +seta sv_maxClients "14" +seta sv_allowDownload "0" +seta sv_reconnectlimit "3" +seta sv_zombietime "1" +seta g_inactivity "180" +seta g_forcerespawn "30" +seta g_syncronousclients "0" +seta sv_chatter "1" + + +// Server Passwords + +seta rconPassword "ADMINPASSWORD" +seta g_password "" +seta sv_privateClients "" //LOCKED SERVER PASSWORD +seta sv_privatePassword "" //PRIVATE SLOTS PASSWORD + + +// Server Network Settings + +set sv_flood_waitdelay "10" //not too sure on this, possibly time before flooder is allowed to type again (default) +set sv_flood_persecond "4" //messages per second to be considered a flood ?? (default) +set sv_flood_msgs "4" // ?? (default) +net_noipx "1" //Disallows IPX connections, TCP only (network protocol) + +// Logs + +//Logging +seta logfile "3" +seta g_log "mohserver.log" +seta g_logSync "0" + + +// Extras + +seta sv_maxPing "1000" +seta sv_minPing "0" +seta sv_floodProtect "1" + + +// Game Type Settings - ATTN-May be overwritten by MOH config file below +// Set the type of game: 1=Deathmatch 2= Team match 3 = OBJ 4 = Roundbased + +seta g_gametype "3" +seta timelimit "10" +seta fraglimit "0" + +set g_ft_settings "cvar: meltgun scanvis" + +set g_extgametype_mohdm1 ctf // Free-For-All for Southern France +set g_extgametype_mohdm2 ft // Team-Match on Destroyed Village +set g_extgametype_mohdm3 ftctf // Freeze-Tag on Remagen +set g_extgametype_mohdm4 ftctf // Freeze-Tag on Crossroads +set g_extgametype_mohdm5 ftdem // Round-Based-Match on Snowy Park +set g_extgametype_mohdm6 ftdem // Demolition on Stalingrad +set g_extgametype_mohdm7 ft// Capture-The-Flag on Algiers +set g_extgametype_obj_team1 ftobj // Freeze-Tag-Objective on The Hunt +set g_extgametype_obj_team2 ftobj // Objective-Match on V2 Rocket Facility +set g_extgametype_obj_team3 ftctf // Capture-The-Flag on Omaha Beach +set g_extgametype_obj_team4 ftobj // Freeze-Tag-Objective on The Bridge + +// seta capturelimit "6" +seta sv_gamespy "1" // Show our server in gamespy + +// Game Play Default Settings +//seta g_gravity "800" +//seta g_knockback "1000" +//seta g_quadfactor "3" +//seta g_speed "320" +//seta g_weaponRespawn "5" +//seta g_weaponTeamRespawn "30" //respawn time in seconds for team games +//seta dmflags "0" // 8 (no falling damage) 16 (fixed FOV) 32 (no footsteps) + +// Match Settings + +seta g_doWarmup "0" +seta g_warmup "20" + +// Team Preferences +seta g_teamAutoJoin "0" +seta g_teamForceBalance "1" + +// seta g_friendlyFire "0" +seta g_teamdamage "0" // FF on or Off 1 = on + +// Voting +seta g_allowVote "1" + +// Master Servers +seta sv_master1 "mohmaster.2015.com" +seta sv_master2 "master0.gamespy.com" +seta sv_master3 "master1.gamespy.com" + +set g_mef_settings "meltgun: on" + + +// Banned Players +seta g_filterBan "1" + + +seta sv_maplist "obj/obj_team2 dm/mohdm7 dm/mohdm1 dm/mohdm3 dm/mohdm2 dm/mohdm6" +Map dm/mohdm7 diff --git a/game_eggs/rdr/redm/egg-red-m.json b/game_eggs/rdr/redm/egg-red-m.json index 95a784b3..fca67286 100644 --- a/game_eggs/rdr/redm/egg-red-m.json +++ b/game_eggs/rdr/redm/egg-red-m.json @@ -1,17 +1,17 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2022-01-22T05:43:25-05:00", + "exported_at": "2022-07-19T11:52:55-04:00", "name": "RedM", "author": "parker@parkervcp.com", "description": "A new RedM egg for the latest builds due to recent changes in RedM", "features": null, - "images": [ - "ghcr.io\/parkervcp\/yolks:debian" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, "file_denylist": [], "startup": "$(pwd)\/alpine\/opt\/cfx-server\/ld-musl-x86_64.so.1 --library-path \"$(pwd)\/alpine\/usr\/lib\/v8\/:$(pwd)\/alpine\/lib\/:$(pwd)\/alpine\/usr\/lib\/\" -- $(pwd)\/alpine\/opt\/cfx-server\/FXServer +set citizen_dir $(pwd)\/alpine\/opt\/cfx-server\/citizen\/ +set sv_licenseKey {{CFX_LICENSE}} +set steam_webApiKey {{STEAM_WEBAPIKEY}} +set sv_maxplayers {{MAX_PLAYERS}} +exec server.cfg +set gamename rdr3", "config": { @@ -22,9 +22,9 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/ash\r\n# CFx Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napk add openssl tar xz curl wget git file --no-cache jq\r\n\r\nmkdir -p \/mnt\/server\/resources \/mnt\/server\/logs\/\r\n\r\ncd \/mnt\/server\r\n\r\necho \"updating citizenfx resource files\"\r\ngit clone https:\/\/github.com\/citizenfx\/cfx-server-data.git \/tmp\r\ncp -Rf \/tmp\/resources\/* resources\/\r\n\r\nRELEASE_PAGE=$(curl -sSL https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/)\r\nCHANGELOGS_PAGE=$(curl -sSL https:\/\/changelogs-live.fivem.net\/api\/changelog\/versions\/linux\/server)\r\n\r\nif [[ \"${CFX_VERSION}\" == \"latest\" ]] || [[ -z ${CFX_VERSION} ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.latest_download')\r\nelse\r\n VERSION_LINK=$(echo -e \"${RELEASE_PAGE}\" | grep -Eo '\".*\/*.tar.xz\"' | grep -Eo '\".*\"' | sed 's\/\\\"\/\/g' | sed 's\/\\.\\\/\/\/1' | grep ${CFX_VERSION})\r\n if [[ \"${VERSION_LINK}\" == \"\" ]]; then\r\n echo -e \"defaulting to latest as the version requested was invalid.\"\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.latest_download')\r\n else\r\n DOWNLOAD_LINK=$(echo https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/${VERSION_LINK})\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else\r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\necho -e \"Running curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\n\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\necho \"Extracting fivem files\"\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\nrm -rf ${DOWNLOAD_LINK##*\/} run.sh\r\n\r\nif [ -e server.cfg ]; then\r\n echo \"server config file exists\"\r\nelse\r\n echo \"Downloading default fivem config\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/gta\/fivem\/server.cfg >>server.cfg\r\nfi\r\n\r\necho \"install complete\"", - "container": "alpine:3.10", - "entrypoint": "ash" + "script": "#!\/bin\/ash\r\n# CFx Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update -y\r\napt install -y tar xz-utils file jq\r\n\r\nmkdir -p \/mnt\/server\/resources \/mnt\/server\/logs\/\r\n\r\ncd \/mnt\/server\r\n\r\necho \"updating citizenfx resource files\"\r\ngit clone https:\/\/github.com\/citizenfx\/cfx-server-data.git \/tmp\r\ncp -Rf \/tmp\/resources\/* resources\/\r\n\r\nRELEASE_PAGE=$(curl -sSL https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/)\r\nCHANGELOGS_PAGE=$(curl -sSL https:\/\/changelogs-live.fivem.net\/api\/changelog\/versions\/linux\/server)\r\n\r\nif [[ \"${CFX_VERSION}\" == \"recommended\" ]] || [[ -z ${CFX_VERSION} ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.recommended_download')\r\nelif [[ \"${CFX_VERSION}\" == \"latest\" ]]; then\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.latest_download')\r\nelse\r\n VERSION_LINK=$(echo -e \"${RELEASE_PAGE}\" | grep -Eo '\".*\/*.tar.xz\"' | grep -Eo '\".*\"' | sed 's\/\\\"\/\/g' | sed 's\/\\.\\\/\/\/1' | grep ${CFX_VERSION})\r\n if [[ \"${VERSION_LINK}\" == \"\" ]]; then\r\n echo -e \"defaulting to recommedned as the version requested was invalid.\"\r\n DOWNLOAD_LINK=$(echo $CHANGELOGS_PAGE | jq -r '.recommended_download')\r\n else\r\n DOWNLOAD_LINK=$(echo https:\/\/runtime.fivem.net\/artifacts\/fivem\/build_proot_linux\/master\/${VERSION_LINK})\r\n fi\r\nfi\r\n\r\nif [ ! -z \"${DOWNLOAD_URL}\" ]; then\r\n if curl --output \/dev\/null --silent --head --fail ${DOWNLOAD_URL}; then\r\n echo -e \"link is valid. setting download link to ${DOWNLOAD_URL}\"\r\n DOWNLOAD_LINK=${DOWNLOAD_URL}\r\n else\r\n echo -e \"link is invalid closing out\"\r\n exit 2\r\n fi\r\nfi\r\n\r\necho -e \"Running curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\n\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\necho \"Extracting fivem files\"\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"XZ\" ]; then\r\n tar xvf ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\nrm -rf ${DOWNLOAD_LINK##*\/} run.sh\r\n\r\nif [ -e server.cfg ]; then\r\n echo \"server config file exists\"\r\nelse\r\n echo \"Downloading default fivem config\"\r\n curl https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/gta\/fivem\/server.cfg >>server.cfg\r\nfi\r\n\r\necho \"install complete\"", + "container": "ghcr.io\/parkervcp\/installers:debian", + "entrypoint": "bash" } }, "variables": [ @@ -35,16 +35,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "required|string" - }, - { - "name": "Steam Web Api Key", - "description": "Use your Steam WebApiKey or set to 'none'. Get your key at https:\/\/steamcommunity.com\/dev\/apikey\/", - "env_variable": "STEAM_WEBAPIKEY", - "default_value": "none", - "user_viewable": true, - "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "Max Players", @@ -53,7 +45,8 @@ "default_value": "32", "user_viewable": true, "user_editable": false, - "rules": "required|integer|between:1,32" + "rules": "required|integer|between:1,32", + "field_type": "text" }, { "name": "Server Hostname", @@ -62,7 +55,8 @@ "default_value": "My new FXServer!", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "CFX version", @@ -71,7 +65,8 @@ "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:50" + "rules": "required|string|max:50", + "field_type": "text" }, { "name": "Download Link", @@ -80,7 +75,18 @@ "default_value": "", "user_viewable": false, "user_editable": false, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" + }, + { + "name": "Steam Web Api Key", + "description": "Use your Steam WebApiKey or set to 'none'. Get your key at https:\/\/steamcommunity.com\/dev\/apikey\/", + "env_variable": "STEAM_WEBAPIKEY", + "default_value": "none", + "user_viewable": true, + "user_editable": true, + "rules": "required|string", + "field_type": "text" } ] } diff --git a/game_eggs/steamcmd_servers/README.md b/game_eggs/steamcmd_servers/README.md index d6085c8a..c607f914 100644 --- a/game_eggs/steamcmd_servers/README.md +++ b/game_eggs/steamcmd_servers/README.md @@ -28,6 +28,10 @@ This is a collection of servers that use SteamCMD to install. [Barotrauma](barotrauma) +## Black Mesa + +[Black Mesa](black_mesa) + ## Citadel: Forged with Fire [citadel](citadel) @@ -96,6 +100,10 @@ This is a collection of servers that use SteamCMD to install. [Onset](onset) +## Open Fortress + +[Open Fortress](open_fortress) + ## Pavlov VR [Pavlov VR](pavlov_vr) diff --git a/game_eggs/steamcmd_servers/ark_survival_evolved/egg-ark--survival-evolved.json b/game_eggs/steamcmd_servers/ark_survival_evolved/egg-ark--survival-evolved.json index 51c0c553..9addbcd7 100644 --- a/game_eggs/steamcmd_servers/ark_survival_evolved/egg-ark--survival-evolved.json +++ b/game_eggs/steamcmd_servers/ark_survival_evolved/egg-ark--survival-evolved.json @@ -50,7 +50,7 @@ }, { "name": "Server Map", - "description": "Available Maps: TheIsland, TheCenter, Ragnarok, ScorchedEarth_P, Aberration_P, Extinction, Valguero_P, Genesis, CrystalIsles, Gen2", + "description": "Available Maps: TheIsland, TheCenter, Ragnarok, ScorchedEarth_P, Aberration_P, Extinction, Valguero_P, Genesis, CrystalIsles, Gen2, Fjordur", "env_variable": "SERVER_MAP", "default_value": "TheIsland", "user_viewable": true, diff --git a/game_eggs/steamcmd_servers/black_mesa/README.md b/game_eggs/steamcmd_servers/black_mesa/README.md new file mode 100644 index 00000000..3a1e3980 --- /dev/null +++ b/game_eggs/steamcmd_servers/black_mesa/README.md @@ -0,0 +1,17 @@ +# Black Mesa + +## From their [Website](https://www.crowbarcollective.com/games/black-mesa) + +Black Mesa is a 2020 first-person shooter game. It is a third-party remake of Half-Life (1998) made in the Source game engine. + +## Server Ports + +BlackMessa servers require 2 ports to be open, the SourceTV port can also be opened for spectators. + +| Port | default | +|-----------|---------| +| Game/rcon | 27015 | +| SourceTV | 27020 | +| ClientPort | 27005 | + +## Steam Download [SteamStore](https://store.steampowered.com/app/362890/Black_Mesa/) diff --git a/game_eggs/steamcmd_servers/black_mesa/egg-black-mesa.json b/game_eggs/steamcmd_servers/black_mesa/egg-black-mesa.json new file mode 100644 index 00000000..f58682a5 --- /dev/null +++ b/game_eggs/steamcmd_servers/black_mesa/egg-black-mesa.json @@ -0,0 +1,92 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2022-08-07T17:56:38+02:00", + "name": "Black Mesa", + "author": "avalongamecs@gmail.com", + "description": "Black Mesa is a 2020 first-person shooter game. It is a third-party remake of Half-Life (1998) made in the Source game engine.", + "features": null, + "docker_images": { + "quay.io\/pterodactyl\/core:source": "quay.io\/pterodactyl\/core:source" + }, + "file_denylist": [], + "startup": ".\/srcds_run -game {{SRCDS_GAME}} -strictportbind -ip 0.0.0.0 -port {{SERVER_PORT}} +clientport {{SRCDS_CPORT}} +tv_port {{SRCDS_STV}} +map {{SRCDS_MAP}} +servercfgfile server.cfg -maxplayers {{MAX_PLAYERS}}", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"gameserver Steam ID\"\r\n}", + "logs": "{\r\n \"custom\": true,\r\n \"location\": \"logs\/latest.log\"\r\n}", + "stop": "quit" + }, + "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 'debian:buster-slim'\r\n\r\n##\r\n#\r\n# Variables\r\n# STEAM_USER, STEAM_PASS, STEAM_AUTH - Steam user setup. If a user has 2fa enabled it will most likely fail due to timeout. Leave blank for anon install.\r\n# WINDOWS_INSTALL - if it's a windows server you want to install set to 1\r\n# SRCDS_APPID - steam app id ffound here - https:\/\/developer.valvesoftware.com\/wiki\/Dedicated_Servers_List\r\n# EXTRA_FLAGS - when a server has extra glas for things like beta installs or updates.\r\n#\r\n##\r\n\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc1 ca-certificates\r\n\r\n## just in case someone removed the defaults.\r\nif [ \"${STEAM_USER}\" == \"\" ]; 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\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 +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +force_install_dir \/mnt\/server +app_update ${SRCDS_APPID} ${EXTRA_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", + "container": "ghcr.io\/parkervcp\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Game ID", + "description": "nmrih id", + "env_variable": "SRCDS_APPID", + "default_value": "346680", + "user_viewable": true, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "Game Name", + "description": "game name", + "env_variable": "SRCDS_GAME", + "default_value": "bms", + "user_viewable": true, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "Default Map", + "description": "default map", + "env_variable": "SRCDS_MAP", + "default_value": "dm_crossfire", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:25", + "field_type": "text" + }, + { + "name": "Client port", + "description": "client port", + "env_variable": "SRCDS_CPORT", + "default_value": "27005", + "user_viewable": true, + "user_editable": false, + "rules": "required|regex:\/^(\\w{1,20})$\/", + "field_type": "text" + }, + { + "name": "Source TV", + "description": "source TV", + "env_variable": "SRCDS_STV", + "default_value": "27020", + "user_viewable": true, + "user_editable": false, + "rules": "required|string|max:20", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "The maximum amount of players allowed on your game server.", + "env_variable": "MAX_PLAYERS", + "default_value": "32", + "user_viewable": true, + "user_editable": true, + "rules": "required|integer|max:128", + "field_type": "text" + } + ] +} diff --git a/game_eggs/steamcmd_servers/craftopia/egg-craftopia.json b/game_eggs/steamcmd_servers/craftopia/egg-craftopia.json index 5a24cf53..afd4700f 100644 --- a/game_eggs/steamcmd_servers/craftopia/egg-craftopia.json +++ b/game_eggs/steamcmd_servers/craftopia/egg-craftopia.json @@ -1,30 +1,30 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2022-01-11T16:08:26+01:00", + "exported_at": "2022-07-19T15:47:00+02:00", "name": "Craftopia", "author": "info@goover.de", "description": "Craftopia is the brand new multiplayer survival action game made in Japan. We combined many features we find enjoyable, such as hunting, farming, hack-and-slash, building, automation to develop this game.", "features": [ "steam_disk_space" ], - "images": [ - "ghcr.io\/parkervcp\/games:source" - ], + "docker_images": { + "ghcr.io\/parkervcp\/games:source": "ghcr.io\/parkervcp\/games:source" + }, "file_denylist": [], "startup": ".\/Craftopia.x86_64", "config": { - "files": "{\r\n \"ServerSetting.ini\": {\r\n \"parser\": \"file\",\r\n \"find\": {\r\n \"name=\": \"name={{server.build.env.WORLD_NAME}}\",\r\n \"port=\": \"port={{server.build.default.port}}\"\r\n }\r\n }\r\n}", + "files": "{\r\n \"ServerSetting.ini\": {\r\n \"parser\": \"ini\",\r\n \"find\": {\r\n \"GameWorld.name=\": \"{{server.build.env.WORLD_NAME}}\",\r\n \"Host.port=\": \"{{server.build.default.port}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"World is loaded!\"\r\n}", "logs": "{}", "stop": "^^C" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n#SRCDS_APPID - steam app id found here - https:\/\/developer.valvesoftware.com\/wiki\/Dedicated_Servers_List\r\n# AUTO_UPDATE - Adding this variable to the egg allows disabling or enabling automated updates on boot. Boolean value. 0 to disable and 1 to enable.\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", + "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# Variables\r\n# STEAM_USER, STEAM_PASS, STEAM_AUTH - Steam user setup. If a user has 2fa enabled it will most likely fail due to timeout. Leave blank for anon install.\r\n# WINDOWS_INSTALL - if it's a windows server you want to install set to 1\r\n# SRCDS_APPID - steam app id found here - https:\/\/developer.valvesoftware.com\/wiki\/Dedicated_Servers_List\r\n# SRCDS_BETAID - beta branch of a steam app. Leave blank to install normal branch\r\n# SRCDS_BETAPASS - password for a beta branch should one be required during private or closed testing phases.. Leave blank for no password.\r\n# INSTALL_FLAGS - Any additional SteamCMD flags to pass during install.. Keep in mind that steamcmd auto update process in the docker image might overwrite or ignore these when it performs update on server boot.\r\n# AUTO_UPDATE - Adding this variable to the egg allows disabling or enabling automated updates on boot. Boolean value. 0 to disable and 1 to enable.\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\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", "container": "ghcr.io\/parkervcp\/installers:debian", "entrypoint": "bash" } @@ -37,7 +37,8 @@ "default_value": "1670340", "user_viewable": false, "user_editable": false, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "Auto Update", @@ -46,7 +47,8 @@ "default_value": "1", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "World Name", @@ -55,7 +57,8 @@ "default_value": "Pterodactyl Server", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:50" + "rules": "required|string|max:50", + "field_type": "text" } ] -} +} \ No newline at end of file diff --git a/game_eggs/steamcmd_servers/open_fortress/README.md b/game_eggs/steamcmd_servers/open_fortress/README.md new file mode 100644 index 00000000..1d488524 --- /dev/null +++ b/game_eggs/steamcmd_servers/open_fortress/README.md @@ -0,0 +1,14 @@ +# Open Fortress + +## From their [Website](https://openfortress.fun/) + +Open Fortress is a free Team Fortress 2 mod that introduces new gamemodes, weapons, characters, maps, and more to the world of TF2. + +## Server Ports + +Open Fortress servers require 1 port to be open, the SourceTV port can also be opened for spectators. + +| Port | default | +|-----------|---------| +| Game/rcon | 27015 | +| SourceTV | 27020 | diff --git a/game_eggs/steamcmd_servers/open_fortress/egg-open-fortress.json b/game_eggs/steamcmd_servers/open_fortress/egg-open-fortress.json new file mode 100644 index 00000000..e3bbd203 --- /dev/null +++ b/game_eggs/steamcmd_servers/open_fortress/egg-open-fortress.json @@ -0,0 +1,74 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2022-07-18T08:23:04-04:00", + "name": "Open Fortress", + "author": "espeon@espeon.dev", + "description": "Open Fortress is a free Team Fortress 2 mod that introduces new gamemodes, weapons, characters, maps, and more to the world of TF2.", + "features": [ + "steam_disk_space" + ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:games_source": "ghcr.io\/parkervcp\/yolks:games_source" + }, + "file_denylist": [], + "startup": ".\/srcds_run -game {{SRCDS_GAME}} -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart -debug +maxplayers {{MAXPLAYERS}}", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"gameserver Steam ID\"\r\n}", + "logs": "{}", + "stop": "quit" + }, + "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 'ubuntu:18.04'\r\napt -y update\r\napt -y --no-install-recommends install curl lib32gcc1 ca-certificates p7zip-full wget\r\n## just in case someone removed the defaults.\r\nif [ \"${STEAM_USER}\" == \"\" ]; then\r\nSTEAM_USER=anonymous\r\nSTEAM_PASS=\"\"\r\nSTEAM_AUTH=\"\"\r\nfi\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\ncd \/mnt\/server\/steamcmd\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## install game using steamcmd\r\n.\/steamcmd.sh +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +force_install_dir \/mnt\/server +app_update ${SRCDS_APPID} ${EXTRA_FLAGS} +quit ## other flags may be needed depending on install. looking at you cs 1.6\r\n## install tf2 content using steamcmd\r\n.\/steamcmd.sh +login ${STEAM_USER} ${STEAM_PASS} ${STEAM_AUTH} +force_install_dir \/mnt\/server\/tf2 +app_update 232250 ${EXTRA_FLAGS} +quit ## other flags may be needed depending on install. looking at you cs 1.6\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## set up 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk64\r\ncp -v linux64\/steamclient.so ..\/.steam\/sdk64\/steamclient.so\r\n## download OpenFortress\r\ncd \/mnt\/server\r\nmv bin bin_dontdeleteme\r\nwget https:\/\/git.sr.ht\/~welt\/murse\/refs\/download\/v0.2.1\/murse-v0.2.1-linux-amd64.tar.gz -O murse.tgz 2> \/dev\/null\r\ntar xvfz murse.tgz\r\nrm -rf murse.tgz\r\nchmod +x murse\r\n.\/murse upgrade -u https:\/\/toast1.openfortress.fun\/toast -c $(curl https:\/\/toast1.openfortress.fun\/toast\/reithreads) asdrggvead\/open_fortress\r\nmv \/mnt\/server\/asdrggvead\/open_fortress \/mnt\/server\/open_fortress\r\nrm -rf asdrggvead\r\nmv bin_dontdeleteme bin\r\n## add fixed gameinfo\r\ncd \/mnt\/server\/open_fortress\r\nrm -rf gameinfo.txt\r\ncat >> gameinfo.txt << EOF\r\n\"GameInfo\"\r\n{\r\ngame \"Open Fortress\"\r\ntitle \"\"\r\ntitle2 \"\"\r\ngamelogo \"1\"\r\ndeveloper \"https:\/\/github.com\/AgitationSkeleton\/open_fortress\/blob\/master\/credits.txt\"\r\ndeveloper_url\t\"https:\/\/github.com\/KaidemonLP\/Open-Fortress-Source\"\r\nmanual \"\"\r\ntype \"multiplayer_only\"\r\nhasportals \"0\" \/\/ gameui.dll\r\nhashdcontent\t\"0\" \/\/ gameui.dll\r\nnomodels \"0\" \/\/ gameui.dll\r\nnohimodel \"0\" \/\/ gameui.dll\r\nnocrosshair \"0\" \/\/ gameui.dll\r\nadvcrosshair \"1\" \/\/ gameui.dll\r\nnodifficulty\t\"1\" \/\/ gameui.dll\r\nsupportsvr \"0\" \/\/ engine.dll + gameui.dll\r\nbots \"0\" \/\/ gameui.dll\r\nnodegraph \"1\" \/\/ engine.dll\r\nperfwizard \"0\" \/\/ unused\r\nSupportsDX8 \"0\" \/\/ unused\r\nSupportsDX9 \"1\" \/\/ unused\r\nSupportsDX10\t\"0\" \/\/ unused\r\nSupportsDX11\t\"0\" \/\/ unused\r\nSupportsXbox\t\"0\" \/\/ unused\r\nSupportsXbox360\t\"0\" \/\/ unused\r\nSupportsXboxOne\t\"0\" \/\/ unused\r\nSupportsPS3 \"0\" \/\/ unused\r\nSupportsPS4 \"0\" \/\/ unused\r\nicon \"resource\/game\"\r\nGameData \"ofd_fic2.fgd\"\r\nInstancePath\t\"maps\/instances\/\"\r\nhidden_maps\r\n{\r\n\"test_speakers\" 1\r\n\"test_hardware\" 1\r\n\"background01\" 1\r\n\"background02\" 1\r\n\"background03\" 1\r\n\"background04\" 1\r\n\"background05\" 1\r\n\"background06\" 1\r\n\"background07\" 1\r\n\"background08\" 1\r\n\"background09\" 1\r\n\"background12\" 1\r\n\"background15\" 1\r\n\"ep1_c17_00\" 1\r\n\"ep1_c17_00a\" 1\r\n\"ep1_c17_01\" 1\r\n\"ep1_c17_01a\" 1\r\n\"ep1_c17_02\" 1\r\n\"ep1_c17_02a\" 1\r\n\"ep1_c17_02b\" 1\r\n\"ep1_c17_05\" 1\r\n\"ep1_c17_06\" 1\r\n\"ep1_citadel_00\"\t1\r\n\"ep1_citadel_00_demo\" 1\r\n\"ep1_citadel_01\"\t1\r\n\"ep1_citadel_02\"\t1\r\n\"ep1_citadel_02b\"\t1\r\n\"ep1_citadel_03\"\t1\r\n\"ep1_citadel_04\"\t1\r\n\"ep1_background01\"\t1\r\n\"ep1_background01a\"\t1\r\n\"ep1_background02\"\t1\r\n\"ep2_outland_01\"\t1\r\n\"ep2_outland_01a\"\t1\r\n\"ep2_outland_02\"\t1\r\n\"ep2_outland_03\"\t1\r\n\"ep2_outland_04\"\t1\r\n\"ep2_outland_05\"\t1\r\n\"ep2_outland_06\"\t1\r\n\"ep2_outland_06a\"\t1\r\n\"ep2_outland_07\"\t1\r\n\"ep2_outland_08\"\t1\r\n\"ep2_outland_09\"\t1\r\n\"ep2_outland_10\"\t1\r\n\"ep2_outland_10a\"\t1\r\n\"ep2_outland_11\"\t1\r\n\"ep2_outland_11a\"\t1\r\n\"ep2_outland_11b\"\t1\r\n\"ep2_outland_12\"\t1\r\n\"ep2_outland_12a\"\t1\r\n\"ep2_background01\"\t1\r\n\"ep2_background02\"\t1\r\n\"ep2_background02a\"\t1\r\n\"ep2_background03\"\t1\r\n\"credits\" 1\r\n\"vst_lostcoast\" 1\r\n\"test\" 1\r\n\"sdk_vehicles\" 1\r\n}\r\nFileSystem\r\n{\r\nSteamAppId 243750\r\nSearchPaths\r\n{\r\ngame+mod |gameinfo_path|custom\/*\r\ngame+game_write+mod+mod_write+default_write_path |gameinfo_path|.\r\ngamebin |gameinfo_path|bin\r\n\/\/ The lines below until the BREAK comment are responsible for the game resources to work properly\r\n\/\/ in Hammer and other Source tools. The default setup assumes that you have everything (Steam, TF2,\r\n\/\/ Source SDK and OF) in the same drive letter\/partition. If you have a different storage configuration,\r\n\/\/ feel free to modify the paths below between quotes (example: D:\\Steam\\steamapps\\common\\Team Fortress 2\\tf).\r\ngame \"\/home\/container\/tf2\/tf\/tf2_misc.vpk\"\r\ngame \"\/home\/container\/tf2\/tf\/tf2_sound_misc.vpk\"\r\ngame \"\/home\/container\/tf2\/tf\/tf2_sound_vo_english.vpk\"\r\ngame \"\/home\/container\/tf2\/tf\/tf2_textures.vpk\"\r\ngame \"\/home\/container\/tf2\/tf\"\r\ngame \"\/home\/container\/tf2\/hl2\/hl2_textures.vpk\"\r\ngame \"\/home\/container\/tf2\/hl2\/hl2_sound_vo_english.vpk\"\r\ngame \"\/home\/container\/tf2\/hl2\/hl2_sound_misc.vpk\"\r\n\/\/ The hl2 folder here is from Source SDK Base 2013 Multiplayer.\r\ngame \"|all_source_engine_paths|hl2\\hl2_misc.vpk\"\r\ngame \"|all_source_engine_paths|hl2\"\r\n\/\/ ========== BREAK ==========\r\nplatform |all_source_engine_paths|platform\/platform_misc.vpk\r\nplatform |all_source_engine_paths|platform\r\ngame+download |gameinfo_path|download\r\n}\r\n}\r\n}\r\nEOF\r\n## fix issue \/w symlink\r\ncd \/mnt\/server\/bin\r\nln -s datacache_srv.so datacache.so\r\nln -s dedicated_srv.so dedicated.so\r\nln -s engine_srv.so engine.so\r\nln -s materialsystem_srv.so materialsystem.so\r\nln -s replay_srv.so replay.so\r\nln -s scenefilecache_srv.so scenefilecache.so\r\nln -s shaderapiempty_srv.so shaderapiempty.so\r\nln -s soundemittersystem_srv.so soundemittersystem.so\r\nln -s studiorender_srv.so studiorender.so\r\nln -s vphysics_srv.so vphysics.so\r\n## more symlink fixes\r\ncd \/mnt\/server\/open_fortress\/bin\r\nln -s server.so server_srv.so", + "container": "ubuntu:18.04", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Game ID", + "description": "The ID corresponding to the game to download and run using SRCDS.", + "env_variable": "SRCDS_APPID", + "default_value": "244310", + "user_viewable": true, + "user_editable": false, + "rules": "required|regex:\/^(244310)$\/", + "field_type": "text" + }, + { + "name": "Game Name", + "description": "The name corresponding to the game to download and run using SRCDS.", + "env_variable": "SRCDS_GAME", + "default_value": "open_fortress", + "user_viewable": true, + "user_editable": false, + "rules": "required|regex:\/^(open_fortress)$\/", + "field_type": "text" + }, + { + "name": "Default Map", + "description": "The default map to use when starting the server.", + "env_variable": "SRCDS_MAP", + "default_value": "dm_2fort", + "user_viewable": true, + "user_editable": true, + "rules": "required|regex:\/^(\\w{1,20})$\/", + "field_type": "text" + }, + { + "name": "Max Players", + "description": "The maximum amount of players allowed on the server.", + "env_variable": "MAXPLAYERS", + "default_value": "24", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:32", + "field_type": "text" + } + ] +} \ No newline at end of file diff --git a/game_eggs/steamcmd_servers/open_fortress/gameinfo.txt b/game_eggs/steamcmd_servers/open_fortress/gameinfo.txt new file mode 100644 index 00000000..c3aadb27 --- /dev/null +++ b/game_eggs/steamcmd_servers/open_fortress/gameinfo.txt @@ -0,0 +1,134 @@ +"GameInfo" +{ + game "Open Fortress" + title "" + title2 "" + gamelogo "1" + developer "https://github.com/AgitationSkeleton/open_fortress/blob/master/credits.txt" + developer_url "https://github.com/KaidemonLP/Open-Fortress-Source" + manual "" + + type "multiplayer_only" + hasportals "0" // gameui.dll + hashdcontent "0" // gameui.dll + nomodels "0" // gameui.dll + nohimodel "0" // gameui.dll + nocrosshair "0" // gameui.dll + advcrosshair "1" // gameui.dll + nodifficulty "1" // gameui.dll + supportsvr "0" // engine.dll + gameui.dll + bots "0" // gameui.dll + nodegraph "1" // engine.dll + perfwizard "0" // unused + SupportsDX8 "0" // unused + SupportsDX9 "1" // unused + SupportsDX10 "0" // unused + SupportsDX11 "0" // unused + SupportsXbox "0" // unused + SupportsXbox360 "0" // unused + SupportsXboxOne "0" // unused + SupportsPS3 "0" // unused + SupportsPS4 "0" // unused + icon "resource/game" + GameData "ofd_fic2.fgd" + InstancePath "maps/instances/" + + hidden_maps + { + "test_speakers" 1 + "test_hardware" 1 + "background01" 1 + "background02" 1 + "background03" 1 + "background04" 1 + "background05" 1 + "background06" 1 + "background07" 1 + "background08" 1 + "background09" 1 + "background12" 1 + "background15" 1 + "ep1_c17_00" 1 + "ep1_c17_00a" 1 + "ep1_c17_01" 1 + "ep1_c17_01a" 1 + "ep1_c17_02" 1 + "ep1_c17_02a" 1 + "ep1_c17_02b" 1 + "ep1_c17_05" 1 + "ep1_c17_06" 1 + "ep1_citadel_00" 1 + "ep1_citadel_00_demo" 1 + "ep1_citadel_01" 1 + "ep1_citadel_02" 1 + "ep1_citadel_02b" 1 + "ep1_citadel_03" 1 + "ep1_citadel_04" 1 + "ep1_background01" 1 + "ep1_background01a" 1 + "ep1_background02" 1 + "ep2_outland_01" 1 + "ep2_outland_01a" 1 + "ep2_outland_02" 1 + "ep2_outland_03" 1 + "ep2_outland_04" 1 + "ep2_outland_05" 1 + "ep2_outland_06" 1 + "ep2_outland_06a" 1 + "ep2_outland_07" 1 + "ep2_outland_08" 1 + "ep2_outland_09" 1 + "ep2_outland_10" 1 + "ep2_outland_10a" 1 + "ep2_outland_11" 1 + "ep2_outland_11a" 1 + "ep2_outland_11b" 1 + "ep2_outland_12" 1 + "ep2_outland_12a" 1 + "ep2_background01" 1 + "ep2_background02" 1 + "ep2_background02a" 1 + "ep2_background03" 1 + "credits" 1 + "vst_lostcoast" 1 + "test" 1 + "sdk_vehicles" 1 + } + + FileSystem + { + SteamAppId 243750 + + SearchPaths + { + game+mod |gameinfo_path|custom/* + game+game_write+mod+mod_write+default_write_path |gameinfo_path|. + gamebin |gameinfo_path|bin + + // The lines below until the BREAK comment are responsible for the game resources to work properly + // in Hammer and other Source tools. The default setup assumes that you have everything (Steam, TF2, + // Source SDK and OF) in the same drive letter/partition. If you have a different storage configuration, + // feel free to modify the paths below between quotes (example: D:\Steam\steamapps\common\Team Fortress 2\tf). + game "/home/container/tf2/tf/tf2_misc.vpk" + game "/home/container/tf2/tf/tf2_sound_misc.vpk" + game "/home/container/tf2/tf/tf2_sound_vo_english.vpk" + game "/home/container/tf2/tf/tf2_textures.vpk" + game "/home/container/tf2/tf" + + game "/home/container/tf2/hl2/hl2_textures.vpk" + game "/home/container/tf2/hl2/hl2_sound_vo_english.vpk" + game "/home/container/tf2/hl2/hl2_sound_misc.vpk" + + // The hl2 folder here is from Source SDK Base 2013 Multiplayer. + game "|all_source_engine_paths|hl2\hl2_misc.vpk" + game "|all_source_engine_paths|hl2" + // ========== BREAK ========== + + platform |all_source_engine_paths|platform/platform_misc.vpk + platform |all_source_engine_paths|platform + + game+download |gameinfo_path|download + + } + } +} diff --git a/game_eggs/steamcmd_servers/satisfactory/README.md b/game_eggs/steamcmd_servers/satisfactory/README.md index ccd22a4f..d76b4c8e 100644 --- a/game_eggs/steamcmd_servers/satisfactory/README.md +++ b/game_eggs/steamcmd_servers/satisfactory/README.md @@ -152,7 +152,7 @@ ___ ### Console Commands -As of v0.5.1.10, the console tab in the client server manager is the only way to execute commands. Entering commands via Pterodactyl do nothing. +The console tab in the client server manager is the only way to execute commands. Entering commands via Pterodactyl do nothing. [List of known commands can be found via the Wiki.](https://satisfactory.fandom.com/wiki/Dedicated_servers#Console_commands) diff --git a/game_eggs/steamcmd_servers/satisfactory/egg-satisfactory.json b/game_eggs/steamcmd_servers/satisfactory/egg-satisfactory.json index cc82ea88..c9515b07 100644 --- a/game_eggs/steamcmd_servers/satisfactory/egg-satisfactory.json +++ b/game_eggs/steamcmd_servers/satisfactory/egg-satisfactory.json @@ -1,7 +1,7 @@ { - "_comment": "Pterodactyl Satisfactory Egg ~ Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord ~ 2022-02-07", + "_comment": "Pterodactyl Satisfactory Egg ~ Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord ~ 2022-06-27", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, "name": "Satisfactory", @@ -10,9 +10,9 @@ "features": [ "steam_disk_space" ], - "images": [ - "ghcr.io\/parkervcp\/games:source" - ], + "docker_images": { + "ghcr.io\/parkervcp\/games:source": "ghcr.io\/parkervcp\/games:source" + }, "file_denylist": [], "startup": ".\/Engine\/Binaries\/Linux\/UE4Server-Linux-Shipping FactoryGame ?listen -Port={{SERVER_PORT}} -ServerQueryPort={{QUERY_PORT}} -BeaconPort={{BEACON_PORT}} -multihome=0.0.0.0 $(if {{DISABLE_SEASONAL}}; then echo \"-DisableSeasonalEvents\"; fi)", "config": { @@ -23,7 +23,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\n# File: Pterodactyl Satisfactory Egg - egg-satisfactory.json\r\n# Authors: Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord\r\n# Date: 2021\/11\/29\r\n# License: MIT License\r\n\r\n## Download and install SteamCMD\r\ncd \/tmp\r\ncurl -sSL -o steamcmd.tar.gz http:\/\/media.steampowered.com\/installer\/steamcmd_linux.tar.gz\r\nmkdir -p \/mnt\/server\/steamcmd\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login anonymous +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) validate +exit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so\r\n\r\n## Satisfactory setup\r\n# Check for successful installation and make the core binary executable.\r\ncd \/mnt\/server\/Engine\/Binaries\/Linux\r\nif [[ ! -f UE4Server-Linux-Shipping ]]; then\r\n echo -e \"\\n\\nSteamCMD failed to install the Satisfactory Dedicated Server!\"\r\n echo -e \"\\tTry reinstalling the server again.\\n\"\r\n exit 1\r\nelse\r\n chmod +x UE4Server-Linux-Shipping\r\nfi\r\n\r\n# Make Config directory and default .ini files (since they are not initially present before first server start)\r\nmkdir -p \/mnt\/server\/FactoryGame\/Saved\/Config\/LinuxServer\/ && cd \"$_\"\r\n# Currently, this will delete & re-create certain .ini files during a re-install if they are already present.\r\n# While undesirable, this is required due to a current Pterodactyl ini config parser limitation.\r\n# When the patch to this limitation hits the production branch, this will be updated.\r\nrm -f Engine.ini Game.ini GameUserSettings.ini\r\n\r\necho -e '\\nCreating default \"Engine.ini\" configuration file...'\r\ncat > Engine.ini << EOF\r\n[\/Script\/FactoryGame.FGSaveSession]\r\nmNumRotatingAutosaves=${NUM_AUTOSAVES}\r\n\r\n[CrashReportClient]\r\nbImplicitSend=${UPLOAD_CRASH_REPORT}\r\n\r\n[\/Script\/OnlineSubsystemUtils.IpNetDriver]\r\nInitialConnectTimeout=${INIT_CONNECT_TIMEOUT}\r\nConnectionTimeout=${CONNECT_TIMEOUT}\r\nEOF\r\n\r\necho -e 'Creating default \"Game.ini\" configuration file...'\r\ncat > Game.ini << EOF\r\n[\/Script\/Engine.GameSession]\r\nMaxPlayers=${MAX_PLAYERS}\r\nEOF\r\n\r\necho -e 'Creating default \"GameUserSettings.ini\" configuration file...'\r\ncat > GameUserSettings.ini << EOF\r\n[\/Script\/FactoryGame.FGGameUserSettings]\r\nmIntValues=((\"FG.NetworkQuality\", ${NETWORK_QUALITY}))\r\nmFloatValues=((\"FG.AutosaveInterval\", ${AUTOSAVE_INTERVAL}))\r\nEOF\r\n\r\necho -e \"\\nSatisfactory Dedicated Server successfully installed!\\n\"", + "script": "#!\/bin\/bash\r\n\r\n# File: Pterodactyl Satisfactory Egg - egg-satisfactory.json\r\n# Authors: Red-Thirten, Kubi, matthewp, Software-Noob, and Zarklord\r\n# Date: 2022\/06\/27\r\n# License: MIT License\r\n\r\n## Download and install SteamCMD\r\ncd \/tmp\r\ncurl -sSL -o steamcmd.tar.gz https:\/\/steamcdn-a.akamaihd.net\/client\/installer\/steamcmd_linux.tar.gz\r\nmkdir -p \/mnt\/server\/steamcmd\r\ntar -xzvf steamcmd.tar.gz -C \/mnt\/server\/steamcmd\r\ncd \/mnt\/server\/steamcmd\r\n\r\n# SteamCMD fails otherwise for some reason, even running as root.\r\nchown -R root:root \/mnt\r\nexport HOME=\/mnt\/server\r\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server +login anonymous +app_update ${SRCDS_APPID} $( [[ -z ${SRCDS_BETAID} ]] || printf %s \"-beta ${SRCDS_BETAID}\" ) $( [[ -z ${SRCDS_BETAPASS} ]] || printf %s \"-betapassword ${SRCDS_BETAPASS}\" ) validate +exit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p \/mnt\/server\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so \/mnt\/server\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so \/mnt\/server\/.steam\/sdk64\/steamclient.so\r\n\r\n## Satisfactory setup\r\n# Check for successful installation and make the core binary executable.\r\ncd \/mnt\/server\/Engine\/Binaries\/Linux\r\nif [[ ! -f UE4Server-Linux-Shipping ]]; then\r\n echo -e \"\\n\\nSteamCMD failed to install the Satisfactory Dedicated Server!\"\r\n echo -e \"\\tTry reinstalling the server again.\\n\"\r\n exit 1\r\nelse\r\n chmod +x UE4Server-Linux-Shipping\r\nfi\r\n\r\n# Make Config directory and default .ini files (since they are not initially present before first server start)\r\nmkdir -p \/mnt\/server\/FactoryGame\/Saved\/Config\/LinuxServer\/ && cd \"$_\"\r\n# Currently, this will delete & re-create certain .ini files during a re-install if they are already present.\r\n# While undesirable, this is required due to a current Pterodactyl ini config parser limitation.\r\n# When the patch to this limitation hits the production branch, this will be updated.\r\nrm -f Engine.ini Game.ini GameUserSettings.ini\r\n\r\necho -e '\\nCreating default \"Engine.ini\" configuration file...'\r\ncat > Engine.ini << EOF\r\n[\/Script\/FactoryGame.FGSaveSession]\r\nmNumRotatingAutosaves=${NUM_AUTOSAVES}\r\n\r\n[CrashReportClient]\r\nbImplicitSend=${UPLOAD_CRASH_REPORT}\r\n\r\n[\/Script\/OnlineSubsystemUtils.IpNetDriver]\r\nInitialConnectTimeout=${INIT_CONNECT_TIMEOUT}\r\nConnectionTimeout=${CONNECT_TIMEOUT}\r\nEOF\r\n\r\necho -e 'Creating default \"Game.ini\" configuration file...'\r\ncat > Game.ini << EOF\r\n[\/Script\/Engine.GameSession]\r\nMaxPlayers=${MAX_PLAYERS}\r\nEOF\r\n\r\necho -e 'Creating default \"GameUserSettings.ini\" configuration file...'\r\ncat > GameUserSettings.ini << EOF\r\n[\/Script\/FactoryGame.FGGameUserSettings]\r\nmIntValues=((\"FG.NetworkQuality\", ${NETWORK_QUALITY}))\r\nmFloatValues=((\"FG.AutosaveInterval\", ${AUTOSAVE_INTERVAL}))\r\nEOF\r\n\r\necho -e \"\\nSatisfactory Dedicated Server successfully installed!\\n\"", "container": "ghcr.io\/pterodactyl\/installers:debian", "entrypoint": "\/bin\/bash" } @@ -36,7 +36,8 @@ "default_value": "15777", "user_viewable": true, "user_editable": false, - "rules": "required|integer|between:1024,65536" + "rules": "required|integer|between:1024,65536", + "field_type": "text" }, { "name": "[REQUIRED] Beacon Port", @@ -45,7 +46,8 @@ "default_value": "15000", "user_viewable": true, "user_editable": false, - "rules": "required|integer|between:1024,65536" + "rules": "required|integer|between:1024,65536", + "field_type": "text" }, { "name": "Automatic Updates", @@ -54,7 +56,8 @@ "default_value": "1", "user_viewable": true, "user_editable": true, - "rules": "boolean" + "rules": "boolean", + "field_type": "text" }, { "name": "[Repair] Validate Server Files", @@ -63,7 +66,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Autosave Interval", @@ -72,7 +76,8 @@ "default_value": "300", "user_viewable": true, "user_editable": true, - "rules": "required|numeric|min:1" + "rules": "required|numeric|min:1", + "field_type": "text" }, { "name": "Number of Rotating Autosaves", @@ -81,7 +86,8 @@ "default_value": "3", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:0" + "rules": "required|integer|min:0", + "field_type": "text" }, { "name": "Upload Crash Reports", @@ -90,7 +96,8 @@ "default_value": "true", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "Disable Seasonal Events", @@ -99,7 +106,8 @@ "default_value": "false", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "[Experimental] Max Players", @@ -108,7 +116,8 @@ "default_value": "4", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:1" + "rules": "required|integer|min:1", + "field_type": "text" }, { "name": "[Advanced] Client Initial Connection Timeout", @@ -117,7 +126,8 @@ "default_value": "30", "user_viewable": true, "user_editable": true, - "rules": "required|numeric|min:1" + "rules": "required|numeric|min:1", + "field_type": "text" }, { "name": "[Advanced] Client Established Connection Timeout", @@ -126,7 +136,8 @@ "default_value": "20", "user_viewable": true, "user_editable": true, - "rules": "required|numeric|min:1" + "rules": "required|numeric|min:1", + "field_type": "text" }, { "name": "[Advanced] Network Quality", @@ -135,7 +146,8 @@ "default_value": "3", "user_viewable": true, "user_editable": true, - "rules": "required|integer|between:0,3" + "rules": "required|integer|between:0,3", + "field_type": "text" }, { "name": "[Advanced] Branch Name", @@ -144,7 +156,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable|in:public,experimental" + "rules": "string|nullable|in:public,experimental", + "field_type": "text" }, { "name": "[Advanced] Satisfactory Dedicated Server App ID", @@ -153,7 +166,8 @@ "default_value": "1690800", "user_viewable": false, "user_editable": false, - "rules": "required|integer|min:1" + "rules": "required|integer|min:1", + "field_type": "text" } ] } diff --git a/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json b/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json index 5b7a68b8..97162880 100644 --- a/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json +++ b/game_eggs/steamcmd_servers/v_rising/egg-v-rising.json @@ -1,18 +1,19 @@ { - "_comment": "Pterodactyl V Rising Egg ~ David Wolfe (Red-Thirten) and Kapatheus ~ 2022-05-28", + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, + "exported_at": "2022-06-12T23:01:53+03:00", "name": "V Rising", "author": "rehlmgaming@gmail.com", "description": "Awaken as a vampire. Hunt for blood in nearby settlements to regain your strength and evade the scorching sun to survive. Raise your castle and thrive in an ever-changing open world full of mystery. Gain allies online and conquer the land of the living.", "features": [ "steam_disk_space" ], - "images": [ - "ghcr.io\/parkervcp\/yolks:wine_latest" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:wine_latest": "ghcr.io\/parkervcp\/yolks:wine_latest" + }, "file_denylist": [], "startup": "wine64 .\/VRisingServer.exe -persistentDataPath save-data -address 0.0.0.0", "config": { @@ -23,7 +24,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl V Rising Egg - egg-v-rising.json\r\n## Authors: David Wolfe (Red-Thirten), Kapatheus\r\n## Date: 2022\/05\/28\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, 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# Download and install SteamCMD\r\nexport HOME=\/mnt\/server\r\ncd \/tmp\r\nmkdir -p $HOME\/steamcmd $HOME\/steamapps\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 $HOME\/steamcmd\r\ncd $HOME\/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\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir $HOME +login anonymous $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} validate +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p $HOME\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so $HOME\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so $HOME\/.steam\/sdk64\/steamclient.so\r\n\r\n## V Rising Setup\r\nmkdir -p $HOME\/save-data\/Settings && cd \"$_\"\r\ncat > ServerHostSettings.json << EOF\r\n{\r\n \"Name\": \"${SERVER_NAME}\",\r\n \"Description\": \"${DESCRIPTION}\",\r\n \"Port\": ${SERVER_PORT},\r\n \"QueryPort\": ${QUERY_PORT},\r\n \"MaxConnectedUsers\": ${MAX_PLAYERS},\r\n \"MaxConnectedAdmins\": ${MAX_ADMINS},\r\n \"ServerFps\": ${FPS},\r\n \"SaveName\": \"${SAVE_NAME}\",\r\n \"Password\": \"${SERVER_PASSWORD}\",\r\n \"Secure\": ${SERVER_SECURE},\r\n \"ListOnMasterServer\": ${SERVER_LIST},\r\n \"AutoSaveCount\": ${SAVE_COUNT},\r\n \"AutoSaveInterval\": ${SAVE_INTERVAL},\r\n \"GameSettingsPreset\": \"${GAME_SETTINGS_PRESET}\",\r\n \"AdminOnlyDebugEvents\": ${ADMIN_ONLY_DEBUG_EVENTS},\r\n \"DisableDebugEvents\": ${DEBUG_EVENTS},\r\n \"Rcon\": {\r\n \"Enabled\": ${RCON},\r\n \"Password\": \"${RCON_PASS}\",\r\n \"Port\": ${RCON_PORT}\r\n }\r\n}\r\nEOF", + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl V Rising Egg - egg-v-rising.json\r\n## Authors: David Wolfe (Red-Thirten), Kapatheus\r\n## Date: 2022\/05\/28\r\n## License: MIT License\r\n## Image to install with is 'ghcr.io\/parkervcp\/installers:debian'\r\n\r\n# Install packages. Default packages below are skipped if using image noted above, 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# Download and install SteamCMD\r\nexport HOME=\/mnt\/server\r\ncd \/tmp\r\nmkdir -p $HOME\/steamcmd $HOME\/steamapps\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 $HOME\/steamcmd\r\ncd $HOME\/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\n\r\n# Install game server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir $HOME +login anonymous $( [[ \"${WINDOWS_INSTALL}\" == \"1\" ]] && printf %s '+@sSteamCmdForcePlatformType windows' ) +app_update ${SRCDS_APPID} +quit\r\n\r\n# Set up 32 and 64 bit libraries\r\nmkdir -p $HOME\/.steam\/sdk{32,64}\r\ncp -v linux32\/steamclient.so $HOME\/.steam\/sdk32\/steamclient.so\r\ncp -v linux64\/steamclient.so $HOME\/.steam\/sdk64\/steamclient.so\r\n\r\n## V Rising Setup\r\nmkdir -p $HOME\/save-data\/Settings && cd \"$_\"\r\ncat > ServerHostSettings.json << EOF\r\n{\r\n \"Name\": \"${SERVER_NAME}\",\r\n \"Description\": \"${DESCRIPTION}\",\r\n \"Port\": ${SERVER_PORT},\r\n \"QueryPort\": ${QUERY_PORT},\r\n \"MaxConnectedUsers\": ${MAX_PLAYERS},\r\n \"MaxConnectedAdmins\": ${MAX_ADMINS},\r\n \"ServerFps\": ${FPS},\r\n \"SaveName\": \"${SAVE_NAME}\",\r\n \"Password\": \"${SERVER_PASSWORD}\",\r\n \"Secure\": ${SERVER_SECURE},\r\n \"ListOnMasterServer\": ${SERVER_LIST},\r\n \"AutoSaveCount\": ${SAVE_COUNT},\r\n \"AutoSaveInterval\": ${SAVE_INTERVAL},\r\n \"GameSettingsPreset\": \"${GAME_SETTINGS_PRESET}\",\r\n \"AdminOnlyDebugEvents\": ${ADMIN_ONLY_DEBUG_EVENTS},\r\n \"DisableDebugEvents\": ${DEBUG_EVENTS},\r\n \"Rcon\": {\r\n \"Enabled\": ${RCON},\r\n \"Password\": \"${RCON_PASS}\",\r\n \"Port\": ${RCON_PORT}\r\n }\r\n}\r\nEOF", "container": "ghcr.io\/pterodactyl\/installers:debian", "entrypoint": "\/bin\/bash" } @@ -34,9 +35,10 @@ "description": "UDP port for Steam server list features.", "env_variable": "QUERY_PORT", "default_value": "9877", - "user_viewable": false, + "user_viewable": true, "user_editable": false, - "rules": "required|integer|between:1024,65536" + "rules": "required|integer|between:1024,65536", + "field_type": "text" }, { "name": "Automatic Updates", @@ -45,7 +47,8 @@ "default_value": "1", "user_viewable": true, "user_editable": true, - "rules": "boolean" + "rules": "boolean", + "field_type": "text" }, { "name": "Game Settings Preset", @@ -54,7 +57,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "nullable|string|in:,DuoPvP,HardcorePvP,Level30PvE,Level30PvP,Level50PvE,Level50PvP,Level70PvE,Level70PvP,SoloPvP,StandardPvE_Easy,StandardPvE_Hard,StandardPvE,StandardPvP_Easy,StandardPvP_Hard,StandardPVP" + "rules": "nullable|string|in:,DuoPvP,HardcorePvP,Level30PvE,Level30PvP,Level50PvE,Level50PvP,Level70PvE,Level70PvP,SoloPvP,StandardPvE_Easy,StandardPvE_Hard,StandardPvE,StandardPvP_Easy,StandardPvP_Hard,StandardPVP", + "field_type": "text" }, { "name": "Server Name", @@ -63,7 +67,8 @@ "default_value": "V Rising Dedicated Server", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "Server Description", @@ -72,7 +77,8 @@ "default_value": "Welcome to the server!", "user_viewable": true, "user_editable": true, - "rules": "nullable|string" + "rules": "nullable|string", + "field_type": "text" }, { "name": "Max Connected Users", @@ -81,7 +87,8 @@ "default_value": "40", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:1" + "rules": "required|integer|min:1", + "field_type": "text" }, { "name": "Max Connected Admins", @@ -90,7 +97,8 @@ "default_value": "4", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:0" + "rules": "required|integer|min:0", + "field_type": "text" }, { "name": "Server Password", @@ -99,7 +107,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "nullable|string" + "rules": "nullable|string", + "field_type": "text" }, { "name": "Save Name", @@ -108,7 +117,8 @@ "default_value": "world1", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "Auto Save Count", @@ -117,7 +127,8 @@ "default_value": "50", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:0" + "rules": "required|integer|min:0", + "field_type": "text" }, { "name": "Auto Save Interval", @@ -126,7 +137,8 @@ "default_value": "600", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:1" + "rules": "required|integer|min:1", + "field_type": "text" }, { "name": "List On Master Server", @@ -135,7 +147,8 @@ "default_value": "true", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "[Repair] Validate Server Files", @@ -144,7 +157,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "[Advanced] Server FPS", @@ -153,7 +167,8 @@ "default_value": "30", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:1" + "rules": "required|integer|min:1", + "field_type": "text" }, { "name": "[Advanced] Enable RCON", @@ -162,7 +177,8 @@ "default_value": "false", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "[Advanced] RCON Password", @@ -171,7 +187,8 @@ "default_value": "somepassword", "user_viewable": true, "user_editable": true, - "rules": "required|string" + "rules": "required|string", + "field_type": "text" }, { "name": "[Advanced] RCON Port", @@ -179,8 +196,9 @@ "env_variable": "RCON_PORT", "default_value": "25575", "user_viewable": true, - "user_editable": true, - "rules": "required|integer|between:1024,65536" + "user_editable": false, + "rules": "required|integer|between:1024,65536", + "field_type": "text" }, { "name": "[Advanced] Secure Server", @@ -189,7 +207,8 @@ "default_value": "true", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "[Advanced] Admin Only Debug Events", @@ -198,7 +217,8 @@ "default_value": "true", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "[Advanced] Disable Debug Events", @@ -207,7 +227,8 @@ "default_value": "false", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "[Advanced] V Rising Dedicated Server App ID", @@ -216,7 +237,8 @@ "default_value": "1829350", "user_viewable": false, "user_editable": false, - "rules": "required|integer" + "rules": "required|integer", + "field_type": "text" }, { "name": "[Advanced] Use Windows Branch", @@ -225,7 +247,8 @@ "default_value": "1", "user_viewable": false, "user_editable": false, - "rules": "required|string|in:1" + "rules": "required|string|in:1", + "field_type": "text" } ] } \ No newline at end of file diff --git a/game_eggs/terraria/tmodloader/egg-t-modloader.json b/game_eggs/terraria/tmodloader/egg-t-modloader.json index 22376c34..0887643d 100755 --- a/game_eggs/terraria/tmodloader/egg-t-modloader.json +++ b/game_eggs/terraria/tmodloader/egg-t-modloader.json @@ -1,42 +1,33 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2022-05-14T02:54:50-05:00", + "exported_at": "2022-06-25T23:43:59+03:00", "name": "tModloader", "author": "parker@parkervcp.com", "description": "tModLoader is essentially a mod that provides a way to load your own mods without having to work directly with Terraria's source code itself. This means you can easily make mods that are compatible with other people's mods, save yourself the trouble of having to decompile and recompile Terraria.exe, and escape from having to understand all of the obscure \"intricacies\" of Terraria's source code. It is made to work for Terraria 1.3+.", "features": null, - "images": [ - "quay.io\/parkervcp\/pterodactyl-images:debian_mono-5" - ], + "docker_images": { + "Dotnet 6": "ghcr.io\/parkervcp\/yolks:dotnet_6" + }, "file_denylist": [], - "startup": ".\/tModLoaderServer -ip 0.0.0.0 -port ${SERVER_PORT} -maxplayers ${MAX_PLAYERS} -difficulty ${DIFFICULTY} -password \"${SERVER_PASSWORD}\" -motd \"${MOTD}\" -lang ${LANGUAGE} -world ~\/saves\/Worlds\/${WORLD_NAME}.wld -worldname ${WORLD_NAME} -autocreate ${WORLD_SIZE} -savedirectory ~\/ -tmlsavedirectory ~\/saves -modpath ~\/mods", + "startup": ".\/tModLoaderServer -ip 0.0.0.0 -port {{SERVER_PORT}} -maxplayers {{MAX_PLAYERS}} -difficulty {{DIFFICULTY}} -password \"{{SERVER_PASSWORD}}\" -motd \"{{MOTD}}\" -lang {{LANGUAGE}} -world ~\/saves\/Worlds\/{{WORLD_NAME}}.wld -worldname {{WORLD_NAME}} -autocreate {{WORLD_SIZE}} -savedirectory ~\/ -tmlsavedirectory ~\/saves -modpath ~\/mods", "config": { "files": "{}", - "startup": "{\r\n \"done\": \"Type 'help' for a list of commands\",\r\n \"userInteraction\": []\r\n}", + "startup": "{\r\n \"done\": \"Type 'help' for a list of commands\"\r\n}", "logs": "{}", "stop": "exit" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n# Vanilla tModloader Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n## install packages to get version and download links\r\napt update\r\napt install -y curl jq file unzip\r\n\r\nGITHUB_PACKAGE=tModLoader\/tModLoader\r\n\r\nif [ -z \"$GITHUB_USER\" ] && [ -z \"$GITHUB_OAUTH_TOKEN\" ] ; then\r\n echo -e \"using anon api call\"\r\nelse\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u $GITHUB_USER:$GITHUB_OAUTH_TOKEN '\r\nfi\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/tmodloader\/tmodloader\/releases\" | jq -c '.[] | select(.name | contains(\"v0\"))' | head -1)\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/$GITHUB_PACKAGE\/releases\" | jq '.[] | select(.name | contains(\"v0\"))')\r\n\r\n\r\nif [ -z \"$VERSION\" ] || [ \"$VERSION\" == \"latest\" ]; then\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo $LATEST_JSON | jq .assets | jq -r .[].browser_download_url | grep -i linux | grep -i zip)\r\nelse\r\n VERSION_CHECK=$(echo $RELEASES | jq -r --arg VERSION \"$VERSION\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"$VERSION\" == \"$VERSION_CHECK\" ]; then\r\n DOWNLOAD_LINK=$(echo $RELEASES | jq -r --arg VERSION \"$VERSION\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i linux)\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo $LATEST_JSON | jq .assets | jq -r .[].browser_download_url | grep -i linux | grep -i zip)\r\n fi\r\nfi\r\n\r\n## mkdir and cd to \/mnt\/server\/\r\nmkdir -p \/mnt\/server\r\n\r\ncd \/mnt\/server\r\n\r\n## download release\r\necho -e \"running: curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip -o ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2 \r\nfi\r\n\r\nchmod +x tModLoaderServer.bin.x86_64\r\nchmod +x tModLoaderServer\r\n\r\necho -e \"Cleaning up extra files.\"\r\nrm -rf terraria-server-${CLEAN_VERSION}.zip rm ${DOWNLOAD_LINK##*\/}", + "script": "#!\/bin\/bash\r\n# Vanilla tModloader Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n## install packages to get version and download links\r\napt update\r\napt install -y curl jq file unzip\r\n\r\nGITHUB_PACKAGE=tmodloader\/tmodloader\r\n\r\nif [ -z \"$GITHUB_USER\" ] && [ -z \"$GITHUB_OAUTH_TOKEN\" ] ; then\r\n echo -e \"using anon api call\"\r\nelse\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u $GITHUB_USER:$GITHUB_OAUTH_TOKEN '\r\nfi\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/$GITHUB_PACKAGE\/releases\" | jq -c '.[]' | head -1)\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/$GITHUB_PACKAGE\/releases\" | jq '.[]')\r\n\r\n\r\nif [ -z \"$VERSION\" ] || [ \"$VERSION\" == \"latest\" ]; then\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo $LATEST_JSON | jq .assets | jq -r .[].browser_download_url | grep -i tmodloader.zip)\r\nelse\r\n VERSION_CHECK=$(echo $RELEASES | jq -r --arg VERSION \"$VERSION\" '. | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"$VERSION\" == \"$VERSION_CHECK\" ]; then\r\n if [[ \"$VERSION\" == v0* ]]; then\r\n DOWNLOAD_LINK=$(echo $RELEASES | jq -r --arg VERSION \"$VERSION\" '. | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i linux | grep -i zip)\r\n else\r\n DOWNLOAD_LINK=$(echo $RELEASES | jq -r --arg VERSION \"$VERSION\" '. | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i tmodloader.zip)\r\n fi\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_LINK=$(echo $LATEST_JSON | jq .assets | jq -r .[].browser_download_url | grep -i tmodloader.zip)\r\n fi\r\nfi\r\n\r\n## mkdir and cd to \/mnt\/server\/\r\nmkdir -p \/mnt\/server\r\n\r\ncd \/mnt\/server || exit 5\r\n\r\n## download release\r\necho -e \"running: curl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\"\r\ncurl -sSL ${DOWNLOAD_LINK} -o ${DOWNLOAD_LINK##*\/}\r\n\r\nFILETYPE=$(file -F ',' ${DOWNLOAD_LINK##*\/} | cut -d',' -f2 | cut -d' ' -f2)\r\nif [ \"$FILETYPE\" == \"gzip\" ]; then\r\n tar xzvf ${DOWNLOAD_LINK##*\/}\r\nelif [ \"$FILETYPE\" == \"Zip\" ]; then\r\n unzip -o ${DOWNLOAD_LINK##*\/}\r\nelse\r\n echo -e \"unknown filetype. Exiting\"\r\n exit 2\r\nfi\r\n\r\nif [[ \"$VERSION\" == v0* ]]; then\r\n chmod +x tModLoaderServer.bin.x86_64\r\n chmod +x tModLoaderServer\r\nelse\r\n #tiny startup script for backward compatibility\r\n echo 'dotnet tModLoader.dll -server \"$@\"' > tModLoaderServer\r\n chmod +x tModLoaderServer\r\nfi\r\n\r\necho -e \"Cleaning up extra files.\"\r\nrm -rf terraria-server-*.zip rm ${DOWNLOAD_LINK##*\/}\r\nif [[ \"$VERSION\" != v0* ]]; then\r\n rm -rf DedicatedServerUtils LaunchUtils PlatformVariantLibs tModPorter RecentGitHubCommits.txt *.bat *.sh\r\nfi", "container": "debian:buster-slim", "entrypoint": "bash" } }, "variables": [ - { - "name": "tModloader Version", - "description": "The version of tModloader that is to be used.", - "env_variable": "VERSION", - "default_value": "latest", - "user_viewable": true, - "user_editable": true, - "rules": "required|string|max:20" - }, { "name": "World Name", "description": "The name for the world file.", @@ -44,7 +35,8 @@ "default_value": "world", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "Max Players", @@ -53,7 +45,8 @@ "default_value": "8", "user_viewable": true, "user_editable": false, - "rules": "required|numeric|digits_between:1,3" + "rules": "required|numeric|digits_between:1,3", + "field_type": "text" }, { "name": "World Size", @@ -62,7 +55,18 @@ "default_value": "1", "user_viewable": true, "user_editable": true, - "rules": "required|numeric|digits_between:1,3" + "rules": "required|string|in:1,2,3", + "field_type": "text" + }, + { + "name": "tModloader Version", + "description": "The version of tModloader that is to be used.", + "env_variable": "VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "GitHub User", @@ -71,7 +75,8 @@ "default_value": "", "user_viewable": false, "user_editable": false, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "GitHub OAuth Token", @@ -80,16 +85,18 @@ "default_value": "", "user_viewable": false, "user_editable": false, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Difficulty", - "description": "Sets the difficulty of the world when using autocreate 0(normal), 1(expert)", + "description": "Sets the difficulty of the world when using auto-create 0(normal), 1(expert). Toggle to choose expert (1).", "env_variable": "DIFFICULTY", "default_value": "0", "user_viewable": true, "user_editable": true, - "rules": "required|numeric|digits_between:0,1" + "rules": "required|string|in:0,1", + "field_type": "text" }, { "name": "Server Password", @@ -98,7 +105,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" }, { "name": "MOTD", @@ -107,7 +115,8 @@ "default_value": "Please don\u2019t cut the purple trees!", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:40" + "rules": "required|string|max:40", + "field_type": "text" }, { "name": "Language", @@ -116,7 +125,8 @@ "default_value": "1", "user_viewable": true, "user_editable": true, - "rules": "required|numeric|digits_between:1,5" + "rules": "required|string|in:1,2,3,4,5", + "field_type": "text" } ] -} +} \ No newline at end of file diff --git a/game_eggs/tycoon_games/openrct2/README.md b/game_eggs/tycoon_games/openrct2/README.md index b0dbaf98..082e3378 100644 --- a/game_eggs/tycoon_games/openrct2/README.md +++ b/game_eggs/tycoon_games/openrct2/README.md @@ -50,9 +50,9 @@ ___ | | Minimum | |---------|---------| -| Processor | Multiarch is supported for most modern processors | +| Processor | x86/64 (\*multiarch may be supported for develop builds, but has not been tested) | | RAM | 256-512 MiB (depends on # of clients & park size) | -| Storage | 80 MB (*may require more if building from source*) | +| Storage | 110 MB (*may require more if building from source*) | | RCT2 Files | **Not required** | ___ @@ -71,15 +71,13 @@ Unfortunately, because console commands currently do not register, becoming the 1. Ensure the "Log Server Actions" startup variable is set to "true". 2. Start the server and join it with the client you want to make an admin. 3. Open `ServerData/serverlogs//.txt` and copy the SHA1 hash next to your client's username (note the username as well). -4. Then, open `ServerData/users.json`. Paste the hash into the "hash" value, and change the "name" value to your client's username. +4. Then, open `ServerData/users.json`. Paste the hash into the "hash" value, change the "name" value to your client's username, and save the file. 5. Reboot the server, re-join it, and you should be an admin! After becoming an admin, you can use the in-game users management window to add additional admins (or groups) more easily if you wish. ___ ### Known Issues The following are known issues that are unique to running OpenRCT2 on Pterodactyl, but likely can only be fixed by further development/updates from OpenRCT2. -- Only building from source from the `develop` branch currently yields a package that is bootable. This will no longer be true for any OpenRCT2 releases after v.0.3.5.1. - - This also means that clients joining the server must be on the latest `develop` branch as well. - Configuring a password on the server disallows non-admin clients from entering in a password in their client to connect; it just disconnects them. Admin clients can still join normally. (reference issue [OpenRCT2/OpenRCT2#16396](https://github.com/OpenRCT2/OpenRCT2/issues/16396)) - You may rarely run into the server crashing on start due to a "Floating point exception(core dumped)" error. If this occurs to you, please help with OpenRCT2 development by doing the following: 1. Add the following to the beginning of your server's startup command: `SEGFAULT_SIGNALS=fpe LD_PRELOAD=/lib/x86_64-linux-gnu/libSegFault.so ` diff --git a/game_eggs/tycoon_games/openrct2/egg-openrct2.json b/game_eggs/tycoon_games/openrct2/egg-openrct2.json index ed070f1a..a7ec143d 100644 --- a/game_eggs/tycoon_games/openrct2/egg-openrct2.json +++ b/game_eggs/tycoon_games/openrct2/egg-openrct2.json @@ -1,27 +1,27 @@ { - "_comment": "Pterodactyl OpenRCT2 Egg ~ Red-Thirten and parkervcp ~ 2022-01-12", + "_comment": "Pterodactyl OpenRCT2 Egg ~ Red-Thirten and parkervcp ~ 2022-06-28", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, "name": "OpenRCT2", "author": "rehlmgaming@gmail.com", "description": "OpenRCT2 is an open-source re-implementation of RollerCoaster Tycoon 2 (RCT2), expanding the game with new features, fixing bugs and raising game limits.", "features": null, - "images": [ - "ghcr.io\/parkervcp\/yolks:debian" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, "file_denylist": [], "startup": ".\/OpenRCT2\/openrct2-cli --version && .\/OpenRCT2\/openrct2-cli host $(if {{LOAD_AUTOSAVE}} && [ -d ServerData\/save\/autosave\/ ]; then find ServerData\/save\/autosave\/ | sort -r | head -1; else echo \"{{SAVE_URI}}\"; fi) --port {{SERVER_PORT}} --user-data-path \/home\/container\/ServerData\/", "config": { "files": "{\r\n \"ServerData\/config.ini\": {\r\n \"parser\": \"ini\",\r\n \"find\": {\r\n \"general.autosave\": \"{{server.build.env.AUTOSAVE_INTERVAL}}\",\r\n \"general.autosave_amount\": \"{{server.build.env.AUTOSAVE_AMOUNT}}\",\r\n \"network.player_name\": \"\\\"{{server.build.env.SERVER_PLAYER_NAME}}\\\"\",\r\n \"network.default_port\": \"{{server.build.default.port}}\",\r\n \"network.default_password\": \"\\\"{{server.build.env.SERVER_PASSWORD}}\\\"\",\r\n \"network.advertise\": \"{{server.build.env.SERVER_ADVERTISE}}\",\r\n \"network.maxplayers\": \"{{server.build.env.MAX_PLAYERS}}\",\r\n \"network.server_name\": \"\\\"{{server.build.env.SERVER_NAME}}\\\"\",\r\n \"network.server_description\": \"\\\"{{server.build.env.SERVER_DESCRIPTION}}\\\"\",\r\n \"network.server_greeting\": \"\\\"{{server.build.env.SERVER_GREETING}}\\\"\",\r\n \"network.provider_name\": \"\\\"{{server.build.env.PROVIDER_NAME}}\\\"\",\r\n \"network.provider_email\": \"\\\"{{server.build.env.PROVIDER_EMAIL}}\\\"\",\r\n \"network.provider_website\": \"\\\"{{server.build.env.PROVIDER_WEBSITE}}\\\"\",\r\n \"network.log_chat\": \"{{server.build.env.LOG_CHAT}}\",\r\n \"network.log_server_actions\": \"{{server.build.env.LOG_SERVER_ACTIONS}}\",\r\n \"network.pause_server_if_no_clients\": \"{{server.build.env.PAUSE_NO_CLIENTS}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Listening for clients on\"\r\n}", "logs": "{}", - "stop": "^C^C" + "stop": "^C" }, "scripts": { "installation": { - "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl OpenRCT2 Egg - egg-openrct2.json\r\n## Authors: David Wolfe (Red-Thirten), parkervcp\r\n## Date: 2022\/01\/12\r\n## License: MIT License\r\n\r\nGITHUB_PACKAGE=\"OpenRCT2\/OpenRCT2\"\r\nMATCH=\"linux-bullseye-x86_64.tar.gz\"\r\nDEFAULT_SAVE=\"https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/tycoon_games\/openrct2\/save.park\"\r\n\r\n## OpenRCT2 Install\r\napt -y update\r\n[ ! -d \/mnt\/server ] && mkdir \/mnt\/server\r\ncd \/mnt\/server\r\n# Remove existing installation if present\r\n[ -d OpenRCT2 ] && rm -rf OpenRCT2\r\n\r\n# Determine if installing from source or from release\r\nif [ \"${VERSION}\" == \"develop\" ]; then\r\n # Get required packages\r\n apt -y install curl git make cmake gcc build-essential libicu-dev pkg-config libcurl4-openssl-dev libcrypto++-dev libpng-dev libssl-dev libzip-dev duktape-dev nlohmann-json3-dev\r\n echo -e \"\\nInstalling\/Updating OpenRCT2 from source...\\n\"\r\n # Setup temp directory for building and move to it\r\n [ -d temp ] && rm -rf temp\r\n mkdir temp && cd temp\r\n # Clone the branch and check if successful\r\n git clone --branch \"${VERSION}\" https:\/\/github.com\/${GITHUB_PACKAGE}\r\n if [ ! -d OpenRCT2 ]; then\r\n echo -e \"\\nFailed to clone \\\"${VERSION}\\\" branch from https:\/\/github.com\/${GITHUB_PACKAGE}\\n\"\r\n exit 1\r\n fi\r\n cd OpenRCT2\r\n mkdir build && cd build\r\n # Prepare CMake files for a lightweight and CLI-only build of OpenRCT2, using the appropriate flags\r\n cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DPORTABLE=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_FLAGS=\"-g -gz\" -DDISABLE_TTF=ON -DDISABLE_GOOGLE_BENCHMARK=ON -DDISABLE_DISCORD_RPC=ON -DDISABLE_GUI=ON\r\n echo -e \"\\nBuilding OpenRCT2 package from source...\\n\\tThis process can take quite some time. Grab a coffee :)\\n\"\r\n # Build OpenRCT2\r\n DESTDIR=. make install\r\n # Check if build was successful and move to it\r\n if [ ! -d usr\/local ]; then\r\n echo -e \"\\nFailed to successfully build OpenRCT2!\\n\"\r\n exit 1\r\n fi\r\n cd usr\/local\r\n # Make executable-ready package by moving compiled files to the correct locations\r\n mkdir -p \/mnt\/server\/OpenRCT2\/data\r\n mv bin\/* \/mnt\/server\/OpenRCT2\/\r\n mv share\/openrct2\/* share\/openrct2-cli\/* \/mnt\/server\/OpenRCT2\/data\/\r\n mv share\/doc \/mnt\/server\/OpenRCT2\/\r\n cd \/mnt\/server\r\n rm -rf temp # Clean up temp building directory\r\n echo -e \"\\nBuild of OpenRCT2 package complete!\"\r\nelse\r\n # Get required packages\r\n apt install -y curl jq\r\n echo -e \"\\nInstalling\/Updating OpenRCT2 from release tag \\\"${VERSION}\\\"...\\n\"\r\n # This is a simple script to use the GitHub API for release versions.\r\n # This requires the egg has a variable for GITHUB_PACKAGE, VERSION and MATCH (MATCH is to match the filename in some way).\r\n # Get release info and download links\r\n LATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\/latest\")\r\n RELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\")\r\n\r\n if [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\n else\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\n fi\r\n # Download and unpackage the release\r\n curl -L ${DOWNLOAD_URL} | tar -xzv\r\n # Check if it was successful\r\n if [ -d OpenRCT2 ]; then\r\n echo -e \"\\nDownload of OpenRCT2 release successful!\"\r\n else\r\n echo -e \"\\nFailed to download\/unpack file: ${DOWNLOAD_URL}\\n\"\r\n exit 1\r\n fi\r\nfi\r\n\r\n## OpenRCT2 Setup\r\n# Setup ServerData\/save directory\r\n[ ! -d ServerData\/save ] && mkdir -p ServerData\/save\r\ncd ServerData\/save\r\n# Download default save.park if missing\r\nif [ ! -f save.park ]; then\r\n echo -e \"Downloading default save.park file from ${DEFAULT_SAVE}\"\r\n curl -sSLO ${DEFAULT_SAVE}\r\nfi\r\n\r\necho -e \"\\nOpenRCT2 Successfully Installed!\"", + "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl OpenRCT2 Egg - egg-openrct2.json\r\n## Authors: David Wolfe (Red-Thirten), parkervcp\r\n## Date: 2022\/06\/28\r\n## License: MIT License\r\n\r\nGITHUB_PACKAGE=\"OpenRCT2\/OpenRCT2\"\r\nMATCH=\"linux-x86_64.AppImage\"\r\nDEFAULT_SAVE=\"https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/tycoon_games\/openrct2\/save.park\"\r\n\r\n## OpenRCT2 Install\r\napt -y update\r\n[ ! -d \/mnt\/server ] && mkdir \/mnt\/server\r\ncd \/mnt\/server\r\n# Remove existing installation if present\r\n[ -d OpenRCT2 ] && rm -rf OpenRCT2\r\n# Setup OpenRCT2 directory\r\nmkdir -p OpenRCT2\/data\r\n# Setup temp directory for building and move to it\r\n[ -d temp ] && rm -rf temp\r\nmkdir temp && cd temp\r\n\r\n# Determine if installing from source or from release\r\nif [ \"${VERSION}\" == \"develop\" ]; then\r\n # Get required packages\r\n apt -y install curl git make cmake gcc build-essential libicu-dev pkg-config libcurl4-openssl-dev libcrypto++-dev libpng-dev libssl-dev libzip-dev duktape-dev nlohmann-json3-dev\r\n echo -e \"\\nInstalling\/Updating OpenRCT2 from source...\\n\"\r\n \r\n # Clone the branch and check if successful\r\n git clone --branch \"${VERSION}\" https:\/\/github.com\/${GITHUB_PACKAGE}\r\n if [ ! -d OpenRCT2 ]; then\r\n echo -e \"\\nFailed to clone \\\"${VERSION}\\\" branch from https:\/\/github.com\/${GITHUB_PACKAGE}\\n\"\r\n exit 1\r\n fi\r\n \r\n cd OpenRCT2\r\n mkdir build && cd build\r\n # Prepare CMake files for a lightweight and CLI-only build of OpenRCT2, using the appropriate flags\r\n cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DPORTABLE=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_CXX_FLAGS=\"-g -gz\" -DDISABLE_TTF=ON -DDISABLE_GOOGLE_BENCHMARK=ON -DDISABLE_DISCORD_RPC=ON -DDISABLE_GUI=ON\r\n echo -e \"\\nBuilding OpenRCT2 package from source...\\n\\tThis process can take quite some time. Grab a coffee :)\\n\"\r\n # Build OpenRCT2\r\n DESTDIR=. make install\r\n # Check if build was successful\r\n if [ ! -d usr\/local ]; then\r\n echo -e \"\\nFailed to successfully build OpenRCT2!\\n\"\r\n exit 1\r\n fi\r\n \r\n # Make executable-ready package by moving compiled files to the correct locations\r\n cd usr\/local\r\n mv bin\/* \/mnt\/server\/OpenRCT2\/\r\n mv share\/openrct2\/* share\/openrct2-cli\/* \/mnt\/server\/OpenRCT2\/data\/\r\n mv share\/doc \/mnt\/server\/OpenRCT2\/\r\n echo -e \"\\nBuild of OpenRCT2 package complete!\"\r\nelse\r\n # Get required packages\r\n apt install -y curl jq\r\n echo -e \"\\nInstalling\/Updating OpenRCT2 from release tag \\\"${VERSION}\\\"...\\n\"\r\n \r\n # This is a simple script to use the GitHub API for release versions.\r\n # This requires the egg has a variable for GITHUB_PACKAGE, VERSION and MATCH (MATCH is to match the filename in some way).\r\n # Get release info and download links\r\n LATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\/latest\")\r\n RELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\")\r\n if [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\n else\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\n fi\r\n # Download the release and check if successful\r\n curl -L ${DOWNLOAD_URL} -o OpenRCT2.AppImage\r\n if [ ! -f OpenRCT2.AppImage ]; then\r\n echo -e \"\\nFailed to download release: ${DOWNLOAD_URL}\\n\"\r\n exit 1\r\n fi\r\n \r\n chmod +x OpenRCT2.AppImage\r\n # Extract AppImage and check if successful\r\n echo -e \"Extracting AppImage files...\"\r\n .\/OpenRCT2.AppImage --appimage-extract\r\n if [ ! -d squashfs-root\/usr ]; then\r\n echo -e \"\\nFailed to extract AppImage!\\n\\t(Is the `MATCH` variable set to download an AppImage?)\\n\"\r\n exit 1\r\n fi\r\n \r\n # Move needed files to correct directories\r\n cd squashfs-root\/usr\r\n mv lib bin\/openrct2-cli \/mnt\/server\/OpenRCT2\/\r\n mv share\/openrct2\/* \/mnt\/server\/OpenRCT2\/data\/\r\n mkdir \/mnt\/server\/OpenRCT2\/doc && mv share\/doc\/openrct2 $_\r\n echo -e \"\\nDownload\/Update of OpenRCT2 release successful!\"\r\nfi\r\n\r\ncd \/mnt\/server\r\nrm -rf temp # Clean up temp building directory\r\n\r\n## OpenRCT2 Setup\r\n# Setup ServerData\/save directory\r\n[ ! -d ServerData\/save ] && mkdir -p ServerData\/save\r\ncd ServerData\/save\r\n# Download default save.park if missing\r\nif [ ! -f save.park ]; then\r\n echo -e \"Downloading default save.park file from ${DEFAULT_SAVE}\"\r\n curl -sSLO ${DEFAULT_SAVE}\r\nfi\r\n\r\necho -e \"\\nOpenRCT2 Successfully Installed!\"", "container": "debian:bullseye-slim", "entrypoint": "\/bin\/bash" } @@ -34,7 +34,8 @@ "default_value": "ServerData\/save\/save.park", "user_viewable": true, "user_editable": true, - "rules": "required|string|min:4" + "rules": "required|string|min:4", + "field_type": "text" }, { "name": "Load Latest Autosave", @@ -43,7 +44,8 @@ "default_value": "true", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "Autosave Interval", @@ -52,7 +54,8 @@ "default_value": "1", "user_viewable": true, "user_editable": true, - "rules": "required|integer|between:0,5" + "rules": "required|integer|between:0,5", + "field_type": "text" }, { "name": "Autosaves To Keep", @@ -61,7 +64,8 @@ "default_value": "10", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:0" + "rules": "required|integer|min:0", + "field_type": "text" }, { "name": "Max Players", @@ -70,7 +74,8 @@ "default_value": "16", "user_viewable": true, "user_editable": true, - "rules": "required|integer|min:0" + "rules": "required|integer|min:0", + "field_type": "text" }, { "name": "Server Password", @@ -79,7 +84,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Advertise Server", @@ -88,7 +94,8 @@ "default_value": "true", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "Pause Server If No Clients", @@ -97,7 +104,8 @@ "default_value": "false", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "Server Name", @@ -106,7 +114,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Server Description", @@ -115,7 +124,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Server Player Name", @@ -124,7 +134,8 @@ "default_value": "Server", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Server Greeting", @@ -133,7 +144,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Provider Name", @@ -142,7 +154,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Server Provider E-Mail", @@ -151,7 +164,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Server Provider Website", @@ -160,7 +174,8 @@ "default_value": "", "user_viewable": true, "user_editable": true, - "rules": "string|nullable" + "rules": "string|nullable", + "field_type": "text" }, { "name": "Log Chat", @@ -169,7 +184,8 @@ "default_value": "false", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "Log Server Actions", @@ -178,16 +194,28 @@ "default_value": "false", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:true,false" + "rules": "required|string|in:true,false", + "field_type": "text" }, { "name": "OpenRCT2 Version", "description": "The release tag (version) of OpenRCT2 to download and install from their official Github (ie. \"v0.3.5.1\"). Use \"latest\" to download the latest release, or \"develop\" to build from the latest source (takes longer to install but is the most up to date).", "env_variable": "VERSION", - "default_value": "develop", + "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|min:1" + "rules": "required|string|min:1", + "field_type": "text" + }, + { + "name": "[Advanced] Library Path", + "description": "What path to load libraries from for release binaries. Rarely needs to be changed.", + "env_variable": "LD_LIBRARY_PATH", + "default_value": ".\/OpenRCT2\/lib", + "user_viewable": false, + "user_editable": false, + "rules": "required|string", + "field_type": "text" } ] } \ No newline at end of file diff --git a/monitoring/loki/README.md b/monitoring/loki/README.md new file mode 100644 index 00000000..d99b1be7 --- /dev/null +++ b/monitoring/loki/README.md @@ -0,0 +1,25 @@ +# Loki + +## From the [Loki](https://github.com/grafana/loki) GitHub repository + +Loki is a horizontally-scalable, highly-available, multi-tenant log aggregation system inspired by Prometheus. It is designed to be very cost effective and easy to operate. + +## Working with Loki + +To get logs "into" Loki you need a scrape agent, such as official [Promtail](https://grafana.com/docs/loki/latest/clients/promtail/installation/) or a library for your app that can push logs through HTTP endpoint (gRPC endpoint is disabled in Docker enviroment by default) + +## Resource consumption + +As this egg sets up Loki in single node mode, it can consume a lot of disk space really fast. It is possible to setup different kind of storages for different parts of Loki files. For further information refer to official [Loki documentation](https://grafana.com/docs/loki/latest/operations/storage/). + +To get started, you can go with a minimum of 3GB RAM and >=2.5GB disk space. + +Keep in mind that those numbers can grow pretty quick! + +## Server Ports + +Ports required to run the server in a table format. + +| Port | default | +|-------------|---------| +| Loki server | 3100 | diff --git a/monitoring/loki/egg-loki.json b/monitoring/loki/egg-loki.json new file mode 100644 index 00000000..204bd959 --- /dev/null +++ b/monitoring/loki/egg-loki.json @@ -0,0 +1,42 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2022-07-08T15:50:16+02:00", + "name": "Loki", + "author": "unknown@unknown.com", + "description": "Prometheus but for logs. This egg is for Loki instance only! You usually need pushing agents like Promtail to put logs in this", + "features": null, + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, + "file_denylist": [], + "startup": ".\/loki-linux -config.file=loki-docker-config.yaml", + "config": { + "files": "{\r\n \"loki-docker-config.yaml\": {\r\n \"parser\": \"yaml\",\r\n \"find\": {\r\n \"server.http_listen_port\": \"{{server.build.default.port}}\",\r\n \"common.ring.instance_addr\": \"0.0.0.0\",\r\n \"common.path_prefix\": \"\/home\/container\/loki\",\r\n \"common.storage.filesystem.chunks_directory\": \"\/home\/container\/loki\/chunks\",\r\n \"common.storage.filesystem.rules_directory\": \"\/home\/container\/loki\/rules\"\r\n }\r\n }\r\n}", + "startup": "{\r\n \"done\": \"Loki started\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n# Switch to mounted working install directory\r\ncd \/mnt\/server\r\n\r\napt update\r\napt install -y zip unzip wget curl git file\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"amd64\" || echo \"arm64\")\r\n# Download and extract Loki\r\n\r\nif [ \"$LOKI_VERSION\" = \"latest\" ]; then LOKI_VERSION=$(curl --silent \"https:\/\/api.github.com\/repos\/grafana\/loki\/releases\/latest\" | grep '\"tag_name\":' | sed -E 's\/.*\"([^\"]+)\".*\/\\1\/' | cut -c2-); fi\r\necho -e \"running curl -L https:\/\/github.com\/grafana\/loki\/releases\/download\/v${LOKI_VERSION}\/loki-linux-${ARCH}.zip --output loki-linux-amd64.zip\"\r\ncurl -L https:\/\/github.com\/grafana\/loki\/releases\/download\/v${LOKI_VERSION}\/loki-linux-${ARCH}.zip --output loki-linux-${ARCH}.zip\r\nunzip loki-linux-${ARCH}.zip\r\nrm -rf loki-linux-${ARCH}.zip\r\ncurl -L https:\/\/raw.githubusercontent.com\/grafana\/loki\/v${LOKI_VERSION}\/cmd\/loki\/loki-docker-config.yaml --output loki-docker-config.yaml\r\nmv loki-linux-* loki-linux\r\necho -e \"installation completed\"", + "container": "ghcr.io\/pterodactyl\/installers:debian", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "Loki Version", + "description": "The version of Loki to use.\r\n\r\nFind all versions from https:\/\/github.com\/grafana\/loki", + "env_variable": "LOKI_VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20", + "field_type": "text" + } + ] +} diff --git a/monitoring/prometheus/egg-prometheus.json b/monitoring/prometheus/egg-prometheus.json index 3376353b..54bd4f85 100644 --- a/monitoring/prometheus/egg-prometheus.json +++ b/monitoring/prometheus/egg-prometheus.json @@ -1,17 +1,17 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2022-01-22T05:45:16-05:00", + "exported_at": "2022-07-08T15:58:56+02:00", "name": "Prometheus", "author": "p.zarrad@outlook.de", "description": "The Prometheus monitoring system and time series database.", "features": null, - "images": [ - "ghcr.io\/parkervcp\/yolks:debian" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, "file_denylist": [], "startup": ".\/prometheus --web.listen-address=0.0.0.0:{{SERVER_PORT}} --config.file=\/home\/container\/prometheus.yml --storage.tsdb.path=\/home\/container\/data --web.console.templates=\/home\/container\/consoles --web.console.libraries=\/home\/container\/console_libraries --web.config.file=\/home\/container\/prometheus.web.yml", "config": { @@ -22,7 +22,7 @@ }, "scripts": { "installation": { - "script": "#!\/bin\/sh\r\nshopt -s extglob\r\n# Switch to mounted directory\r\ncd \/mnt\/server\r\n# Update installation system and install curl\r\napt-get update\r\napt-get install -y curl\r\n# Cleanup previous install if available\r\nif [ -f \"prometheus.yml\" ]; then mv prometheus.yml prometheus.yml.bak; fi\r\nif [ -f \"prometheus.web.yml\" ]; then mv prometheus.web.yml prometheus.web.yml.bak; fi\r\nrm -rfv !(data|prometheus.yml.bak|prometheus.web.yml.bak)\r\n# Download and extract Prometheus\r\nversion=${PROMETHEUS_VERSION}\r\nif [ \"$version\" = \"latest\" ]; then version=$(curl --silent \"https:\/\/api.github.com\/repos\/prometheus\/prometheus\/releases\/latest\" | grep '\"tag_name\":' | sed -E 's\/.*\"([^\"]+)\".*\/\\1\/' | cut -c2-); fi\r\ncurl -L https:\/\/github.com\/prometheus\/prometheus\/releases\/download\/v${version}\/prometheus-${version}.linux-amd64.tar.gz --output prometheus.tar.gz\r\ntar -zxvf prometheus.tar.gz\r\nmv -n prometheus-*\/* .\/\r\nrm -rf prometheus.tar.gz prometheus-*\/\r\n# Restore configuration if necessary\r\nif [ -f \"prometheus.yml.bak\" ]; then rm -rf prometheus.yml && mv prometheus.yml.bak prometheus.yml && rm -rf prometheus.yml.bak; fi\r\nif [ -f \"prometheus.web.yml.bak\" ]; then rm -rf prometheus.web.yml && mv prometheus.web.yml.bak prometheus.web.yml && rm -rf prometheus.web.yml.bak; fi\r\n# Create dummy prometheus.web.yml as a placeholder\r\nif [ ! -f \"prometheus.web.yml\" ]; then touch prometheus.web.yml; fi", + "script": "#!\/bin\/sh\r\nshopt -s extglob\r\n# Switch to mounted directory\r\ncd \/mnt\/server\r\n# Update installation system and install curl\r\napt-get update\r\napt-get install -y curl\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"amd64\" || echo \"arm64\")\r\n# Cleanup previous install if available\r\nif [ -f \"prometheus.yml\" ]; then mv prometheus.yml prometheus.yml.bak; fi\r\nif [ -f \"prometheus.web.yml\" ]; then mv prometheus.web.yml prometheus.web.yml.bak; fi\r\nrm -rfv !(data|prometheus.yml.bak|prometheus.web.yml.bak)\r\n# Download and extract Prometheus\r\nversion=${PROMETHEUS_VERSION}\r\nif [ \"$version\" = \"latest\" ]; then version=$(curl --silent \"https:\/\/api.github.com\/repos\/prometheus\/prometheus\/releases\/latest\" | grep '\"tag_name\":' | sed -E 's\/.*\"([^\"]+)\".*\/\\1\/' | cut -c2-); fi\r\ncurl -L https:\/\/github.com\/prometheus\/prometheus\/releases\/download\/v${version}\/prometheus-${version}.linux-${ARCH}.tar.gz --output prometheus.tar.gz\r\ntar -zxvf prometheus.tar.gz\r\nmv -n prometheus-*\/* .\/\r\nrm -rf prometheus.tar.gz prometheus-*\/\r\n# Restore configuration if necessary\r\nif [ -f \"prometheus.yml.bak\" ]; then rm -rf prometheus.yml && mv prometheus.yml.bak prometheus.yml && rm -rf prometheus.yml.bak; fi\r\nif [ -f \"prometheus.web.yml.bak\" ]; then rm -rf prometheus.web.yml && mv prometheus.web.yml.bak prometheus.web.yml && rm -rf prometheus.web.yml.bak; fi\r\n# Create dummy prometheus.web.yml as a placeholder\r\nif [ ! -f \"prometheus.web.yml\" ]; then touch prometheus.web.yml; fi", "container": "debian:buster-slim", "entrypoint": "bash" } @@ -35,7 +35,8 @@ "default_value": "latest", "user_viewable": true, "user_editable": true, - "rules": "required|string|max:20" + "rules": "required|string|max:20", + "field_type": "text" } ] } diff --git a/software/owncast/README.md b/software/owncast/README.md new file mode 100644 index 00000000..a1262166 --- /dev/null +++ b/software/owncast/README.md @@ -0,0 +1,51 @@ +# Owncast + +## From the [Owncast](https://owncast.online) website + +Owncast is a self-hosted live video and web chat server for use with existing popular broadcasting software. + +## Installation + +Follow the common egg installation guide to install the egg on your Pterodactyl instance. +When setting up a server, the version set in the varaible will be used, default is 0.0.11. + +## Configuration + +Configuring Owncast in Pterodactyl can be done by using the command line switches: +* -backupdir string + * Directory where backups will be written to +* -database string + * Path to the database file. +* -enableDebugFeatures + * Enable additional debugging options. +* -enableVerboseLogging + * Enable additional logging. +* -logdir string + * Directory where logs will be written to +* -restoreDatabase string + * Restore an Owncast database backup +* -rtmpport int + * Set listen port for the RTMP server +* -streamkey string + * Set your stream key/admin password +* -webserverip string + * Force web server to listen on this IP address +* -webserverport string + * Force the web server to listen on a specific port + + + +## Update support + +The egg _should_ keep the `data` folder when reinstalling, to prevent destroying the configuration by accident. + +If you want to reset the server completly, remove the `data` directory manually before reinstalling. + +### Server Ports + +Ports required to run the server in a table format. + +| Port | default | +| --------------- | ------- | +| Webserver | 8090 | +| RTMP | 8091 | diff --git a/software/owncast/egg-owncast-online.json b/software/owncast/egg-owncast-online.json new file mode 100644 index 00000000..f134c898 --- /dev/null +++ b/software/owncast/egg-owncast-online.json @@ -0,0 +1,95 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v1", + "update_url": null + }, + "exported_at": "2022-03-31T11:32:42+01:00", + "name": "owncast.online", + "author": "psychoalex@thevcbc.com", + "description": "Owncast is a self-hosted live video and web chat server for use with existing popular broadcasting software.", + "features": null, + "images": [ + "ghcr.io\/pterodactyl\/yolks:debian" + ], + "file_denylist": [], + "startup": ".\/owncast -webserverport {{SERVER_PORT}} -rtmpport {{RTMP_PORT}} -streamkey {{STREAM_KEY}}", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"The web admin interface is available at \/admin.\"\r\n}", + "logs": "{}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/bash\r\n\r\n#Make Server Dir\r\nif [ ! -d \/mnt\/server\/ ]; then\r\n mkdir \/mnt\/server\/\r\nfi\r\ncd \/mnt\/server\/\r\n\r\n#Get Dependencies\r\napt-get -y update\r\napt-get -y install curl unzip tar jq\r\n\r\n#Get Owncast Install Files\r\n\r\nif [ -z \"${GITHUB_USER}\" ] && [ -z \"${GITHUB_OAUTH_TOKEN}\" ] ; then\r\n echo -e \"using anon api call\"\r\nelse\r\n echo -e \"user and oauth token set\"\r\n alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '\r\nfi\r\n\r\n## get release info and download links\r\nLATEST_JSON=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\/latest\")\r\nRELEASES=$(curl --silent \"https:\/\/api.github.com\/repos\/${GITHUB_PACKAGE}\/releases\")\r\n\r\nif [ -z \"${VERSION}\" ] || [ \"${VERSION}\" == \"latest\" ]; then\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})\r\nelse\r\n VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .tag_name')\r\n if [ \"${VERSION}\" == \"${VERSION_CHECK}\" ]; then\r\n DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION \"${VERSION}\" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})\r\n else\r\n echo -e \"defaulting to latest release\"\r\n DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)\r\n fi\r\nfi\r\n\r\necho Download URL is: ${DOWNLOAD_URL}\r\n\r\ncurl -L ${DOWNLOAD_URL} --output .\/owncast_installer.zip\r\n\r\n#curl -L https:\/\/github.com\/owncast\/owncast\/releases\/download\/v${OWNCAST_VERSION}\/owncast-${OWNCAST_VERSION}-linux-64bit.zip --output .\/owncast_installer.zip\r\n\r\n#Unzip Install Files\r\nunzip -o -q .\/owncast_installer.zip\r\nrm .\/owncast_installer.zip", + "container": "debian:buster-slim", + "entrypoint": "bash" + } + }, + "variables": [ + { + "name": "RTMP Port", + "description": "The port that is used to receive the stream data.", + "env_variable": "RTMP_PORT", + "default_value": "8091", + "user_viewable": true, + "user_editable": false, + "rules": "required|integer" + }, + { + "name": "Stream\/Admin Key", + "description": "This is used to authenticate to the web admin interface, as well as to authenticate your stream.", + "env_variable": "STREAM_KEY", + "default_value": "", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|min:32|max:128" + }, + { + "name": "Owncast Version", + "description": "The version of Owncast that you would like to install, from https:\/\/github.com\/owncast\/owncast\/releases\r\nAs an Example - \"v0.0.11\" for a specific version or \"latest\" for the most up to date version.", + "env_variable": "VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:20" + }, + { + "name": "Github Repository", + "description": "Used to identify the github repository to pull the release from.", + "env_variable": "GITHUB_PACKAGE", + "default_value": "owncast\/owncast", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:120" + }, + { + "name": "Github File Match", + "description": "Used to identify the specific asset under a release for download.", + "env_variable": "MATCH", + "default_value": "linux-64bit", + "user_viewable": false, + "user_editable": false, + "rules": "required|string|max:20" + }, + { + "name": "Github User", + "description": "Required if you are doing more calls than the github anonymous API user allows.", + "env_variable": "GITHUB_USER", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "nullable|string|max:20" + }, + { + "name": "Github Oauth Token", + "description": "Required if you are doing more calls than the github anonymous API user allows.", + "env_variable": "GITHUB_OAUTH_TOKEN", + "default_value": "", + "user_viewable": false, + "user_editable": false, + "rules": "nullable|string|max:128" + } + ] +} diff --git a/storage/minio/egg-minio-s3.json b/storage/minio/egg-minio-s3.json index 9ef0e0cf..7358c5fb 100644 --- a/storage/minio/egg-minio-s3.json +++ b/storage/minio/egg-minio-s3.json @@ -1,27 +1,28 @@ { "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", "meta": { - "version": "PTDL_v1", + "version": "PTDL_v2", "update_url": null }, - "exported_at": "2021-01-11T15:35:14-05:00", + "exported_at": "2022-07-08T16:16:10+02:00", "name": "Minio S3", "author": "accounts@bofanodes.io", "description": "MinIO is a cloud storage server compatible with Amazon S3, released under Apache License v2. As an object store, MinIO can store unstructured data such as photos, videos, log files, backups and container images. The maximum size of an object is 5TB.", "features": null, - "images": [ - "quay.io\/parkervcp\/pterodactyl-images:ubuntu" - ], + "docker_images": { + "ghcr.io\/parkervcp\/yolks:debian": "ghcr.io\/parkervcp\/yolks:debian" + }, + "file_denylist": [], "startup": ".\/minio.sh", "config": { "files": "{}", "startup": "{\r\n \"done\": \"guide\"\r\n}", - "logs": "{\r\n \"custom\": false,\r\n \"location\": \"logs\/latest.log\"\r\n}", + "logs": "{}", "stop": "^C" }, "scripts": { "installation": { - "script": "#\r\n#\r\napt update\r\napt install -y wget\r\ncd \/mnt\/server\r\nwget https:\/\/dl.min.io\/server\/minio\/release\/linux-amd64\/minio\r\nchmod +x minio\r\nmkdir data\r\nmkdir keys\r\n\r\nwget https:\/\/github.com\/\/parkervcp\/eggs\/raw\/master\/storage\/minio\/minio.sh\r\nchmod +x minio.sh\r\nexport MINIO_ACCESS_KEY=$(cat \/dev\/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)\r\necho $MINIO_ACCESS_KEY > keys\/key.txt\r\nexport MINIO_SECRET_KEY=$(cat \/dev\/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)\r\necho $MINIO_SECRET_KEY > keys\/secret.txt\r\necho done", + "script": "#!\/bin\/bash\r\n#\r\napt update\r\napt install -y wget\r\nARCH=$([[ \"$(uname -m)\" == \"x86_64\" ]] && echo \"amd64\" || echo \"arm64\")\r\ncd \/mnt\/server\r\nwget https:\/\/dl.min.io\/server\/minio\/release\/linux-${ARCH}\/minio\r\nchmod +x minio\r\nmkdir data\r\nmkdir keys\r\n\r\nwget https:\/\/github.com\/\/parkervcp\/eggs\/raw\/master\/storage\/minio\/minio.sh\r\nchmod +x minio.sh\r\nexport MINIO_ACCESS_KEY=$(cat \/dev\/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)\r\necho $MINIO_ACCESS_KEY > keys\/key.txt\r\nexport MINIO_SECRET_KEY=$(cat \/dev\/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)\r\necho $MINIO_SECRET_KEY > keys\/secret.txt\r\necho done", "container": "debian:buster-slim", "entrypoint": "bash" } @@ -34,7 +35,8 @@ "default_value": "normal", "user_viewable": true, "user_editable": true, - "rules": "required|string|in:normal,rotate,update" + "rules": "required|string|in:normal,rotate,update", + "field_type": "text" } ] } diff --git a/storage/minio/minio.sh b/storage/minio/minio.sh index 9460824b..473cc9f0 100644 --- a/storage/minio/minio.sh +++ b/storage/minio/minio.sh @@ -42,7 +42,8 @@ echo "$(tput setaf 3)Performing update...." echo "$(tput setaf 1)Removing old minio version" rm minio echo "$(tput setaf 3)Downloading new minio version" -wget https://dl.min.io/server/minio/release/linux-amd64/minio +export ARCH=$([[ "$(uname -m)" == "x86_64" ]] && echo "amd64" || echo "arm64") +wget https://dl.min.io/server/minio/release/linux-$ARCH/minio chmod +x minio echo "$(tput setaf 2)Update Complete" fi diff --git a/voice_servers/teamspeak_ARM64/Readme.md b/voice_servers/teamspeak_ARM64/Readme.md new file mode 100644 index 00000000..ebccfefe --- /dev/null +++ b/voice_servers/teamspeak_ARM64/Readme.md @@ -0,0 +1,17 @@ +# TeamSpeak ARM64 + +## From their [Website](https://www.teamspeak.com/) + + +## Server Ports + +Ports required to run the server in a table format. + +| Port | default | +|---------|---------| +| Voice | 9987 | +| Query | 10011 | +| File | 30033 | + +### arm64 +* The arm64 may not perform as expected due to the amd64 to arm emulaton. \ No newline at end of file diff --git a/voice_servers/teamspeak_ARM64/egg-teamspeak3-arm64-server.json b/voice_servers/teamspeak_ARM64/egg-teamspeak3-arm64-server.json new file mode 100644 index 00000000..975baecb --- /dev/null +++ b/voice_servers/teamspeak_ARM64/egg-teamspeak3-arm64-server.json @@ -0,0 +1,62 @@ +{ + "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO", + "meta": { + "version": "PTDL_v2", + "update_url": null + }, + "exported_at": "2022-07-06T17:10:16+02:00", + "name": "Teamspeak3 Server ARM64", + "author": "josdekurk@gmail.com", + "description": "VoIP software designed with security in mind, featuring crystal clear voice quality, endless customization options, and scalabilty up to thousands of simultaneous users.", + "features": null, + "docker_images": { + "ghcr.io\/parkervcp\/yolks:box64": "ghcr.io\/parkervcp\/yolks:box64" + }, + "file_denylist": [], + "startup": "box64 .\/ts3server default_voice_port={{SERVER_PORT}} query_port={{QUERY_PORT}} filetransfer_ip=0.0.0.0 filetransfer_port={{FILE_TRANSFER}} license_accepted=1", + "config": { + "files": "{}", + "startup": "{\r\n \"done\": \"listening on 0.0.0.0:\"\r\n}", + "logs": "{\r\n \"custom\": true,\r\n \"location\": \"logs\/ts3.log\"\r\n}", + "stop": "^C" + }, + "scripts": { + "installation": { + "script": "#!\/bin\/ash\r\n# TS3 Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\n\r\nif [ -z ${TS_VERSION} ] || [ ${TS_VERSION} == latest ]; then\r\n TS_VERSION=$(curl -sSL https:\/\/teamspeak.com\/versions\/server.json | jq -r '.linux.x86_64.version')\r\nfi\r\n\r\ncd \/mnt\/server\r\n\r\necho -e \"getting files from http:\/\/files.teamspeak-services.com\/releases\/server\/${TS_VERSION}\/teamspeak3-server_linux_x86-${TS_VERSION}.tar.bz2\" \r\ncurl -L http:\/\/files.teamspeak-services.com\/releases\/server\/${TS_VERSION}\/teamspeak3-server_linux_amd64-${TS_VERSION}.tar.bz2 | tar -xvj --strip-components=1", + "container": "ghcr.io\/pterodactyl\/installers:alpine", + "entrypoint": "ash" + } + }, + "variables": [ + { + "name": "Server Version", + "description": "The version of Teamspeak 3 to use when running the server.", + "env_variable": "TS_VERSION", + "default_value": "latest", + "user_viewable": true, + "user_editable": true, + "rules": "required|string|max:6", + "field_type": "text" + }, + { + "name": "File Transfer Port", + "description": "The Teamspeak file transfer port", + "env_variable": "FILE_TRANSFER", + "default_value": "30033", + "user_viewable": true, + "user_editable": false, + "rules": "required|integer|between:1,65535", + "field_type": "text" + }, + { + "name": "Query Port", + "description": "The Teamspeak Query Port", + "env_variable": "QUERY_PORT", + "default_value": "10011", + "user_viewable": true, + "user_editable": false, + "rules": "required|integer|between:1,65535", + "field_type": "text" + } + ] +} \ No newline at end of file