Go Back   EQEmulator Home > EQEmulator Forums > Archives > Archive::General > Archive::General Discussion

Archive::General Discussion Archive area for General Discussion's posts that were moved here after an inactivity period of 90 days.

Reply
 
Thread Tools Display Modes
  #1  
Old 03-24-2004, 03:13 AM
ryder911
Hill Giant
 
Join Date: Jun 2002
Posts: 212
Default Changing group lvl

Anyone no how to change the the level gap that can group? It is like 6 normal, is there a way to change it to level x 1.5?
__________________
Chris---
Reply With Quote
  #2  
Old 03-24-2004, 04:13 AM
samandhi's Avatar
samandhi
Demi-God
 
Join Date: Aug 2003
Posts: 1,056
Default

It is located in the variables tables of the DB...
__________________

Quote:
Analysis paralysis will keep you from failing, but it will also keep you from succeeding.
  • L.L. CoolJ
Reply With Quote
  #3  
Old 03-24-2004, 04:25 AM
RexChaos
Dragon
 
Join Date: Feb 2004
Location: Everywhere you want to be
Posts: 582
Default

I'm at work right now so I can't look, but is that the table "AI" or something? I never knew what that did. Cool...that's nice. I learned somethign today. Hehe... But I don't think that answers ryder911's question as to whether you can change it to a formula instead of a hard fast number. Or is that 6 divided by something plus something = level gap?
__________________
An obnoxiously large picture should go here with some witty saying about some cartoon character I made in EQ, but then I realized that shit is fucking annoying.
Reply With Quote
  #4  
Old 03-24-2004, 04:38 AM
samandhi's Avatar
samandhi
Demi-God
 
Join Date: Aug 2003
Posts: 1,056
Default

I believe the way it is in the DB is a cold hard number.... The formula is decided by the coding (I believe, could be wrong on that) will have to research when I get home also...

So, yes, you can change the rate of exp or single AND for group in the variables table, but I dont know the formula that this changes... Either ask this question in EQEMu developement forum, or just experiment with the numbers... Hope that helps at least SOME...
__________________

Quote:
Analysis paralysis will keep you from failing, but it will also keep you from succeeding.
  • L.L. CoolJ
Reply With Quote
  #5  
Old 03-24-2004, 04:50 AM
RexChaos
Dragon
 
Join Date: Feb 2004
Location: Everywhere you want to be
Posts: 582
Default

No, I know about the exp variables. I just didn't know you could change the level gap variable to make it so there could be a greater number of levels (or fewer) in which people could gain exp together.
__________________
An obnoxiously large picture should go here with some witty saying about some cartoon character I made in EQ, but then I realized that shit is fucking annoying.
Reply With Quote
  #6  
Old 03-24-2004, 05:01 AM
smogo
Discordant
 
Join Date: Jan 2004
Location: 47
Posts: 339
Default

i hope not to cast a shadow on this, but afaik the public code (0.5.3 and 0.5.5) don't check the level diff between group members (i.e. a lvl 1 char can join a lvl 65 group, and vice-versa)

ExpMOD and groupEXPBonus are used to tune exp gain, for global or grouped-only experience (afaik, again).

AILevel is used for tactics in fight, to tell if mob goes frenzy or enraged, hate list changes, and for selecting mob spell casting (cast a debuf, support neighbors, ...). 0 make simplest AI tactics, 6 is most complex (afaik, again).

That's all i know about variables. Maybe somewhere else in the DB ...
Reply With Quote
  #7  
Old 03-24-2004, 05:16 AM
samandhi's Avatar
samandhi
Demi-God
 
Join Date: Aug 2003
Posts: 1,056
Default

No, you are right Rex, I was misunderstanding.. (been really sick wtih pneumonia, and am drugged up).... It is NOT in variables that you change THAT part, was thinking he was asking the exp modifier for group not the range of levels...

Sorry...

Quote:
i hope not to cast a shadow on this, but afaik the public code (0.5.3 and 0.5.5) don't check the level diff between group members (i.e. a lvl 1 char can join a lvl 65 group, and vice-versa)
Hmm I didnt know that... so IS there a way to change that fact without having to change TONS of code or is it something that a simple EXTRA function could be written for? (now the newness of C++ and me are showing hehe)... This, of course is assuming that it is in the code and not the DB (which doesnt seem logical, but could be wrong)...
__________________

Quote:
Analysis paralysis will keep you from failing, but it will also keep you from succeeding.
  • L.L. CoolJ
Reply With Quote
  #8  
Old 03-24-2004, 05:30 AM
smogo
Discordant
 
Join Date: Jan 2004
Location: 47
Posts: 339
Default

it may not not be THAT complicated, as the groups code is quite compact. At first glance, a 'simple check' on level in the Group::AddMember in zone/groups.cpp would do it.

If it is only to reproduce 'official' EQ behaviour, get the max level of all actual members in a group (there is already such function), and fail to add a new member if level gap is too high. As a group is always created with a member, there should be no problem...

Basically :
Code:
  if ((i == MAX_GROUP_MEMBERS) || (!newmember->IsClient()))
    return false;
changed to :
Code:
  if ((i == MAX_GROUP_MEMBERS) || (!newmember->IsClient())
      || abs(newmember->CastToClient.GetLevel() -GetHighestLevel()) > 6 )
    return false;
for a (very|too) simple check. More accurate checks can be thought of. Did not test it though, but as you mentionned it ...

At first glance, again, no other part of the code is to be changed
Reply With Quote
  #9  
Old 03-24-2004, 05:38 AM
samandhi's Avatar
samandhi
Demi-God
 
Join Date: Aug 2003
Posts: 1,056
Default

Hmmm thanks, I'll have to fiddle with it some and see what I can ruin, errrr come up with ... <smile>... That should also answer the poster's question...
__________________

Quote:
Analysis paralysis will keep you from failing, but it will also keep you from succeeding.
  • L.L. CoolJ
Reply With Quote
  #10  
Old 03-24-2004, 06:11 AM
ryder911
Hill Giant
 
Join Date: Jun 2002
Posts: 212
Default

Quote:
Originally Posted by smogo

Code:
  if ((i == MAX_GROUP_MEMBERS) || (!newmember->IsClient())
      || abs(newmember->CastToClient.GetLevel() -GetHighestLevel()) > 6 )
    return false;
Woudlnt that code make the gap 6 levels?
__________________
Chris---
Reply With Quote
  #11  
Old 03-24-2004, 06:20 AM
smogo
Discordant
 
Join Date: Jan 2004
Location: 47
Posts: 339
Default

to be precise, it allows +/- 6 lvls over highest level, which is obviously not correct. That code was just to mention where things could be changed.

If you want +/- 1.5 x average level, you have to change the formula, but basically that's where it will take place, not in the DB variables, as of current code.

There is no Group::AverageLevel function yet, that's why i used this formula, to keep things simple for an example.
Reply With Quote
  #12  
Old 03-24-2004, 09:10 AM
ryder911
Hill Giant
 
Join Date: Jun 2002
Posts: 212
Default

ah i got ya, thanks for help
__________________
Chris---
Reply With Quote
  #13  
Old 03-24-2004, 09:25 AM
ndnet
Hill Giant
 
Join Date: Oct 2003
Posts: 105
Default

To mimic EQlive, any level persons may group together, however those who are not at least MaxLevel * (2/3) or MaxLevel / 1.5 if you prefer, are awarded no experience.

(To be even more nitpicky, the MaxLevel only applies to those who took part in the battle and remain in the group at the end of a fight. If a level 5 is grouped with a level 65 and kills a large rat by himself, he gets exp. Similarly, if a level 5 is grouped with a level 65 and the level 65 participates in the battle, but does less than 50% damage and disbands before the mob is dead, the level 5 still gets experience.)

It would seem that instead of denying the ability to group to those outside of +/- 6 levels, you may want to look in groups.cpp (under zone source) around this area:

Code:
void Group::SplitExp(uint32 exp, int16 otherlevel)
If I'm reading it correctly, the function calculates 1.) the highest level group member, 2.) the total group exp (exp * zone bonus * number of members) before it goes into distributing it.

It seems to then go through iterations finding how far from the max level each group member is before distributing:

Code:
sint16 diff = members[i]->GetLevel() - maxlevel;
            if (diff >= -8) /*Instead of person who killed the mob, the person who has the highest level in the group*/
                      { /*addexpglop */ }
Could you not change it to something like:

Code:
      if (members[i]->GetLevel() >= (int)((double)maxlevel / 1.5))
             { /* addexpglop */ }
So that it would distribute the exp to only members whose level is within appropriate range?

I may be off base, maybe this breaks something elsewhere or just doesn't work, hehe.
Reply With Quote
  #14  
Old 03-24-2004, 09:51 AM
smogo
Discordant
 
Join Date: Jan 2004
Location: 47
Posts: 339
Default

your solution sounds good, if it comes to mimic EQ live. i really would'nt pretend to be specialist.

i bet SOE people had thoughts about how/when to allow grouping and split experience, so now it's up to server ops to select their favoured one.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 03:24 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3