Добавить в корзинуПозвонить
Найти в Дзене
Блуждание в trinitycore

Система лута trinitycore 3.3.5

Начал с рассмотрения как определяется лут, который можно выбить. Информацию я искал на сайте trinitycore, но все грустно https://trinitycore.info/en/database/335/world/creature_loot_template а вот на azerothcore более менее приличное описание https://www.azerothcore.org/wiki/loot_template
Итак какие виды лута имеем: Таблиц хоть и много, но все они имеют одинаковую структуру. Не буду дублировать документацию ибо там все довольно понятно. Лучше рассмотрим примеры. Лут при распылении Построим запрос чтобы было видно взаимосвязи. Кто на что ссылается Запрос: вот что мы получим: От сюда видно следующее: Лут с сундуков В таблице item_template располагаются сундуки + всякие сумки. Вот немного модифицированный запрос, чтобы можно было сразу посмотреть примеры с прямым лутом и через Reference. Запрос: Вот что мы увидим (все аналогично примеру выше). Лут из игровых объектов Тут все довольно странно, если я правильно понимаю поле Item может иметь ссылку как на таблицу gameobject_template
Оглавление

Начал с рассмотрения как определяется лут, который можно выбить.

Информацию я искал на сайте trinitycore, но все грустно

https://trinitycore.info/en/database/335/world/creature_loot_template

а вот на azerothcore более менее приличное описание

https://www.azerothcore.org/wiki/loot_template

Итак какие виды лута имеем:

  • при распылении - prospecting_loot_template
  • из сундуков - item_loot_template
  • с игровых объектов - gameobject_loot_template
  • почтовый лут -mail_loot_template
  • с дизенчанта - disenchant_loot_template
  • с рыбалки - fishing_loot_template
  • с мобов - creature_loot_template
  • при краже - pickpocketing_loot_template
  • при фарме кожи - skinning_loot_template
  • при использовании спелов - spell_loot_template
  • Шаблон лута для лута ^_^ - reference_loot_template

Таблиц хоть и много, но все они имеют одинаковую структуру. Не буду дублировать документацию ибо там все довольно понятно. Лучше рассмотрим примеры.

Лут при распылении

Построим запрос чтобы было видно взаимосвязи. Кто на что ссылается Запрос:

вот что мы получим:

От сюда видно следующее:

  • Поле entry хранит идентификатор из item_template для кого мы будем указывать лут. К примеру, мифриловая руда
  • Поле item так же хранит идентификатор из item_template, но уже элемента, который из этой руды выпадает. К примеру, из мифриловой руды падает Star Ruby. Если Item ссылается на конкретный лут, то поле Reference будет равно нулю
  • Видно, что есть некоторые записи где Item ведет свой порядок с единицы, это значит Item тут искусственный. И все внимание уходит на поле Reference. Это поле хранит идентификатор записи из reference_loot_template(все идентификаторы искусственные правила определения смотри в доке azeroth). В запросе видно, что тут тройная связка
    prospecting_loot_template -> reference_loot_template -> item_template

Лут с сундуков

В таблице item_template располагаются сундуки + всякие сумки. Вот немного модифицированный запрос, чтобы можно было сразу посмотреть примеры с прямым лутом и через Reference. Запрос:

Вот что мы увидим (все аналогично примеру выше).

-2

Лут из игровых объектов

Тут все довольно странно, если я правильно понимаю поле Item может иметь ссылку как на таблицу gameobject_template так и на item_template. Вот пример запроса, где мы читаем два разных лута с join по разным таблицам. Запрос:

Вот что мы получили:

-3

Лут на почту

Важный момент: azerothcore и trinitycore тут расходятся. Потому не надо верить доке азерота. Там таблица называется иначе и поле связи другое.

Для trinitycore таблица называется mail_loot_template а поле entry содержит идентификатор квеста из таблицы quest_template. Запрос:

Вот что мы получили:

-4

Лут при дизенчанте

Вообще, конечно удивительно как разработчики натягивают "глаз на жопу" - делают одинаковую структуру таблиц лута, но при этом они все работают по разному. К примеру, для дизенчанта привязка выполняется напрямую в таблице item_template через поле DisenchantID(сюда проставляется Entry). Попробую продемонстрировать на примере. Запрос:

Что мы получаем:

-5

Тут поле DisenchantedItem вычисляет первый попавшийся итем, для кого определен данный лут(их может быть много). А поле item_name - что из DisenchantedItem может выпасть.

Лут при рыбалке

Честно говоря тут за 10 минут я не разобрался. Понятно что тут Entry вообще ссылается на DBC файлы и может быть как зона так и область(Zone or Area), но как написано в доке азерота там начинаются неочевидные правила которые надо раскуривать. Пока мне лень.

Лут при краже

Тут все понятно - система аналогичная дизенчанту. Для каждого описания моба в таблице creature_template в поле pickpocketloot проставляется entry таблицы pickpocketing_loot_template. Запрос:

На выходе получим картинку что у кого можно своровать:

-6

Лут с мобов

Схема как при краже или дизенчанте.

Для каждого описания моба в таблице creature_template в поле lootid проставляется entry таблицы creature_loot_template. Запрос:

Получаем перечень лута что с кого падает:

-7

Лут при фарме кожи

Схема как при краже или дизенчанте. Но поле связи skinloot. Запрос:

Получаем откуда какую шкуру можно снять

-8

Лут при использовании спелов

Тут показать сложно ибо как из фишингом - идентификаторы мапятся на Spell.DBC потому кому интересно пусть смотрит сам

Заключение

На первый взгляд. Архитектура базы не топ. Сделано все не единообразно лучше бы подвели под один вариант. Но может это мое первое впечатление.