CreatureObject* ThreatMap::getHighestThreatCreature() { Locker locker(&lockMutex); ManagedReference<CreatureObject*> currentThreat = this->currentThreat.get(); if(currentThreat != NULL && !currentThreat->isDead() && !currentThreat->isIncapacitated() && !currentThreat->isDestroyed() && !cooldownTimerMap.isPast("doEvaluation")) return currentThreat; threatMatrix.clear(); for (int i = 0; i < size(); ++i) { ThreatMapEntry* entry = &elementAt(i).getValue(); CreatureObject* creature = elementAt(i).getKey(); ManagedReference<CreatureObject*> selfStrong = cast<CreatureObject*>(self.get().get()); if (!creature->isDead() && !creature->isIncapacitated() && creature->isInRange(selfStrong, 128.f) && creature->isAttackableBy(selfStrong)) threatMatrix.add(creature, entry); } this->currentThreat = threatMatrix.getLargestThreat(); cooldownTimerMap.updateToCurrentAndAddMili("doEvaluation", ThreatMap::EVALUATIONCOOLDOWN); return this->currentThreat.get().get(); }
float GroupObjectImplementation::getGroupHarvestModifier(CreatureObject* player) { String skillNovice = "outdoors_ranger_novice"; String skillMaster = "outdoors_ranger_master"; float modifier = 1.2f; for(int i = 0; i < groupMembers.size(); ++i) { Reference<SceneObject*> scno = getGroupMember(i); if(scno->isPlayerCreature()) { CreatureObject* groupMember = cast<CreatureObject*>( scno.get()); if(groupMember == player) continue; if(groupMember->hasSkill(skillNovice)) { if(groupMember->isInRange(player, 64.0f)) { if(groupMember->hasSkill(skillMaster)) { modifier = 1.4f; break; } modifier = 1.3f; } } } } return modifier; }
void ChatManagerImplementation::handleSocialInternalMessage(CreatureObject* sender, const UnicodeString& arguments) { if (sender->isPlayerCreature()) { ManagedReference<PlayerObject*> senderGhost = sender->getPlayerObject(); if (senderGhost == NULL) return; if (senderGhost->isMuted()) { String reason = senderGhost->getMutedReason(); if (reason != "") sender->sendSystemMessage("Your chat abilities are currently disabled by Customer Support for '" + reason + "'."); else sender->sendSystemMessage("Your chat abilities are currently disabled by Customer Support."); return; } } Zone* zone = sender->getZone(); if (zone == NULL) return; StringTokenizer tokenizer(arguments.toString()); uint64 targetid; uint32 emoteid, unkint, unkint2; try { targetid = tokenizer.getLongToken(); emoteid = tokenizer.getIntToken(); unkint = tokenizer.getIntToken(); unkint2 = tokenizer.getIntToken(); } catch (const Exception& e) { return; } //bool readlock = !zone->isLockedByCurrentThread(); bool showtext = true; if (unkint2 == 0) showtext = false; String firstName; if (sender->isPlayerCreature()) firstName = (cast<CreatureObject*>(sender))->getFirstName().toLowerCase(); CloseObjectsVector* vec = (CloseObjectsVector*) sender->getCloseObjects(); SortedVector<QuadTreeEntry* > closeEntryObjects(200, 50); if (vec != NULL) { vec->safeCopyTo(closeEntryObjects); } else { sender->info("Null closeobjects vector in ChatManager::handleSocialInternalMessage", true); zone->getInRangeObjects(sender->getWorldPositionX(), sender->getWorldPositionX(), 128, &closeEntryObjects, true); } float range = defaultSpatialChatDistance; for (int i = 0; i < closeEntryObjects.size(); ++i) { SceneObject* object = cast<SceneObject*>(closeEntryObjects.get(i)); if (object->isPlayerCreature()) { CreatureObject* creature = cast<CreatureObject*>(object); Reference<PlayerObject*> ghost = creature->getSlottedObject("ghost").castTo<PlayerObject*>(); if (ghost == NULL) continue; if (!ghost->isIgnoring(firstName) && creature->isInRange(sender, range)) { Emote* emsg = new Emote(creature, sender, targetid, emoteid, showtext); creature->sendMessage(emsg); } } } }