让我们构建一个虚构的职业:战斗法师(Battlemage),它精通重甲和多种双手武器。我们还会让它能够使用一些法术。

首先为我们的职业创建一个新的模组。在本指南中,我们将使用Battlemage作为模组名称。

定义 Progressions

第一步是为我们的新职业定义进度系统。这将告诉游戏角色在每个等级会获得什么。

打开Uuid Object编辑器。

我们将在我们的模组中添加一个Progressions表。

通过双击Progressions表,开始编辑您新创建的表格。

让我们从Name列开始。这是一个将在数据中使用的技术名称,因此请避免使用空格。添加名称并按下Enter键后,UUID列应会自动填充。

让我们将Level设置为1,将ProgressionType设置为0。这告诉游戏这确实是一个职业进程。

接下来,我们需要填写TableUUID。这个TableUUID在一个职业的所有等级中是共享的。这里有一个小技巧,可以先将UUID列中的值复制并粘贴到TableUUID中……

…然后右键单击UUID单元格,从下拉菜单中选择“Regenerate Value”

现在,您应该在UUIDTableUUID列中看到不同的数值。

我们要确保我们的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: 给予的法术位等级。
  • 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

CommonHotbarColumnsClassHotbarColumnsItemsHotbarColumns描述默认快捷栏分隔。我们将分别使用默认值952

  • 这些数值的总和必须始终是16。

多重职业

如果你想让你的职业作为多重职业的选项出现,你需要在ClassDescriptions表格中添加一个额外的行。 在主战斗法师职业下,添加一个新行。这一行将是作为多重职业进阶的次级1级。除了以下内容外,其他都可以与原始战斗法师1级行相同:

  • UUID必须不同

  • IsMulticlass应该是Yes

它看起来会像这样:

现在当你去多重职业时,你的职业将出现在多重职业选项中。其余的等级将来自你已经设置的进阶。

保存你的工作

在我们继续之前,确保保存你到目前为止做的所有工作! 你做了吗? 当你确信你已经保存了你的工作后,关闭并重启编辑器。

继续职业描述

在Uuid Object Editor中重新打开ClassDescriptions表格。 我们需要添加三个新行 - 这些将是我们的子职业。用我们之前开始设置的相同子职业填写每行的Name。 在这些子职业的ParentUUIDs中,从下拉菜单中选择职业名称 - 在我们的例子中,就是Battlemage

让我们首先填写子职业的ProgressionTableUUID。过程与职业相同 - 打开你的Progressions表格并找到与每个子职业相关的TableUUID。从Progressions表格中复制并粘贴每个子职业的TableUUID到ClassDescriptions表格中相同子职业的ProgressionTableUUID字段中。

接下来,你需要为职业和子职业填写DisplayNameShortNameDescription。顾名思义,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_GreatswordARM_ScaleMail_BodyARM_Boots_Leather

现在,让我们打开ClassDescriptions表格。使用你上面定义的名称(EQP_CC_Battlemage)并将其放入职业的ClassEquipment字段中。只对职业这样做,不要对子职业做。

进阶描述

接下来我们将修复职业被动名称。为此我们需要在Progressions部分创建一个新的ProgressionDescriptions表格:

让我们填写我们想要向玩家展示的DisplayNameDescription。在我们的例子中,我们想把它叫做战斗姿态。还记得我们之前在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
2
3
4
5
6
7
if image.mode == "RGBA":
if sRGBBool:
target_mode = "BC7_UNORM_SRGB"
else:
target_mode = "BC7_UNORM"
if image.mode == "RGB":
target_mode = "BC1_UNORM"

完成! 现在你已经创建了一个非常简单的带有三个子职业的职业。