🌟New Item Rarity

Welcome to the full breakdown of the Item Rarity System in Eternal Odyssey.

This guide will help you understand:

  • How rare items are rolled when a monster dies

  • What influences your chance of getting a rare item

  • Why certain mobs (like Elites or Insane bosses) are more rewarding

  • And how to maximize your chances of finding Legendary gear

🧱 Overview: What is Item Rarity?

When you loot monsters in EO, some items may drop with special rarity tiers that give random bonus attributes. The higher the rarity, the more stats an item can roll:

Rarity
Stats
Color
Broadcast

Common

1

Gray

❌

Uncommon

2

Green

❌

Rare

3

Blue

❌

Epic

4

Purple

βœ…

Legendary

5

Yellow

βœ…

These bonus stats are powerful, randomized, and scale with gear tier.

βœ… Which Items Can Have Rarity?

Not every item can be rare. The system only rolls rarity on combat gear:

βœ… Eligible: Swords, axes, clubs, bows, crossbows, wands, rods, spellbooks (can have all normal stats except "Defense"), helmet, chest, legs, boots, rings, necklaces and quivers.

❌ Not Eligible: Stackables, Items with charges or transformEquipId, Tools, containers, utility items

--Code Ref
isItemEligibleForRarity(itemId)

🎯 Target Rarity Frequencies

This table reflects how often a rarity should appear on average (based on monsters killed, not items dropped).

TARGET_RARITY_CHANCES = {
    ["common"]    = 35,     -- ~2.86%
    ["uncommon"]  = 100,    -- 1%
    ["rare"]      = 350,    -- ~0.29%
    ["epic"]      = 1000,   -- 0.1%
    ["legendary"] = 2500,   -- 0.04%
}

❗ This table is not scaled β€” it's used to adjust actual rarity rolls to match the intended drop rate based on how much loot the monster has.

πŸ” Rarity Thresholds (Max Caps)

Even after scaling, rarity is capped based on where the monster is found.

πŸ“¦ Dungeon Creatures & Bosses

RARITY_MAX_CHANCES = {
    ["common"] = 30000, -- 30%
    ["uncommon"] = 18000, -- 18%
    ["rare"] = 10000, -- 10%
    ["epic"] = 6500, -- 6.5%
    ["legendary"] = 3000, -- 3%
}

🌲 Open World Monsters

OPEN_WORLD_RARITY_MAX_CHANCES = {
    ["common"] = 40000, -- 40%
    ["uncommon"] = 25000,  --25%
    ["rare"] = 15000, -- 15%
    ["epic"] = 10000, -- 10%
    ["legendary"] = 4000, -- 4%
}

🌍 World Boss Tiers

World Bosses use their own scaling rarity table, which is then boosted by monster level via the expChance() function.

WORLD_BOSSES_TIERS = {
    ["common"]    = 100000, -- 100%
    ["uncommon"]  = 40000, -- 40%
    ["rare"]      = 15000, -- 15%
    ["epic"]      = 6000, -- 6%
    ["legendary"] = 2000, -- 2%
}

These values are scaled dynamically using monster level to provide higher odds for stronger World Bosses.

πŸ§ͺ How the System Works (Dissected)

The magic happens in this core function:

function getLocalRarityChance(itemId, mName, tiers, mLevel, inDungeon)

Let’s walk through the steps one by one:

  1. Determine the Rarity Threshold

maxChances = OPEN_WORLD_RARITY_MAX_CHANCES
if inDungeon then
  maxChances = RARITY_MAX_CHANCES
end
  1. Fetch the Monster's Loot Table

local mType = MonsterType(mName)
local mLoot = mType:getLootById()

Then we get the drop chance of the current item, and the total drop chance of all eligible items from this monster:

local dropChance = getMonsterDropChance(mName, mLoot)
  1. Drop Table Dilution Scaling

This is key:

local scaleFactor = 100000 / dropChance

This inversely scales rarity chances based on how many eligible items a monster drops.

βœ… Fewer eligible items β†’ higher rarity chance ❌ Lots of eligible items β†’ lower chance per item

This makes small loot tables more rewarding.

πŸ”₯ Elite monsters benefit from this: since they drop more, they naturally get better chances per item.

  1. Monster Level Scaling

local mLevelScaling = scaledChanceByMonsterLevel(mLevel)

This uses a level-based multiplier:

Monster Tier
Rarity Scaling Multiplier

Elite

1.025

Champion

1.05

Overlord

1.075

Insane I

1.1

Insane II

1.2

Insane III

1.3

Insane IV

1.4

Insane V

1.5

Insane VI

1.6

Insane VII

1.7

Insane VIII

1.8

Insane IX

1.9

Insane X

2

  1. Rarity Tier Roll (Core Loop)

Now we apply all the above and roll the rarity tier:

for _, tier in pairs(modifiedTable) do
    newChance = math.ceil(tier.chance[1] * scaleFactor * mLevelScaling)
    
    if TARGET_RARITY_CHANCES[tier.prefix] then
        targetChance = (1 / TARGET_RARITY_CHANCES[tier.prefix]) / (dropChance / 100000) * 100000

        -- Clamp to max cap or target
        if not inDungeon or (inDungeon and not isBoss) then
            newChance = math.min(newChance, targetChance)
        end

        newChance = math.min(newChance, maxChances[tier.prefix] * mLevelScaling)
    end

    tier.chance[1] = newChance
end

βœ… Final Output

The function returns a custom rarity tier table for this specific item, adjusted by:

  • Loot dilution

  • Monster level

  • Area caps

  • Intended target rarity frequency

This final rarity roll is used in:

assign_loot_Stat(...)

🧠 Tips for Players

🏹 Want more legendaries?

  • Fight high-level monsters

  • Prioritize Elite, Superior, or Insane variants

  • Hunt in the open world where thresholds are higher

  • Higher Insane Dungeon Bosses (VIII, IX, and X) have significantly boosted scaling β€” they're some of the best sources for Epic and Legendary gear

  • Stack player rarity boosts (e.g. scrolls, bonuses)

  • World Bosses are excellent β€” personal loot + strong scaling

Last updated