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