简介:Windows / Centos 系统搭建 地狱已满(NMRIH)私人服务器教程

服务器搭建篇:地狱已满服务器搭建教程-1 服务器安装篇(本文)

网络配置篇   : 地狱已满服务器搭建教程-2 网络配置篇

  • 可行性已证实:在 Win11 21H2Centos 7.5 系统,端口映射内网穿透 多方案组合搭建成功

  • 教程无任何 私货 / 后门 夹杂,请放心食用

  • 本文主要为个人自学所写,如有错误或值得改进的地方,欢迎留言指出,不胜感激

一、硬件配置推荐(可跳过)

  • 处理器 (CPU) + 运行内存

    结论:NMRIH 服务器对硬件性能要求不高,大部分情况 阿里云低配云服务器(1h2g)也能轻松支撑 8 人游玩

    当丧尸、实体数量过多时,无论是阿里云的低配服务器还是 i5-12490 都会变卡。尝试了网上多种方案优化性能配置(解除带宽上限sv_maxrate=0、修改服务器与客户端的每秒更新数、命令数等)还是无法避免
    [ 建议 ] 地图同一时间内的丧尸数量不要超过 100 (默认85)

  • 网络带宽

    结论:纯净经典 8人服 带宽至少 2M ≈ 256kb/s(经典模式,无模型下载 和 三方地图下载)

    由于每个实体的数据都需要传输给客户端,通常单人占服务器网络上行 30kb/s 左右
    据此可粗略推算出:经典模式 8 人服,大约需要 240kb/s 的上传速率才能满足正常游戏需求(前提:无下载资源需求)
    [ 举例 ]
    图为 花茶苑 - 经典3倍全跑,单人游戏网络的 IN 速率约为 80-90kb/s。按满 9 人算,则至少需要 7M 带宽才能保证每个玩家稳定游戏

  • 磁盘存储空间

    无插件,仅官方地图 和 官方模型 的经典模式服务器 占用存储空间约 7.5 GB
    占用存储空间较多的一般为地图和模型,插件占用的存储空间很少

  • 系统

    如果是个人平常使用的电脑:正常的win7、win10、win11都可以
    如果是已经淘汰的老旧电脑、性能较低的云服务器:建议选择更稳定的 Windows Server,或占用资源更少的 Linux 系统

  • 性能测试
    结论:当丧尸数在 90 左右,用户带宽占用 和 choke 就会开始上涨,超过 150 时能感觉到明显卡顿

    [ 阿里云 Centos 7 ]
         8 人经典模式,CPU 占用在 15%-35% 之间,内存占用率稳定在 35% ± 3%
    [ Window11 - i5-12490F ]
         1 人经典模式,地图 nmo_parish,在进入撤离区前的围栏门口,丧尸数量 150 左右
         In 约 70kb/s,但是 choke 达到了 85
         任务管理器显示:CPU占用 5~10%,占用内存 ≈ 210mb
         服务器后台统计:CPU占用 30~55%

二、网络环境配置

这一步是服务器能否被 互联网玩家 访问到的关键

  • 如果只在局域网内自己玩,可跳过这一步(可以先搭建服务器,最后再根据实际情况将服务器开放到互联网)
  • 如果是云服务器,一般配有公网IP,在安全组放行 UDP-27015 端口即可
  • 如果是家用网络,可能没有公网IP,可以尝试向运营商申请 或者 使用内网穿透方案
    具体教程参考另一篇文章: 地狱已满服务器搭建教程-2 网络配置篇

三、安装 NMRIH 服务器

注意:
     ① 下文路径都以 示范路径 为准! 如果你设置的路径与本文不相同,请在操作时将路径修改成自己的
     ② 路径中建议不要带有 中文、空格、特殊字符 等,避免出错
     ③ 下文 每一步 执行步骤都分 两种系统 编写,只需看与自己系统对应的部分即可

1. 准备工作

  • Windows 系统

    ① 创建独立的文件夹,用于保存 steamCMD 和 NMRIH 服务器。

    示范路径:

    rem 小贴士:md 是 cmd 创建文件夹的命令  |  rem 是 cmd 注释方法,rem 后面一整行内容会被忽略
    md D:\Game\ServerData\steamCMD
    md D:\Game\ServerData\nmrih_Server
    
  • Centos 7 系统

    ① nmrih 服务器需要 32 位库才能运行,如果你的系统是64位的发行版,需要安装额外的软件包

    yum install glibc.i686 libstdc++.i686
    

    ② 新建一个用于管理和启动服务器的用户(安全起见,不要使用 root 用户启动服务器!)

    useradd -m steam
    su steam
    

    ③ 创建独立的文件夹,用于保存 steamCMD 和 NMRIH 服务器。

    示范路径:

    mkdir /home/steam/steamCMD
    mkdir /home/steam/serverfiles
    

2. 下载 steamCMD

用途:下载/更新 NMRIH 服务器         |    点此查看 steamCMD 官方安装教程 [中文]

  • Windows 系统

    ① 下载 steamCMD 安装程序压缩包: https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip

    ② 将压缩包解压到上一步创建的 D:\Game\ServerData\steamCMD 文件夹里

    ③ 运行 steamcmd.exe 等待自动安装完成

  • Centos 7 系统
    ① 下载 steamCMD 压缩包

    wget -P /home/steam/steamCMD http://media.steampowered.com/client/steamcmd_linux.tar.gz
    

    ② 将压缩包解压到上一步创建的 /home/steam/steamCMD 文件夹里 (这步可以只解压,不运行steamCMD)

    tar -xvzf /home/steam/steamCMD/steamcmd_linux.tar.gz -C /home/steam/steamCMD
    

3. 下载 NMRIH 服务器资源

- 下载应用命令格式         :app_update <应用ID> [validate]
     - 可选参数 validate          :下载完后校验下载的服务器资源是否完整
     - NMRIH 服务器应用 id   :317670
     - 应用 ID查询地址            :地址1   |   地址2

  • Windows 系统 (在 steamcmd.exe 命令窗口中输入下列命令)

    ① 设置 NMRIH 服务器的安装目录

    force_install_dir D:\Game\ServerData\nmrih_Server
    

    ② 登录 steam 账户

    rem 注意将账户名修改成你的steam账号
    rem 输入密码时没有任何提示,一次性输完回车即可    |  登录时长取决于网络环境,耐心等待就好
    login 账号名
    

    - 也可以用匿名账户登录

    login anonymous
    

    ③ 下载 NMRIH 服务器资源(下载完成后 steamCMD 命令窗口可以关闭)

    app_update 317670 validate
    

  • Centos 7 系统

    - 输入如下命令下载 NMRIH 服务器资源(注意将 账号名密码 换成自己的)

    # 输入密码时没有任何提示,一次性输完回车即可   |  登录时长取决于网络环境,耐心等待就好
    /home/steam/steamCMD/steamcmd.sh +force_install_dir "/home/steam/serverfiles" +login 账号名 密码 +app_update 317670 validate +quit
    

    - 也可以用匿名账户登录

    /home/steam/steamCMD/steamcmd.sh +force_install_dir "/home/steam/serverfiles" +login anonymous +app_update 317670 validate +quit
    

四. 配置服务器基本信息

server.cfg

在启动服务器前,还差一个服务器配置文件,用于设置服务器服务器的名字、密码、游戏参数 等基本信息

  • Windows 系统
    - 配置文件需要放在:D:\Game\ServerData\nmrih_Server\nmrih\cfg
  • Centos 7 系统
    - 配置文件需要放在:/home/steam/serverfiles/nmrih/cfg

获取配置文件内容方式:

  1. zombiegaming 提供:fastdl.zombiegaming.net

  2. 使用我提供的配置文件

    在服务器 cfg 目录里创建 server.cfg 文件,文件内容如下代码块

    //***************************************************************************************
    //
    //                       No More Room in Hell - Server.cfg
    //                        Version 1.12 - November 02, 2022
    //      最新版本: https://blog.csdn.net/weixin_43908947/article/details/127372900
    //
    // **************************************************************************************// ................................... 服务器基本设置 ................................... //
    // 服务器名称
    hostname "[CN] NMRIH Dedicate Server Tutorial By F1F88"// 管理员邮箱
    sv_contact ""// 加入服务器的密码
    sv_password ""// 远程控制台密码, 如果没有远程连接可以留空
    // 如果需要更安全的密码, 登录 https://www.grc.com/passwords.htm 查看自动生成的列表
    rcon_password ""
    // sv_rcon_log 1                            // 允许记录 rcon 日志记录. 默认 1
    // sv_rcon_whitelist_address ""             // 设置认证 rcon 身份失败也不会禁止的地址
    // sv_rcon_maxfailures 10                   // 设置认证 rcon 身份失败多少次后被封禁. 默认 10
    // sv_rcon_banpenalty 0                     // 设置认证 rcon 身份失败后, 封禁用户的分钟数. 默认 0
    // sv_rcon_minfailuretime 30                // 设置认证 rcon 身份失败后, 跟踪用户的秒数. 默认 30
    // sv_rcon_minfailures 5                    // 设置用户在跟踪时间内, 认证 rcon 身份失败几次被封禁. 默认 5
    // sv_rcon_maxpacketbans 1                  // 禁止超过 sv_rcon_maxpacketsize 大小的 rcon 数据包. 默认 1
    // sv_rcon_maxpacketsize 1024               // 设置命令包中允许的最大字节数. 默认 1024sv_region 4                                 // 服务器所在地区.-1 = 世界 | 0 = 美国东 | 1 = 美国西 | 2 = 南美 | 3 = 欧洲 | 4 = 亚洲 | 5 = 澳大利亚 | 6 = 中东 | 7 = 非洲
    sv_lan 0                                    // 服务器网络类型. 0 = Internet 互联网   | 1 = Local Area Network 局域网motdfile "motd.txt"                         // 设置 公告栏/每日信息 文件名
    mapcyclefile "mapcycle.txt"                 // 设置 地图列表 文件名
    sv_difficulty "classic"                     // 服务器游戏难度. casual-休闲   | classic-经典  | nightmare-噩梦
    sv_tags "classics"                          // 服务器类型标签. custom-自定义 | classics-经典 | objective-仅nmo地图 | survival-仅nms地图// ................................... 下载设置 ................................... //
    sv_allowupload 0                            // 允许客户端上传文件. 默认 1
    sv_allowdownload 1                          // 允许客户端下载文件. 默认 1
    net_maxfilesize 64                          // 允许客户端下载文件大小上限(MB). 默认 64// 设置客户端从网站下载文件, 以加快下载速度, 为空则从服务器的资源里下载.
    // 假设服务器地图文件夹中有一个名为 nmo_example.bsp 的地图, 在 Web 服务器中有 nmo_example.bsp
    // Web文件地址为 http://www.网站.com/nmrih/maps/nmo_example.bsp
    // 则应该设置为  sv_downloadurl "http://www.网站.com/nmrih"
    sv_downloadurl ""// sv_workshop                              // Enable server-side Steam Workshop for maps.  | (1.11.5新增)
    // sv_workshop_autoupdate                   // Automatically update Workshop maps every level change.
    // workshop_remove_all                      // 从列表中删除所有地图.  | (1.13新增)// ................................... 性能设置 ................................... //
    // fps_max 0                                // 设置服务器运行帧速率的限制, 0=无限制. 默认 300
    sv_maxrate 0                                // 服务器分配给一个人的最大带宽速率, 0=无限制, (字节/秒). 默认 0
    sv_minrate 33000                            // 服务器分配给一个人的最小带宽速率, 0=无限制, (字节/秒). 默认 3500
    sv_maxupdaterate 66                         // 服务器每秒允许的最大更新数. 默认 66
    sv_minupdaterate 10                         // 服务器每秒允许的最小更新数. 默认 10
    sv_maxcmdrate 66                            // 服务器每秒允许的最大命令数. 默认 66
    sv_mincmdrate 10                            // 服务器每秒允许的最小命令数. 默认 10sv_parallel_packentities 1                  // 允许服务器并行打包实体. 默认 1
    sv_parallel_sendsnapshot 1                  // 允许客户端并行接收其他客户端和服务器同时发送的连续快照. 开启可以使画面更加顺滑. 默认 0
    // sv_forcepreload 1                        // 强制服务器端预加载
    // sv_unlag_npcs 1                          // 允许对 NPC 执行滞后补偿(实验性). 默认 1
    // sv_alternateticks 1                      // 允许服务器仅模拟偶数刻度上的实体. 默认 0
    // sv_max_queries_sec 3.0                   // 允许每秒从单个 IP 响应的最大查询数. 默认 3.0
    // sv_max_queries_sec_global 3000           // 允许每秒从任何位置响应的最大查询数. 默认 3000
    // sv_max_queries_window 30                 // 允许每秒平均查询平均值的窗口. 默认 30net_splitpacket_maxrate 33000               // 设置对拆分数据包块排队时, 每秒的最大字节数.(Tickrate / 2 * 1000). 默认 80000
    net_maxroutable 1260                        // 设置数据包拆分之前, 请求的最大数据包大小(576 - 1260). 默认 1260
    net_maxcleartime 0.03                       // 允许发送前等待下一个数据包的最长秒数, 0=无限制. 默认 4.0
    net_queued_packet_thread 1                  // 允许使用高优先级线程将队列数据包发送出去, 而不是每帧发送一次. 默认 1
    net_compresspackets 1                       // 允许对游戏数据包使用压缩. 默认 1
    net_compresspackets_minsize 1024            // 允许压缩的数据包最小大小(字节). 默认 1024
    net_splitrate 1                             // 允许每帧发送拆分数据包的碎片数. 默认 1// 用于限制已连接客户端的 cl_interp_ratio 最小值. 默认 1
    // -1 = 让客户端设置 cl_interp_ratio 为任何值 | 其他 = 设置 cl_interp_ratio 的最小值
    sv_client_min_interp_ratio 2// 用于限制已连接客户端的 cl_interp_ratio 最大值. 默认 5
    // 如果 sv_client_min_interp_ratio = -1,  那么 sv_client_max_interp_ratio 的设置无效
    sv_client_max_interp_ratio 2// 用于强制连接时客户端的 cl_predict 值. 默认 -1
    // 当本地客户端设置 cl_predict=1 时, 表示激活预测物理、运动、射击等 (推荐)
    // -1 = 让客户端将 cl_predict 设置为任何值    |  0/1 = 强制 cl_predict 为 0/1
    sv_client_predict 1// 客户端 cl_cmdrate 值被移动到 cl_updaterate 的 sv_client_cmdrate_difference 个单位内
    // 且不超过 sv_mincmdrate 和 sv_maxcmdrate . 默认 20
    sv_client_cmdrate_difference 20// ................................... 其他额外设置 ................................... //
    // ----------------- 玩家 ------------------ //
    sv_idle_autokick_enabled 1                  // 允许自动踢出挂机玩家. 默认 1
    sv_idle_autokick_time 120                   // 允许自动踢出判定时长(秒). 默认 120
    // sv_zombie_collision_enabled              // 启用丧尸体积碰撞. 默认 1
    // sv_max_separation_force 0                // 启用玩家体积碰撞. 默认 1  | (1.11新增)
    // sv_observer_health_display               // 允许观众查看玩家生命值. 默认 1  | (1.11新增)
    // sv_neutral_player_name                   // 设置用中性颜色显示玩家名称标签. 默认 0  | (1.11新增)
    // sv_friendly_fire_factor 0.0001           // 设置队友伤害百分比. 默认 0.1
    // mp_friendlyfire 0                        // 启用队友伤害.(0=仅感染时有). 默认 0
    // sv_deathnotice 2                         // 启用死亡提示.(2=仅玩家死亡). 默认 0  | (1.11.5新增)
    // sv_kill_player_on_disconnect 1           // 允许杀死失去连接的玩家.(防止变异坑人). 默认 1  | (1.13新增)
    // sv_allow_voice_from_file 1               // 允许客户端使用来自此服务器上文件的语音输入. 默认 1
    // sv_voiceenable 1                         // 允许玩家用麦克风交流. 默认 1
    // sv_alltalk 1                             // 允许玩家的麦克风交流无视距离. 默认 0
    // mp_show_voice_icons 1                    // 允许玩家说话时显示头顶的播放器语音图标. 默认 1
    // sv_voice_cooldown 3                      // 语音命令冷却时间(秒). 默认 3
    // sv_voicecodec "steam"                      // 设置语音编解码器. 默认 steam// "steam"-steam API  |  "vaudio_celt"-较新的celt编解码器  |  "vaudio_speex"-传统speex编解码器(最低质量)
    sv_allow_wait_command 0                     // 允许客户端使用 wait 命令(最好保持禁用状态 - 0, 以防止滥用脚本). 默认 1
    // sv_gravity 800                           // 设置世界重力. 默认 800
    // sv_pushaway_max_force 1000               // 设置玩家施加在物理物体上的最大力量. 默认 1000
    // sv_pushaway_min_player_speed 75          // 如果玩家移动速度比这慢, 不要推开物理物体(可以躲避物体). 默认 75// --------------- 回合时长 ---------------- //
    mp_timelimit 999                            // 设置自动切换到新地图之前, 在单个地图上花费的时间(分钟). 默认 45
    mp_maxrounds 999                            // 设置自动切换到新地图之前, 在单个地图上花费的最大回合数. 默认 2
    sv_practice_transtime 45                    // 设置练习时间的时长. 默认 45
    sv_preround_freezetime 5                    // 设置回合开始前的冻结时长. 默认 5
    // sv_extract_previewtime 12.0              // 设置撤离后自由镜头的时间. 默认 12.0
    // sv_wave_begin_grace 30                   // 设置 wave 开始之前的时间. 默认 30
    // sv_wave_cooldown 10                      // 设置 wave 之间的冷却时间. 默认 10 (需要作弊)
    // sv_roundlag_time 10                      // 设置回合之间的等待时间. 默认 10
    // mp_bonusroundtime 15                     // 设置一轮获胜后到一轮重新开始的时间. 默认 15
    // mp_bonusroundtime_final 15               // 设置最后一轮结束后, 到第二轮重新开始的时间. 默认 15
    // sv_nextlevel_on_round_win                // 设置回合胜利后自动切换下一张地图, 而不是重新开始. 默认 0  | (1.11新增)// ------------- 游戏难度/模式 ------------- //
    // sv_challenge 0                           // 启用挑战模式. 默认 0
    // sv_realism 0                             // 启用写实模式. 默认 0
    // sv_hardcore_survival 0                   // 启用硬核生存模式. 默认 0
    // sv_realism_allow_respawn 0               // 允许写实模式重生. 默认 0
    // sv_challenge_validate 1                  // 验证挑战模式的返回结果. 默认 1
    // sv_watermelon_rescue 1                   // 启动西瓜救援!带他们去撤离区. 默认 1  | (1.13地图新增了更多西瓜)// ----------------- 复活 ------------------ //
    // sv_respawn_allowed 0                     // 允许玩家复活. 默认 0
    // sv_respawn_without_tokens                // 允许玩家没有复活令牌时复活. 默认 1
    // sv_respawn_with_weapon 0                 // 允许玩家复活时获得武器. 默认 0
    // sv_respawn_ammo_pct                      // 设置玩家复活时获得武器弹夹的概率. 默认 75
    // sv_respawn_nearby_allowed 0              // 允许在其他玩家附近复活. 默认 0
    // sv_respawn_nearby_min_distance           // 设置在其他玩家附近复活时, 距离目标玩家的最小距离. 默认 100
    // sv_respawn_nearby_max_distance           // 设置在其他玩家附近复活时, 距离目标玩家的最大距离. 默认 300
    // sv_respawn_nearby_tries_per_player       // Number of times to try finding a nearby spawn per other player when doing nearby spawning. 默认 3
    // sv_respawn_token_objective               // 允许目标模式下使用复活令牌. 默认 0
    // sv_respawn_token_survival                // 允许生存模式下使用复活令牌. 默认 1
    // sv_respawn_time_token                    // 设置玩家拥有复活令牌时的重生时间. 默认 5
    // sv_respawn_time_notoken                  // 设置玩家没有复活令牌时的重生时间. 默认 30
    // sv_respawn_initial_token_count_objective // 设置任务模式复活令牌初始值. 默认 0
    // sv_respawn_initial_token_count_survival  // 设置生存模式复活令牌初始值. 默认 0
    // sv_respawn_kills_per_token_objective     // 设置目标模式获得一个复活令牌所需分值. 默认 0
    // sv_respawn_kills_per_token_survival      // 设置生存模式获得一个复活令牌所需分值. 默认 40
    // sv_wave_reset_tokens                     // 允许新 wave 时清空复活令牌. 默认 0
    // sv_wave_remove_inflictions               // 允许新 wave 时消除感染. 默认 0
    // sv_wave_heal_amount                      // 设置新 wave 治愈血量值. 默认 0
    // sv_spawn_grace                           // Spawn grace time  | 复活宽限期. 默认 180
    // sv_spawn_grace_wave_percent              // Spawn grace time wave percent  | 复活宽限期 wave百分比. 默认 -1
    // sv_spawn_grace_objectivecount            // 完成多少个任务后, 玩家不能重生. 默认 2// ---------------- 游戏道具 ---------------- //
    // sv_health_station_health                 // 设置医疗箱的生命值. 默认 200
    // sv_health_station_heal_per_tick          // 设置医疗箱的每秒治愈量. 默认 1
    // sv_health_station_opacity                // 设置医疗箱未使用时的不透明度. 默认 0.3
    // inv_ammoweight                           // 设置每盒弹药的重量.(需要作弊). 默认 5  | (1.12.2新增)
    // sv_flare_gun_supply_limit                // 设置信号枪可以召唤补给的最多次数.(-1=无穷大). 默认 1
    // sv_resupplytime                          // 设置再次提供补给的时间间隔(秒). 默认 60
    // sv_rare_weapon_chance                    // 设置物品盒有机会生成稀有武器(电锯). 默认 0.05
    // sv_rare_tool_chance                      // 设置物品盒产生稀有工具的概率(火炬枪、灭火器、焊工). 默认 0.025
    // sv_ng_zombie_loot                        // 允许 ng 丧尸掉落战利品. 默认 1  | (1.12.1新增)// ---------------- 投票相关 ---------------- //
    // sv_allow_votes 1                         // 允许玩家投票. 默认 1
    // sv_vote_issue_kick_allowed 0             // 允许玩家通过投票踢出其他玩家. 默认 0
    // sv_vote_allow_spectators 0               // 允许观众投票.(包括死亡玩家). 默认 0
    // sv_allow_dead_votekick_alive 0           // 允许观众投票踢出活着的玩家. 默认 0
    // sv_vote_kick_ban_duration 10             // 设置被踢出后封禁时长.(0=禁用). 默认 10
    sv_vote_creation_timer 150                  // 设置玩家需要多长时间才能进行另一次投票. 默认 150
    sv_vote_failure_timer 300                   // 设置投票失败多长时间内不能重新发起投票. 默认 300
    // sv_vote_quorum_ratio 0.6                 // 设置同意投票所需的最低合格玩家比例.(0.5-1.0). 默认 0.6
    // sv_vote_changedifficulty_restart 1       // 设置玩家改变难度后重新开始游戏. 默认 1
    // sv_vote_issue_changechallenge_allowed 1  // 允许玩家通过投票改变游戏挑战. 默认 1
    // sv_vote_issue_changedifficulty_allowed 1 // 允许玩家通过投票改变游戏难度. 默认 0
    // sv_vote_issue_changelevel_allowed 1      // 允许玩家通过投票改变游戏地图. 默认 1
    // sv_vote_issue_nextlevel_allowed 1        // 允许玩家通过投票改变下张地图. 默认 1
    // sv_vote_allow_restart_game_skip 1        // 允许玩家投票跳过练习阶段. 默认 1  | (1.11新增)
    // sv_vote_issue_restart_game_allowed 1     // 允许玩家投票重新开始回合. 默认 1
    // sv_vote_ui_hide_disabled_issues 0        // 允许隐藏被禁止的投票选项. 默认 1// ---------------- 日志相关 ---------------- //
    log on                                      // 启用日志 (off/on)
    // sv_logsdir                               // 设置日志文件存储目录. 默认 "logs"
    // sv_logfile                               // 允许日志文件记录服务器消息. 默认 1
    // sv_logfilename_format                    // 设置日志文件名格式. 有关格式化代码, 请参阅strftime
    // sv_logfilecompress                       // 允许用Gzip压缩日志文件, 并在关闭时重命名为 logfilename.log.gz. 默认 0
    // sv_logbans                               // 允许记录服务器禁令. 默认 0
    // sv_logblocks                             // 允许记录被阻止的查询(可能导致非常大的日志文件). 默认 0
    // sv_logdownloadlist                       // 无. 默认 1
    // sv_logecho                               // 允许将日志信息回显到控制台. 默认 1
    // sv_logflush                              // 允许每次写入时将日志文件刷新到磁盘.(慢). 默认 0
    // sv_logsecret                             // 允许在执行UDP日志记录时包含此密钥.(将使用0x53作为数据包类型, 而不是通常的0x52). 默认 0// ----------------- 调试 ------------------ //
    // sv_stats                                 // 允许收集 CPU 使用统计. 默认 1
    // sv_debug_player_use 1                    // 允许可视化 +use(E). 绿色十字=追踪成功, 红色十字=追踪太远, 绿色方框=半径成功. 默认 0
    // sv_debugtempentities                     // 允许显示临时实体带宽使用情况. 默认 0
    // sv_item_glow                             // 允许物体发光. 默认 1  | (1.11新增)
    // sv_showimpacts                           // 允许显示客户端(红色)和服务器(蓝色)弹着点. 默认 0
    // sv_showladders                           // 允许显示所有梯子的bbox和卸载点(必须在水平加载前设置)
    // sv_execmapcfg                            // 设置地图初始化 自动执行[mapname].cfg
    // sv_timeout                               // 在这几秒钟没有来自客户端的消息后, 客户端将被删除
    // sv_zombie_hate_everyone                  // 允许丧尸攻击任何目标.(包括其他丧尸 | 需要作弊). 默认 0  | (1.11新增)
    // cl_skip_joingame_dialog 1                // 允许客户端跳过欢迎界面, 自动加入游戏.  默认 0  | (1.11.5新增 | 仅客户端可用)// ................................... Sourcemod 设置 ................................... //// ***************************************************************************************
    //
    //                          高级服务器设置 (最好不要动!)
    //
    // ***************************************************************************************
    exec banned_user.cfg
    exec banned_ip.cfg// 这些命令将在切换地图时运行, 服务器崩溃时可能会从banlist中删除最近的封禁信息, 这可以最小化这个问题
    //
    writeid
    writeip// 封禁不良玩家, 参考(26楼):https://tieba.baidu.com/p/5316771031?pid=111825849054&cid=#111825849054
    // banid forever [U:1:204954714]    // vvi
    // banid forever [U:1:122213944]    // 汪君//***************************************************************************************
    //
    //                                 主服务器设置
    //
    //***************************************************************************************
    // sv_master_legacy_mode 0          // 禁用lagacy模式, 因为steam主服务器不再支持它
    heartbeat                           // 发送此服务器准备就绪的心跳信号. 这应该是配置的最后一行//***************************************************************************************//-----End of Server.cfg-----

五、 启动游戏服务器

Windows 系统

  • 方式 ①:命令行启动

    - 按下 Win + R 打开 cmd 命令行,输入如下命令即可

    D:\Game\ServerData\nmrih_Server\srcds.exe ./srcds_run -game nmrih -port 27015 -maxplayers 8 +map nmo_suzhou
    

  • 方式 ②:快捷方式启动(推荐)

    - 鼠标右键点击 srcds.exe 文件 ⇒ 选择创建快捷方式 ⇒ 将 目标(T): 栏内容修改成如下内容
      然后就可以像打开桌面软件一样双击即可运行服务器(快捷方式启动文件可以放在包括桌面的任意位置)

    D:\Game\ServerData\nmrih_Server\srcds.exe ./srcds_run -game nmrih -port 27015 -maxplayers 8 +map nmo_suzhou
    

  • 方式 ③ :脚本启动

    - 创建一个文本文件,名字随意,后缀名必须为 .bat。例如:startServer.bat ,文件内容如下:
      接着双击运行 startServer.bat 文件即可启动服务器(此文件同样可以放在任何位置)

    D:\Game\ServerData\nmrih_Server\srcds.exe ./srcds_run -game nmrih -port 27015 -maxplayers 8 +map nmo_suzhou
    

Centos 7 系统

  • 方式 ①:前台启动

    输入如下命令,就可以启动服务器了(此方法关闭远程连接后,服务器也会关闭)

    /home/steam/serverfiles/srcds_run -game nmrih -port 27015 -maxplayers 8 +map nmo_suzhou
    
  • 方式 ②:screen多视窗启动

    • screen简介:菜鸟教程 - screen
    • 优点:关闭远程连接后服务器可以保持允许
    • 具体使用方法请参考:Centos 7 开地狱已满服教程
  • 方式 ③:tmux 终端复用软件(推荐)

    • tmux 简介:百度百科 - tmux

    • 推荐理由:知乎 - tmux 介绍

    • 安装 / 使用方法:

      yum install tmux           # 下载安装tmux
      tmux new -s steam           # 创建一个名为 steam 的会话
      tmux ls                     # 列出当前用户所有会话
      tmux a -t steam             # 重新连接名为 steam 的会话# 停止并退出会话:Ctrl + D
      
    • 举例

      tmux new -s nmrihserver        # 创建一个名为 nmrihserver 的会话
      /home/nmrihserver/serverfiles/srcds_run -game nmrih -port 27015 -maxplayers 8 +map nmo_suzhou  # 启动服务器
      

########################################################################################
# 纯净经典服务器 到此部署完成!
# 如需新增的第三方地图,将地图文件放到 ./serverfiles/nmrih/maps 文件夹里
# 用户会从服务器下载资源 (如需投票列表显示地图,请修改文件 ./serverfiles/nmrih/cfg/mapcycle.txt )
########################################################################################

六、疑难解答

如何更新服务器

  • Windows 系统

    ① 运行 steamcmd.exe ,打开后 steamcmd 会自动更新

    ② 接着先设置 服务器所在目录,再登录 steam 账号

    ③ 最后输入 app_update 317670 validate 更新服务器

    force_install_dir D:\Game\ServerData\nmrih_Server
    login anonymous
    app_update 317670 validate
    
  • Centos 7系统

    • 方法一:手动更新

      手动输入如下命令用 steamcmd 更新服务器

      /home/steam/steamCMD/steamcmd.sh +force_install_dir "/home/steam/serverfiles" +login anonymous +app_update 317670 validate +quit
      
    • 方法二:启动时添加自动更新参数

      参考 Valve 开发者社区: [ 服务器启动命令参数列表 [英] ]

      ① 创建一个用于自动更新的配置文件,例如: /home/steam/steamCMD/nmrih_update.txt

      vim /home/steam/steamCMD/nmrih_update.txt

      @ShutdownOnFailedCommand 1                  // set to 0 if updating multiple servers at once
      @NoPromptForPassword 1                         // disables promt for password on execution
      force_install_dir /home/steam/serverfiles/  // Your Server instance
      login anonymous                             // logs in with steams public anonymous account
      app_update 317670
      quit
      

      ② 启动服务器时添加自动更新参数 -autoupdate(需要设置 -steam_dirsteamcmd_script

      /home/steam/serverfiles/srcds_run -game nmrih -autoupdate -steam_dir /home/steam/steamCMD -steamcmd_script /home/steam/steamCMD/nmrih_update.txt -port 27015 -maxplayers 8 +map nmo_suzhou
      

下载服务器资源时报错

  • 服务器资源没有下载到指定的目录(SteamCMD 报错:Please use force_install_dir before logon!

  • 解决:先设置目录,再登录账号,再下载服务器资源

    force_install_dir D:\Game\ServerData\nmrih_Server
    login anonymous
    app_update 317670 validate
    

启动服务器报错

  1. 警告:WARNING: Failed to load 32-bit libtinfo.so.5 or libncurses.so.5.

    需要安装 32位 软件包

    yum install libtinfo.so.5
    

  2. 错误:/home/steam/.steam/sdk32/steamclient.so: cannot open shared object file: No such file or directory

    参考-维基百科:NMRIH 服务器安装 [英]

    mkdir -p /home/steam/.steam/sdk32/
    ln -s /home/steam/steamCMD/linux32/steamclient.so /home/steam/.steam/sdk32/steamclient.so
    
  3. 错误:Unable to persist cache 'modelsounds.cache', check file permissions

    下载服务器资源时没有切换到 nmrihserver 用户,导致 nmrihserver 用户权限不足

    chown -R steam /home/steam/* # 递归将此目录下所有目录和文件夹所有权设为 nmrihserver
    

七、进阶插件

在写了在写了…

其他参考

游戏入门

  • 维基百科:NMRiH 官方百科全书 [简中]
  • 维基百科:游戏入门介绍 [简中]
  • 维基百科:游戏地图清单 [英]

服务器

  1. 安装教程

    • 游戏官网:端口设置建议 [英]
    • 维基百科:NMRIH 服务器安装 [英]
    • CSDN博客:Centos7开地狱已满服 [简中]
    • steam社区:nmrih 服务器手册 (官方) [英]
    • steam社区:NMRIH 完整服务器指南 [英] (推荐:较新较全,涵盖服务器开放到互联网、添加插件、添加创意工坊地图等)
    • steam社区:NMRIH 服务器托管到互联网 [英] (整合了社区中端口映射和开服的几个帖子)
  2. 参数设置 / 技巧教程

    • steam社区:控制台指令列表 [繁中] (略少,胜在汉化)
    • steam社区:控制台指南1(基础知识) [英] (指令多,有生成僵尸指令)
    • steam社区:设置服务器最大玩家数为 9 人 [英]
    • Valve 开发者社区: 服务器启动命令参数列表 [英]
    • Valve 开发者社区: nmrih 控制台命令合集 (属于nmrih 但不属于 Source SDK 2013 Multiplayer mod)
    • 百度贴吧:地狱已满指令大全 [简中]
    • 百度贴吧:控制台指令合集 [简中]
    • 百度贴吧:控制台指令简洁版 [简中]

性能调优

  • 百度贴吧:1M 带宽服务器性能设置 [简中] (Tips:1M建议限制人数 ≤ 6人)
  • B站:CS: All-in-One (网络参数篇) [简中]
  • B站:《求生之路2》服务器tickrate的作用与网络参数的优化 [简中]
  • srcds.com:性能调优设置 (调整tickrate) [英]

请务必留下你的三连!

地狱已满服务器搭建教程-1 服务器安装篇 NMRIH Dedicate Server相关推荐

  1. Centos7开地狱已满服之插件安装

    前言 距离编写开服教程已过去1年多,一直也没什么时间来整理插件安装的教程,这几天闲来无事,又重新开始搭建一遍,算是补上这么一个遗憾.话不多说,开整. 一.SourceMod安装 假定游戏本体已经安装, ...

  2. w7服务器搭建网站教程,w7系统下的云服务器搭建教程

    w7系统下的云服务器搭建教程 内容精选 换一换 使用云服务器备份创建镜像后,通过创建成功的镜像创建云服务器,但登录云服务器后提示系统进入维护模式,无法正常使用云服务器.当云服务器带有数据盘的时候,恢复 ...

  3. Minecraft(我的世界) Fabric 1.19.3 服务器搭建教程

    Debian系统使用MCSManager9面板搭建MC Java版MOD服务器的教程,本教程用的Fabric1.19.3服务端,用其他服务端的也可以参考一下. 视频教程:https://www.bil ...

  4. Yunzai-Bot v3—Linux服务器搭建教程

    云崽-Bot v3-Linux服务器搭建教程 一 .说明 二. 环境准备 三. 安装步骤 (1).云服务重装系统 (2).宝塔Linux面板登录 (3).安装node.js环境 (4).安装Redis ...

  5. 原神3.2服务端架设服务器搭建教程ubuntu系统(保姆级)

    原神3.2服务端架设服务器搭建教程ubuntu系统(保姆级) 大家好,我是艾西今天跟大家分享下原神3.2服务端架设ubuntu系统实操教程 准备阶段:服务器一台 32h32g起.服务端.客户端.服务器 ...

  6. CentOS MC服务器搭建教程

    本文是基于CentOS的MC原版服务器搭建教程 1.安装Java 安装Java 1.8.0 yum -y install java-1.8.0-openjdk (注意:应下载与mc服务端对应版本的ja ...

  7. Nginx独立图片服务器搭建教程

    Nginx独立图片服务器搭建教程 发布时间:2014-06-04编辑:脚本学堂 本文介绍了nginx独立图片服务器的搭建与配置教程,有需要的朋友参考下. 首先,为什么需要独立图片服务器? 现在主流的网 ...

  8. linux ftp dns,Ubuntu下FTP与DNS服务器搭建教程PDF

    Linux服务器系统是Ubuntu 16.04 LTS,FTP软件选择的当然是vsftpd(very secure FTP daemon), Ubuntu装vsftpd还是很简单,一句命令就行: su ...

  9. gitlab服务器搭建教程

    gitlab服务器搭建教程 ----2016年终总结 三 参考https://bbs.gitlab.cc/topic/35/gitlab-ce-8-7-%E6%BA%90%E7%A0%81%E5%AE ...

最新文章

  1. 当前路径_[JSP] 07 JSP 路径问题
  2. 【js】小数点后保留两位小数
  3. Linux PCI 设备驱动基本框架(一)
  4. 2019优质公众号大盘点,果断收藏了慢慢看吧 ~
  5. linux写入二进制文件内容,linux – 从管道读取数据并写入标准输出,中间延迟.必须处理二进制文件...
  6. idea Maven图标的使用
  7. 软件设计师笔记---中央处理单元CPU
  8. 20180517 迭代器
  9. 金古桥机器人_泽塔奥特曼上演“吃瘪预定”,金古桥强势回顾,阿尔法被骑着打脸...
  10. logo下方显示技术支持信息_LOGO墙形象设计的几种方案
  11. 将Kinect的v2.0 Motion存储到BVH文件中
  12. 作为前端程序员,你不能不知道的这个小技巧
  13. conficker病毒
  14. 如何用python做动画_如何使用python制作简单的动画?
  15. Windows照片查看器无法显示此图片
  16. Premiere快捷键设置
  17. U盘系统安装步骤超级简单,弄懂ghost不管是windows7win10都不难
  18. linux vim 修改 只读文件,linux下vi编辑只读文档无法保存的解决方法
  19. 什么叫做云计算?学习云计算先要理解
  20. 钓鱼工具gophish史上最详细教程(附实例) —— 手把手教你成为“捕鱼人”

热门文章

  1. vbox android wifi,virtualbox桥接无线网卡实现上网
  2. FX5800计算器测量程序集2.4
  3. BootStrap之标签页切换
  4. 考研高危人群!你是否还在危险的边缘试探?
  5. 轻松玩转“项目管理” 群硕软件PMS正式发布
  6. flex布局实现骰子六面的示例
  7. Office Tool Plus 下载使用 365 2021/2019等版本
  8. org.apache.flink.table.api.TableException: A raw type backed by type information has no serializable
  9. 斯皮尔 皮尔森 肯德尔_失焦图像的无参考质量评价
  10. 电脑插了耳机,外放还有声音-解决办法