SourceCoop v1.0.2

飒爽师叔 · 2026-06-30 10:17

更新日志

[AI翻译] 描述、说明、JSON描述、变量

版本内容

{
    "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PTERODACTYL PANEL - PTERODACTYL.IO",
    "meta": {
        "version": "PTDL_v2",
        "update_url": "https://eggs.pterodactyl.top/eggs/110/download/egg-sourcecoop.json"
    },
    "exported_at": "2025-06-29T12:31:14-07:00",
    "name": "SourceCoop",
    "author": "red_thirten@yahoo.com",
    "description": "SourceCoop 是一个面向多人 Source 引擎游戏(如《黑山》)的协作型纯服务端模组,能让玩家在单人战役或地图中共同游玩。此 Egg 目前仅支持《黑山》官方地图,但可轻松修改以支持更多地图(详情请参阅 Egg 的 README 文件)。",
    "features": [
        "steam_disk_space"
    ],
    "docker_images": {
        "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/steamcmd:debian": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/steamcmd:debian"
    },
    "file_denylist": [],
    "startup": "./srcds_run -console -game bms -secure -ip 0.0.0.0 -port {{SERVER_PORT}} +maxplayers {{MAX_PLAYERS}} +mp_teamplay 1 +exec server.cfg +map {{STARTING_MAP}} -strictportbind -norestart",
    "config": {
        "files": "{\r\n    \"bms/cfg/server.cfg\": {\r\n        \"parser\": \"file\",\r\n        \"find\": {\r\n            \"hostname\": \"hostname \\\"{{server.build.env.SERVER_NAME}}\\\"\",\r\n            \"sv_password\": \"sv_password \\\"{{server.build.env.SERVER_PASSWORD}}\\\"\",\r\n            \"mp_friendlyfire\": \"mp_friendlyfire {{server.build.env.FRIENDLY_FIRE}}\",\r\n            \"mod_forcetouchdata\": \"mod_forcetouchdata {{server.build.env.MOD_FORCETOUCHDATA}}\"\r\n        }\r\n    }\r\n}",
        "startup": "{\r\n    \"done\": \"gameserver Steam ID\"\r\n}",
        "logs": "{}",
        "stop": "^C"
    },
    "scripts": {
        "installation": {
            "script": "#!/bin/bash\r\n\r\n## File: Pterodactyl SourceCoop Egg - egg-pterodactyl-source-coop.json\r\n## Authors: David Wolfe (Red-Thirten)\r\n## Date: 2025/06/17\r\n## License: MIT License\r\n## Image to install with is 'registry.cn-shanghai.aliyuncs.com/pterodactyl-images/installers:debian'\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/Verify game server using SteamCMD\r\nif [[ \"${STEAM_USER}\" == \"\" ]] || [[ \"${STEAM_PASS}\" == \"\" ]]; then\r\n    echo -e \"[SteamCMD] Steam user is not set. Using anonymous user.\"\r\n    STEAM_USER=anonymous\r\n    STEAM_PASS=\"\"\r\n    STEAM_AUTH=\"\"\r\nfi\r\n./steamcmd.sh +force_install_dir $HOME +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\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# Delete unused texture files, if enabled\r\nif [[ \"${DELETE_UNUSED_TEXTURES}\" == \"1\" ]]; then\r\n    echo -e \"Deleting unused texture files...\"\r\n    rm $HOME/bms/bms_textures*\r\n    rm $HOME/hl2/hl2_textures*\r\nfi\r\n\r\n## Install Metamod:Source\r\necho -e \"Installing Metamod:Source (1.12.0-git${MMS_BUILD})...\"\r\ncd /tmp\r\ncurl -L https://mms.alliedmods.net/mmsdrop/1.12/mmsource-1.12.0-git${MMS_BUILD}-linux.tar.gz -o mmsource-1.12.0-git${MMS_BUILD}-linux.tar.gz\r\ntar -xzvf mmsource-1.12.0-git${MMS_BUILD}-linux.tar.gz -C $HOME/bms\r\n\r\n## Install SourceMod\r\necho -e \"Installing SourceMod (1.12.0-git${SM_BUILD})...\"\r\ncd /tmp\r\ncurl -L https://sm.alliedmods.net/smdrop/1.12/sourcemod-1.12.0-git${SM_BUILD}-linux.tar.gz -o sourcemod-1.12.0-git${SM_BUILD}-linux.tar.gz\r\ntar -xzvf sourcemod-1.12.0-git${SM_BUILD}-linux.tar.gz -C $HOME/bms\r\n\r\n## Install SourceCoop\r\necho -e \"Installing SourceCoop (${VERSION}-${MATCH})...\"\r\ncd /tmp\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# this supports using oauth/personal access tokens via GITHUB_USER and GITHUB_OAUTH_TOKEN (both are required.)\r\n# if you are getting hit with GitHub API limit issues then you need to have the user and token set.\r\nGITHUB_PACKAGE=\"ampreeT/SourceCoop\"\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\ncurl -L ${DOWNLOAD_URL} -o sourcecoop.zip\r\nunzip -o sourcecoop.zip -d $HOME/bms\r\n\r\n## Create/Adjust CFG files\r\ncd $HOME/bms/cfg\r\n\r\n# Create custom `server.cfg` with ideal default settings\r\necho -e 'Creating custom \"server.cfg\" configuration file...'\r\nrm -f server.cfg\r\ncat > server.cfg << EOF\r\n// Black Mesa server.cfg file\r\nhostname \"Black Mesa: Coop\"\r\nsv_password \"\"\r\n\r\n// provides lag-free noblock, shows teammates as friendly\r\n// and puts an arrow above their head (srccoop handles team switching)\r\nmp_teamplay 1\r\n\r\n// set 1 if you hate your friends\r\nmp_friendlyfire 0\r\n\r\n// prevents the match from ending when a player has a high enough score\r\nmp_fraglimit 0\r\n\r\n// setting 1 disables sprinting\r\nsv_always_run 0\r\n\r\n// disables map timelimit\r\nmp_timelimit 0\r\n\r\n// If uncommented and nonzero, server will cycle to the next map if it has been empty on the current map for this set number of seconds.\r\n// It is generally recommended to keep this commented, because issues may arise if the server cycles past the last map in the campaign.\r\n//mp_mapcycle_empty_timeout_seconds 3600\r\n\r\n// Uncomment to loop back to the first map after finishing a campaign\r\n// Leave commented to use nextmap (mapcycle) instead\r\nsourcecoop_homemap \"bm_c0a0a\"\r\n\r\n// Enables pre-caching of map data (eg. models, etc.)\r\n// Disabling this may resolve crashing/hanging on certain maps (namely bm_c4a4a), but may cause performance issues on other maps.\r\nmod_forcetouchdata 1\r\n\r\nrcon_password \"\" // disable rcon\r\nsv_tags \"custom, coop, sourcecoop\"\r\nsv_cheats 0\r\nsv_alltalk 1\r\nEOF\r\n\r\n# Empty the default `autoexec.cfg` as it does nothing for the server\r\n> \"autoexec.cfg\"\r\n\r\n# Create an empty `userconfig.cfg` to suppress console warnings\r\n> \"userconfig.cfg\"\r\n\r\n## Check for successful installation.\r\ncd $HOME/bms/addons\r\nif [ -d \"metamod\" ] && [ -d \"sourcemod\" ] && [ -f \"sourcemod/plugins/srccoop.smx\" ]; then\r\n    echo -e \"\\nSourceCoop Dedicated Server successfully installed!\\n\"\r\nelse\r\n    echo -e \"\\n\\n[Error] One or more SourceCoop dependancies failed to install!\"\r\n    echo -e \"\\tTry checking your [Advanced] startup settings and/or reinstalling the server again.\\n\"\r\n    exit 1\r\nfi",
            "container": "registry.cn-shanghai.aliyuncs.com/pterodactyl-images/installers:debian",
            "entrypoint": "/bin/bash"
        }
    },
    "variables": [
        {
            "name": "服务器名称",
            "description": "服务器列表中显示的服务器名称。",
            "env_variable": "SERVER_NAME",
            "default_value": "Black Mesa: Coop",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string|max:128",
            "field_type": "text"
        },
        {
            "name": "最大玩家数",
            "description": "你的游戏服务器允许的最大玩家数量。",
            "env_variable": "MAX_PLAYERS",
            "default_value": "10",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|integer|min:1|max:128",
            "field_type": "text"
        },
        {
            "name": "服务器密码",
            "description": "加入服务器需要密码。留空则无需密码。",
            "env_variable": "SERVER_PASSWORD",
            "default_value": "",
            "user_viewable": true,
            "user_editable": true,
            "rules": "nullable|string",
            "field_type": "text"
        },
        {
            "name": "起始地图",
            "description": "服务器启动时加载的地图名称。关于黑山基地地图名称的指南,请使用以下链接:https://steamcommunity.com/sharedfiles/filedetails/?id=1920599249",
            "env_variable": "STARTING_MAP",
            "default_value": "bm_c0a0a",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string|in:bm_c0a0a,bm_c0a0b,bm_c0a0c,bm_c1a0a,bm_c1a0b,bm_c1a1a,bm_c1a1b,bm_c1a1c,bm_c1a1d,bm_c1a1e,bm_c1a2a,bm_c1a2b,bm_c1a2c,bm_c1a3a,bm_c1a3b,bm_c1a3c,bm_c1a4a,bm_c1a4b,bm_c1a4c,bm_c1a4d,bm_c1a4e,bm_c2a1a,bm_c2a1b,bm_c2a2a,bm_c2a2b,bm_c2a2c,bm_c2a2a,bm_c2a2a1,bm_c2a2a2,bm_c2a2b,bm_c2a2b1,bm_c2a2b2,bm_c2a2c,bm_c2a3a,bm_c2a3b,bm_c2a3c,bm_c2a4a,bm_c2a4b,bm_c2a4c,bm_c2a4e,bm_c2a4f,bm_c2a4g,bm_c2a4h,bm_c2a5a,bm_c2a5b,bm_c2a5c,bm_c2a5d,bm_c2a5e,bm_c2a5f,bm_c2a5g,bm_c2a5h,bm_c2a5i,bm_c3a1a,bm_c3a1b,bm_c3a2a,bm_c3a2b,bm_c3a2c,bm_c3a2d,bm_c3a2e,bm_c3a2f,bm_c3a2g,bm_c3a2h,bm_c3a2i,bm_c4a1a,bm_c4a1a1,bm_c4a1b,bm_c4a1b1,bm_c4a1c,bm_c4a1c1,bm_c4a2a,bm_c4a2b,bm_c4a2c,bm_c4a3a,bm_c4a3a1,bm_c4a3b,bm_c4a3b1,bm_c4a3b2,bm_c4a3c,bm_c4a3c1,bm_c4a3c2,bm_c4a3d,bm_c4a3d1,bm_c4a4a,bm_c5a1,credits",
            "field_type": "text"
        },
        {
            "name": "启用友军伤害",
            "description": "(1 启用 | 0 禁用)",
            "env_variable": "FRIENDLY_FIRE",
            "default_value": "0",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean",
            "field_type": "text"
        },
        {
            "name": "[高级] 启用 `mod_forcetouchdata`",
            "description": "启用地图数据预缓存(例如模型等)。禁用此选项可能解决某些地图(如 `bm_c4a4a` - Nihilanth)上的崩溃/卡死问题,但可能导致其他地图出现性能问题。",
            "env_variable": "MOD_FORCETOUCHDATA",
            "default_value": "1",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean",
            "field_type": "text"
        },
        {
            "name": "[高级] Source Engine 专用服务器应用 ID",
            "description": "用于安装和更新的 Steam 应用 ID。通常无需更改。(黑山基地专用服务器 = 346680 | 半条命2:死亡竞赛专用服务器 = 232370)",
            "env_variable": "SRCDS_APPID",
            "default_value": "346680",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|integer|in:346680,232370",
            "field_type": "text"
        },
        {
            "name": "[高级] 更新黑山基地专用服务器",
            "description": "启动时检查黑山基地专用服务器更新,并在必要时进行更新。此功能默认关闭,因为黑山基地服务器的更新通常也需要同步更新SourceCoop(这需要重新安装服务器)。SourceCoop的更新可能还需要更新Metamod和SourceMod(详见相关设置)。注意:已更新的客户端可能无法加入未更新的服务器。(1 启用 | 0 禁用)",
            "env_variable": "AUTO_UPDATE",
            "default_value": "0",
            "user_viewable": true,
            "user_editable": true,
            "rules": "boolean",
            "field_type": "text"
        },
        {
            "name": "[高级] SourceCoop 发布版本标签",
            "description": "在安装/重新安装期间,从 https://github.com/ampreeT/SourceCoop/releases 下载哪个 SourceCoop 版本(基于标签)。注意:如果使用 `latest`,请确保已指定推荐的 Metamod 和 SourceMod 构建版本(有关更多详细信息,请参阅这些设置)。",
            "env_variable": "VERSION",
            "default_value": "latest",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string",
            "field_type": "text"
        },
        {
            "name": "[高级] SourceCoop 发布构建标签",
            "description": "在安装/重新安装期间,从 https://github.com/ampreeT/SourceCoop/releases 下载哪个 SourceCoop 构建版本(基于发布资源中的关键词)。注意:虽然某些 SourceCoop 版本支持 `hl2mp`(半条命2:死亡竞赛),但目前仅官方支持 `bms`(黑山)。",
            "env_variable": "MATCH",
            "default_value": "bms",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|string|in:bms,hl2mp",
            "field_type": "text"
        },
        {
            "name": "[高级] Metamod:Source 构建",
            "description": "安装/重新安装期间下载哪个 Metamod:Source 1.12 构建版本号。如果 SourceCoop 更新可能需要更改,但其他情况下很少需要更改。请参考以下链接获取最新推荐构建版本:https://github.com/ampreeT/SourceCoop?tab=readme-ov-file#-manual-installation",
            "env_variable": "MMS_BUILD",
            "default_value": "1219",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|integer|min:1131",
            "field_type": "text"
        },
        {
            "name": "[高级] SourceMod 构建",
            "description": "安装/重新安装期间要下载的 SourceMod 1.12 构建版本号。如果 SourceCoop 更新可能需要更改,但通常很少需要更改。请参考以下链接获取最新推荐的构建版本:https://github.com/ampreeT/SourceCoop?tab=readme-ov-file#-manual-installation",
            "env_variable": "SM_BUILD",
            "default_value": "7163",
            "user_viewable": true,
            "user_editable": true,
            "rules": "required|integer|min:6940",
            "field_type": "text"
        },
        {
            "name": "[主机] 删除未使用的纹理文件",
            "description": "在服务器上,需要的是材质文件而非纹理文件。若启用此设置,未使用的纹理文件将在被SteamCMD下载后删除,以节省约9GB磁盘空间。注意:若启用了\"[高级] 更新黑山基地专用服务器\",这些文件可能会被SteamCMD重新下载。(1 启用 | 0 禁用)",
            "env_variable": "DELETE_UNUSED_TEXTURES",
            "default_value": "1",
            "user_viewable": false,
            "user_editable": false,
            "rules": "boolean",
            "field_type": "text"
        }
    ]
}