1700{
1701 bool rate = store.IsRatesAllowed();
1702
1703 if (groupId)
1704 {
1705 if (groupId >
Groups.size())
1706 return;
1707
1708 if (!
Groups[groupId - 1])
1709 return;
1710
1711
1712 if (isTopLevel)
1713 {
1715 }
1716 else
1717 {
1718 Groups[groupId - 1]->Process(loot, player, store, lootMode, 0);
1719 }
1720 return;
1721 }
1722
1723
1724 for (LootStoreItemList::const_iterator i =
Entries.begin(); i !=
Entries.end(); ++i)
1725 {
1728 continue;
1729 if (!item->
Roll(rate, player, loot, store))
1730 continue;
1731
1733 {
1735 if (!Referenced)
1736 continue;
1737
1739 sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount, store);
1740 for (
uint32 loop = 0; loop < maxcount; ++loop)
1741
1742 Referenced->
Process(loot, store, lootMode, player, item->
groupid,
false);
1743 }
1744 else
1745 {
1746
1747 sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, item, store);
1749 }
1750 }
1751
1752
1753 for (LootGroups::const_iterator i =
Groups.begin(); i !=
Groups.end(); ++i)
1754 if (LootGroup* group = *i)
1755 {
1756
1757 if (isTopLevel)
1758 {
1760 sScriptMgr->OnAfterCalculateLootGroupAmount(player, loot, lootMode, groupAmount, store);
1761 group->Process(loot, player, store, lootMode, groupAmount);
1762 }
1763 else
1764 {
1765 group->Process(loot, player, store, lootMode, 0);
1766 }
1767 }
1768}
#define sScriptMgr
Definition ScriptMgr.h:727
@ RATE_DROP_ITEM_REFERENCED_AMOUNT
Definition WorldConfig.h:399
@ RATE_DROP_ITEM_GROUP_AMOUNT
Definition WorldConfig.h:400
void Process(Loot &loot, LootStore const &store, uint16 lootMode, Player const *player, uint8 groupId=0, bool isTopLevel=true) const
Definition LootMgr.cpp:1699
#define sWorld
Definition World.h:320
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:512