EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Development (https://www.eqemulator.org/forums/forumdisplay.php?f=590)
-   -   sharing exp penalties amongst group (https://www.eqemulator.org/forums/showthread.php?t=27681)

nilbog 03-16-2009 12:37 PM

sharing exp penalties amongst group
 
After enabling the class/race based experience penalties, I am curious as how to share those penalties amongst the group.

Code:

//Uncomment this to enable Race and Class based XP modifiers (removed from live)
//#define USE_RACE_CLASS_XP_MODS

Works great.. and now the halfling warriors are leveling a hell of a lot faster than the troll shadowknights. But, originally, these penalties were split amongst your group, if you were grouped.

Here's the producer's letter from 1/14/01 defining how the penalties worked, and how they were changed.
http://everquest.allakhazam.com/edit...rs_letter.html

The relevant information from that link is this though:

Quote:

In regards to the sharing of the experience penalty, it was apparent in beta, before the penalty was shared, that those playing characters without an experience penalty leveled faster than those that did. It was obvious that this would occur, but it was to the extreme that a group of friends, all playing together, would become separated to the point that they could no longer group efficiently in the mid to upper-mid levels. So we chose to distribute experience in the group on the basis of the total experience of each member rather than the level, in order to keep groups together.
Here's what I see defined in source.

Code:

29 //experience modifiers based on race and class, used if USE_RACE_CLASS_XP_MODS is defined
  30 //                            hum    bar    eru    elf    hie    def    hef    dwa    tro    ogr    hal    gno    iks,    vah    frog
  31 float  race_modifiers[15] = { 100.0f, 105.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 100.0f, 120.0f, 115.0f, 95.0f, 100.0f, 120.0f, 100.0f, 100.0f}; // Quagmire - Guessed on iks and vah
  32
  33 //                            war  cle    pal    ran    shd    dru    mnk    brd    rog    shm    nec    wiz    mag    enc    bst    bes
  34 float class_modifiers[16] = { 9.0f, 10.0f, 14.0f, 14.0f, 14.0f, 10.0f, 12.0f, 14.0f, 9.05f, 10.0f, 11.0f, 11.0f, 11.0f, 11.0f, 10.0f, 10.0f};

  327 uint32 Client::GetEXPForLevel(int16 check_level)
  328 {
  329
  330        int16 check_levelm1 = check_level-1;
  331        float mod;
  332        if (check_level < 31)
  333                mod = 1.0;
  334        else if (check_level < 36)
  335                mod = 1.1;
  336        else if (check_level < 41)
  337                mod = 1.2;
  338        else if (check_level < 46)
  339                mod = 1.3;
  340        else if (check_level < 52)
  341                mod = 1.4;
  342        else if (check_level < 53)
  343                mod = 1.5;
  344        else if (check_level < 54)
  345                mod = 1.6;
  346        else if (check_level < 55)
  347                mod = 1.7;
  348        else if (check_level < 56)
  349                mod = 1.9;
  350        else if (check_level < 57)
  351                mod = 2.1;
  352        else if (check_level < 58)
  353                mod = 2.3;
  354        else if (check_level < 59)
  355                mod = 2.5;
  356        else if (check_level < 60)
  357                mod = 2.7;
  358        else if (check_level < 61)
  359                mod = 3.0;
  360        else
  361                mod = 3.1;
  362
  363        float base = (check_levelm1)*(check_levelm1)*(check_levelm1);
  364
  365 #ifdef USE_RACE_CLASS_XP_MODS
  366        int16 tmprace = GetBaseRace();
  367        if (tmprace == IKSAR) // Quagmire, set these up so they read from array right
  368                tmprace = 12;
  369        else if (tmprace == VAHSHIR)
  370                tmprace = 13;
  371        else if ((tmprace == FROGLOK) || (tmprace == FROGLOK2))
  372                tmprace = 14;
  373        else
  374                tmprace--;
  375
  376        if (tmprace >= sizeof(race_modifiers) || GetClass() < 1 || GetClass() - 1 >= PLAYER_CLASS_COUNT)
  377                return 0xFFFFFFFF;
  378
  379        mod *= class_modifiers[GetClass()-1]*race_modifiers[tmprace];
  380 #else
  381        mod *= 1000;
  382 #endif
  383
  384        return(uint32(base * mod));
  385 }

Anyone have any thoughts/ideas about this?

Yeormom 03-23-2009 10:02 PM

Penalties we're split with the group? That was mad harsh Verant!

trevius 03-23-2009 10:09 PM

Yes, I clearly remember that being one of the reasons it was so hard to get a group with my paladin and I know Iksar SKs were really hating life lol. Bad enough that we had such huge penalties to begin with, but to make it harder to get groups because they didn't want to take on our penalties just made it worse. Glad they got rid of that, but I wish it was before I had spent months leveling up my Paladin.

The defined penalties all look pretty accurate from what I recall about them at the time, but that was about 8 years ago lol. Also, don't forget to add Drakkin in there as they will need to get exp for people using SoF as well :) I think it would be safe to assume they would get a 100.0 mod, the same as humans since they are essentially the same in most aspects.


All times are GMT -4. The time now is 10:14 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.