Any Unique (1/43)
Any Torva Piece (approx 1/86)
Specific Torva Piece (1/258)
Nihil Horn (1/516)
Zaryte Vambraces (1/516)
Ancient Hilt (1/172)
Calculation Results
Personal Drop Rate (Per Kill):0%
Chance of Drop in 100 Kills:0%
Expected Kills for Drop (Average):0
Probability of Going Dry:0%
Understanding Nex Drop Mechanics
Nex, the Zarosian general, utilizes a unique drop system in Old School RuneScape (OSRS) compared to standard bosses. Understanding how team size and contribution affect your drop rates is crucial for efficiently farming items like Torva armor, the Nihil Horn, or Zaryte Vambraces.
The 1/43 Unique Table
Unlike bosses where drops are rolled individually for everyone, Nex drops a unique item for the entire team at a rate of approximately 1/43. Once the game decides a unique item has dropped, it must determine which player receives it.
Contribution is Key
Your personal chance of receiving the unique drop is directly proportional to your contribution during the fight. Contribution is primarily calculated based on the damage you deal to Nex, her minions, and blood reavers.
The formula for your personal unique chance per kill is effectively:
(1 / 43) × (Your Contribution %)
For example, in a 4-man team where everyone contributes equally (25% damage each), your personal drop rate for any unique is (1/43) * 0.25 = 1/172.
Drop Weightings
If a unique drop is rolled, the specific item is selected based on the following weights within the unique table:
Ancient Hilt: 3/12
Torva Pieces (Helm, Body, Legs): 2/12 each (6/12 total)
Nihil Horn: 1/12
Zaryte Vambraces: 1/12
Why Use This Calculator?
This Nex Drop Rate Calculator helps you determine realistic expectations based on your team size and kill count goals. Whether you are doing "Mass" worlds where contribution is low, or efficient small teams (duo/trio/4-man), knowing your probability helps manage expectations for the grind.
function autoUpdateContribution() {
var teamSize = parseFloat(document.getElementById('nexTeamSize').value);
var contribInput = document.getElementById('nexContribution');
if (!isNaN(teamSize) && teamSize > 0) {
// Calculate equal split percentage
var equalSplit = (100 / teamSize).toFixed(1);
contribInput.value = equalSplit;
}
}
function calculateNexOdds() {
// Get Inputs
var teamSize = parseFloat(document.getElementById('nexTeamSize').value);
var contribution = parseFloat(document.getElementById('nexContribution').value);
var kills = parseFloat(document.getElementById('nexKillCount').value);
var itemDenominator = parseFloat(document.getElementById('nexItemTarget').value);
// Validation
if (isNaN(teamSize) || teamSize < 1) {
alert("Please enter a valid team size.");
return;
}
if (isNaN(contribution) || contribution 100) {
alert("Please enter a valid contribution percentage (0-100).");
return;
}
if (isNaN(kills) || kills < 1) {
alert("Please enter a valid kill count.");
return;
}
// Logic
// 1. Determine the base chance of the specific item dropping for the TEAM
// The dropdown values are the denominators (e.g., 43 for any unique, 516 for Horn)
var teamItemChance = 1 / itemDenominator;
// 2. Determine PERSONAL chance based on contribution
// Formula: Team Chance * (Contribution / 100)
var personalChance = teamItemChance * (contribution / 100);
// 3. Calculate Binomial Probability
// Chance of getting at least 1 drop in X kills = 1 – (chance of getting 0)^X
var chanceOfNone = 1 – personalChance;
var probabilityInKills = 1 – Math.pow(chanceOfNone, kills);
// 4. Calculate Expected Kills (1 / p)
var expectedKills = 1 / personalChance;
// 5. Calculate Dry Streak Probability (Chance of 0 drops in X kills)
var dryStreakProb = Math.pow(chanceOfNone, kills);
// Formatting Results
var perKillDisplay = (personalChance * 100).toFixed(4) + "%";
var chanceInKillsDisplay = (probabilityInKills * 100).toFixed(2) + "%";
var expectedDisplay = Math.round(expectedKills).toLocaleString();
var dryStreakDisplay = (dryStreakProb * 100).toFixed(2) + "%";
// To fraction for readability (1/X)
var fractionDenominator = Math.round(1 / personalChance);
var fractionDisplay = "1 / " + fractionDenominator;
// Update DOM
document.getElementById('resPerKill').innerHTML = perKillDisplay + " (" + fractionDisplay + ")";
document.getElementById('resChanceInKills').innerText = chanceInKillsDisplay;
document.getElementById('resExpectedKills').innerText = expectedDisplay;
document.getElementById('resDryStreak').innerText = dryStreakDisplay;
document.getElementById('resKillCountDisplay').innerText = kills;
// Show Results container
document.getElementById('nexResult').style.display = "block";
}