1682{
1683 bool rate = store.IsRatesAllowed();
1684
1685 if (groupId)
1686 {
1687 if (groupId >
Groups.size())
1688 return;
1689
1690 if (!
Groups[groupId - 1])
1691 return;
1692
1693
1694 if (isTopLevel)
1695 {
1697 }
1698 else
1699 {
1700 Groups[groupId - 1]->Process(loot, player, store, lootMode, 0);
1701 }
1702 return;
1703 }
1704
1705
1706 for (LootStoreItemList::const_iterator i =
Entries.begin(); i !=
Entries.end(); ++i)
1707 {
1710 continue;
1711 if (!item->
Roll(rate, player, loot, store))
1712 continue;
1713
1715 {
1717 if (!Referenced)
1718 continue;
1719
1721 sScriptMgr->OnAfterRefCount(player, loot, rate, lootMode, item, maxcount, store);
1722 for (
uint32 loop = 0; loop < maxcount; ++loop)
1723
1724 Referenced->
Process(loot, store, lootMode, player, item->
groupid,
false);
1725 }
1726 else
1727 {
1728
1729 sScriptMgr->OnBeforeDropAddItem(player, loot, rate, lootMode, item, store);
1731 }
1732 }
1733
1734
1735 for (LootGroups::const_iterator i =
Groups.begin(); i !=
Groups.end(); ++i)
1736 if (LootGroup* group = *i)
1737 {
1738
1739 if (isTopLevel)
1740 {
1742 sScriptMgr->OnAfterCalculateLootGroupAmount(player, loot, lootMode, groupAmount, store);
1743 group->Process(loot, player, store, lootMode, groupAmount);
1744 }
1745 else
1746 {
1747 group->Process(loot, player, store, lootMode, 0);
1748 }
1749 }
1750}
#define sScriptMgr
Definition: ScriptMgr.h:698
@ RATE_DROP_ITEM_REFERENCED_AMOUNT
Definition: IWorld.h:444
@ RATE_DROP_ITEM_GROUP_AMOUNT
Definition: IWorld.h:445
#define sWorld
Definition: World.h:447
bool Roll(bool rate, Player const *player, Loot &loot, LootStore const &store) const
Definition: LootMgr.cpp:305
uint8 maxcount
Definition: LootMgr.h:137
uint16 lootmode
Definition: LootMgr.h:134
void Process(Loot &loot, LootStore const &store, uint16 lootMode, Player const *player, uint8 groupId=0, bool isTopLevel=true) const
Definition: LootMgr.cpp:1681
void AddItem(LootStoreItem const &item)
Definition: LootMgr.cpp:494