BD3Modding-添加新职业或子职
让我们构建一个虚构的职业:战斗法师(Battlemage),它精通重甲和多种双手武器。我们还会让它能够使用一些法术。
首先为我们的职业创建一个新的模组。在本指南中,我们将使用Battlemage
作为模组名称。
定义 Progressions
第一步是为我们的新职业定义进度系统。这将告诉游戏角色在每个等级会获得什么。
打开Uuid Object编辑器。
我们将在我们的模组中添加一个Progressions表。
通过双击Progressions表,开始编辑您新创建的表格。
让我们从Name列开始。这是一个将在数据中使用的技术名称,因此请避免使用空格。添加名称并按下Enter键后,UUID列应会自动填充。
让我们将Level设置为1,将ProgressionType设置为0。这告诉游戏这确实是一个职业进程。
接下来,我们需要填写TableUUID。这个TableUUID在一个职业的所有等级中是共享的。这里有一个小技巧,可以先将UUID列中的值复制并粘贴到TableUUID中……
…然后右键单击UUID单元格,从下拉菜单中选择“Regenerate Value”。
现在,您应该在UUID和TableUUID列中看到不同的数值。
我们要确保我们的Battlemage具有一些特定特性:
- 2个法术槽
- 精通所有护甲
- 精通所有武器
我们使用Boosts列来处理这一点。您可以将各种精通和资源添加到Boosts中,并用;
将它们分隔开。
在此示例中,我们的最终行将如下所示:ActionResource(SpellSlot,2,1);Proficiency(LightArmor);Proficiency(MediumArmor);Proficiency(HeavyArmor);Proficiency(Shields);Proficiency(SimpleWeapons);Proficiency(MartialWeapons)
为了使用这些法术槽,我们的Battlemage需要一些法术,因此我们需要建立一个他们可以使用的法术列表。
让我们在左侧面板的Lists部分中创建一个新的SpellLists表
我们将在这个SpellLists表中创建两个列表:一个是戏法列表(cantrips),所有戏法都会直接赋予角色;另一个是1级法术列表,玩家需要从中进行选择。
在《博德之门3》中,所有法术都有一个类型前缀。例如,Shocking Grasp被引用为Target_ShockingGrasp。任何法术都可以按照以下结构引用:
Type_TechName
如果您已经创建了自定义法术,您可以在这里使用这些法术。该指南中的示例法术FireTouch,在这里将被引用为Target_FireTouch。
在这个例子中,我们将给玩家震荡掌(Target_ShockingGrasp
)和真实打击(Target_TrueStrike
)这两个戏法,并让他们从燃烧之手(Zone_BurningHands
)、跳跃(Target_Jump
)和大步奔行(Target_Longstrider
)中选择一个法术。 这意味着我们在SpellLists表格中的两个列表将是这样的:
你的UUID当然会不同。 现在,我们将每个列表的UUID复制回Progressions表格中的 Selectors 列。 由于我们想给角色所有列出的戏法(无需选择),我们将使用AddSpells()
。在括号中添加戏法列表的UUID。 我们想让玩家从列表中只选择一个法术,所以这里我们将使用SelectSpells()
。在括号中添加法术列表的UUID,后面跟两个参数: SelectSpells(<UUID>,1,0)
1
表示玩家必须选择1个法术0
表示玩家可以替换0个之前的法术
Selectors单元格中的最终行应该类似这样(别忘了换成你自己的UUID):AddSpells(714d1e3d-b436-4af7-9b40-107383e25a5d);SelectSpells(8fd1fe1e-ad9f-4d2c-a4c7-dcc687fc5ae6,1,0)
让我们在Progression中添加更多等级。 通过点击行号选择整行:
按Ctrl+C和Ctrl+V。该行应该在下面被复制,但有一个新的UUID。
将你新行中的等级改为2(或更高)。重复这个步骤几次,每次增加等级,直到你有前5个等级。
此时,验证所有行的TableUUID都相同,且每行都有唯一的UUID。 通过为每个额外等级定义更多的Boosts和Selectors,我们可以给战斗法师一些额外的酷炫特性。我们要按照下图所示填写Progressions表格(注意你的UUID几乎肯定与这张图不同!):
让我们来解释一下这些添加的内容。
2级, Selectors:
SelectPassives(<UUID>,1,Battlestance)
这允许战斗法师选择他们的战斗姿态。
<UUID>
: 这是战斗法师将要选择的PassivesList的UUID。- 在这个例子中,我们将直接重用Shared>Lists>PassiveLists表格中的现有列表:
- 找到游侠战斗风格,并复制UUID值。将这个值粘贴到2级Selectors的<UUID>部分:
SelectPassives(a0bdb113-1cce-45ac-94fb-72d4c3f207e9,1,Battlestance)
1
: 玩家可以选择的被动技能数量。Battlestance
: 这纯粹是风格文本 - 有时你不想将被动技能呈现为”被动”。这样,游戏会要求玩家选择一个战斗姿态,而不是被动技能。如果我们不想要这个风格文本,我们可以简单地写SelectPassives(<UUID>,1)
。2-5级, Boosts:
ActionResource(SpellSlot,2,3)
- 这给战斗法师额外的行动资源。这个例子给战斗法师额外两个3级法术位。
SpellSlot
: 给予的行动资源类型。2
: 给予的法术位数量。3
: 给予的法术位等级。
- 这给战斗法师额外的行动资源。这个例子给战斗法师额外两个3级法术位。
4级, AllowImprovement:
Yes
- 将AllowImprovement标记为Yes可以让战斗法师在这个等级获得一个专长,就像其他职业一样。
3-5级, Selectors:
AddSpells(<UUID>)
对于这些,我们要回到SpellLists表格添加几行,定义我们想要在3、4、5级给战斗法师的戏法。记住这些都将被给予。这里有一个基本例子展示你可以做什么:
一旦你在SpellLists中设置好新行,复制每个列表的UUID并将它们粘贴到Progressions表格中相应等级的Selector字段的
AddSpells()
中。使用上面的例子,它会看起来像这样:-
添加子职
我们将为战斗法师类添加三个子职业:锤法师、杖法师和剑法师。在你的Progressions表格中新建三行,并相应地命名它们。
使用UUID → TableUUID复制技巧给每个子职业一个唯一的TableUUID,并重新生成它们的UUID。现在你的Progressions表格中应该有四个不同的TableUUID,像这样:
对于每个子职业,让我们将Level设置为3
。这是战斗法师将获得它们的等级。
我们还要将ProgressionType设置为1
,这将定义它为子职业进阶。
职业描述
现在我们已经定义了职业在5级之前的内容,我们必须为职业添加定义以便它出现在角色创建中。为此,我们添加一个ClassDescriptions表格:
和往常一样,我们从填写Name开始。使用与Progressions相同的名称:Battlemage
。 在ProgressionTableUUID列中,从Progressions表格复制主职业TableUUID(在之前的截图中,它应该在绿色框中)。
这里还有一些其他需要填写的字段。
- DisplayName: 这是玩家在游戏中看到的内容。
- Description: 这是角色创建中的职业描述。
Primary Ability: 我们将使用Strength
。
Spell Casting Ability: 我们将使用Intelligence
。
Learning Strategy: 对于职业,这应该始终是AllChildren
。
Must Prepare Spells: 这个职业是否需要像德鲁伊或牧师那样准备法术?我们说No
。
Can Learn Spells: 这个职业能否像法师那样从卷轴中学习法术?No
。
CharacterCreationPose: 我们将使用所有职业都使用的一个 - 0f07ec6e-4ef0-434e-9a51-1353260ccff8
BaseHp: 这是职业起始的生命值。对于战斗法师,我们选择12
。
HPPerLevel: 这是职业每级获得的生命值。让我们定为7
。
CommonHotbarColumns、ClassHotbarColumns和ItemsHotbarColumns描述默认快捷栏分隔。我们将分别使用默认值9
、5
和2
。
- 这些数值的总和必须始终是16。
多重职业
如果你想让你的职业作为多重职业的选项出现,你需要在ClassDescriptions表格中添加一个额外的行。 在主战斗法师职业下,添加一个新行。这一行将是作为多重职业进阶的次级1级。除了以下内容外,其他都可以与原始战斗法师1级行相同:
UUID必须不同
IsMulticlass应该是Yes
它看起来会像这样:
现在当你去多重职业时,你的职业将出现在多重职业选项中。其余的等级将来自你已经设置的进阶。
保存你的工作
在我们继续之前,确保保存你到目前为止做的所有工作! 你做了吗? 当你确信你已经保存了你的工作后,关闭并重启编辑器。
继续职业描述
在Uuid Object Editor中重新打开ClassDescriptions表格。 我们需要添加三个新行 - 这些将是我们的子职业。用我们之前开始设置的相同子职业填写每行的Name。 在这些子职业的ParentUUIDs中,从下拉菜单中选择职业名称 - 在我们的例子中,就是Battlemage
。
让我们首先填写子职业的ProgressionTableUUID。过程与职业相同 - 打开你的Progressions表格并找到与每个子职业相关的TableUUID。从Progressions表格中复制并粘贴每个子职业的TableUUID到ClassDescriptions表格中相同子职业的ProgressionTableUUID字段中。
接下来,你需要为职业和子职业填写DisplayName、ShortName和Description。顾名思义,ShortName是指代该子职业的较短方式。这主要出现在游戏内的角色卡上。如果你不为战斗法师子职业填写ShortName,它们将在角色卡上显示为:
- Macemage Battlemage
- Staffmage Battlemage
- Swordmage Battlemage
这有点重复,所以我们将ShortNames填写为锤、杖和剑。这样,角色卡将改为显示:
- Mace Battlemage
- Staff Battlemage
- Sword Battlemage
对于其余的列(L到O),将职业的值复制到子职业。
将子职业选择添加到职业中
让我们在Uuid Object Editor中重新打开Progressions表格。 转到我们战斗法师的3级进阶。在SubClasses列中,通过在下拉菜单中双击添加所有3个新子职业。这允许玩家在达到战斗法师3级时选择他们想要的子职业。
这样,我们就完成了职业和子职业的主要技术设置!让我们保存我们的工作。
快速测试
要测试我们目前的创作,让我们加载一个关卡。就我们的目的而言,Basic_Level_A就可以了。
一旦关卡加载完成,切换到游戏模式。
将光标放在角色头像上,然后按Ctrl+Shift+L
升级你的角色。在游戏中,打开升级界面,然后点击添加职业按钮。
选择战斗法师。
你可以在这里看到职业描述,以及我们为初始等级定义的两个戏法。 完成你的1级战斗法师升级,然后继续升级几次直到你可以选择一个子职业。
你还会注意到我们的角色缺少装备,并且2级的战斗姿态被称为职业被动。让我们现在修复这些问题。
装备
装备在Stats Editor中定义。就像我们创建其他表格一样,让我们创建一个新的Equipment表格。
用你能识别为战斗法师的起始装备的内容填写Name。按照我们的内部指南,我们将使用EQP_CC_Battlemage
,但只要不包含空格,你可以随意命名。 我们将Melee
作为Initial Weapon Set,因为我们希望我们的战斗法师展示他们的大剑。在接下来的列(1, 2, 3, …)中,你可以定义角色将开始时获得的额外物品。尝试填写这些字段将打开包含所有可能物品的巨大下拉列表 - 你可以搜索以缩小可能性。
让我们使用WPN_Greatsword
、ARM_ScaleMail_Body
和ARM_Boots_Leather
。
现在,让我们打开ClassDescriptions表格。使用你上面定义的名称(EQP_CC_Battlemage)并将其放入职业的ClassEquipment字段中。只对职业这样做,不要对子职业做。
进阶描述
接下来我们将修复职业被动名称。为此我们需要在Progressions部分创建一个新的ProgressionDescriptions表格:
让我们填写我们想要向玩家展示的DisplayName和Description。在我们的例子中,我们想把它叫做战斗姿态。还记得我们之前在Progressions中放入的SelectPassives(<UUID>,1,Battlestance)吗?
这个”Battlestance”现在在这里很重要。我们把它放入SelectorId列。你的行应该看起来像这样:
现在,如果你再次在游戏模式中测试,你应该看到选择已经被正确命名:
提示: 在游戏模式中看不到正确的名称?试试关闭并重启编辑器。
职业图标
我们只需要改变我们的职业和子职业图标,包括在角色创建和快捷栏中。
准备资源
首先,我们需要用于职业和子职业图标的图像。这些应该是300x300像素的.dds
文件。
重要: 这些图标必须与ClassDescriptions UUID表格中的职业或子职业名称完全相同。 你需要将图像放在你的mod文件夹中,如下所示:
\Data\Mods\Battlemage\GUI\Assets\ClassIcons
\Data\Mods\Battlemage\GUI\AssetsLowRes\ClassIcons
快捷栏图标放在这里:
\Data\Mods\Battlemage\GUI\Assets\ClassIcons\hotbar
\Data\Mods\Battlemage\GUI\AssetsLowRes\ClassIcons\hotbar
就这样!你的图标现在应该在游戏中正确显示了。
DDS转换设置
1 | if image.mode == "RGBA": |
完成! 现在你已经创建了一个非常简单的带有三个子职业的职业。