SourceCoop 是一个面向多人 Source 引擎游戏(如《黑山》)的协作型纯服务端模组,能让玩家在单人战役或地图中共同游玩。此 Egg 目前仅支持《黑山》官方地图,但可轻松修改以支持更多地图(详情请参阅 Egg 的 README 文件)。
预设配置详情
SourceCoop
蛋壳作者/贡献者
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tr>
<td align="center">
<a href="https://github.com/redthirten">
<img src="https://avatars.githubusercontent.com/u/4533989" width="50px;" alt=""/><br /><sub><b>Red-Thirten</b></sub>
</a>
<br />
<a href="https://github.com/pelican-eggs/games-steamcmd/commits?author=redthirten" title="代码">💻</a>
<a href="https://github.com/pelican-eggs/games-steamcmd/commits?author=redthirten" title="维护">🔨</a>
</td>
</tr>
</table>
<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->
服务器描述
来自他们的 Github:
SourceCoop 是一个面向多人 Source 引擎游戏(如 Black Mesa)的协作型服务端模组,允许玩家在单人战役或地图中共同游玩。
[!IMPORTANT]
此蛋壳 仅 支持官方 Black Mesa 地图,但可轻松修改以支持自定义 BM 地图(详见 手动配置主题)。
未来可能为 SourceCoop 和此蛋壳添加对其他 Source 引擎游戏(如 HL2)的支持,但目前 Black Mesa 是唯一正式支持的游戏。
蛋壳功能
- 通过启动变量配置基本服务器设置,包括:
- 服务器名称
- 最大玩家数
- 服务器密码
- 注意:客户端加入前可能需要在控制台输入
password "<your_password>"。
- 注意:客户端加入前可能需要在控制台输入
- 起始地图
- 启用友军伤害
- 通过 "[高级] 启用
mod_forcetouchdata" 启动变量修复某些地图在 Linux 上可能崩溃的问题。- 详见 SourceCoop 问题 #121。
- 精细配置 SourceCoop 及其依赖项的版本/构建下载(在 SourceCoop 更新时很有用)。
安装/系统要求
| 最低配置 | 推荐配置 | |
|---|---|---|
| 处理器 | 近期 x86/64 (AMD/Intel) 处理器,不支持 ARM。 | ---- |
| 内存 | 512 MiB | 2048-4096 MiB |
| 存储 | 29696 MiB | 32768 MiB |
| 游戏所有权 | 完全不需要。 | ---- |
服务器端口
- 默认服务器端口如下,但可自由更改。
- RCON 将共享游戏端口,仅在服务器所有者启用/使用 RCON 时需要。
| 端口 | 默认值 | 协议 | 必需 |
|---|---|---|---|
| 游戏 | 27015 | UDP | 是 |
| RCON | (与游戏端口相同) | TCP | 否 |
手动配置主题
以下是蛋壳未自动处理的手动配置流程相关主题,可能对服务器所有者有用:
额外配置/附加组件/插件
这些内容在其 Github 中有最佳文档说明:
自定义地图
如上所述,此蛋壳仅正式支持官方 Black Mesa 地图。但可通过将蛋壳的"起始地图"启动变量的输入规则修改为仅 required|string 来加载自定义地图。这将允许输入自定义地图名称。此处链接 列出了当前 SourceCoop 支持的自定义地图。
不同游戏/构建
如上所述,此蛋壳仅正式支持 Black Mesa 游戏。但可通过 "[高级] SourceCoop 发布构建标签" 启动变量安装支持不同游戏的 SourceCoop 构建。此标签应与发布资源名称中的文本匹配。不过,这需要对蛋壳进行大量手动修改才能生效。
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/steamcmd:debian
./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
| 变量名 | 变量 | 描述 | 默认值 | 规则 | 可查看 | 可编辑 |
|---|---|---|---|---|---|---|
| 服务器名称 | SERVER_NAME |
服务器列表中显示的服务器名称。 | Black Mesa: Coop |
required|string|max:128
必填 字符串 最大 128
|
||
| 最大玩家数 | MAX_PLAYERS |
你的游戏服务器允许的最大玩家数量。 | 10 |
required|integer|min:1|max:128
必填 整数 最大 128 最小 1
|
||
| 服务器密码 | SERVER_PASSWORD |
加入服务器需要密码。留空则无需密码。 | |
nullable|string
可选 字符串
|
||
| 起始地图 | STARTING_MAP |
服务器启动时加载的地图名称。关于黑山基地地图名称的指南,请使用以下链接:https://steamcommunity.com/sharedfiles/filedetails/?id=1920599249 | bm_c0a0a |
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
必填 字符串 选项: 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
|
||
| 启用友军伤害 | FRIENDLY_FIRE |
(1 启用 | 0 禁用) | 0 |
boolean
布尔
|
||
| [高级] 启用 `mod_forcetouchdata` | MOD_FORCETOUCHDATA |
启用地图数据预缓存(例如模型等)。禁用此选项可能解决某些地图(如 `bm_c4a4a` - Nihilanth)上的崩溃/卡死问题,但可能导致其他地图出现性能问题。 | 1 |
boolean
布尔
|
||
| [高级] Source Engine 专用服务器应用 ID | SRCDS_APPID |
用于安装和更新的 Steam 应用 ID。通常无需更改。(黑山基地专用服务器 = 346680 | 半条命2:死亡竞赛专用服务器 = 232370) | 346680 |
required|integer|in:346680,232370
必填 整数 选项: 346680,232370
|
||
| [高级] 更新黑山基地专用服务器 | AUTO_UPDATE |
启动时检查黑山基地专用服务器更新,并在必要时进行更新。此功能默认关闭,因为黑山基地服务器的更新通常也需要同步更新SourceCoop(这需要重新安装服务器)。SourceCoop的更新可能还需要更新Metamod和SourceMod(详见相关设置)。注意:已更新的客户端可能无法加入未更新的服务器。(1 启用 | 0 禁用) | 0 |
boolean
布尔
|
||
| [高级] SourceCoop 发布版本标签 | VERSION |
在安装/重新安装期间,从 https://github.com/ampreeT/SourceCoop/releases 下载哪个 SourceCoop 版本(基于标签)。注意:如果使用 `latest`,请确保已指定推荐的 Metamod 和 SourceMod 构建版本(有关更多详细信息,请参阅这些设置)。 | latest |
required|string
必填 字符串
|
||
| [高级] SourceCoop 发布构建标签 | MATCH |
在安装/重新安装期间,从 https://github.com/ampreeT/SourceCoop/releases 下载哪个 SourceCoop 构建版本(基于发布资源中的关键词)。注意:虽然某些 SourceCoop 版本支持 `hl2mp`(半条命2:死亡竞赛),但目前仅官方支持 `bms`(黑山)。 | bms |
required|string|in:bms,hl2mp
必填 字符串 选项: bms,hl2mp
|
||
| [高级] Metamod:Source 构建 | MMS_BUILD |
安装/重新安装期间下载哪个 Metamod:Source 1.12 构建版本号。如果 SourceCoop 更新可能需要更改,但其他情况下很少需要更改。请参考以下链接获取最新推荐构建版本:https://github.com/ampreeT/SourceCoop?tab=readme-ov-file#-manual-installation | 1219 |
required|integer|min:1131
必填 整数 最小 1131
|
||
| [高级] SourceMod 构建 | SM_BUILD |
安装/重新安装期间要下载的 SourceMod 1.12 构建版本号。如果 SourceCoop 更新可能需要更改,但通常很少需要更改。请参考以下链接获取最新推荐的构建版本:https://github.com/ampreeT/SourceCoop?tab=readme-ov-file#-manual-installation | 7163 |
required|integer|min:6940
必填 整数 最小 6940
|
||
| [主机] 删除未使用的纹理文件 | DELETE_UNUSED_TEXTURES |
在服务器上,需要的是材质文件而非纹理文件。若启用此设置,未使用的纹理文件将在被SteamCMD下载后删除,以节省约9GB磁盘空间。注意:若启用了"[高级] 更新黑山基地专用服务器",这些文件可能会被SteamCMD重新下载。(1 启用 | 0 禁用) | 1 |
boolean
布尔
|
registry.cn-shanghai.aliyuncs.com/pterodactyl-images/installers:debian
/bin/bash
#!/bin/bash
## File: Pterodactyl SourceCoop Egg - egg-pterodactyl-source-coop.json
## Authors: David Wolfe (Red-Thirten)
## Date: 2025/06/17
## License: MIT License
## Image to install with is 'registry.cn-shanghai.aliyuncs.com/pterodactyl-images/installers:debian'
# Download and install SteamCMD
export HOME=/mnt/server
cd /tmp
mkdir -p $HOME/steamcmd $HOME/steamapps
curl -sSL -o steamcmd.tar.gz https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
tar -xzvf steamcmd.tar.gz -C $HOME/steamcmd
cd $HOME/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
## Install/Verify game server using SteamCMD
if [[ "${STEAM_USER}" == "" ]] || [[ "${STEAM_PASS}" == "" ]]; then
echo -e "[SteamCMD] Steam user is not set. Using anonymous user."
STEAM_USER=anonymous
STEAM_PASS=""
STEAM_AUTH=""
fi
./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
# Set up 32 and 64 bit libraries
mkdir -p $HOME/.steam/sdk{32,64}
cp -v linux32/steamclient.so $HOME/.steam/sdk32/steamclient.so
cp -v linux64/steamclient.so $HOME/.steam/sdk64/steamclient.so
# Delete unused texture files, if enabled
if [[ "${DELETE_UNUSED_TEXTURES}" == "1" ]]; then
echo -e "Deleting unused texture files..."
rm $HOME/bms/bms_textures*
rm $HOME/hl2/hl2_textures*
fi
## Install Metamod:Source
echo -e "Installing Metamod:Source (1.12.0-git${MMS_BUILD})..."
cd /tmp
curl -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
tar -xzvf mmsource-1.12.0-git${MMS_BUILD}-linux.tar.gz -C $HOME/bms
## Install SourceMod
echo -e "Installing SourceMod (1.12.0-git${SM_BUILD})..."
cd /tmp
curl -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
tar -xzvf sourcemod-1.12.0-git${SM_BUILD}-linux.tar.gz -C $HOME/bms
## Install SourceCoop
echo -e "Installing SourceCoop (${VERSION}-${MATCH})..."
cd /tmp
# this is a simple script to use the github API for release versions.
# this requires the egg has a variable for GITHUB_PACKAGE, VERSION and MATCH (match is to match the filename in some way)
# this supports using oauth/personal access tokens via GITHUB_USER and GITHUB_OAUTH_TOKEN (both are required.)
# if you are getting hit with GitHub API limit issues then you need to have the user and token set.
GITHUB_PACKAGE="ampreeT/SourceCoop"
if [ -z "${GITHUB_USER}" ] && [ -z "${GITHUB_OAUTH_TOKEN}" ] ; then
echo -e "using anon api call"
else
echo -e "user and oauth token set"
alias curl='curl -u ${GITHUB_USER}:${GITHUB_OAUTH_TOKEN} '
fi
# get release info and download links
LATEST_JSON=$(curl --silent "https://api.github.com/repos/${GITHUB_PACKAGE}/releases/latest")
RELEASES=$(curl --silent "https://api.github.com/repos/${GITHUB_PACKAGE}/releases")
if [ -z "${VERSION}" ] || [ "${VERSION}" == "latest" ]; then
DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url | grep -i ${MATCH})
else
VERSION_CHECK=$(echo ${RELEASES} | jq -r --arg VERSION "${VERSION}" '.[] | select(.tag_name==$VERSION) | .tag_name')
if [ "${VERSION}" == "${VERSION_CHECK}" ]; then
DOWNLOAD_URL=$(echo ${RELEASES} | jq -r --arg VERSION "${VERSION}" '.[] | select(.tag_name==$VERSION) | .assets[].browser_download_url' | grep -i ${MATCH})
else
echo -e "defaulting to latest release"
DOWNLOAD_URL=$(echo ${LATEST_JSON} | jq .assets | jq -r .[].browser_download_url)
fi
fi
curl -L ${DOWNLOAD_URL} -o sourcecoop.zip
unzip -o sourcecoop.zip -d $HOME/bms
## Create/Adjust CFG files
cd $HOME/bms/cfg
# Create custom `server.cfg` with ideal default settings
echo -e 'Creating custom "server.cfg" configuration file...'
rm -f server.cfg
cat > server.cfg << EOF
// Black Mesa server.cfg file
hostname "Black Mesa: Coop"
sv_password ""
// provides lag-free noblock, shows teammates as friendly
// and puts an arrow above their head (srccoop handles team switching)
mp_teamplay 1
// set 1 if you hate your friends
mp_friendlyfire 0
// prevents the match from ending when a player has a high enough score
mp_fraglimit 0
// setting 1 disables sprinting
sv_always_run 0
// disables map timelimit
mp_timelimit 0
// 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.
// It is generally recommended to keep this commented, because issues may arise if the server cycles past the last map in the campaign.
//mp_mapcycle_empty_timeout_seconds 3600
// Uncomment to loop back to the first map after finishing a campaign
// Leave commented to use nextmap (mapcycle) instead
sourcecoop_homemap "bm_c0a0a"
// Enables pre-caching of map data (eg. models, etc.)
// Disabling this may resolve crashing/hanging on certain maps (namely bm_c4a4a), but may cause performance issues on other maps.
mod_forcetouchdata 1
rcon_password "" // disable rcon
sv_tags "custom, coop, sourcecoop"
sv_cheats 0
sv_alltalk 1
EOF
# Empty the default `autoexec.cfg` as it does nothing for the server
> "autoexec.cfg"
# Create an empty `userconfig.cfg` to suppress console warnings
> "userconfig.cfg"
## Check for successful installation.
cd $HOME/bms/addons
if [ -d "metamod" ] && [ -d "sourcemod" ] && [ -f "sourcemod/plugins/srccoop.smx" ]; then
echo -e "
SourceCoop Dedicated Server successfully installed!
"
else
echo -e "
[Error] One or more SourceCoop dependancies failed to install!"
echo -e "\tTry checking your [Advanced] startup settings and/or reinstalling the server again.
"
exit 1
fi
{
"_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"
}
]
}附属文件
暂无附属文件
提交历史
Fork 关系
查看关系图暂无 Fork,成为第一个 Fork 的人吧!