void ThreatMap::dropDamage(CreatureObject* target) { Locker llocker(&lockMutex); drop(target); llocker.release(); if (currentThreat == target) currentThreat = NULL; if (threatMapObserver != NULL) { target->dropObserver(ObserverEventType::HEALINGPERFORMED, threatMapObserver); } }
void ThreatMap::dropDamage(CreatureObject* target) { Locker llocker(&lockMutex); ManagedReference<TangibleObject*> selfStrong = self.get(); if (target == NULL || selfStrong == NULL || target->isDead() || !target->isOnline() || target->getPlanetCRC() != selfStrong->getPlanetCRC()) { drop(target); if (threatMapObserver != NULL) target->dropObserver(ObserverEventType::HEALINGPERFORMED, threatMapObserver); } else { ThreatMapEntry *entry = &get(target); entry->setNonAggroDamage(entry->getTotalDamage()); entry->addHeal(-entry->getHeal()); // don't need to store healing entry->clearAggro(); } llocker.release(); if (currentThreat == target) currentThreat = NULL; }