设置技能

创作者: Neocor
已更新:2026-09-22 23:54:54
31KB

关于此 MOD

将硬编码的玩家技能数值变为可配置项:弓拉弓时间、弩装填、伤害曲线、耐力消耗、潜行、跳跃、经验倍率等。服务器可将自身配置推送给客户端。

设置技能

将 Valheim 中每个硬编码的玩家技能数值放入配置文件中。基于 Valheim 构建 1.0.x 和 BepInEx 5.4.23.

促使制作此模组的例子:一把弓需要 2.50秒 在弓0和 0.50 秒 弓术达到100,游戏里没有任何办法改变这一点。有了这个模组:

[弓] 技能0时拉弓时间倍率 = 1.2 ## 2.5 * 1.2 = 技能0时3.00秒 技能100时拉弓时间倍率 = 0.4 ## 2.5 * 0.4 = 技能100时1.00秒

配置文件: BepInEx/config/neocor.SetUpSkills.cfg编辑会在下次重新加载时生效——该文件受到监视,因此在服务器上无需重启即可重新调整。

📖 WIKI.md 是完整配置指南每个设置都用通俗易懂的语言解释,表格中列出原始数值,提供现成的预设方案,还有故障排除指南。每个设置还会在生成的文件内以注释形式附带自己的说明。 .cfg.

安装

所有客户端都必须安装此模组。 瓦尔海姆在拥有玩家的机器上计算所有技能效果: 角色.获取技能系数() 返回 0 对于任何不是本地的东西 玩家,以及使用它的方法(玩家.更新攻击弓拉弓, 玩家.检查奔跑, 物品掉落.物品数据.获取消耗耐力值, 攻击.连发投射物, ...) 永远只在那里运行。伤害在攻击者客户端上随机生成,只有结果通过网络发送。仅服务器安装不会有任何改变。

哪里 什么
客户端 掉落 设置技能.dll 进入 瓦尔海姆/BepInEx/插件/.
专用服务器 为Valheim安装BepInEx整合包,将同一个DLL放入其 BepInEx/plugins/,并使用以下命令启动服务器: 启动服务器BepInEx.bat — 存货 启动无头服务器.bat 不加载Doorstop。

在服务器上也安装它是可选的,但推荐这么做:服务器随后会将它的配置分发给每个安装了该模组的客户端,这样所有人都在相同的平衡设置下游戏。参见 服务器同步玩家 无 模组仍可加入;它们只是保留原版数值。

设置的层级结构

层级 B — 端点调节项(常规入手方式)

其中每一项都会替换一个原版常量。默认值即原版数值,因此未修改的配置文件与原版逐位相同。

章节 设置 香草 它控制什么
弓 技能0抽取时间倍率 / 技能100时 1.0 / 0.2 将时间绘制为武器时间的倍数。 绘制持续时间最小值 (每把弓2.5秒)。
弓 技能0时的绘制时间秒数 / 技能达到100 0 / 0 绝对蓄力时间(秒),忽略武器基础值。两者必须均大于0才能覆盖乘数设置。
弩 技能0时换弹时间倍率 / 技能100级 1.0 / 0.5 装填时间倍率为 装填时间.
战斗 技能100时耐力消耗减少 0.33 技能达到100时,拔刀不再消耗耐力。
战斗 技能满级时绘制灵力消耗降低 0.33 埃特尔也一样。
战斗 技能100时攻击耐力消耗降低 0.33 技能达到100时,攻击不再消耗耐力。
战斗 技能100时攻击削减乙太 0.33 攻击的埃特消耗。
战斗 技能100时攻击降低生命值 0.33 攻击的生命值消耗(血魔法)。
伤害 技能零时最小系数 / 技能100时最大系数 0.4 / 1.0 随机散布前的伤害倍率。
伤害 随机范围 0.15 伤害掷骰的半宽。 0 造成固定伤害。
格挡 技能100格挡加成 0.5 额外格挡能力,以基础值的分数表示。
跑 技能0时耐力倍率 / 技能100级时 1.0 / 0.5 奔跑耐力消耗。
奔跑 技能100时速度加成 0.25 额外奔跑速度(+25%)。
潜行 技能0时耐力倍率 / 技能100时 1.0 / 0.25 潜行耐力消耗。
潜行 耐力指数 0.5 潜行耐力曲线的形状。原版是平方根; 1.0 使其线性化。
潜行 潜行基地技能100 / 轻量化潜行技能100级 0.2 / 0.4 在黑暗中的可见度与环境光的权重,技能100时。越低越隐蔽。
闪避 体力倍率技能0 / 技能达到100时 1.0 / 0.5 闪避耐力消耗。
跳跃 技能100级时的强制奖励 0.4 额外跳跃力(+40%),向上并向前。
建筑 技能100时耐力消耗 0.5 技能达到100时,移除建造耐力消耗。
建筑 耐久度损耗倍率 1.0 缩放工具自身的 最大放置耐久度.

层级 A — 每技能曲线([曲线])

每个技能三个数值,共24个技能:

[Curve] Bows.Level0Factor = 0 ## 技能在0级时的数值 Bows.Level100Factor = 1 ## ……以及100级时的数值 Bows.Exponent = 1 ## 1 = 线性,>1 = 后期收益高,<1 = 前期收益高

这会重新映射技能因子本身,使其达到 一切 该技能涉及的内容——包括由预制件中存储的数值驱动的效果,这些是B层无法触及的:游泳耐力、钓鱼耐力、农耕收获范围、制作速度和额外产出几率、放置耐久度以及骑乘。

A层与B层共同作用。A层决定收益随等级提升的速度;B层决定最终收益落点。设置 弓箭.100级系数 = 0.75 使用默认图层B时,绘制时间为 Lerp(2.5, 0.5, 0.75) = 1.0 秒 技能达到100时——结果与顶部示例相同,但也会随弓术提升而增强 伤害 同理,当你只想要一个效果时使用图层B,当你想要整个技能时使用图层A。

第三层——经验([经验])

设置 香草 效果
<技能>.获得倍率 1.0 每项技能获得的经验值。可与世界修正叠加。
曲线指数 / 曲线缩放 1.5 / 0.5 经验墙: 向下取整(等级加一)的1.5次方乘以0.5加0.5。指数越低,升级越快。
死亡损失系数 -1 死亡时每个技能损失的比例。 -1 保留游戏自身的价值(0.05); 0 毫无损失。

等级上限保持100级。提高上限就意味着要重写 技能.技能.提升 和 等级 / 100 除数,这涉及存档数据,因此故意不在范围内。

服务器同步

与 [ServerSync] 服务器是否具有权威 = 真 (默认设置,仅在服务器上读取)服务器在客户端连接时,通过名为以下名称的路由RPC将其完整配置发送给每个客户端 技能配置。客户端会应用它 仅内存中 — 它自己的 .cfg 磁盘上的内容永远不会被写入,本地值会在断开连接的瞬间恢复。在运行中的服务器上编辑配置文件会重新加载它,并重新推送给所有已连接的玩家。

客户端绝不向任何地方发送配置,服务器也绝不接受来自客户端的配置。

它是如何被修补的

目标 种类 为什么
技能.获取技能系数 后缀 A层曲线。
类人型.获取攻击抽取百分比 前缀 需要一个不同的基础,而不仅仅是一个不同的终点。
武器装载时间 前缀 一样。
物品掉落.物品数据.获取消耗体力值 / 获取绘制法力消耗 前缀 双线法。
攻击.获取攻击以太(角色, 物品数据) 前缀 两行法。
获取随机技能系数 / 获取随机技能范围 前缀 掷骰及其提示框,保持同步。
物品掉落.物品数据.获取格挡值(整数, 浮点数) 前缀 双线法。
玩家.获取位置耐久度 前缀 缩放预制体字段,而非常量。
提升技能, 技能.技能.获取下一级需求, 死亡时技能 前缀 经验。
攻击.获取攻击耐力, 攻击.获取攻击生命值, 角色.跳跃, 玩家.检查奔跑, 玩家.获取奔跑速度系数, 玩家.潜行中, 玩家.更新潜行, 玩家.获取闪避体力消耗, 玩家.获取耐力等级 转译器 技能常量在方法内是唯一的,所以只替换那个字面量就能让其他所有原版逻辑继续运行。比起重写,这在游戏更新中要稳健得多。

每个补丁独立安装。如果游戏更新重命名了某个方法或移动了某个常量,那一个效果会回退到原版,日志中会出现警告——其余部分继续正常工作。设置 [常规] IsDebug = true 查看计算后的数值以及哪些转译器命中。

[通用] 已启用 = 否 把每个开关恢复为原版默认值而不卸载任何内容,转译后的代码也是如此(它无法在运行时撤销补丁,因此会改为查找原版常量)。

建筑

使用.NET SDK:

dotnet build SetUpSkills\SetUpSkills.csproj -c Release

用以下内容覆盖游戏路径 -p:ValheimPath="C:\Path\To\Valheim" 如果它没有开启 G:.

没有SDK, 构建脚本.ps1 自己找到了一个C#编译器,并且 package.ps1 生成 Thunderstore 压缩包:

powershell -ExecutionPolicy Bypass -File SetUpSkills\build.ps1 powershell -ExecutionPolicy Bypass -File SetUpSkills\package.ps1

备用路径可能会落在 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe,它只懂 C# 5。源内容目前仍在该子集内——没有字符串插值,没有 名称,否 ?。,没有表达式主体成员——所以两种构建路径都能工作。只有当你也不再使用 build.ps1.

Valheim: 英灵神殿 的热门 MOD

探索适用于 Valheim: 英灵神殿 的最佳MOD,带来新功能、升级画面,以及令人兴奋的方式来改变您的游戏体验。

使用 Xmod 解锁 Valheim: 英灵神殿 的全部潜力 — 今天就探索这些顶级 MOD!