fleetbroadcastexports.py (13045B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fleet\fleetbroadcastexports.py 2 from clientsettings.setting import UserSettingEnum, SessionSettingEnum 3 from eve.client.script.ui.shared.fleet.fleetBroadcastConst import broadcastNames, LISTEN_BROADCAST_SETTING, broadcastScopes, broadcastRanges, defaultBroadcastRange, broadcastRangeNames 4 from evefleet import BROADCAST_LOCATION, BROADCAST_JUMP_BEACON, BROADCAST_TRAVEL_TO, BROADCAST_JUMP_TO, BROADCAST_ALIGN_TO, BROADCAST_NEED_BACKUP, BROADCAST_WARP_TO, BROADCAST_HEAL_CAPACITOR, BROADCAST_HEAL_SHIELD, BROADCAST_HEAL_ARMOR, BROADCAST_TARGET, BROADCAST_ENEMY_SPOTTED, BROADCAST_IN_POSITION 5 from eve.client.script.util.bubble import SlimItemFromCharID 6 from eve.common.script.sys.eveCfg import InShipInSpace 7 import evefleet 8 from evefleet.client.util import GetSelectedFormationName 9 import localization 10 from eve.client.script.ui.services.menuSvcExtras.movementFunctions import WarpToItem 11 from eveservices.menu import GetMenuService 12 from menu import MenuLabel 13 from menucheckers import SessionChecker 14 15 def ShouldListen(gbName, senderRole, senderJob, senderWingID, senderSquadID): 16 return settings.user.ui.Get(LISTEN_BROADCAST_SETTING % gbName, True) or senderRole == evefleet.fleetRoleLeader or senderJob == evefleet.fleetJobCreator or senderRole == evefleet.fleetRoleWingCmdr and senderWingID == session.wingid or senderRole == evefleet.fleetRoleSquadCmdr and senderSquadID == session.squadid 17 18 19 def FilteredBroadcast(f, name): 20 21 def deco(self, senderID, *args, **kw): 22 rec = sm.GetService('fleet').GetMembers().get(senderID) 23 if not rec or ShouldListen(name, rec.role, rec.job, rec.wingID, rec.squadID): 24 f(self, senderID, *args, **kw) 25 26 return deco 27 28 29 def MenuGetter(gbType, *args): 30 GetMenu = globals()['GetMenu_%s' % gbType] 31 return lambda : GetMenu(*args) 32 33 34 def GetMenu_EnemySpotted(charID, locationID, nearID): 35 where = Where(charID, locationID) 36 menuSvc = GetMenuService() 37 m = [] 38 if where in (inSystem, inBubble): 39 defaultWarpDist = menuSvc.GetDefaultActionDistance(BROADCAST_WARP_TO) 40 formationName = {'fleetFormation': GetSelectedFormationName()} 41 m.extend([[MenuLabel('UI/Fleet/WarpToMember'), menuSvc.WarpToMember, (charID, float(defaultWarpDist))], 42 [MenuLabel('UI/Fleet/WarpToMemberSubmenuOption'), menuSvc.WarpToMenu(menuSvc.WarpToMember, charID)], 43 [MenuLabel('UI/Fleet/WarpFleetToMember', formationName), menuSvc.WarpFleetToMember, (charID, float(defaultWarpDist))], 44 [MenuLabel('UI/Fleet/FleetSubmenus/WarpFleetToMember', formationName), menuSvc.WarpToMenu(menuSvc.WarpFleetToMember, charID)]]) 45 else: 46 m.extend(GetMenu_TravelTo(charID, locationID, nearID)) 47 return m 48 49 50 GetMenu_NeedBackup = GetMenu_InPosition = GetMenu_EnemySpotted 51 52 def GetMenu_TravelTo(charID, solarSystemID, destinationID): 53 destinationID = destinationID or solarSystemID 54 starmapSvc = sm.GetService('starmap') 55 waypoints = starmapSvc.GetWaypoints() 56 m = [[MenuLabel('UI/Inflight/SetDestination'), starmapSvc.SetWaypoint, (destinationID, True)]] 57 if destinationID in waypoints: 58 m.append([MenuLabel('UI/Inflight/RemoveWaypoint'), starmapSvc.ClearWaypoints, (destinationID,)]) 59 else: 60 m.append([MenuLabel('UI/Inflight/AddWaypoint'), starmapSvc.SetWaypoint, (destinationID,)]) 61 return m 62 63 64 def GetMenu_Location(charID, solarSystemID, nearID): 65 if solarSystemID != session.solarsystemid2: 66 m = GetMenu_TravelTo(charID, solarSystemID, None) 67 m.append([MenuLabel('UI/Fleet/FleetSubmenus/ShowDistance'), sm.GetService('fleet').DistanceToFleetMate, (solarSystemID, nearID)]) 68 else: 69 m = GetMenu_WarpTo(charID, solarSystemID, nearID) 70 return m 71 72 73 def GetMenu_JumpBeacon(charID, solarSystemID, beaconID, typeID): 74 menuSvc = GetMenuService() 75 starmapSvc = sm.GetService('starmap') 76 waypoints = starmapSvc.GetWaypoints() 77 m = [] 78 if session.solarsystemid and session.shipid: 79 sessionChecker = SessionChecker(session, sm) 80 if sessionChecker.isShipJumpCapable(): 81 m.append([MenuLabel('UI/Inflight/JumpToFleetMember'), menuSvc.JumpToFleetModuleBeacon, (charID, 82 solarSystemID, 83 beaconID, 84 typeID)]) 85 if sessionChecker.canOpenJumpPortal(): 86 m.append([MenuLabel('UI/Fleet/BridgeToMember'), menuSvc.BridgeToFleetModuleBeacon, (charID, 87 solarSystemID, 88 beaconID, 89 typeID)]) 90 if sessionChecker.canPerformGroupJump(): 91 m.append([MenuLabel('UI/Fleet/ConduitJumpToFleetMember'), menuSvc.GroupJumpToFleetModuleBeacon, (charID, 92 solarSystemID, 93 beaconID, 94 typeID)]) 95 m.append(None) 96 m.append([MenuLabel('UI/Inflight/SetDestination'), starmapSvc.SetWaypoint, (solarSystemID, True)]) 97 if solarSystemID in waypoints: 98 m.append([MenuLabel('UI/Inflight/RemoveWaypoint'), starmapSvc.ClearWaypoints, (solarSystemID,)]) 99 else: 100 m.append([MenuLabel('UI/Inflight/AddWaypoint'), starmapSvc.SetWaypoint, (solarSystemID,)]) 101 return m 102 103 104 def GetMenu_WarpTo(charID, solarSystemID, locationID): 105 return GetWarpLocationMenu(locationID) 106 107 108 def GetWarpLocationMenu(locationID): 109 if not InShipInSpace(): 110 return [] 111 menuSvc = GetMenuService() 112 defaultWarpDist = menuSvc.GetDefaultActionDistance(BROADCAST_WARP_TO) 113 ret = [[MenuLabel('UI/Inflight/WarpToBookmark'), WarpToItem, (locationID, float(defaultWarpDist))], [MenuLabel('UI/Inflight/Submenus/WarpToWithin'), menuSvc.WarpToMenu(WarpToItem, locationID)], [MenuLabel('UI/Inflight/AlignTo'), menuSvc.AlignTo, (locationID,)]] 114 formationName = {'fleetFormation': GetSelectedFormationName()} 115 if session.fleetrole == evefleet.fleetRoleLeader: 116 ret.extend([[MenuLabel('UI/Fleet/WarpFleetToLocation', formationName), menuSvc.WarpFleet, (locationID, float(defaultWarpDist))], [MenuLabel('UI/Fleet/FleetSubmenus/WarpFleetToLocationWithin', formationName), menuSvc.WarpToMenu(menuSvc.WarpFleet, locationID)]]) 117 elif session.fleetrole == evefleet.fleetRoleWingCmdr: 118 ret.extend([[MenuLabel('UI/Fleet/WarpWingToLocation', formationName), menuSvc.WarpFleet, (locationID, float(defaultWarpDist))], [MenuLabel('UI/Fleet/FleetSubmenus/WarpWingToLocationWithin', formationName), menuSvc.WarpToMenu(menuSvc.WarpFleet, locationID)]]) 119 elif session.fleetrole == evefleet.fleetRoleSquadCmdr: 120 ret.extend([[MenuLabel('UI/Fleet/WarpSquadToLocation', formationName), menuSvc.WarpFleet, (locationID, float(defaultWarpDist))], [MenuLabel('UI/Fleet/FleetSubmenus/WarpSquadToLocationWithin', formationName), menuSvc.WarpToMenu(menuSvc.WarpFleet, locationID)]]) 121 return ret 122 123 124 def GetMenu_Target(charID, solarSystemID, shipID): 125 m = [] 126 targetSvc = sm.GetService('target') 127 targets = targetSvc.GetTargets() 128 if not targetSvc.BeingTargeted(shipID) and shipID not in targets: 129 m = [(MenuLabel('UI/Inflight/LockTarget'), targetSvc.TryLockTarget, (shipID,))] 130 return m 131 132 133 def GetMenu_Member(charID): 134 m = [(MenuLabel('UI/Fleet/Ranks/FleetMember'), GetMenuService().FleetMenu(charID, unparsed=False))] 135 return m 136 137 138 def GetMenu_Ignore(name): 139 isListen = settings.user.ui.Get(LISTEN_BROADCAST_SETTING % name, True) 140 if isListen: 141 m = [(MenuLabel('UI/Fleet/FleetBroadcast/IgnoreBroadcast'), sm.GetService('fleet').SetListenBroadcast, (name, False))] 142 else: 143 m = [(MenuLabel('UI/Fleet/FleetBroadcast/UnignoreBroadcast'), sm.GetService('fleet').SetListenBroadcast, (name, True))] 144 return m 145 146 147 def GetMenu_HealArmor(charID, solarSystemID, shipID): 148 return GetMenu_Target(charID, solarSystemID, shipID) 149 150 151 def GetMenu_HealShield(charID, solarSystemID, shipID): 152 return GetMenu_Target(charID, solarSystemID, shipID) 153 154 155 def GetMenu_HealCapacitor(charID, solarSystemID, shipID): 156 return GetMenu_Target(charID, solarSystemID, shipID) 157 158 159 def GetMenu_Heal_Target(charID, solarSystemID, shipID): 160 return GetMenu_Target(charID, solarSystemID, shipID) 161 162 163 def GetMenu_JumpTo(charID, solarSystemID, locationID): 164 return GetMenu_WarpTo(charID, solarSystemID, locationID) 165 166 167 def GetMenu_AlignTo(charID, solarSystemID, locationID): 168 return GetMenu_WarpTo(charID, solarSystemID, locationID) 169 170 171 def GetMenuFunc(broadcastName): 172 if broadcastName == BROADCAST_ENEMY_SPOTTED: 173 return GetMenu_EnemySpotted 174 if broadcastName == BROADCAST_TARGET: 175 return GetMenu_Target 176 if broadcastName == evefleet.BROADCAST_REP_TARGET: 177 return GetMenu_Heal_Target 178 if broadcastName == BROADCAST_HEAL_ARMOR: 179 return GetMenu_HealArmor 180 if broadcastName == BROADCAST_HEAL_SHIELD: 181 return GetMenu_HealShield 182 if broadcastName == BROADCAST_HEAL_CAPACITOR: 183 return GetMenu_HealCapacitor 184 if broadcastName == BROADCAST_WARP_TO: 185 return GetMenu_WarpTo 186 if broadcastName == BROADCAST_NEED_BACKUP: 187 return GetMenu_NeedBackup 188 if broadcastName == BROADCAST_ALIGN_TO: 189 return GetMenu_AlignTo 190 if broadcastName == BROADCAST_JUMP_TO: 191 return GetMenu_JumpTo 192 if broadcastName == BROADCAST_TRAVEL_TO: 193 return GetMenu_TravelTo 194 if broadcastName == BROADCAST_IN_POSITION: 195 return GetMenu_InPosition 196 if broadcastName == BROADCAST_JUMP_BEACON: 197 return GetMenu_JumpBeacon 198 if broadcastName == BROADCAST_LOCATION: 199 return GetMenu_Location 200 201 202 def _Rank(role): 203 if not hasattr(_Rank, 'ranks'): 204 _Rank.ranks = {evefleet.fleetRoleLeader: 4, 205 evefleet.fleetRoleWingCmdr: 3, 206 evefleet.fleetRoleSquadCmdr: 2, 207 evefleet.fleetRoleMember: 1} 208 return _Rank.ranks.get(role, -1) 209 210 211 def GetRankName(member): 212 if member.job & evefleet.fleetJobCreator: 213 if member.role == evefleet.fleetRoleLeader: 214 return localization.GetByLabel('UI/Fleet/Ranks/FleetCommanderBoss') 215 elif member.role == evefleet.fleetRoleWingCmdr: 216 return localization.GetByLabel('UI/Fleet/Ranks/WingCommanderBoss') 217 elif member.role == evefleet.fleetRoleSquadCmdr: 218 return localization.GetByLabel('UI/Fleet/Ranks/SquadCommanderBoss') 219 elif member.role == evefleet.fleetRoleMember: 220 return localization.GetByLabel('UI/Fleet/Ranks/SquadMemberBoss') 221 else: 222 return localization.GetByLabel('UI/Fleet/Ranks/NonMember') 223 else: 224 return GetRoleName(member.role) 225 226 227 def GetRoleName(role): 228 if role == evefleet.fleetRoleLeader: 229 return localization.GetByLabel('UI/Fleet/Ranks/FleetCommander') 230 elif role == evefleet.fleetRoleWingCmdr: 231 return localization.GetByLabel('UI/Fleet/Ranks/WingCommander') 232 elif role == evefleet.fleetRoleSquadCmdr: 233 return localization.GetByLabel('UI/Fleet/Ranks/SquadCommander') 234 elif role == evefleet.fleetRoleMember: 235 return localization.GetByLabel('UI/Fleet/Ranks/SquadMember') 236 else: 237 return localization.GetByLabel('UI/Fleet/Ranks/NonMember') 238 239 240 def _ICareAbout(*args): 241 242 def MySuperior(role, wingID, squadID): 243 return _Rank(role) > _Rank(session.fleetrole) and wingID in (session.wingid, -1) and squadID in (session.squadid, -1) 244 245 def SubordinateICareAbout(role, wingID, squadID): 246 return role != evefleet.fleetRoleMember and _Rank(role) == _Rank(session.fleetrole) - 1 and session.wingid in (-1, wingID) 247 248 return MySuperior(*args) or SubordinateICareAbout(*args) 249 250 251 inBubble = 1 252 inSystem = 2 253 exSystem = 3 254 255 def Where(charID, locationID = None): 256 if SlimItemFromCharID(charID) is not None: 257 return inBubble 258 elif locationID in (None, session.solarsystemid): 259 return inSystem 260 else: 261 return exSystem 262 263 264 def GetRoleIconFromCharID(charID): 265 if charID is None: 266 return 267 info = sm.GetService('fleet').GetMemberInfo(int(charID)) 268 if info is None: 269 return 270 if info.job & evefleet.fleetJobCreator: 271 iconRole = '73_20' 272 else: 273 iconRole = {evefleet.fleetRoleLeader: '73_17', 274 evefleet.fleetRoleWingCmdr: '73_18', 275 evefleet.fleetRoleSquadCmdr: '73_19'}.get(info.role, None) 276 return iconRole 277 278 279 def GetBroadcastScopeName(scope, where = evefleet.BROADCAST_UNIVERSE): 280 labelName = broadcastScopes.get(scope, {}).get(where, 'UI/Fleet/FleetBroadcast/BroadcastRangeAll') 281 return localization.GetByLabel(labelName) 282 283 284 def GetBroadcastWhere(name): 285 return broadcastRanges.get(name, defaultBroadcastRange) 286 287 288 def GetBroadcastWhereName(scope): 289 return localization.GetByLabel(broadcastRangeNames[scope]) 290 291 292 def GetBroadcastName(broadcastType): 293 return localization.GetByLabel(broadcastNames[broadcastType]) 294 295 296 import carbon.common.script.util.autoexport as autoexport 297 exports = autoexport.AutoExports('fleetbr', locals()) 298 fleetBroadcastScopeSetting = SessionSettingEnum(options=[evefleet.BROADCAST_ALL, evefleet.BROADCAST_DOWN, evefleet.BROADCAST_UP], default_value=evefleet.BROADCAST_ALL)