Log in

View Full Version : Game Mechanics: group experience issue


soniknoise
07-03-2012, 01:47 PM
Hello, new to project1999 player here. Sorry if this has been brought up before, but I wasn't able to find this specific experience issue discussed/resolved in the bug section yet so thought I would post it here.

I think group experience is currently setup incorrectly. It seems to be setup like AA experience worked rather than how normal experience worked in classic. IIRC in classic as long as your group was all within the appropriate level range you would get experience for kills based on what the mob conned to you - not the highest level of the group. For AA experience (obviously not classic) it was based on the highest level of group con.


I tried to find some good sources to back up this claim, but this was about the best I could do - http://everquest.allakhazam.com/forum.html?forum=1&mid=126428051345149414&h=50


Looking at Group::SplitExp in exp.cpp confirms that it is using the highest level in group con rather than individual to determine experience gains.

It seems like this code:

int conlevel = Mob::GetLevelCon(maxlevel, other->GetLevel());
if(conlevel == CON_GREEN)
return; //no exp for greenies...

if (membercount == 0)
return;

for (i = 0; i < MAX_GROUP_MEMBERS; i++) {
if (members[i] != NULL && members[i]->IsClient()) // If Group Member is Client
{
Client *cmember = members[i]->CastToClient();
// add exp + exp cap
sint16 diff = cmember->GetLevel() - maxlevel;
sint16 maxdiff = -(cmember->GetLevel()*15/10 - cmember->GetLevel());
if(maxdiff > -5)
maxdiff = -5;
if (diff >= (maxdiff)) { /*Instead of person who killed the mob, the person who has the highest level in the group*/
uint32 tmp = (cmember->GetLevel()+3) * (cmember->GetLevel()+3) * 75 * 35 / 10;
uint32 tmp2 = groupexp / membercount;
cmember->AddEXP( tmp < tmp2 ? tmp : tmp2, conlevel );
}
}
}


Should be changed to this code:

if (membercount == 0)
return;

for (i = 0; i < MAX_GROUP_MEMBERS; i++) {
if (members[i] != NULL && members[i]->IsClient()) // If Group Member is Client
{
Client *cmember = members[i]->CastToClient();
// add exp + exp cap
int conlevel = Mob::GetLevelCon(cmember->GetLevel(), other->GetLevel());
sint16 diff = cmember->GetLevel() - maxlevel;
sint16 maxdiff = -(cmember->GetLevel()*15/10 - cmember->GetLevel());
if(maxdiff > -5)
maxdiff = -5;
if (diff >= (maxdiff)) { /*Instead of person who killed the mob, the person who has the highest level in the group*/
uint32 tmp = (cmember->GetLevel()+3) * (cmember->GetLevel()+3) * 75 * 35 / 10;
uint32 tmp2 = groupexp / membercount;
cmember->AddEXP( tmp < tmp2 ? tmp : tmp2, conlevel );
}
}
}



While this isn't a huge deal at higher levels it is quite annoying for low level groups - especially if you are trying to play with real life friends who get behind in levels. If it worked correctly you could still group and assuming you were killing in an area that was partially green to the higher levels but all experience for the lower levels - the lower levels could eventually begin to catch up. Right now it seems the only way for the lower levels to catch up is to solo which just makes the game more group unfriendly and hurts player retention.

My personal example: I recently started playing with 5 friends. We are having a great time and love the server, but a couple of them are already seeming discouraged by being behind in levels since they don't have enough play time. Even when they do get time to play now we basically can't group up and all play together because of these mechanics. I realize there are other workarounds for this - playing 2ndary characters, out of group assistance, etc., but none of those would be as enjoyable as just actually grouping together in an appropriate area where they could catch up.

Thanks for reading and for all the work put into this server!

Treats
07-03-2012, 02:14 PM
If it worked this way a Level 1 could group with a Level 60.

The level 60 could kill everything and the Level 1 could just afk.

The way it is set up to work when you are grouped -- Current Level + Current Level / 2

Examples of Levels you can group with and still get experience:

10 up to 15
20 up to 30
30 up to 45
40 up to 60

If you have a player that is much higher level than the rest of your group you will need to kill more difficult mobs.
Thats just the way it works or there would be no challenge to the game.
You could rename it LeechQuest if it was coded like that.

Dumesh Uhl'Belk
07-03-2012, 02:30 PM
Slightly different issue, Treats.

He is not advocating changing the range between PCs, but the range between the mob and the highest PC in the group.

If a 46 and a 39 are grouped together and they kill something that is green to the 46 but blue to the 39, they will get no xp. Where as they would get xp for killing something that was blue to both of them. Soniknoise is saying that the 39 should get xp while the 46 gets none. I was going to say that I can't remember, but I think we're doing it correctly on P99, but now that I am typing... I think back in the day the 39 would still get xp, but only the portion of xp he would get assuming that the 46 was taking his own appropriate share of the xp. The 46 toon still grabs his piece of the pie, he just has to throw it away and not eat it (to borrow my pie analogy).

I'd be interested to see if anyone can produce some evidence that this was the case. This is not one of those issues where I am very confident in my recollection.

soniknoise
07-03-2012, 02:33 PM
I'm not advocating changing the aspect you describe. The
"diff >= (maxdiff)" is still in there to limit the overall level difference of the group.

The change I describe would allow a level 10 to group with a level 15 and allow them to kill a mob that cons green to the 15, but blue to the 10 and the 10 would get experience and the 15 wouldn't. Currently that doesn't work.

soniknoise
07-03-2012, 02:42 PM
Right, the higher level should still take their piece of the pie and throw it away or it could easily be abused. Assuming the actual server code isn't too different than what I looked at from eqemu base, this change should do that. The higher level gets their experience filtered out later in cmember->AddEXP.

My recollection is foggy as well, but I do think it worked this way.

Treats
07-03-2012, 02:49 PM
I see what you are saying now.

If the mob is allready green to the highest player though how much experience are you actually going to be receiving?

Especially if you are splitting it between 4 or 5 other players in the group.

I imagine it would be pretty close to getting none.