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

charSheetUtil.py (9862B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\charsheet\charSheetUtil.py
      2 import evetypes
      3 from achievement_system.client.api.repository import get_repository as get_achievements_repository
      4 from character.client.identifier import CharacterIdentifier
      5 from eve.client.script.ui.control.entries.generic import Generic
      6 from eve.client.script.ui.control.entries.header import Header
      7 from eve.client.script.ui.control.entries.kill_mail import KillMail, KillMailCondensed
      8 from eve.client.script.ui.control.entries.util import GetFromClass
      9 from cosmetics.client.character.title.api.repository import get_repository
     10 from cosmetics.client.character.title.util import find_achievements_granting_title_as_reward
     11 from carbonui.text.styles import TextHeadline
     12 from carbonui import Align, TextAlign
     13 from eve.client.script.ui.cosmetics.character.titles.decoration_entry import DecorationEntry
     14 from eve.client.script.ui.cosmetics.character.titles.decoration_section_header import DecorationSectionHeader
     15 from menu import MenuLabel
     16 from carbon.common.script.util.format import FmtDate
     17 from eve.client.script.ui.shared.killReportUtil import OpenKillReport, CleanKillMail
     18 from eve.common.script.util.eveCommonUtils import CombatLog_CopyText
     19 from eve.common.script.util.esiUtils import CopyESIKillmailUrlToClipboard
     20 from localization import GetByLabel
     21 from utillib import KeyVal
     22 import blue
     23 from bannedwords.client import bannedwords
     24 
     25 def GetMedalScrollEntries(charID, noHeaders = False, publicOnly = False):
     26     scrolllist = []
     27     inDecoList = []
     28     publicDeco = (sm.StartService('medals').GetMedalsReceivedWithFlag(charID, [3]), GetByLabel('UI/CharacterSheet/CharacterSheetWindow/DecoTabs/Public'))
     29     privateDeco = (sm.StartService('medals').GetMedalsReceivedWithFlag(charID, [2]), GetByLabel('UI/CharacterSheet/CharacterSheetWindow/DecoTabs/Private'))
     30     _, characterMedalInfo = sm.StartService('medals').GetMedalsReceived(charID)
     31     if publicOnly:
     32         t = (publicDeco,)
     33     else:
     34         t = (publicDeco, privateDeco)
     35     for deco, hint in t:
     36         if deco and not noHeaders:
     37             scrolllist.append(GetFromClass(Header, {'label': hint}))
     38         for medalID, medalData in deco.iteritems():
     39             if medalID in inDecoList:
     40                 continue
     41             inDecoList.append(medalID)
     42             details = characterMedalInfo.Filter('medalID')
     43             if details and medalID in details:
     44                 details = details.get(medalID)
     45             entry = sm.StartService('info').GetMedalEntry(medalData, details, 0)
     46             if entry:
     47                 scrolllist.append(entry)
     48 
     49     return scrolllist
     50 
     51 
     52 def GetTitleScrollEntries():
     53     repo_definitions = get_repository().definitions
     54     owned_titles = get_repository().get_owned_titles()
     55     equipped_title = get_repository().get_equipped_title(character_identifier=CharacterIdentifier(identifier=session.charid))
     56     available_entries = []
     57     locked_entries = []
     58     for identifier, attributes in repo_definitions.get_all_titles().items():
     59         equipped = equipped_title.equipped_title == identifier if equipped_title is not None else False
     60         achievement_definition_identifiers_for_title = find_achievements_granting_title_as_reward(title_id=identifier)
     61         achievement_definition_identifier_for_title = achievement_definition_identifiers_for_title[0] if achievement_definition_identifiers_for_title is not None and len(achievement_definition_identifiers_for_title) > 0 and achievement_definition_identifiers_for_title[0] is not None else None
     62         repo = get_achievements_repository()
     63         achievement_definitions = repo.definitions if repo is not None else None
     64         achievement = achievement_definitions.get_achievement(achievement_identifier=achievement_definition_identifier_for_title) if achievement_definitions is not None and achievement_definition_identifier_for_title is not None else None
     65         name_message = achievement.name_message if achievement is not None else None
     66         achievement_label_for_hint = name_message.get_localized_text() if name_message is not None else None
     67         is_owned = identifier in owned_titles
     68         data = {'identifier': identifier,
     69          'label': '%s' % attributes.localized_name,
     70          'owned': is_owned,
     71          'achievement_id': achievement_definition_identifier_for_title,
     72          'achievement_label_for_hint': achievement_label_for_hint,
     73          'equipped': equipped,
     74          'selected': equipped,
     75          'vspace': 20}
     76         entry = GetFromClass(DecorationEntry, data)
     77         if is_owned:
     78             available_entries.append(entry)
     79         else:
     80             locked_entries.append(entry)
     81 
     82     scrolllist = []
     83     if available_entries:
     84         scrolllist.append(GetFromClass(DecorationSectionHeader, {'label': GetByLabel('UI/CharacterSheet/CharacterSheetWindow/DecoTabs/Titles/Acquired')}))
     85         scrolllist.extend(available_entries)
     86     if locked_entries:
     87         scrolllist.append(GetFromClass(DecorationSectionHeader, {'label': GetByLabel('UI/CharacterSheet/CharacterSheetWindow/DecoTabs/Titles/NotAcquired')}))
     88         scrolllist.extend(locked_entries)
     89     return scrolllist
     90 
     91 
     92 def GetCombatEntries(recent, filterText = ''):
     93     if len(filterText) > 0:
     94         bannedwords.check_search_words_allowed(filterText)
     95     showAsCondensed = settings.user.ui.Get('charsheet_condensedcombatlog', 0)
     96     if showAsCondensed:
     97         headers = [GetByLabel('UI/Common/Date'),
     98          GetByLabel('UI/Common/Type'),
     99          GetByLabel('UI/Common/Name'),
    100          GetByLabel('UI/Common/Corporation'),
    101          GetByLabel('UI/Common/Alliance'),
    102          GetByLabel('UI/Common/Faction')]
    103     else:
    104         headers = []
    105     primeEveOwners = set()
    106     primeEveLocations = set()
    107     primeCorps = set()
    108     primeAlliances = set()
    109     ret = []
    110     unknownShipLabel = GetByLabel('UI/CharacterSheet/CharacterSheetWindow/KillsTabs/UnknownShip')
    111     unknownNameLabel = GetByLabel('UI/CharacterSheet/CharacterSheetWindow/KillsTabs/UnknownName')
    112     unknownCorporationLabel = GetByLabel('UI/CharacterSheet/CharacterSheetWindow/KillsTabs/UnknownCorporation')
    113     unknownAllianceLabel = GetByLabel('UI/CharacterSheet/CharacterSheetWindow/KillsTabs/UnknownAlliance')
    114     unknownFactionLabel = GetByLabel('UI/CharacterSheet/CharacterSheetWindow/KillsTabs/UnknownFaction')
    115     for kill in recent:
    116         primeEveLocations.add(kill.solarSystemID)
    117         primeEveLocations.add(kill.moonID)
    118         primeEveOwners.add(kill.victimCharacterID)
    119         primeEveOwners.add(kill.victimCorporationID)
    120         primeCorps.add(kill.victimCorporationID)
    121         primeEveOwners.add(kill.victimAllianceID)
    122         primeAlliances.add(kill.victimAllianceID)
    123         primeEveOwners.add(kill.victimFactionID)
    124         primeEveOwners.add(kill.finalCharacterID)
    125         primeEveOwners.add(kill.finalCorporationID)
    126         primeCorps.add(kill.finalCorporationID)
    127         primeEveOwners.add(kill.finalAllianceID)
    128         primeAlliances.add(kill.finalAllianceID)
    129         primeEveOwners.add(kill.finalFactionID)
    130 
    131     cfg.eveowners.Prime(filter(None, primeEveOwners))
    132     cfg.evelocations.Prime(filter(None, primeEveLocations))
    133     cfg.corptickernames.Prime(filter(None, primeCorps))
    134     cfg.allianceshortnames.Prime(filter(None, primeAlliances))
    135 
    136     def GetOwnerName(ownerID):
    137         owner = cfg.eveowners.GetIfExists(ownerID)
    138         return getattr(owner, 'name', '')
    139 
    140     def GetTypeName(typeID):
    141         try:
    142             return evetypes.GetName(typeID)
    143         except evetypes.TypeNotFoundException:
    144             return ''
    145 
    146     def FilterOut(kill):
    147         if not filterText:
    148             return False
    149         if GetTypeName(kill.victimShipTypeID).lower().find(filterText) >= 0:
    150             return False
    151         for ownerID in [kill.victimCharacterID, kill.victimCorporationID, kill.victimAllianceID]:
    152             ownerName = GetOwnerName(ownerID)
    153             if ownerName.lower().find(filterText) >= 0:
    154                 return False
    155 
    156         return True
    157 
    158     for kill in recent:
    159         if FilterOut(kill):
    160             continue
    161         if showAsCondensed:
    162             data = KeyVal()
    163             timeOfKill = FmtDate(kill.killTime)
    164             shipOfCharacterKilled = GetTypeName(kill.victimShipTypeID) or unknownShipLabel
    165             characterKilled = GetOwnerName(kill.victimCharacterID) or unknownNameLabel
    166             corporationOfCharacterKilled = GetOwnerName(kill.victimCorporationID) or unknownCorporationLabel
    167             allianceOfCharacterKilled = GetOwnerName(kill.victimAllianceID) or unknownAllianceLabel
    168             factionOfCharacterKilled = GetOwnerName(kill.victimFactionID) or unknownFactionLabel
    169             labelList = [timeOfKill,
    170              shipOfCharacterKilled,
    171              characterKilled,
    172              corporationOfCharacterKilled,
    173              allianceOfCharacterKilled,
    174              factionOfCharacterKilled]
    175             data.label = '<t>'.join(labelList)
    176             data.GetMenu = GetCombatMenu
    177             data.OnDblClick = (GetCombatDblClick, data)
    178             data.kill = kill
    179             data.mail = kill
    180             ret.append(GetFromClass(KillMailCondensed, data))
    181         else:
    182             ret.append(GetFromClass(KillMail, {'mail': kill}))
    183 
    184     return (ret, headers)
    185 
    186 
    187 def GetCombatDblClick(entry, *args):
    188     kill = entry.sr.node.kill
    189     if kill is not None:
    190         OpenKillReport(kill)
    191 
    192 
    193 def GetCombatMenu(entry, *args):
    194     m = [(MenuLabel('UI/CharacterSheet/CharacterSheetWindow/KillsTabs/CopyKillInfo'), GetCombatText, (entry.sr.node.kill, 1)), (MenuLabel('UI/Control/Entries/CopyExternalKillLink'), CopyESIKillmailUrlToClipboard, (entry.sr.node.kill,))]
    195     return m
    196 
    197 
    198 def GetCombatText(kill, isCopy = 0):
    199     ret = CombatLog_CopyText(kill)
    200     if isCopy:
    201         blue.pyos.SetClipboardData(CleanKillMail(ret))
    202     else:
    203         return ret