Exemple #1
0
    def filterTargets(self, ids, chanceToHitGetter):
        ballpark = eve.LocalSvc("michelle").GetBallpark()
        result = []

        cannotHit = set()
        minChanceToHit = float(getPref("MinimumChanceToHit", 1)) / 100.0

        for id in ids:
            invItem = ballpark.GetInvItem(id)
            if not invItem:
                continue

            flag = getFlagName(id)
            if (flag != "HostileNPC") and (flag is not None):
                continue

            if getPriority(id) < 0:
                continue

            if chanceToHitGetter(id) < minChanceToHit:
                cannotHit.add(id)
                continue

            result.append(id)

        if (len(cannotHit) > 0) and (len(result) == 0):
            log("Cannot hit target(s) %s", ", ".join(getNamesOfIDs(cannotHit)))

        return result
def deactivateModule(module, actionThreshold=ActionThreshold):
    import blue
    import base
    import uix

    moduleInfo = module.sr.moduleInfo
    moduleName = cfg.invtypes.Get(moduleInfo.typeID).name

    canDeactivate = canDeactivateModule(module)
    if not canDeactivate[0]:
        return canDeactivate

    def_effect = getattr(module, "def_effect", None)

    timestamp = blue.os.GetTime(1)
    lastAction = int(getattr(module, "__last_action__", 0))
    if (ActionThreshold is not None
            and abs(lastAction - timestamp) <= ActionThreshold):
        return (False, "too soon to deactivate (lag protection)")

    setattr(module, "__last_action__", timestamp)

    try:
        module.DeactivateEffect(effect=def_effect)
        return (True, None)
    except Exception, e:
        log("Deactivating module %s failed: %r", moduleName, e)
        return (False, "error")
def forceStart(serviceName, serviceType):
    global runningServices

    import stackless
    import service
    old_block_trap = stackless.getcurrent().block_trap
    stackless.getcurrent().block_trap = 1
    try:
        oldInstance = runningServices.get(serviceName, None)
        if oldInstance:
            forceStop(serviceName)

        result = serviceType()
        setattr(result, "state", service.SERVICE_RUNNING)
        result = makeServiceThunk(result)
        runningServices[serviceName] = result

        ne = getattr(result, "__notifyevents__", [])
        if len(ne):
            for evt in ne:
                if (not hasattr(result, evt)):
                    log("Missing event handler for %r on %r", evt, result)
                else:
                    nl = sm.notify.setdefault(evt, list())
                    nl.append(result)

        return result
    finally:
        stackless.getcurrent().block_trap = old_block_trap
Exemple #4
0
    def findRepairModule(self, repairType):
        groupName = RepairTypes.get(repairType, {}).get("groupName", None)
        if not groupName:
            log("Invalid repair module type: %r", repairType)
            return None

        return findModule(groupNames=[groupName])
 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 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 forceStart(serviceName, serviceType):
    global runningServices
    
    import stackless
    import service
    old_block_trap = stackless.getcurrent().block_trap
    stackless.getcurrent().block_trap = 1
    try:
        oldInstance = runningServices.get(serviceName, None)
        if oldInstance:
            forceStop(serviceName)
        
        result = serviceType()
        setattr(result, "state", service.SERVICE_RUNNING)
        result = makeServiceThunk(result)
        runningServices[serviceName] = result
        
        ne = getattr(result, "__notifyevents__", [])
        if len(ne):
            for evt in ne:
                if (not hasattr(result, evt)):
                    log("Missing event handler for %r on %r", evt, result)
                else:
                    nl = sm.notify.setdefault(evt, list())
                    nl.append(result)
        
        return result
    finally:
        stackless.getcurrent().block_trap = old_block_trap
 def filterTargets(self, ids, chanceToHitGetter):
     ballpark = eve.LocalSvc("michelle").GetBallpark()
     result = []
     
     cannotHit = set()
     minChanceToHit = float(getPref("MinimumChanceToHit", 1)) / 100.0
     
     for id in ids:
         invItem = ballpark.GetInvItem(id)
         if not invItem:
             continue
             
         flag = getFlagName(id)
         if (flag != "HostileNPC") and (flag is not None):
             continue
         
         if getPriority(id) < 0:
             continue
         
         if chanceToHitGetter(id) < minChanceToHit:
             cannotHit.add(id)
             continue
             
         result.append(id)
     
     if (len(cannotHit) > 0) and (len(result) == 0):
         log("Cannot hit target(s) %s", ", ".join(getNamesOfIDs(cannotHit)))
     
     return result
def deactivateModule(module, actionThreshold=ActionThreshold):
    import blue
    import base
    import uix
        
    moduleInfo = module.sr.moduleInfo
    moduleName = cfg.invtypes.Get(moduleInfo.typeID).name
    
    canDeactivate = canDeactivateModule(module)
    if not canDeactivate[0]:
        return canDeactivate
    
    def_effect = getattr(module, "def_effect", None)
    
    timestamp = blue.os.GetTime(1)
    lastAction = int(getattr(module, "__last_action__", 0))
    if (ActionThreshold is not None and 
        abs(lastAction - timestamp) <= ActionThreshold):
        return (False, "too soon to deactivate (lag protection)")
    
    setattr(module, "__last_action__", timestamp)
            
    try:
        module.DeactivateEffect(effect=def_effect)
        return (True, None)
    except Exception, e:
        log("Deactivating module %s failed: %r", moduleName, e)
        return (False, "error")
 def findRepairModule(self, repairType):
     groupName = RepairTypes.get(repairType, {}).get("groupName", None)
     if not groupName:
         log("Invalid repair module type: %r", repairType)
         return None
     
     return findModule(groupNames=[groupName])
def initialScan():
    # enumerate planets!
    main = __import__("__main__")
    ballpark = sm.GetService("michelle").GetBallpark(doWait=True)
    if ballpark is None:
        log("Can't play ball without a ballpark!")
        return
    else:
        ball = ballpark.GetBall(eve.session.shipid)
        mypos = [ball.x, ball.y, ball.z]
        plocs = []
        planetlocs = []
        itpos = [0, 0, 0, 0]
        for itemID in ballpark.balls.keys():
            if ballpark is None:
                log("Ballpark disappeared while playing with balls!")
                break
            if itemID == eve.session.shipid:
                pass
            else:
                slimItem = ballpark.GetInvItem(itemID)
                ball = ballpark.GetBall(itemID)
                if not (ball and slimItem):
                    pass
                else:
                    blue.pyos.BeNice(100)
                    name = uix.GetSlimItemName(slimItem) or "Some object"

                    if slimItem.groupID == 7:
                        dst = sqrt(
                            pow(ball.x, 2) + pow(ball.y, 2) + pow(ball.z, 2))
                        itpos = [ball.x, ball.y, ball.z, dst]
                        plocs.append(itpos)
                        #log("item: %s - %s - %s", name, itemID, dst)

    maxprobes = getMaxProbes()
    offset = [50000000000.0, 0.0, 0.0, 0.0]
    planetlocs = sorted(plocs, key=lambda plocs: plocs[3], reverse=True)
    planetlocs.insert(0, offset)
    main.plocs = planetlocs
    main.plen = len(planetlocs)

    probeData = sm.GetService("scanSvc").GetProbeData()
    if probeData == {}:
        return

    i = 0

    for key in probeData:
        sm.GetService("scanSvc").SetProbeDestination(key, [
            planetlocs[i][0] + offset[0], planetlocs[i][1] + offset[1],
            planetlocs[i][2] + offset[2]
        ])
        sm.GetService("scanSvc").SetProbeRangeStep(key, 8)
        i = i + 1
        if (i >= len(planetlocs)):
            break

    sm.services.get('window', None).GetWindow('scanner').UpdateProbeSpheres()
def initialScan():
    # enumerate planets!
    main = __import__("__main__")
    ballpark = sm.GetService("michelle").GetBallpark(doWait=True)
    if ballpark is None:
        log("Can't play ball without a ballpark!")
        return
    else:
        ball = ballpark.GetBall(eve.session.shipid)
        mypos = [ball.x, ball.y, ball.z]
        plocs = []
        planetlocs = []
        itpos = [0, 0, 0, 0]
        for itemID in ballpark.balls.keys():
            if ballpark is None:
                log("Ballpark disappeared while playing with balls!")
                break
            if itemID == eve.session.shipid:
                pass
            else:
                slimItem = ballpark.GetInvItem(itemID)
                ball = ballpark.GetBall(itemID)
                if not (ball and slimItem):
                    pass
                else:
                    blue.pyos.BeNice(100)
                    name = uix.GetSlimItemName(slimItem) or "Some object"

                    if slimItem.groupID == 7:
                        dst = sqrt(pow(ball.x, 2) + pow(ball.y, 2) + pow(ball.z, 2))
                        itpos = [ball.x, ball.y, ball.z, dst]
                        plocs.append(itpos)
                        # log("item: %s - %s - %s", name, itemID, dst)

    maxprobes = getMaxProbes()
    offset = [50000000000.0, 0.0, 0.0, 0.0]
    planetlocs = sorted(plocs, key=lambda plocs: plocs[3], reverse=True)
    planetlocs.insert(0, offset)
    main.plocs = planetlocs
    main.plen = len(planetlocs)

    probeData = sm.GetService("scanSvc").GetProbeData()
    if probeData == {}:
        return

    i = 0

    for key in probeData:
        sm.GetService("scanSvc").SetProbeDestination(
            key, [planetlocs[i][0] + offset[0], planetlocs[i][1] + offset[1], planetlocs[i][2] + offset[2]]
        )
        sm.GetService("scanSvc").SetProbeRangeStep(key, 8)
        i = i + 1
        if i >= len(planetlocs):
            break

    sm.services.get("window", None).GetWindow("scanner").UpdateProbeSpheres()
def _MonikeredCall(self, call, sess):
    global oldMonikeredCall
    methodName, args, kwargs = call
    
    if methodName == "WarpToStuffAutopilot":
        methodName = "WarpToStuff"
        args = ('item', args[0])
        kwargs = {'minRange': 0}
        log("Intercepting autopilot warp attempt")
        return oldMonikeredCall(self, (methodName, args, kwargs), sess)
    else:
        return oldMonikeredCall(self, call, sess)
Exemple #14
0
def _MonikeredCall(self, call, sess):
    global oldMonikeredCall
    methodName, args, kwargs = call

    if methodName == "WarpToStuffAutopilot":
        methodName = "WarpToStuff"
        args = ('item', args[0])
        kwargs = {'throttleCalls': True, 'minRange': 0}
        log("Intercepting autopilot warp attempt")
        return oldMonikeredCall(self, (methodName, args, kwargs), sess)
    else:
        return oldMonikeredCall(self, call, sess)
 def doLaunch(self, *dronesToLaunch):
     if self.disabled:
         return
     
     dronesToLaunch = list(dronesToLaunch)
     timestamp = blue.os.GetTime(1)
     
     #if (timestamp - self.__lastLaunchTimestamp) < ActionThreshold:
     #    return
 
     dronesInBay = self.getDronesInBay()        
     droneObjs = [dronesInBay[id] for id in dronesToLaunch if dronesInBay.has_key(id)]
     
     log("Launching %d drone(s)", len(droneObjs))
     self.__lastLaunchTimestamp = timestamp
     sm.services["menu"].LaunchDrones(droneObjs)
    def doLaunch(self, *dronesToLaunch):
        if self.disabled:
            return

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

        #if (timestamp - self.__lastLaunchTimestamp) < ActionThreshold:
        #    return

        dronesInBay = self.getDronesInBay()
        droneObjs = [
            dronesInBay[id] for id in dronesToLaunch if dronesInBay.has_key(id)
        ]

        log("Launching %d drone(s)", len(droneObjs))
        self.__lastLaunchTimestamp = timestamp
        sm.services["menu"].LaunchDrones(droneObjs)
def activateModule(module,
                   pulse=False,
                   targetID=None,
                   actionThreshold=ActionThreshold):
    import blue
    import base
    import uix

    moduleInfo = module.sr.moduleInfo
    moduleName = cfg.invtypes.Get(moduleInfo.typeID).name

    canActivate = canActivateModule(module, targetID=targetID)
    if not canActivate[0]:
        return canActivate

    def_effect = getattr(module, "def_effect", None)

    timestamp = blue.os.GetTime(1)
    lastAction = int(getattr(module, "__last_action__", 0))
    if (ActionThreshold is not None
            and abs(lastAction - timestamp) <= ActionThreshold):
        return (False, "too soon to activate again (lag protection)")

    setattr(module, "__last_action__", timestamp)

    oldautorepeat = getattr(module, "autorepeat", False)
    if oldautorepeat:
        # Temporarily disable auto-repeat for this module so that we can just pulse it once
        if pulse:
            repeatCount = 0
        else:
            repeatCount = 1000  # Not sure why it's this instead of 1 or true
        module.SetRepeat(repeatCount)

    try:
        module.activationTimer = base.AutoTimer(500,
                                                module.ActivateEffectTimer)
        module.effect_activating = 1

        module.ActivateEffect(effect=def_effect, targetID=targetID)
        return (True, None)
    except Exception, e:
        log("Activating module %s failed: %r", moduleName, e)
        return (False, "error")
def activateModule(module, pulse=False, targetID=None, actionThreshold=ActionThreshold):
    import blue
    import base
    import uix
        
    moduleInfo = module.sr.moduleInfo
    moduleName = cfg.invtypes.Get(moduleInfo.typeID).name
    
    canActivate = canActivateModule(module, targetID=targetID)
    if not canActivate[0]:
        return canActivate
    
    def_effect = getattr(module, "def_effect", None)
    
    timestamp = blue.os.GetTime(1)
    lastAction = int(getattr(module, "__last_action__", 0))
    if (ActionThreshold is not None and 
        abs(lastAction - timestamp) <= ActionThreshold):
        return (False, "too soon to activate again (lag protection)")
    
    setattr(module, "__last_action__", timestamp)
    
    oldautorepeat = getattr(module, "autorepeat", False)
    if oldautorepeat:
        # Temporarily disable auto-repeat for this module so that we can just pulse it once
        if pulse:
            repeatCount = 0
        else:
            repeatCount = 1000 # Not sure why it's this instead of 1 or true
        module.SetRepeat(repeatCount)    
            
    try:
        module.activationTimer = base.AutoTimer(500, module.ActivateEffectTimer)
        module.effect_activating = 1
        
        module.ActivateEffect(
            effect=def_effect, 
            targetID=targetID
        )
        return (True, None)
    except Exception, e:
        log("Activating module %s failed: %r", moduleName, e)
        return (False, "error")
Exemple #19
0
    def doUpdateModule(self, moduleID, module, currentTarget):
        ammoChange = self.__ammoChanges.get(module, None)

        if (ammoChange) and (currentTarget is None):
            del self.__ammoChanges[module]
            fn = ammoChange[0]
            args = tuple(ammoChange[1:])
            log("Changing ammo")
            fn(*args)
        else:
            targetID = self.selectTarget(module)

            if (ammoChange or (currentTarget is not None) and
                (targetID != currentTarget)):
                deactivated, reason = deactivateModule(module)
                if deactivated:
                    del self.__activeModules[moduleID]
            elif targetID:
                self.__lastAttackOrder = targetID
                activated, reason = activateModule(module, targetID=targetID)
                if activated:
                    self.__activeModules[moduleID] = targetID
 def doUpdateModule(self, moduleID, module, currentTarget):
     ammoChange = self.__ammoChanges.get(module, None)
     
     if (ammoChange) and (currentTarget is None):
         del self.__ammoChanges[module]
         fn = ammoChange[0]
         args = tuple(ammoChange[1:])
         log("Changing ammo")
         fn(*args)
     else:
         targetID = self.selectTarget(module)
         
         if (ammoChange or
             (currentTarget is not None) and (targetID != currentTarget)
             ):
             deactivated, reason = deactivateModule(module)
             if deactivated:
                 del self.__activeModules[moduleID]
         elif targetID:
             self.__lastAttackOrder = targetID
             activated, reason = activateModule(module, targetID=targetID)
             if activated:
                 self.__activeModules[moduleID] = targetID
    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 OnSessionChanged(self, isRemote, session, change):
     log("Session changed, timer suppressed.")
     session.nextSessionChange = blue.os.GetTime(1) + 1
def Automate(self, *args):
    global serviceRunning, serviceInstance
    serviceRunning = True
    serviceInstance = forceStart("autoscan", AutoScanSvc)
    log("Starting up Autoscanner")
from shootblues import Dependency
Dependency("Common.Script.dll")

import uix
import uiconst
import form.Scanner
from foo import Vector3
from shootblues.common import log

if (getattr(form.Scanner.ApplyAttributes, "shootblues", None) is not 420):
    old_apply_attributes = form.Scanner.ApplyAttributes
else:
    log("probehelper already in a partially initialized state! :(")


def ContractProbes(self, *args):
    probeData = sm.GetService("scanSvc").GetProbeData()
    if probeData == {}:
        return

    avg = Vector3(0, 0, 0)
    min_range = const.scanProbeNumberOfRangeSteps
    for key in probeData:
        min_range = min(min_range, probeData[key].rangeStep)
        avg = avg + probeData[key].destination
    if (min_range <= 1):
        return
    avg = avg / len(probeData)

    for key in probeData:
        destination = (probeData[key].destination + avg) / 2
def GuessClass():
    # doesn't function well with mixed-range probes
    # probably breaks horribly with >4 probes as well!
    sr = sm.services.get('scanSvc').GetScanResults()
    pd = sm.services.get('scanSvc').GetProbeData()
    probepos = {}
    probestep = {}
    sensor = GetSensorStrength() / 100

    def dist(a, b):
        return sqrt(
            pow((a[0] - b[0]), 2) + pow((a[1] - b[1]), 2) +
            pow((a[2] - b[2]), 2))

    for key in pd:
        probepos[key] = pd[key].pos
        probestep[key] = pd[key].rangeStep

    #selected = sm.services.get('window', None).GetWindow('scanner').sr.resultscroll.GetSelected()
    try:
        selected = sm.services.get(
            'window', None).GetWindow('scanner').sr.resultscroll.GetNodes()[1]
        if selected.result:
            data = selected.result.data
        else:
            return
    except:
        showException()
        return

    if isinstance(data, float):
        data = selected.result.pos

    if not isinstance(data, Vector3):
        data = data.point

    probehits = selected.result.probeID
    if not isinstance(probehits, long):
        numprobes = len(probehits)
    else:
        numprobes = 1

    sumstr = 0
    if numprobes > 3:
        for probeval in probehits:
            range = 0.125 * pow(2, probestep[key])
            sumstr += exp(-0.915 * pow(
                dist(probepos[probeval], data) / (range * 149598000000), 2))
            #log("sum of probe strengths: %s", sumstr)
        intrinsic = selected.result.certainty * 2 * 100 * 2 / (sensor * sumstr)
        log("intrinsic core: %s", intrinsic)
    elif numprobes > 2:
        for probeval in probehits:
            range = 0.125 * pow(2, probestep[key])
            sumstr += exp(-0.915 * pow(
                dist(probepos[probeval], data) / (range * 149598000000), 2))
            #log("sum of probe strengths: %s", sumstr)
        intrinsic = selected.result.certainty * numprobes * 100 * 2 / (sensor *
                                                                       sumstr)
        log("intrinsic core: %s", intrinsic)
    elif numprobes > 1:
        for probeval in probehits:
            range = 0.125 * pow(2, probestep[key])
            sumstr += exp(-0.915 * pow(
                dist(probepos[probeval], data) / (range * 149598000000), 2))
            #log("sum of probe strengths: %s", sumstr)
        intrinsic = selected.result.certainty * 100 * 2 / (sensor * sumstr)
        log("intrinsic core: %s", intrinsic)
    else:
        range = 0.125 * pow(2, probestep[key])
        sumstr = exp(-0.915 *
                     pow(selected.result.data / (range * 149598000000), 2))
        intrinsic = selected.result.certainty * 100 * 2 / (sensor * sumstr)
        #log("sum of probe strengths: %s", sumstr)
        log("intrinsic core: %s", intrinsic)

    siteclass = 0
    if (intrinsic > 1.8) or (intrinsic < 1.7):
        siteclass += round(math.log(intrinsic, 2) + 1, 1)
    else:
        siteclass += 1.5
    log("Site Class: %s", siteclass)
from shootblues import Dependency
Dependency("Common.Script.dll")

import uix
import uiconst
import form.Scanner
from foo import Vector3
from shootblues.common import log

if (getattr(form.Scanner.ApplyAttributes, "shootblues", None) is not 420):
    old_apply_attributes = form.Scanner.ApplyAttributes
else:
    log("probehelper already in a partially initialized state! :(")

def ContractProbes(self, *args):
    probeData = sm.GetService("scanSvc").GetProbeData()
    if probeData == {}:
        return
    
    avg = Vector3( 0,0,0 )
    min_range = const.scanProbeNumberOfRangeSteps
    for key in probeData:
        min_range = min( min_range, probeData[key].rangeStep )
        avg = avg + probeData[key].destination
    if (min_range <= 1):
        return
    avg = avg / len(probeData)

    for key in probeData:
        destination = (probeData[key].destination + avg)/2
        sm.GetService("scanSvc").SetProbeDestination(key, destination)
    def AutoScan(self):
        # try:
        from shootblues.common import log

        probeData = sm.GetService("scanSvc").GetProbeData()
        numprobes = len(probeData)
        maxprobes = getMaxProbes()

        main = __import__("__main__")
        if numprobes < maxprobes:
            if isItemInsideForceField(eve.session.shipid):
                self.disabled = True
                return
            launchProbe()
            self.probesset = False
        elif not self.probesset:
            self.probesset = True
            self.firstscan = True
            self.scanstep = 8
            initialScan()
            scanProbes()
        elif self.firstscan:
            if sm.services.get("window", None).GetWindow("scanner").sr:
                log(
                    "Total sites found: %s",
                    (len(sm.services.get("window", None).GetWindow("scanner").sr.resultscroll.GetNodes()) - 2),
                )
                # GuessClass()
                if len(sm.services.get("window", None).GetWindow("scanner").sr.resultscroll.GetNodes()) < 3:
                    main.errorthrow = sm.services.get("window", None).GetWindow("scanner").sr.resultscroll.GetNodes()
                    log("No results!")
                    self.disabled = True
                    return True
                setupProbes()
                self.sendToResult()
                scanProbes()
                self.firstscan = False
            else:
                log("No results!")
                self.disabled = True
                return True

        elif self.probesset and not self.firstscan:
            curcert = (
                sm.services.get("window", None).GetWindow("scanner").sr.resultscroll.GetNodes()[1].result.certainty
            )
            if self.lastcert == 1 or curcert == 1:
                self.probesset == False
                # recoverProbes()
                log("Got it!")
                self.disabled = True
                return True
            elif self.scanstep == -1 and not self.lastcert == 1:
                self.probesset == False
                # recoverProbes()
                log("Can't get it! :(")
                self.disabled = True
                return True
            else:
                if self.lastcert < curcert:
                    self.lastcert = curcert
                    log("Scanstep %s, Certainty at %s, stepping down", self.scanstep, curcert)
                    sm.services.get("window", None).GetWindow("scanner").ContractProbes()
                    self.scanstep -= 1
                    self.sendToResult()
                    scanProbes()
                else:
                    self.lastcert = curcert
                    log("Scanstep %s, Certainty at %s, stepping up", self.scanstep, curcert)
                    sm.services.get("window", None).GetWindow("scanner").ExpandProbes()
                    self.scanstep += 1
                    if self.scanstep > 8:
                        self.scanstep = 8
                    self.sendToResult()
                    scanProbes()
        return False
 def stub(*args, **kwargs):
     from shootblues.common import log
     log("stubbed: %r (%r, %r)", name, args, kwargs)
     return
Exemple #29
0
def callHandler(fn, source, name, data):
    try:
        fn(source, name, data)
    except Exception, e:
        log("Error in message handler: %r", e)
Exemple #30
0
    def updateTargets(self):
        if self.disabled:
            self.__updateTimer = None
            return

        ballpark = sm.services["michelle"].GetBallpark()
        if not ballpark:
            return

        targetSvc = sm.services.get('target', None)
        if not targetSvc:
            return

        targetSvc_targeting = [long(k) for k in targetSvc.targeting.keys()]
        targetSvc_autoTargeting = [long(k) for k in targetSvc.autoTargeting]

        maxTargets = self.getMaxTargets()
        if maxTargets <= 0:
            return

        reservedSlots = int(getPref("ReservedTargetSlots", 1))
        maxAutoTargets = max(0, maxTargets - reservedSlots)

        gd = Memoized(self.getDistance)
        gp = Memoized(getPriority)

        currentTargets = [
            self.__balls.get(id, None) for id in self.__lockedTargets
            if id in targetSvc.targets
        ]
        currentTargets = [
            bi.id for bi in self.filterTargets(currentTargets, gp, gd)
        ]
        exclusionSet = set(targetSvc_targeting + targetSvc_autoTargeting +
                           currentTargets)
        targetSorter = self.makeTargetSorter(exclusionSet, gp, gd)

        targets = self.filterTargets(self.__eligibleBalls, gp, gd)
        targets.sort(targetSorter)

        currentlyTargeting = set([
            id for id in (targetSvc_targeting + targetSvc_autoTargeting)
            if id in self.__lockedTargets
        ])

        allLockedTargets = set(targetSvc_targeting + targetSvc_autoTargeting +
                               targetSvc.targets)
        maxNewTargets = max(maxTargets - len(allLockedTargets), 0)
        targets = set([bi.id for bi in targets[0:maxAutoTargets]])

        currentTargets = set(currentTargets)

        targetsToUnlock = (currentTargets - targets) - currentlyTargeting
        targetsToLock = list((targets - set(targetSvc.targets)) -
                             currentlyTargeting)
        targetsToLock = targetsToLock[0:maxNewTargets]

        if len(targetsToUnlock):
            log("Unlocking %s", ", ".join(getNamesOfIDs(targetsToUnlock)))
            for targetID in targetsToUnlock:
                if targetID in self.__lockedTargets:
                    self.__lockedTargets.remove(targetID)
                    setItemColor(targetID, None)

                targetSvc.UnlockTarget(targetID)

        if len(targetsToLock):
            log("Locking %s", ", ".join(getNamesOfIDs(targetsToLock)))
            for targetID in targetsToLock:
                if targetID not in self.__lockedTargets:
                    self.__lockedTargets.add(targetID)
                    setItemColor(targetID, "Automatic Target")

                uthread.pool("LockTarget", self.tryLockTarget, targetSvc,
                             targetID)
 def tryLockTarget(self, targetSvc, targetID):
     try:
         targetSvc.TryLockTarget(targetID)
     except:
         log("Failed to lock %r", targetID)
Exemple #32
0
 def tryLockTarget(self, targetSvc, targetID):
     try:
         targetSvc.TryLockTarget(targetID)
     except:
         log("Failed to lock %r", targetID)
    def AutoScan(self):
        #try:
        from shootblues.common import log
        probeData = sm.GetService("scanSvc").GetProbeData()
        numprobes = len(probeData)
        maxprobes = getMaxProbes()

        main = __import__("__main__")
        if numprobes < maxprobes:
            if isItemInsideForceField(eve.session.shipid):
                self.disabled = True
                return
            launchProbe()
            self.probesset = False
        elif not self.probesset:
            self.probesset = True
            self.firstscan = True
            self.scanstep = 8
            initialScan()
            scanProbes()
        elif self.firstscan:
            if sm.services.get('window', None).GetWindow('scanner').sr:
                log("Total sites found: %s", (len(
                    sm.services.get('window', None).GetWindow(
                        'scanner').sr.resultscroll.GetNodes()) - 2))
                #GuessClass()
                if len(
                        sm.services.get('window', None).GetWindow(
                            'scanner').sr.resultscroll.GetNodes()) < 3:
                    main.errorthrow = sm.services.get(
                        'window',
                        None).GetWindow('scanner').sr.resultscroll.GetNodes()
                    log("No results!")
                    self.disabled = True
                    return True
                setupProbes()
                self.sendToResult()
                scanProbes()
                self.firstscan = False
            else:
                log("No results!")
                self.disabled = True
                return True

        elif self.probesset and not self.firstscan:
            curcert = sm.services.get('window', None).GetWindow(
                'scanner').sr.resultscroll.GetNodes()[1].result.certainty
            if self.lastcert == 1 or curcert == 1:
                self.probesset == False
                #recoverProbes()
                log("Got it!")
                self.disabled = True
                return True
            elif self.scanstep == -1 and not self.lastcert == 1:
                self.probesset == False
                #recoverProbes()
                log("Can't get it! :(")
                self.disabled = True
                return True
            else:
                if self.lastcert < curcert:
                    self.lastcert = curcert
                    log("Scanstep %s, Certainty at %s, stepping down",
                        self.scanstep, curcert)
                    sm.services.get(
                        'window', None).GetWindow('scanner').ContractProbes()
                    self.scanstep -= 1
                    self.sendToResult()
                    scanProbes()
                else:
                    self.lastcert = curcert
                    log("Scanstep %s, Certainty at %s, stepping up",
                        self.scanstep, curcert)
                    sm.services.get('window',
                                    None).GetWindow('scanner').ExpandProbes()
                    self.scanstep += 1
                    if self.scanstep > 8:
                        self.scanstep = 8
                    self.sendToResult()
                    scanProbes()
        return (False)
 def OnSessionChanged(self, isRemote, session, change):
     log("Session changed, timer suppressed.")
     session.nextSessionChange = blue.os.GetTime(1) + 1
def GuessClass():
    # doesn't function well with mixed-range probes
    # probably breaks horribly with >4 probes as well!
    sr = sm.services.get("scanSvc").GetScanResults()
    pd = sm.services.get("scanSvc").GetProbeData()
    probepos = {}
    probestep = {}
    sensor = GetSensorStrength() / 100

    def dist(a, b):
        return sqrt(pow((a[0] - b[0]), 2) + pow((a[1] - b[1]), 2) + pow((a[2] - b[2]), 2))

    for key in pd:
        probepos[key] = pd[key].pos
        probestep[key] = pd[key].rangeStep

        # selected = sm.services.get('window', None).GetWindow('scanner').sr.resultscroll.GetSelected()
    try:
        selected = sm.services.get("window", None).GetWindow("scanner").sr.resultscroll.GetNodes()[1]
        if selected.result:
            data = selected.result.data
        else:
            return
    except:
        showException()
        return

    if isinstance(data, float):
        data = selected.result.pos

    if not isinstance(data, Vector3):
        data = data.point

    probehits = selected.result.probeID
    if not isinstance(probehits, long):
        numprobes = len(probehits)
    else:
        numprobes = 1

    sumstr = 0
    if numprobes > 3:
        for probeval in probehits:
            range = 0.125 * pow(2, probestep[key])
            sumstr += exp(-0.915 * pow(dist(probepos[probeval], data) / (range * 149598000000), 2))
            # log("sum of probe strengths: %s", sumstr)
        intrinsic = selected.result.certainty * 2 * 100 * 2 / (sensor * sumstr)
        log("intrinsic core: %s", intrinsic)
    elif numprobes > 2:
        for probeval in probehits:
            range = 0.125 * pow(2, probestep[key])
            sumstr += exp(-0.915 * pow(dist(probepos[probeval], data) / (range * 149598000000), 2))
            # log("sum of probe strengths: %s", sumstr)
        intrinsic = selected.result.certainty * numprobes * 100 * 2 / (sensor * sumstr)
        log("intrinsic core: %s", intrinsic)
    elif numprobes > 1:
        for probeval in probehits:
            range = 0.125 * pow(2, probestep[key])
            sumstr += exp(-0.915 * pow(dist(probepos[probeval], data) / (range * 149598000000), 2))
            # log("sum of probe strengths: %s", sumstr)
        intrinsic = selected.result.certainty * 100 * 2 / (sensor * sumstr)
        log("intrinsic core: %s", intrinsic)
    else:
        range = 0.125 * pow(2, probestep[key])
        sumstr = exp(-0.915 * pow(selected.result.data / (range * 149598000000), 2))
        intrinsic = selected.result.certainty * 100 * 2 / (sensor * sumstr)
        # log("sum of probe strengths: %s", sumstr)
        log("intrinsic core: %s", intrinsic)

    siteclass = 0
    if (intrinsic > 1.8) or (intrinsic < 1.7):
        siteclass += round(math.log(intrinsic, 2) + 1, 1)
    else:
        siteclass += 1.5
    log("Site Class: %s", siteclass)
def Automate(self, *args):
    global serviceRunning, serviceInstance
    serviceRunning = True
    serviceInstance = forceStart("autoscan", AutoScanSvc)
    log("Starting up Autoscanner")
def callHandler(fn, source, name, data):
    try:
        fn(source, name, data)
    except Exception, e:
        log("Error in message handler: %r", e)
 def updateTargets(self):
     if self.disabled:
         self.__updateTimer = None
         return
     
     ballpark = sm.services["michelle"].GetBallpark()
     if not ballpark:
         return
 
     targetSvc = sm.services.get('target', None)
     if not targetSvc:
         return
     
     targetSvc_targeting = [long(k) for k in targetSvc.targeting.keys()]
     targetSvc_autoTargeting = [long(k) for k in targetSvc.autoTargeting]
         
     maxTargets = self.getMaxTargets()
     if maxTargets <= 0:
         return
     
     reservedSlots = int(getPref("ReservedTargetSlots", 1))
     maxAutoTargets = max(0, maxTargets - reservedSlots)
         
     gd = Memoized(self.getDistance)
     gp = Memoized(getPriority)
     
     currentTargets = [self.__balls.get(id, None) for id in self.__lockedTargets 
         if id in targetSvc.targets]
     currentTargets = [bi.id for bi in self.filterTargets(currentTargets, gp, gd)]
     exclusionSet = set(targetSvc_targeting + targetSvc_autoTargeting + currentTargets)
     targetSorter = self.makeTargetSorter(exclusionSet, gp, gd)
     
     targets = self.filterTargets(self.__eligibleBalls, gp, gd)        
     targets.sort(targetSorter)
             
     currentlyTargeting = set([
         id for id in (targetSvc_targeting + targetSvc_autoTargeting) 
         if id in self.__lockedTargets
     ])
     
     allLockedTargets = set(targetSvc_targeting + targetSvc_autoTargeting + targetSvc.targets)
     maxNewTargets = max(maxTargets - len(allLockedTargets), 0)
     targets = set([bi.id for bi in targets[0:maxAutoTargets]])
     
     currentTargets = set(currentTargets)
                 
     targetsToUnlock = (currentTargets - targets) - currentlyTargeting
     targetsToLock = list((targets - set(targetSvc.targets)) - currentlyTargeting)
     targetsToLock = targetsToLock[0:maxNewTargets]
             
     if len(targetsToUnlock):
         log("Unlocking %s", ", ".join(getNamesOfIDs(targetsToUnlock)))
         for targetID in targetsToUnlock:
             if targetID in self.__lockedTargets:
                 self.__lockedTargets.remove(targetID)
                 setItemColor(targetID, None)
             
             targetSvc.UnlockTarget(targetID)
     
     if len(targetsToLock):
         log("Locking %s", ", ".join(getNamesOfIDs(targetsToLock)))
         for targetID in targetsToLock:
             if targetID not in self.__lockedTargets:
                 self.__lockedTargets.add(targetID)
                 setItemColor(targetID, "Automatic Target")
             
             uthread.pool(
                 "LockTarget",
                 self.tryLockTarget,
                 targetSvc, targetID
             )
    def stub(*args, **kwargs):
        from shootblues.common import log

        log("stubbed: %r (%r, %r)", name, args, kwargs)
        return
 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)