mirror of
https://github.com/pelican-dev/panel.git
synced 2026-05-04 18:00:48 +03:00
@@ -13,8 +13,6 @@ class DatabaseSeeder extends Seeder
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$this->call(EggSeeder::class);
|
||||
|
||||
Role::firstOrCreate(['name' => Role::ROOT_ADMIN]);
|
||||
|
||||
$plugins = Plugin::query()->orderBy('load_order')->get();
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use App\Models\Egg;
|
||||
use App\Services\Eggs\Sharing\EggImporterService;
|
||||
use DirectoryIterator;
|
||||
use Illuminate\Database\Seeder;
|
||||
use Illuminate\Http\UploadedFile;
|
||||
use Symfony\Component\Yaml\Yaml;
|
||||
use Throwable;
|
||||
|
||||
class EggSeeder extends Seeder
|
||||
{
|
||||
protected EggImporterService $importerService;
|
||||
|
||||
/**
|
||||
* @var string[]
|
||||
*/
|
||||
public static array $imports = [
|
||||
'Minecraft',
|
||||
'Source Engine',
|
||||
'Voice Servers',
|
||||
'Rust',
|
||||
];
|
||||
|
||||
/**
|
||||
* EggSeeder constructor.
|
||||
*/
|
||||
public function __construct(
|
||||
EggImporterService $importerService
|
||||
) {
|
||||
$this->importerService = $importerService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the egg seeder.
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
foreach (static::$imports as $import) {
|
||||
$this->parseEggFiles($import);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Loop through the list of egg files and import them.
|
||||
*/
|
||||
protected function parseEggFiles($name): void
|
||||
{
|
||||
$path = database_path('Seeders/eggs/' . kebab_case($name));
|
||||
$files = new DirectoryIterator($path);
|
||||
|
||||
$this->command->alert('Updating Eggs for: ' . $name);
|
||||
|
||||
/** @var DirectoryIterator $file */
|
||||
foreach ($files as $file) {
|
||||
if (!$file->isFile() || !$file->isReadable()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$extension = strtolower($file->getExtension());
|
||||
$filePath = $file->getRealPath();
|
||||
|
||||
try {
|
||||
$decoded = match ($extension) {
|
||||
'json' => json_decode(file_get_contents($filePath), true, 512, JSON_THROW_ON_ERROR),
|
||||
'yaml', 'yml' => Yaml::parseFile($filePath),
|
||||
default => null,
|
||||
};
|
||||
} catch (Throwable) {
|
||||
$this->command->warn("Failed to parse {$file->getFilename()}, skipping.");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!is_array($decoded) || !isset($decoded['name'], $decoded['author'])) {
|
||||
$this->command->warn("Invalid structure in {$file->getFilename()}, skipping.");
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
$uploaded = new UploadedFile($filePath, $file->getFilename());
|
||||
|
||||
$egg = Egg::query()
|
||||
->where('author', $decoded['author'])
|
||||
->where('name', $decoded['name'])
|
||||
->first();
|
||||
|
||||
if ($egg instanceof Egg) {
|
||||
$this->importerService->fromFile($uploaded, $egg);
|
||||
$this->command->info('Updated ' . $decoded['name']);
|
||||
} else {
|
||||
$this->importerService->fromFile($uploaded);
|
||||
$this->command->comment('Created ' . $decoded['name']);
|
||||
}
|
||||
}
|
||||
|
||||
$this->command->line('');
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,159 +0,0 @@
|
||||
_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
|
||||
meta:
|
||||
version: PLCN_v3
|
||||
update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/minecraft/egg-sponge.yaml'
|
||||
exported_at: '2025-10-31T12:41:03+00:00'
|
||||
name: Sponge
|
||||
author: panel@example.com
|
||||
uuid: f0d2f88f-1ff3-42a0-b03f-ac44c5571e6d
|
||||
description: 'A community-driven open source Minecraft: Java Edition modding platform.'
|
||||
image: 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMDAgMjAwIiBmaWxsPSIjRjdDRjBEIj48cGF0aCBkPSJNMTkwIDBIMTBDNC41IDAgMCA0LjUgMCAxMHYxODBjMCA1LjUgNC41IDEwIDEwIDEwaDE2LjFjLTEuNy00NS43LS4xLTUyLjUgMy4xLTU3IDMuOS01LjYgNS41LTYuMyAxMS40LTExIDUtNCAzLjItMTAuNS0uNC0xNS4yLTIuMi0yLjktNS4zLTYuMy03LjctOS42LTEuNS0yLjIgMi4yLTE1LjEgMy42LTE5LjggMS40LTQuNyAzLjgtMjAgMjQuOC0yNC4xIDcuOS0xLjYgMjkuNi0yLjcgNDQuNS0xLjgtLjEtLjYtLjMtMS4zLS40LTItLjMtMS4yLS41LTIuNS0uOC0zLjktLjMtMS4zLS42LTIuNy0uOS00LjEtLjMtMS40LS43LTIuOC0xLTQuMy0uNC0xLjUtLjctMi45LTEuMi00LjQtLjgtMy0xLjgtNS45LTMtOC43LS42LTEuNC0xLjItMi43LTEuOS0zLjktLjctMS4xLTEuNC0yLjEtMi0yLjUtLjEtLjEtLjItLjItLjMtLjJoLS4xLjJzLjEgMCAwIDBsLS4zLS4xaC0uMmwtLjQtLjFoLS41Yy0xLjMtLjEtMi43LS4xLTQuMiAwLTIuOS4yLTYgLjgtOSAxLjVzLTUuOSAxLjYtOC43IDIuNGMtMS4yLjQtMi4zLjgtMy40IDEuMS4xLjkuMiAxLjcuMiAyLjYgMCAxMy0xMC41IDIzLjUtMjMuNSAyMy41UzIwLjYgNDcuOSAyMC42IDM0LjlzMTAuNS0yMy41IDIzLjUtMjMuNWM4LjcgMCAxNi4zIDQuNyAyMC40IDExLjggMS0uNCAyLjEtLjggMy4yLTEuMiAyLjgtMS4xIDUuOS0yLjIgOS4xLTMuMiAzLjMtMSA2LjctMiAxMC41LTIuNSAxLjktLjMgMy45LS40IDYuMS0uM2guOGMuMyAwIC42LjEuOC4xSDk1LjdsLjMuMWguMWwuMy4xcy4yIDAgLjMuMWwuNC4xYy42LjIuOS4zIDEuMy41cy43LjMgMS4xLjVjLjcuNCAxLjMuOCAxLjkgMS4yIDEuMS45IDIgMS44IDIuNyAyLjcuOC45IDEuNCAxLjggMiAyLjcgMS4yIDEuOCAyLjEgMy41IDIuOSA1LjIgMS42IDMuNCAyLjkgNi44IDMuOSAxMGwxLjUgNC44Yy41IDEuNi44IDMuMSAxLjIgNC42LjIuNy40IDEuNS41IDIuMi4yLjcuMyAxLjQuNSAyLjEuMyAxLjQuNiAyLjguOSA0LjEuNCAyIC43IDMuOSAxIDUuNiAyMi40IDIuMiAzOS41IDUuMSA0Ny4yIDEyLjggMTEuMyAxMSAyMCA2MSAxNC4zIDEyNC41aDEwYzUuNSAwIDEwLTQuNSAxMC0xMFYxMGMwLTUuNS00LjUtMTAtMTAtMTB6Ii8+PHBhdGggZD0iTTkxLjQgMTQwLjhjLTEuMyAzLjYtMi40IDQ1LjcgMTAgNDUuN3MxMi41LTQzLjIgMTIuMS00NS43Yy0uNC0yLjQtMjAuOC0zLjUtMjIuMSAwek03NSAxMDBjLTguNS0xLjItMTMuNiA0MC4yLTEuNyA0Mi42IDExLjIgMi4yIDEwLjEtNDEuNCAxLjctNDIuNnpNMTMwLjggMTAwYy04LjUtMS4yLTEzLjYgNDAuMi0xLjcgNDIuNiAxMS4yIDIuMiAxMC4yLTQxLjQgMS43LTQyLjZ6Ii8+PC9zdmc+'
|
||||
tags:
|
||||
- minecraft
|
||||
features:
|
||||
- eula
|
||||
- java_version
|
||||
- pid_limit
|
||||
docker_images:
|
||||
'Java 21': 'ghcr.io/pelican-eggs/yolks:java_21'
|
||||
'Java 17': 'ghcr.io/pelican-eggs/yolks:java_17'
|
||||
'Java 16': 'ghcr.io/pelican-eggs/yolks:java_16'
|
||||
'Java 11': 'ghcr.io/pelican-eggs/yolks:java_11'
|
||||
'Java 8': 'ghcr.io/pelican-eggs/yolks:java_8'
|
||||
file_denylist: { }
|
||||
startup_commands:
|
||||
Default: 'java -Xms128M -XX:MaxRAMPercentage=95.0 -jar {{SERVER_JARFILE}}'
|
||||
config:
|
||||
files:
|
||||
server.properties:
|
||||
parser: properties
|
||||
find:
|
||||
server-ip: ''
|
||||
server-port: '{{server.allocations.default.port}}'
|
||||
query.port: '{{server.allocations.default.port}}'
|
||||
startup:
|
||||
done: ')! For help, type '
|
||||
logs: { }
|
||||
stop: stop
|
||||
scripts:
|
||||
installation:
|
||||
script: |-
|
||||
#!/bin/ash
|
||||
# Sponge Installation Script
|
||||
#
|
||||
# Server Files: /mnt/server
|
||||
|
||||
cd /mnt/server
|
||||
|
||||
if [ $MINECRAFT_VERSION = 'latest' ] || [ -z $MINECRAFT_VERSION ]; then
|
||||
TARGET_VERSION_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/latest?recommended=true)
|
||||
if [ -z "${TARGET_VERSION_JSON}" ]; then
|
||||
echo -e "Failed to find latest recommended version!"
|
||||
exit 1
|
||||
fi
|
||||
echo -e "Found latest version for ${SPONGE_TYPE}"
|
||||
else
|
||||
if [ $SPONGE_TYPE = 'spongevanilla' ]; then
|
||||
VERSIONS_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions?tags=,minecraft:${MINECRAFT_VERSION}&offset=0&limit=1)
|
||||
else
|
||||
FORGETAG='forge'
|
||||
if [ $SPONGE_TYPE = 'spongeneo' ]; then
|
||||
FORGETAG='neoforge'
|
||||
fi
|
||||
VERSIONS_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions?tags=,minecraft:${MINECRAFT_VERSION},${FORGETAG}:${FORGE_VERSION}&offset=0&limit=1)
|
||||
fi
|
||||
|
||||
if [ -z "${VERSIONS_JSON}" ]; then
|
||||
echo -e "Failed to find recommended ${MINECRAFT_VERSION} version for ${SPONGE_TYPE} ${FORGE_VERSION}!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
VERSION_KEY=$(echo $VERSIONS_JSON | jq -r '.artifacts | to_entries[0].key')
|
||||
TARGET_VERSION_JSON=$(curl -sSL https://dl-api.spongepowered.org/v2/groups/org.spongepowered/artifacts/${SPONGE_TYPE}/versions/${VERSION_KEY})
|
||||
|
||||
if [ -z "${TARGET_VERSION_JSON}" ]; then
|
||||
echo -e "Failed to find ${VERSION_KEY} for ${SPONGE_TYPE} ${FORGE_VERSION}!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "Found ${MINECRAFT_VERSION} for ${SPONGE_TYPE}"
|
||||
fi
|
||||
|
||||
TARGET_VERSION=`echo $TARGET_VERSION_JSON | jq '.assets[] | select(.classifier == "universal")'`
|
||||
if [ -z "${TARGET_VERSION}" ]; then
|
||||
TARGET_VERSION=`echo $TARGET_VERSION_JSON | jq '.assets[] | select(.classifier == "" and .extension == "jar")'`
|
||||
fi
|
||||
|
||||
if [ -z "${TARGET_VERSION}" ]; then
|
||||
echo -e "Failed to get download url data from the selected version"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SPONGE_URL=$(echo $TARGET_VERSION | jq -r '.downloadUrl')
|
||||
CHECKSUM=$(echo $TARGET_VERSION | jq -r '.md5')
|
||||
echo -e "Found file at ${SPONGE_URL} with checksum ${CHECKSUM}"
|
||||
|
||||
echo -e "running: curl -o ${SERVER_JARFILE} ${SPONGE_URL}"
|
||||
curl -o ${SERVER_JARFILE} ${SPONGE_URL}
|
||||
|
||||
if [ $(basename $(md5sum ${SERVER_JARFILE})) = ${CHECKSUM} ] ; then
|
||||
echo "Checksum passed"
|
||||
else
|
||||
echo "Checksum failed"
|
||||
fi
|
||||
|
||||
echo -e "Install Complete"
|
||||
container: 'ghcr.io/pelican-eggs/installers:alpine'
|
||||
entrypoint: ash
|
||||
variables:
|
||||
-
|
||||
name: 'Forge/Neoforge Version'
|
||||
description: |-
|
||||
The modding api target version if set to `spongeforge` or `spongeneo`. Leave blank if using
|
||||
`spongevanilla`
|
||||
env_variable: FORGE_VERSION
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- string
|
||||
sort: 3
|
||||
-
|
||||
name: 'Minecraft Version'
|
||||
description: |-
|
||||
The version of Minecraft to target. Use "latest" to install the latest version. Go to Settings >
|
||||
Reinstall Server to apply.
|
||||
env_variable: MINECRAFT_VERSION
|
||||
default_value: latest
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- string
|
||||
- 'between:3,15'
|
||||
sort: 1
|
||||
-
|
||||
name: 'Server Jar File'
|
||||
description: 'The name of the Jarfile to use when running Sponge.'
|
||||
env_variable: SERVER_JARFILE
|
||||
default_value: server.jar
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- 'regex:/^([\w\d._-]+)(\.jar)$/'
|
||||
sort: 4
|
||||
-
|
||||
name: 'Sponge Type'
|
||||
description: |-
|
||||
SpongeVanilla if you are only using Sponge plugins.
|
||||
SpongeForge when using Forge mods and Sponge plugins.
|
||||
SpongeNeo when using NeoForge mods and Sponge plugins.
|
||||
env_variable: SPONGE_TYPE
|
||||
default_value: spongevanilla
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- 'in:spongevanilla,spongeforge,spongeneo'
|
||||
sort: 2
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,155 +0,0 @@
|
||||
_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
|
||||
meta:
|
||||
version: PLCN_v3
|
||||
update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/source-engine/egg-custom-source-engine-game.yaml'
|
||||
exported_at: '2025-10-31T12:43:00+00:00'
|
||||
name: 'Custom Source Engine Game'
|
||||
author: panel@example.com
|
||||
uuid: 2a42d0c2-c0ba-4067-9a0a-9b95d77a3490
|
||||
description: |-
|
||||
This option allows modifying the startup arguments and other details to run a custom SRCDS based
|
||||
game on the panel.
|
||||
image: 'data:image/webp;base64,UklGRoAMAABXRUJQVlA4THMMAAAv+QATECUwbtvIkdx/2ZNnLnwjYgLYqi8KnDuYekQOBtxU1VNGcZdt8CWWtnXLbdOCTsNlE6Ix5eSRaVdUVr1HA0Dlx+NLkmTVtm3binROhla09D55Lsi/tN5reIlWJ3xHSKBt7dii9/uN8Cv8yLaxjGXbrrFt20YY2whj2zZy/bbVK8FtI0mS6JnZe9d1ZWVW7QskSZIcN1L9/zwbHDaPlYyAqtAy1NVBG0mOnCyW92E8+9FhG0mKVBkf/fjgKXVZkCSbttXXtm3btm3bfrZt27b5dW3btm3uuyBIkuSoyWLwSHjPBwr8a2Y+MUMVHtiDh/iHYtShBa1oQCUqUYv6V2h4HQO0ogXt6EbXK/Rj4BUGMfYOk5h5hwUsYRGLWMb6O2yBgGATs2jDT6RbYlG4eWMvZksTu/EbXVgF+bEwjZsQvbV53+lhjBtoBwXyw2EUAVfG8CEddaBAviBs48h9QRSXMAbyLeHAZc3HiwfHMAHyPWHLcrsqGKIT5KtCh8V1UWZ4XvNl4dBFIfbjOYYVdOE/bmEPwuEBB9jBGQFIxll8QC1mzkPXhP2h2DWzJtas8qjUohQoemVdDC7uoR8vEQrFf+dh2h+rP78/jSUCe5xHJTYOL+D8UDZVX+9qfHHqdc0oUMvrzcVgzwbm8I5xAlvumP153XRQx5mzt0Rcex7bwtelohao2/WqmPWhbl8Mo4D5JwzjBCNROXJjsSIQpQch86kIdaVohdSJ2lLPanOdv9kOiMfmGyhcsXirx25eQw8fNByDeoPhqa491cUKrpMVXp1RuFljT2M8RQ7ejD3tThy9cU4W7MPcIWj3xPpQuFpdlgVqVTEKFLvWR6GF5owics9A4zgnUxQ6aj4PRpwHdQJyotBUCMHCAbjXlSjACpN1hk9bogBDjFVhZM7w9iUKMKv+R9yPQmfBq/YsGlswaE0UsK8EuVFoLnyuQHh3IIK+PPRxcRe9ozYeiQUyAvSLNgYBGQn+R+Rv4gc0EtIb+mTjEJGRFvZFG7XxSEhwvyIv1EJgHi4XeAFH5bbr9E4vPjG+Pu912qoYa4itQlv1+GyQEE+vl85bIGYRs03i2IIDlbFrbTihPKFzaiUW4YKlUsd8wMX3XmD3f4S7Jh0e+G2E0Kgf7juobrkMvWGFmeuc1/rwcf310gkt3H5GCgyDn1lYg9rYG0aRW5RgDpmrUr9HjhYixhmi2MyYP1Yvh0QRLdkl5AZYZ27RXOvQW/ukle7agULC50llit5rfelXD5xi92jBFCp3lW7cGYrpPjKlZjRuSRuCFpaT8D89Aj0CBzGmk8sBT5eYz9VIrdjkTkU4VCiZZ72ObU9O9A475Ylz2FCpF2K8As/xTvLB94hqfecd4/J2KjAKniTBN2vlkYKzGBUbqSWZVfOGX6M8HIUDTztbnxzvdnIBAfrB7BeUhfTgJIzWbUyyKU6NmhmROgJVrObe8J3zYk1aMRTgNAQCA4vH1fDF/RV2wmb4C2ZfIPaB0zj2wHSYXg2LUSssMAm+pOBUct7w3oHzeAHXmPNCNUJhfwFJzoAHtoPz2N5sqtfjYhRiJ+CUgWVLMUk12JE7Y4ZShbvGcnfpQhPNV7KYImYaOjDGj824HaPNDAcawIiBlinXUHQB5XK++GjyJen3YiSMczKhJQE/opCks/OVZ2siytfOy4vF8B/smNzWLJIXPylW+A2GaL0dMzkYScbEC+idUyKIl3A1rtIHviF+Mi3da5xSLpQnP2k2Gg5N7C0wCC4nwC3pQTHUKQhdeJM0dHw+WZ8GW7mtGbJ1zOH0EH3bD463BAKfPPTYJ3wx6Tf5L761XQkGQhfVH7DxwlW//FqzZeNK+HcFDcDyMzSNgzlp+dH2I70CUhlteYu3PUEYTFZwqmYu2OPSX4LRRambdpl5CaLqDPMKdYVTdHo+2NJLePZmFZohuN/LODIADvSf+vxWFNijJlFmVN8jXDM/mAF2GnPhcNHT8PoBeDJ7M2vBTlnsa324rbEpgGGkD398YzOhtA3J5hQ4B78+wRyk6gwKDR5oli2L8CHMdrxZqExoGAbMvh+5yDAR9r3zoEDEO0wkxRRQ0ys4WCDH1V5H0wAOfYI3UcjilgY6Cq07fLRM4UTRmXoq5H7nzv1MLtAJYQrXc/ZAeUyEdwm53AIudFIO1HYuD8D5E9ikfYt4my97P7Sq57vIJ3J6KVo+n1I7G0S5my/v+MD43oWY/WGbWGKgX4Kx8Ij+92YoB8uJtvFvk8/mjBrW9lDx/7bSRSGdKeApTHp1WSIZNbGw829jTySF2wOfu1mYimnvPC8wDm+G/k846ZjjKY45Td3PEh5n4MPEHtKikPeO83C0TCJwRR36eae4W+BkO4RBQNrNjAmNi8jOoTwp4OuRdvbr/6dD9xbGx7mEopCo/GQczwa2F651zhyhEoW70c2MpGowPnRW5Km9gcZBV1Rt4VEUSrG0iw6cxbDcw+mg/VzXYGfCzXxMvd4IfnVm5Zl0AzMGkL8DyjKKQjH+9uLOtoVR/Qe3O21HLAx0Js55NuNugux/Z1qeyTewYADZOyiIQj00+dp8mPxxahFPrndOnX9A2Kkbe0e8mdGVIPjZWTSn4QbmDiBvB7EFbskbZrkqs9ULYvAQ3U8Od24dbTZNJyshR41gfJ1xPYH2rrNzTnaYsitXoHAWJVwHULH7KMviK3Bftr0Mu/2LaHkUsDSsRH9An4gHO34J1bKPEAy+rICusDA4gUNhfQkKrMAw02Bd4Lb8fyy06NjArSjcm01U7H36UF5AQbjkeEZ5HWEEvYDSjp53hEPxOts7A5t0YDElwSUU5m8ybh/shNzH4MLYCpvQKdk0tGvykYR3KjC7ALewijP+xM3OwwIF5IWiMiPp4OuUhGYSD9xJ6ydPegUtN/7XDSzvvoxU4j+u0c8QeIkQyyw2UWd+gQJehNXpn8jhPkQT54ISAosiO2/AgbRzNEpHmXp7pqvczRMxlpj/GYtVDsB2sxnBNXr7wMAlgvYtTREKWJAuuSycj/QCnvilx8A/otPUzOjU8EkUrbDZxed1gQI7iKFP5yVkb4Q+FFg1gJ0r9Mw5OGp0zW5K7Ak7GR/nA0kYSHjNZja6PwfkUBTU0H2DOA7eQX6o5jXrQCZ9ONXzFM7XbZc80H0yT8l9AJ9WOBeFGtM6IqFBOrPJsQ8Xi14JfT1vEUPHfHkV4WNa9Ktof8YZ8BYwnoVuHnLsz2NIwr7A+SAtNPM5nI+89VReaDCs6yGxMvZULuIQhhJcVQt3tUiWMB5ucptlKD2TdUk5L0zsHW522sGgk5eu9saHwp5ZqVmzRS6SgvcoIIU5vVewSRwOJm+1bqUm1l+qOR960Lighj8WJm/lzlCG48tzAPrYbvArCtVsTvvFN9tUSZOqyq44kZDTR/64Q6locw29i3UhDRzkLgVsyf3oKJnzk/RNvZ4UBvPylYbK2GHKPIAT62Z4lKH6DhZyoXWz6oVmZO3lzsJ4P8LowS02TieYjkpcPx+p5tVc/xE94P2iXV8honm8TuYolBOCP+fLsuvdbBwjlRGGyBFtim5RYFHcnKJLtzAFlFNebFqBBJiuqzgchQMJ9XfKS47xiRHVjG/CUzNbB1x7IEruUWCTtA5fFcrOM3T/ZtxELzCBZwvMW9JROBGGg7QTlDYsi9xNsDuTq8C2vCzaiC3MB8z2IBZQNnt7rXOy4Yr9PmN29bQAYquVfvAyz9IHvsAEZDC/wMcoHEqAfQZODNjK7VgNWprrVJkhu8/DuUyv4wDohfTLkMz4CLT5ydHewZXRdrMy2UfmfCxdk7yRczXBDhMeHlXZs9wKzIJr6+axp0MUjvWwlGKZSz7qxycmxtPnvfMWiWcxqvYVwlG9Vs/9xyUiNOyHm9bKYDkptrFirXXHb6NERAa9sk3845PnZbE9tvuj7fHxupNd74A53O6NFW6BK74aJiDG0+uVdo2chtUWQ7EdHvprlIgY118P7VCwaQWGgTxmFqiezxd9FI72J7LJ23axsbYN0ovdHoTNwGK/KRv9Sq93zKZjYrIs8FcFijX7xd42i/hiNTh0TCx0uFd64dW6ioQodBucQC3QaU+ubs0ZHjSvq0hvdxVP1kGLGfZuIQFkhcBuBzZYXuFvtwOtzdt+mIVKszjV0AfS9WFguBt8aXagiLHNoHmcU6BZeLAZTEE7Cs1C9ebn8XCNQrdQvMAGQqPQLpxaBhFR6Ne/c/Gg9gEZUeg4QwRvsQiC9rM/jCoAAA=='
|
||||
tags:
|
||||
- source
|
||||
- steamcmd
|
||||
features:
|
||||
- steam_disk_space
|
||||
docker_images:
|
||||
Source: 'ghcr.io/pelican-eggs/games:source'
|
||||
file_denylist: { }
|
||||
startup_commands:
|
||||
Default: './srcds_run -game {{SRCDS_GAME}} -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart'
|
||||
config:
|
||||
files: { }
|
||||
startup:
|
||||
done: 'gameserver Steam ID'
|
||||
logs: { }
|
||||
stop: quit
|
||||
scripts:
|
||||
installation:
|
||||
script: |-
|
||||
#!/bin/bash
|
||||
# steamcmd Base Installation Script
|
||||
#
|
||||
# Server Files: /mnt/server
|
||||
|
||||
##
|
||||
#
|
||||
# Variables
|
||||
# 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.
|
||||
# WINDOWS_INSTALL - if it's a windows server you want to install set to 1
|
||||
# SRCDS_APPID - steam app id ffound here - https://developer.valvesoftware.com/wiki/Dedicated_Servers_List
|
||||
# EXTRA_FLAGS - when a server has extra glas for things like beta installs or updates.
|
||||
#
|
||||
##
|
||||
|
||||
|
||||
## just in case someone removed the defaults.
|
||||
if [ "${STEAM_USER}" == "" ]; then
|
||||
echo -e "steam user is not set.
|
||||
"
|
||||
echo -e "Using anonymous user.
|
||||
"
|
||||
STEAM_USER=anonymous
|
||||
STEAM_PASS=""
|
||||
STEAM_AUTH=""
|
||||
else
|
||||
echo -e "user set to ${STEAM_USER}"
|
||||
fi
|
||||
|
||||
## download and install steamcmd
|
||||
cd /tmp
|
||||
mkdir -p /mnt/server/steamcmd
|
||||
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
|
||||
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
|
||||
mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
|
||||
cd /mnt/server/steamcmd
|
||||
|
||||
# SteamCMD fails otherwise for some reason, even running as root.
|
||||
# This is changed at the end of the install process anyways.
|
||||
chown -R root:root /mnt
|
||||
export HOME=/mnt/server
|
||||
|
||||
## install game using steamcmd
|
||||
./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} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6
|
||||
|
||||
## set up 32 bit libraries
|
||||
mkdir -p /mnt/server/.steam/sdk32
|
||||
cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
|
||||
|
||||
## set up 64 bit libraries
|
||||
mkdir -p /mnt/server/.steam/sdk64
|
||||
cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
|
||||
container: 'ghcr.io/pelican-eggs/installers:debian'
|
||||
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: ''
|
||||
user_viewable: true
|
||||
user_editable: false
|
||||
rules:
|
||||
- required
|
||||
- numeric
|
||||
- 'digits_between:1,6'
|
||||
sort: 1
|
||||
-
|
||||
name: 'Game Name'
|
||||
description: 'The name corresponding to the game to download and run using SRCDS.'
|
||||
env_variable: SRCDS_GAME
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: false
|
||||
rules:
|
||||
- required
|
||||
- alpha_dash
|
||||
- 'between:1,100'
|
||||
sort: 2
|
||||
-
|
||||
name: Map
|
||||
description: 'The default map for the server.'
|
||||
env_variable: SRCDS_MAP
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- string
|
||||
- alpha_dash
|
||||
sort: 3
|
||||
-
|
||||
name: 'Steam Auth'
|
||||
description: ''
|
||||
env_variable: STEAM_AUTH
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- nullable
|
||||
- string
|
||||
sort: 6
|
||||
-
|
||||
name: 'Steam Password'
|
||||
description: ''
|
||||
env_variable: STEAM_PASS
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- nullable
|
||||
- string
|
||||
sort: 5
|
||||
-
|
||||
name: 'Steam Username'
|
||||
description: ''
|
||||
env_variable: STEAM_USER
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- nullable
|
||||
- string
|
||||
sort: 4
|
||||
@@ -1,229 +0,0 @@
|
||||
_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
|
||||
meta:
|
||||
version: PLCN_v3
|
||||
update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/source-engine/egg-garrys-mod.yaml'
|
||||
exported_at: '2025-10-31T12:37:53+00:00'
|
||||
name: 'Garrys Mod'
|
||||
author: panel@example.com
|
||||
uuid: 60ef81d4-30a2-4d98-ab64-f59c69e2f915
|
||||
description: |-
|
||||
Garrys Mod, is a sandbox physics game created by Garry Newman, and developed by his company,
|
||||
Facepunch Studios.
|
||||
image: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyNC4zLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHZpZXdCb3g9IjAgMCAzODQgMzg0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAzODQgMzg0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDojMDA4MUZGO30NCgkuc3Qxe2ZpbGw6I0ZGRkZGRjt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTM0My45MiwzODRjLTEwMS42LDAtMjAzLjIsMC0zMDQuOCwwYy0wLjg5LTAuNDQtMS44NC0wLjMxLTIuNzktMC4zOGMtNC41MS0wLjM2LTguNjEtMi4wNy0xMi41Ni00LjEzDQoJYy01LjktMy4wNy0xMC44NC03LjMxLTE0LjkyLTEyLjU0Yy0zLjkzLTUuMDQtNi43My0xMC42NS04LjE3LTE2LjljLTAuMzktMS42OC0wLjMxLTMuNDEtMC40MS01LjEyYy0wLjAyLTAuMzQsMC4wOS0wLjc0LTAuMjctMQ0KCUMwLDI0Mi42NCwwLDE0MS4zNiwwLDQwLjA4YzAuNDMtMC42NywwLjI1LTEuNDQsMC4yNy0yLjE1YzAuMTEtNC42NCwxLjU3LTguOTIsMy42My0xMi45N0M5LjIyLDE0LjQ4LDE3LjI1LDYuODgsMjguMjUsMi40Ng0KCWMzLjM2LTEuMzUsNi44MS0yLjA5LDEwLjQtMi4yN0MzOS4xMywwLjE2LDM5LjY3LDAuNiw0MC4wOCwwQzE0MS45MiwwLDI0My43NiwwLDM0NS42LDBjMC43MSwwLjc3LDEuNjgsMC4zNiwyLjQ5LDAuNDINCgljMS45MiwwLjE1LDMuNzQsMC42NCw1LjUzLDEuMjVjNy4zMSwyLjQ2LDEzLjU4LDYuNTYsMTguODIsMTIuMmM1LjM5LDUuOCw5LjEyLDEyLjUsMTAuOSwyMC4yNWMwLjM4LDEuNjYsMC4yOSwzLjM3LDAuMzksNS4wNg0KCWMwLjAyLDAuMzItMC4wNywwLjY3LDAuMjYsMC45YzAsMTAxLjI4LDAsMjAyLjU2LDAsMzAzLjg0Yy0wLjU4LDAuOC0wLjM1LDEuNzYtMC4zNCwyLjU5YzAuMDMsMi43LTAuNjMsNS4yNC0xLjUzLDcuNzENCgljLTQuMjMsMTEuNTUtMTEuODgsMjAuMTItMjIuOCwyNS43M2MtMy4xMywxLjYxLTYuNDIsMi45MS05Ljk2LDMuNDNjLTEuNTIsMC4yMi0zLjA0LDAuMjYtNC41NiwwLjMzDQoJQzM0NC40OCwzODMuNzMsMzQ0LjE1LDM4My42OCwzNDMuOTIsMzg0eiIvPg0KPHBhdGggY2xhc3M9InN0MSIgZD0iTTIzNS41NywyMjEuOTFjLTIuODQsMy40LTUuNjgsNy41MS05LjIyLDEwLjg4Yy03LjIsNi44NC0xNi4yLDEwLjQxLTI1Ljc3LDEyLjQ5DQoJYy0xMS41MywyLjUxLTIzLjEzLDIuMTgtMzQuNzYsMC42MWMtMTQuNTItMS45NS0yNy4yNy03LjgzLTM4LjM4LTE3LjIyYy05LjM1LTcuOTEtMTYuMDYtMTcuOC0yMC44NC0yOS4wNA0KCWMtNC44OC0xMS40Ni03LjQtMjMuNTEtOC42OC0zNS44MWMtMS44NS0xNy43OC0wLjk5LTM1LjQyLDQuMzMtNTIuNmM0LjM3LTE0LjExLDExLjAxLTI3LDIxLjA4LTM4LjAzDQoJQzEzNSw2MC40LDE0OS4xOCw1Mi4wOCwxNjYuMSw0OC41OWM5LjQ2LTEuOTUsMTkuMDEtMS45NSwyOC41Ny0wLjRjMTcsMi43NywzMC4xMywxMS40OSwzOS43NSwyNS42OGMwLjI1LDAuMzIsMS4xOSwxLjcyLDEuMTksMS43Mg0KCXMwLTQuNzgsMC02LjgzYy0wLjAxLTUuMTYsMC0xNi41MSwwLTE2LjUxczEuMDksMCwxLjM1LDBjMTUuMjgtMC4wNSw0OS45Ny0wLjAxLDQ5Ljk3LTAuMDFzLTAuMDEsMS45Ni0wLjAxLDQuMjgNCgljMCw2NC40LDAuMDksMTI4LjgtMC4wNSwxOTMuMTljLTAuMDQsMjAuMzYtNS43OSwzOS0xOC44NCw1NC45NWMtMTAuMTUsMTIuNC0yMy4yNSwyMC41Ny0zOC4yNSwyNS44NQ0KCWMtMTQuNiw1LjE0LTI5LjcsNi45MS00NS4wOCw2LjI2Yy0xNi44MS0wLjcxLTMyLjk5LTQuMzUtNDcuNzUtMTIuNjRjLTIyLjIyLTEyLjQ5LTM1LjcyLTMxLjIyLTM5LjA3LTU2Ljc4DQoJYy0wLjQ1LTMuMzktMC41Ni02Ljg0LTAuNjktMTAuMjZjLTAuMDEtMC4yMS0wLjA3LTEuMzEtMC4wNy0xLjMxczEuMDQsMCwxLjI2LDBjMTUuMjQtMC4wNywzMC40OC0wLjA4LDQ1LjcyLTAuMDMNCgljMC4xOCwwLDAuOSwwLjAxLDAuOSwwLjAxcy0wLjAxLDAuOTYtMC4wMSwxLjEyYzAuMTYsOC44NiwyLjYyLDE2Ljg2LDguNzcsMjMuNDRjNC41OSw0LjkxLDEwLjI2LDguMTYsMTYuNyw5Ljg5DQoJYzE0Ljk2LDQuMDMsMjkuNTksMy4xOSw0My40OS0zLjk4YzEyLjUtNi40NSwyMC40LTE2LjU0LDIxLjMtMzAuODVjMC42Ny0xMC43OSwwLjI3LTIxLjY2LDAuMzQtMzIuNDkNCglDMjM1LjU3LDIyMi4zNSwyMzUuNTcsMjIxLjc5LDIzNS41NywyMjEuOTF6Ii8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTUwLjc3LDE0OS44MmMtMC4zLTExLjc5LDAuOTMtMjMuMzcsNS41NS0zNC4zNWM1LjQzLTEyLjg5LDE0LjkxLTIwLjc0LDI4LjktMjIuODgNCgljOS42Ny0xLjQ4LDE5LjA4LTAuODUsMjcuOTksMy40N2M4LjksNC4zMiwxNC4zOSwxMS43LDE3Ljk5LDIwLjY0YzMuNTMsOC43NSw1LjMzLDE3Ljk0LDUuNDYsMjcuMzFjMC4xMiw4LjM4LDAuMDksMTYuODktMS4yLDI1LjE0DQoJYy0yLjU5LDE2LjU3LTE0LjA5LDMyLjA4LTMxLjczLDM2LjRjLTE2LjA5LDMuOTQtMzIuNjktMi4yMy00Mi4yOC0xNS44MWMtNi43NC05LjUzLTkuODUtMjAuMjEtMTAuNjYtMzEuNjgNCglDMTUwLjYxLDE1NS4zMywxNTAuNzcsMTUyLjU3LDE1MC43NywxNDkuODJ6Ii8+DQo8L3N2Zz4NCg=='
|
||||
tags:
|
||||
- source
|
||||
- steamcmd
|
||||
features:
|
||||
- gsl_token
|
||||
- steam_disk_space
|
||||
docker_images:
|
||||
Source: 'ghcr.io/pelican-eggs/games:source'
|
||||
file_denylist: { }
|
||||
startup_commands:
|
||||
Default: './srcds_run -game garrysmod -console -port {{SERVER_PORT}} +ip 0.0.0.0 +host_workshop_collection {{WORKSHOP_ID}} +map {{SRCDS_MAP}} +gamemode {{GAMEMODE}} -strictportbind -norestart +sv_setsteamaccount {{STEAM_ACC}} +maxplayers {{MAX_PLAYERS}} -tickrate {{TICKRATE}} $( [ "$LUA_REFRESH" == "1" ] || printf %s ''-disableluarefresh'' )'
|
||||
config:
|
||||
files: { }
|
||||
startup:
|
||||
done: 'gameserver Steam ID'
|
||||
logs: { }
|
||||
stop: quit
|
||||
scripts:
|
||||
installation:
|
||||
script: |-
|
||||
#!/bin/bash
|
||||
# steamcmd Base Installation Script
|
||||
#
|
||||
# Server Files: /mnt/server
|
||||
|
||||
## just in case someone removed the defaults.
|
||||
if [ "${STEAM_USER}" == "" ]; then
|
||||
echo -e "steam user is not set.
|
||||
"
|
||||
echo -e "Using anonymous user.
|
||||
"
|
||||
STEAM_USER=anonymous
|
||||
STEAM_PASS=""
|
||||
STEAM_AUTH=""
|
||||
else
|
||||
echo -e "user set to ${STEAM_USER}"
|
||||
fi
|
||||
|
||||
## download and install steamcmd
|
||||
cd /tmp
|
||||
mkdir -p /mnt/server/steamcmd
|
||||
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
|
||||
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
|
||||
mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
|
||||
cd /mnt/server/steamcmd
|
||||
|
||||
# SteamCMD fails otherwise for some reason, even running as root.
|
||||
# This is changed at the end of the install process anyways.
|
||||
chown -R root:root /mnt
|
||||
export HOME=/mnt/server
|
||||
|
||||
## install game using steamcmd
|
||||
./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} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6
|
||||
|
||||
## set up 32 bit libraries
|
||||
mkdir -p /mnt/server/.steam/sdk32
|
||||
cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
|
||||
|
||||
## set up 64 bit libraries
|
||||
mkdir -p /mnt/server/.steam/sdk64
|
||||
cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
|
||||
|
||||
# Creating needed default files for the game
|
||||
cd /mnt/server/garrysmod/lua/autorun/server
|
||||
echo '
|
||||
-- Docs: https://wiki.garrysmod.com/page/resource/AddWorkshop
|
||||
-- Place the ID of the workshop addon you want to be downloaded to people who join your server, not the collection ID
|
||||
-- Use https://beta.configcreator.com/create/gmod/resources.lua to easily create a list based on your collection ID
|
||||
|
||||
resource.AddWorkshop( "" )
|
||||
' > workshop.lua
|
||||
|
||||
cd /mnt/server/garrysmod/cfg
|
||||
echo '
|
||||
// Please do not set RCon in here, use the startup parameters.
|
||||
|
||||
hostname "New Gmod Server"
|
||||
sv_password ""
|
||||
sv_loadingurl ""
|
||||
sv_downloadurl ""
|
||||
|
||||
// Steam Server List Settings
|
||||
// sv_location "eu"
|
||||
sv_region "255"
|
||||
sv_lan "0"
|
||||
sv_max_queries_sec_global "30000"
|
||||
sv_max_queries_window "45"
|
||||
sv_max_queries_sec "5"
|
||||
|
||||
// Server Limits
|
||||
sbox_maxprops 100
|
||||
sbox_maxragdolls 5
|
||||
sbox_maxnpcs 10
|
||||
sbox_maxballoons 10
|
||||
sbox_maxeffects 10
|
||||
sbox_maxdynamite 10
|
||||
sbox_maxlamps 10
|
||||
sbox_maxthrusters 10
|
||||
sbox_maxwheels 10
|
||||
sbox_maxhoverballs 10
|
||||
sbox_maxvehicles 20
|
||||
sbox_maxbuttons 10
|
||||
sbox_maxsents 20
|
||||
sbox_maxemitters 5
|
||||
sbox_godmode 0
|
||||
sbox_noclip 0
|
||||
|
||||
// Network Settings - Please keep these set to default.
|
||||
|
||||
sv_minrate 75000
|
||||
sv_maxrate 0
|
||||
gmod_physiterations 2
|
||||
net_splitpacket_maxrate 45000
|
||||
decalfrequency 12
|
||||
|
||||
// Execute Ban Files - Please do not edit
|
||||
exec banned_ip.cfg
|
||||
exec banned_user.cfg
|
||||
|
||||
// Add custom lines under here
|
||||
' > server.cfg
|
||||
container: 'ghcr.io/pelican-eggs/installers:debian'
|
||||
entrypoint: bash
|
||||
variables:
|
||||
-
|
||||
name: Gamemode
|
||||
description: 'The gamemode of your server.'
|
||||
env_variable: GAMEMODE
|
||||
default_value: sandbox
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- string
|
||||
sort: 5
|
||||
-
|
||||
name: 'Lua Refresh'
|
||||
description: "0 = disable Lua refresh,\r\n1 = enable Lua refresh"
|
||||
env_variable: LUA_REFRESH
|
||||
default_value: 0
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- boolean
|
||||
sort: 8
|
||||
-
|
||||
name: Map
|
||||
description: 'The default map for the server.'
|
||||
env_variable: SRCDS_MAP
|
||||
default_value: gm_flatgrass
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- string
|
||||
- alpha_dash
|
||||
sort: 1
|
||||
-
|
||||
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'
|
||||
sort: 6
|
||||
-
|
||||
name: 'Source AppID'
|
||||
description: 'Required for game to update on server restart. Do not modify this.'
|
||||
env_variable: SRCDS_APPID
|
||||
default_value: 4020
|
||||
user_viewable: false
|
||||
user_editable: false
|
||||
rules:
|
||||
- required
|
||||
- string
|
||||
- 'max:20'
|
||||
sort: 3
|
||||
-
|
||||
name: 'Steam Account Token'
|
||||
description: 'The Steam Account Token required for the server to be displayed publicly.'
|
||||
env_variable: STEAM_ACC
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- nullable
|
||||
- string
|
||||
- alpha_num
|
||||
- 'size:32'
|
||||
sort: 2
|
||||
-
|
||||
name: Tickrate
|
||||
description: "The tickrate defines how fast the server will update each entity's location."
|
||||
env_variable: TICKRATE
|
||||
default_value: 22
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- integer
|
||||
- 'max:100'
|
||||
sort: 7
|
||||
-
|
||||
name: 'Workshop ID'
|
||||
description: 'The ID of your workshop collection (the numbers at the end of the URL)'
|
||||
env_variable: WORKSHOP_ID
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- nullable
|
||||
- integer
|
||||
sort: 4
|
||||
File diff suppressed because one or more lines are too long
@@ -1,124 +0,0 @@
|
||||
_comment: 'DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL'
|
||||
meta:
|
||||
version: PLCN_v3
|
||||
update_url: 'https://github.com/pelican-dev/panel/raw/main/database/Seeders/eggs/source-engine/egg-team-fortress2.yaml'
|
||||
exported_at: '2025-10-31T12:31:09+00:00'
|
||||
name: 'Team Fortress 2'
|
||||
author: panel@example.com
|
||||
uuid: 7f8eb681-b2c8-4bf8-b9f4-d79ff70b6e5d
|
||||
description: |-
|
||||
Team Fortress 2 is a team-based first-person shooter multiplayer video game developed and published
|
||||
by Valve Corporation. It is the sequel to the 1996 mod Team Fortress for Quake and its 1999 remake.
|
||||
image: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB3aWR0aD0iNTAwcHgiIGhlaWdodD0iNTAwLjAwOXB4IiB2aWV3Qm94PSItNTAgLTUwLjAwNSA1MDAgNTAwLjAwOSIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAtNTAgLTUwLjAwNSA1MDAgNTAwLjAwOSINCgkgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjI1NS4zOTk0IiB5MT0iLTQzMy44NDM4IiB4Mj0iMTQ0LjU5ODkiIHkyPSI1My44NDUxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMTApIj4NCgk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojNUQxRjBFIi8+DQoJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0QwOTczNyIvPg0KPC9saW5lYXJHcmFkaWVudD4NCjxwYXRoIGZpbGw9InVybCgjU1ZHSURfMV8pIiBkPSJNMjYyLjA0NC00Mi4yMzlDMzcwLjA5Ny0xNC42NDQsNDUwLDgzLjM0NCw0NTAsMTk5Ljk5OGMwLDIuNjYxLTAuMDU3LDUuMzExLTAuMTQzLDcuOTUxDQoJbC0xNjguMTUxLTIzLjkxNmMtNC45MjItMjUuMzM4LTIxLjMzMy00Ni41NTYtNDMuNTk0LTU4LjA0NUwyNjIuMDQ0LTQyLjIzOXogTTEyNS45OSwxNjEuODgNCgljMTEuNDg4LTIyLjI2MSwzMi43MDctMzguNjcsNTguMDQzLTQzLjU5M2wyMy45Mi0xNjguMTUzYy0yLjY0My0wLjA4My01LjI5LTAuMTM5LTcuOTUzLTAuMTM5DQoJYy0xMTYuNjUyLDAtMjE0LjYzOSw3OS44OTgtMjQyLjIzNSwxODcuOTUzTDEyNS45OSwxNjEuODh6IE0xNjEuODgzLDI3NC4wMDhjLTIyLjI1OS0xMS40ODktMzguNjctMzIuNzEtNDMuNTkyLTU4LjA0NQ0KCWwtMTY4LjE1Mi0yMy45MmMtMC4wODMsMi42NDMtMC4xMzksNS4yOTMtMC4xMzksNy45NTVjMCwxMTYuNjQ4LDc5Ljg5OCwyMTQuNjM3LDE4Ny45NTIsMjQyLjIzM0wxNjEuODgzLDI3NC4wMDh6IE0yNzQuMDEsMjM4LjExMw0KCWMtMTEuNDksMjIuMjYxLTMyLjcwNywzOC42NjktNTguMDQ2LDQzLjU5M2wtMjMuOTE5LDE2OC4xNThjMi42NDMsMC4wODMsNS4yOTIsMC4xNCw3Ljk1NCwwLjE0DQoJYzExNi42NTMsMCwyMTQuNjQtNzkuOTAxLDI0Mi4yMzItMTg3Ljk1NUwyNzQuMDEsMjM4LjExM3oiLz4NCjxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfMl8iIGN4PSI5OC4xOTE5IiBjeT0iLTE5OC4zNTYiIHI9IjQyNS45ODcxIiBmeD0iOTIuNzU2NSIgZnk9Ii0xOTkuNDgzNCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLjk3NzQgMC4yMTE0IDAuMTI2NiAtMC41ODUxIC03Ny4wMzAxIC0xNjcuMzcwNykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4NCgk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGO3N0b3Atb3BhY2l0eTowIi8+DQoJPHN0b3AgIG9mZnNldD0iMC40NjU3IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZGRkZGO3N0b3Atb3BhY2l0eTowLjA4MDQiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjk4NjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkY7c3RvcC1vcGFjaXR5OjAuMjE0MyIvPg0KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkZGRkY7c3RvcC1vcGFjaXR5OjAiLz4NCjwvcmFkaWFsR3JhZGllbnQ+DQo8cGF0aCBmaWxsPSJ1cmwoI1NWR0lEXzJfKSIgZD0iTTI2Mi4wNDQtNDIuMjM5QzM3MC4wOTctMTQuNjQ0LDQ1MCw4My4zNDQsNDUwLDE5OS45OThjMCwyLjY2MS0wLjA1Nyw1LjMxMS0wLjE0Myw3Ljk1MQ0KCWwtMTY4LjE1MS0yMy45MTZjLTQuOTIyLTI1LjMzOC0yMS4zMzMtNDYuNTU2LTQzLjU5NC01OC4wNDVMMjYyLjA0NC00Mi4yMzl6IE0xMjUuOTksMTYxLjg4DQoJYzExLjQ4OC0yMi4yNjEsMzIuNzA3LTM4LjY3LDU4LjA0My00My41OTNsMjMuOTItMTY4LjE1M2MtMi42NDMtMC4wODMtNS4yOS0wLjEzOS03Ljk1My0wLjEzOQ0KCWMtMTE2LjY1MiwwLTIxNC42MzksNzkuODk4LTI0Mi4yMzUsMTg3Ljk1M0wxMjUuOTksMTYxLjg4eiBNMTYxLjg4MywyNzQuMDA4Yy0yMi4yNTktMTEuNDg5LTM4LjY3LTMyLjcxLTQzLjU5Mi01OC4wNDUNCglsLTE2OC4xNTItMjMuOTJjLTAuMDgzLDIuNjQzLTAuMTM5LDUuMjkzLTAuMTM5LDcuOTU1YzAsMTE2LjY0OCw3OS44OTgsMjE0LjYzNywxODcuOTUyLDI0Mi4yMzNMMTYxLjg4MywyNzQuMDA4eiBNMjc0LjAxLDIzOC4xMTMNCgljLTExLjQ5LDIyLjI2MS0zMi43MDcsMzguNjY5LTU4LjA0Niw0My41OTNsLTIzLjkxOSwxNjguMTU4YzIuNjQzLDAuMDgzLDUuMjkyLDAuMTQsNy45NTQsMC4xNA0KCWMxMTYuNjUzLDAsMjE0LjY0LTc5LjkwMSwyNDIuMjMyLTE4Ny45NTVMMjc0LjAxLDIzOC4xMTN6Ii8+DQo8L3N2Zz4NCg=='
|
||||
tags:
|
||||
- source
|
||||
- steamcmd
|
||||
features:
|
||||
- gsl_token
|
||||
- steam_disk_space
|
||||
docker_images:
|
||||
Source: 'ghcr.io/pelican-eggs/games:source'
|
||||
file_denylist: { }
|
||||
startup_commands:
|
||||
Default: './srcds_run -game tf -console -port {{SERVER_PORT}} +map {{SRCDS_MAP}} +ip 0.0.0.0 -strictportbind -norestart +sv_setsteamaccount {{STEAM_ACC}}'
|
||||
config:
|
||||
files: { }
|
||||
startup:
|
||||
done: 'gameserver Steam ID'
|
||||
logs: { }
|
||||
stop: quit
|
||||
scripts:
|
||||
installation:
|
||||
script: |-
|
||||
#!/bin/bash
|
||||
# steamcmd Base Installation Script
|
||||
#
|
||||
# Server Files: /mnt/server
|
||||
# Image to install with is 'debian:buster-slim'
|
||||
|
||||
##
|
||||
#
|
||||
# Variables
|
||||
# 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.
|
||||
# WINDOWS_INSTALL - if it's a windows server you want to install set to 1
|
||||
# SRCDS_APPID - steam app id ffound here - https://developer.valvesoftware.com/wiki/Dedicated_Servers_List
|
||||
# EXTRA_FLAGS - when a server has extra glas for things like beta installs or updates.
|
||||
#
|
||||
##
|
||||
|
||||
## just in case someone removed the defaults.
|
||||
if [ "${STEAM_USER}" == "" ]; then
|
||||
echo -e "steam user is not set.
|
||||
"
|
||||
echo -e "Using anonymous user.
|
||||
"
|
||||
STEAM_USER=anonymous
|
||||
STEAM_PASS=""
|
||||
STEAM_AUTH=""
|
||||
else
|
||||
echo -e "user set to ${STEAM_USER}"
|
||||
fi
|
||||
|
||||
## download and install steamcmd
|
||||
cd /tmp
|
||||
mkdir -p /mnt/server/steamcmd
|
||||
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
|
||||
tar -xzvf steamcmd.tar.gz -C /mnt/server/steamcmd
|
||||
mkdir -p /mnt/server/steamapps # Fix steamcmd disk write error when this folder is missing
|
||||
cd /mnt/server/steamcmd
|
||||
|
||||
# SteamCMD fails otherwise for some reason, even running as root.
|
||||
# This is changed at the end of the install process anyways.
|
||||
chown -R root:root /mnt
|
||||
export HOME=/mnt/server
|
||||
|
||||
## install game using steamcmd
|
||||
./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} ${EXTRA_FLAGS} validate +quit ## other flags may be needed depending on install. looking at you cs 1.6
|
||||
|
||||
## set up 32 bit libraries
|
||||
mkdir -p /mnt/server/.steam/sdk32
|
||||
cp -v linux32/steamclient.so ../.steam/sdk32/steamclient.so
|
||||
|
||||
## set up 64 bit libraries
|
||||
mkdir -p /mnt/server/.steam/sdk64
|
||||
cp -v linux64/steamclient.so ../.steam/sdk64/steamclient.so
|
||||
container: 'ghcr.io/pelican-eggs/installers:debian'
|
||||
entrypoint: bash
|
||||
variables:
|
||||
-
|
||||
name: 'Default Map'
|
||||
description: 'The default map to use when starting the server.'
|
||||
env_variable: SRCDS_MAP
|
||||
default_value: cp_dustbowl
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- 'regex:/^(\w{1,20})$/'
|
||||
sort: 2
|
||||
-
|
||||
name: 'Game ID'
|
||||
description: 'The ID corresponding to the game to download and run using SRCDS.'
|
||||
env_variable: SRCDS_APPID
|
||||
default_value: 232250
|
||||
user_viewable: true
|
||||
user_editable: false
|
||||
rules:
|
||||
- required
|
||||
- 'in:232250'
|
||||
sort: 1
|
||||
-
|
||||
name: Steam
|
||||
description: |-
|
||||
The Steam Game Server Login Token to display servers publicly. Generate one at
|
||||
https://steamcommunity.com/dev/managegameservers
|
||||
env_variable: STEAM_ACC
|
||||
default_value: ''
|
||||
user_viewable: true
|
||||
user_editable: true
|
||||
rules:
|
||||
- required
|
||||
- string
|
||||
- alpha_num
|
||||
- 'size:32'
|
||||
sort: 3
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user