You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
1.6 KiB

local _, addonTable = ...
local Statistics = {}
--- Calculate an estimate for an item's drop chance while considering other group members that are also eligible
-- Only modifies chances for SHARED Loot, i.e. those that are set to use a groupSize > 1
-- Note: Virtually all items are now PERSONAL loot by default, which means this no longer applies to them
-- Caveat: Rarity has no idea how many group members were actually present, so it uses a predefined estimate (stored in the groupSize field), but this is also used to categorize items according to their difficulty (...). This is why there is another field, equalOdds, which will override the groupSize calculation to effectively force Personal Loot everywhere
-- @param item A table containing the data (itemDB entry) that is to be used
-- @return The modified drop chance after accounting for shared loot, given as a percentage
-- @return The modified drop chance after accounting for shared loot, given as a fraction (1 in X)
function Statistics.GetRealDropPercentage(item)
local dropChance = (1.00 / (item.chance or 100))
local realDropChance = dropChance -- Default: Personal Loot -> group members don't matter
local fractionalDropChance = ((item.chance or 0) * (item.groupSize or 1))
local itemUsesSharedLoot = (
item.method == BOSS -- Only applies to
and item.groupSize ~= nil
and item.groupSize > 1 -- Item uses Shared Loot
and not item.equalOdds
) -- Not overwritten by the Personal Loot toggle
if itemUsesSharedLoot then
realDropChance = dropChance / item.groupSize
end
return realDropChance, fractionalDropChance
end
Rarity.Statistics = Statistics
return Statistics