aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Loot/LootMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Loot/LootMgr.cpp')
-rwxr-xr-xsrc/server/game/Loot/LootMgr.cpp83
1 files changed, 38 insertions, 45 deletions
diff --git a/src/server/game/Loot/LootMgr.cpp b/src/server/game/Loot/LootMgr.cpp
index f05c18e4735..895045aac24 100755
--- a/src/server/game/Loot/LootMgr.cpp
+++ b/src/server/game/Loot/LootMgr.cpp
@@ -248,7 +248,7 @@ bool LootStoreItem::Roll(bool rate) const
if (mincountOrRef < 0) // reference case
return roll_chance_f(chance* (rate ? sWorld->getRate(RATE_DROP_ITEM_REFERENCED) : 1.0f));
- ItemPrototype const *pProto = ObjectMgr::GetItemPrototype(itemid);
+ ItemTemplate const *pProto = sObjectMgr->GetItemTemplate(itemid);
float qualityModifier = pProto && rate ? sWorld->getRate(qualityToRate[pProto->Quality]) : 1.0f;
@@ -272,7 +272,7 @@ bool LootStoreItem::IsValid(LootStore const& store, uint32 entry) const
if (mincountOrRef > 0) // item (quest or non-quest) entry, maybe grouped
{
- ItemPrototype const *proto = ObjectMgr::GetItemPrototype(itemid);
+ ItemTemplate const *proto = sObjectMgr->GetItemTemplate(itemid);
if (!proto)
{
sLog->outErrorDb("Table '%s' entry %d item %d: item entry not listed in `item_template` - skipped", store.GetName(), entry, itemid);
@@ -322,7 +322,7 @@ LootItem::LootItem(LootStoreItem const& li)
itemid = li.itemid;
conditions = li.conditions;
- ItemPrototype const* proto = ObjectMgr::GetItemPrototype(itemid);
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(itemid);
freeforall = proto && (proto->Flags & ITEM_PROTO_FLAG_PARTY_LOOT);
needs_quest = li.needs_quest;
@@ -343,7 +343,7 @@ bool LootItem::AllowedForPlayer(Player const * player) const
if (!sConditionMgr->IsPlayerMeetToConditions(const_cast<Player*>(player), conditions))
return false;
- ItemPrototype const *pProto = ObjectMgr::GetItemPrototype(itemid);
+ ItemTemplate const *pProto = sObjectMgr->GetItemTemplate(itemid);
if (!pProto)
return false;
@@ -400,7 +400,7 @@ void Loot::AddItem(LootStoreItem const & item)
// non-ffa conditionals are counted in FillNonQuestNonFFAConditionalLoot()
if (item.conditions.empty())
{
- ItemPrototype const* proto = ObjectMgr::GetItemPrototype(item.itemid);
+ ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item.itemid);
if (!proto || (proto->Flags & ITEM_PROTO_FLAG_PARTY_LOOT) == 0)
++unlootedCount;
}
@@ -440,7 +440,7 @@ bool Loot::FillLoot(uint32 lootId, LootStore const& store, Player* lootOwner, bo
for (uint8 i = 0; i < items.size(); ++i)
{
- if (ItemPrototype const *proto = sItemStorage.LookupEntry<ItemPrototype>(items[i].itemid))
+ if (ItemTemplate const *proto = sObjectMgr->GetItemTemplate(items[i].itemid))
if (proto->Quality < uint32(pGroup->GetLootThreshold()))
items[i].is_underthreshold = true;
}
@@ -484,7 +484,7 @@ void Loot::FillNotNormalLootFor(Player* pl, bool presentAtLooting)
item = &quest_items[i-itemsSize];
if (!item->is_looted && item->freeforall && item->AllowedForPlayer(pl))
- if (ItemPrototype const* proto = ObjectMgr::GetItemPrototype(item->itemid))
+ if (ItemTemplate const* proto = sObjectMgr->GetItemTemplate(item->itemid))
if (proto->BagFamily & BAG_FAMILY_MASK_CURRENCY_TOKENS)
pl->StoreLootItem(i, this);
}
@@ -790,7 +790,7 @@ ByteBuffer& operator<<(ByteBuffer& b, LootItem const& li)
{
b << uint32(li.itemid);
b << uint32(li.count); // nr of items of this type
- b << uint32(ObjectMgr::GetItemPrototype(li.itemid)->DisplayInfoID);
+ b << uint32(sObjectMgr->GetItemTemplate(li.itemid)->DisplayInfoID);
b << uint32(li.randomSuffix);
b << uint32(li.randomPropertyId);
//b << uint8(0); // slot type - will send after this function call
@@ -1085,7 +1085,7 @@ void LootTemplate::LootGroup::Process(Loot& loot, uint16 lootMode) const
if (item != NULL && item->lootmode & lootMode) // only add this item if roll succeeds and the mode matches
{
bool duplicate = false;
- if (ItemPrototype const *_proto = sItemStorage.LookupEntry<ItemPrototype>(item->itemid))
+ if (ItemTemplate const *_proto = sObjectMgr->GetItemTemplate(item->itemid))
{
uint8 _item_counter = 0;
for (LootItemList::const_iterator _item = loot.items.begin(); _item != loot.items.end(); ++_item)
@@ -1226,7 +1226,7 @@ void LootTemplate::Process(Loot& loot, bool rate, uint16 lootMode, uint8 groupId
if (!i->Roll(rate))
continue; // Bad luck for the entry
- if (ItemPrototype const *_proto = sItemStorage.LookupEntry<ItemPrototype>(i->itemid))
+ if (ItemTemplate const *_proto = sObjectMgr->GetItemTemplate(i->itemid))
{
uint8 _item_counter = 0;
LootItemList::const_iterator _item = loot.items.begin();
@@ -1458,27 +1458,26 @@ void LoadLootTemplates_Disenchant()
uint32 oldMSTime = getMSTime();
- LootIdSet ids_set, ids_setUsed;
- uint32 count = LootTemplates_Disenchant.LoadAndCollectLootIds(ids_set);
+ LootIdSet lootIdSet, loodIdSetUsed;
+ uint32 count = LootTemplates_Disenchant.LoadAndCollectLootIds(lootIdSet);
- // remove real entries and check existence loot
- for (uint32 i = 1; i < sItemStorage.MaxEntry; ++i)
+ ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
+ for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
{
- if (ItemPrototype const *proto = sItemStorage.LookupEntry<ItemPrototype>(i))
+ if (uint32 lootid = itr->second.DisenchantID)
{
- if (uint32 lootid = proto->DisenchantID)
- {
- if (ids_set.find(lootid) == ids_set.end())
- LootTemplates_Disenchant.ReportNotExistedId(lootid);
- else
- ids_setUsed.insert(lootid);
- }
+ if (lootIdSet.find(lootid) == lootIdSet.end())
+ LootTemplates_Disenchant.ReportNotExistedId(lootid);
+ else
+ loodIdSetUsed.insert(lootid);
}
}
- for (LootIdSet::const_iterator itr = ids_setUsed.begin(); itr != ids_setUsed.end(); ++itr)
- ids_set.erase(*itr);
+
+ for (LootIdSet::const_iterator itr = loodIdSetUsed.begin(); itr != loodIdSetUsed.end(); ++itr)
+ lootIdSet.erase(*itr);
+
// output error for any still listed (not referenced from appropriate table) ids
- LootTemplates_Disenchant.ReportUnusedIds(ids_set);
+ LootTemplates_Disenchant.ReportUnusedIds(lootIdSet);
if(count)
sLog->outString(">> Loaded %u disenchanting loot templates in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
@@ -1560,10 +1559,10 @@ void LoadLootTemplates_Item()
uint32 count = LootTemplates_Item.LoadAndCollectLootIds(ids_set);
// remove real entries and check existence loot
- for (uint32 i = 1; i < sItemStorage.MaxEntry; ++i)
- if (ItemPrototype const *proto = sItemStorage.LookupEntry<ItemPrototype>(i))
- if (ids_set.find(proto->ItemId) != ids_set.end() && proto->Flags & ITEM_PROTO_FLAG_OPENABLE)
- ids_set.erase(proto->ItemId);
+ ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
+ for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
+ if (ids_set.find(itr->second.ItemId) != ids_set.end() && itr->second.Flags & ITEM_PROTO_FLAG_OPENABLE)
+ ids_set.erase(itr->second.ItemId);
// output error for any still listed (not referenced from appropriate table) ids
LootTemplates_Item.ReportUnusedIds(ids_set);
@@ -1586,17 +1585,14 @@ void LoadLootTemplates_Milling()
uint32 count = LootTemplates_Milling.LoadAndCollectLootIds(ids_set);
// remove real entries and check existence loot
- for (uint32 i = 1; i < sItemStorage.MaxEntry; ++i)
+ ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
+ for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
{
- ItemPrototype const *proto = sItemStorage.LookupEntry<ItemPrototype>(i);
- if (!proto)
- continue;
-
- if (!(proto->Flags & ITEM_PROTO_FLAG_MILLABLE))
+ if (!(itr->second.Flags & ITEM_PROTO_FLAG_MILLABLE))
continue;
- if (ids_set.find(proto->ItemId) != ids_set.end())
- ids_set.erase(proto->ItemId);
+ if (ids_set.find(itr->second.ItemId) != ids_set.end())
+ ids_set.erase(itr->second.ItemId);
}
// output error for any still listed (not referenced from appropriate table) ids
@@ -1657,17 +1653,14 @@ void LoadLootTemplates_Prospecting()
uint32 count = LootTemplates_Prospecting.LoadAndCollectLootIds(ids_set);
// remove real entries and check existence loot
- for (uint32 i = 1; i < sItemStorage.MaxEntry; ++i)
+ ItemTemplateContainer const* its = sObjectMgr->GetItemTemplateStore();
+ for (ItemTemplateContainer::const_iterator itr = its->begin(); itr != its->end(); ++itr)
{
- ItemPrototype const *proto = sItemStorage.LookupEntry<ItemPrototype>(i);
- if (!proto)
- continue;
-
- if (!(proto->Flags & ITEM_PROTO_FLAG_PROSPECTABLE))
+ if (!(itr->second.Flags & ITEM_PROTO_FLAG_PROSPECTABLE))
continue;
- if (ids_set.find(proto->ItemId) != ids_set.end())
- ids_set.erase(proto->ItemId);
+ if (ids_set.find(itr->second.ItemId) != ids_set.end())
+ ids_set.erase(itr->second.ItemId);
}
// output error for any still listed (not referenced from appropriate table) ids