{
    "_comment": "Pterodactyl Arma 3 Egg ~ David Wolfe (Red-Thirten) ~ 2022-05-22",
    "meta": {
        "version": "PTDL_v1",
        "update_url": null
    },
    "name": "Arma 3",
    "author": "rehlmgaming@gmail.com",
    "description": "Experience true combat gameplay in a massive military sandbox. Deploying a wide variety of single and multiplayer content, over 20 vehicles and 40 weapons, and limitless opportunities for content creation, this is the PC's premier military game. Authentic, diverse, open - Arma 3 sends you to war.",
    "features": [
        "steam_disk_space"
    ],
    "images": [
        "ghcr.io\/parkervcp\/games:arma3"
    ],
    "file_denylist": [],
    "startup": ".\/{{SERVER_BINARY}} -ip=0.0.0.0 -port={{SERVER_PORT}} -profiles=.\/serverprofile -bepath=.\/ -cfg=basic.cfg -config=server.cfg -mod=\\\"{{CLIENT_MODS}}\\\" -serverMod=\\\"{{SERVERMODS}}\\\" \\\"{{STARTUP_PARAMS}}\\\"",
    "config": {
        "files": "{\r\n    \"server.cfg\": {\r\n        \"parser\": \"file\",\r\n        \"find\": {\r\n            \"password=\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n            \"\/\/password=\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n            \"password =\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n            \"\/\/password =\": \"password = \\\"{{env.SERVER_PASSWORD}}\\\";\",\r\n            \"maxPlayers\": \"maxPlayers = {{env.MAX_PLAYERS}};\",\r\n            \"headlessClients\": \"headlessClients[] = { \\\"127.0.0.1\\\" };\",\r\n            \"localClient\": \"localClient[] = { \\\"127.0.0.1\\\" };\"\r\n        }\r\n    }\r\n}",
        "startup": "{\r\n    \"done\": \"Host identity created.\"\r\n}",
        "logs": "{}",
        "stop": "^C"
    },
    "scripts": {
        "installation": {
            "script": "#!\/bin\/bash\r\n\r\n## File: Pterodactyl Arma 3 Egg - egg-arma3.json\r\n## Author: David Wolfe (Red-Thirten)\r\n## Date: 2022\/05\/22\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# Check for valid Steam credentials to download Arma 3 with (requires valid Steam account)\r\nif [[ \"${STEAM_USER}\" == \"\" ]] || [[ \"${STEAM_USER}\" == \"anonymous\" ]] || [[ \"${STEAM_PASS}\" == \"\" ]]; then\r\n    echo -e \"INSTALLATION ERROR: A valid REAL Steam account is required to download the Arma 3 Dedicated Server.\"\r\n    echo -e \"\\t(\\\"anonymous\\\" account cannot be used. Game ownership is not required.)\"\r\n    exit 1\r\nfi\r\n\r\n# Download and install SteamCMD\r\ncd \/tmp\r\nmkdir -p \/mnt\/server\/steamcmd \/mnt\/server\/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 \/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 server using SteamCMD\r\n.\/steamcmd.sh +force_install_dir \/mnt\/server \"+login \\\"${STEAM_USER}\\\" \\\"${STEAM_PASS}\\\"\" +app_update ${STEAMCMD_APPID} ${STEAMCMD_EXTRA_FLAGS} validate +quit\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# Arma 3 setup\r\ncd \/mnt\/server\/\r\n[[ -f basic.cfg ]] || curl -sSLO ${BASIC_URL}\r\n[[ -f server.cfg ]] || curl -sSLO ${BASIC_URL%\/*}\/server.cfg\r\nchmod 644 basic.cfg server.cfg",
            "container": "ghcr.io\/parkervcp\/installers:debian",
            "entrypoint": "\/bin\/bash"
        }
    },
    "variables": [
        {
            "name": "[REQUIRED] Steam Username",
            "description": "Used for installation and updates. Account does not need to own Arma 3, but MUST BE a VALID Steam account (anonymous login cannot be used). For security reasons it is recommended that you create a new Steam account just for your dedicated servers. *This info is not visible to the server owner.*",
            "env_variable": "STEAM_USER",
            "default_value": "your_steam_username",
            "user_viewable": false,
            "user_editable": false,
            "rules": "required|string"
        },
        {
            "name": "[REQUIRED] Steam Password",
            "description": "Used for installation and updates. Steam Guard MUST be completely TURNED OFF for install to complete successfully. *This info is not visible to the server owner, BUT IS stored in PLAIN TEXT. It is NOT advised to use a personal account; best to use a dummy account.*",
            "env_variable": "STEAM_PASS",
            "default_value": "your_steam_password",
            "user_viewable": false,
            "user_editable": false,
            "rules": "required|string"
        },
        {
            "name": "Number of SteamCMD Retry Attempts",
            "description": "How many times SteamCMD should retry downloading a server or mod after a recoverable error. (ie. A particularly large mod like CUP or RHS download times out)",
            "env_variable": "STEAMCMD_ATTEMPTS",
            "default_value": "3",
            "user_viewable": false,
            "user_editable": false,
            "rules": "required|integer"
        },
        {
            "name": "Server Binary",
            "description": "Server binary to call on server start. (32-bit: arma3server | 64-bit: arma3server_x64)",
            "env_variable": "SERVER_BINARY",
            "default_value": "arma3server_x64",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string|in:arma3server,arma3server_x64,arma3serverprofiling,arma3serverprofiling_x64"
        },
        {
            "name": "Extra Startup Parameters",
            "description": "See https:\/\/community.bistudio.com\/wiki\/Arma_3_Startup_Parameters for more info on valid flags for this field. \"-noLogs\" is recommended to prevent console rate-limit warnings.",
            "env_variable": "STARTUP_PARAMS",
            "default_value": "-noLogs",
            "user_viewable": true,
            "user_editable": true,
            "rules": "string|nullable"
        },
        {
            "name": "Max Players",
            "description": "Maximum number of players allowed to join the server.",
            "env_variable": "MAX_PLAYERS",
            "default_value": "32",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|integer|gt:0"
        },
        {
            "name": "Server Password",
            "description": "Password required to join the server. Leave blank to have no password.",
            "env_variable": "SERVER_PASSWORD",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string"
        },
        {
            "name": "Automatic Updates",
            "description": "Quickly checks for any server or mod updates on startup, and updates if necessary. (1 Enable | 0 Disable)",
            "env_variable": "UPDATE_SERVER",
            "default_value": "1",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean"
        },
        {
            "name": "Disable Mod Downloads\/Updates",
            "description": "If the Steam account does not own the base Arma 3 game, Steam Workshop mod downloads\/updates will not work. If so, this setting allows disabling of this feature to avoid errors. (1 Disable | 0 Enable)",
            "env_variable": "DISABLE_MOD_UPDATES",
            "default_value": "0",
            "user_viewable": false,
            "user_editable": false,
            "rules": "boolean"
        },
        {
            "name": "Download Creator DLCs",
            "description": "Downloads\/Updates all the mod files required to run any CDLC during the next Automatic Update. DLCs can be enabled by adding their mod folder name to the Additional Mods startup variable. For example, add \"vn;\" to load the Prairie Fire CDLC. (1 Yes | 0 No)",
            "env_variable": "CDLC",
            "default_value": "0",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean"
        },
        {
            "name": "Modlist File (Exported from A3 Launcher)",
            "description": "Filename for an exported modlist. This file will be parsed for mod installation and loading. Upload your HTML file to the root directory (eg. \/home\/container\/modlist.html). Leave blank to disable loading mods from a modlist.",
            "env_variable": "MOD_FILE",
            "default_value": "modlist.html",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string"
        },
        {
            "name": "Additional Mods",
            "description": "A semicolon-separated list of additional mod folders to load. Useful for loading CDLCs or manually uploaded mods. This mod list will be loaded in addition to the Modlist File (if used). Any mods in this list that are in \"@workshopID\" form will also be included in Automatic Updates (if enabled). NO capital letters, spaces, or folders starting with a number! (ex. myMod;vn;@123456789;@987654321;etc;)",
            "env_variable": "MODIFICATIONS",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string"
        },
        {
            "name": "[Repair] Make Mod Files Lowercase",
            "description": "Every mod that is set to be loaded will have its folder and files changed to lowercase (to prevent errors). It is recommended to enable this for one server boot after copying a mod from a Windows machine to the server, or if mods seem to not be loading. (1 Enable | 0 Disable)",
            "env_variable": "MODS_LOWERCASE",
            "default_value": "0",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean"
        },
        {
            "name": "[Repair] Validate Server Files",
            "description": "Validates all server files when Automatic Updates is enabled. Note: This will significantly increase server startup times, so it is recommended to only enable this when needed. (1 Enable | 0 Disable)",
            "env_variable": "VALIDATE_SERVER",
            "default_value": "0",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean"
        },
        {
            "name": "[Advanced] Server-Side Only Mods",
            "description": "Mod folders to be used with the \"-serverMods\" startup option. They only run server-side and are not required by clients if \"verifySignatures\" is enabled. Any mods in this list that are in \"@workshopID\" form will also be included in Automatic Updates (if enabled). NO capital letters, spaces, or folders starting with a number! Each folder must be followed with a semicolon (ex. @123456789;@987654321;etc;)",
            "env_variable": "SERVERMODS",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string"
        },
        {
            "name": "[Advanced] Optional Client-Side Mods",
            "description": "A semicolon-separated list of optional mods to load into the keys folder, but not include in server's mod parameter. Useful for allowing clients to connect to the server with or without the mod loaded. Mods in this list must be in \"@workshopID\" form (ex. @123456789;@987654321;). These will also be included in Automatic Updates (if enabled).",
            "env_variable": "OPTIONALMODS",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string"
        },
        {
            "name": "[Advanced] Extra Flags for SteamCMD",
            "description": "[This will override \"Download Creator DLCs\" if used] Only used when checking for server updates, and typically used for grabbing beta builds. Example: -beta profiling -betapassword CautionSpecialProfilingAndTestingBranchArma3",
            "env_variable": "STEAMCMD_EXTRA_FLAGS",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string"
        },
        {
            "name": "[Advanced] Headless Clients (HC)",
            "description": "Number of Headless Clients (0 - 5) to launch parallel with the server. Be sure to set the following \"HC Connect Password\" variable if your server is password locked. PLEASE NOTE: Using a headless client is only recommended for advanced users, adds extra overhead to your permitted server resources, and is only beneficial if a properly written, HC compliant, mission file is provided. See https:\/\/community.bistudio.com\/wiki\/Arma_3:_Headless_Client for more info.",
            "env_variable": "HC_NUM",
            "default_value": "0",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|integer|between:0,5"
        },
        {
            "name": "[Advanced] HC Hide Console Output",
            "description": "Hides Headless Client console output (except for critical errors) to prevent nonessential console spam. (1 Hide | 0 Show)",
            "env_variable": "HC_HIDE",
            "default_value": "1",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean"
        },
        {
            "name": "[Advanced] Clear HC Profiles Cache on Startup",
            "description": "Deletes all profiles from the \"\/home\/container\/serverprofile\/home\" directory on startup, except for the server's main \"Player\" profile. Recommended to enable when running HCs, because the profiles are generally unused and can cause HCs to crash if they develop errors. (1 Enable | 0 Disable)",
            "env_variable": "CLEAR_CACHE",
            "default_value": "0",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean"
        },
        {
            "name": "[Advanced] Arma 3 Dedicated Server App ID",
            "description": "Used for installation and updates. Rarely needs to be changed.",
            "env_variable": "STEAMCMD_APPID",
            "default_value": "233780",
            "user_viewable": false,
            "user_editable": false,
            "rules": "required|integer"
        },
        {
            "name": "[Advanced] basic.cfg URL",
            "description": "URL to a valid Arma 3 basic.cfg file. The \"Basic\" configuration file is used during server runtime for advanced network performance tuning. Because it is a required file, this URL is used to download it during installation, or if the file is found missing during startup.",
            "env_variable": "BASIC_URL",
            "default_value": "https:\/\/raw.githubusercontent.com\/parkervcp\/eggs\/master\/game_eggs\/steamcmd_servers\/arma\/arma3\/egg-arma3-config\/basic.cfg",
            "user_viewable": false,
            "user_editable": false,
            "rules": "required|url"
        }
    ]
}