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')
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')
def ReturnAndOrbit(droneIDs): entity = moniker.GetEntityAccess() if entity: ret = entity.CmdReturnHome(droneIDs) HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
def Salvage(droneIDs): targetID = sm.GetService('target').GetActiveTargetID() entity = moniker.GetEntityAccess() if entity: ret = entity.CmdSalvage(droneIDs, targetID) HandleMultipleCallError(droneIDs, ret, 'MultiDroneCmdResult')
def GetEntityAccess(self): return moniker.GetEntityAccess()