It actually looks like the hate is being generated twice at times.
I would think the second instance of
Code:
//generate at least some hate reguardless of the outcome.
who->CastToNPC()->AddToHateList(this, (MakeRandomInt(5, 10)*level));
at the end of the function probably should be removed. It ends up adding hate even if player at the top of the hate list already, the taunted one is lower level than the taunter, or taunted is at 20% health or less.
It is also added after either the taunt succeeds and hate is added for that, or taunt fails and some hate is added for that.
I don't think that should be happening. I could be wrong.
As for getting it to add no hate when taunt fails, take out the above AND take out the following:
Code:
else{
//generate at least some hate reguardless of the outcome.
who->CastToNPC()->AddToHateList(this, (MakeRandomInt(5, 10)*level));
}
I haven't tested it, but I think it should work.