饥荒联机版Linux云服务器搭建+mod解决(2025年1月可用)

引言

我有一个闲置的阿里云服务器,正好假期打算和同学一起玩饥荒(别问为什么2025了还在打饥荒),就拿来开服用了。在装mod的时候遇到一些问题,写这篇文档记录经验,也可供大家参考。(我习惯用vscode,会用的小伙伴可以用,方便服务器操作)

一、云服务器准备

申请开通一个云服务器(阿里云、腾讯云、华为云都无所谓,阿里云试用可白嫖一下),我的服务器CPU是2核4G,系统Ubuntu 22.04,预装docker(但是没用到哈)。

read-normal-img

给服务器申请一个公网IP,然后安全组那里内网入方向添加规则:UDP协议 端口10998和10999(饥荒服务器地上和洞穴的默认端口)。如果要使用SSH连接的,记得把SSH协议也加进去。

read-normal-img

至此服务器准备结束。

二、环境准备

①安装steamcmd

安装依赖:

64位机器:

sudo apt-get install libstdc++6:i386 libgcc1:i386 libcurl4-gnutls-dev:i386

32位机器:

sudo apt-get install libstdc++6 libgcc1 libcurl4-gnutls-dev

安装steamcmd到/steamcmd下:

mkdir -p ~/steamcmd/
cd ~/steamcmd/
wget "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz"
tar -xvzf steamcmd_linux.tar.gz

②安装服务端工具

打开steamcmd,然后以匿名用户登录:

./steamcmd.sh
login anonymous

下载服务端工具,饥荒联机版的对应代码是343050,安装完退出steamcmd:

app_update 343050 validate
quit

此时服务器根目录应该有一个/.klei的隐藏文件夹,用ls -al可以看到:

cd ..
ls -al

三、存档导入

导入存档,重点是获取token。

电脑steam打开游戏,点击首页的 账号——游戏——《饥荒:联机版》的游戏服务器。有的话直接复制,没有的新建一个就行。

read-normal-img

read-normal-img

然后在游戏里新建一个存档,根据自己的需求设置好,一定记得起一个比较特殊的名字,到时候好找!!!把要安装的服务器mod都选好配置好,不用进游戏。在创建存档界面这个时候就能看到自己的新建的存档了,点击“管理世界”——“打开世界文件夹”。新建一个文本文档cluster_tokentxt,把复制的这个token粘贴进去。然后这个文件夹里的四个内容全部传到服务器上去。

注意服务器的存档目录为: ~/.klei/DoNotStarveTogether/

read-normal-img

至于怎么传:第一种,文件夹页面上面栏(蓝箭头处)输入cmd,然后用scp指令+服务器的IP传到服务器上去(scp指令百度,有一定技术含量)。

第二种:用vscode(还记得我说云服务器加一个SSH连接规则吗?!Here!!)的Remote SSH插件连到服务器上,直接粘贴进去就行。

至此,存档创建成功!

四、mod安装

在装mod之前,先尝试启动一下服务器,确认前面步骤没问题。服务器根目录下新建一个.sh文件run_deldicated_servers.sh.

vim run_delicated_servers.sh

先按 i 键进入编辑模式,加入以下内容:

#!/bin/bash

steamcmd_dir="$HOME/steamcmd"

install_dir="$HOME/dontstarvetogether_dedicated_server"

cluster_name="MyDediServer"

dontstarve_dir="$HOME/.klei/DoNotStarveTogether"



function fail()

{

    echo Error: "$@" >&2

    exit 1

}



function check_for_file()

{

    if [ ! -e "$1" ]; then

        fail "Missing file: $1"

    fi

}



cd "$steamcmd_dir" || fail "Missing $steamcmd_dir directory!"



check_for_file "steamcmd.sh"

check_for_file "$dontstarve_dir/$cluster_name/cluster.ini"

check_for_file "$dontstarve_dir/$cluster_name/cluster_token.txt"

check_for_file "$dontstarve_dir/$cluster_name/Master/server.ini"

check_for_file "$dontstarve_dir/$cluster_name/Caves/server.ini"



./steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit



check_for_file "$install_dir/bin64"



cd "$install_dir/bin64" || fail



run_shared=(./dontstarve_dedicated_server_nullrenderer_x64)

run_shared+=(-console)

run_shared+=(-cluster "$cluster_name")

run_shared+=(-monitor_parent_process $$)



"${run_shared[@]}" -shard Caves  | sed 's/^/Caves:  /' &

"${run_shared[@]}" -shard Master | sed 's/^/Master: /'

然后按 esc 键,输入 " :wq " 保存退出。

接着运行文件:

./run_dedecated_servers.sh

等服务器启动后,一直等有一个sim pause弹出代表成功了,Ctrl+C退出就行。

重点!!!

因为stem2023年(好像是这一年哈,忘记了)改变了创意工坊workshop中mod的安装方式,有很多mod不能让服务器自己下载,需要我们把mod传上去!网上之前的教程让修改dedicated_server_mods_setup.lua这个文件方法是会导致有一部分mod安装失败的!!!你会看到你连进去的服务器怎么少mod了。

打开存档文件夹里面的/Master/modoverrides,里面能看到刚才创建村当时启用的mod,“workshop-一串数字代码”,打开文件后留着。这个里面都是服务器要装的mod代码。

read-normal-img

关闭游戏,steam界面上右键游戏,“管理”——“浏览本地文件”,先进入mods文件夹下,把能对上的mod代码的那些文件夹,全部上传到服务器,注意目录:

./donotstarvetogether_dedicated_server/mods/

此时能传的应该只有一小部分mod,剩下的mod在这里找:

刚才打开的游戏mod文件夹是:/steamapps/common/Don't Starve Together/mods

现在进入:/steamapps/workshop/content/322330/

在这个文件夹下,根据代码找到剩下的mod。先在电脑上随便找个地方把他们复制进去,然后把所有文件夹重命名为 workshop-代码 的格式,然后再传到服务器上去就好了。注意,全程不修改 dedicated_server_mods_setup.lua 这个文件,如果在里面setup了,那下一次启动服务器的时候就会自动把后面我们找到的mod删除,就白干了。

现在mod也全安装好了

五、后续启动工作

在我们刚才新建的run_dedicated_servers.sh,有一行代码是这样的:

./steamcmd.sh +force_install_dir "$install_dir" +login anonymous +app_update 343050 validate +quit

这个代码会在每次启动服务器的时候更新服务端,第一次运行是需要的,但是有一个很大的问题,后续每次运行的时候,他会清空所有mod。请直接删除这一行!!!或者在前面加一个井号+空格 “# ”把他注释掉!!!

然后启动服务器:

./run_dedicated_servers.sh

关闭服务器 Ctrl + C 键即可。

希望我的文档能有用哈

粒子群优化(Particle Swarm Optimization, PSO)是一种模拟鸟群或鱼群觅食行为的搜索算法,常用于解决优化问题。以下是简化的Python伪代码表示: ```python # 初始化粒子位置和速度 def initialize_particles(num_particles, bounds): particles = [{'position': np.random.uniform(bounds, bounds), 'velocity': np.zeros(len(bounds)), 'best_position': copy.deepcopy(particles['position']), 'fitness': np.inf} for _ in range(num_particles)] return particles # 更新粒子的位置和速度 def update_velocity_and_position(particles, best_positions, inertia=0.7, c1=2, c2=2, w=0.7): for particle in particles: r1, r2 = np.random.rand(), np.random.rand() # 随机数 particle['velocity'] = w * particle['velocity'] + c1 * r1 * (particle['best_position'] - particle['position']) + \ c2 * r2 * (best_positions['global_best_position'] - particle['position']) particle['position'] += particle['velocity'] # 确保粒子在边界范围内 particle['position'] = clipToBounds(particle['position'], bounds) # 计算并更新最佳位置和全局最佳位置 def evaluate_fitness(particles, objective_function): for particle in particles: particle['fitness'] = objective_function(particle['position']) if particle['fitness'] < particle['best_fitness']: particle['best_position'] = particle['position'] global_best_particle = min(particles, key=lambda p: p['fitness'])['position'] return particles, {'global_best_position': global_best_particle} # 主循环 def pso(optimizer, num_iterations, objective_function, bounds): particles = initialize_particles(optimizer.num_particles, bounds) for i in range(num_iterations): particles, best_positions = evaluate_fitness(particles, objective_function) update_velocity_and_position(particles, best_positions) return best_positions['global_best_position'] # 使用函数 optimizer = {'num_particles': 50} # 可调整参数 solution = pso(optimizer, 100, your_objective_function, your_bounds) ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值