Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 11-25-2008, 02:58 PM
Romai
Fire Beetle
 
Join Date: Mar 2006
Posts: 6
Default Heal Aggro

I've been hearing that the main issue atm with heal aggro is the fact that you get too much aggro for healing someone who is barely even on the hate list.

For example, a warrior pulls 3 mobs, does a bit of damage to each of them (lets say < 1000) and then you heal a monk who was standing near by for 2000 and the mobs jump you.

In order to combat this, I was thinking we could change the following code in entities.cpp. I'd also like to point out that I'm not 100% sure if I'm interpreting how this code section works correctly, so please tell me if I'm wrong.

Current:
Code:
void EntityList::AddHealAggro(Mob* target, Mob* caster, int16 thedam)
{
...
  if(caster){
	if(!cur->CheckAggro(caster))
		cur->AddToHateList(caster, 1);
	else
		cur->AddToHateList(caster, thedam);
  }
...
}
To: (changing the else branch in the above code)
Code:
else {
	thedam = thedam / (((cur->GetHateAmount(cur->GetHateTop()) - cur->GetHateAmount(target))*1)+1);
	cur->AddToHateList(caster, thedam);
}
My idea is to take the current amount that would be added into the hate list and scale it depending on where the target being healed is on the hate list. It would divide the hate by the difference in hate level from the top of the list to the target, +1 to avoid a divide by 0 and to ensure that it never actually increases the hate. The *1 is there as a placeholder mostly to allow it to be tuned easily. > 1 will lower the aggro more, < 1 will lower the aggro less. If this was actually used, I'd probably put that into a rule to make it easier to maintain.

It might not be exactly what we need, but it should at least provide some relationship between aggro generation and the targets position on the hate list.
Reply With Quote
  #2  
Old 11-25-2008, 03:08 PM
Romai
Fire Beetle
 
Join Date: Mar 2006
Posts: 6
Default

Actually, on further thought, that would create too large of a change as aggro levels increase. It should have the same effect if the target is at 1/2 of the top of the list's aggro regardless of whether that is 500:1000 or 50000:100000.

Instead, how about just this:

Code:
thedam = thedam * (cur->GetHateAmount(target)/cur->GetHateAmount(cur->GetHateTop()));
that way, it would scale it back linearly for any aggro levels I don't know if linear is exactly what we want, but I think it'd be a step in the right direction.
Reply With Quote
  #3  
Old 11-26-2008, 04:27 PM
KLS
Administrator
 
Join Date: Sep 2006
Posts: 1,348
Default

Part of the issue is the way we calculate the heal aggro. We do it in one pass when it should be two. I've been meaning to fix it. Heal aggro should be divided among the mobs who are receiving it, like you're fighting 3-4 mobs and drop a 3k heal it shouldn't be 3k worth of healing aggro per mob it should be 750-1k.

There also used to be a clause in there that would heavily reduce aggro below 100 or something but it made it so if you never used big heals you never pulled aggro with healing until you cast like 100 of them and at lower levels it was impossible to pull with healing spells at all unless the tank just didn't hit it. It just felt 'broken' and I haven't really thought of a way to fix it that doesn't seem broken yet. I think making it so you divide up the hate would go a long way toward fixing how heal aggro feels though.
Reply With Quote
  #4  
Old 11-28-2008, 10:17 AM
KingMort
Banned
 
Join Date: Sep 2006
Posts: 841
Default

Hmm yeah i've just been slightly reducing spell agro in rules until i got it fixed.. but thanks
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 10:13 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 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3