def AttackPlanetBase(self, planetID, itemID): planetBaseManager = moniker.GetPlanetBaseManager(planetID) battle = planetBaseManager.AttackBase(itemID) if planetID in self.dustPinCache: for baseItem, customInfo in self.dustPinCache[planetID].pins: if baseItem.itemID == itemID: customInfo.conflicts.append(battle)
def GetPlanetBases(self, planetID): if planetID in self.dustPinCache and self.dustPinCache[ planetID].timestamp + DUST_PIN_CACHE_TIMEOUT < blue.os.GetWallclockTime( ): del self.dustPinCache[planetID] if planetID not in self.dustPinCache: planetBaseManager = moniker.GetPlanetBaseManager(planetID) bases = planetBaseManager.GetCapsuleerBases() self.dustPinCache[planetID] = PlanetData( timestamp=blue.os.GetWallclockTime(), pins=bases) return self.dustPinCache[planetID].pins
def RemovePlanetBase(self, planetID, itemID): existingBases = self.GetPlanetBases(planetID) baseExists = False for base, customInfo in existingBases: if itemID == base.itemID: baseExists = True break if not baseExists: raise UserError('CannotRemoveDustPinNotPresent') planetBaseManager = moniker.GetPlanetBaseManager(planetID) try: planetBaseManager.RemoveCapsuleerBase(itemID) finally: self._InvalidateCache(planetID)
def AddPlanetBase(self, planetID, typeID, surfacePoint): validPlanetTypes = planetSurfaceCommon.GetValidPlanetTypesForPinType( typeID) planetData = sm.GetService('map').GetPlanetInfo(planetID) if planetData is None: raise RuntimeError('Invalid planetID, unable to get map data') if validPlanetTypes is not None and planetData.typeID not in validPlanetTypes: raise UserError('CannotPlacePinInvalidPlanetType') if session.solarsystemid and session.solarsystemid == planetData.solarSystemID: orbitals = sm.GetService('planetInfo').GetOrbitalsForPlanet( planetID, const.groupPlanetaryCustomsOffices) ballpark = sm.GetService('michelle').GetBallpark() orbitalsByType = defaultdict(list) for orbitalID in orbitals: orbitalSlimItem = ballpark.GetInvItem(orbitalID) if orbitalSlimItem is None: self.LogWarn('AddPlanetBase::Unable to find slimItem for', orbitalID) continue orbitalsByType[orbitalSlimItem.typeID].append(orbitalSlimItem) orbitalPrerequisite = planetSurfaceCommon.GetOrbitalConstructionPrerequisites( typeID) for prerequisiteTypeID in orbitalPrerequisite: if prerequisiteTypeID not in orbitalsByType: raise UserError( 'CannotCreateBaseMissingPrerequisite', { 'pinType': (const.UE_TYPEID, typeID), 'missingTypeName': (const.UE_TYPEID, prerequisiteTypeID) }) else: for orbitalItem in orbitalsByType[prerequisiteTypeID]: if orbitalItem.ownerID == session.corpid: break else: raise UserError( 'CannotCreateBaseMissingPrerequisite', { 'pinType': (const.UE_TYPEID, typeID), 'missingTypeName': (const.UE_TYPEID, prerequisiteTypeID) }) existingBases = self.GetPlanetBases(planetID) basesByType = defaultdict(int) for base, customInfo in existingBases: basesByType[base.typeID] += 1 maxInstances = planetSurfaceCommon.GetMaximumPinInstances(typeID) if basesByType[typeID] >= maxInstances: raise UserError('CannotPlacePinMaximumInstancesReached', { 'typeName': evetypes.GetName(typeID), 'maxInstances': maxInstances }) for requiredTypeID in planetSurfaceCommon.GetSurfaceConstructionPrerequisites( typeID): if requiredTypeID not in basesByType: raise UserError( 'CannotCreateBaseMissingPrerequisite', { 'pinType': evetypes.GetName(typeID), 'missingTypeName': evetypes.GetName(requiredTypeID) }) planetBaseManager = moniker.GetPlanetBaseManager(planetID) try: pinItem = planetBaseManager.AddCapsuleerBase( typeID, surfacePoint.phi, surfacePoint.theta) except UserError as e: self._InvalidateCache(planetID) raise e existingBases.append((pinItem, util.KeyVal(latitude=surfacePoint.phi, longitude=surfacePoint.theta, conflicts=[]))) return pinItem
def GMUpdateControl(self, newOwnerID): baseManager = moniker.GetPlanetBaseManager(self.planetUISvc.planetID) baseManager.GMOwnershipChange(newOwnerID)
def UpdatePlanetControl(self): baseManager = moniker.GetPlanetBaseManager(self.planetUISvc.planetID) baseManager.TriggerOwnershipChange()