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
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 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)
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")
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
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 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 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 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 )