diff --git a/disenchant.lua b/disenchant.lua index 9b13e98..3eb851a 100644 --- a/disenchant.lua +++ b/disenchant.lua @@ -73,7 +73,7 @@ function public.value(slot, quality, level) if not value then return else - expectation = (expectation or 0) + event.probability * event.quantity * value + expectation = (expectation or 0) + event.probability * (event.min_quantity + event.max_quantity) / 2 * value end end return expectation @@ -95,101 +95,101 @@ function public.distribution(slot, quality, level) if quality == UNCOMMON then if level <= 10 then return { - {item_id=10940, quantity=1.5, probability=0.8}, - {item_id=10938, quantity=1.5, probability=0.2}, + {item_id=10940, min_quantity=1, max_quantity=2, probability=0.8}, + {item_id=10938, min_quantity=1, max_quantity=2, probability=0.2}, } elseif level <= 15 then return { - {item_id=10940, quantity=2.5, probability=p(0.75, 0.2)}, - {item_id=10939, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=10978, quantity=1, probability=0.05}, + {item_id=10940, min_quantity=2, max_quantity=3, probability=p(0.75, 0.2)}, + {item_id=10939, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=10978, min_quantity=1, max_quantity=1, probability=0.05}, } elseif level <= 20 then return { - {item_id=10940, quantity=5, probability=p(0.75, 0.15)}, - {item_id=10998, quantity=1.5, probability=p(0.15, 0.75)}, - {item_id=10978, quantity=1, probability=0.10}, + {item_id=10940, min_quantity=4, max_quantity=6, probability=p(0.75, 0.15)}, + {item_id=10998, min_quantity=1, max_quantity=2, probability=p(0.15, 0.75)}, + {item_id=10978, min_quantity=1, max_quantity=1, probability=0.10}, } elseif level <= 25 then return { - {item_id=11083, quantity=1.5, probability=p(0.75, 0.2)}, - {item_id=11082, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=11084, quantity=1, probability=0.05}, + {item_id=11083, min_quantity=1, max_quantity=2, probability=p(0.75, 0.2)}, + {item_id=11082, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=11084, min_quantity=1, max_quantity=1, probability=0.05}, } elseif level <= 30 then return { - {item_id=11083, quantity=3.5, probability=p(0.75, 0.2)}, - {item_id=11134, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=11138, quantity=1, probability=0.05}, + {item_id=11083, min_quantity=2, max_quantity=5, probability=p(0.75, 0.2)}, + {item_id=11134, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=11138, min_quantity=1, max_quantity=1, probability=0.05}, } elseif level <= 35 then return { - {item_id=11137, quantity=1.5, probability=p(0.75, 0.2)}, - {item_id=11135, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=11139, quantity=1, probability=0.05}, + {item_id=11137, min_quantity=1, max_quantity=2, probability=p(0.75, 0.2)}, + {item_id=11135, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=11139, min_quantity=1, max_quantity=1, probability=0.05}, } elseif level <= 40 then return { - {item_id=11137, quantity=3.5, probability=p(0.75, 0.2)}, - {item_id=11174, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=11177, quantity=1, probability=0.05}, + {item_id=11137, min_quantity=2, max_quantity=5, probability=p(0.75, 0.2)}, + {item_id=11174, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=11177, min_quantity=1, max_quantity=1, probability=0.05}, } elseif level <= 45 then return { - {item_id=11176, quantity=1.5, probability=p(0.75, 0.2)}, - {item_id=11175, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=11178, quantity=1, probability=0.05}, + {item_id=11176, min_quantity=1, max_quantity=2, probability=p(0.75, 0.2)}, + {item_id=11175, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=11178, min_quantity=1, max_quantity=1, probability=0.05}, } elseif level <= 50 then return { - {item_id=11176, quantity=3.5, probability=p(0.75, 0.22)}, - {item_id=16202, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=14343, quantity=1, probability=p(0.05, 0.03)}, + {item_id=11176, min_quantity=2, max_quantity=5, probability=p(0.75, 0.22)}, + {item_id=16202, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=14343, min_quantity=1, max_quantity=1, probability=p(0.05, 0.03)}, } elseif level <= 55 then return { {item_id=16204, quantity=1.5, probability=p(0.75, 0.22)}, - {item_id=16203, quantity=1.5, probability=p(0.2, 0.75)}, - {item_id=14344, quantity=1, probability=p(0.05, 0.03)}, + {item_id=16203, min_quantity=1, max_quantity=2, probability=p(0.2, 0.75)}, + {item_id=14344, min_quantity=1, max_quantity=1, probability=p(0.05, 0.03)}, } elseif level <= 60 then return { {item_id=16204, quantity=3.5, probability=p(0.75, 0.22)}, - {item_id=16203, quantity=2.5, probability=p(0.2, 0.75)}, - {item_id=14344, quantity=1, probability=p(0.05, 0.03)}, + {item_id=16203, min_quantity=2, max_quantity=3, probability=p(0.2, 0.75)}, + {item_id=14344, min_quantity=1, max_quantity=1, probability=p(0.05, 0.03)}, } end elseif quality == RARE then if level <= 20 then - return {{item_id=10978, quantity=1, probability=1}} + return {{item_id=10978, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 25 then - return {{item_id=11084, quantity=1, probability=1}} + return {{item_id=11084, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 30 then - return {{item_id=11138, quantity=1, probability=1}} + return {{item_id=11138, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 35 then - return {{item_id=11139, quantity=1, probability=1}} + return {{item_id=11139, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 40 then - return {{item_id=11177, quantity=1, probability=1}} + return {{item_id=11177, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 45 then - return {{item_id=11178, quantity=1, probability=1}} + return {{item_id=11178, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 50 then - return {{item_id=14343, quantity=1, probability=1}} + return {{item_id=14343, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 55 then - return {{item_id=14344, quantity=1, probability=0.995}, {item_id=20725, quantity=1, probability=0.005}} + return {{item_id=14344, min_quantity=1, max_quantity=1, probability=0.995}, {item_id=20725, min_quantity=1, max_quantity=1, probability=0.005}} elseif level <= 60 then - return {{item_id=14344, quantity=1, probability=0.995}, {item_id=20725, quantity=1, probability=0.005}} + return {{item_id=14344, min_quantity=1, max_quantity=1, probability=0.995}, {item_id=20725, min_quantity=1, max_quantity=1, probability=0.005}} end elseif quality == EPIC then if level <= 40 then - return {{item_id=11177, quantity=3, probability=1}} + return {{item_id=11177, min_quantity=2, max_quantity=4, probability=1}} elseif level <= 45 then - return {{item_id=11178, quantity=3, probability=1}} + return {{item_id=11178, min_quantity=2, max_quantity=4, probability=1}} elseif level <= 50 then - return {{item_id=14343, quantity=3, probability=1}} + return {{item_id=14343, min_quantity=2, max_quantity=4, probability=1}} elseif level <= 55 then - return {{item_id=20725, quantity=1, probability=1}} + return {{item_id=20725, min_quantity=1, max_quantity=1, probability=1}} elseif level <= 60 then - return {{item_id=20725, quantity=1.5, probability=1}} + return {{item_id=20725, min_quantity=1, max_quantity=2, probability=1}} end end return {} diff --git a/tooltip.lua b/tooltip.lua index 2a4df84..38bca2d 100644 --- a/tooltip.lua +++ b/tooltip.lua @@ -74,7 +74,7 @@ function private.extend_tooltip(tooltip, hyperlink, quantity) tooltip:AddLine('Disenchants into:', color.r, color.g, color.b) sort(distribution, function(a,b) return a.probability > b.probability end) for _, event in distribution do - tooltip:AddLine(format(' %s%% %s x%s', event.probability * 100, Aux.info.display_name(event.item_id, true) or 'item:'..event.item_id, event.quantity), color.r, color.g, color.b) + tooltip:AddLine(format(' %s%% %s (%s-%s)', event.probability * 100, Aux.info.display_name(event.item_id, true) or 'item:'..event.item_id, event.min_quantity, event.max_quantity), color.r, color.g, color.b) end end