1668{
1669 bool rate = store.IsRatesAllowed();
1670
1671 if (groupId)
1672 {
1673 if (groupId >
Groups.size())
1674 return;
1675
1676 if (!
Groups[groupId - 1])
1677 return;
1678
1679
1680 if (isTopLevel)
1681 {
1683 }
1684 else
1685 {
1686 Groups[groupId - 1]->Process(loot, player, store, lootMode, 0);
1687 }
1688 return;
1689 }
1690
1691
1692 for (LootStoreItemList::const_iterator i =
Entries.begin(); i !=
Entries.end(); ++i)
1693 {
1696 continue;
1697 if (!item->
Roll(rate, player, loot, store))
1698 continue;
1699
1701 {
1703 if (!Referenced)
1704 continue;
1705
1707 sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount, store);
1708 for (
uint32 loop = 0; loop < maxcount; ++loop)
1709
1710 Referenced->
Process(loot, store, lootMode, player, item->
groupid,
false);
1711 }
1712 else
1713 {
1714
1715 sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, item, store);
1717 }
1718 }
1719
1720
1721 for (LootGroups::const_iterator i =
Groups.begin(); i !=
Groups.end(); ++i)
1722 if (LootGroup* group = *i)
1723 {
1724
1725 if (isTopLevel)
1726 {
1728 sScriptMgr->OnAfterCalculateLootGroupAmount(player, loot, lootMode, groupAmount, store);
1729 group->Process(loot, player, store, lootMode, groupAmount);
1730 }
1731 else
1732 {
1733 group->Process(loot, player, store, lootMode, 0);
1734 }
1735 }
1736}
#define sScriptMgr
Definition ScriptMgr.h:737
@ RATE_DROP_ITEM_REFERENCED_AMOUNT
Definition WorldConfig.h:408
@ RATE_DROP_ITEM_GROUP_AMOUNT
Definition WorldConfig.h:409
void Process(Loot &loot, LootStore const &store, uint16 lootMode, Player const *player, uint8 groupId=0, bool isTopLevel=true) const
Definition LootMgr.cpp:1667
#define sWorld
Definition World.h:317
bool Roll(bool rate, Player const *player, Loot &loot, LootStore const &store) const
Definition LootMgr.cpp:311
uint16 lootmode
Definition LootMgr.h:133
void AddItem(LootStoreItem const &item)
Definition LootMgr.cpp:481