Overview
何为自建自玩?——就是在自己的电脑上建服务器,本地同时开游戏,自己(同基友们一起)进来玩自己的服务器。(其实就是自己开房)本指南简化了一些思路,面向无开服经验且想和自己伙伴们独自玩的萌新。
前言
最近有基友拉我一起入坑了沙漠风暴玩PVE。但是由于大家都是萌新,大家一起匹配很容易排到大佬。很容易我们刚进去还一脸懵逼,大佬路人就已经把敌人都打光了,导致没有什么游戏体验。而游戏客户端本身又不支持自己开自定义房间。于是我们只好研究自建自玩。
自建自玩的前提当然是要有一台配置足够的电脑。Cpu最好不低于 8代i5或r5 1600,内存最好有16g或以上(当然手头有两台电脑的也可以一台开游戏一台开服)。如果一起玩的朋友间无法通过局域网或校园网连接,那么服主则需要一个公网(外网)ip(iPv4)。(没试过所以还不确定Hamachi之类的虚拟局域网软件是否可以……)
当然,服主的网速好则更佳。
自建自玩的好处都有啥?
- 可以自定义规则和玩法。例如我看不推荐的评测里有人不喜欢PVE占了点之后可能还要防守很长一段时间的设定,那么自建自玩就可以改规则把这个守点的机制去掉。
- 不用担心水平和素质参差不齐的路人影响游戏体验。
- 可以随意坑自己人,不用担心不认识的暴躁老哥顺着网线找你(滑稽)
- 服主约等于0延迟。
其实目前社区的相关指南已经很完善了。但是由于现有的开服教程基本都是基于steamcmd 或者powershell 的命令行工具(而这两个工具并非必要),导致可能有很多想开服但又毫无经验的萌新看到前面一堆参数就望而却步。但是事实上,如果仅仅是想开服给自己和认识的伙伴们一起玩,非常简单……在steam上下载了服务端后只需要半个钟就能按照自己想要的规则搭建好。
另外正如标题所言,本教程面向的是无开服编程经验的萌新,各界大佬、腐竹、程序员请无视本文……由于我觉得需要看本文的都是不怎么接触Linux的萌新,我就只写Windows的了。本文主要参考了下面的官方指南以及社区指南。
官方指南[newworldinteractive.com]
[link]
[link]
======下面正式开始教程=======
- 在steam库的工具里直接找“Insurgency: Sandstorm Dedicated Server”,下载并安装。(如果不用steamcmd那么需要购买了游戏的才能找到这个,但开服本身并不需要购买游戏)
- 安装这俩(不一定要,因为装过些游戏的电脑很可能已经装了,不行回头再装)。
●VisualC++_2015_Redistributable: [link]
● VIsual C++_ 2017 Redistributable: [link] - steam库右键安装好的“Insurgency: Sandstorm Dedicated Server”-属性-本地文件-浏览本地文件。弹出服务端根目录。
- 新建记事本,把下面内容粘贴进去
InsurgencyServer.exe Farmhouse?Scenario=Scenario_Farmhouse_Checkpoint_Security?MaxPlayers=8?password= -Port=27102 -QueryPort=27131 -log -hostname=”Test_Server”
然后保存改名,把扩展名改成bat。例如“开服.bat”。
其中:
Farmhouse?Scenario=Scenario_Farmhouse_Checkpoint_Security 为初始地图和模式。之后设置了管理员可以进游戏后直接改地图,所以初始地图一般不用理。详细的地图与模式见后附录1。
?MaxPlayers= 后的数是最大(真人)玩家数。
?password= 后面设置房间密码,留空则无。
-Port=27102 数字为默认服务器端口。公网ip需要端口映射/转发(并在防火墙上开放)这个端口,互联网上的朋友才能连进你的服务器。(具体端口映射方法见附录5)
-QueryPort=27131 映射开放这个端口,游戏里的“社区服务器”页面就能搜索到你服务器。
-log 代表开记录窗口(基本都开)
-hostname= 引号内内容为服务器名。如果想要中文名,记得在保存的时候改成ANSI编码。
其实到这里双击运行这个bat就能运行服务器了。但是为了能更好的掌控它,我们还需要一些设置。
(这一步还有一些内容要附注,为了文章流畅性我贴到文章最后) - 设置管理员的steamID。
根目录InsurgencyConfigServer 里,新建一个名叫“Admins.txt”的记事本,打开。
在steam中查看自己个人资料的链接,如果是/profiles/(一串数字)/ 结尾的,那么这串数字就是你的steamID64。
如果是/id/(英文或数字ID)/结尾的,那么则通过[link]
把你的ID输入到这个框,然后点Get SteamId。
–
得到你的steamID64
总之得到steamID64后,将它复制到上述Admins.txt文档中保存,管理员就设置好了。以后用这个账号开游戏进了服务器之后,按默认小键盘- (如果没有小键盘可以设置里改成键),就可以调出管理员控制面板。(“等级”页面就是管理员改地图和模式的)
设置好管理员后,可以选择性地在相同的文件夹下新建一个“Mapcycle.txt”,
在里面设置地图循环。例如只玩Pve模式可以把下面内容复制进去。
Scenario_Ministry_Checkpoint_Security
Scenario_Outskirts_Checkpoint_Security
Scenario_Summit_Checkpoint_Security
Scenario_Crossing_Checkpoint_Security
Scenario_Precinct_Checkpoint_Security
Scenario_Refinery_Checkpoint_Security
Scenario_Farmhouse_Checkpoint_Security
Scenario_Hideout_Checkpoint_Security
Scenario_Hillside_Checkpoint_Security
Scenario_Outskirts_Checkpoint_Insurgents
Scenario_Summit_Checkpoint_Insurgents
Scenario_Crossing_Checkpoint_Insurgents
Scenario_Precinct_Checkpoint_Insurgents
Scenario_Refinery_Checkpoint_Insurgents
Scenario_Farmhouse_Checkpoint_Insurgents
Scenario_Hideout_Checkpoint_Insurgents
Scenario_Ministry_Checkpoint_Insurgents
Scenario_Hillside_Checkpoint_Insurgents
不过由于是自建自玩而且已经设置了可以随意改地图的管理员,这个Mapcycle.txt不弄也行。 - 打开根目录InsurgencySavedConfigWindowsServer 里的Game.ini(没有则创建),将下面内容复制进去,按需进行配置,然后保存。
EnableLog=True
MapCycle=Mapcycle
;……………创建地图循环表。Mapcycle.txt 存在时可以把里面的删掉……………[/script/insurgency.insgameinstance]
!Mapcycle=ClearArray
MapCycle=(Scenario=”Scenario_Ministry_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Outskirts_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Summit_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Crossing_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Farmhouse_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Refinery_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Precinct_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Hideout_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Hillside_Checkpoint_Security”)
MapCycle=(Scenario=”Scenario_Summit_Checkpoint_Insurgents”)
MapCycle=(Scenario=”Scenario_Crossing_Checkpoint_Insurgents”)
MapCycle=(Scenario=”Scenario_Farmhouse_Checkpoint_Insurgents”)
MapCycle=(Scenario=”Scenario_Refinery_Checkpoint_Insurgents”)
MapCycle=(Scenario=”Scenario_Precinct_Checkpoint_Insurgents”)
MapCycle=(Scenario=”Scenario_Hideout_Checkpoint_Insurgents”)
MapCycle=(Scenario=”Scenario_Ministry_Checkpoint_Insurgents”)
MapCycle=(Scenario=”Scenario_Hillside_Checkpoint_Insurgents”)
;…………………………………………………………………………………………………………………………….
[Rcon]
bEnabled=False
Password=
ListenPort=27015
bUseBroadcastAddress=True
ListenAddressOverride=0.0.0.0
bAllowConsoleCommands=True
MaxPasswordAttempts=3
IncorrectPasswordBanTime=30
; 上面Rcon开始这几项是远程管理服务器用的。[/script/insurgency.inscoopmode]
AIDifficulty=0.5
; AI难度(0-1之间)
bUseVehicleInsertion=True
; 开局是否开车进场(部分地图)
FriendlyBotQuota=5
; PVE友军机器人补充到总共几个人为止。例如此值为5,真人玩家有2个,那么就会补充3个电脑。另外要bBots=True (在下面找)这个才会生效。
MinimumEnemies=4
; 最小敌人生成数量,具体数量和友军人数挂钩。例如只有1名玩家,那么敌人数就是这个数。
MaximumEnemies=16
; 最大敌人生成数量[/script/insurgency.insgamemode]
ServerHostname=Insurgency Sandstorm Server
bKillFeed=False
; 显示右上角击杀提示,默认False
bKillFeedSpectator=True
; 观察者显示右上角击杀提示
bKillerInfo=True
; 显示击杀者ID和所用武器
bKillerInfoRevealDistance=False
; 显示击杀者距离
TeamKillLimit=3
; tk几个后踢出
TeamKillGrace=0.20
TeamKillReduceTime=90
bDeadSay=False
; 死人允许打字
bDeadSayTeam=True
bVoiceAllowDeadChat=False
bVoiceEnemyHearsLocal=True
ObjectiveCaptureTime=30
; 占点时间(秒)
ObjectiveResetTime=-1
; 多久无人站点时间会倒退,负数关。
ObjectiveSpeedup=0.25
; 每多一个人占点加速的倍数
ObjectiveMaxSpeedupPlayers=4
; 最大占点加速人数[/script/insurgency.insmultiplayermode]
RoundLimit=10
; 最大局数(pve超过这个局数没赢就算输)
WinLimit=1
; 赢所需的局数/分数(pvp时)
PreRoundTime = 13
; 每局开始前(坐车)的时间(秒) ps:如果开了开局坐车,那么车到终点前,时间越长开得越远。
RoundTime=300
; 每局时间
bAllowFriendlyFire=True
; 友军伤害开关
FriendlyFireModifier=1.00
; 友伤伤害率
FriendlyFireReflect=0.00
; 友伤反弹率
bMapVoting=True
; 游戏结束后地图投票
bUseMapCycle=True
bBots = False
; 是否允许AI参战【PVE似乎允许这个才会补队友,但是开了之后一些其它配置会变(例如敌人数可能会被限死),所以不建议开】
BotQuota = Varies
; pvp模式两边都补够这个数的机器人
InitialSupply=10
; 第一局开始时军盲(补给)点
MaximumSupply=20
; 最大军盲(补给)点
bSupplyGainEnabled=true
; 整个对局进行中可获得军盲点
bAwardSupplyInstantly=False
; 军盲点立即获得(不用等下一局直接找补给箱就能用)
SupplyGainFrequency=150
; 每获得多少分数就获得1军盲点
IdleLimit = 300
; 挂机xx秒后踢出
IdleLimitLowReinforcements = 150
; 低增援的情况下挂机xx秒后踢出
PostRoundTime = 8
; 每局结束后看数据的时间
GameStartingIntermissionTime = 7
; 游戏开始前(第一局上车之前)预备的时间[/script/insurgency.inspushgamemode]
RoundTimeExtension=300
AttackerWavesPerObjective=5
AttackerWaveDPR=0.25
AttackerWaveTimer=20
DefenderWavesPerObjective=5
DefenderWaveDPR=0.25
DefenderWaveTimer=35
LastStandSetupDelay=10
AdvanceAttackerSpawnsDelay=30[/script/insurgency.insskirmishgamemode]
DefaultReinforcementWaves=5
CaptureBonusWaves=1[/script/insurgency.inscheckpointgamemode]
DefendTimer=75
; 防守敌人反击的时间。如果不喜欢守点的设定直接调1(调0时间会变无限……)
DefendTimerFinal=150
; 最后一个点守点时间。如果不喜欢守点的设定直接调1
RetreatTimer=10
RespawnDPR=0.10
RespawnDelay=20
PostCaptureRushTimer=30
CounterAttackRespawnDPR=0.20
CounterAttackRespawnDelay=20
ObjectiveTotalEnemyRespawnMultiplierMin=1.00
ObjectiveTotalEnemyRespawnMultiplierMax=1.00
FinalCacheBotQuotaMultiplier=1.50
;最后一个点敌人倍数
bCounterAttackReinforce=False一些常用的设置我在下面打了注释方便理解(注释运行一次服务器后就会消失),我没打注释的(还有一些可能缺少的配置)可以在[link] 这篇指南翻译中的“常规设置”及“游戏模式设置”标签下查到(我这个对默认配置 稍有改动,你可以参考官方的默认值改)。
- 设置完game.ini就可以回到根目录,运行开始时创建的那个bat开服啦!
成功时最后大概是这样的样子。
(窗口里有Warning 或者Error 很正常并不代表服务器就玩不了了……) - 运行游戏-社区服务器,如果服务器和游戏是同一台电脑的,直接连接到ip,
输入127.0.0.1:27102
(27102为默认端口)
就可以连到本地服务器了。
其他人则输入服主的局域网/公网ip:27102
则可以连上。
如果是通过互联网连接的公网ip,服主记得进自己路由器设置映射27102(或者你改的)这个端口
如果开放了QueryPort 默认27131的端口则可以在服务器列表里找到然后连接。
如果都能顺利进入读图基本上就没问题了可以开玩咯!
===附录===
附录1、地图/模式列表:地图列表主要在设置初始地图和地图循环的时候会用到。
详细地图可以在
官方指南1.5[newworldinteractive.com]
官方指南新地址[support.newworldinteractive.com]
Scenario List下找到。(这里节约篇幅就不具体再贴了)
其中Scenario Name上的粗体字是地图名(有括号的则是括号里的),下面这一列Scenario打头的则为具体场景模式。
其中包含checkpoint的才是pve模式,Insurgents结尾表示扮演叛乱军,Security结尾则扮演另一方安全部队(从另一边打过去)。
开服第5步中的Mapcycle.txt 列表直接填场景模式即可。
而第4部的bat中则按照 地图名? Scenario=场景模式 的格式改。如可以把默认的
Farmhouse?Scenario=Scenario_Farmhouse_Checkpoint_Security 改成
Canyon?Scenario=Scenario_Crossing_Checkpoint_Insurgents
这样开服时初始地图就改了
附录2、使服务器允许提升玩家等级经验值和 统计值
在第4步的默认设置下,玩家是无法在自建服务器中获得经验值和累积游戏里的统计信息的。这时候则需要在bat 后面加参数
-GSLTToken=登录令牌 -GameStats
其中登录令牌要这样获得:
① 、在[link] 中登入steam账号并确认账户符合条件。
② 、App ID填入581320(本游戏ID)后点击创建,备注可不填。
③ 、记下登陆令牌,填入到开服.bat中
附录3、变异玩法参数 -mutators
游戏提供了多种设定好的非常规玩法。只需在bat后加参数 -mutators=玩法名 即可。多个玩法可用 , (英文字符下的逗号)隔开。 例如如果想玩小手枪对决电脑近战莽夫,则填入
-mutators=PistolsOnly,Frenzy
其中具体玩法内容及翻译如下:
AllYouCanEat
– 以100点补给点开始
AntiMaterielRiflesOnly
– 武器只能从两把反器材武器中选(M99和M82A1CQ)
BoltActionsOnly
– 武器只能从两把栓动式武器中选(M24和莫辛甘纳;限制武器的规则之间都冲突)
Broke
– 从0点补给开始.
BulletSponge
-玩家生命+.
Competitive
-开启竞技模式:装备更昂贵, 弹夹容量更少, 占点更快.
CompetitiveLoadouts
-使用竞技模式的装备配置代替原有配置。
FastMovement
-移动更快
Frenzy
-敌人变成只会近战的敢死队,具体如下
Guerrillas
-5点补给开始
Hardcore
-硬核模式:更慢移动和更长时间占点
HeadshotOnly
-只有爆头有伤害
HotPotato
-死亡的同时在尸体上掉个拉了引线的手雷(默认包括电脑)
LockedAim
-武器准星锁定屏幕中心
NoAim
-不能右键瞄准
PistolsOnly
-只能用手枪
ShotgunsOnly
-只能用霰弹枪
SlowCaptureTimes
-更慢占点
SlowMovement
-移动得更慢
SoldierOfFortune
-获得分数时获得补给点(这个具体建议在game.ini里调)
SpecialOperations
-开始游戏时30补给点
Strapped
-开始游戏时1补给点
Ultralethal
-中1枪必死
Vampirism
-吸血主义:回复造成伤害量的生命值
Warlords
-开始游戏时10补给点
个别玩法的设定可以在engine.ini里修改(目前内容挺少的只有3个,我也没怎么试过就不做详细说明了,具体可以在官方指南第8页找到相关说明)。
最后举个例子吧:如果你激活了服务器的经验值和统计功能,以及激活了小手枪对决电脑近战莽夫所需的两个变种玩法,那么你的开服.bat内容应该是类似这样的格式的:
InsurgencyServer.exe Farmhouse?Scenario=Scenario_Farmhouse_Checkpoint_Security?MaxPlayers=8?password= -Port=27102 -QueryPort=27131 -log -hostname=”Test_Server” -GSLTToken=你的登录令牌 -GameStats -mutators=PistolsOnly,Frenzy
附录4、其它可填入.bat 的参数:
-ruleset=OfficialRules 使用官方规则
-EnableCheats 允许作弊模式以测试
(功能强大的管理员作弊界面只有开了作弊模式才能用,可以开无敌或幽灵模式,还能传送到指定坐标等等)
附录5、端口转发/映射教程:
先登入自家的路由器,进入。如果你从来未设置过自家的路由器那么可以在路由器本体的标签里找默认的地址和登入密码甚至重置(如果不嫌重设wifi和宽带账号麻烦的话)。
不同的路由器可以度娘“路由器的品牌+端口映射”来获得进入该页面的教程。
(有些路由器该页面叫做“虚拟服务器”)
在该页面中(基本各路由器都有类似设定):
Ip填入开服那台电脑的局域网ip。大多数路由是192.168打头的。最好把那个ip绑定个mac地址,避免以后换了要再改。
内部和外部端口都填入你在bat设置的端口(默认27102那个。方便记)
协议选both/all 或者udp。
然后添加保存即可。
====================================================================
补充:Linux建服流程(相关配置方法请看上面正文):
linux只能直接steamcmd走起。我这里用的是centos7做的示范
1、 安装steamcmd:
yum install xulrunner.i686 (只有64位系统需要)
yum -y install wget (如果还没装)
useradd -m steam (官方称用root不安全,所以要创建个steam用户)
su steam
mkdir ~/steamcmd
cd ~/steamcmd
wget [link]
tar -xvzf steamcmd_linux.tar.gz
./steamcmd.sh
之后等待安装和升级。完成后会自动进入steamcmd的命令行,如果没进再通过./steamcmd.sh进入
2、 下载游戏服务端。
Steam>login anonymous (登入匿名账号)
Steam>force_install_dir ../insurgencyss_ds
Steam>app_update 581330
Steam>quit
3、 配置运行脚本(主流程第4步的内容):
cd ~/insurgencyss_ds
vi run.sh
然后按照上面正文第4步中以及附录1-4的内容进行配置,只用把开头的InsurgencyServer.exe 换成 Insurgency/Binaries/Linux/InsurgencyServer-Linux-Shipping
或者直接在windows上把文档编辑好(保存成UTF-8编码可支持中文),改名成run.sh,然后再通过MobaXterm之类的工具拖进 /home/steam/insurgencyss_ds/ 文件夹
之后
su root (要用root改这个.sh脚本的执行权限)
chmod 755 run.sh
firewall-cmd –zone=public –add-port=27102/udp –permanent
firewall-cmd –reload(顺便把防火墙的端口开了)
su steam
4、 创建并配置管理员,以及game.ini
cd ~/insurgencyss_ds
mkdir -p Insurgency/Config/Server/
vi Insurgency/Config/Server/Admins.txt
(总之就是把正文第5步中Admins.txt放到这个新文件夹。格式不用改动,怎么放你随意~)
mkdir -p Insurgency/Saved/Config/LinuxServer/
vi Insurgency/Saved/Config/LinuxServer/Game.ini
(同样也是把正文第6步中Game.ini放到这个文件夹。格式不用改动。)
5、 运行
~/insurgencyss_ds/run.sh
自建自玩所涉及的内容就这些,感谢看到这里的你,祝大家玩得开心~一些自建自玩中没必要的内容我没有提(例如Rcon)。上述内容若有错漏,恳请各界大佬指出&指点。
觉得有帮助的可以三连一下,然而steam并不能投币_(:з」∠)_