赛博朋克2077模组教程 - 修改武器的基础属性
Player4771
2025年03月29日 22:56

在这篇文章中,我们将从头创建一个简单的模组,以编辑游戏中一个指定武器的基础属性。

 

需要准备的软件/工具:2077游戏本体,Cyber Engine Tweaks(CET)

*模组与CET的安装本文不详细介绍,请自行探索。

 

大体步骤分为两步:查找和修改。

 

第一步:查找

 

我们以游戏中的一把霰弹枪:DB4-针式(简称针式)为例,目标是修改这把武器的射速与伤害。

首先,我们要知道这个物品在游戏代码中的名称。

打开这个网址:

https://docs.google.com/spreadsheets/d/1iuq4Srh_661PdY_17bnrU15UbtCLieO_0ZhQ0uqQ0_Y/edit?gid=966237175#gid=966237175

这是一份2077中所有物品的代码表。底部有不同物品的分类,点击Weapons - All v2.2,我们可以看到所有武器的名称和给予指令等信息。

我们猜测,无论什么语言,针式的名称中大概率都带一个”Db-4”。向下翻找,我们果然找到了对应的英文名。不过以Db-4开头的有两个武器:Db-4 Igla和Db-4 Palica。分辨哪把是针式的方法很简单:打开游戏,用指令都给一把看看就知道了。

在文档中复制其中一个指令,如Game.AddToInventory("Items.Preset_Igla_Default", 1),打开游戏,在CET的Console窗口中粘贴,回车。

物品栏中多了一个针式,说明Db-4 Igla就是针式的名称。

接下来,关闭CET的Console窗口,点击”TweakDB Editor”,我们会看到一个新的界面,里面有数量庞大的一堆条目。

隆重介绍:TweakDB - 游戏数据库。

2077中,游戏中的各种”属性”,即物品属性、游戏数据等底层资源,存储在一个庞大的数据库中,这个数据库就是TweakDB。

不过,我们不需要知道TweakDB的组成或结构,我们现在只需要做一件事:在其中找到针式的数据。

 

接下来跟着我做:在TweakDB窗口的搜索框中输入”Items.Base_”,在搜索结果中找到”gamedataConstantStatModifier_Record”这一条目,展开。

这个条目中有非常多的数据,其中就包含武器属性。向下翻找,直到其中出现以”Items.Base_Igla”开头的条目,这些条目就是针式的属性。

这些条目的命名非常有规律,我们可以从名称中分析出其中可能包含的信息。以”Items.Base_Igla_Damage_Stats_inline0”为例,Igla为武器名称,Damage_Stats是这一个条目的分类,说明这个条目应该是针式的伤害数据。

这里附上各个分类(大致)对应的属性:

Aim_Stats: 瞄准

Constant_Stats: 散布、后坐力等

Damage_Stats: 伤害

Hanling_Stats: 装弹、瞄准等

Recoil_Stats: 后坐力

Spread_Stats: 散布

Technical_Stats: 射速、弹夹容量、弹射物等

 

展开条目,我们可以看到其中的内容。

这个条目分为三部分:modifierType(编辑类型),statType(属性类型),value(值)。每一部分都是一个键值对。

我们可以把这三部分间的关系概括为一句话:什么怎么样了多少。“什么”是被修改的属性,这里的值是BaseStats.DPS,武器的每秒伤害(注:2077中武器没有单独的”伤害值”,只有DPS);”怎么样了”是这个属性被怎么修改,值是Additive,虽译为添加,但实际上起”等于”的作用,类似的Multiplier是乘;”多少”就是这个属性被修改的值,这里是85。把这些信息合起来,我们就能知道这个条目的内容:(针式的)DPS等于85。

装弹量在Technical_Stats中,弹夹容量的条目为Items.Base_Igla_Technical_Stats_inline2,展开,我们能看到里面的默认数值为2,也就是弹夹中有两发子弹。注意:属性中有一类为Items.Base_Igla_NPC_Technical_Stats_...,这控制的是NPC使用这把武器时的属性,玩家的则是Items.Base_Igla_Technical_Stats。

除了弹夹容量和DPS,武器还有很多基础属性,这里不再详细介绍。

武器的部分基础属性介绍: https://wiki.redmodding.org/cyberpunk-2077-modding/for-mod-creators-theory/references-lists-and-overviews/cheat-sheet-tweak-ids/weapons/cheat-sheet-weapon-basestats

 

第二步:修改

 

既然我们在TweakDB Editor中找到了属性,那么我们就可以在这里直接修改,然后在游戏里看到修改后的结果。

我们把DPS翻倍,改为170;弹夹容量改成20,回车保存。

接下来关闭CET界面,重新读取存档(TweakDB Editor的更改要重载一下才能生效)。

加载完成后,拔出枪,我们能看到子弹数已经变成了20。

不过查看武器详情时,我们发现伤害并没有像我们想象的一样翻倍,反而变少了。

(武器伤害从438变成了219)

这说明DPS与伤害并不是简单的对应关系。伤害不仅受DPS影响,也受其它属性影响,如弹夹容量增多会使单发伤害减少。具体的伤害公式不好推测,如果需要精确修改伤害,多次尝试逐渐逼近即可。

 

现在,我们学会了如何通过TweakDB Editer修改武器的基础属性。概括一下流程:找到武器的英文名 ->在TweakDB的gamedataConstantStatModifier_Record中查找包含Items.Base_武器名的条目 -> 查找需要修改的属性 -> 修改属性值。

 


接下来,我们要制作一个模组,让属性的修改自动进行。

简单介绍一下原理:制作一个脚本,脚本中有修改武器属性的指令,让脚本自动运行就可以自动修改武器的属性。脚本使用lua语言,但我并不打算进行详细介绍,这里只提供一个最简单的例子:

registerForEvent("onInit", function()

      

end)

这段代码给一个事件附加了一个功能: 在onInit(即游戏加载)发生时执行一个函数,函数内容就是function()和end中间的区域。上面的代码中两者中间啥都没有,所以这代码什么都不会干。根据我们的需求,我们要更改两个属性的值,这两个属性是我们刚刚展开的两个条目: Items.Base_Igla_Damage_Stats_inline0和Items.Base_Igla_Technical_Stats_inline2,值是这两个条目中的value项。

在TweakDB中,这两个条目的类型是”Flat”。TweakDB中主要有两种结构:Record和Flat。Flat是一个键值对,键值对就是”键对应值”的关系,不过”值”不一定是数,它可能是一串字符,一个条目(还有可能是另一个键值对)。Record则是Flat的集合。打个比方的话,TweakDB像一本书,书里有很多文章,Record是书中文章的名字,Flat则是文章的章节名,一个章节名对应着一个章节的内容。

要在脚本中修改Flat,我们要使用一个函数: SetFlat。这个函数的使用方式:

TweakDB:SetFlat(flatName: string, newValue: object)。

看不懂?简单的描述:

TweakDB:SetFlat(属性名称(用双引号括起来), 属性的值)。

我们需要的两个指令如下:

TweakDB:SetFlat("Items.Base_Igla_Damage_Stats_inline0.value",170)

TweakDB:SetFlat("Items.Base_Igla_Technical_Stats_inline2.value",20)

.value的意思是”(条目)的 value(值)”,这两条文本可以在TweakDB窗口中的条目里直接复制。

注意:代码中所有的双引号都必须用英文引号 "" 而不是中文引号 “” 。

放到上面的代码中,就是:

registerForEvent("onInit", function()

    TweakDB:SetFlat("Items.Base_Igla_Damage_Stats_inline0.value",170)

    TweakDB:SetFlat("Items.Base_Igla_Technical_Stats_inline2.value",20)

end)

 

接下来,我们要把脚本放在游戏能够识别的地方。

以MO2为例,新建一个空模组,在其中创建一个Bin文件夹,然后按以下路径创建文件夹: Bin\x64\plugins\cyber_engine_tweaks\mods\Player4771_ScriptTest

(如果手动安装,从Bin文件夹开始按照上边的路径新建文件夹即可)

Script Test是这个模组的名称,Player4771_ScriptTest是cet模组名,都可以自行修改。

接下来在其中新建一个空文件,命名为init.lua(必须是这个名字,否则无法识别),用记事本打开,把代码粘贴进去,保存关闭,启动游戏。

拿出针式,子弹数20,大功告成!

 

至此,我们已经成功制作了一个修改武器基础属性的模组脚本。不过,本文介绍的内容都是脚本制作中最简单的知识,如果你有兴趣制作功能更加强大的脚本,可以查阅下面的几个链接:

Redmodding Wiki上关于修改游戏记录的内容:

https://wiki.redmodding.org/cyberpunk-2077-modding/for-mod-creators-theory/core-mods-explained/tweakxl/tweakxl-changing-game-records

制作模组脚本的简单教程(需要科学上网): 

https://docs.google.com/document/d/1pPN_RiluE-4PwGWOxdEVOegfBEaEsd5APHndr82FdPo/edit?tab=t.0

 

 

 

感谢观看