#azerothcore
#azerothcore
Вопрос:
Почему некоторые данные на стороне сервера все еще хранятся в файлах DBC, а не в SQL-DB? В частности — заклинания (spells.dbc). Зачем? У нас много ошибок в заклинаниях, и очень трудно понять, что не так с заклинанием, но еще труднее найти это заклинание…
Комментарии:
1. Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что это комментарий и обсуждение, а не конкретная проблема и вопрос программирования.
Ответ №1:
Заклинания, таланты, достижения и т.д… В основном находятся в файлах DBC, потому что именно так Blizzard делала это в свое время. Это правда, что в 2019 году это действительно довольно устаревший способ работы. Базы данных становятся все более мощными и универсальными, и с жестко закодированными данными оказывается сложно работать. Черт возьми, DBCS на самом деле не такие уж тяжелые, и причина, по которой мы еще не внесли это изменение, заключается в том, что… У нас нет другой причины, кроме того, что это задача, которая занимает немного времени и является монотонной.
Мы знаем, что Trinity core уже внесла это изменение, но у них гораздо больше участников, чем у нас, если это служит оправданием!
Тем не менее, это уже есть в нашем списке дел, если вы проверите отслеживание проблем в главном репозитории.
Хотя это правда, что мы не можем редактировать файлы DBC, потому что мы потеряем весь прогресс при повторном извлечении или потеряем файлы, однако мы можем изменять заклинания в файле на C с именем SpellMgr.
Там у нас есть функция, называемая SpellMgr::LoadDbcDataCorrections() .
Основная проблема при выполнении этого изменения заключается в том, что мы должны модифицировать ядро для поддержки этого изменения, а функция выше содержит много исправлений. Потребуется интенсивное тестирование, чтобы убедиться, что в процессе ничего не испорчено.
Здесь, изменяя биты, вы можете удалить или добавить определенные свойства к нужным заклинаниям вместо того, чтобы трогать жестко закодированные dbc-файлы.
Если вам нужен пример, по этой ссылке я изменил заклинание Архимонда, чтобы оно не имело времени разыгрывания.
ПРИМЕЧАНИЕ: В этой строке комментарий о повреждении может быть пропущен, но это потому, что я допустил ошибку, и я еще не закончил этот запрос на извлечение по состоянию на 18/04/2019.
Ответ №2:
Работа была начата, в частности, Каевым. Я думаю, что по крайней мере 3 DBC теперь бесполезны на стороне сервера (но, вероятно, все еще необходимы на стороне клиента, они называются DataBaseClient по какой-то причине), как item.dbc.
Кроме того, первоначальная философия (для ВСЕХ ядер, а не только AC) заключалась в том, что мы не будем касаться DBC, потому что мы не делаем пользовательских модификаций, поэтому не было никакого интереса иметь их на стороне сервера.
Но мы хотели изменить это и начали делать их доступными непосредственно в базе данных, если вы хотите помочь с этим, было бы здорово!
Ответ №3:
Почему?
Потому что, когда началась эмуляция, поля dbc были на 90% неизвестны. Итак, разработчики создали для них синтаксический анализатор, который требовал лишь нескольких изменений кода для поддержки новых полей, как только их функциональность была обнаружена.
Теперь, когда мы обнаружили 90% требуемых полей dbc, а также создали несколько отличных инструментов преобразования для DBC <->SQL, это просто вопрос «усилий».
Преобразование SQL полезно, чтобы избежать использования клиентских данных на сервере (вы можете полностью перезаписать их, если не хотите идти против лицензионного соглашения) или просто расширить / настроить их.
Вот вам проблема с преобразованием DBC-> SQL: https://github.com/azerothcore/azerothcore-wotlk/issues/584