2

为什么服务器端的一些数据仍然存储在 DBC 文件中,而不是存储在 SQL-DB 中?特别是 - 法术(spells.dbc)。做什么的?我们在咒语中有很多错误,很难理解咒语有什么问题,但更难找到它的咒语......

4

3 回答 3

2

法术、天赋、成就等...大多在 DBC 文件中找到,因为那是暴雪当年的做法。确实,在 2019 年,这确实是一种相当过时的工作方式。数据库变得越来越强大,功能越来越多,事实证明,硬编码的数据很难使用。见鬼,DBC 并没有那么重,我们还没有做出这个改变的原因是......我们没有其他原因,除了它是一项需要一些时间的任务而且做起来很单调.

我们知道 Trinity 核心已经做出了这个改变,但如果这是一个借口,他们的贡献者比我们多得多!

尽管如此,如果您检查主存储库中的问题跟踪器,这已经在我们的待办事项列表中。

虽然我们确实不能真正编辑 DBC 文件,因为当重新提取或丢失文件时我们会丢失所有进度,但是,我们可以在名为 SpellMgr 的 C++ 文件中修改拼写。

我们有一个名为SpellMgr::LoadDbcDataCorrections()的函数。

进行此更改时的主要问题是我们必须修改内核以支持此更改,并且上面的函数包含很多更正。需要进行严格的测试以确保在此过程中没有任何问题。

在这里通过更改位,您可以删除或添加某些属性到所需的法术,而不是接触硬编码的 dbc 文件。

如果你想要一个例子,在这个链接中,我已经改变了一个阿克蒙德法术没有施法时间。

注意:在这一行中,关于损坏的评论可能会错过领先,但那是因为我犯了一个错误,并且截至 2019 年 4 月 18 日我还没有完成这个拉取请求。

于 2019-04-18T09:55:55.663 回答
2

这项工作已经开始,特别是由 Kaev 开始。我认为至少有 3 个 DBC 现在是无用的服务器端(但可能仍然需要客户端,出于某种原因,它们被称为 DataBaseClient),例如 item.dbc。

此外,最初的理念(对于所有内核,而不仅仅是 AC)是我们不会接触 DBC,因为我们不进行自定义修改,因此没有兴趣将它们放在服务器端。

但我们想改变这一点,并开始让它们直接在数据库中可用,如果你想帮助解决这个问题,那就太好了!

于 2019-04-26T13:21:54.357 回答
1

为什么?

因为当仿真开始时,dbc 字段 90% 是未知的。因此,开发人员为他们创建了一个解析器,一旦发现它们的功能,只需更改少量代码即可支持新字段。

现在我们已经发现了 90% 的必需 dbc 字段,并且我们还为 DBC<->SQL 创建了一些出色的转换工具,这只是“努力”的问题。

SQL 转换对于避免在服务器上使用客户端数据很有用(如果您不想违反 EULA,则可以完全覆盖它们)或只是扩展/自定义它们。

这里是关于 DBC->SQL 转换的问题:https ://github.com/azerothcore/azerothcore-wotlk/issues/584

于 2019-07-19T12:29:51.517 回答