diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2018-01-17 02:17:49 -0300 | 
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-06-16 01:00:11 +0200 | 
| commit | 21556667c16b282b77934bddee3d86f0c632ef31 (patch) | |
| tree | 4669148763e4d450f12a46a7f2c8a7a2f6913a87 /src/server/scripts | |
| parent | 5b5bc4c5c7cad020bd831185057451b674c234d8 (diff) | |
Core/Globals: throw some RAII into ObjectMgr, and load templates into vectors
Ref #14274
(cherry picked from commit b64c5043140dc7b7908e259e441de16cc0261320)
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_lookup.cpp | 62 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 52 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_quest.cpp | 10 | 
3 files changed, 65 insertions, 59 deletions
diff --git a/src/server/scripts/Commands/cs_lookup.cpp b/src/server/scripts/Commands/cs_lookup.cpp index d54871883ed..53591f83983 100644 --- a/src/server/scripts/Commands/cs_lookup.cpp +++ b/src/server/scripts/Commands/cs_lookup.cpp @@ -177,16 +177,19 @@ public:          uint32 count = 0;          uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS); -        CreatureTemplateContainer const* ctc = sObjectMgr->GetCreatureTemplates(); -        for (CreatureTemplateContainer::const_iterator itr = ctc->begin(); itr != ctc->end(); ++itr) +        CreatureTemplateContainer const& ctc = sObjectMgr->GetCreatureTemplates(); +        for (auto const& creatureTemplate : ctc)          { -            uint32 id = itr->second.Entry; +            if (!creatureTemplate) +                continue; + +            uint32 id = creatureTemplate->Entry;              uint8 localeIndex = handler->GetSessionDbLocaleIndex();              if (CreatureLocale const* creatureLocale = sObjectMgr->GetCreatureLocale(id))              {                  if (creatureLocale->Name.size() > localeIndex && !creatureLocale->Name[localeIndex].empty())                  { -                    std::string name = creatureLocale->Name[localeIndex]; +                    std::string const& name = creatureLocale->Name[localeIndex];                      if (Utf8FitTo(name, wNamePart))                      { @@ -209,7 +212,7 @@ public:                  }              } -            std::string name = itr->second.Name; +            std::string const& name = creatureTemplate->Name;              if (name.empty())                  continue; @@ -412,10 +415,10 @@ public:          uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS);          // Search in ItemSparse -        ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore(); -        for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr) +        ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); +        for (auto const& itemTemplate : its)          { -            std::string name = itr->second.GetName(handler->GetSessionDbcLocale()); +            std::string name = itemTemplate->GetName(handler->GetSessionDbcLocale());              if (name.empty())                  continue; @@ -428,9 +431,9 @@ public:                  }                  if (handler->GetSession()) -                    handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itr->second.GetId(), itr->second.GetId(), name.c_str()); +                    handler->PSendSysMessage(LANG_ITEM_LIST_CHAT, itemTemplate->GetId(), itemTemplate->GetId(), name.c_str());                  else -                    handler->PSendSysMessage(LANG_ITEM_LIST_CONSOLE, itr->second.GetId(), name.c_str()); +                    handler->PSendSysMessage(LANG_ITEM_LIST_CONSOLE, itemTemplate->GetId(), name.c_str());                  if (!found)                      found = true; @@ -532,16 +535,18 @@ public:          uint32 count = 0;          uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS); -        GameObjectTemplateContainer const* gotc = sObjectMgr->GetGameObjectTemplates(); -        for (GameObjectTemplateContainer::const_iterator itr = gotc->begin(); itr != gotc->end(); ++itr) +        GameObjectTemplateContainer const& gotc = sObjectMgr->GetGameObjectTemplates(); +        for (auto const& gameObjectTemplate : gotc)          { +            if (!gameObjectTemplate) +                continue; +              uint8 localeIndex = handler->GetSessionDbLocaleIndex(); -            if (GameObjectLocale const* objectLocalte = sObjectMgr->GetGameObjectLocale(itr->second.entry)) +            if (GameObjectLocale const* objectLocalte = sObjectMgr->GetGameObjectLocale(gameObjectTemplate->entry))              {                  if (objectLocalte->Name.size() > localeIndex && !objectLocalte->Name[localeIndex].empty())                  { -                    std::string name = objectLocalte->Name[localeIndex]; - +                    std::string const& name = objectLocalte->Name[localeIndex];                      if (Utf8FitTo(name, wNamePart))                      {                          if (maxResults && count++ == maxResults) @@ -551,9 +556,9 @@ public:                          }                          if (handler->GetSession()) -                            handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, itr->second.entry, itr->second.entry, name.c_str()); +                            handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, gameObjectTemplate->entry, gameObjectTemplate->entry, name.c_str());                          else -                            handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, itr->second.entry, name.c_str()); +                            handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, gameObjectTemplate->entry, name.c_str());                          if (!found)                              found = true; @@ -563,7 +568,7 @@ public:                  }              } -            std::string name = itr->second.name; +            std::string const& name = gameObjectTemplate->name;              if (name.empty())                  continue; @@ -576,9 +581,9 @@ public:                  }                  if (handler->GetSession()) -                    handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, itr->second.entry, itr->second.entry, name.c_str()); +                    handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CHAT, gameObjectTemplate->entry, gameObjectTemplate->entry, name.c_str());                  else -                    handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, itr->second.entry, name.c_str()); +                    handler->PSendSysMessage(LANG_GO_ENTRY_LIST_CONSOLE, gameObjectTemplate->entry, name.c_str());                  if (!found)                      found = true; @@ -612,12 +617,13 @@ public:          uint32 count = 0;          uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS); -        ObjectMgr::QuestMap const& qTemplates = sObjectMgr->GetQuestTemplates(); -        for (ObjectMgr::QuestMap::const_iterator iter = qTemplates.begin(); iter != qTemplates.end(); ++iter) +        ObjectMgr::QuestContainer const& questTemplates = sObjectMgr->GetQuestTemplates(); +        for (auto const& qInfo : questTemplates)          { -            Quest* qInfo = iter->second; +            if (!qInfo) +                continue; -            int localeIndex = handler->GetSessionDbLocaleIndex(); +            uint8 localeIndex = handler->GetSessionDbLocaleIndex();              if (localeIndex >= 0)              {                  uint8 ulocaleIndex = uint8(localeIndex); @@ -669,8 +675,8 @@ public:                                      scalingFactionGroup = contentTuning->GetScalingFactionGroup();                                  handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, qInfo->GetQuestId(), qInfo->GetQuestId(), -                                    handler->GetSession()->GetPlayer()->GetQuestLevel(qInfo), -                                    handler->GetSession()->GetPlayer()->GetQuestMinLevel(qInfo), +                                    handler->GetSession()->GetPlayer()->GetQuestLevel(qInfo.get()), +                                    handler->GetSession()->GetPlayer()->GetQuestMinLevel(qInfo.get()),                                      maxLevel, scalingFactionGroup,                                      title.c_str(), statusStr);                              } @@ -732,8 +738,8 @@ public:                          scalingFactionGroup = contentTuning->GetScalingFactionGroup();                      handler->PSendSysMessage(LANG_QUEST_LIST_CHAT, qInfo->GetQuestId(), qInfo->GetQuestId(), -                        handler->GetSession()->GetPlayer()->GetQuestLevel(qInfo), -                        handler->GetSession()->GetPlayer()->GetQuestMinLevel(qInfo), +                        handler->GetSession()->GetPlayer()->GetQuestLevel(qInfo.get()), +                        handler->GetSession()->GetPlayer()->GetQuestMinLevel(qInfo.get()),                          maxLevel, scalingFactionGroup,                          title.c_str(), statusStr);                  } diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 7f534f71b9f..150585b3cc1 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1439,38 +1439,38 @@ public:          TC_LOG_DEBUG("misc", handler->GetTrinityString(LANG_ADDITEMSET), itemSetId);          bool found = false; -        ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore(); -        for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr) +        ItemTemplateContainer const& its = sObjectMgr->GetItemTemplateStore(); +        for (auto const& itemTemplate : its)          { -            if (itr->second.GetItemSet() == itemSetId) +            if (!itemTemplate || itemTemplate->GetItemSet() != itemSetId) +                continue; + +            found = true; +            ItemPosCountVec dest; +            InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemTemplate->GetId(), 1); +            if (msg == EQUIP_ERR_OK)              { -                found = true; -                ItemPosCountVec dest; -                InventoryResult msg = playerTarget->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itr->second.GetId(), 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::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(itr->second.GetId(), itemContext); -                        bonusListIDsForItem.insert(bonusListIDs.begin(), contextBonuses.begin(), contextBonuses.end()); -                    } +                    std::set<uint32> contextBonuses = sDB2Manager.GetDefaultItemBonusTree(itemTemplate->GetId(), itemContext); +                    bonusListIDsForItem.insert(bonusListIDsForItem.begin(), contextBonuses.begin(), contextBonuses.end()); +                } -                    Item* item = playerTarget->StoreNewItem(dest, itr->second.GetId(), true, {}, GuidSet(), itemContext, bonusListIDsForItem); +                Item* item = playerTarget->StoreNewItem(dest, itemTemplate->GetId(), true, {}, GuidSet(), itemContext, bonusListIDsForItem); -                    // remove binding (let GM give it to another player later) -                    if (player == playerTarget) -                        item->SetBinding(false); +                // remove binding (let GM give it to another player later) +                if (player == playerTarget) +                    item->SetBinding(false); -                    player->SendNewItem(item, 1, false, true); -                    if (player != playerTarget) -                        playerTarget->SendNewItem(item, 1, true, false); -                } -                else -                { -                    player->SendEquipError(msg, nullptr, nullptr, itr->second.GetId()); -                    handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itr->second.GetId(), 1); -                } +                player->SendNewItem(item, 1, false, true); +                if (player != playerTarget) +                    playerTarget->SendNewItem(item, 1, true, false); +            } +            else +            { +                player->SendEquipError(msg, nullptr, nullptr, itemTemplate->GetId()); +                handler->PSendSysMessage(LANG_ITEM_CANNOT_CREATE, itemTemplate->GetId(), 1);              }          } diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index be005c46906..0fd9c121e13 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -81,15 +81,15 @@ public:          }          // check item starting quest (it can work incorrectly if added without item in inventory) -        ItemTemplateContainer const* itc = sObjectMgr->GetItemTemplateStore(); -        ItemTemplateContainer::const_iterator result = std::find_if(itc->begin(), itc->end(), [quest](ItemTemplateContainer::value_type const& value) +        ItemTemplateContainer const& itc = sObjectMgr->GetItemTemplateStore(); +        auto itr = std::find_if(std::begin(itc), std::end(itc), [quest](ItemTemplateContainer::value_type const& value)          { -            return value.second.GetStartQuest() == quest->GetQuestId(); +            return value && value->GetStartQuest() == quest->GetQuestId();          }); -        if (result != itc->end()) +        if (itr != std::end(itc))          { -            handler->PSendSysMessage(LANG_COMMAND_QUEST_STARTFROMITEM, entry, result->second.GetId()); +            handler->PSendSysMessage(LANG_COMMAND_QUEST_STARTFROMITEM, entry, (*itr)->GetId());              handler->SetSentErrorMessage(true);              return false;          }  | 
