NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)