diff options
author | ariel- <ariel-@users.noreply.github.com> | 2018-01-18 00:53:45 -0300 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-16 01:29:25 +0200 |
commit | 3bc3b3eeeb78fa8acc559730f9c45b0f237e4b2b (patch) | |
tree | d2a69894d0f57fded858481a0d93c611aa6a6a7c | |
parent | 21556667c16b282b77934bddee3d86f0c632ef31 (diff) |
Core/Globals: revert back to unordered_map for templates
Partial revert of commit b64c5043140dc7b7908e259e441de16cc0261320
See discussion on https://github.com/TrinityCore/TrinityCore/commit/b64c5043140dc7b7908e259e441de16cc0261320
(cherry picked from commit b75ff7d4bf13fb4778843c99521223becc096ca0)
-rw-r--r-- | src/server/game/Achievements/CriteriaHandler.cpp | 7 | ||||
-rw-r--r-- | src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Battlegrounds/BattlegroundMgr.cpp | 11 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 235 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.h | 20 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 9 | ||||
-rw-r--r-- | src/server/game/Instances/InstanceScript.cpp | 10 | ||||
-rw-r--r-- | src/server/game/Loot/LootMgr.cpp | 71 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_lookup.cpp | 75 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 14 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_quest.cpp | 4 |
11 files changed, 182 insertions, 283 deletions
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index d8e6a0321c0..641c515ee98 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -4214,12 +4214,9 @@ void CriteriaMgr::LoadCriteriaList() scenarioCriteriaTreeIds[scenarioStep->Criteriatreeid] = scenarioStep; std::unordered_map<uint32 /*criteriaTreeID*/, QuestObjective const*> questObjectiveCriteriaTreeIds; - for (auto const& questTemplate : sObjectMgr->GetQuestTemplates()) + for (auto const& questTemplatePair : sObjectMgr->GetQuestTemplates()) { - if (!questTemplate) - continue; - - for (QuestObjective const& objective : questTemplate->Objectives) + for (QuestObjective const& objective : questTemplatePair.second.Objectives) { if (objective.Type != QUEST_OBJECTIVE_CRITERIA_TREE) continue; diff --git a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp index 18b8e67aba5..e8acac1fea1 100644 --- a/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp +++ b/src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp @@ -66,11 +66,10 @@ bool AuctionBotSeller::Initialize() TC_LOG_DEBUG("ahbot", "Loading npc vendor items for filter.."); CreatureTemplateContainer const& creatures = sObjectMgr->GetCreatureTemplates(); - for (auto const& creatureTemplate : creatures) - if (creatureTemplate) - if (VendorItemData const* data = sObjectMgr->GetNpcVendorItemList(creatureTemplate->Entry)) - for (VendorItem const& vendorItem : data->m_items) - npcItems.insert(vendorItem.item); + for (auto const& creatureTemplatePair : creatures) + if (VendorItemData const* data = sObjectMgr->GetNpcVendorItemList(creatureTemplatePair.first)) + for (VendorItem const& vendorItem : data->m_items) + npcItems.insert(vendorItem.item); TC_LOG_DEBUG("ahbot", "Npc vendor filter has " SZFMTD " items", npcItems.size()); diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index 269c8b6b992..8ed01ee23c1 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -750,15 +750,12 @@ void BattlegroundMgr::LoadBattleMastersEntry() void BattlegroundMgr::CheckBattleMasters() { CreatureTemplateContainer const& ctc = sObjectMgr->GetCreatureTemplates(); - for (auto const& creatureTemplate : ctc) + for (auto const& creatureTemplatePair : ctc) { - if (!creatureTemplate) - continue; - - if ((creatureTemplate->npcflag & UNIT_NPC_FLAG_BATTLEMASTER) && mBattleMastersMap.find(creatureTemplate->Entry) == mBattleMastersMap.end()) + if ((creatureTemplatePair.second.npcflag & UNIT_NPC_FLAG_BATTLEMASTER) && !mBattleMastersMap.count(creatureTemplatePair.first)) { - TC_LOG_ERROR("sql.sql", "Creature_Template Entry: %u has UNIT_NPC_FLAG_BATTLEMASTER, but no data in the `battlemaster_entry` table. Removing flag.", creatureTemplate->Entry); - const_cast<CreatureTemplate*>(creatureTemplate.get())->npcflag &= ~UNIT_NPC_FLAG_BATTLEMASTER; + TC_LOG_ERROR("sql.sql", "Creature_Template Entry: %u has UNIT_NPC_FLAG_BATTLEMASTER, but no data in the `battlemaster_entry` table. Removing flag.", creatureTemplatePair.first); + const_cast<CreatureTemplate&>(creatureTemplatePair.second).npcflag &= ~UNIT_NPC_FLAG_BATTLEMASTER; } } } diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index a9987ae6954..22be28806e7 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -361,7 +361,7 @@ void ObjectMgr::LoadCreatureTemplates() // 69 70 71 72 73 74 75 76 // "RacialLeader, movementId, WidgetSetID, WidgetSetUnitConditionID, RegenHealth, mechanic_immune_mask, spell_school_immune_mask, flags_extra, " // 77 - // "ScriptName FROM creature_template WHERE entry = ? OR 1 = ? ORDER BY entry DESC"); + // "ScriptName FROM creature_template WHERE entry = ? OR 1 = ?"); WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_TEMPLATE); stmt->setUInt32(0, 0); @@ -374,35 +374,27 @@ void ObjectMgr::LoadCreatureTemplates() return; } - uint32 count = 0; - - uint32 const maxCreatureId = (*result)[0].GetUInt32(); - _creatureTemplateStore.resize(maxCreatureId + 1); + _creatureTemplateStore.reserve(result->GetRowCount()); do { Field* fields = result->Fetch(); LoadCreatureTemplate(fields); - - ++count; } while (result->NextRow()); // We load the creature models after loading but before checking LoadCreatureTemplateModels(); // Checking needs to be done after loading because of the difficulty self referencing - for (auto const& creatureTemplate : _creatureTemplateStore) - if (creatureTemplate) - CheckCreatureTemplate(creatureTemplate.get()); + for (auto const& ctPair : _creatureTemplateStore) + CheckCreatureTemplate(&ctPair.second); - TC_LOG_INFO("server.loading", ">> Loaded %u creature definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " creature definitions in %u ms", _creatureTemplateStore.size(), GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadCreatureTemplate(Field* fields) { uint32 entry = fields[0].GetUInt32(); - - _creatureTemplateStore[entry] = std::make_unique<CreatureTemplate>(); - CreatureTemplate& creatureTemplate = *_creatureTemplateStore[entry].get(); + CreatureTemplate& creatureTemplate = _creatureTemplateStore[entry]; creatureTemplate.Entry = entry; @@ -663,8 +655,8 @@ void ObjectMgr::LoadCreatureScalingData() uint32 entry = fields[0].GetUInt32(); Difficulty difficulty = Difficulty(fields[1].GetUInt8()); - CreatureTemplate const* creatureTemplate = GetCreatureTemplate(entry); - if (!creatureTemplate) + auto itr = _creatureTemplateStore.find(entry); + if (itr == _creatureTemplateStore.end()) { TC_LOG_ERROR("sql.sql", "Creature template (Entry: %u) does not exist but has a record in `creature_template_scaling`", entry); continue; @@ -677,7 +669,7 @@ void ObjectMgr::LoadCreatureScalingData() creatureLevelScaling.DeltaLevelMax = fields[5].GetInt16(); creatureLevelScaling.ContentTuningID = fields[6].GetInt32(); - const_cast<CreatureTemplate*>(creatureTemplate)->scalingStore[difficulty] = creatureLevelScaling; + itr->second.scalingStore[difficulty] = creatureLevelScaling; ++count; } while (result->NextRow()); @@ -2995,17 +2987,13 @@ void ObjectMgr::LoadItemTemplates() uint32 oldMSTime = getMSTime(); uint32 sparseCount = 0; - uint32 const maxItemId = sItemSparseStore.GetNumRows(); - _itemTemplateStore.resize(maxItemId + 1); - for (ItemSparseEntry const* sparse : sItemSparseStore) { ItemEntry const* db2Data = sItemStore.LookupEntry(sparse->ID); if (!db2Data) continue; - _itemTemplateStore[sparse->ID] = std::make_unique<ItemTemplate>(); - ItemTemplate& itemTemplate = *_itemTemplateStore[sparse->ID].get(); + ItemTemplate& itemTemplate = _itemTemplateStore[sparse->ID]; itemTemplate.BasicData = db2Data; itemTemplate.ExtendedData = sparse; @@ -3082,14 +3070,14 @@ void ObjectMgr::LoadItemTemplates() // Load item effects (spells) for (ItemEffectEntry const* effectEntry : sItemEffectStore) { - ItemTemplate const* itemTemplate = GetItemTemplate(effectEntry->ParentItemID); - if (!itemTemplate) + auto itemItr = _itemTemplateStore.find(effectEntry->ParentItemID); + if (itemItr == _itemTemplateStore.end()) continue; - const_cast<ItemTemplate*>(itemTemplate)->Effects.push_back(effectEntry); + itemItr->second.Effects.push_back(effectEntry); } - TC_LOG_INFO("server.loading", ">> Loaded %u item templates in %u ms", sparseCount, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " item templates in %u ms", _itemTemplateStore.size(), GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadItemTemplateAddon() @@ -3159,7 +3147,7 @@ void ObjectMgr::LoadItemScriptNames() ItemTemplate const* ObjectMgr::GetItemTemplate(uint32 entry) const { - return entry < _itemTemplateStore.size() ? _itemTemplateStore[entry].get() : nullptr; + return Trinity::Containers::MapGetValuePtr(_itemTemplateStore, entry); } void ObjectMgr::LoadVehicleTemplateAccessories() @@ -4153,17 +4141,14 @@ void ObjectMgr::LoadQuests() "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, " //107 108 109 110 111 112 113 114 115 "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog" - " FROM quest_template ORDER BY ID DESC"); + " FROM quest_template"); if (!result) { TC_LOG_INFO("server.loading", ">> Loaded 0 quests definitions. DB table `quest_template` is empty."); return; } - uint32 const maxQuestId = (*result)[0].GetUInt32(); - _questTemplates.resize(maxQuestId + 1); - - uint32 count = 0; + _questTemplates.reserve(result->GetRowCount()); // create multimap previous quest for each existed quest // some quests can have many previous maps set by NextQuestId in previous quest @@ -4172,11 +4157,10 @@ void ObjectMgr::LoadQuests() { Field* fields = result->Fetch(); - std::unique_ptr<Quest> newQuest = std::make_unique<Quest>(fields); - _questTemplates[newQuest->GetQuestId()] = std::move(newQuest); - ++count; - if (newQuest->IsAutoPush()) - _questTemplatesAutoPush.push_back(newQuest.get()); // BROKEN BUT WILL BE FIXED IN THE REVERT CHERRY-PICK + uint32 questId = fields[0].GetUInt32(); + auto itr = _questTemplates.emplace(std::piecewise_construct, std::forward_as_tuple(questId), std::forward_as_tuple(fields)).first; + if (itr->second.IsAutoPush()) + _questTemplatesAutoPush.push_back(&itr->second); } while (result->NextRow()); struct QuestLoaderHelper @@ -4235,11 +4219,9 @@ void ObjectMgr::LoadQuests() Field* fields = result->Fetch(); uint32 questId = fields[0].GetUInt32(); - if (questId < _questTemplates.size() && _questTemplates[questId]) - { - Quest* const quest = _questTemplates[questId].get(); - (quest->*loader.LoaderFunction)(fields); - } + auto itr = _questTemplates.find(questId); + if (itr != _questTemplates.end()) + (itr->second.*loader.LoaderFunction)(fields); else TC_LOG_ERROR("server.loading", "Table `%s` has data for quest %u but such quest does not exist", loader.TableName, questId); } while (result->NextRow()); @@ -4278,24 +4260,23 @@ void ObjectMgr::LoadQuests() uint32 questId = fields[2].GetUInt32(); // Do not throw error here because error for non existing quest is thrown while loading quest objectives. we do not need duplication - Quest const* quest = GetQuestTemplate(questId); - if (quest) - const_cast<Quest*>(quest)->LoadQuestObjectiveVisualEffect(fields); + auto itr = _questTemplates.find(questId); + if (itr != _questTemplates.end()) + itr->second.LoadQuestObjectiveVisualEffect(fields); } while (result->NextRow()); } std::map<uint32, uint32> usedMailTemplates; // Post processing - for (auto& qinfo : _questTemplates) + for (auto& questPair : _questTemplates) { - if (!qinfo) - continue; - // skip post-loading checks for disabled quests - if (DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, qinfo->GetQuestId(), nullptr)) + if (DisableMgr::IsDisabledFor(DISABLE_TYPE_QUEST, questPair.first, nullptr)) continue; + Quest* qinfo = &questPair.second; + // additional quest integrity checks (GO, creature_template and items must be loaded already) if (qinfo->GetQuestType() >= MAX_QUEST_TYPES) @@ -4784,7 +4765,7 @@ void ObjectMgr::LoadQuests() if (uint32 nextQuestInChain = qinfo->_nextQuestInChain) { - if (nextQuestInChain >= _questTemplates.size() || !_questTemplates[nextQuestInChain]) + if (!_questTemplates.count(nextQuestInChain)) { TC_LOG_ERROR("sql.sql", "Quest %u has `NextQuestInChain` = %u but quest %u does not exist, quest chain will not work.", qinfo->GetQuestId(), qinfo->_nextQuestInChain, qinfo->_nextQuestInChain); @@ -4870,16 +4851,17 @@ void ObjectMgr::LoadQuests() // fill additional data stores if (uint32 prevQuestId = std::abs(qinfo->_prevQuestID)) { - if (prevQuestId >= _questTemplates.size() || !_questTemplates[prevQuestId]) + if (!_questTemplates.count(prevQuestId)) TC_LOG_ERROR("sql.sql", "Quest %d has PrevQuestId %i, but no such quest", qinfo->GetQuestId(), qinfo->GetPrevQuestId()); } if (uint32 nextQuestId = qinfo->_nextQuestID) { - if (nextQuestId >= _questTemplates.size() || !_questTemplates[nextQuestId]) + auto nextQuestItr = _questTemplates.find(nextQuestId); + if (nextQuestItr == _questTemplates.end()) TC_LOG_ERROR("sql.sql", "Quest %d has NextQuestId %u, but no such quest", qinfo->GetQuestId(), qinfo->_nextQuestID); else - _questTemplates[nextQuestId]->DependentPreviousQuests.push_back(qinfo->GetQuestId()); + nextQuestItr->second.DependentPreviousQuests.push_back(qinfo->GetQuestId()); } if (qinfo->_exclusiveGroup) @@ -4921,7 +4903,7 @@ void ObjectMgr::LoadQuests() if (Quest const* quest = GetQuestTemplate(paragonReputation->QuestID)) const_cast<Quest*>(quest)->SetSpecialFlag(QUEST_SPECIAL_FLAGS_REPEATABLE); - TC_LOG_INFO("server.loading", ">> Loaded %u quests definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " quests definitions in %u ms", _questTemplates.size(), GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadQuestStartersAndEnders() @@ -5474,14 +5456,9 @@ void ObjectMgr::LoadEventScripts() std::set<uint32> evt_scripts; // Load all possible script entries from gameobjects - for (auto const& gameObjectTemplate : _gameObjectTemplateStore) - { - if (!gameObjectTemplate) - continue; - - if (uint32 eventId = gameObjectTemplate->GetEventScriptId()) + for (auto const& gameObjectTemplatePair : _gameObjectTemplateStore) + if (uint32 eventId = gameObjectTemplatePair.second.GetEventScriptId()) evt_scripts.insert(eventId); - } // Load all possible script entries from spells for (SpellNameEntry const* spellNameEntry : sSpellNameStore) @@ -5899,14 +5876,14 @@ void ObjectMgr::LoadInstanceEncounters() if (sDB2Manager.GetMapDifficultyData(dungeonEncounter->MapID, Difficulty(difficulty->ID))) { DungeonEncounterList& encounters = _dungeonEncounterStore[MAKE_PAIR64(dungeonEncounter->MapID, difficulty->ID)]; - encounters.push_back(std::make_unique<DungeonEncounter>(dungeonEncounter, EncounterCreditType(creditType), creditEntry, lastEncounterDungeon)); + encounters.emplace_back(dungeonEncounter, EncounterCreditType(creditType), creditEntry, lastEncounterDungeon); } } } else { DungeonEncounterList& encounters = _dungeonEncounterStore[MAKE_PAIR64(dungeonEncounter->MapID, dungeonEncounter->DifficultyID)]; - encounters.push_back(std::make_unique<DungeonEncounter>(dungeonEncounter, EncounterCreditType(creditType), creditEntry, lastEncounterDungeon)); + encounters.emplace_back(dungeonEncounter, EncounterCreditType(creditType), creditEntry, lastEncounterDungeon); } ++count; @@ -6438,7 +6415,7 @@ uint32 ObjectMgr::GetTaxiMountDisplayId(uint32 id, uint32 team, bool allowed_alt Quest const* ObjectMgr::GetQuestTemplate(uint32 quest_id) const { - return quest_id < _questTemplates.size() ? _questTemplates[quest_id].get() : nullptr; + return Trinity::Containers::MapGetValuePtr(_questTemplates, quest_id); } void ObjectMgr::LoadGraveyardZones() @@ -6709,10 +6686,7 @@ AreaTriggerStruct const* ObjectMgr::GetAreaTrigger(uint32 trigger) const AccessRequirement const* ObjectMgr::GetAccessRequirement(uint32 mapid, Difficulty difficulty) const { - AccessRequirementContainer::const_iterator itr = _accessRequirementStore.find(MAKE_PAIR64(mapid, difficulty)); - if (itr != _accessRequirementStore.end()) - return itr->second.get(); - return nullptr; + return Trinity::Containers::MapGetValuePtr(_accessRequirementStore, MAKE_PAIR64(mapid, difficulty)); } bool ObjectMgr::AddGraveyardLink(uint32 id, uint32 zoneId, uint32 team, bool persist /*= true*/) @@ -6882,9 +6856,7 @@ void ObjectMgr::LoadAccessRequirements() uint64 requirement_ID = MAKE_PAIR64(mapid, difficulty); - auto& ar = _accessRequirementStore[requirement_ID]; - ar = std::make_unique<AccessRequirement>(); - + AccessRequirement* ar = &_accessRequirementStore[requirement_ID]; ar->levelMin = fields[2].GetUInt8(); ar->levelMax = fields[3].GetUInt8(); ar->item = fields[4].GetUInt32(); @@ -7220,12 +7192,9 @@ void ObjectMgr::LoadGameObjectTemplate() { uint32 oldMSTime = getMSTime(); - uint32 const maxdb2GameObjectId = sGameObjectsStore.GetNumRows(); - _gameObjectTemplateStore.resize(maxdb2GameObjectId + 1); for (GameObjectsEntry const* db2go : sGameObjectsStore) { - _gameObjectTemplateStore[db2go->ID] = std::make_unique<GameObjectTemplate>(); - GameObjectTemplate& go = *_gameObjectTemplateStore[db2go->ID].get(); + GameObjectTemplate& go = _gameObjectTemplateStore[db2go->ID]; go.entry = db2go->ID; go.type = db2go->TypeID; go.displayId = db2go->DisplayID; @@ -7245,7 +7214,7 @@ void ObjectMgr::LoadGameObjectTemplate() "Data13, Data14, Data15, Data16, Data17, Data18, Data19, Data20, Data21, Data22, Data23, Data24, Data25, Data26, Data27, Data28, " // 37 38 39 40 41 42 43 44 "Data29, Data30, Data31, Data32, Data33, ContentTuningId, AIName, ScriptName " - "FROM gameobject_template ORDER BY entry DESC"); + "FROM gameobject_template"); if (!result) { @@ -7253,18 +7222,14 @@ void ObjectMgr::LoadGameObjectTemplate() return; } - uint32 const maxGameObjectId = (*result)[0].GetUInt32(); - if (maxGameObjectId > maxdb2GameObjectId) - _gameObjectTemplateStore.resize(maxGameObjectId + 1); - uint32 count = 0; + _gameObjectTemplateStore.reserve(result->GetRowCount()); do { Field* fields = result->Fetch(); uint32 entry = fields[0].GetUInt32(); - _gameObjectTemplateStore[entry] = std::make_unique<GameObjectTemplate>(); - GameObjectTemplate& got = *_gameObjectTemplateStore[entry].get(); + GameObjectTemplate& got = _gameObjectTemplateStore[entry]; got.entry = entry; got.type = uint32(fields[1].GetUInt8()); got.displayId = fields[2].GetUInt32(); @@ -7435,12 +7400,9 @@ void ObjectMgr::LoadGameObjectTemplate() CheckGOLinkedTrapId(&got, got.gatheringNode.linkedTrap, 20); break; } + } while (result->NextRow()); - ++count; - } - while (result->NextRow()); - - TC_LOG_INFO("server.loading", ">> Loaded %u game object templates in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " game object templates in %u ms", _gameObjectTemplateStore.size(), GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadGameObjectTemplateAddons() @@ -7926,8 +7888,6 @@ void ObjectMgr::LoadQuestPOI() _questPOIStore.clear(); // need for reload case - uint32 count = 0; - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 QueryResult result = WorldDatabase.Query("SELECT QuestID, BlobIndex, Idx1, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, UiMapID, Priority, Flags, WorldEffectID, PlayerConditionID, NavigationPlayerConditionID, SpawnTrackingID, AlwaysAllowMergingBlobs FROM quest_poi order by QuestID, Idx1"); if (!result) @@ -7988,7 +7948,6 @@ void ObjectMgr::LoadQuestPOI() poiData.QuestID = questID; poiData.Blobs.emplace_back(blobIndex, objectiveIndex, questObjectiveID, questObjectID, mapID, uiMapID, priority, flags, worldEffectID, playerConditionID, navigationPlayerConditionID, spawnTrackingID, std::move(*points), alwaysAllowMergingBlobs); - ++count; continue; } } @@ -7997,7 +7956,7 @@ void ObjectMgr::LoadQuestPOI() } while (result->NextRow()); - TC_LOG_INFO("server.loading", ">> Loaded %u quest POI definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " quest POI definitions in %u ms", _questPOIStore.size(), GetMSTimeDiffToNow(oldMSTime)); } void ObjectMgr::LoadNPCSpellClickSpells() @@ -8053,15 +8012,12 @@ void ObjectMgr::LoadNPCSpellClickSpells() // all spellclick data loaded, now we check if there are creatures with NPC_FLAG_SPELLCLICK but with no data // NOTE: It *CAN* be the other way around: no spellclick flag but with spellclick data, in case of creature-only vehicle accessories - for (auto const& creatureTemplate : _creatureTemplateStore) + for (auto& creatureTemplatePair : _creatureTemplateStore) { - if (!creatureTemplate) - continue; - - if ((creatureTemplate->npcflag & UNIT_NPC_FLAG_SPELLCLICK) && _spellClickInfoStore.find(creatureTemplate->Entry) == _spellClickInfoStore.end()) + if ((creatureTemplatePair.second.npcflag & UNIT_NPC_FLAG_SPELLCLICK) && !_spellClickInfoStore.count(creatureTemplatePair.first)) { - TC_LOG_ERROR("sql.sql", "npc_spellclick_spells: Creature template %u has UNIT_NPC_FLAG_SPELLCLICK but no data in spellclick table! Removing flag", creatureTemplate->Entry); - const_cast<CreatureTemplate*>(creatureTemplate.get())->npcflag &= ~UNIT_NPC_FLAG_SPELLCLICK; + TC_LOG_ERROR("sql.sql", "npc_spellclick_spells: Creature template %u has UNIT_NPC_FLAG_SPELLCLICK but no data in spellclick table! Removing flag", creatureTemplatePair.first); + creatureTemplatePair.second.npcflag &= ~UNIT_NPC_FLAG_SPELLCLICK; } } @@ -8120,7 +8076,7 @@ void ObjectMgr::LoadQuestRelationsHelper(QuestRelations& map, QuestRelationsReve uint32 quest = result->Fetch()[1].GetUInt32(); uint32 poolId = result->Fetch()[2].GetUInt32(); - if (quest >= _questTemplates.size() || !_questTemplates[quest]) + if (!_questTemplates.count(quest)) { TC_LOG_ERROR("sql.sql", "Table `%s`: Quest %u listed for entry %u does not exist.", table.c_str(), quest, id); continue; @@ -8398,50 +8354,39 @@ void ObjectMgr::LoadGameObjectForQuests() uint32 count = 0; // collect GO entries for GO that must activated - for (auto const& gameObjectTemplate : _gameObjectTemplateStore) + for (auto const& gameObjectTemplatePair : _gameObjectTemplateStore) { - if (!gameObjectTemplate) - continue; - - switch (gameObjectTemplate->type) + switch (gameObjectTemplatePair.second.type) { case GAMEOBJECT_TYPE_QUESTGIVER: - _gameObjectForQuestStore.insert(gameObjectTemplate->entry); - ++count; break; case GAMEOBJECT_TYPE_CHEST: { // scan GO chest with loot including quest items - uint32 lootId = gameObjectTemplate->GetLootId(); + uint32 lootId = gameObjectTemplatePair.second.GetLootId(); // find quest loot for GO - if (gameObjectTemplate->chest.questID || LootTemplates_Gameobject.HaveQuestLootFor(lootId)) - { - _gameObjectForQuestStore.insert(gameObjectTemplate->entry); - ++count; - } - break; + if (gameObjectTemplatePair.second.chest.questID || LootTemplates_Gameobject.HaveQuestLootFor(lootId)) + break; + continue; } case GAMEOBJECT_TYPE_GENERIC: { - if (gameObjectTemplate->generic.questID > 0) //quests objects - { - _gameObjectForQuestStore.insert(gameObjectTemplate->entry); - ++count; - } - break; + if (gameObjectTemplatePair.second.generic.questID > 0) //quests objects + break; + continue; } case GAMEOBJECT_TYPE_GOOBER: { - if (gameObjectTemplate->goober.questID > 0) //quests objects - { - _gameObjectForQuestStore.insert(gameObjectTemplate->entry); - ++count; - } - break; + if (gameObjectTemplatePair.second.goober.questID > 0) //quests objects + break; + continue; } default: - break; + continue; } + + _gameObjectForQuestStore.insert(gameObjectTemplatePair.first); + ++count; } TC_LOG_INFO("server.loading", ">> Loaded %u GameObjects for quests in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); @@ -9015,7 +8960,7 @@ void ObjectMgr::LoadCreatureTrainers() TC_LOG_INFO("server.loading", ">> Loaded " SZFMTD " default trainers in %u ms", _creatureDefaultTrainers.size(), GetMSTimeDiffToNow(oldMSTime)); } -uint32 ObjectMgr::LoadReferenceVendor(int32 vendor, int32 item, std::set<uint32> *skip_vendors) +uint32 ObjectMgr::LoadReferenceVendor(int32 vendor, int32 item, std::set<uint32>* skip_vendors) { // find all items from the reference vendor WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_NPC_VENDOR_REF); @@ -9544,16 +9489,13 @@ void ObjectMgr::LoadCreatureClassLevelStats() } while (result->NextRow()); - for (auto const& creatureTemplate : _creatureTemplateStore) + for (auto const& creatureTemplatePair : _creatureTemplateStore) { - if (!creatureTemplate) - continue; - - std::pair<int16, int16> levels = creatureTemplate->GetMinMaxLevel(); + std::pair<int16, int16> levels = creatureTemplatePair.second.GetMinMaxLevel(); for (int16 lvl = levels.first; lvl <= levels.second; ++lvl) { - if (_creatureBaseStatsStore.find(MAKE_PAIR16(lvl, creatureTemplate->unit_class)) == _creatureBaseStatsStore.end()) - TC_LOG_ERROR("sql.sql", "Missing base stats for creature class %u level %u", creatureTemplate->unit_class, lvl); + if (!_creatureBaseStatsStore.count(MAKE_PAIR16(lvl, creatureTemplatePair.second.unit_class))) + TC_LOG_ERROR("sql.sql", "Missing base stats for creature class %u level %u", creatureTemplatePair.second.unit_class, lvl); } } @@ -9980,7 +9922,7 @@ TerrainSwapInfo const* ObjectMgr::GetTerrainSwapInfo(uint32 terrainSwapId) const GameObjectTemplate const* ObjectMgr::GetGameObjectTemplate(uint32 entry) const { - return entry < _gameObjectTemplateStore.size() ? _gameObjectTemplateStore[entry].get() : nullptr; + return Trinity::Containers::MapGetValuePtr(_gameObjectTemplateStore, entry); } GameObjectTemplateAddon const* ObjectMgr::GetGameObjectTemplateAddon(uint32 entry) const @@ -9994,12 +9936,12 @@ GameObjectTemplateAddon const* ObjectMgr::GetGameObjectTemplateAddon(uint32 entr CreatureTemplate const* ObjectMgr::GetCreatureTemplate(uint32 entry) const { - return entry < _creatureTemplateStore.size() ? _creatureTemplateStore[entry].get() : nullptr; + return Trinity::Containers::MapGetValuePtr(_creatureTemplateStore, entry); } -QuestPOIData const* ObjectMgr::GetQuestPOIData(int32 QuestID) +QuestPOIData const* ObjectMgr::GetQuestPOIData(int32 questId) { - return Trinity::Containers::MapGetValuePtr(_questPOIStore, QuestID); + return Trinity::Containers::MapGetValuePtr(_questPOIStore, questId); } VehicleTemplate const* ObjectMgr::GetVehicleTemplate(Vehicle* veh) const @@ -10351,21 +10293,18 @@ void ObjectMgr::InitializeQueriesData(QueryDataGroup mask) // Initialize Query data for creatures if (mask & QUERY_DATA_CREATURES) - for (auto const& creatureTemplate : _creatureTemplateStore) - if (creatureTemplate) - creatureTemplate->InitializeQueryData(); + for (auto& creatureTemplatePair : _creatureTemplateStore) + creatureTemplatePair.second.InitializeQueryData(); // Initialize Query Data for gameobjects if (mask & QUERY_DATA_GAMEOBJECTS) - for (auto const& gameObjectTemplate : _gameObjectTemplateStore) - if (gameObjectTemplate) - gameObjectTemplate->InitializeQueryData(); + for (auto& gameObjectTemplatePair : _gameObjectTemplateStore) + gameObjectTemplatePair.second.InitializeQueryData(); // Initialize Query Data for quests if (mask & QUERY_DATA_QUESTS) - for (auto const& questTemplate : _questTemplates) - if (questTemplate) - questTemplate->InitializeQueryData(); + for (auto& questTemplatePair : _questTemplates) + questTemplatePair.second.InitializeQueryData(); // Initialize Quest POI data if (mask & QUERY_DATA_POIS) diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index f2911b515de..abd56dd76b1 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -170,7 +170,7 @@ struct GameTele std::wstring wnameLow; }; -typedef std::unordered_map<uint32, GameTele > GameTeleContainer; +typedef std::unordered_map<uint32, GameTele> GameTeleContainer; enum ScriptsType { @@ -417,7 +417,7 @@ struct ScriptInfo }; typedef std::multimap<uint32, ScriptInfo> ScriptMap; -typedef std::map<uint32, ScriptMap > ScriptMapMap; +typedef std::map<uint32, ScriptMap> ScriptMapMap; typedef std::multimap<uint32 /*spell id*/, std::pair<uint32 /*script id*/, bool /*enabled*/>> SpellScriptsContainer; typedef std::pair<SpellScriptsContainer::iterator, SpellScriptsContainer::iterator> SpellScriptsBounds; TC_GAME_API extern ScriptMapMap sSpellScripts; @@ -495,7 +495,7 @@ struct TrinityString }; typedef std::map<ObjectGuid, ObjectGuid> LinkedRespawnContainer; -typedef std::vector<std::unique_ptr<CreatureTemplate>> CreatureTemplateContainer; +typedef std::unordered_map<uint32, CreatureTemplate> CreatureTemplateContainer; typedef std::unordered_map<uint32, CreatureAddon> CreatureTemplateAddonContainer; typedef std::unordered_map<ObjectGuid::LowType, CreatureData> CreatureDataContainer; typedef std::unordered_map<ObjectGuid::LowType, CreatureAddon> CreatureAddonContainer; @@ -504,7 +504,7 @@ typedef std::unordered_map<uint8, EquipmentInfo> EquipmentInfoContainerInternal; typedef std::unordered_map<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer; typedef std::unordered_map<uint32, CreatureModelInfo> CreatureModelContainer; typedef std::unordered_map<uint32, std::vector<uint32>> CreatureQuestItemMap; -typedef std::vector<std::unique_ptr<GameObjectTemplate>> GameObjectTemplateContainer; +typedef std::unordered_map<uint32, GameObjectTemplate> GameObjectTemplateContainer; typedef std::unordered_map<uint32, GameObjectTemplateAddon> GameObjectTemplateAddonContainer; typedef std::unordered_map<ObjectGuid::LowType, GameObjectData> GameObjectDataContainer; typedef std::unordered_map<ObjectGuid::LowType, GameObjectAddon> GameObjectAddonContainer; @@ -515,7 +515,7 @@ typedef std::unordered_map<uint16, std::vector<InstanceSpawnGroupInfo>> Instance typedef std::map<TempSummonGroupKey, std::vector<TempSummonData>> TempSummonDataContainer; typedef std::unordered_map<uint32, CreatureLocale> CreatureLocaleContainer; typedef std::unordered_map<uint32, GameObjectLocale> GameObjectLocaleContainer; -typedef std::vector<std::unique_ptr<ItemTemplate>> ItemTemplateContainer; +typedef std::unordered_map<uint32, ItemTemplate> ItemTemplateContainer; typedef std::unordered_map<uint32, QuestTemplateLocale> QuestTemplateLocaleContainer; typedef std::unordered_map<uint32, QuestObjectivesLocale> QuestObjectivesLocaleContainer; typedef std::unordered_map<uint32, QuestOfferRewardLocale> QuestOfferRewardLocaleContainer; @@ -935,7 +935,7 @@ struct DungeonEncounter uint32 lastEncounterDungeon; }; -typedef std::vector<std::unique_ptr<DungeonEncounter const>> DungeonEncounterList; +typedef std::vector<DungeonEncounter> DungeonEncounterList; typedef std::unordered_map<uint64, DungeonEncounterList> DungeonEncounterContainer; struct TerrainSwapInfo @@ -1010,14 +1010,14 @@ class TC_GAME_API ObjectMgr static ObjectMgr* instance(); - typedef std::vector<std::unique_ptr<Quest>> QuestContainer; + typedef std::unordered_map<uint32, Quest> QuestContainer; typedef std::unordered_map<uint32 /*questObjectiveId*/, QuestObjective const*> QuestObjectivesByIdContainer; typedef std::unordered_map<uint32, AreaTriggerStruct> AreaTriggerContainer; typedef std::unordered_map<uint32, uint32> AreaTriggerScriptContainer; - typedef std::unordered_map<uint64, std::unique_ptr<AccessRequirement>> AccessRequirementContainer; + typedef std::unordered_map<uint64, AccessRequirement> AccessRequirementContainer; typedef std::unordered_map<uint32, RepRewardRate > RepRewardRateContainer; typedef std::unordered_map<uint32, ReputationOnKillEntry> RepOnKillContainer; @@ -1031,7 +1031,7 @@ class TC_GAME_API ObjectMgr GameObjectTemplate const* GetGameObjectTemplate(uint32 entry) const; GameObjectTemplateContainer const& GetGameObjectTemplates() const { return _gameObjectTemplateStore; } - uint32 LoadReferenceVendor(int32 vendor, int32 item_id, std::set<uint32> *skip_vendors); + uint32 LoadReferenceVendor(int32 vendor, int32 item_id, std::set<uint32>* skip_vendors); void LoadGameObjectTemplate(); void LoadGameObjectTemplateAddons(); @@ -1170,7 +1170,7 @@ class TC_GAME_API ObjectMgr return nullptr; } - QuestPOIData const* GetQuestPOIData(int32 QuestID); + QuestPOIData const* GetQuestPOIData(int32 questId); VehicleTemplate const* GetVehicleTemplate(Vehicle* veh) const; VehicleAccessoryList const* GetVehicleAccessoryList(Vehicle* veh) const; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 66b91c80497..1446a5ad9f9 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -2366,17 +2366,14 @@ void WorldSession::HandleCharRaceOrFactionChangeCallback(std::shared_ptr<WorldPa // Disable all old-faction specific quests { ObjectMgr::QuestContainer const& questTemplates = sObjectMgr->GetQuestTemplates(); - for (auto const& quest : questTemplates) + for (auto const& questTemplatePair : questTemplates) { - if (!quest) - continue; - uint64 newRaceMask = (newTeamId == TEAM_ALLIANCE) ? RACEMASK_ALLIANCE : RACEMASK_HORDE; - if (quest->GetAllowableRaces().RawValue != uint64(-1) && !(quest->GetAllowableRaces().RawValue & newRaceMask)) + if (questTemplatePair.second.GetAllowableRaces().RawValue != uint64(-1) && !(questTemplatePair.second.GetAllowableRaces().RawValue & newRaceMask)) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST); stmt->setUInt64(0, lowGuid); - stmt->setUInt32(1, quest->GetQuestId()); + stmt->setUInt32(1, questTemplatePair.first); trans->Append(stmt); } } diff --git a/src/server/game/Instances/InstanceScript.cpp b/src/server/game/Instances/InstanceScript.cpp index 0a4c3a42cda..d802a96b01d 100644 --- a/src/server/game/Instances/InstanceScript.cpp +++ b/src/server/game/Instances/InstanceScript.cpp @@ -772,14 +772,14 @@ void InstanceScript::UpdateEncounterState(EncounterCreditType type, uint32 credi for (auto const& encounter : *encounters) { - if (encounter->creditType == type && encounter->creditEntry == creditEntry) + if (encounter.creditType == type && encounter.creditEntry == creditEntry) { - completedEncounters |= 1 << encounter->dbcEntry->Bit; - if (encounter->lastEncounterDungeon) + completedEncounters |= 1 << encounter.dbcEntry->Bit; + if (encounter.lastEncounterDungeon) { - dungeonId = encounter->lastEncounterDungeon; + dungeonId = encounter.lastEncounterDungeon; TC_LOG_DEBUG("lfg", "UpdateEncounterState: Instance %s (instanceId %u) completed encounter %s. Credit Dungeon: %u", - instance->GetMapName(), instance->GetInstanceId(), encounter->dbcEntry->Name[sWorld->GetDefaultDbcLocale()], dungeonId); + instance->GetMapName(), instance->GetInstanceId(), encounter.dbcEntry->Name[sWorld->GetDefaultDbcLocale()], dungeonId); break; } } diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp index c7e261f3755..6c4dcdba7d7 100644 --- a/src/server/game/Loot/LootMgr.cpp +++ b/src/server/game/Loot/LootMgr.cpp @@ -792,15 +792,12 @@ void LoadLootTemplates_Creature() // Remove real entries and check loot existence CreatureTemplateContainer const& ctc = sObjectMgr->GetCreatureTemplates(); - for (auto const& creatureTemplate : ctc) + for (auto const& creatureTemplatePair : ctc) { - if (!creatureTemplate) - continue; - - if (uint32 lootid = creatureTemplate->lootid) + if (uint32 lootid = creatureTemplatePair.second.lootid) { - if (lootIdSet.find(lootid) == lootIdSet.end()) - LootTemplates_Creature.ReportNonExistingId(lootid, "Creature", creatureTemplate->Entry); + if (!lootIdSet.count(lootid)) + LootTemplates_Creature.ReportNonExistingId(lootid, "Creature", creatureTemplatePair.first); else lootIdSetUsed.insert(lootid); } @@ -885,15 +882,12 @@ void LoadLootTemplates_Gameobject() // remove real entries and check existence loot GameObjectTemplateContainer const& gotc = sObjectMgr->GetGameObjectTemplates(); - for (auto const& gameObjectTemplate : gotc) + for (auto const& gameObjectTemplatePair : gotc) { - if (!gameObjectTemplate) - continue; - - if (uint32 lootid = gameObjectTemplate->GetLootId()) + if (uint32 lootid = gameObjectTemplatePair.second.GetLootId()) { - if (lootIdSet.find(lootid) == lootIdSet.end()) - LootTemplates_Gameobject.ReportNonExistingId(lootid, "Gameobject", gameObjectTemplate->entry); + if (!lootIdSet.count(lootid)) + LootTemplates_Gameobject.ReportNonExistingId(lootid, "Gameobject", gameObjectTemplatePair.first); else lootIdSetUsed.insert(lootid); } @@ -922,14 +916,9 @@ void LoadLootTemplates_Item() // remove real entries and check existence loot ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); - for (auto const& itemTemplate : its) - { - if (!itemTemplate) - continue; - - if (lootIdSet.find(itemTemplate->GetId()) != lootIdSet.end() && (itemTemplate->GetFlags() & ITEM_FLAG_HAS_LOOT)) - lootIdSet.erase(itemTemplate->GetId()); - } + for (auto const& itemTemplatePair : its) + if (lootIdSet.count(itemTemplatePair.first) > 0 && (itemTemplatePair.second.GetFlags() & ITEM_FLAG_HAS_LOOT)) + lootIdSet.erase(itemTemplatePair.first); // output error for any still listed (not referenced from appropriate table) ids LootTemplates_Item.ReportUnusedIds(lootIdSet); @@ -951,13 +940,13 @@ void LoadLootTemplates_Milling() // remove real entries and check existence loot ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); - for (auto const& itemTemplate : its) + for (auto const& itemTemplatePair : its) { - if (!itemTemplate || !(itemTemplate->GetFlags() & ITEM_FLAG_IS_MILLABLE)) + if (!(itemTemplatePair.second.GetFlags() & ITEM_FLAG_IS_MILLABLE)) continue; - if (lootIdSet.find(itemTemplate->GetId()) != lootIdSet.end()) - lootIdSet.erase(itemTemplate->GetId()); + if (lootIdSet.count(itemTemplatePair.first) > 0) + lootIdSet.erase(itemTemplatePair.first); } // output error for any still listed (not referenced from appropriate table) ids @@ -980,15 +969,12 @@ void LoadLootTemplates_Pickpocketing() // Remove real entries and check loot existence CreatureTemplateContainer const& ctc = sObjectMgr->GetCreatureTemplates(); - for (auto const& creatureTemplate : ctc) + for (auto const& creatureTemplatePair : ctc) { - if (!creatureTemplate) - continue; - - if (uint32 lootid = creatureTemplate->pickpocketLootId) + if (uint32 lootid = creatureTemplatePair.second.pickpocketLootId) { - if (lootIdSet.find(lootid) == lootIdSet.end()) - LootTemplates_Pickpocketing.ReportNonExistingId(lootid, "Creature", creatureTemplate->Entry); + if (!lootIdSet.count(lootid)) + LootTemplates_Pickpocketing.ReportNonExistingId(lootid, "Creature", creatureTemplatePair.first); else lootIdSetUsed.insert(lootid); } @@ -1017,13 +1003,13 @@ void LoadLootTemplates_Prospecting() // remove real entries and check existence loot ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); - for (auto const& itemTemplate : its) + for (auto const& itemTemplatePair : its) { - if (!itemTemplate || !(itemTemplate->GetFlags() & ITEM_FLAG_IS_PROSPECTABLE)) + if (!(itemTemplatePair.second.GetFlags() & ITEM_FLAG_IS_PROSPECTABLE)) continue; - if (lootIdSet.find(itemTemplate->GetId()) != lootIdSet.end()) - lootIdSet.erase(itemTemplate->GetId()); + if (lootIdSet.count(itemTemplatePair.first) > 0) + lootIdSet.erase(itemTemplatePair.first); } // output error for any still listed (not referenced from appropriate table) ids @@ -1070,15 +1056,12 @@ void LoadLootTemplates_Skinning() // remove real entries and check existence loot CreatureTemplateContainer const& ctc = sObjectMgr->GetCreatureTemplates(); - for (auto const& creatureTemplate : ctc) + for (auto const& creatureTemplatePair : ctc) { - if (!creatureTemplate) - continue; - - if (uint32 lootid = creatureTemplate->SkinLootId) + if (uint32 lootid = creatureTemplatePair.second.SkinLootId) { - if (lootIdSet.find(lootid) == lootIdSet.end()) - LootTemplates_Skinning.ReportNonExistingId(lootid, "Creature", creatureTemplate->Entry); + if (!lootIdSet.count(lootid)) + LootTemplates_Skinning.ReportNonExistingId(lootid, "Creature", creatureTemplatePair.first); else lootIdSetUsed.insert(lootid); } diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index 53591f83983..6391adf7438 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -178,12 +178,9 @@ public: uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS); CreatureTemplateContainer const& ctc = sObjectMgr->GetCreatureTemplates(); - for (auto const& creatureTemplate : ctc) + for (auto const& creatureTemplatePair : ctc) { - if (!creatureTemplate) - continue; - - uint32 id = creatureTemplate->Entry; + uint32 id = creatureTemplatePair.first; uint8 localeIndex = handler->GetSessionDbLocaleIndex(); if (CreatureLocale const* creatureLocale = sObjectMgr->GetCreatureLocale(id)) { @@ -212,7 +209,7 @@ public: } } - std::string const& name = creatureTemplate->Name; + std::string const& name = creatureTemplatePair.second.Name; if (name.empty()) continue; @@ -416,9 +413,9 @@ public: // Search in ItemSparse ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); - for (auto const& itemTemplate : its) + for (auto const& itemTemplatePair : its) { - std::string name = itemTemplate->GetName(handler->GetSessionDbcLocale()); + std::string name = itemTemplatePair.second.GetName(handler->GetSessionDbcLocale()); if (name.empty()) continue; @@ -431,9 +428,9 @@ public: } if (handler->GetSession()) - handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itemTemplate->GetId(), itemTemplate->GetId(), name.c_str()); + handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itemTemplatePair.first, itemTemplatePair.first, name.c_str()); else - handler->PSendSysMessage(LANG_ITEM_LIST_CONSOLE, itemTemplate->GetId(), name.c_str()); + handler->PSendSysMessage(LANG_ITEM_LIST_CONSOLE, itemTemplatePair.first, name.c_str()); if (!found) found = true; @@ -536,13 +533,10 @@ public: uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS); GameObjectTemplateContainer const& gotc = sObjectMgr->GetGameObjectTemplates(); - for (auto const& gameObjectTemplate : gotc) + for (auto const& gameObjectTemplatePair : gotc) { - if (!gameObjectTemplate) - continue; - uint8 localeIndex = handler->GetSessionDbLocaleIndex(); - if (GameObjectLocale const* objectLocalte = sObjectMgr->GetGameObjectLocale(gameObjectTemplate->entry)) + if (GameObjectLocale const* objectLocalte = sObjectMgr->GetGameObjectLocale(gameObjectTemplatePair.first)) { if (objectLocalte->Name.size() > localeIndex && !objectLocalte->Name[localeIndex].empty()) { @@ -556,9 +550,9 @@ public: } if (handler->GetSession()) - handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, gameObjectTemplate->entry, gameObjectTemplate->entry, name.c_str()); + handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, gameObjectTemplatePair.first, gameObjectTemplatePair.first, name.c_str()); else - handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, gameObjectTemplate->entry, name.c_str()); + handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, gameObjectTemplatePair.first, name.c_str()); if (!found) found = true; @@ -568,7 +562,7 @@ public: } } - std::string const& name = gameObjectTemplate->name; + std::string const& name = gameObjectTemplatePair.second.name; if (name.empty()) continue; @@ -581,9 +575,9 @@ public: } if (handler->GetSession()) - handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, gameObjectTemplate->entry, gameObjectTemplate->entry, name.c_str()); + handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, gameObjectTemplatePair.first, gameObjectTemplatePair.first, name.c_str()); else - handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, gameObjectTemplate->entry, name.c_str()); + handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, gameObjectTemplatePair.first, name.c_str()); if (!found) found = true; @@ -618,16 +612,13 @@ public: uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS); ObjectMgr::QuestContainer const& questTemplates = sObjectMgr->GetQuestTemplates(); - for (auto const& qInfo : questTemplates) + for (auto const& questTemplatePair : questTemplates) { - if (!qInfo) - continue; - uint8 localeIndex = handler->GetSessionDbLocaleIndex(); if (localeIndex >= 0) { uint8 ulocaleIndex = uint8(localeIndex); - if (QuestTemplateLocale const* questLocale = sObjectMgr->GetQuestLocale(qInfo->GetQuestId())) + if (QuestTemplateLocale const* questLocale = sObjectMgr->GetQuestLocale(questTemplatePair.first)) { if (questLocale->LogTitle.size() > ulocaleIndex && !questLocale->LogTitle[ulocaleIndex].empty()) { @@ -645,9 +636,7 @@ public: if (target) { - QuestStatus status = target->GetQuestStatus(qInfo->GetQuestId()); - - switch (status) + switch (target->GetQuestStatus(questTemplatePair.first)) { case QUEST_STATUS_COMPLETE: statusStr = handler->GetTrinityString(LANG_COMMAND_QUEST_COMPLETE); @@ -666,22 +655,22 @@ public: if (handler->GetSession()) { int32 maxLevel = 0; - if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(qInfo->GetContentTuningId(), + if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(questTemplatePair.second.GetContentTuningId(), handler->GetSession()->GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask)) maxLevel = questLevels->MaxLevel; int32 scalingFactionGroup = 0; - if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(qInfo->GetContentTuningId())) + if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(questTemplatePair.second.GetContentTuningId())) scalingFactionGroup = contentTuning->GetScalingFactionGroup(); - handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, qInfo->GetQuestId(), qInfo->GetQuestId(), - handler->GetSession()->GetPlayer()->GetQuestLevel(qInfo.get()), - handler->GetSession()->GetPlayer()->GetQuestMinLevel(qInfo.get()), + handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, questTemplatePair.first, questTemplatePair.first, + handler->GetSession()->GetPlayer()->GetQuestLevel(&questTemplatePair.second), + handler->GetSession()->GetPlayer()->GetQuestMinLevel(&questTemplatePair.second), maxLevel, scalingFactionGroup, title.c_str(), statusStr); } else - handler->PSendSysMessage(LANG_QUEST_LIST_CONSOLE, qInfo->GetQuestId(), title.c_str(), statusStr); + handler->PSendSysMessage(LANG_QUEST_LIST_CONSOLE, questTemplatePair.first, title.c_str(), statusStr); if (!found) found = true; @@ -692,7 +681,7 @@ public: } } - std::string title = qInfo->GetLogTitle(); + std::string title = questTemplatePair.second.GetLogTitle(); if (title.empty()) continue; @@ -708,9 +697,7 @@ public: if (target) { - QuestStatus status = target->GetQuestStatus(qInfo->GetQuestId()); - - switch (status) + switch (target->GetQuestStatus(questTemplatePair.first)) { case QUEST_STATUS_COMPLETE: statusStr = handler->GetTrinityString(LANG_COMMAND_QUEST_COMPLETE); @@ -729,22 +716,22 @@ public: if (handler->GetSession()) { int32 maxLevel = 0; - if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(qInfo->GetContentTuningId(), + if (Optional<ContentTuningLevels> questLevels = sDB2Manager.GetContentTuningData(questTemplatePair.second.GetContentTuningId(), handler->GetSession()->GetPlayer()->m_playerData->CtrOptions->ContentTuningConditionMask)) maxLevel = questLevels->MaxLevel; int32 scalingFactionGroup = 0; - if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(qInfo->GetContentTuningId())) + if (ContentTuningEntry const* contentTuning = sContentTuningStore.LookupEntry(questTemplatePair.second.GetContentTuningId())) scalingFactionGroup = contentTuning->GetScalingFactionGroup(); - handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, qInfo->GetQuestId(), qInfo->GetQuestId(), - handler->GetSession()->GetPlayer()->GetQuestLevel(qInfo.get()), - handler->GetSession()->GetPlayer()->GetQuestMinLevel(qInfo.get()), + handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, questTemplatePair.first, questTemplatePair.first, + handler->GetSession()->GetPlayer()->GetQuestLevel(&questTemplatePair.second), + handler->GetSession()->GetPlayer()->GetQuestMinLevel(&questTemplatePair.second), maxLevel, scalingFactionGroup, title.c_str(), statusStr); } else - handler->PSendSysMessage(LANG_QUEST_LIST_CONSOLE, qInfo->GetQuestId(), title.c_str(), statusStr); + handler->PSendSysMessage(LANG_QUEST_LIST_CONSOLE, questTemplatePair.first, title.c_str(), statusStr); if (!found) found = true; diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 150585b3cc1..14e64069619 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1440,24 +1440,24 @@ public: bool found = false; ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); - for (auto const& itemTemplate : its) + for (auto const& itemTemplatePair : its) { - if (!itemTemplate || itemTemplate->GetItemSet() != itemSetId) + if (itemTemplatePair.second.GetItemSet() != itemSetId) continue; found = true; ItemPosCountVec dest; - InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemTemplate->GetId(), 1); + InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemTemplatePair.first, 1); if (msg == EQUIP_ERR_OK) { std::vector<int32> bonusListIDsForItem = bonusListIDs; // copy, bonuses for each depending on context might be different for each item if (itemContext != ItemContext::NONE && itemContext < ItemContext::Max) { - std::set<uint32> contextBonuses = sDB2Manager.GetDefaultItemBonusTree(itemTemplate->GetId(), itemContext); + std::set<uint32> contextBonuses = sDB2Manager.GetDefaultItemBonusTree(itemTemplatePair.first, itemContext); bonusListIDsForItem.insert(bonusListIDsForItem.begin(), contextBonuses.begin(), contextBonuses.end()); } - Item* item = playerTarget->StoreNewItem(dest, itemTemplate->GetId(), true, {}, GuidSet(), itemContext, bonusListIDsForItem); + Item* item = playerTarget->StoreNewItem(dest, itemTemplatePair.first, true, {}, GuidSet(), itemContext, bonusListIDsForItem); // remove binding (let GM give it to another player later) if (player == playerTarget) @@ -1469,8 +1469,8 @@ public: } else { - player->SendEquipError(msg, nullptr, nullptr, itemTemplate->GetId()); - handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemTemplate->GetId(), 1); + player->SendEquipError(msg, nullptr, nullptr, itemTemplatePair.first); + handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemTemplatePair.first, 1); } } diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index 0fd9c121e13..527b9680805 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -84,12 +84,12 @@ public: ItemTemplateContainer const& itc = sObjectMgr->GetItemTemplateStore(); auto itr = std::find_if(std::begin(itc), std::end(itc), [quest](ItemTemplateContainer::value_type const& value) { - return value && value->GetStartQuest() == quest->GetQuestId(); + return value.second.GetStartQuest() == quest->GetQuestId(); }); if (itr != std::end(itc)) { - handler->PSendSysMessage(LANG_COMMAND_QUEST_STARTFROMITEM, entry, (*itr)->GetId()); + handler->PSendSysMessage(LANG_COMMAND_QUEST_STARTFROMITEM, entry, itr->first); handler->SetSentErrorMessage(true); return false; } |