1650{
1651 bool rate = store.IsRatesAllowed();
1652
1653 if (groupId)
1654 {
1655 if (groupId >
Groups.size())
1656 return;
1657
1658 if (!
Groups[groupId - 1])
1659 return;
1660
1661
1662 if (isTopLevel)
1663 {
1665 }
1666 else
1667 {
1668 Groups[groupId - 1]->Process(loot, player, store, lootMode, 0);
1669 }
1670 return;
1671 }
1672
1673
1674 for (LootStoreItemList::const_iterator i =
Entries.begin(); i !=
Entries.end(); ++i)
1675 {
1678 continue;
1679 if (!item->
Roll(rate, player, loot, store))
1680 continue;
1681
1683 {
1685 if (!Referenced)
1686 continue;
1687
1689 sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount, store);
1690 for (
uint32 loop = 0; loop < maxcount; ++loop)
1691
1692 Referenced->
Process(loot, store, lootMode, player, item->
groupid,
false);
1693 }
1694 else
1695 {
1696
1697 sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, item, store);
1699 }
1700 }
1701
1702
1703 for (LootGroups::const_iterator i =
Groups.begin(); i !=
Groups.end(); ++i)
1704 if (LootGroup* group = *i)
1705 {
1706
1707 if (isTopLevel)
1708 {
1710 sScriptMgr->OnAfterCalculateLootGroupAmount(player, loot, lootMode, groupAmount, store);
1711 group->Process(loot, player, store, lootMode, groupAmount);
1712 }
1713 else
1714 {
1715 group->Process(loot, player, store, lootMode, 0);
1716 }
1717 }
1718}
#define sScriptMgr
Definition ScriptMgr.h:734
@ RATE_DROP_ITEM_REFERENCED_AMOUNT
Definition WorldConfig.h:410
@ RATE_DROP_ITEM_GROUP_AMOUNT
Definition WorldConfig.h:411
void Process(Loot &loot, LootStore const &store, uint16 lootMode, Player const *player, uint8 groupId=0, bool isTopLevel=true) const
Definition LootMgr.cpp:1649
#define sWorld
Definition World.h:316
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:463