[11982] USE_CREATURE_IN_GOSSIP_MENU_CHECK
Если в конфиге поставить LogFilter_DbStrictedCheck = 0, то получаем много ошибок вида
Код:
... Table `gossip_menu` contain unused (in creature or GO or menu options) menu id XXX. Проблема в том, что не учитываются коды меню из таблицы `creature_template`. Код:
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp 1. Чистое ядро: в логе 1414 номеров menu_id, совпадения с таблицей `creature_template` есть. 2. С патчем: в логе 111 номеров menu_id. В таблицах `creature_template`, `gameobject_template` и `gossip_menu_option` совпадений нет. |
Nice catch. Atm we only consider menus with gossip_menu_option entries as "found"
So I think this should be good: Код:
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp |
Если menu_id есть в таблицах `creature_template`, `gameobject_template` или `gossip_menu_option`, то в переменной menu_ids их не должно быть.
Если LOG_FILTER_DB_STRICTED_CHECK = 1, то menu_id, отсутствующие в соответствующих таблицах, удаляются из menu_ids. Если удалять menu_id из menu_ids только при LOG_FILTER_DB_STRICTED_CHECK = 0, то будем обрабатывать больше записей, чем в моем варианте. Все равно существующие записи не дадут ошибку в логе при любом значении LOG_FILTER_DB_STRICTED_CHECK, поэтому лучше их сразу удалять при проверке в цикле по объектам, нпц и подпукнтам госсипов. Если я неправильно понял суть переменной menu_ids, то просьба пояснить. |
Very hard for me to understand what you really mean.
If LOG_FILTER_* is set this means that the related log is filtered. which means not displayed. Hence if you want to see LOG_FILTER_* output you have to set =0. HasLogFilter(*) returns if LOG_FILTER_* = 1. The idea is to output which menu-ids are unused if you run the mode in DB_STRICTED_CHECK (by setting LOG_FILTER_DB_STRICTED_CHECK = 0 ) So the check !HasLogFilter(*) returns if you want the additional checks. the variable menu_ids has the idea to contains all entries of `gossip_menu` - which are unused. To actually fill this variable (it is a set) all used menu-ids are inserted, and all used are erased. This way, the remaining are exactly the ones that are unused. In current clean code, the removed ones are the ones that - are used in gameobject_template - OR are used in gossip_menu_option.action_menu_id - OR are used in gossip_menu_option hence the many ones that are used only in creature_template are not removed, and hence give false error output. Your patch fixes this. However with your patch, menu-ids used in gossip_menu_option are attempted to remvoe again, (which is useless) - this is why I removed these few lines in my patch (chunk @@ -8792,10 +8798,6 @@ ) |
В моем представлении должно быть так:
1. Заполняем menu_ids. 2. Удаляем из menu_ids все меню объектов. 3. Удаляем из menu_ids все меню нпц. 4. Удаляем из menu_ids все `gossip_menu_option`.`action_menu_id`. 5. Если LOG_FILTER_DB_STRICTED_CHECK = 1, то удаляем из menu_ids все неиспользуемые меню. 6. Если LOG_FILTER_DB_STRICTED_CHECK = 0, то выводим ошибки. После пунктов 2, 3 и 4 в menu_ids должны остаться только неиспользуемые меню. Если пропустить пункт 3, то в пунктах 5 и 6 будем обрабатывать больше записей. Возможно, я не так понял вашу правку, так как сейчас у меня нет исходников под рукой. Лишь бы патч был принят в правильном варианте:) |
virusav, schmoozerd предлагает точно тоже самое, что и ты, только немного иначе в коде. Более правильно по его мнению (тут уж я судить не берусь). Но работать будет точно также как и предполагает твоя правка =)
|
Предлагаю принять какой-нибудь вариант патча, раз оба правильные.:)
|
In [11982]. Thank you :)
Sorry for the misunderstandings :( |
Текущее время: 07:11. Часовой пояс GMT +3. |
ru-mangos.ru - Русское сообщество MaNGOS