示例#1
0
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);
	}
}
示例#2
0
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;
}