Ejemplo n.º 1
0
    def doRecall(self, *dronesToRecall):
        if self.disabled:
            return

        dronesToRecall = list(dronesToRecall)
        timestamp = blue.os.GetTime(1)

        for droneID in list(dronesToRecall):
            droneObj = self.getDroneObject(droneID)
            if ((droneObj.state == const.entityDeparting)
                    or (droneObj.state == const.entityDeparting2)
                    or (droneObj.state == const.entityPursuit)
                    or (droneObj.state == const.entityFleeing)
                    or abs(droneObj.actionTimestamp - timestamp) <=
                    ActionThreshold):
                dronesToRecall.remove(droneID)

        if len(dronesToRecall):
            entity = moniker.GetEntityAccess()
            if entity:
                log("Drone(s) returning: %s",
                    ", ".join(getNamesOfIDs(dronesToRecall)))
                entity.CmdReturnBay(dronesToRecall)
                for droneID in dronesToRecall:
                    droneObj = self.getDroneObject(droneID)
                    droneObj.setState(const.entityDeparting, timestamp)
                    droneObj.actionTimestamp = timestamp
                    self.__recalling.add(droneObj.id)
def EngageTarget(droneIDs):
    michelle = sm.StartService('michelle')
    dronesRemoved = []
    for droneID in droneIDs:
        item = michelle.GetItem(droneID)
        if not item:
            dronesRemoved.append(droneID)

    for droneID in dronesRemoved:
        droneIDs.remove(droneID)

    targetID = sm.GetService('target').GetActiveTargetID()
    if targetID is None:
        raise UserError('DroneCommandRequiresActiveTarget')
    crimewatchSvc = sm.GetService('crimewatchSvc')
    requiredSafetyLevel = crimewatchSvc.GetRequiredSafetyLevelForEngagingDrones(
        droneIDs, targetID)
    if crimewatchSvc.CheckUnsafe(requiredSafetyLevel):
        crimewatchSvc.SafetyActivated(requiredSafetyLevel)
        return
    entity = moniker.GetEntityAccess()
    if entity:
        ret = entity.CmdEngage(droneIDs, targetID)
        HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
        if droneIDs:
            name = sm.GetService('space').GetWarpDestinationName(targetID)
            eve.Message(
                'CustomNotify', {
                    'notify':
                    localization.GetByLabel('UI/Inflight/DronesEngaging',
                                            name=name)
                })
def DroneUnanchor(droneIDs):
    targetID = sm.StartService('target').GetActiveTargetID()
    if targetID is None:
        raise UserError('DroneCommandRequiresActiveTarget')
    entity = moniker.GetEntityAccess()
    if entity:
        ret = entity.CmdUnanchor(droneIDs, targetID)
        HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
def AbandonDrone(droneIDs):
    if eve.Message('ConfirmAbandonDrone', {},
                   uiconst.YESNO,
                   suppress=uiconst.ID_YES) != uiconst.ID_YES:
        return
    entity = moniker.GetEntityAccess()
    if entity:
        ret = entity.CmdAbandonDrone(droneIDs)
        HandleMultipleCallError(droneIDs, ret, 'MultDroneCmdResult')
def _ReconnectToDroneCandidates(droneCandidates):
    if not droneCandidates:
        return
    entity = moniker.GetEntityAccess()
    if entity:

        def SpewError(*args):
            raise UserError(*args)

        ret = entity.CmdReconnectToDrones(droneCandidates)
        for errStr, dicty in ret.iteritems():
            uthread.new(SpewError, errStr, dicty)
            blue.pyos.synchro.Sleep(5000)
def ReturnControl(droneIDs):
    michelle = sm.StartService('michelle')
    dronesByOwner = {}
    for droneID in droneIDs:
        ownerID = michelle.GetDroneState(droneID).ownerID
        if ownerID in dronesByOwner:
            dronesByOwner[ownerID].append(droneID)
        else:
            dronesByOwner[ownerID] = [droneID]

    entity = moniker.GetEntityAccess()
    if entity:
        for ownerID, IDs in dronesByOwner.iteritems():
            ret = entity.CmdRelinquishControl(IDs)
            HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
def DelegateControl(charID, droneIDs):
    if charID is None:
        targetID = sm.StartService('target').GetActiveTargetID()
        if targetID is None:
            raise UserError('DroneCommandRequiresActiveTarget')
        michelle = sm.StartService('michelle')
        targetItem = michelle.GetItem(targetID)
        if targetItem.categoryID != const.categoryShip or targetItem.groupID == const.groupCapsule:
            raise UserError('DroneCommandRequiresShipButNotCapsule')
        targetBall = michelle.GetBall(targetID)
        if not targetBall.isInteractive or not sm.GetService('fleet').IsMember(
                targetItem.ownerID):
            raise UserError('DroneCommandRequiresShipPilotedFleetMember')
        controllerID = targetItem.ownerID
    else:
        controllerID = charID
    entity = moniker.GetEntityAccess()
    if entity:
        ret = entity.CmdDelegateControl(droneIDs, controllerID)
        HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
Ejemplo n.º 8
0
    def doAttack(self,
                 idleOnly,
                 targetID=None,
                 dronesToAttack=[],
                 oldTarget=None):
        if self.disabled:
            return

        ballpark = eve.LocalSvc("michelle").GetBallpark()
        timestamp = blue.os.GetTime(1)
        isCommonTarget = False
        if not targetID:
            targetID = self.getCommonTarget()
            if targetID:
                slimItem = ballpark.GetInvItem(targetID)
                if slimItem:
                    targetName = uix.GetSlimItemName(slimItem)
                    isCommonTarget = True

        if not targetID:
            targetID = self.selectTarget()

        if targetID:
            slimItem = ballpark.GetInvItem(targetID)
            if slimItem:
                targetName = uix.GetSlimItemName(slimItem)
            else:
                targetName = "Unknown"

            drones = list(self.getDronesInLocalSpace().keys())
            for id in dronesToAttack:
                if id not in drones:
                    drones.append(id)

            for id in list(drones):
                droneObj = self.getDroneObject(id)
                if ((droneObj.state == const.entityDeparting)
                        or (droneObj.state == const.entityDeparting2)
                        or (droneObj.state == const.entityFleeing)
                        or (droneObj.state == const.entityPursuit)):
                    drones.remove(id)
                elif ((droneObj.target == targetID)
                      or abs(droneObj.actionTimestamp - timestamp) <=
                      ActionThreshold):
                    drones.remove(id)
                elif (idleOnly and (droneObj.state != const.entityIdle)):
                    drones.remove(id)

            if len(drones):
                if ((len(drones) > 1) or (not self.__lastAttackOrder)):
                    self.__lastAttackOrder = targetID

                entity = moniker.GetEntityAccess()
                if entity:
                    if isCommonTarget:
                        targetName += " (existing target)"

                    oldTargetName = None
                    if oldTarget:
                        slimItem = ballpark.GetInvItem(oldTarget)
                        oldTargetName = uix.GetSlimItemName(slimItem)

                    if oldTargetName:
                        log("%s changing target from %s to %s",
                            ", ".join(getNamesOfIDs(drones)), oldTargetName,
                            targetName)
                    else:
                        log("%s attacking %s",
                            ", ".join(getNamesOfIDs(drones)), targetName)

                    for id in drones:
                        droneObj = self.getDroneObject(id)
                        droneObj.setTarget(targetID, timestamp)
                        droneObj.actionTimestamp = timestamp
                    ret = entity.CmdEngage(drones, targetID)
def ReturnToDroneBay(droneIDs):
    entity = moniker.GetEntityAccess()
    if entity:
        ret = entity.CmdReturnBay(droneIDs)
        HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
Ejemplo n.º 10
0
def ReturnAndOrbit(droneIDs):
    entity = moniker.GetEntityAccess()
    if entity:
        ret = entity.CmdReturnHome(droneIDs)
        HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
Ejemplo n.º 11
0
def Salvage(droneIDs):
    targetID = sm.GetService('target').GetActiveTargetID()
    entity = moniker.GetEntityAccess()
    if entity:
        ret = entity.CmdSalvage(droneIDs, targetID)
        HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
Ejemplo n.º 12
0
 def GetEntityAccess(self):
     return moniker.GetEntityAccess()