void CityRegionImplementation::applySpecializationModifiers(CreatureObject* creature) { if (getZone() == NULL) return; CityManager* cityManager = getZone()->getZoneServer()->getCityManager(); CitySpecialization* cityspec = cityManager->getCitySpecialization(citySpecialization); if (cityspec == NULL) return; if (isBanned(creature->getObjectID())) { return; } Reference<CreatureObject*> creatureReference = creature; Reference<CityRegion*> city = _this.getReferenceUnsafeStaticCast(); typedef VectorMap<String, int> SkillMods; typedef VectorMapEntry<String, int> SkillModsEntry; EXECUTE_ORDERED_TASK_3(creature, creatureReference, cityspec, city, { Locker locker(creatureReference_p); //Remove all current city skillmods creatureReference_p->removeAllSkillModsOfType(SkillModManager::CITY); SkillMods* mods = cityspec_p->getSkillMods(); for (int i = 0; i < mods->size(); ++i) { SkillModsEntry& entry = mods->elementAt(i); if (entry.getKey() == "private_defense" && !city_p->isMilitiaMember(creatureReference_p->getObjectID())) continue; creatureReference_p->addSkillMod(SkillModManager::CITY, entry.getKey(), entry.getValue()); } });