本文整理汇总了C++中ManagedReference::disseminateExperience方法的典型用法代码示例。如果您正苦于以下问题:C++ ManagedReference::disseminateExperience方法的具体用法?C++ ManagedReference::disseminateExperience怎么用?C++ ManagedReference::disseminateExperience使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ManagedReference
的用法示例。
在下文中一共展示了ManagedReference::disseminateExperience方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: notifyDestruction
int CreatureManagerImplementation::notifyDestruction(TangibleObject* destructor, AiAgent* destructedObject, int condition) {
if (destructedObject->isDead())
return 1;
destructedObject->setPosture(CreaturePosture::DEAD, true);
destructedObject->updateTimeOfDeath();
ManagedReference<PlayerManager*> playerManager = zoneServer->getPlayerManager();
// lets unlock destructor so we dont get into complicated deadlocks
// lets copy the damage map before we remove it all
ThreatMap* threatMap = destructedObject->getThreatMap();
ThreatMap copyThreatMap(*threatMap);
threatMap->removeObservers();
threatMap->removeAll(); // we can clear the original one
if (destructedObject != destructor)
destructor->unlock();
bool shouldRescheduleCorpseDestruction = false;
try {
ManagedReference<CreatureObject*> player = copyThreatMap.getHighestDamageGroupLeader();
uint64 ownerID = 0;
if (player != NULL) {
if(player->isGrouped()) {
ownerID = player->getGroupID();
} else {
ownerID = player->getObjectID();
}
if (player->isPlayerCreature()) {
Locker locker(player, destructedObject);
player->notifyObservers(ObserverEventType::KILLEDCREATURE, destructedObject);
FactionManager* factionManager = FactionManager::instance();
if (!destructedObject->getPvPFaction().isEmpty() && !destructedObject->isEventMob()) {
int level = destructedObject->getLevel();
if(!player->isGrouped())
factionManager->awardFactionStanding(player, destructedObject->getPvPFaction(), level);
else
factionManager->awardFactionStanding(copyThreatMap.getHighestDamagePlayer(), destructedObject->getPvPFaction(), level);
}
}
}
if (playerManager != NULL)
playerManager->disseminateExperience(destructedObject, ©ThreatMap);
SceneObject* creatureInventory = destructedObject->getSlottedObject("inventory");
if (creatureInventory != NULL && player != NULL && player->isPlayerCreature()) {
LootManager* lootManager = zoneServer->getLootManager();
if (destructedObject->isNonPlayerCreatureObject() && !destructedObject->isEventMob())
destructedObject->setCashCredits(lootManager->calculateLootCredits(destructedObject->getLevel()));
creatureInventory->setContainerOwnerID(ownerID);
lootManager->createLoot(creatureInventory, destructedObject);
}
CombatManager::instance()->attemptPeace(destructedObject);
// Check to see if we can expedite the despawn of this corpse
// We can expedite the despawn when corpse has no loot, no credits, player cannot harvest, and no group members in range can harvest
shouldRescheduleCorpseDestruction = playerManager->shouldRescheduleCorpseDestruction(player, destructedObject);
} catch (...) {
destructedObject->scheduleDespawn();
// now we can safely lock destructor again
if (destructedObject != destructor)
destructor->wlock(destructedObject);
throw;
}
destructedObject->scheduleDespawn();
if (shouldRescheduleCorpseDestruction) {
Reference<DespawnCreatureTask*> despawn = destructedObject->getPendingTask("despawn").castTo<DespawnCreatureTask*>();
if (despawn != NULL) {
despawn->cancel();
despawn->reschedule(10000);
}
}
// now we can safely lock destructor again
//.........这里部分代码省略.........