Esempio n. 1
0
 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)
Esempio n. 2
0
 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
Esempio n. 3
0
    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)
Esempio n. 4
0
    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
Esempio n. 5
0
 def GMUpdateControl(self, newOwnerID):
     baseManager = moniker.GetPlanetBaseManager(self.planetUISvc.planetID)
     baseManager.GMOwnershipChange(newOwnerID)
Esempio n. 6
0
 def UpdatePlanetControl(self):
     baseManager = moniker.GetPlanetBaseManager(self.planetUISvc.planetID)
     baseManager.TriggerOwnershipChange()