EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Development (https://www.eqemulator.org/forums/forumdisplay.php?f=590)
-   -   Heal Aggro (https://www.eqemulator.org/forums/showthread.php?t=26846)

Romai 11-25-2008 02:58 PM

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. :D

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.

Romai 11-25-2008 03:08 PM

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.

KLS 11-26-2008 04:27 PM

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.

KingMort 11-28-2008 10:17 AM

Hmm yeah i've just been slightly reducing spell agro in rules until i got it fixed.. but thanks :)


All times are GMT -4. The time now is 11:03 AM.

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