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(); } }
void InstallationObjectImplementation::fillAttributeList(AttributeListMessage* alm, CreatureObject* object) { //TangibleObjectImplementation::fillAttributeList(alm, object); if (isOnAdminList(object)) { //Add the owner name to the examine window. ManagedReference<SceneObject*> obj = object->getZoneServer()->getObject(ownerObjectID); if(obj != NULL) { alm->insertAttribute("owner", obj->getDisplayedName()); } } if(isTurret() && dataObjectComponent != NULL){ TurretDataComponent* turretData = cast<TurretDataComponent*>(dataObjectComponent.get()); if(turretData == NULL) return; turretData->fillAttributeList(alm); } }
void WraithManagerExt::executeMicro(const UnitVector & targets) { const UnitVector & selectedUnits = getUnits(); _noTurretTargetsNo = 0; // figure out targets UnitVector selectedUnitTargets; for (size_t i(0); i<targets.size(); i++) { // conditions for targeting if (targets[i]->isVisible()) { selectedUnitTargets.push_back(targets[i]); if (!isTurret(targets[i])) { _noTurretTargetsNo++; } } } setAverageEnemyPosition(selectedUnitTargets); // For each unit BOOST_FOREACH(BWAPI::Unit * selectedUnit, selectedUnits) { // Adjust cloak to the situation manageCloak(selectedUnit, selectedUnitTargets); // if the order is to attack or defend if (order.type == order.Attack || order.type == order.Defend) { // if there are targets if (!selectedUnitTargets.empty()) { // find the best target for this unit BWAPI::Unit * target = getTarget(selectedUnit, selectedUnitTargets); // attack it kiteTarget(selectedUnit, target); } // if there are no targets else { // if we're not near the order position if (selectedUnit->getDistance(order.position) > 100) { // move to it // Border movement BWAPI::Position movePosition; if (order.type == SquadOrder::Attack && (StrategyManager::Instance().getCurrentStrategy() == StrategyManager::Instance().TerranWraithRush1Port)) { movePosition = UnitManagerExt::Instance().getMovePosition(selectedUnit); } else { movePosition = order.position; } // eof Border movement if (!movePosition.isValid()) { movePosition.makeValid(); } smartAttackMove(selectedUnit, movePosition); } } } if (Options::Debug::DRAW_UALBERTABOT_DEBUG) { BWAPI::Broodwar->drawLineMap(selectedUnit->getPosition().x(), selectedUnit->getPosition().y(), selectedUnit->getTargetPosition().x(), selectedUnit->getTargetPosition().y(), Options::Debug::COLOR_LINE_TARGET); } }
/// Returns target attack priority. /// Returned value must be greater than 0 int BattlecruiserManagerExt::getAttackPriority(BWAPI::Unit * selectedUnit, BWAPI::Unit * target) { BWAPI::UnitType selectedUnitType = selectedUnit->getType(); BWAPI::UnitType targetType = target->getType(); bool canAttackUs = targetType.airWeapon() != BWAPI::WeaponTypes::None; int selectedUnitWeaponRange = selectedUnitType.groundWeapon().maxRange(); // 160, Concussive int targetWeaponRange = targetType.groundWeapon().maxRange(); // Detectors are top priority but Photon Cannons are too strong if (targetType == BWAPI::UnitTypes::Protoss_Carrier) { useYamatoGun(selectedUnit, target); return 99; } else if (targetType.isDetector() && targetType != BWAPI::UnitTypes::Protoss_Photon_Cannon) { useYamatoGun(selectedUnit, target); return 100; } // Larvas are low priority targets else if (targetType == BWAPI::UnitTypes::Zerg_Larva || targetType == BWAPI::UnitTypes::Protoss_Interceptor) { return 1; } else if (targetType == BWAPI::UnitTypes::Protoss_Pylon) { return 3; } else if ((targetType.isBuilding()) && !(targetType.canAttack())) { return 2; } // Workers are priority over ground units and buildings else if (targetType.isWorker()) { return 4; } else if (isTurret(target)) { // Attack tower if in its weapon range // Otherwise attack something else if (target->isInWeaponRange(selectedUnit)) { return 5; } else { return 1; } } // Anti air units are top priority else if (canAttackUs) { return selectedUnitWeaponRange + 10; } else { return 1; } }