This is my personal experiments attempting to find the rules of exp sharing after some time passed. All the formulas listed below are limited to be a theory. Keep in mind they might be wrong. I recommend to first know https://royals.ms/forum/threads/calculating-exp-of-leeches.123477/ if you didn't. (The intuition to come up with the formulas is largely relying on the leech exp formula discussed there.) By the time posting this I only have done tests on Skelegon - HP: 80,000 EXP: 4,500 and a few other mobs. I use Skelegon as main target of verification in this post. There is sometimes a tiny exp discrepancy (+- 1-2) between these calculation results and the ground truth, the real exp you get. This is I'd assume derived from how exactly the exp given to players is implemented in the code, the cascaded calculations, numerical operations, and maybe the loss of precision from data type conversion or something related to program interpreting the number. Chances are I'm wrong here. There're situations haven't been tested, such as: What if the mob recovers hp, for example Krex and Vikerola, how to calculate dmg% in this case. If you're below -5 levels of the mob and do damage. (#5) If you're below -5 levels of the mob and leeching from an attacker within 5 levels gap. high level bosses. Leech Conditions after Update #94 28/01/25 : 1. leecher level >= -5 mob level : ok 2. leecher level < -5 mob level and >= -5 damage dealer level : damage dealer needs to be >= -29 mob level (therefore minimum leech level requirement is >= -34 mob level) * any damage dealer that's < -29 mob level won't get exp Here exp formulas are listed case by case, all without HS bonus (1.5x). All final exp go through a Floor(exp), this step is omitted in formula. Definition: - mobexp = Monster base exp * 3.2 server rate , 14400 for Skelegon - cptsize = factor of party size = (a) (1.1 + 0.05 * N) / (N + 1) if N >= 2 (N := party size) (b) 0.5 if N = 1 (1 man pt) or Code: 0.5 when N = 1 0.4 when N = 2 0.3125 when N = 3 0.26 when N = 4 0.225 when N = 5 0.2 when N = 6 - lv = leecher's level (who did 0 damage) - avglv = Floor(average party level) - dmg% = damage dealt by single attacker / total monster hp - party total dmg% = sum of dmg% among all attackers in pt 1. All damages come from only 1 party Updated: Also tested on Wu-Ling Yaoseng(shao) with error of 1-2 (<0.001%) for damage dealer: exp = mobexp * cptsize * (1 + dmg%) for leecher: exp = mobexp * cptsize * Min(lv/avglv, 1) Spoiler: verify damages pt1: attacker Lv139 54221/80000 (10699 + 16667 + 12537 + 14308) attacker Lv200 25779/80000 (80000 - 54221) leecher Lv190 leecher Lv200 leecher Lv142 exp gain (theoretical / real exp) pt1: cptsize = 0.225 avglv = Floor( (139 + 190 + 142 + 200 + 200) / 5 ) = 174 attacker Lv139 14400 * 0.225 * (1 + /80000) = 5435.95 / 5435 attacker Lv200 14400 * 0.225 * (1 + /80000) = 4284.04 / 4283 leecher Lv190 14400 * 0.225 * Min(190/174, 1) = 3240 / 3239 leecher Lv200 14400 * 0.225 * Min(200/174, 1) = 3240 / 3239 leecher Lv142 14400 * 0.225 * Min(142/174, 1) = 2644.13 / 2643 2. Damages done by multiple parties for damage dealer: exp = mobexp * cptsize * (party total dmg% + dmg%) for leecher: exp = mobexp * cptsize * Min(lv/avglv, 1) * party total dmg% Spoiler: verify damages pt1: attacker Lv200 46025/80000 attacker Lv139 17075/80000 pt2: attacker Lv190 2063/80000 (609 + 1454) leecher Lv142 pt3: attacker Lv200 14837/80000 (80000 - 46025 - 2063 - 17075) exp gain (theoretical / real exp) pt1: cptsize = 0.4 avglv = Floor( (139 + 200) / 2 ) = 169 attacker Lv200 14400 * 0.4 * (63100/80000 + 46025/80000) = 7857.00 / 7856 attacker Lv139 14400 * 0.4 * (63100/80000 + 17075/80000) = 5772.60 / 5771 pt2: cptsize = 0.4 avglv = Floor( (190 + 142) / 2 ) = 166 attacker Lv190 14400 * 0.4 * (2063/80000 + 2063/80000) = 297.07 / 297 leecher Lv142 14400 * 0.4 * Min(142/166, 1) * 2063/80000 = 127.06 / 127 pt3: cptsize = 0.5 attacker Lv200 14400 * 0.5 * (14837/80000 + 14837/80000) = 2670.66 / 2670 3. If you are not in any pt exp = mobexp * 0.8 * dmg% 4. If you are not in any pt and Last hit exp = mobexp * (0.8 * dmg% + 0.2) Spoiler: verify damages pt1: attacker Lv190 4202/80000 (113 + 1883 + 2206) leecher Lv139 leecher Lv142 unpt'd: Lv200 40441/80000 Lv200 Last hit 35357/80000 (80000 - 4202 - 40441) exp gain (theoretical / real exp) pt1: cptsize = 0.3125 avglv = Floor( (139 + 190 + 142) / 3 ) = 157 attacker Lv190 14400 * 0.3125 * (4202/80000 + 4202/80000) = 472.72 / 472 leecher Lv139 14400 * 0.3125 * Min(139/157, 1) * 4202/80000 = 209.26 / 209 leecher Lv142 14400 * 0.3125 * Min(142/157, 1) * 4202/80000 = 213.78 / 213 unpt'd: Lv200 14400 * (0.8 * 40441/80000) = 5823.50 / 5823 Lv200 Last hit 14400 * (0.8 * 35357/80000 + 0.2) = 7971.40 / 7971 5. If someone in pt died and stay in the map N of cptsize and average party level degrade to those who are alive. e.g. In a 3 man pt 1 member is dead, cptsize = (1.1 + 0.05 * 2) / 3 = 0.4 instead of (1.1 + 0.05 * 3) / 4 = 0.3125 e.g. In a 4 man pt 3 members are dead, cptsize = 0.5 dmg% and party total dmg% remain unchanged (meaning, dead attackers' dmg% still count into party total dmg%) Spoiler: verify damages pt1: attacker Lv139 1/80000 (80000 - 79999) attacker Lv190 dead 79999/80000 leecher Lv142 exp gain (theoretical / real exp) pt1: cptsize = 0.4 avglv = Floor( (139 + 142) / 2 ) = 140 attacker Lv139 14400 * 0.4 * (80000/80000 + 1/80000) = 5760.07 / 5759 leecher Lv142 14400 * 0.4 * Min(142/140, 1) = 5760 / 5759 6. If someone in pt left the map Anyone leaving the map is seen as outside pt. N of cptsize decreases and his dmg% is deducted from party total dmg%. ----- Another experiment Spoiler: all in one damages Spoiler pt1 attacker Lv200 dead 16547/80000 (6016 + 10531) attacker Lv142 leave map 4709/80000 leecher Lv139 +HS pt2 attacker Lv200 +HS 9612/80000 attacker Lv190 +HS leave pt and Last hit 49132/80000 (80000 - 16547 - 4709 - 9612) exp gain Spoiler pt1 cptsize = 0.5 avglv = 139 leecher Lv139 14400 * 0.5 * Min(139/139, 1) * 16547/80000 * 1.1 = 1638.15 / 1638 pt2 cptsize = 0.5 attacker Lv200 14400 * 0.5 * (9612/80000 + 9612/80000) * 1.1 = 1903.17 / 1903 unpt'd Lv190 Last hit 14400 * (0.8 * 49132/80000 + 0.2) * 1.1 = 10950.50 / 10950 Extra - To reflect on one of Sylafia's finding: leecher exp is capped at half of the exp mage gets? Yes when the single mage does 100% damage on mobs. In this situation exp formulas can be simplified as following: mage exp = mobexp * cptsize * (1 + dmg%) = mobexp * cptsize * 2 leecher exp = mobexp * cptsize * Min(lv/avglv, 1), max at leecher level >= average party level, exp = mobexp * cptsize * 1 In your dream, beside a fire in a great hall you start dancing with balrog. You think about those people you met who have quit, who are banned, who are still active on the field, their words, those times you've made together, and the exp formulas. Sometimes Rich Text Editor comes to your dream, throwing you unexpected BBcode tags. When you see those weird Spoilers out of nowhere you realize it's not reality. You wake up, open the BBcode Editor, say shiiit and start to remove those dummy tags manually.
1-1-a. 3 attackers pt, 1 attacker lower than -5 level of mob tested on NMM with error of ~1% tested on Plow Ox with error of 1-2 (1%-5%) +HS (1.5) main attacker: cptsize = 0.4 exp = mobexp * cptsize * ( (0.8*[damage from low level attacker]*1.5 + [damage from another attacker]*1.5 + [damage]*1.5 )/mobhp + [damage]*1.5/mobhp ) * event bonus low level attacker: cptsize = 0.4 exp = mobexp * cptsize * ( 0.8*[damage]*1.5/mobhp + 0.8*[damage]*1.5/mobhp ) * event bonus 1-1-b. 2 attackers pt, 1 attacker lower than -5 level of mob tested on Plow Ox with error of 0-1 tested on Dunas v2 with error of 1 (< 0.001%) +HS (1.5, 1.1) main attacker: cptsize = 0.5 exp = mobexp * cptsize *( (0.8*[damage from low level character]*1.5 + [damage]*1.1)/mobhp + [damage]*1.1/mobhp ) * event bonus low level attacker: cptsize = 0.5 exp = mobexp * cptsize * ( 0.8*[damage]*1.5/mobhp + 0.8*[damage]*1.5/mobhp ) * event bonus
Small insight regarding the slight inconsistency of the results: While I made myself a sheet to calculate player range, I discovered that the game basically rounds down numbers at almost all steps of the calculation [yes, specifically down]. Before I just did normal rounding, but after applying rounding down to all my equations, the numbers came out exactly as they were in-game. For example, when you have Echos active, the game takes your total WA, multiplies it by 1.04, then rounds the result down. Even the final range result is rounded down in the end. So maybe if you'll write all these formulas in excel, and use "ROUNDOWN" command on all calculations with multiplications or divisions, it will result in numbers closer to results in game?
So if you have a part of attackers + bishop (who does no damage) all attackers suicide except only one that needs exp Is it correct that bishop should stay in party alive with HS active rather than leave, since party size is treated as 2 in this case (so HS gives more %)? Because bishop leaving will essentially turn it into a 1 man party? I did two rounds of NMM like this level 200 attackers x2, level 177 attacker that needs exp, bishop day 1: level 200 attackers suicide, bishop HS and stays in party, 32m exp day 2: level 200 attackers suicide, bishop HS and leaves party, 29m exp Wondering if this makes sense based on your experience.
Technically what would be optimal is to suicide on all but one besides the one that needs exp, and leave party on bishop I believe. Otherwise yes you'll want bishop in party to make HS 150% instead of 110%
yes in this case you'll want to have bishop in pt for more exp and the exps you provide match the math, assuming your level 177 attacker did 100-110m damage(, or 23%-25% damage) (if you have exact exp, we can know exact damage % from level 177 attacker) Code: let mobexp = 43_000000; let mobhp = 430_000000; let cptsize = (N) => { return N === 1 ? 0.5 : (1.1 + 0.05*N)/(N+1); } // day1 let hs = 1.5; let dmg_lv177 = 110_000000; console.log( mobexp * cptsize(2) * ( (mobhp*hs)/mobhp + dmg_lv177*hs/mobhp) ); // day2 hs = 1.1; dmg_lv177 = 110_000000; console.log( mobexp * cptsize(1) * ( (mobhp*hs)/mobhp + dmg_lv177*hs/mobhp) ); Code: 32400000.000000007 29700000.000000004
Thanks for the replies! I also need to try Sylafia's suggestion and see if I've been doing it wrong for MONTHS...
if you attack on the character that needs exp it's trivial: mobexp*cptsize(1)*(1 + dmg%)*hs(1) < mobexp*cptsize(2)*(1 + dmg%)*hs(2) 0.5*1.1 < 0.4*1.5 true for all dmg% but if both do no damage: mobexp*cptsize(1)*1*hs(1) < mobexp*cptsize(2)*(lv/partylv)*hs(2) 0.5*1.1 < 0.4*(lv/partylv)*1.5 lv > 0.91*partylv so it's better if you're above 91% the average party level on the character that needs exp also it's always better exp to attack than to leech, for any party size and level
note that bishop contributes to average party level too so left hand / right hand average party level will be 2 different terms well actually I was mistaking something
you were right, i just edited (lv/partylv) to 1 (party of 1) on the left-hand side to make things clearer
Proposal of calculating VL party damages If you ever look into the exp formula for damage dealers, you can find that if adding up every party member's exp from killing a mob, we get the sum = mobexp * cptsize(N) * (N+1) * party damage %, in which N = # damage dealers in the party From this equation we are able to calculate: The damage dealed by a party (in percentage) = exp sum{from every member's screenshot, need to /1.5 if there's HS} / (mobexp * cptsize(N) * (N+1))
I was wondering if the leecher does some damage (even 1 damage), what exp formula would be cuz it seems to be different. So I did experiment on Shao leech. Not hitting yaoseng: exp ~ 27m (day 1 exp gain on 163 se and 157 bucc) Hitting yaoseng: exp ~ 30m (day 2 exp gain on 163 se and 157 bucc) Spoiler: Party info Party 1: 200 NL, 199 hero, 163 SE Party 2: 200 shad, 189 bucc, 157 bucc 200 NL and Shad commit suicide. Formula 1 gives them about 10% more exp. So indeed if you hit the boss/mob (could be doing 1 damage), you could get more exp.