本文整理汇总了C++中VectorMap::elementAt方法的典型用法代码示例。如果您正苦于以下问题:C++ VectorMap::elementAt方法的具体用法?C++ VectorMap::elementAt怎么用?C++ VectorMap::elementAt使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类VectorMap
的用法示例。
在下文中一共展示了VectorMap::elementAt方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: payStructures
void DroidMaintenanceModuleDataComponent::payStructures(CreatureObject* player, VectorMap<unsigned long long, int> assignments) {
// we know each struct to pay and any fees applied.
ManagedReference<DroidObject*> droid = getDroidObject();
for(int i=0;i< assignments.size();i++) {
uint64 objectID = assignments.elementAt(i).getKey();
int maintToPay = assignments.elementAt(i).getValue();
ManagedReference<SceneObject*> obj = player->getZoneServer()->getObject(objectID);
StructureObject* structureObject = cast<StructureObject*>(obj.get());
if (structureObject != NULL)
Locker sLock(obj,player);
structureObject->payMaintenance(maintToPay,player,true);
}
}
示例2: addSkillMods
void CraftingSessionImplementation::addSkillMods() {
ManagedReference<ManufactureSchematic*> manufactureSchematic = this->manufactureSchematic.get();
ManagedReference<TangibleObject*> prototype = this->prototype.get();
ManagedReference<DraftSchematic*> draftSchematic = manufactureSchematic->getDraftSchematic();
VectorMap<String, int>* skillMods = draftSchematic->getDraftSchematicTemplate()->getSkillMods();
for (int i = 0; i < skillMods->size(); i++) {
VectorMapEntry<String, int> mod = skillMods->elementAt(i);
if (prototype->isWearableObject()) {
WearableObject* wearable = prototype.castTo<WearableObject*>();
VectorMap<String, int>* wearableMods = wearable->getWearableSkillMods();
if (wearableMods->contains(mod.getKey())) {
int oldValue = wearableMods->get(mod.getKey());
int newValue = mod.getValue() + oldValue;
if (newValue > 25)
newValue = 25;
wearableMods->put(mod.getKey(), newValue);
continue;
}
}
prototype->addSkillMod(SkillModManager::WEARABLE, mod.getKey(), mod.getValue(), false);
}
}
示例3: updateColorVariable
void ImageDesignManager::updateColorVariable(const Vector<String>& fullVariables, uint32 value, TangibleObject* tano, int skillLevel) {
String appearanceFilename = tano->getObjectTemplate()->getAppearanceFilename();
VectorMap<String, Reference<CustomizationVariable*> > variableLimits;
AssetCustomizationManagerTemplate::instance()->getCustomizationVariables(appearanceFilename.hashCode(), variableLimits, false);
for (int i = 0; i < fullVariables.size(); ++i) {
String var = fullVariables.get(i);
for (int j = 0; j < variableLimits.size(); ++j) {
String fullVariableNameLimit = variableLimits.elementAt(j).getKey();
//info("checking customization variable " + fullVariableNameLimit + " for " + var, true);
if (fullVariableNameLimit.contains(var)) {
BasicRangedIntCustomizationVariable* ranged = dynamic_cast<BasicRangedIntCustomizationVariable*>(variableLimits.elementAt(j).getValue().get());
PaletteColorCustomizationVariable* palette = NULL;
uint32 currentVal = value;
if (ranged != NULL) {
int min = ranged->getMinValueInclusive();
int max = ranged->getMaxValueExclusive();
if (value < min)
currentVal = min;
if (value >= max)
currentVal = max - 1;
} else {
palette = dynamic_cast<PaletteColorCustomizationVariable*>(variableLimits.elementAt(j).getValue().get());
if (palette != NULL) {
if (!validatePalette(palette, currentVal, skillLevel))
currentVal = palette->getDefaultValue();
}
}
Locker locker(tano);
tano->setCustomizationVariable(fullVariableNameLimit, currentVal, true);
//info("setting " + fullVariableNameLimit + " to " + String::valueOf(currentVal), true);
}
}
}
}
示例4: handleObjectMenuSelect
int GogglesObjectMenuComponent::handleObjectMenuSelect(SceneObject* sceneObject, CreatureObject* player, byte selectedID) {
if (!sceneObject->isTangibleObject())
return 0;
if (!sceneObject->isASubChildOf(player))
return 0;
if (selectedID == 81 || selectedID == 82) {
ManagedReference<SceneObject*> parent = sceneObject->getParent().get();
if (parent != NULL && parent->isPlayerCreature()) {
player->sendSystemMessage("@error_message:equipped_goggles");
return 0;
}
// Handle color change.
ZoneServer* server = player->getZoneServer();
if (server != NULL) {
// The color index.
String appearanceFilename = sceneObject->getObjectTemplate()->getAppearanceFilename();
VectorMap<String, Reference<CustomizationVariable*> > variables;
AssetCustomizationManagerTemplate::instance()->getCustomizationVariables(appearanceFilename.hashCode(), variables, false);
// The Sui Box.
ManagedReference<SuiColorBox*> cbox = new SuiColorBox(player, SuiWindowType::COLOR_GOGGLES);
cbox->setCallback(new ColorGogglesSuiCallback(server));
if (selectedID == 81)
cbox->setColorPalette(variables.elementAt(1).getKey());
else
cbox->setColorPalette(variables.elementAt(0).getKey());
cbox->setUsingObject(sceneObject);
// Add to player.
ManagedReference<PlayerObject*> ghost = player->getPlayerObject();
ghost->addSuiBox(cbox);
player->sendMessage(cbox->generateMessage());
}
}
return TangibleObjectMenuComponent::handleObjectMenuSelect(sceneObject, player, selectedID);
}
示例5: addSkillMods
void CraftingSessionImplementation::addSkillMods() {
ManagedReference<ManufactureSchematic*> manufactureSchematic = this->manufactureSchematic.get();
ManagedReference<TangibleObject*> prototype = this->prototype.get();
ManagedReference<DraftSchematic*> draftSchematic = manufactureSchematic->getDraftSchematic();
VectorMap<String, int>* skillMods = draftSchematic->getDraftSchematicTemplate()->getSkillMods();
for (int i = 0; i < skillMods->size(); i++) {
VectorMapEntry<String, int> mod = skillMods->elementAt(i);
prototype->addSkillMod(SkillModManager::WEARABLE, mod.getKey(), mod.getValue(), false);
}
}
示例6: removeTemplateSkillMods
void TangibleObjectImplementation::removeTemplateSkillMods(TangibleObject* targetObject) {
SharedTangibleObjectTemplate* tano = dynamic_cast<SharedTangibleObjectTemplate*>(templateObject.get());
if (tano == NULL)
return;
VectorMap<String, int>* mods = tano->getSkillMods();
for (int i = 0; i < mods->size(); ++i) {
VectorMapEntry<String, int> entry = mods->elementAt(i);
targetObject->removeSkillMod(SkillModManager::TEMPLATE, entry.getKey(), entry.getValue());
}
}
示例7: addWeaponDots
void CraftingSessionImplementation::addWeaponDots() {
ManagedReference<TangibleObject*> prototype = this->prototype.get();
if (!(prototype->isWeaponObject()))
return;
ManagedReference<WeaponObject*> weapon = cast<WeaponObject*>(prototype.get());
ManagedReference<ManufactureSchematic*> manufactureSchematic = this->manufactureSchematic.get();
ManagedReference<DraftSchematic*> draftSchematic = manufactureSchematic->getDraftSchematic();
Vector<VectorMap<String, int> >* weaponDots = draftSchematic->getDraftSchematicTemplate()->getWeaponDots();
for (int i = 0; i < weaponDots->size(); i++) {
VectorMap<String, int> dot = weaponDots->elementAt(i);
for (int j = 0; j < dot.size(); j++) {
String property = dot.elementAt(j).getKey();
int value = dot.elementAt(j).getValue();
if (property == "type")
weapon->addDotType(value);
else if (property == "attribute")
weapon->addDotAttribute(value);
else if (property == "strength")
weapon->addDotStrength(value);
else if (property == "duration")
weapon->addDotDuration(value);
else if (property == "potency")
weapon->addDotPotency(value);
else if (property == "uses")
weapon->addDotUses(value);
}
}
}
示例8: surrenderAllSkills
void SkillManager::surrenderAllSkills(CreatureObject* creature, bool notifyClient) {
ManagedReference<PlayerObject*> ghost = creature->getPlayerObject();
SkillList* skillList = creature->getSkillList();
Vector<String> listOfNames;
skillList->getStringList(listOfNames);
SkillList copyOfList;
copyOfList.loadFromNames(listOfNames);
for (int i = 0; i < copyOfList.size(); i++) {
Skill* skill = copyOfList.get(i);
if (skill->getSkillPointsRequired() > 0) {
creature->removeSkill(skill, notifyClient);
//Remove skill modifiers
VectorMap<String, int>* skillModifiers = skill->getSkillModifiers();
for (int i = 0; i < skillModifiers->size(); ++i) {
VectorMapEntry<String, int>* entry = &skillModifiers->elementAt(i);
creature->removeSkillMod(SkillModManager::SKILLBOX, entry->getKey(), entry->getValue(), notifyClient);
}
SkillModManager::instance()->verifySkillBoxSkillMods(creature);
if (ghost != NULL) {
//Give the player the used skill points back.
ghost->addSkillPoints(skill->getSkillPointsRequired());
//Remove abilities
Vector<String>* abilityNames = skill->getAbilities();
removeAbilities(ghost, *abilityNames, notifyClient);
//Remove draft schematic groups
Vector<String>* schematicsGranted = skill->getSchematicsGranted();
SchematicMap::instance()->removeSchematics(ghost, *schematicsGranted, notifyClient);
/// update force
ghost->setForcePowerMax(creature->getSkillMod("jedi_force_power_max"), true);
}
}
}
}
示例9: notifyInsertToZone
void VehicleObjectImplementation::notifyInsertToZone(Zone* zone) {
SceneObjectImplementation::notifyInsertToZone(zone);
if( this->linkedCreature == NULL )
return;
ManagedReference<CreatureObject* > linkedCreature = this->linkedCreature.get();
if( linkedCreature == NULL )
return;
// Decay customized paint (if any)
if (paintCount > 0){
// Paint starts to fade when there are 4 calls left
if (paintCount <= 4){
// Send player notification of decay
if( paintCount == 1 ){
linkedCreature->sendSystemMessage("@pet/pet_menu:customization_gone_veh"); // "Your vehicle's customization has completely faded away."
}
else{
linkedCreature->sendSystemMessage("@pet/pet_menu:customization_fading_veh"); // "Your vehicle's customization is fading away."
}
// Fade color to white
String appearanceFilename = getObjectTemplate()->getAppearanceFilename();
VectorMap<String, Reference<CustomizationVariable*> > variables;
AssetCustomizationManagerTemplate::instance()->getCustomizationVariables(appearanceFilename.hashCode(), variables, false);
for(int i = 0; i< variables.size(); ++i){
String varkey = variables.elementAt(i).getKey();
if (varkey.contains("color")){
setCustomizationVariable(varkey, paintCount-1, true); // Palette values 3,2,1,0 are grey->white
}
}
}
--paintCount;
}
}
示例10: addEntertainerFlourishBuff
// TODO: can this be simplified by doing the building check in the ticker?
void EntertainingSessionImplementation::addEntertainerFlourishBuff() {
// Watchers that are in our group for passive buff
VectorMap<ManagedReference<CreatureObject*>, EntertainingData>* patrons = NULL;
if (dancing) {
patrons = &watchers;
}
else if (playingMusic) {
patrons = &listeners;
}
if (patrons != NULL) {
for (int i = 0; i < patrons->size(); ++i) {
ManagedReference<CreatureObject*> patron = patrons->elementAt(i).getKey();
try {
increaseEntertainerBuff(patron);
} catch (Exception& e) {
error("Unreported exception caught in EntertainingSessionImplementation::addEntertainerFlourishBuff()");
}
}
} /*else
System::out << "no patrons";*/
}
示例11: calculateRunTime
long DroidMaintenanceModuleDataComponent::calculateRunTime(VectorMap<unsigned long long, int> assignments) {
long duration = 0;
ManagedReference<DroidObject*> droid = getDroidObject();
String localPlanet = droid->getZone()->getZoneName();
ManagedReference<SceneObject*> primeStructure;
for(int i=0;i< assignments.size();i++) {
uint64 objectID = assignments.elementAt(i).getKey();
if(isValidStructure(objectID)) {
ManagedReference<SceneObject*> obj = droid->getZoneServer()->getObject(objectID);
if (obj->getZone()->getZoneName() != localPlanet) {
duration += 6033000; // 1 hr 40 minutes and 33 seconds
}else {
// same planet
if (primeStructure == NULL) {
primeStructure = obj;
}
if (obj == primeStructure) {
if (droid->getDistanceTo(obj) > 432) {
duration += 2900000; // 48 minutes and 20 seconds
} else {
duration += 900000; // 15 minutes
}
} else {
float distance = primeStructure->getDistanceTo(obj);
if (distance > 432) {
duration += 2900000; // 48 minutes and 20 seconds
primeStructure = obj; // new prime structure
} else {
// this struct is within 432 of prime
float timeAdded = (distance/3) * 1000; // add 1 sec for every 3 meters apart
duration += (timeAdded + 900000);
primeStructure = obj; // we now grab this structure as our prime going down the list.
}
}
}
}
}
return duration;
}
示例12: surrenderSkill
bool SkillManager::surrenderSkill(const String& skillName, CreatureObject* creature, bool notifyClient) {
Skill* skill = skillMap.get(skillName.hashCode());
if (skill == NULL)
return false;
Locker locker(creature);
SkillList* skillList = creature->getSkillList();
if(skillName == "force_title_jedi_novice" && getForceSensitiveSkillCount(creature, true) > 0) {
return false;
}
if(skillName.beginsWith("force_sensitive_") &&
getForceSensitiveSkillCount(creature, false) <= 24 &&
creature->hasSkill("force_title_jedi_rank_01"))
return false;
for (int i = 0; i < skillList->size(); ++i) {
Skill* checkSkill = skillList->get(i);
if (checkSkill->isRequiredSkillOf(skill))
return false;
}
if(creature->hasSkill("force_title_jedi_rank_03") && skillName.contains("force_discipline_") && !knightPrereqsMet(creature, skillName)) {
return false;
}
//If they have already surrendered the skill, then return true.
if (!creature->hasSkill(skill->getSkillName()))
return true;
creature->removeSkill(skill, notifyClient);
//Remove skill modifiers
VectorMap<String, int>* skillModifiers = skill->getSkillModifiers();
ManagedReference<PlayerObject*> ghost = creature->getPlayerObject();
for (int i = 0; i < skillModifiers->size(); ++i) {
VectorMapEntry<String, int>* entry = &skillModifiers->elementAt(i);
creature->removeSkillMod(SkillModManager::SKILLBOX, entry->getKey(), entry->getValue(), notifyClient);
}
if (ghost != NULL) {
//Give the player the used skill points back.
ghost->addSkillPoints(skill->getSkillPointsRequired());
//Remove abilities but only if the creature doesn't still have a skill that grants the
//ability. Some abilities are granted by multiple skills. For example Dazzle for dancers
//and musicians.
Vector<String>* skillAbilities = skill->getAbilities();
if (skillAbilities->size() > 0) {
SortedVector<String> abilitiesLost;
for (int i = 0; i < skillAbilities->size(); i++) {
abilitiesLost.put(skillAbilities->get(i));
}
for (int i = 0; i < skillList->size(); i++) {
Skill* remainingSkill = skillList->get(i);
Vector<String>* remainingAbilities = remainingSkill->getAbilities();
for(int j = 0; j < remainingAbilities->size(); j++) {
if (abilitiesLost.contains(remainingAbilities->get(j))) {
abilitiesLost.drop(remainingAbilities->get(j));
if (abilitiesLost.size() == 0) {
break;
}
}
}
}
if (abilitiesLost.size() > 0) {
removeAbilities(ghost, abilitiesLost, notifyClient);
}
}
//Remove draft schematic groups
Vector<String>* schematicsGranted = skill->getSchematicsGranted();
SchematicMap::instance()->removeSchematics(ghost, *schematicsGranted, notifyClient);
//Update maximum experience.
updateXpLimits(ghost);
/// Update Force Power Max
ghost->setForcePowerMax(creature->getSkillMod("jedi_force_power_max"), true);
SkillList* list = creature->getSkillList();
int totalSkillPointsWasted = 250;
for (int i = 0; i < list->size(); ++i) {
Skill* skill = list->get(i);
totalSkillPointsWasted -= skill->getSkillPointsRequired();
}
if (ghost->getSkillPoints() != totalSkillPointsWasted) {
creature->error("skill points mismatch calculated: " + String::valueOf(totalSkillPointsWasted) + " found: " + String::valueOf(ghost->getSkillPoints()));
ghost->setSkillPoints(totalSkillPointsWasted);
//.........这里部分代码省略.........
示例13: awardSkill
bool SkillManager::awardSkill(const String& skillName, CreatureObject* creature, bool notifyClient, bool awardRequiredSkills, bool noXpRequired) {
Skill* skill = skillMap.get(skillName.hashCode());
if (skill == NULL)
return false;
Locker locker(creature);
//Check for required skills.
Vector<String>* requiredSkills = skill->getSkillsRequired();
for (int i = 0; i < requiredSkills->size(); ++i) {
String requiredSkillName = requiredSkills->get(i);
Skill* requiredSkill = skillMap.get(requiredSkillName.hashCode());
if (requiredSkill == NULL)
continue;
if (awardRequiredSkills)
awardSkill(requiredSkillName, creature, notifyClient, awardRequiredSkills, noXpRequired);
if (!creature->hasSkill(requiredSkillName))
return false;
}
if (!canLearnSkill(skillName, creature, noXpRequired)) {
return false;
}
//If they already have the skill, then return true.
if (creature->hasSkill(skill->getSkillName()))
return true;
ManagedReference<PlayerObject*> ghost = creature->getPlayerObject();
if (ghost != NULL) {
//Withdraw skill points.
ghost->addSkillPoints(-skill->getSkillPointsRequired());
//Witdraw experience.
if (!noXpRequired) {
ghost->addExperience(skill->getXpType(), -skill->getXpCost(), true);
}
creature->addSkill(skill, notifyClient);
//Add skill modifiers
VectorMap<String, int>* skillModifiers = skill->getSkillModifiers();
for (int i = 0; i < skillModifiers->size(); ++i) {
VectorMapEntry<String, int>* entry = &skillModifiers->elementAt(i);
creature->addSkillMod(SkillModManager::SKILLBOX, entry->getKey(), entry->getValue(), notifyClient);
}
//Add abilities
Vector<String>* abilityNames = skill->getAbilities();
addAbilities(ghost, *abilityNames, notifyClient);
if (skill->isGodOnly()) {
for (int i = 0; i < abilityNames->size(); ++i) {
String ability = abilityNames->get(i);
StringIdChatParameter params;
params.setTU(ability);
params.setStringId("ui", "skill_command_acquired_prose");
creature->sendSystemMessage(params);
}
}
//Add draft schematic groups
Vector<String>* schematicsGranted = skill->getSchematicsGranted();
SchematicMap::instance()->addSchematics(ghost, *schematicsGranted, notifyClient);
//Update maximum experience.
updateXpLimits(ghost);
// Update Force Power Max.
ghost->setForcePowerMax(creature->getSkillMod("jedi_force_power_max"), true);
if (skillName.contains("master")) {
ManagedReference<PlayerManager*> playerManager = creature->getZoneServer()->getPlayerManager();
if (playerManager != NULL) {
const Badge* badge = BadgeList::instance()->get(skillName);
if (badge == NULL && skillName == "crafting_shipwright_master") {
badge = BadgeList::instance()->get("crafting_shipwright");
}
if (badge != NULL) {
playerManager->awardBadge(ghost, badge);
}
}
}
SkillList* list = creature->getSkillList();
int totalSkillPointsWasted = 250;
for (int i = 0; i < list->size(); ++i) {
Skill* skill = list->get(i);
//.........这里部分代码省略.........
示例14: checkForNewSpawns
bool LairObserverImplementation::checkForNewSpawns(TangibleObject* lair, TangibleObject* attacker, bool forceSpawn) {
if (lair->getZone() == NULL)
return false;
if (spawnedCreatures.size() >= lairTemplate->getSpawnLimit() && !lairTemplate->hasBossMobs())
return false;
if (forceSpawn) {
spawnNumber++;
} else if (getMobType() == LairTemplate::NPC) {
return false;
} else {
int conditionDamage = lair->getConditionDamage();
int maxCondition = lair->getMaxCondition();
switch (spawnNumber) {
case 0:
spawnNumber++;
break;
case 1:
if (conditionDamage > (maxCondition / 10)) {
spawnNumber++;
} else {
return false;
}
break;
case 2:
if (conditionDamage > (maxCondition / 2)) {
spawnNumber++;
} else {
return false;
}
break;
case 3:
if (lairTemplate->hasBossMobs() && conditionDamage > ((maxCondition * 9) / 10)) {
spawnNumber++;
} else {
return false;
}
break;
default:
return false;
break;
}
}
VectorMap<String, int> objectsToSpawn; // String mobileTemplate, int number to spawn
if (spawnNumber == 4) {
if (System::random(100) > 9)
return false;
VectorMap<String, int>* mobs = lairTemplate->getBossMobiles();
for (int i = 0; i < mobs->size(); i++) {
objectsToSpawn.put(mobs->elementAt(i).getKey(), mobs->elementAt(i).getValue());
}
} else {
Vector<String>* mobiles = lairTemplate->getWeightedMobiles();
int amountToSpawn = 0;
if (getMobType() == LairTemplate::CREATURE) {
amountToSpawn = System::random(3) + ((lairTemplate->getSpawnLimit() / 3) - 2);
} else {
amountToSpawn = System::random(lairTemplate->getSpawnLimit() / 2) + (lairTemplate->getSpawnLimit() / 2);
}
if (amountToSpawn < 1)
amountToSpawn = 1;
for (int i = 0; i < amountToSpawn; i++) {
int num = System::random(mobiles->size() - 1);
String mob = mobiles->get(num);
if (objectsToSpawn.contains(mob)) {
int value = objectsToSpawn.get(mob);
objectsToSpawn.drop(mob);
objectsToSpawn.put(mob, value + 1);
} else {
objectsToSpawn.put(mob, 1);
}
}
}
for(int i = 0; i < objectsToSpawn.size(); ++i) {
if (spawnNumber != 4 && spawnedCreatures.size() >= lairTemplate->getSpawnLimit())
return true;
String templateToSpawn = objectsToSpawn.elementAt(i).getKey();
int numberToSpawn = objectsToSpawn.get(templateToSpawn);
CreatureTemplate* creatureTemplate = CreatureTemplateManager::instance()->getTemplate(templateToSpawn);
if (creatureTemplate == NULL)
continue;
float tamingChance = creatureTemplate->getTame();
//.........这里部分代码省略.........
示例15: doEntertainerPatronEffects
void EntertainingSessionImplementation::doEntertainerPatronEffects() {
ManagedReference<CreatureObject*> creo = entertainer.get();
if (creo == NULL)
return;
if (performanceName == "")
return;
Locker locker(creo);
//**DECLARATIONS**
VectorMap<ManagedReference<CreatureObject*>, EntertainingData>* patrons = NULL;
SkillManager* skillManager = creo->getZoneServer()->getSkillManager();
PerformanceManager* performanceManager = skillManager->getPerformanceManager();
Performance* performance = NULL;
ManagedReference<Instrument*> instrument = getInstrument(creo);
float woundHealingSkill = 0.0f;
float playerShockHealingSkill = 0.0f;
float buildingShockHealingSkill = creo->getSkillMod("private_med_battle_fatigue");
float factionPerkSkill = creo->getSkillMod("private_faction_mind_heal");
//**LOAD PATRONS, GET THE PERFORMANCE AND ENT'S HEALING SKILL.**
if (dancing) {
patrons = &watchers;
performance = performanceManager->getDance(performanceName);
woundHealingSkill = (float) creo->getSkillMod("healing_dance_wound");
playerShockHealingSkill = (float) creo->getSkillMod("healing_dance_shock");
} else if (playingMusic && instrument != NULL) {
patrons = &listeners;
performance = performanceManager->getSong(performanceName, instrument->getInstrumentType());
woundHealingSkill = (float) creo->getSkillMod("healing_music_wound");
playerShockHealingSkill = (float) creo->getSkillMod("healing_music_shock");
} else {
cancelSession();
return;
}
if (performance == NULL) {
return;
}
ManagedReference<BuildingObject*> building = creo->getRootParent().get().castTo<BuildingObject*>();
if (building != NULL && factionPerkSkill > 0 && building->isPlayerRegisteredWithin(creo->getObjectID())) {
unsigned int buildingFaction = building->getFaction();
unsigned int healerFaction = creo->getFaction();
PlayerObject* ghost = creo->getPlayerObject();
if (ghost != NULL && healerFaction != 0 && healerFaction == buildingFaction && ghost->getFactionStatus() == FactionStatus::OVERT) {
woundHealingSkill += factionPerkSkill;
playerShockHealingSkill += factionPerkSkill;
}
}
//**DETERMINE WOUND HEAL AMOUNTS.**
int woundHeal = ceil(performance->getHealMindWound() * (woundHealingSkill / 100.0f));
int shockHeal = ceil(performance->getHealShockWound() * ((playerShockHealingSkill + buildingShockHealingSkill) / 100.0f));
//**ENTERTAINER HEALS THEIR OWN MIND.**
healWounds(creo, woundHeal*(flourishCount+1), shockHeal*(flourishCount+1));
//**APPLY EFFECTS TO PATRONS.**
if (patrons != NULL && patrons->size() > 0) {
for (int i = 0; i < patrons->size(); ++i) {
ManagedReference<CreatureObject*> patron = patrons->elementAt(i).getKey();
try {
//**VERIFY THE PATRON IS NOT ON THE DENY SERVICE LIST
if (creo->isInRange(patron, 10.0f)) {
healWounds(patron, woundHeal*(flourishCount+1), shockHeal*(flourishCount+1));
increaseEntertainerBuff(patron);
} else { //patron is not in range, force to stop listening
ManagedReference<PlayerManager*> playerManager = patron->getZoneServer()->getPlayerManager();
Locker locker(patron, entertainer.get());
if (dancing) {
if (playerManager != NULL)
playerManager->stopWatch(patron, creo->getObjectID(), true, false, false, true);
if (!patron->isListening())
sendEntertainmentUpdate(patron, 0, "", true);
} else if (playingMusic) {
if (playerManager != NULL)
playerManager->stopListen(patron, creo->getObjectID(), true, false, false, true);
if (!patron->isWatching())
sendEntertainmentUpdate(patron, 0, "", true);
}
}
//.........这里部分代码省略.........