In Mob::AddBuff
Code:
if(will_overwrite)
{
vector<int>::iterator cur, end;
cur = overwrite_slots.begin();
end = overwrite_slots.end();
for(; cur != end; cur++) {
// same spell, so put in same slot
if (buffs[*cur].spellid == spell_id)
emptyslot = *cur;
// strip spell
BuffFadeBySlot(*cur, false);
// if we hadn't found a free slot before, or if this is earlier
// we use it
if(emptyslot == -1 || *cur < emptyslot)
emptyslot = *cur;
}
}
Crude, but works for a lot of what you want. Could expand the checks to work for overwriting of spells of a higher level version of spells.
Haynar