コード例 #1
0
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());
			}
	});