还在为无法和亲朋好友一起跑图而烦恼吗?本地自建CS2跑图服务器教程,可以愉快的和朋友一起跑图啦

所需工具:

  1. 一台拥有公网IP的装有docker服务器/电脑:搭建FRP内网穿透
  2. 一台下载好CS2 的Windows电脑:搭建本地服务器
  3. 一个一起跑图的朋友

内网穿透

本地局域网联机的可以跳过

此部分使用FRP作为内网穿透工具,Github:fatedier/frp

FRP分为服务器端(frps)和客户端(frpc),主要逻辑是在公网服务器部署服务器端,在本地电脑上部署客户端,frp将会根据配置文件将本地的端口映射到服务器上的某个端口中。

frps服务端搭建

这里当然还是使用最简单易用的docker compose方案啦,使用vim创建一个docker-compose.yml文件:

1
2
3
4
5
6
7
8
9
version: '3.3'
services:
frps:
restart: always
network_mode: host
volumes:
- './frps.toml:/etc/frp/frps.toml'
container_name: frps
image: snowdreamtech/frps

启动之前需要创建一个配置文件frps.toml,内容非常简单,设置一个用于通讯的接口和密钥:

1
2
3
4
# frps.toml
[common]
bind_port = 7000 # frps服务监听的端口
auth.token = "adgh0j1cxq" # 连接Token,客户端连接时需要,注意更换

docker compose up -d启动,防火墙放行7000端口即可

frpc客户端部署

进入GitHub页面的Release界面下载Windows客户端,本地解压并放在一个容易寻找的路径。

编辑解压后文件夹内的frpc.toml文件,修改服务器地址和端口,本地需要穿透的端口,远程映射的端口和上面配置的token

1
2
3
4
5
6
7
8
9
10
serverAddr = "1.1.1.1" # frps服务端ip
serverPort = 7000

[[proxies]]
name = "cs2" #名称
type = "udp" # 游戏服务器普遍为udp协议
localIP = "127.0.0.1"
localPort = 27015 # 本地端口
remotePort = 7111 #远程端口
auth.token = "adgh0j1cxq"

打开CMD,拖入frpc.exe,后面加上-c,再拖入frpc.toml后回车,如下:

1
C:\PATH\TO\frpc.exe -c C:\PATH\TO\frpc.toml

看到start proxy success字样即表示连接成功,远端服务器记得放行7111端口,udp协议

启动本地CS2服务器

在装有CS2的电脑上一个方便的位置创建bat后缀文件,填入一下内容:

1
start "" "C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\game\bin\win64\cs2.exe" -dedicated -maxplayer 10 -high -ip 127.0.0.1 -port 27015 -insecure +map de_dust2 -language english -worldwide

启动跟在start后面的第一组冒号为启动窗口的名称,可以为空,但不能不加;

第二组冒号内为CS2在C盘中的默认路径,根据steam的安装位置自行更改;

默认启动地图为沙二,后续可以在终端使用map指令自行更改;

保存后双击即可启动,启动后可以在命令行键入跑图指令等。

让亲朋好友进入cs2,打开控制台输入 connect 服务器ip:7111 即可愉快的跑图啦

跑图CFG

经过测试,只有少数指令如 重现上次投掷物指令sv_rethrow_last_grenade无法使用。

CFG保存路径:steamapps\common\Counter-Strike Global Offensive\game\csgo\cfg

在CFG保存目录内新建train.cfg文件,键入跑图指令,大部分内容是和自己训练的跑图时所用的时互通的,保存后即可在CMD输入exec train启用跑图

下面内容大部分来自Bilibili-东北晓Official的专栏,十分感谢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
sv_grenade_trajectory_prac_pipreview 1                //显示投掷物落点窗口
sv_grenade_trajectory_prac_trailtime 8 //投掷物轨迹时常 默认最大值为8
sv_regeneration_force_on 1 //启用自动回血,为0关闭此功能
sv_falldamage_scale 0 //取消高空坠落伤害
mp_drop_knife_enable 1 //允许丢刀
mp_ignore_round_win_conditions 1 //禁用胜利条件,一方全灭,或下包爆炸,或拆包成功,都不会使回合结束

bot_kick //剔除所有电脑
sv_cheats 1 //允许作弊指令
bot_stop 1 //bot静止
mp_warmup_end //结束热身时间
mp_freezetime 0 //开局冻结时间设置为0
mp_respawn_immunitytime 0 //重生保护时间设置为0
mp_round_restart_delay 0 //重新开始延迟设定
mp_maxrounds 30 //最大局数设置为30局
mp_roundtime_defuse 60 //每局时间设置为60min
mp_buytime 99999 //购买时间设置为99999
mp_maxmoney 65535 //最大金钱设置为65535
mp_startmoney 65535 //初始金钱设置为65535
mp_buy_anywhere 1 //任何位置购买物品
mp_autoteambalance 0 //关闭自动平衡人数
mp_limitteams 0 //关闭CT和T的人数差限制
mp_free_armor 0 //开局不带防弹衣和头盔
mp_forcecamera 0 //不限制观察者观看队伍
sv_alltalk 1 //开启全局语音
ammo_grenade_limit_total 6 //手雷携带数目设置为6
sv_grenade_trajectory 1 //投掷物飞行轨迹开启
sv_grenade_trajectory_thickness 3 //飞行轨迹线条粗细设置为3
cl_grenadepreview 1 //预测投掷物飞行轨迹
mp_drop_knife_enable 1 //可以丢刀
bot_join_after_player 1 //电脑在玩家后加入
sv_showimpacts 1 //显示弹着点
mp_restartgame 1 //1秒后重新开始游戏·
mp_ignore_round_win_conditions 1 //回合不结束
sv_infinite_ammo 1 //弹药道具无限

bind "alt" "noclip" //绑定alt键飞行
bind "[" "bot_add ct" //绑定[键添加一个CT bot
bind "]" "bot_add t" //绑定]键添加一个T bot
bind "p" "Bot_Place" //绑定p键在面前放置一个电脑
bind "\" "bot_kick" //绑定\键踢出所有电脑
bind "-" "bot_crouch 1" //绑定-键机器人蹲下
bind "=" "bot_crouch 0" //绑定=键机器人站立
bind "L" "gods" //绑定L键使所有人无敌
bind "'" "god" //绑定'键使自己无敌(bot不无敌)
bind "F5" "sv_showimpacts 1" //显示弹着点
bind "F6" "sv_showimpacts 0" //关闭弹着点
bind "F9" "sv_rethrow_last_grenade" //绑定F9键重复上一次投掷物
bind "F11" "mp_restartgame 1"