state.py (78869B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\parklife\state.py 2 from collections import namedtuple 3 import utillib 4 from carbon.common.script.sys.service import Service 5 from carbon.common.script.util import timerstuff 6 from carbonui.util import colorblind 7 from carbonui.util.color import Color 8 from eve.client.script.parklife.stateSetting import GetOrderConfigName, GetStateConfigName 9 from eve.common.lib import appConst 10 import overviewPresets.overviewSettingsConst as osConst 11 import eve.client.script.ui.inflight.overview.overviewConst as oConst 12 from eve.client.script.ui.inflight.overviewShipLabelObject import ShipLabel 13 from eve.common.script.mgt import buffBarConst 14 import inventorycommon.const as invConst 15 from eve.common.script.sys import eveCfg, idCheckers 16 from eve.common.script.sys.idCheckers import IsNPCCorporation 17 from fwwarzone.client.facwarUtil import IsMyFwFaction, IsMyCombatEnemyFaction 18 from localization import GetByLabel 19 from eve.client.script.parklife import states as state 20 import log 21 import telemetry 22 from eve.client.script.ui.crimewatch import crimewatchConst 23 from evewar import warConst 24 CRIMINAL_RED = crimewatchConst.Colors.Criminal.GetRGBA() 25 SUSPECT_YELLOW = crimewatchConst.Colors.Suspect.GetRGBA() 26 DISAPPROVAL_COLOR = crimewatchConst.Colors.Disapproval.GetRGBA() 27 TURQUOISE = (0.0, 28 0.63, 29 0.57, 30 1.0) 31 DRONES_AND_FIGHTERS = (invConst.categoryDrone, invConst.categoryFighter) 32 CATEGORIES_WITH_WARFACTIONID = DRONES_AND_FIGHTERS + (appConst.categoryStructure,) 33 NORELATIONSHIP_SENTINEL = "Just a string which will be used as a sentinel value. We use 'is' to compare it so it doesn't matter that it's hella long." 34 35 def GetStateColors(): 36 STATE_COLORS = {'purple': ((0.6, 0.15, 0.9, 1.0), 'UI/Common/Colors/Purple'), 37 'green': ((0.1, 0.6, 0.1, 1.0), 'UI/Common/Colors/Green'), 38 'red': ((0.75, 0.0, 0.0, 1.0), 'UI/Common/Colors/Red'), 39 'darkBlue': ((0.0, 0.15, 0.6, 1.0), 'UI/Common/Colors/DarkBlue'), 40 'blue': ((0.2, 0.5, 1.0, 1.0), 'UI/Common/Colors/Blue'), 41 'darkTurquoise': ((0.0, 0.34, 0.33, 1.0), 'UI/Common/Colors/DarkTurquoise'), 42 'turquoise': (TURQUOISE, 'UI/Common/Colors/Turquoise'), 43 'orange': ((1.0, 0.35, 0.0, 1.0), 'UI/Common/Colors/Orange'), 44 'yellow': ((1.0, 0.7, 0.0, 1.0), 'UI/Common/Colors/Yellow'), 45 'indigo': ((0.3, 0.0, 0.5, 1.0), 'UI/Common/Colors/Indigo')} 46 if colorblind.IsReplacementEnabled(): 47 numColors = len(STATE_COLORS) 48 STATE_COLORS = {name:(colorblind.GetEvenlyDistributedColor(color, i, numColors), label) for i, (name, (color, label)) in enumerate(STATE_COLORS.iteritems())} 49 STATE_COLORS.update({'black': ((0.0, 0.0, 0.0, 1.0), 'UI/Common/Colors/Black'), 50 'white': ((0.7, 0.7, 0.7, 1.0), 'UI/Common/Colors/White')}) 51 return STATE_COLORS 52 53 54 StateProperty = namedtuple('StateProperty', 'text label defaultColor hint iconIndex iconColor defaultBackgroundColor ownerText') 55 colorToNameMap = {color[0]:colorKey for colorKey, color in GetStateColors().iteritems()} 56 57 def FindColorName(colorValue): 58 return colorToNameMap.get(colorValue, None) 59 60 61 def IsHighStanding(relationship): 62 return relationship > appConst.contactGoodStanding 63 64 65 def IsGoodStanding(relationship): 66 return appConst.contactGoodStanding >= relationship > appConst.contactNeutralStanding 67 68 69 def IsNeutralStanding(relationship): 70 return relationship == appConst.contactNeutralStanding 71 72 73 def IsBadStanding(relationship): 74 return appConst.contactBadStanding <= relationship < appConst.contactNeutralStanding 75 76 77 def IsHorribleStanding(relationship): 78 return relationship < appConst.contactBadStanding 79 80 81 def GetStateSvc(): 82 return sm.GetService('stateSvc') 83 84 85 class StateSvc(Service): 86 __guid__ = 'svc.stateSvc' 87 __exportedcalls__ = {'GetExclState': [], 88 'GetStates': [], 89 'SetState': [], 90 'RemoveWarOwners': []} 91 __notifyevents__ = ['DoBallClear', 92 'DoBallRemove', 93 'OnSessionChanged', 94 'DoBallsRemove'] 95 __update_on_reload__ = 0 96 __startupdependencies__ = ['settings'] 97 __dependencies__ = ['bountySvc'] 98 99 def Run(self, *etc): 100 Service.Run(self, *etc) 101 self.logme = 0 102 self.exclusive = [state.mouseOver, 103 state.selected, 104 state.activeTarget, 105 state.lookingAt] 106 self.exclusives = {} 107 self.states = {} 108 self.stateColors = {} 109 self.stateBlinks = {} 110 self.atWar = {} 111 self.alliesAtWar = {} 112 self.cachedStateSettings = {} 113 self.stateColorsInited = 0 114 self.props = None 115 self.smartFilterProps = None 116 self.defaultBackgroundOrder = [state.flagAtWarCanFight, 117 state.flagAtWarMilitia, 118 state.flagLimitedEngagement, 119 state.flagSameFleet, 120 state.flagSamePlayerCorp, 121 state.flagSameAlliance, 122 state.flagStandingHigh, 123 state.flagStandingGood, 124 state.flagSameMilitia, 125 state.flagOutlaw, 126 state.flagCriminal, 127 state.flagSuspect, 128 state.flagDisapproval, 129 state.flagStandingHorrible, 130 state.flagStandingBad, 131 state.flagAlliesAtWar, 132 state.flagDangerous, 133 state.flagHasKillRight, 134 state.flagSameNpcCorp, 135 state.flagStandingNeutral, 136 state.flagNoStanding, 137 state.flagAgentInteractable, 138 state.flagIsWanted] 139 self.defaultBackgroundStates = [state.flagCriminal, 140 state.flagSuspect, 141 state.flagOutlaw, 142 state.flagSameFleet, 143 state.flagSamePlayerCorp, 144 state.flagSameNpcCorp, 145 state.flagSameAlliance, 146 state.flagAtWarCanFight, 147 state.flagAtWarMilitia, 148 state.flagSameMilitia, 149 state.flagLimitedEngagement] 150 self.defaultFlagOrder = [state.flagAtWarCanFight, 151 state.flagAtWarMilitia, 152 state.flagLimitedEngagement, 153 state.flagSameFleet, 154 state.flagSamePlayerCorp, 155 state.flagSameAlliance, 156 state.flagStandingHigh, 157 state.flagStandingGood, 158 state.flagSameMilitia, 159 state.flagOutlaw, 160 state.flagCriminal, 161 state.flagSuspect, 162 state.flagDisapproval, 163 state.flagStandingHorrible, 164 state.flagStandingBad, 165 state.flagAlliesAtWar, 166 state.flagDangerous, 167 state.flagHasKillRight, 168 state.flagSameNpcCorp, 169 state.flagStandingNeutral, 170 state.flagNoStanding, 171 state.flagAgentInteractable, 172 state.flagIsWanted] 173 self.defaultFlagStates = [state.flagSameFleet, 174 state.flagSamePlayerCorp, 175 state.flagSameNpcCorp, 176 state.flagSameAlliance, 177 state.flagAtWarCanFight, 178 state.flagSameMilitia, 179 state.flagAtWarMilitia, 180 state.flagStandingHigh, 181 state.flagStandingGood, 182 state.flagStandingBad, 183 state.flagStandingHorrible, 184 state.flagCriminal, 185 state.flagSuspect, 186 state.flagDisapproval, 187 state.flagOutlaw, 188 state.flagAgentInteractable, 189 state.flagStandingNeutral, 190 state.flagAlliesAtWar, 191 state.flagLimitedEngagement, 192 state.flagDangerous, 193 state.flagHasKillRight] 194 self.defaultBlinkStates = {('flag', state.flagSuspect): True, 195 ('flag', state.flagCriminal): True, 196 ('flag', state.flagLimitedEngagement): True, 197 ('flag', state.flagDisapproval): True, 198 ('background', state.flagAtWarCanFight): True, 199 ('background', state.flagAtWarMilitia): True} 200 self.ewarStates = {buffBarConst.Slot_WarpScramblerMWD: (state.flagWarpScrambledMWD, appConst.iconModuleWarpScramblerMWD), 201 buffBarConst.Slot_WarpScrambler: (state.flagWarpScrambled, appConst.iconModuleWarpScrambler), 202 buffBarConst.Slot_FighterTackle: (state.flagWarpScrambled, appConst.iconModuleFighterTackle), 203 buffBarConst.Slot_FocusedWarpScrambler: (state.flagWarpScrambledMWD, appConst.iconModuleFocusedWarpScrambler), 204 buffBarConst.Slot_Webify: (state.flagWebified, appConst.iconModuleStasisWeb), 205 buffBarConst.Slot_Electronic: (state.flagECMd, appConst.iconModuleECM), 206 buffBarConst.Slot_EwRemoteSensorDamp: (state.flagSensorDampened, appConst.iconModuleSensorDamper), 207 buffBarConst.Slot_EwTrackingDisrupt: (state.flagTrackingDisrupted, appConst.iconModuleTrackingDisruptor), 208 buffBarConst.Slot_EwGuidanceDisrupt: (state.flagGuidanceDisrupted, appConst.iconModuleGuidanceDisruptor), 209 buffBarConst.Slot_EwTargetPaint: (state.flagTargetPainted, appConst.iconModuleTargetPainter), 210 buffBarConst.Slot_EwEnergyVampire: (state.flagEnergyLeeched, appConst.iconModuleNosferatu), 211 buffBarConst.Slot_EwEnergyNeut: (state.flagEnergyNeut, appConst.iconModuleEnergyNeutralizer), 212 buffBarConst.Slot_RemoteTracking: (state.flagRemoteTracking, appConst.iconModuleRemoteTracking), 213 buffBarConst.Slot_EnergyTransfer: (state.flagEnergyTransfer, appConst.iconModuleEnergyTransfer), 214 buffBarConst.Slot_SensorBooster: (state.flagSensorBooster, appConst.iconModuleSensorBooster), 215 buffBarConst.Slot_EccmProjector: (state.flagECCMProjector, appConst.iconModuleECCMProjector), 216 buffBarConst.Slot_RemoteHullRepair: (state.flagRemoteHullRepair, appConst.iconModuleHullRepairer), 217 buffBarConst.Slot_RemoteArmorRepair: (state.flagRemoteArmorRepair, appConst.iconModuleArmorRepairer), 218 buffBarConst.Slot_RemoteArmorMutadaptiveRepairer: (state.flagRemoteArmorRepair, appConst.iconModuleMutadaptiveArmorRepairer), 219 buffBarConst.Slot_ShieldTransfer: (state.flagShieldTransfer, appConst.iconModuleShieldBooster)} 220 self.ewarStateItems = self.ewarStates.items() 221 self.shouldLogError = True 222 self.InitFilter() 223 224 def OnSessionChanged(self, isRemote, session, change): 225 if 'corpid' in change or 'allianceid' in change: 226 self.atWar = {} 227 self.alliesAtWar = {} 228 229 def RemoveWarOwners(self, ownerIDs): 230 if not self.atWar: 231 return 232 for ownerID in ownerIDs: 233 if ownerID in self.atWar: 234 del self.atWar[ownerID] 235 if ownerID in self.alliesAtWar: 236 del self.alliesAtWar[ownerID] 237 238 def GetProps(self): 239 if self.props is None: 240 criminalLabelAndHint = (GetByLabel('UI/Services/State/Standing/Criminal'), GetByLabel('UI/Services/State/Standing/CriminalHint')) 241 suspectLabelAndHint = (GetByLabel('UI/Services/State/Standing/Suspect'), GetByLabel('UI/Services/State/Standing/SuspectHint')) 242 outlawLabelAndHint = (GetByLabel('UI/Services/State/Standing/Outlaw'), GetByLabel('UI/Services/State/Standing/OutlawHint')) 243 dangerousLabelAndHint = (GetByLabel('UI/Services/State/Standing/Dangerous'), GetByLabel('UI/Services/State/Standing/DangerousHint')) 244 sameFleetLabelAndHint = (GetByLabel('UI/Services/State/Standing/SameFleet'), GetByLabel('UI/Services/State/Standing/SameFleetHint')) 245 sameCorpLabelAndHint = (GetByLabel('UI/Services/State/Standing/SameCorporation'), GetByLabel('UI/Services/State/Standing/SameCorporationHint'), GetByLabel('UI/Services/State/Standing/SameCorporationOwner')) 246 sameNpcCorpLabelAndHint = (GetByLabel('UI/Services/State/Standing/SameNpcCorporation'), GetByLabel('UI/Services/State/Standing/SameNpcCorporationHint'), GetByLabel('UI/Services/State/Standing/SameNpcCorporationOwner')) 247 sameAllianceLabelAndHint = (GetByLabel('UI/Services/State/Standing/SameAlliance'), GetByLabel('UI/Services/State/Standing/SameAllianceHint'), GetByLabel('UI/Services/State/Standing/SameAllianceOwner')) 248 sameMilitiaLabelAndHint = (GetByLabel('UI/Services/State/Standing/SameMilitia'), GetByLabel('UI/Services/State/Standing/SameMilitiaHint'), GetByLabel('UI/Services/State/Standing/SameMilitiaOwner')) 249 atWarWithCorpLabelAndHint = (GetByLabel('UI/Services/State/Standing/AtWarWithCorporationOrAlliance'), GetByLabel('UI/Services/State/Standing/AtWarWithCorporationOrAllianceHint'), GetByLabel('UI/Services/State/Standing/AtWarWithCorporationOrAllianceOwner')) 250 atWarWithMilitiaLabelAndHint = (GetByLabel('UI/Services/State/Standing/AtWarWithMilitia'), GetByLabel('UI/Services/State/Standing/AtWarWithMilitiaHint'), GetByLabel('UI/Services/State/Standing/AtWarWithMilitiaOwner')) 251 excellentLabelAndHint = (GetByLabel('UI/Services/State/Standing/Excellent'), GetByLabel('UI/Services/State/Standing/ExcellentHint'), GetByLabel('UI/Services/State/Standing/ExcellentOwner')) 252 goodLabelAndHint = (GetByLabel('UI/Services/State/Standing/Good'), GetByLabel('UI/Services/State/Standing/GoodHint'), GetByLabel('UI/Services/State/Standing/GoodOwner')) 253 neutralLabelAndHint = (GetByLabel('UI/Services/State/Standing/Neutral'), GetByLabel('UI/Services/State/Standing/NeutralHint'), GetByLabel('UI/Services/State/Standing/NeutralOwner')) 254 badLabelAndHint = (GetByLabel('UI/Services/State/Standing/Bad'), GetByLabel('UI/Services/State/Standing/BadHint'), GetByLabel('UI/Services/State/Standing/BadOwner')) 255 terribleLabelAndHint = (GetByLabel('UI/Services/State/Standing/Terrible'), GetByLabel('UI/Services/State/Standing/TerribleHint'), GetByLabel('UI/Services/State/Standing/TerribleOwner')) 256 isWantedLabelAndHint = (GetByLabel('UI/Services/State/Standing/IsWanted'), GetByLabel('UI/Services/State/Standing/IsWantedHint')) 257 hasKillRightLabelAndHint = (GetByLabel('UI/Services/State/Standing/HasKillRight'), GetByLabel('UI/Services/State/Standing/HasKillRightHint')) 258 agentInteractableLabelAndHint = (GetByLabel('UI/Services/State/Standing/AgentIsInteractable'), GetByLabel('UI/Services/State/Standing/AgentIsInteractableHint')) 259 wreckIsViewedLabelAndHint = (GetByLabel('UI/Services/State/Standing/WreckIsViewed'), GetByLabel('UI/Services/State/Standing/WreckIsViewedHint')) 260 wreckIsEmptyLabelAndHint = (GetByLabel('UI/Services/State/Standing/WreckIsEmpty'), GetByLabel('UI/Services/State/Standing/WreckIsEmptyHint')) 261 noStandingLabelAndHint = (GetByLabel('UI/Services/State/Standing/NoStanding'), GetByLabel('UI/Services/State/Standing/NoStandingHint'), GetByLabel('UI/Services/State/Standing/NoStandingOwner')) 262 alliesAtWar = (GetByLabel('UI/Services/State/Standing/AlliesAtWar'), GetByLabel('UI/Services/State/Standing/AlliesAtWarHint'), GetByLabel('UI/Services/State/Standing/AlliesAtWarOwner')) 263 limitedEngagementLabelAndHint = (GetByLabel('UI/Services/State/Standing/LimitedEngagement'), GetByLabel('UI/Services/State/Standing/LimitedEngagementHint')) 264 disapprovalLabelAndHint = (GetByLabel('UI/Services/State/Standing/Disapproval'), GetByLabel('UI/Services/State/Standing/DisapprovalHint')) 265 self.props = {state.flagCriminal: StateProperty(criminalLabelAndHint[0], 'Criminal', 'black', criminalLabelAndHint[1], 5, CRIMINAL_RED, 'red', None), 266 state.flagSuspect: StateProperty(suspectLabelAndHint[0], 'Suspect', 'black', suspectLabelAndHint[1], 5, SUSPECT_YELLOW, 'yellow', None), 267 state.flagOutlaw: StateProperty(outlawLabelAndHint[0], 'Outlaw', 'red', outlawLabelAndHint[1], 5, Color.WHITE, None, None), 268 state.flagDangerous: StateProperty(dangerousLabelAndHint[0], 'Dangerous', 'yellow', dangerousLabelAndHint[1], 5, Color.WHITE, None, None), 269 state.flagSameFleet: StateProperty(sameFleetLabelAndHint[0], 'SameFleet', 'purple', sameFleetLabelAndHint[1], 0, Color.WHITE, None, None), 270 state.flagSamePlayerCorp: StateProperty(sameCorpLabelAndHint[0], 'SamePlayerCorp', 'green', sameCorpLabelAndHint[1], 1, Color.WHITE, None, sameCorpLabelAndHint[2]), 271 state.flagSameNpcCorp: StateProperty(sameNpcCorpLabelAndHint[0], 'SameNpcCorp', 'green', sameNpcCorpLabelAndHint[1], 1, Color.WHITE, None, sameNpcCorpLabelAndHint[2]), 272 state.flagSameAlliance: StateProperty(sameAllianceLabelAndHint[0], 'SameAlliance', 'darkBlue', sameAllianceLabelAndHint[1], 1, Color.WHITE, None, sameAllianceLabelAndHint[2]), 273 state.flagSameMilitia: StateProperty(sameMilitiaLabelAndHint[0], 'SameMilitia', 'indigo', sameMilitiaLabelAndHint[1], 1, Color.WHITE, None, sameMilitiaLabelAndHint[2]), 274 state.flagAtWarCanFight: StateProperty(atWarWithCorpLabelAndHint[0], 'AtWarCanFight', 'red', atWarWithCorpLabelAndHint[1], 1, Color.WHITE, None, atWarWithCorpLabelAndHint[2]), 275 state.flagAtWarMilitia: StateProperty(atWarWithMilitiaLabelAndHint[0], 'AtWarMilitia', 'orange', atWarWithMilitiaLabelAndHint[1], 1, Color.WHITE, None, atWarWithMilitiaLabelAndHint[2]), 276 state.flagStandingHigh: StateProperty(excellentLabelAndHint[0], 'StandingHigh', 'darkBlue', excellentLabelAndHint[1], 2, Color.WHITE, None, excellentLabelAndHint[2]), 277 state.flagStandingGood: StateProperty(goodLabelAndHint[0], 'StandingGood', 'blue', goodLabelAndHint[1], 2, Color.WHITE, None, goodLabelAndHint[2]), 278 state.flagStandingNeutral: StateProperty(neutralLabelAndHint[0], 'StandingNeutral', 'white', neutralLabelAndHint[1], 4, Color.WHITE, None, neutralLabelAndHint[2]), 279 state.flagStandingBad: StateProperty(badLabelAndHint[0], 'StandingBad', 'orange', badLabelAndHint[1], 3, Color.WHITE, None, badLabelAndHint[2]), 280 state.flagStandingHorrible: StateProperty(terribleLabelAndHint[0], 'StandingHorrible', 'red', terribleLabelAndHint[1], 3, Color.WHITE, None, terribleLabelAndHint[2]), 281 state.flagIsWanted: StateProperty(isWantedLabelAndHint[0], 'IsWanted', 'black', isWantedLabelAndHint[1], 5, Color.WHITE, None, None), 282 state.flagHasKillRight: StateProperty(hasKillRightLabelAndHint[0], 'HasKillRight', 'orange', hasKillRightLabelAndHint[1], 7, Color.WHITE, None, None), 283 state.flagAgentInteractable: StateProperty(agentInteractableLabelAndHint[0], 'AgentInteractable', 'blue', agentInteractableLabelAndHint[1], 6, Color.WHITE, None, None), 284 state.flagWreckAlreadyOpened: StateProperty(wreckIsViewedLabelAndHint[0], 'WreckViewed', 'white', wreckIsViewedLabelAndHint[1], 1, Color.WHITE, None, None), 285 state.flagWreckEmpty: StateProperty(wreckIsEmptyLabelAndHint[0], 'WreckEmpty', 'white', wreckIsEmptyLabelAndHint[1], 1, Color.WHITE, None, None), 286 state.flagNoStanding: StateProperty(noStandingLabelAndHint[0], 'NoStanding', 'white', noStandingLabelAndHint[1], 4, Color.WHITE, None, noStandingLabelAndHint[0]), 287 state.flagAlliesAtWar: StateProperty(alliesAtWar[0], 'AlliesAtWar', 'darkBlue', alliesAtWar[1], 1, Color.WHITE, None, alliesAtWar[0]), 288 state.flagLimitedEngagement: StateProperty(limitedEngagementLabelAndHint[0], 'LimitedEngagement', 'black', limitedEngagementLabelAndHint[1], 5, TURQUOISE, 'turquoise', None), 289 state.flagDisapproval: StateProperty(disapprovalLabelAndHint[0], 'Disapproval', 'black', disapprovalLabelAndHint[1], 5, DISAPPROVAL_COLOR, None, None), 290 state.flagForcedOn: StateProperty('', 'ForcedOn', 'white', '', 4, Color.WHITE, None, None)} 291 self.defaultProp = StateProperty('', '', 'white', '', 6, Color.WHITE, None, '') 292 return self.props 293 294 def GetSmartFilterProps(self): 295 if self.smartFilterProps is None: 296 self.smartFilterProps = {state.flagWarpScrambledMWD: GetByLabel('UI/Services/State/InflightState/WarpScramblingMWD'), 297 state.flagWarpScrambled: GetByLabel('UI/Services/State/InflightState/WarpScrambling'), 298 state.flagWebified: GetByLabel('UI/Services/State/InflightState/Webified'), 299 state.flagECMd: GetByLabel('UI/Services/State/InflightState/Jamming'), 300 state.flagSensorDampened: GetByLabel('UI/Services/State/InflightState/SensorDamping'), 301 state.flagTrackingDisrupted: GetByLabel('UI/Services/State/InflightState/TrackingDisrupting'), 302 state.flagGuidanceDisrupted: GetByLabel('UI/Services/State/InflightState/GuidanceDisrupting'), 303 state.flagTargetPainted: GetByLabel('UI/Services/State/InflightState/Painting'), 304 state.flagEnergyLeeched: GetByLabel('UI/Services/State/InflightState/EnergyLeeched'), 305 state.flagEnergyNeut: GetByLabel('UI/Services/State/InflightState/EnergyNeutralizing'), 306 state.flagRemoteTracking: GetByLabel('UI/Services/State/InflightState/RemoteTracking'), 307 state.flagEnergyTransfer: GetByLabel('UI/Services/State/InflightState/EnergyTransfer'), 308 state.flagSensorBooster: GetByLabel('UI/Services/State/InflightState/SensorBooster'), 309 state.flagECCMProjector: GetByLabel('UI/Services/State/InflightState/ECCMProjector'), 310 state.flagRemoteHullRepair: GetByLabel('UI/Services/State/InflightState/RemoteHullRepair'), 311 state.flagRemoteArmorRepair: GetByLabel('UI/Services/State/InflightState/RemoteArmorRepair'), 312 state.flagShieldTransfer: GetByLabel('UI/Services/State/InflightState/ShieldTransfer')} 313 return self.smartFilterProps 314 315 @telemetry.ZONE_METHOD 316 def GetStateProps(self, st = None): 317 props = self.GetProps() 318 if st is not None: 319 if st in props: 320 return props[st] 321 else: 322 if self.shouldLogError: 323 log.LogTraceback('Bad state flag: %s' % st) 324 self.shouldLogError = False 325 return self.defaultProp 326 else: 327 return props 328 329 @telemetry.ZONE_METHOD 330 def GetActiveStateOrder(self, where): 331 cacheKey = 'ActiveStateOrder_' + where 332 if cacheKey in self.cachedStateSettings: 333 return self.cachedStateSettings[cacheKey] 334 return self.cachedStateSettings.setdefault(cacheKey, [ flag for flag in self.GetStateOrder(where) if self.GetStateState(where, flag) ]) 335 336 @telemetry.ZONE_METHOD 337 def GetActiveStateOrderFunctionNames(self, where): 338 cacheKey = 'ActiveStateOrderFunctionNames_' + where 339 if cacheKey in self.cachedStateSettings: 340 return self.cachedStateSettings[cacheKey] 341 return self.cachedStateSettings.setdefault(cacheKey, [ self.GetStateProps(flag).label for flag in self.GetActiveStateOrder(where) ]) 342 343 @telemetry.ZONE_METHOD 344 def GetStateOrder(self, where): 345 where = where.lower() 346 if where == 'background': 347 default = self.defaultBackgroundOrder 348 else: 349 default = self.defaultFlagOrder 350 configName = GetOrderConfigName(where) 351 ret = settings.user.overview.Get(configName, default) 352 if ret is None: 353 return default 354 ret.extend([ flag for flag in default if flag not in ret ]) 355 return ret 356 357 @telemetry.ZONE_METHOD 358 def GetStateState(self, where, flag): 359 return flag in self.GetStateStates(where) 360 361 @telemetry.ZONE_METHOD 362 def GetStateStates(self, where): 363 where = where.lower() 364 configName = GetStateConfigName(where) 365 ret = settings.user.overview.Get(configName) 366 if ret is None: 367 if where == 'background': 368 ret = self.defaultBackgroundStates 369 else: 370 ret = self.defaultFlagStates 371 return ret 372 373 @telemetry.ZONE_METHOD 374 def GetStateColors(self): 375 return GetStateColors() 376 377 @telemetry.ZONE_METHOD 378 def GetStateColor(self, flag, where = 'flag'): 379 self.InitColors() 380 color = self.stateColors.get((where, flag)) 381 if color: 382 return color 383 else: 384 color = self._GetDefaultColor(flag, where) 385 return color 386 387 def _GetDefaultColor(self, flag, where): 388 colors = self.GetStateColors() 389 defColor = None 390 if where == 'background': 391 defColor = self.GetStateProps(flag).defaultBackgroundColor 392 if defColor is None: 393 defColor = self.GetStateProps(flag).defaultColor 394 color = colors[defColor][0] 395 return color 396 397 def GetStateFlagColor(self, flagCode): 398 return self.GetStateColor(flagCode, 'flag') 399 400 def GetStateBackgroundColor(self, flagCode): 401 return self.GetStateColor(flagCode, 'background') 402 403 def GetStatePropsColorAndBlink(self, flagCode): 404 if not flagCode: 405 return None 406 return utillib.KeyVal(flagCode=flagCode, flagProperties=self.GetStateProps(flagCode), flagColor=self.GetStateFlagColor(flagCode), flagBlink=self.GetStateFlagBlink(flagCode)) 407 408 @telemetry.ZONE_METHOD 409 def GetStateBlink(self, where, flag): 410 defBlink = self.defaultBlinkStates.get((where, flag), 0) 411 return settings.user.overview.Get(osConst.SETTING_STATE_BLINKS, {}).get((where, flag), defBlink) 412 413 def GetStateFlagBlink(self, flagCode): 414 return self.GetStateBlink('flag', flagCode) 415 416 def GetStateBackgroundBlink(self, flagCode): 417 return self.GetStateBlink('background', flagCode) 418 419 @telemetry.ZONE_METHOD 420 def GetEwarGraphicID(self, ewarType): 421 flag, gid = self.ewarStates[ewarType] 422 return gid 423 424 def GetEwarTypes(self): 425 return self.ewarStateItems 426 427 def GetEwarFlag(self, ewarType): 428 flag, gid = self.ewarStates[ewarType] 429 return flag 430 431 def GetEwarTypeByEwarState(self, flag = None): 432 if not getattr(self, 'ewartypebystate', {}): 433 ret = {} 434 for ewarType, (f, gid) in self.ewarStateItems: 435 ret[f] = ewarType 436 437 self.ewartypebystate = ret 438 if flag: 439 return self.ewartypebystate[flag] 440 return self.ewartypebystate 441 442 def GetEwarHint(self, ewarType): 443 flag, gid = self.ewarStates[ewarType] 444 return self.GetSmartFilterProps()[flag] 445 446 def GetFixedColorSettings(self): 447 stateColors = settings.user.overview.Get(osConst.SETTING_STATE_COLORS, {}) 448 newStatesColors = {} 449 for flag, color in stateColors.iteritems(): 450 if isinstance(flag, tuple): 451 newStatesColors[flag] = color 452 else: 453 newStatesColors['flag', flag] = color 454 newStatesColors['background', flag] = color 455 456 settings.user.overview.Set(osConst.SETTING_STATE_COLORS, newStatesColors) 457 return newStatesColors 458 459 def SetStateColor(self, where, flag, color): 460 self.InitColors() 461 self.stateColors[where, flag] = color 462 settings.user.overview.Set(osConst.SETTING_STATE_COLORS, self.stateColors.copy()) 463 self.cachedStateSettings = {} 464 self.NotifyOnStateSetupChange('stateColor') 465 466 def SetStateBlink(self, where, flag, blink): 467 stateBlinks = settings.user.overview.Get(osConst.SETTING_STATE_BLINKS, {}) 468 stateBlinks[where, flag] = blink 469 settings.user.overview.Set(osConst.SETTING_STATE_BLINKS, stateBlinks) 470 self.cachedStateSettings = {} 471 self.NotifyOnStateSetupChange('stateBlink') 472 473 def InitColors(self, reset = 0): 474 if reset: 475 self.cachedStateSettings = {} 476 if not self.stateColorsInited or reset: 477 self.stateColors = self.GetFixedColorSettings() 478 self.stateColorsInited = 1 479 480 def ResetColors(self): 481 settings.user.overview.Set(osConst.SETTING_STATE_COLORS, {}) 482 self.cachedStateSettings = {} 483 self.InitColors(reset=True) 484 self.NotifyOnStateSetupChange('stateColor') 485 486 def InitFilter(self): 487 self.filterCategs = {invConst.categoryShip, 488 invConst.categoryEntity, 489 invConst.categoryDrone, 490 invConst.categoryFighter} 491 self.updateCategs = self.filterCategs.copy() 492 self.filterGroups = {invConst.groupCargoContainer, 493 invConst.groupSecureCargoContainer, 494 invConst.groupStargate, 495 invConst.groupWarpGate, 496 invConst.groupAbyssalTraces, 497 invConst.groupAgentsinSpace, 498 invConst.groupCosmicSignature, 499 invConst.groupHarvestableCloud, 500 invConst.groupForceField, 501 invConst.groupWreck} 502 applyToStructures = sm.GetService('overviewPresetSvc').GetSettingValueOrDefaultFromName(osConst.SETTING_NAME_APPLY_STRUCTURE, True) 503 applyToOtherObjects = sm.GetService('overviewPresetSvc').GetSettingValueOrDefaultFromName(osConst.SETTING_NAME_APPLY_OTHER_OBJ, False) 504 if applyToOtherObjects: 505 self.updateGroups = self.filterGroups.copy() 506 else: 507 self.updateGroups = set() 508 if applyToStructures: 509 self.updateCategs.add(invConst.categoryStarbase) 510 self.updateCategs.add(invConst.categorySovereigntyStructure) 511 self.updateCategs.add(invConst.categoryStructure) 512 self.updateCategs.add(invConst.categoryStation) 513 self.updateGroups.add(invConst.groupStargate) 514 settings.user.ui.Set('linkedWeapons_groupsDict', {}) 515 516 def ChangeStateOrder(self, where, flag, idx): 517 current = self.GetStateOrder(where)[:] 518 while flag in current: 519 current.remove(flag) 520 521 if idx == -1: 522 idx = len(current) 523 current.insert(idx, flag) 524 configName = GetOrderConfigName(where.lower()) 525 settings.user.overview.Set(configName, current) 526 self.cachedStateSettings = {} 527 self.NotifyOnStateSetupChange('flagOrder') 528 529 def ChangeStateState(self, where, flag, true): 530 current = self.GetStateStates(where)[:] 531 while flag in current: 532 current.remove(flag) 533 534 if true: 535 current.append(flag) 536 configName = GetStateConfigName(where.lower()) 537 settings.user.overview.Set(configName, current) 538 self.cachedStateSettings = {} 539 self.NotifyOnStateSetupChange('flagState') 540 541 def ChangeLabelOrder(self, oldidx, idx): 542 labels = self.GetShipLabels() 543 label = labels.pop(oldidx) 544 if idx == -1: 545 idx = len(labels) 546 labels.insert(idx, label) 547 settings.user.overview.Set(osConst.SETTINGS_SHIP_LABELS, labels) 548 self.cachedStateSettings = {} 549 sm.GetService('bracket').UpdateLabels() 550 sm.ScatterEvent('OnOverviewLabelOrderChanged') 551 552 def ChangeShipLabels(self, flag, isSelected): 553 labels = self.GetShipLabels() 554 flagType = flag[oConst.LABEL_TYPE] 555 flag[oConst.LABEL_STATE] = isSelected 556 for i in xrange(len(labels)): 557 if labels[i][oConst.LABEL_TYPE] == flagType: 558 labels[i] = flag 559 break 560 561 settings.user.overview.Set(osConst.SETTINGS_SHIP_LABELS, labels) 562 self.cachedStateSettings = {} 563 sm.GetService('bracket').UpdateLabels() 564 sm.ScatterEvent('OnShipLabelsUpdated') 565 566 def SetDefaultShipLabel(self, setting): 567 hideCorpTickerDefault = sm.GetService('overviewPresetSvc').GetDefaultSettingValueFromName(osConst.SETTING_HIDE_CORP_TICKER, False) 568 allLabels = self.GetAllShipLabels() 569 defaults = {'default': (hideCorpTickerDefault, allLabels), 570 'ally': (hideCorpTickerDefault, [ShipLabel(onState=1, preText=oConst.CHAR_NONE, labelType=oConst.LABEL_TYPE_PILOT, postText=oConst.CHAR_NONE).GetDict(), 571 ShipLabel(onState=1, preText=oConst.CHAR_SPACE + oConst.L_SQ_BRACKET, labelType=oConst.LABEL_TYPE_CORP, postText=oConst.CHAR_NONE).GetDict(), 572 ShipLabel(onState=1, preText=oConst.CHAR_COMMA, labelType=oConst.LABEL_TYPE_ALLIANCE, postText=oConst.CHAR_NONE).GetDict(), 573 ShipLabel(onState=1, preText=oConst.R_SQ_BRACKET, labelType=oConst.LABEL_TYPE_NONE, postText=oConst.CHAR_NONE).GetDict(), 574 ShipLabel(onState=0, preText=oConst.APOSTROPHE, labelType=oConst.LABEL_TYPE_SHIP_NAME, postText=oConst.APOSTROPHE).GetDict(), 575 ShipLabel(onState=0, preText=oConst.L_BRACKET, labelType=oConst.LABEL_TYPE_SHIP_TYPE, postText=oConst.R_BRACKET).GetDict()]), 576 'corpally': (hideCorpTickerDefault, [ShipLabel(onState=1, preText=oConst.CHAR_SPACE + oConst.L_SQ_BRACKET, labelType=oConst.LABEL_TYPE_CORP, postText=oConst.R_SQ_BRACKET).GetDict(), 577 ShipLabel(onState=1, preText=oConst.CHAR_NONE, labelType=oConst.LABEL_TYPE_PILOT, postText=oConst.CHAR_NONE).GetDict(), 578 ShipLabel(onState=1, preText=oConst.CODE_LT, labelType=oConst.LABEL_TYPE_ALLIANCE, postText=oConst.CODE_GT).GetDict(), 579 ShipLabel(onState=0, preText=oConst.APOSTROPHE, labelType=oConst.LABEL_TYPE_SHIP_NAME, postText=oConst.APOSTROPHE).GetDict(), 580 ShipLabel(onState=0, preText=oConst.L_BRACKET, labelType=oConst.LABEL_TYPE_SHIP_TYPE, postText=oConst.R_BRACKET).GetDict(), 581 ShipLabel(onState=0, preText=oConst.L_SQ_BRACKET, labelType=oConst.LABEL_TYPE_NONE, postText=oConst.R_SQ_BRACKET).GetDict()])} 582 settings.user.overview.Set(osConst.SETTING_HIDE_CORP_TICKER, defaults.get(setting, 'default')[0]) 583 self.shipLabels = defaults.get(setting, 'default')[1] 584 settings.user.overview.Set(osConst.SETTINGS_SHIP_LABELS, self.shipLabels) 585 self.cachedStateSettings = {} 586 sm.GetService('bracket').UpdateLabels() 587 588 def NotifyOnStateSetupChange(self, reason): 589 self.notifyStateChangeTimer = timerstuff.AutoTimer(1000, self._NotifyOnStateSetupChange, reason) 590 591 def _NotifyOnStateSetupChange(self, reason): 592 self.notifyStateChangeTimer = None 593 sm.ScatterEvent('OnStateSetupChange', reason) 594 595 @telemetry.ZONE_METHOD 596 def CheckIfUpdateItem(self, slimItem): 597 return getattr(slimItem, 'categoryID', None) in self.updateCategs or getattr(slimItem, 'groupID', None) in self.updateGroups 598 599 @telemetry.ZONE_METHOD 600 def CheckIfFilterItem(self, slimItem): 601 return getattr(slimItem, 'categoryID', None) in self.filterCategs or getattr(slimItem, 'groupID', None) in self.filterGroups 602 603 @telemetry.ZONE_METHOD 604 def GetStates(self, itemID, flags): 605 ret = [] 606 for flag in flags: 607 if flag in self.exclusive: 608 ret.append(itemID == self.exclusives.get(flag, 0)) 609 continue 610 ret.append(self.states.get(flag, {}).get(itemID, 0)) 611 612 return ret 613 614 def GetState(self, itemID, flag): 615 if flag not in self.states: 616 return False 617 else: 618 return itemID in self.states[flag] 619 620 def GetStatesForFlag(self, flag): 621 return self.states.get(flag, {}).keys() 622 623 @telemetry.ZONE_METHOD 624 def GetExclState(self, flag): 625 return self.exclusives.get(flag, None) 626 627 @telemetry.ZONE_METHOD 628 def DoExclusive(self, itemID, flag, true, *args): 629 excl = self.exclusives.get(flag, None) 630 if true: 631 if excl and excl != itemID: 632 sm.ScatterEvent('OnStateChange', excl, flag, 0, *args) 633 sm.ScatterEvent('OnStateChange', itemID, flag, 1, *args) 634 self.exclusives[flag] = itemID 635 else: 636 sm.ScatterEvent('OnStateChange', itemID, flag, 0, *args) 637 self.exclusives[flag] = None 638 639 @telemetry.ZONE_METHOD 640 def SetState(self, itemID, flag, value, *args): 641 self.LogInfo('SetState', itemID, flag, value, *args) 642 if flag in self.exclusive: 643 self.DoExclusive(itemID, flag, value, *args) 644 return 645 states = self.states.get(flag, {}) 646 if value: 647 states[itemID] = value 648 elif itemID in states: 649 del states[itemID] 650 if states: 651 self.states[flag] = states 652 elif flag in self.states: 653 del self.states[flag] 654 self.LogInfo('Before OnStateChange', itemID, flag, value, *args) 655 sm.ScatterEvent('OnStateChange', itemID, flag, value, *args) 656 657 def ResetByFlag(self, flag): 658 if flag not in self.states: 659 return 660 for itemID in self.states[flag].keys(): 661 sm.ScatterEvent('OnStateChange', itemID, flag, False) 662 663 del self.states[flag] 664 665 def DoBallClear(self, *etc): 666 self.states = {} 667 668 @telemetry.ZONE_METHOD 669 def DoBallsRemove(self, pythonBalls, isRelease): 670 for ball, slimItem, terminal in pythonBalls: 671 self.DoBallRemove(ball, slimItem, terminal) 672 673 def DoBallRemove(self, ball, slimItem, terminal): 674 if ball is None: 675 return 676 if ball.id in self.exclusives.itervalues(): 677 for state in self.exclusive: 678 if self.GetExclState(state) == ball.id: 679 self.SetState(ball.id, state, 0) 680 681 if ball.id == session.shipid: 682 return 683 for stateDict in self.states.values(): 684 if ball.id in stateDict: 685 del stateDict[ball.id] 686 687 def GetAllShipLabels(self): 688 return [ShipLabel(onState=1, preText=oConst.CHAR_NONE, labelType=oConst.LABEL_TYPE_SHIP_TYPE, postText=oConst.CHAR_SPACE).GetDict(), 689 ShipLabel(onState=1, preText=oConst.CODE_LT, labelType=oConst.LABEL_TYPE_ALLIANCE, postText=oConst.CODE_GT).GetDict(), 690 ShipLabel(onState=1, preText=oConst.L_SQ_BRACKET, labelType=oConst.LABEL_TYPE_CORP, postText=oConst.R_SQ_BRACKET).GetDict(), 691 ShipLabel(onState=1, preText=oConst.CHAR_SPACE, labelType=oConst.LABEL_TYPE_PILOT, postText=oConst.CHAR_SPACE).GetDict(), 692 ShipLabel(onState=0, preText=oConst.APOSTROPHE, labelType=oConst.LABEL_TYPE_SHIP_NAME, postText=oConst.APOSTROPHE).GetDict(), 693 ShipLabel(onState=0, preText=oConst.L_SQ_BRACKET, labelType=None, postText=oConst.CHAR_NONE).GetDict()] 694 695 def GetShipLabels(self): 696 if not getattr(self, 'shipLabels', None): 697 self.shipLabels = settings.user.overview.Get(osConst.SETTINGS_SHIP_LABELS, None) or self.GetAllShipLabels() 698 return self.shipLabels 699 700 @telemetry.ZONE_METHOD 701 def GetIconAndBackgroundFlags(self, slimItem): 702 if slimItem is None: 703 return (0, 0) 704 flag = self.CheckStates(slimItem, 'flag') 705 background = self.CheckStates(slimItem, 'background') 706 return (flag or 0, background or 0) 707 708 @telemetry.ZONE_METHOD 709 def CheckStates(self, slimItem, what): 710 if slimItem is None: 711 return 712 if not (slimItem.ownerID in [None, invConst.ownerSystem] or idCheckers.IsNPC(slimItem.ownerID)): 713 relationships = self._GetRelationship(slimItem) 714 else: 715 relationships = None 716 for functionName in self.GetActiveStateOrderFunctionNames(what): 717 fullFunctionName = 'Check' + functionName 718 checkFunction = getattr(self, fullFunctionName, None) 719 if checkFunction: 720 if checkFunction(slimItem, relationships): 721 return getattr(state, 'flag' + functionName, None) 722 723 @telemetry.ZONE_METHOD 724 def CheckFilteredFlagState(self, slimItem, excludedFlags = ()): 725 if slimItem is None: 726 return 0 727 if not (slimItem.ownerID in [None, invConst.ownerSystem] or idCheckers.IsNPC(slimItem.ownerID)): 728 relationships = self._GetRelationship(slimItem) 729 else: 730 relationships = None 731 for flag in self.GetActiveStateOrder('flag'): 732 if flag in excludedFlags: 733 continue 734 flagName = self.GetStateProps(flag).label 735 fullFunctionName = 'Check' + flagName 736 checkFunction = getattr(self, fullFunctionName, None) 737 if checkFunction: 738 if checkFunction(slimItem, relationships): 739 return getattr(state, 'flag' + flagName, 0) 740 741 return 0 742 743 @telemetry.ZONE_METHOD 744 def _GetRelationship(self, item): 745 allianceID = getattr(item, 'allianceID', None) 746 ownerID = getattr(item, 'ownerID', None) 747 corpID = getattr(item, 'corpID', None) 748 return sm.GetService('addressbook').GetRelationship(ownerID, corpID, allianceID) 749 750 @telemetry.ZONE_METHOD 751 def IsStandingRelevant(self, slimItem): 752 ownerID = slimItem.ownerID 753 if ownerID is None or ownerID == invConst.ownerSystem or idCheckers.IsNPC(ownerID): 754 return False 755 return True 756 757 @telemetry.ZONE_METHOD 758 def CheckStandingHigh(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 759 if not self.IsStandingRelevant(slimItem): 760 return False 761 if relationships is NORELATIONSHIP_SENTINEL: 762 relationships = self._GetRelationship(slimItem) 763 if not relationships: 764 return False 765 if getattr(slimItem, 'categoryID', None) not in invConst.stateFilteredCategories: 766 return False 767 if self.IfAnyRelations(IsHighStanding, self.GetAllRelationshipGroups(relationships)): 768 return True 769 return False 770 771 @telemetry.ZONE_METHOD 772 def CheckStandingGood(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 773 if not self.IsStandingRelevant(slimItem): 774 return False 775 if relationships is NORELATIONSHIP_SENTINEL: 776 relationships = self._GetRelationship(slimItem) 777 if not relationships: 778 return False 779 if getattr(slimItem, 'categoryID', None) not in invConst.stateFilteredCategories: 780 return False 781 if self.IfAnyRelations(IsGoodStanding, self.GetAllRelationshipGroups(relationships)): 782 return True 783 return False 784 785 @telemetry.ZONE_METHOD 786 def CheckStandingNeutral(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 787 if not self.IsStandingRelevant(slimItem): 788 return False 789 if relationships is NORELATIONSHIP_SENTINEL: 790 relationships = self._GetRelationship(slimItem) 791 if not relationships: 792 return False 793 if getattr(slimItem, 'categoryID', None) not in invConst.stateFilteredCategories: 794 return False 795 if relationships.hasRelationship: 796 if not self.IfAllRelations(IsNeutralStanding, self.GetAllRelationshipGroups(relationships)): 797 return False 798 if not self.CheckSamePlayerCorp(slimItem) and not self.CheckSameNpcCorp(slimItem) and not self.CheckSameAlliance(slimItem): 799 return True 800 return False 801 802 @telemetry.ZONE_METHOD 803 def CheckStandingBad(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 804 if not self.IsStandingRelevant(slimItem): 805 return False 806 if relationships is NORELATIONSHIP_SENTINEL: 807 relationships = self._GetRelationship(slimItem) 808 if not relationships: 809 return False 810 if getattr(slimItem, 'categoryID', None) not in invConst.stateFilteredCategories: 811 return False 812 if self.IfAnyRelations(IsBadStanding, self.GetAllRelationshipGroups(relationships)): 813 return True 814 return False 815 816 @telemetry.ZONE_METHOD 817 def CheckStandingHorrible(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 818 if not self.IsStandingRelevant(slimItem): 819 return False 820 if relationships is NORELATIONSHIP_SENTINEL: 821 relationships = self._GetRelationship(slimItem) 822 if not relationships: 823 return False 824 if getattr(slimItem, 'categoryID', None) not in invConst.stateFilteredCategories: 825 return False 826 if self.IfAnyRelations(IsHorribleStanding, self.GetAllRelationshipGroups(relationships)): 827 return True 828 return False 829 830 def GetAllRelationshipGroups(self, relationships): 831 ret = [] 832 ret.extend(self.GetAllianceRelationshipGroups(relationships)) 833 ret.extend(self.GetCorpRelationshipGroups(relationships)) 834 ret.extend(self.GetPersonalRelationshipGroups(relationships)) 835 return ret 836 837 def GetAllianceRelationshipGroups(self, relationships): 838 return (relationships.allianceToPers, relationships.allianceToCorp, relationships.allianceToAlliance) 839 840 def GetCorpRelationshipGroups(self, relationships): 841 return (relationships.corpToPers, relationships.corpToCorp, relationships.corpToAlliance) 842 843 def GetPersonalRelationshipGroups(self, relationships): 844 return (relationships.persToPers, relationships.persToCorp, relationships.persToAlliance) 845 846 def IfAnyRelations(self, standingCheck, relationshipGroup): 847 return any((standingCheck(relationship) for relationship in relationshipGroup)) 848 849 def IfAllRelations(self, standingCheck, relationshipGroup): 850 return all((standingCheck(relationship) for relationship in relationshipGroup)) 851 852 @telemetry.ZONE_METHOD 853 def CheckSamePlayerCorp(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 854 if self.logme: 855 self.LogInfo('Tactical::CheckSamePlayerCorp', slimItem) 856 return not IsNPCCorporation(session.corpid) and self._CheckInSameCorp(slimItem) 857 858 @telemetry.ZONE_METHOD 859 def CheckSameNpcCorp(self, slimItem, *args): 860 if self.logme: 861 self.LogInfo('Tactical::CheckSameNpcCorp', slimItem) 862 return IsNPCCorporation(session.corpid) and self._CheckInSameCorp(slimItem) 863 864 def _CheckInSameCorp(self, slimItem): 865 return getattr(slimItem, 'corpID', None) == session.corpid and getattr(slimItem, 'categoryID', None) in invConst.stateFilteredCategories 866 867 @telemetry.ZONE_METHOD 868 def CheckSameAlliance(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 869 if self.logme: 870 self.LogInfo('Tactical::CheckSameAlliance', slimItem) 871 return session.allianceid and getattr(slimItem, 'allianceID', None) == session.allianceid and getattr(slimItem, 'categoryID', None) in invConst.stateFilteredCategories 872 873 @telemetry.ZONE_METHOD 874 def CheckSameFleet(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 875 if self.logme: 876 self.LogInfo('Tactical::CheckSameFleet', slimItem) 877 if session.fleetid: 878 charID = self.GetCharIDForSlimItem(slimItem) 879 if charID or getattr(slimItem, 'categoryID', None) in DRONES_AND_FIGHTERS: 880 if charID is None: 881 charID = slimItem.ownerID 882 return sm.GetService('fleet').IsMember(charID) 883 return 0 884 885 @telemetry.ZONE_METHOD 886 def CheckSameMilitia(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 887 if self.logme: 888 self.LogInfo('Tactical::CheckSameMilitia', slimItem) 889 if session.warfactionid: 890 if (getattr(slimItem, 'charID', None) or getattr(slimItem, 'categoryID', None) in CATEGORIES_WITH_WARFACTIONID) and getattr(slimItem, 'corpID', None): 891 slimItemWarFactionID = getattr(slimItem, 'warFactionID', None) 892 if slimItemWarFactionID is not None: 893 return IsMyFwFaction(slimItemWarFactionID) 894 return 0 895 896 @telemetry.ZONE_METHOD 897 def CheckAgentInteractable(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 898 if self.logme: 899 self.LogInfo('Tactical::CheckAgentInteractable', slimItem) 900 return getattr(slimItem, 'groupID', None) == invConst.groupAgentsinSpace 901 902 @telemetry.ZONE_METHOD 903 def CheckIsWanted(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 904 if self.logme: 905 self.LogInfo('Tactical::CheckIsWanted', slimItem) 906 return self.bountySvc.QuickHasBounty(slimItem) 907 908 @telemetry.ZONE_METHOD 909 def CheckHasKillRight(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 910 if self.logme: 911 self.LogInfo('Tactical::CheckIsWanted', slimItem) 912 charID = self.GetCharIDForSlimItem(slimItem) 913 if not charID: 914 return False 915 return self.bountySvc.QuickHasKillRight(slimItem) 916 917 @telemetry.ZONE_METHOD 918 def CheckAtWarCanFight(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 919 if self.logme: 920 self.LogInfo('Tactical::CheckAtWarCanFight', slimItem) 921 ownerId = getattr(slimItem, 'allianceID', None) or getattr(slimItem, 'corpID', None) 922 if ownerId: 923 if ownerId not in self.atWar: 924 self.atWar[ownerId] = sm.StartService('war').GetRelationship(ownerId) 925 return self.atWar[ownerId] == warConst.warRelationshipAtWarCanFight 926 else: 927 return 0 928 929 @telemetry.ZONE_METHOD 930 def CheckAlliesAtWar(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 931 if self.logme: 932 self.LogInfo('Tactical::CheckAlliesAtWar', slimItem) 933 ownerID = getattr(slimItem, 'allianceID', None) or getattr(slimItem, 'corpID', None) 934 if ownerID is not None: 935 if ownerID not in self.alliesAtWar: 936 self.alliesAtWar[ownerID] = sm.GetService('war').GetRelationship(ownerID) 937 return self.alliesAtWar[ownerID] == warConst.warRelationshipAlliesAtWar 938 return 0 939 940 @telemetry.ZONE_METHOD 941 def CheckAtWarMilitia(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 942 if self.logme: 943 self.LogInfo('Tactical::CheckAtWarMilitia', slimItem) 944 if session.warfactionid and getattr(slimItem, 'warFactionID', None): 945 warKey = (slimItem.warFactionID, session.warfactionid) 946 if warKey not in self.atWar: 947 self.atWar[warKey] = IsMyCombatEnemyFaction(slimItem.warFactionID) 948 return self.atWar[warKey] == True 949 return 0 950 951 @telemetry.ZONE_METHOD 952 def CheckDangerous(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 953 if self.logme: 954 self.LogInfo('Tactical::CheckDangerous', slimItem) 955 if self.GetCharIDForSlimItem(slimItem) and -0.1 > (getattr(slimItem, 'securityStatus', None) or 0) >= appConst.outlawSecurityStatus: 956 return 1 957 return 0 958 959 @telemetry.ZONE_METHOD 960 def CheckOutlaw(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 961 if self.logme: 962 self.LogInfo('Tactical::CheckOutlaw', slimItem) 963 if self.GetCharIDForSlimItem(slimItem) and eveCfg.IsOutlawStatus(getattr(slimItem, 'securityStatus', None) or 0): 964 return 1 965 return 0 966 967 @telemetry.ZONE_METHOD 968 def CheckWreckEmpty(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 969 return getattr(slimItem, 'groupID', None) == invConst.groupWreck and slimItem.isEmpty 970 971 @telemetry.ZONE_METHOD 972 def CheckNoStanding(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 973 if relationships is NORELATIONSHIP_SENTINEL: 974 relationships = self._GetRelationship(slimItem) 975 return (not relationships or not relationships.hasRelationship) and idCheckers.IsCharacter(getattr(slimItem, 'ownerID', None)) and getattr(slimItem, 'categoryID', None) in invConst.stateFilteredCategories 976 977 @telemetry.ZONE_METHOD 978 def CheckWreckViewed(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 979 return sm.GetService('wreck').IsViewedWreck(slimItem.itemID) 980 981 @telemetry.ZONE_METHOD 982 def CheckCriminal(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 983 charID = self.GetCharIDForSlimItem(slimItem) 984 if charID is not None: 985 return sm.GetService('crimewatchSvc').IsCriminal(charID) 986 return False 987 988 @telemetry.ZONE_METHOD 989 def CheckSuspect(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 990 charID = self.GetCharIDForSlimItem(slimItem) 991 if charID is not None: 992 return sm.GetService('crimewatchSvc').IsSuspect(charID) 993 return False 994 995 @telemetry.ZONE_METHOD 996 def CheckDisapproval(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 997 charID = self.GetCharIDForSlimItem(slimItem) 998 if charID is not None: 999 return sm.GetService('crimewatchSvc').IsDisapproved(charID) 1000 return False 1001 1002 def CheckLimitedEngagement(self, slimItem, relationships = NORELATIONSHIP_SENTINEL): 1003 charID = self.GetCharIDForSlimItem(slimItem) 1004 if charID is not None: 1005 return sm.GetService('crimewatchSvc').HasLimitedEngagmentWith(charID) 1006 return False 1007 1008 def CheckMultiSelected(self, slimItem): 1009 return slimItem.itemID in self.states[state.multiSelected] 1010 1011 def GetCharIDForSlimItem(self, slimItem): 1012 charID = getattr(slimItem, 'charID', None) 1013 if charID and self.IsSlimItemStructure(slimItem): 1014 return 1015 return charID 1016 1017 def IsSlimItemStructure(self, slimItem): 1018 return getattr(slimItem, 'categoryID', None) == appConst.categoryStructure 1019 1020 1021 def GetNPCGroups(): 1022 npcGroups = {GetByLabel('UI/Services/State/NonPlayerCharacter/Generic'): {GetByLabel('UI/Services/State/NonPlayerCharacter/Pirate'): [invConst.groupAsteroidAngelCartelBattleCruiser, 1023 invConst.groupAsteroidAngelCartelBattleship, 1024 invConst.groupAsteroidAngelCartelCruiser, 1025 invConst.groupAsteroidAngelCartelDestroyer, 1026 invConst.groupAsteroidAngelCartelFrigate, 1027 invConst.groupAsteroidAngelCartelHauler, 1028 invConst.groupAsteroidAngelCartelOfficer, 1029 invConst.groupAsteroidBloodRaidersBattleCruiser, 1030 invConst.groupAsteroidBloodRaidersBattleship, 1031 invConst.groupAsteroidBloodRaidersCruiser, 1032 invConst.groupAsteroidBloodRaidersDestroyer, 1033 invConst.groupAsteroidBloodRaidersFrigate, 1034 invConst.groupAsteroidBloodRaidersHauler, 1035 invConst.groupAsteroidBloodRaidersOfficer, 1036 invConst.groupAsteroidGuristasBattleCruiser, 1037 invConst.groupAsteroidGuristasBattleship, 1038 invConst.groupAsteroidGuristasCruiser, 1039 invConst.groupAsteroidGuristasDestroyer, 1040 invConst.groupAsteroidGuristasFrigate, 1041 invConst.groupAsteroidGuristasHauler, 1042 invConst.groupAsteroidGuristasOfficer, 1043 invConst.groupAsteroidSanshasNationBattleCruiser, 1044 invConst.groupAsteroidSanshasNationBattleship, 1045 invConst.groupAsteroidSanshasNationCruiser, 1046 invConst.groupAsteroidSanshasNationDestroyer, 1047 invConst.groupAsteroidSanshasNationFrigate, 1048 invConst.groupAsteroidSanshasNationHauler, 1049 invConst.groupAsteroidSanshasNationOfficer, 1050 invConst.groupAsteroidSerpentisBattleCruiser, 1051 invConst.groupAsteroidSerpentisBattleship, 1052 invConst.groupAsteroidSerpentisCruiser, 1053 invConst.groupAsteroidSerpentisDestroyer, 1054 invConst.groupAsteroidSerpentisFrigate, 1055 invConst.groupAsteroidSerpentisHauler, 1056 invConst.groupAsteroidSerpentisOfficer, 1057 invConst.groupDeadspaceAngelCartelBattleCruiser, 1058 invConst.groupDeadspaceAngelCartelBattleship, 1059 invConst.groupDeadspaceAngelCartelCruiser, 1060 invConst.groupDeadspaceAngelCartelDestroyer, 1061 invConst.groupDeadspaceAngelCartelFrigate, 1062 invConst.groupDeadspaceBloodRaidersBattleCruiser, 1063 invConst.groupDeadspaceBloodRaidersBattleship, 1064 invConst.groupDeadspaceBloodRaidersCruiser, 1065 invConst.groupDeadspaceBloodRaidersDestroyer, 1066 invConst.groupDeadspaceBloodRaidersFrigate, 1067 invConst.groupDeadspaceGuristasBattleCruiser, 1068 invConst.groupDeadspaceGuristasBattleship, 1069 invConst.groupDeadspaceGuristasCruiser, 1070 invConst.groupDeadspaceGuristasDestroyer, 1071 invConst.groupDeadspaceGuristasFrigate, 1072 invConst.groupDeadspaceSanshasNationBattleCruiser, 1073 invConst.groupDeadspaceSanshasNationBattleship, 1074 invConst.groupDeadspaceSanshasNationCruiser, 1075 invConst.groupDeadspaceSanshasNationDestroyer, 1076 invConst.groupDeadspaceSanshasNationFrigate, 1077 invConst.groupDeadspaceSerpentisBattleCruiser, 1078 invConst.groupDeadspaceSerpentisBattleship, 1079 invConst.groupDeadspaceSerpentisCruiser, 1080 invConst.groupDeadspaceSerpentisDestroyer, 1081 invConst.groupDeadspaceSerpentisFrigate, 1082 invConst.groupDeadspaceSleeperSleeplessPatroller, 1083 invConst.groupDeadspaceSleeperSleeplessSentinel, 1084 invConst.groupDeadspaceSleeperSleeplessDefender, 1085 invConst.groupDeadspaceSleeperAwakenedPatroller, 1086 invConst.groupDeadspaceSleeperAwakenedSentinel, 1087 invConst.groupDeadspaceSleeperAwakenedDefender, 1088 invConst.groupDeadspaceSleeperEmergentPatroller, 1089 invConst.groupDeadspaceSleeperEmergentSentinel, 1090 invConst.groupDeadspaceSleeperEmergentDefender, 1091 invConst.groupAsteroidAngelCartelCommanderBattleCruiser, 1092 invConst.groupAsteroidAngelCartelCommanderCruiser, 1093 invConst.groupAsteroidAngelCartelCommanderDestroyer, 1094 invConst.groupAsteroidAngelCartelCommanderFrigate, 1095 invConst.groupAsteroidBloodRaidersCommanderBattleCruiser, 1096 invConst.groupAsteroidBloodRaidersCommanderCruiser, 1097 invConst.groupAsteroidBloodRaidersCommanderDestroyer, 1098 invConst.groupAsteroidBloodRaidersCommanderFrigate, 1099 invConst.groupAsteroidGuristasCommanderBattleCruiser, 1100 invConst.groupAsteroidGuristasCommanderCruiser, 1101 invConst.groupAsteroidGuristasCommanderDestroyer, 1102 invConst.groupAsteroidGuristasCommanderFrigate, 1103 invConst.groupAsteroidRogueDroneBattleCruiser, 1104 invConst.groupAsteroidRogueDroneBattleship, 1105 invConst.groupAsteroidRogueDroneCruiser, 1106 invConst.groupAsteroidRogueDroneDestroyer, 1107 invConst.groupAsteroidRogueDroneFrigate, 1108 invConst.groupAsteroidRogueDroneHauler, 1109 invConst.groupAsteroidRogueDroneSwarm, 1110 invConst.groupAsteroidRogueDroneOfficer, 1111 invConst.groupAsteroidSanshasNationCommanderBattleCruiser, 1112 invConst.groupAsteroidSanshasNationCommanderCruiser, 1113 invConst.groupAsteroidSanshasNationCommanderDestroyer, 1114 invConst.groupAsteroidSanshasNationCommanderFrigate, 1115 invConst.groupAsteroidSerpentisCommanderBattleCruiser, 1116 invConst.groupAsteroidSerpentisCommanderCruiser, 1117 invConst.groupAsteroidSerpentisCommanderDestroyer, 1118 invConst.groupAsteroidSerpentisCommanderFrigate, 1119 invConst.groupDeadspaceRogueDroneBattleCruiser, 1120 invConst.groupDeadspaceRogueDroneBattleship, 1121 invConst.groupDeadspaceRogueDroneCruiser, 1122 invConst.groupDeadspaceRogueDroneDestroyer, 1123 invConst.groupDeadspaceRogueDroneFrigate, 1124 invConst.groupDeadspaceRogueDroneSwarm, 1125 invConst.groupDeadspaceOverseerFrigate, 1126 invConst.groupDeadspaceOverseerCruiser, 1127 invConst.groupDeadspaceOverseerBattleship, 1128 invConst.groupAsteroidRogueDroneCommanderFrigate, 1129 invConst.groupAsteroidRogueDroneCommanderDestroyer, 1130 invConst.groupAsteroidRogueDroneCommanderCruiser, 1131 invConst.groupAsteroidRogueDroneCommanderBattleCruiser, 1132 invConst.groupAsteroidRogueDroneCommanderBattleship, 1133 invConst.groupAsteroidAngelCartelCommanderBattleship, 1134 invConst.groupAsteroidBloodRaidersCommanderBattleship, 1135 invConst.groupAsteroidGuristasCommanderBattleship, 1136 invConst.groupAsteroidSanshasNationCommanderBattleship, 1137 invConst.groupAsteroidSerpentisCommanderBattleship, 1138 invConst.groupMissionAmarrEmpireCarrier, 1139 invConst.groupMissionCaldariStateCarrier, 1140 invConst.groupMissionGallenteFederationCarrier, 1141 invConst.groupMissionMinmatarRepublicCarrier, 1142 invConst.groupMissionFighterDrone, 1143 invConst.groupMissionGenericFreighters, 1144 invConst.groupInvasionSanshaNationBattleship, 1145 invConst.groupInvasionSanshaNationCapital, 1146 invConst.groupInvasionSanshaNationCruiser, 1147 invConst.groupInvasionSanshaNationFrigate, 1148 invConst.groupInvasionSanshaNationIndustrial, 1149 invConst.groupGhostSitesAngelCartelCruiser, 1150 invConst.groupGhostSitesBloodRaidersCruiser, 1151 invConst.groupGhostSitesGuristasCruiser, 1152 invConst.groupGhostSitesSanshasCruiser, 1153 invConst.groupGhostSitesSerpentisCruiser, 1154 invConst.groupGhostSitesMordusLegion], 1155 GetByLabel('UI/Services/State/NonPlayerCharacter/Mission'): [invConst.groupMissionDrone, 1156 invConst.groupStorylineBattleship, 1157 invConst.groupStorylineFrigate, 1158 invConst.groupStorylineCruiser, 1159 invConst.groupStorylineMissionBattleship, 1160 invConst.groupStorylineMissionFrigate, 1161 invConst.groupStorylineMissionCruiser, 1162 invConst.groupMissionGenericBattleships, 1163 invConst.groupMissionGenericCruisers, 1164 invConst.groupMissionGenericFrigates, 1165 invConst.groupMissionThukkerBattlecruiser, 1166 invConst.groupMissionThukkerBattleship, 1167 invConst.groupMissionThukkerCruiser, 1168 invConst.groupMissionThukkerDestroyer, 1169 invConst.groupMissionThukkerFrigate, 1170 invConst.groupMissionThukkerOther, 1171 invConst.groupMissionGenericBattleCruisers, 1172 invConst.groupMissionGenericDestroyers], 1173 GetByLabel('UI/Services/State/NonPlayerCharacter/Police'): [invConst.groupPoliceDrone], 1174 GetByLabel('UI/Services/State/NonPlayerCharacter/Concord'): [invConst.groupConcordDrone], 1175 GetByLabel('UI/Services/State/NonPlayerCharacter/Customs'): [invConst.groupCustomsOfficial], 1176 GetByLabel('UI/Services/State/NonPlayerCharacter/FactionNavy'): [invConst.groupFactionDrone]}} 1177 return npcGroups