DACrafting Framework

DACrafting Framework

允许模组制作者通过所提供的脚本框架,在他们的附加组件或模块中添加工艺技能。完全且轻松地自定义,可通过编辑包含的2DA表格来实现。

模组制作者资源和教程

原始描述:

这个模组应该能正常工作,但我没有进行过全面测试,所以你可能会时不时遇到一些问题。如果有必要,我会在这里进行修补,所以不用太担心,如果遇到任何问题,请告诉我。


重要提示:
此代码能使你受益于原生制作界面。也许可以通过调整 scaleform 影片来使用该界面,但这肯定无法通过脚本自动完成。


导入说明:
1. 下载 DACrafting - Framework.zip 并解压。
2. 保存好 phae_dacrafting.xls,你会需要了解其中的内容。此外,使用这些工作表作为基础会比使用 GDA 更容易...
3. 在工具集中选择 工具 > 构建器 > 构建器到构建器加载
4. 从你解压的文件夹中选择 DACrafting - Framework.dadbdata
5. 确保两个资源都勾选了“导入”框。如果你要导入到自己的模块中,你需要创建新的 strid,而不是使用默认的。
6. 点击确定。
7. 在你的面板中的 \Phaenan\DACrafting 下找到相关文件。


使用说明:
只需操作 2DA 文件。技能的 "spellscript" 字段必须引用一个调用 Phae_craft_HandleEvent() 例程的脚本。如有需要,请查看默认的 phae_dacrafting_init 脚本。实际上,你可以将这一个脚本用于你所有的技能,无论你在 2DA 表中定义了多少个制作技能。


更改浮动消息:
默认情况下,该库将使用示例包中的 strref 来打印必要的浮动消息。当然,这在你自己的模块中并不适用,因为这些 strref 依赖于示例包的对话表,这意味着你需要用你自己的 strref 替换它们。
以下是参考:
872251135 = "无效目标。"
872251136 = "情节条件未满足。"
872251137 = "试剂不匹配。"
872251138 = "没有这样的配方。"
872251139 = "已制作:"


角色阶段:
如果你在独立战役中使用此框架,你需要确保 char_stage 正确定义。如果你不明白我的意思,你可能不需要做任何事。否则,你需要在 getCharStage() 例程中(phae_dacrafting_h 的第 466 行)替换掉 "char_stage" 标签。


注意:
除了我刚才提到的 strref 和 char_stage,除非你了解自己在做什么,否则请避免修改 phae_dacrafting_h。虽然你可能想修改这些例程来定制框架以适应你的需求,但如果你不想,也没有必要。


╔════════════╗
║ 许可证及其他
╠════════════╝

║ 如果我有心考虑这些事情,我大概会把框架置于 GNU LGPL 许可下,这样你就可以自由使用和修改它。不过,请尽量保留库的版权声明。让我知道你在你的模组中使用了这个框架会是一个不错的奖励:知道我的工作没有白费,我会感到很开心。:o


║ 此框架不得添加到“Open House”内容索引中。

╚═══════════════════▐


保留的数据和信息:

文档 / 示例包
[spoiler]
在设计示例包中包含的三个示例制作技能时,我试图涵盖你在模块中使用框架时可能遵循的不同方法。但是,既然你可能无法读懂我的心思,我将解释一下每个技能你可能会期望什么。希望这能帮助你找出需要分析哪个示例。

.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_eghowto.png[/img]

首先,示例包不包含模块核心脚本。基本上这意味着安装 dazip 后它不会自动初始化。
要激活示例制作技能,请在游戏内打开开发者控制台并输入:
runscript phae_dacrafting_debug init
[img]http://dragonage.phaenan.net/dacrafting/dacftman-example_console.jpg[/img]

这样做将给予当前控制的角色这些技能,并会给你一组测试配方所需的所有试剂。

.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_egwpn.png[/img]

这个制作技能使用了一个预先存在的可放置物。由于这是一个类型 1 的技能,每个配方必须有一个特定的关键试剂。在这个例子中,我使用了模具来实现这一点,我认为这很好地展示了这个概念。一种模具,对应一件精确的物品;这种逻辑不会让你的玩家感到困惑。我想。也许吧。好吧,你会看到的...

除此之外,它相当直接。我认为这是最容易先研究的示例。

.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_egarf.png[/img]

在这个例子中,需要多个技能:每个配方一个。如果你要创建几十个配方,你可能需要考虑另一种制作技能类型,因为玩家的天赋/法术框架很快就会变得笨重。
请注意,如果你使用法术或天赋,这些技能不会对所有职业可用;显然,法术技能只会在法师的法术框架中显示,而天赋技能只会在战士和盗贼中可见。但是,有可能为每个配方创建两个版本:法师和非法师。这只是给你增加了工作量,但玩家应该不会注意到。

.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_eghan.png[/img]

最后一个示例可能会让你感兴趣,因为它不是通过天赋、法术或技能激活的,而是通过使用放置在物品栏中的快捷物品。此外,它不使用预先存在的可放置物,所以基本上玩家不会觉得他们在使用容器。他们将激活快捷物品,看到一个询问所需试剂的框架,这个框架关闭后制作尝试的结果就会显示出来。
由于这是一个类型 3 的制作技能,你可以完全自由地决定配方的试剂;但是你必须确保两个不同的配方共享完全相同的试剂组合。如果发生这种情况,ID 最低的配方将是脚本唯一会使用的配方。

请注意,即使我没有在这些示例中做到,你也可以为你的技能定义视觉特效和/或动画;如果你对此还不清楚,请查看 [url=http://social.bioware.com/wiki/datoolset/index.php/ABI_base.xls]ABI_base[/url] 文档。
[/spoiler]


2DA 表文档
[spoiler]
虽然框架可以在不接触任何脚本的情况下使用,但深入理解 2DA 表如何相互关联至关重要。因此,源代码包包含了用于生成示例表的 Excel 文件。这些文件通过注释和解释行进行了备注,但这些注释是 DACrafting 特有的,并不描述原版表的结构。这意味着对原版 2DA_base 或 ABI_base 理解不深的人应该先查看相关的工具集 Wiki 页面:
- [url=http://social.bioware.com/wiki/datoolset/index.php/2DA]通用 2DA 介绍[/url]
- [url=http://social.bioware.com/wiki/datoolset/index.php/2DA_base.xls]2DA_base[/url]
- [url=http://social.bioware.com/wiki/datoolset/index.php/ABI_base.xls]ABI_base[/url]
- [url=http://social.bioware.com/wiki/datoolset/index.php/Guitypes.xls]Guitypes[/url]


.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_m2dabase.png[/img]

无需更改此表,但如前所述,理解它的工作原理至关重要。基本上,这里定义的条目将共享相同前缀的 2DA 工作表组合在一起。例如,在示例包中,twophae_dacft_reags* 表被合并成一个 M2DA 表,这意味着 ID 值不应冲突。

[url=http://dragonage.phaenan.net/dacrafting/dacftman-m2dabase.png][img]http://dragonage.phaenan.net/dacrafting/dacftman-m2dabase_th.png[/img][/url]


.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_skills.png[/img]

此 M2DA 表保存了通过 DACrafting 框架添加的每个制作技能的详细信息。由于它是合并的,你需要使用唯一的后缀,并确保你使用的 ID 不与使用该框架的任何其他人冲突。
显而易见的是,让我们看看这个表的结构。

[img]http://dragonage.phaenan.net/dacrafting/dacftman-skills.png[/img]


表前缀将被脚本用来访问该制作技能特有的表。因此,它最好是唯一的。

逻辑列定义了脚本如何识别配方:
[list]
[]类型 1:
每个配方必须使用一个特定的试剂,该试剂在配方表中通过 CondItemTag 字段定义。[
]类型 2:
配方通过用于触发制作技能的技能来识别。想想无冬之夜2:玩家必须在制作容器上施放特定的法术才能使用正确的配方。技能通过配方表中的 CondAbilityID 字段与配方关联。[*]类型 3:
配方将通过检查容器中发现的精确试剂组合与配方表中的试剂列进行匹配来猜测。
[/list]
AbilityID 字段对于类型 1 和 3 的制作技能是必需的。它定义了哪个技能被授权触发制作技能;这个 ID 显然必须与相关的 ABI_base 条目匹配。
类型 2 的制作技能不需要此字段,因为它们不是由单个技能触发的,而是通过一系列在 phae_dacft_rcpabi 表中定义的特定配方技能触发的。

最后,placeable 定义了哪个可放置物将存放试剂。你可以使用现有可放置物的标签,或者将该字段留空为 "auto"。当制作技能设置为 "auto" 时,脚本会简单地创建一个临时的隐形可放置物。
重要提示:
触发制作技能的技能必须能够以该可放置物为目标。当设置为 "auto" 时,技能必须能够以控制的角色为目标(targettype=1),否则技能必须能够以指定可放置物为目标(targettype=8)。

.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_rcpabi.png[/img]

此 M2DA 表保存了关于类型 2 制作技能的信息。更准确地说,它引用了特定配方的技能并将这些技能与相关的制作技能关联起来。

[img]http://dragonage.phaenan.net/dacrafting/dacftman-rcpabi.png[/img]


这又是一个合并表,所以唯一的 ID 至关重要。但是,由于这里的 ID 实际上是根据 ABI_base 技能的 ID 键控的,所以没有太多可担心的;你反正不会希望你的 ABI_base 条目与其他人的冲突。

在这里,CraftskillID 必须是 phae_dacft_skills 表中定义的有效制作技能 ID。

.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_recipes.png[/img]

你将需要为每个制作技能创建一个 2DA 配方表。这些表不会被合并,其中使用的 ID 不需要对你的制作技能或模块唯一;它们也不需要连续,你可以相当自由。
此表保存了与制作技能配方相关的所有信息:条件、所需试剂以及要创造什么。让我们看看结构:

[img]http://dragonage.phaenan.net/dacrafting/dacftman-recipes.png[/img]


信息量很大,是的,但我愿意相信这是相当逻辑清晰且易于理解的。

CondItemTag 列涉及类型 1 的制作技能;类型 2 & 3 的此字段将留空。对于类型 1 的制作技能,你必须通过在此处放置其标签来定义关键试剂;这里的关键试剂是指该配方在整个制作技能中独有的试剂。它可以是配方卷轴、模具,或任何你能想到的东西。但是,有两个限制:
- 玩家必须能够将该试剂放入容器中。这意味着不能是剧情物品。
- 玩家必须能够只放置 1 个单位的该试剂。如果它是一个可堆叠物品,你需要将它添加到 phae_dacft_reags 表中。
应将该关键试剂添加到配方的试剂列表(Reagent1、Reagent2 (...) 字段)中,因为这会自动完成。

同样,CondAbilityID 列是定义类型 2 制作技能中使用的关键技能的列,对于类型 1 & 3 的制作技能将留空。每个这样的技能必须对一个配方是唯一的,并且必须能够以 phae_dacft_skills M2DA 表中定义的可放置物为目标。

OptPlotUIDOptPlotFlag 字段可用于将配方限制在几乎任何你能想到的条件;该标志可以是主标志或已定义标志。例如,在下面的配方摘录中 - 来自示例制作技能的达利什箭矢 - 脚本将自动检查 UID 为 4EB13E46F6FF497A853165A0B0C2718B 的任务的已定义标志 256
[img]http://dragonage.phaenan.net/dacrafting/dacftman-recipes_flags.png[/img]
基本上,该定义标志将该配方限制为达利什角色。不错吧。

显然,ResultResResultStack 定义了制作尝试成功时要创造的物品数量和种类。
至于五组 ReagentXReagentXCount 列,它们用于设置每个配方所需的试剂列表。请注意,配方必须至少有一种试剂(不包括关键试剂),并且玩家必须放置你在这里定义的精确数量。希望你能在框架中找到一个可放置物核心脚本,使得拆分堆叠变得非常容易。(参见示例包)

.

[img]http://dragonage.phaenan.net/dacrafting/dacftman-st_reags.png[/img]

说到这个:为了让容器自动拆分试剂堆叠,相信我你会希望这个功能正常工作的,你需要扩展 phae_dacft_reags M2DA 表。该表保存了拆分所有起源与觉醒试剂堆叠所需的信息,但它不包含宝石,或者显然,也不包含你自己的自定义试剂。
所以,你需要创建一个新的 phae_dacft_reags_youruid 表来定义这些试剂。希望这非常简单:

[img]http://dragonage.phaenan.net/dacrafting/dacftman-reags.png[/img]


ReagentTag 中输入试剂标签,在 ReagentRes 中放入资源,就完成了... 只要确保 ID 不与使用 M2DA 的其他 DACrafting 附加组件冲突。
[/spoiler]

[line]
[img]https://staticdelivery.nexusmods.com/images/140/42041790-1490230432.png[/img]
[b][url=https://whereisbioware.wordpress.com/]网站[/url][/b] | [b][url=https://forums.nexusmods.com/index.php?/topic/4851880-bioware-continuity-network-bcn-preserving-the-bsn/]NexusMods 论坛[/url][/b]