From 4aa239ac8c7d7f57118a0d93d98cb10c6d954c75 Mon Sep 17 00:00:00 2001 From: VladimirMangos Date: Thu, 11 Nov 2010 17:52:50 +0300 Subject: [PATCH] [10720] Implement check `gossip_menu_option`.`npc_option_npcflag`. For cases main menu options used by creature but impossible show in result absent related npcflags for any creatures used that menu. --- src/game/ObjectMgr.cpp | 35 +++++++++++++++++++++++++++++------ src/shared/revision_nr.h | 2 +- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index b5ccac4ef..d43dd94b2 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -9175,12 +9175,8 @@ void ObjectMgr::LoadGossipMenuItems() if (!sLog.HasLogFilter(LOG_FILTER_DB_STRICTED_CHECK)) // check unused menu ids only in strict mode { for (GossipMenusMap::const_iterator itr = m_mGossipMenusMap.begin(); itr != m_mGossipMenusMap.end(); ++itr) - menu_ids.insert(itr->first); - - for(uint32 i = 1; i < sCreatureStorage.MaxEntry; ++i) - if (CreatureInfo const* cInfo = sCreatureStorage.LookupEntry(i)) - if (cInfo->GossipMenuId) - menu_ids.erase(cInfo->GossipMenuId); + if (itr->first) + menu_ids.insert(itr->first); for(uint32 i = 1; i < sGOStorage.MaxEntry; ++i) if (GameObjectInfo const* gInfo = sGOStorage.LookupEntry(i)) @@ -9274,6 +9270,33 @@ void ObjectMgr::LoadGossipMenuItems() if (gMenuItem.option_id >= GOSSIP_OPTION_MAX) sLog.outErrorDb("Table gossip_menu_option for menu %u, id %u has unknown option id %u. Option will not be used", gMenuItem.menu_id, gMenuItem.id, gMenuItem.option_id); + if (gMenuItem.menu_id && (gMenuItem.npc_option_npcflag || !sLog.HasLogFilter(LOG_FILTER_DB_STRICTED_CHECK))) + { + bool found_menu_uses = false; + bool found_flags_uses = false; + for(uint32 i = 1; !found_flags_uses && i < sCreatureStorage.MaxEntry; ++i) + { + if (CreatureInfo const* cInfo = sCreatureStorage.LookupEntry(i)) + { + if (cInfo->GossipMenuId == gMenuItem.menu_id) + { + found_menu_uses = true; + + // some from creatures with gossip menu can use gossip option base at npc_flags + if (gMenuItem.npc_option_npcflag & cInfo->npcflag) + found_flags_uses = true; + + // unused check data preparing part + if (!sLog.HasLogFilter(LOG_FILTER_DB_STRICTED_CHECK)) + menu_ids.erase(cInfo->GossipMenuId); + } + } + } + + if (found_menu_uses && !found_flags_uses) + sLog.outErrorDb("Table gossip_menu_option for menu %u, id %u has `npc_option_npcflag` = %u but creatures using this menu does not have corresponding`npcflag`. Option will not accessible in game.", gMenuItem.menu_id, gMenuItem.id, gMenuItem.npc_option_npcflag); + } + if (gMenuItem.action_poi_id && !GetPointOfInterest(gMenuItem.action_poi_id)) { sLog.outErrorDb("Table gossip_menu_option for menu %u, id %u use non-existing action_poi_id %u, ignoring", gMenuItem.menu_id, gMenuItem.id, gMenuItem.action_poi_id); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 691edde66..664824ccc 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "10719" + #define REVISION_NR "10720" #endif // __REVISION_NR_H__