NGE - 昆特牌正在恢复...重写中...移植中...

NGE - 昆特牌正在恢复...重写中...移植中...

一个NGE更新/移植版本,重制了一个旨在恢复"开发过程中遗失"的昆特牌牌的模组。通过控制台为已有存档提供升级功能。完全向后兼容,仅包含CDPR原始作品内容。

昆特牌

昆特牌恢复...重写版(GRR)

由 Maciej Polanski 制作的模组,用他的话来说,这是"受到 adamaskoff 最近对旧模组更新的启发,而这个旧模组本身也只是对更早模组的更新。"

新的 NGE 更新似乎破坏了模组的功能,因为它新增了 GOG 卡牌——杰洛特、希里和萝卜。
我更新/合并了旧模组中的 gwintManager.ws 脚本,将其替换为次世代更新中的版本。
这也应该能修复因在启用旧模组时获得 GOG 卡牌而损坏的存档文件!

以及 2 个 XML 文件:gameplay/items/def_gwint_cards_final.xmlgameplay/items_plus/def_gwint_cards_final.xml

原作者的脚本 modGwintRestoreRewritten.ws 完全未被改动。
他们替换卡牌的方法和 gwintManager 行为基本保持不变。

因此,我将在此复制粘贴旧描述以供参考。遗憾的是,他们关闭了账户,所以我无法联系他们以获取许可并更新他们的旧仓库。然而,所有功劳都归于他们,是他们发现了问题并在原始模组中全面解释了一切。

要使用这些命令,需要先打开调试控制台,可以在这里找到

安装

modGwentRestoreNGE 放入《巫师3》游戏目录下的 Mods 文件夹中即可。

版本(选择其一)

  • 1.0s:手动版本,兼容原版,你需要自己运行命令。grrUpdateSafe 向后兼容,而 grrUpdateRisky 不兼容。
  • 1.0a:自动魔法版本,与原版不兼容。当昆特牌菜单打开时自动执行命令。感谢 byblomod。

针对原版。

这个模组是关于什么的?(技术小谈)

在内部,玩家可以拾取或赢得的 "cards-items" 与在昆特牌游戏中使用的 "cards-gwent"GwintManager 类)是完全不同的实体。当玩家找到一个 card-item 时,该卡牌会作为隐形物品添加到物品栏中,然后一个新的 card-gwint 会被添加到 GwintManager 中。理论上,这应该是一对一的映射关系。但看起来负责北方和尼弗迦德牌组的人员搞混了,导致一些 cards-items 被映射到一个 card-gwint 上(形成堆叠卡牌),而其他 cards-gwint 则未被使用。

此外,卡牌物品的命名规则是 "xxx; xxx2; xxx3",而图片的命名规则是 "xxx; xxx_1; xxx_2"。这导致了一些图片被错误分配。GRR 试图解决这个问题,同时避免添加任何非 CDPR 的内容。

原版模式(100% 向后兼容)

  • 安装模组后,AI 对手开始使用还原卡牌。
  • 平衡性不受影响,因为这些只是旧卡牌的替代版本,仅更换了新图片。
  • AI 卡组不会被保存,而是每次随机生成。
  • 因此如果卸载模组,还原卡牌会安全消失,不会留下任何痕迹。
  • 玩家不会获得任何恢复的卡牌,因为这样的存档游戏不会与原始版本 100% 相同。玩家可以使用下面描述的控制台命令,用恢复的卡牌替换自己堆叠的卡牌。这是与旧模组的主要区别,在旧模组中开始新游戏会让玩家获得恢复的卡牌——因此无法 100% 确定恢复到原始版本。
  • 玩家可能会在某些卡牌上看到新的固定图片(例如贫弱的步兵)——如果卸载模组,这些图片会消失。

命令 grrUpgradeSafe(仍保持向后兼容)

GRR 允许玩家通过控制台命令 grrUpgradeSafe 自动将卡牌替换为带有附加功能的替代版本。

这将替换《巫师3》中一直存在的部分卡牌,用替代版本替换 GwintManager 中的一些卡牌。存档仍然向后兼容,但不完全相同。如果卸载此模组,被替换的卡牌将保持为单独的卡牌(不会堆叠),并且大多数会恢复为普通的基础图片。

此功能可以安全地多次调用。
并且应该如此,以替换下一次掠夺的卡牌。

建议使用此模组时调用此函数。

命令 grrUpgradeRisky(非向后兼容)

替代蓝衣铁卫和第二座攻城塔的卡牌原本仅以图片形式存在,因此在本模组中被创建出来——这意味着它们不具备向后兼容性。玩家可以通过控制台指令替换原有基础蓝衣铁卫卡牌,并免费获得新的攻城塔:grrUpgradeRisky

该游戏如果保存,与原版不兼容。
没有 GRR,昆特牌会崩溃,因为其代码无法处理不存在的卡牌。

由于 GwintManager 类的原生代码实现不佳,恢复的卡牌添加到玩家后无法撤销(据我所知)。

一些更技术性的讨论

我不确定 100% - 但看起来对于每张收到的卡牌,GwintManager 都会在其内部数组中生成一个条目,存储卡牌 ID 和卡牌数量。
移除卡片会减少该数字,但条目本身永远不会移除。因此,虽然这听起来可能很奇怪,被移除的卡牌"仍然存在于数据库中,数量为 0"。这仍然被视为"存在"并会破坏游戏平衡。所以一旦卡牌被添加并且已保存,永远不会被移除。对于"安全"卡牌没有问题,这在原版中也存在。但对于"风险"卡牌则没有兼容性。

模组新增了更多玩家可用的命令(使用需自行承担风险),用于通过 GRR 管理卡牌:grrAdd(Id)grrRemove(Id)grrVanilla。最后一个命令会尝试恢复原版状态——但请注意上述限制条件。此外,我认为保存一张"存在但数量为 0"的卡牌可能会导致游戏不稳定。

GRR 的所有操作都在 GwintManager 内部进行,即仅适用于"cards-gwint"。
GRR 不会影响游戏世界("cards-items")完全无关,预计不会以任何方式影响"昆特牌收藏家"成就。遇到该成就问题的玩家,应使用标准函数 addCardByName(name)additem(name)。卡牌名称可在文件 content0\scripts\game\gui\menus\gwintManager.ws 末尾找到,位于将"card-item"名称转换为"card-gwent"ID 的函数内。

参考表 - 升级 GRR 功能

原版卡牌(数量) 替换为(ID)
3x gwint_card_poor_infantry gwint_card_poor_infantry[125]; gwint_card_poor_infantry2[126]; gwint_card_poor_infantry3[127]
3x gwint_card_crinfrid gwint_card_crinfrid[130]; gwint_card_crinfrid2[131]; gwint_card_crinfrid3[132]
3x gwint_card_kaedwen gwint_card_kaedwen[150]; gwint_card_kaedwen2[151]; gwint_card_kaedwen3[152]
2x gwint_card_catapult gwint_card_catapult[140]; gwint_card_catapult2[141]
4x gwint_card_impera_brigade gwint_card_impera_brigade[245] [...246...247...] gwint_card_impera_brigade4[248]
3x gwint_card_nausicaa gwint_card_nausicaa[250]; gwint_card_nausicaa2[251]; gwint_card_nausicaa3[252]
3x gwint_card_blue_stripes gwint_card_blue_stripes[160]; gwint_card_blue_stripes2[161]; gwint_card_blue_stripes3[162]
0x gwint_card_siege_tower2[171]