void LightsaberCrystalComponentImplementation::generateCrystalStats() { ManagedReference<LootManager*> lootManager = getZoneServer()->getLootManager(); if (lootManager == NULL) return; CrystalData* crystalData = lootManager->getCrystalData(getObjectTemplate()->getTemplateFileName()); if (crystalData == NULL) { error("Unable to find crystal stats for " + getObjectTemplate()->getTemplateFileName()); return; } int minStat = crystalData->getMinHitpoints(); int maxStat = crystalData->getMaxHitpoints(); setMaxCondition(getRandomizedStat(minStat, maxStat, itemLevel)); if (color == 31) { int minStat = crystalData->getMinDamage(); int maxStat = crystalData->getMaxDamage(); damage = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinHealthSac(); maxStat = crystalData->getMaxHealthSac(); sacHealth = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinActionSac(); maxStat = crystalData->getMaxActionSac(); sacAction = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinMindSac(); maxStat = crystalData->getMaxMindSac(); sacMind = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinWoundChance(); maxStat = crystalData->getMaxWoundChance(); woundChance = getRandomizedStat(minStat, maxStat, itemLevel); float minFloatStat = crystalData->getMinForceCost(); float maxFloatStat = crystalData->getMaxForceCost(); floatForceCost = getRandomizedStat(minFloatStat, maxFloatStat, itemLevel); minFloatStat = crystalData->getMinAttackSpeed(); maxFloatStat = crystalData->getMaxAttackSpeed(); attackSpeed = Math::getPrecision(getRandomizedStat(minFloatStat, maxFloatStat, itemLevel), 2); } quality = getCrystalQuality(); }
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; } }
bool DroidObjectImplementation::isPowerDroid(){ if(getSpecies() == 0) return getObjectTemplate()->getFullTemplateString().contains( "eg_6_power_droid" ); else return POWER_DROID == getSpecies(); }
float InstallationObjectImplementation::getHitChance(){ SharedInstallationObjectTemplate* inso = dynamic_cast<SharedInstallationObjectTemplate*>(getObjectTemplate()); return inso->getChanceHit(); }
void InstallationObjectImplementation::createChildObjects(){ if( isTurret()) { SharedInstallationObjectTemplate* inso = dynamic_cast<SharedInstallationObjectTemplate*>(getObjectTemplate()); if(inso != NULL){ uint32 defaultWeaponCRC = inso->getWeapon().hashCode(); if(getZoneServer() != NULL) { Reference<WeaponObject*> defaultWeapon = (getZoneServer()->createObject(defaultWeaponCRC, 1)).castTo<WeaponObject*>(); if (defaultWeapon == NULL) { return; } else { if (!transferObject(defaultWeapon, 4)) { defaultWeapon->destroyObjectFromDatabase(true); return; } if(dataObjectComponent != NULL){ TurretDataComponent* turretData = cast<TurretDataComponent*>(dataObjectComponent.get()); if(turretData != NULL) { turretData->setWeapon(defaultWeapon); } } } } } } else if (isMinefield()){ this->setContainerDefaultAllowPermission(ContainerPermissions::MOVEIN); this->setContainerDefaultDenyPermission(ContainerPermissions::MOVEOUT); this->setContainerDefaultAllowPermission(ContainerPermissions::OPEN); } else { StructureObjectImplementation::createChildObjects(); } }
int EventPerkDeedImplementation::handleObjectMenuSelect(CreatureObject* player, byte selectedID) { if (selectedID == 20) { if (generated) { return 1; } Zone* zone = player->getZone(); if (zone == NULL) { return 1; } PlanetManager* planetManager = zone->getPlanetManager(); if (planetManager == NULL) { return 1; } EventPerkDeedTemplate* deedTemplate = cast<EventPerkDeedTemplate*>(getObjectTemplate()); if (deedTemplate == NULL) { return 1; } if (zone->getZoneName().contains("space_")) { player->sendSystemMessage("@event_perk:not_in_space"); // You may not deploy a Rental in space. Return to the ground first. return 1; } if (!deedTemplate->isAllowedZone(zone->getZoneName())) { player->sendSystemMessage("@event_perk:not_on_this_planet"); // You cannot deploy this rental on this planet. Examine the deed to determine the intended planet for this rental. return 1; } if (!isASubChildOf(player)) { player->sendSystemMessage("@event_perk:from_inventory_only"); // This rental must be in your inventory in order to be deployed. return 1; } if (player->getParent() != NULL) { player->sendSystemMessage("@event_perk:not_inside"); // You cannot deploy a Rental indoors. You must move outside. return 1; } if (player->isInCombat()) { player->sendSystemMessage("@event_perk:not_in_combat"); // You cannot deploy a Rental while in combat. return 1; } if (player->isSwimming()) { player->sendSystemMessage("@event_perk:not_while_swimming"); // You cannot deploy a Rental while swimming. return 1; } ManagedReference<CityRegion*> city = player->getCityRegion().get(); if (city != NULL) { if (city->isClientRegion()) { player->sendSystemMessage("@event_perk:not_in_municipal_zone"); // You may not place a Rental in a municipal zone. return 1; } if (city->isZoningEnabled() && !city->hasZoningRights(player->getObjectID())) { player->sendSystemMessage("@event_perk:no_zoning_rights"); // You must have zoning rights to place a Rental in this city. return 1; } } int x = player->getWorldPositionX(); int y = player->getWorldPositionY(); int nearbyPerks = 0; TerrainManager* terrainManager = planetManager->getTerrainManager(); if ( terrainManager == NULL || terrainManager->getHighestHeightDifference(x - 10, y - 10, x + 10, y + 10) > 15.0) { player->sendSystemMessage("@event_perk:bad_area"); // This rental could not be deployed due to the surrounding terrain. Please move to another area and try again. return 1; } SortedVector<ManagedReference<QuadTreeEntry* > >* closeObjects = player->getCloseObjects(); if (closeObjects == NULL) { error("Player has NULL closeObjectsVector in EventPerkDeedImplementation::handleObjectMenuSelect"); return 1; } for (int i = 0; i < closeObjects->size(); ++i) { SceneObject* obj = cast<SceneObject*>(closeObjects->get(i).get()); if (obj == NULL) { continue; } SharedObjectTemplate* objectTemplate = obj->getObjectTemplate(); if (objectTemplate == NULL) { continue; } float radius = objectTemplate->getNoBuildRadius(); if (obj->isLairObject() && player->isInRange(obj, radius)) { player->sendSystemMessage("@event_perk:too_close_lair"); // You cannot place a Rental this close to a lair. return 1; } if (obj->isCampStructure() && player->isInRange(obj, radius)) { player->sendSystemMessage("@event_perk:too_close_camp"); // You cannot place a Rental this close to a camp. return 1; } if (radius > 0 && player->isInRange(obj, radius)) { player->sendSystemMessage("@event_perk:too_close_something"); // You are too close to an object to deploy your Rental here. Move away from it. return 1; } if (objectTemplate->isSharedStructureObjectTemplate()) { if (StructureManager::instance()->isInStructureFootprint(cast<StructureObject*>(obj), x, y, 0)) { player->sendSystemMessage("@event_perk:too_close_building"); // You may not place a Rental this close to a building. return 1; } } if (obj->isEventPerk() && player->isInRange(obj, 32) && ++nearbyPerks > 2) { player->sendSystemMessage("@event_perk:too_many_perks"); // There are too many Rentals already deployed in this area. Please move to another location. return 1; } } SortedVector<ManagedReference<ActiveArea* > > activeAreas; zone->getInRangeActiveAreas(x, y, &activeAreas, true); for (int i = 0; i < activeAreas.size(); ++i) { ActiveArea* area = activeAreas.get(i); if (area->isNoBuildArea()) { player->sendSystemMessage("@event_perk:too_close_something"); // You are too close to an object to deploy your Rental here. Move away from it. return 1; } } if (planetManager->isInRangeWithPoi(x, y, 150)) { player->sendSystemMessage("@event_perk:too_close_something"); // You are too close to an object to deploy your Rental here. Move away from it. return 1; } if (perkType != EventPerkDeedTemplate::STATIC) { player->sendSystemMessage("This type of event perk deed is not functional yet."); return 1; } ManagedReference<TangibleObject*> object = generatedObject.get(); if (object == NULL) { object = (server->getZoneServer()->createObject(generatedObjectTemplate.hashCode(), "playerstructures", 1)).castTo<TangibleObject*>(); if (object == NULL) { player->sendSystemMessage("Error generating object. Wrong generatedObjectTemplate or is not a tangible object."); return 1; } generatedObject = object; } EventPerkDataComponent* data = cast<EventPerkDataComponent*>(object->getDataObjectComponent()->get()); if (data == NULL) { player->sendSystemMessage("Error: no dataObjectComponent."); object->destroyObjectFromDatabase(); return 1; } data->setDeed(_this.get()); object->initializePosition(player->getPositionX(), player->getPositionZ(), player->getPositionY()); object->setDirection(Math::deg2rad(player->getDirectionAngle())); zone->transferObject(object, -1, true); generated = true; destroyObjectFromWorld(true); return 0; } return DeedImplementation::handleObjectMenuSelect(player, selectedID); }
void LightsaberCrystalComponentImplementation::validateCrystalStats() { ManagedReference<LootManager*> lootManager = getZoneServer()->getLootManager(); if (lootManager == NULL) return; CrystalData* crystalData = lootManager->getCrystalData(getObjectTemplate()->getTemplateFileName()); if (crystalData == NULL) { error("Unable to find crystal stats for " + getObjectTemplate()->getTemplateFileName()); return; } int minStat = crystalData->getMinHitpoints(); int maxStat = crystalData->getMaxHitpoints(); if (getMaxCondition() > maxStat || getMaxCondition() < minStat) setMaxCondition(getRandomizedStat(minStat, maxStat, itemLevel)); if (color == 31) { minStat = crystalData->getMinDamage(); maxStat = crystalData->getMaxDamage(); if (damage > maxStat || damage < minStat) damage = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinHealthSac(); maxStat = crystalData->getMaxHealthSac(); if (sacHealth > maxStat || sacHealth < minStat) sacHealth = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinActionSac(); maxStat = crystalData->getMaxActionSac(); if (sacAction > maxStat || sacAction < minStat) sacAction = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinMindSac(); maxStat = crystalData->getMaxMindSac(); if (sacMind > maxStat || sacMind < minStat) sacMind = getRandomizedStat(minStat, maxStat, itemLevel); minStat = crystalData->getMinWoundChance(); maxStat = crystalData->getMaxWoundChance(); if (woundChance > maxStat || woundChance < minStat) woundChance = getRandomizedStat(minStat, maxStat, itemLevel); float minFloatStat = crystalData->getMinForceCost(); float maxFloatStat = crystalData->getMaxForceCost(); if (floatForceCost > maxFloatStat || floatForceCost < minFloatStat) floatForceCost = getRandomizedStat(minFloatStat, maxFloatStat, itemLevel); minFloatStat = crystalData->getMinAttackSpeed(); maxFloatStat = crystalData->getMaxAttackSpeed(); if (attackSpeed > maxFloatStat || attackSpeed < minFloatStat) attackSpeed = Math::getPrecision(getRandomizedStat(minFloatStat, maxFloatStat, itemLevel), 2); } }