attributes.py (7306B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\model\definition\achievement\attributes.py 2 from datetime import datetime 3 from achievement_system.client.api.error import DefinitionNotFoundError 4 from achievement_system.client.model.definition.achievement.milestone.entry import AchievementMilestoneDefinitionEntry 5 from achievement_system.client.model.definition.category.identifier import CategoryDefinitionIdentifier 6 from achievement_system.client.model.definition.contribution_method.configuration import ContributionMethodConfiguration 7 from achievement_system.client.model.flatbuffer.generated import Achievement as FlatbufferAchievement 8 from achievement_system.client.model.definition.icon_frames.ui_annotations import get_icon_outer_frame_from_annotation, get_icon_outer_mask_from_annotation, get_icon_inner_frame_from_annotation, ICON_OUTER_FRAME_KEY, ICON_INNER_FRAME_KEY 9 from localization.client.cerberus_formatted_message import CerberusFormattedMessage 10 from metadata.common.content_tags import ContentTag 11 if False: 12 from typing import List, Dict 13 14 class AchievementDefinitionAttributes(object): 15 16 def __init__(self, name_message, description_message, flavor_text_message, icon_id, issuer_corp_identifier, contribution_method, milestones, release_date, expiration_date, ui_annotations, tags, archived, internal_name, parent_category): 17 self._name_message = name_message 18 self._description_message = description_message 19 self._flavor_text_message = flavor_text_message 20 self._icon_id = icon_id 21 self._issuer_corp_identifier = issuer_corp_identifier 22 self._contribution_method = contribution_method 23 self._milestones = milestones 24 self._release_date = release_date 25 self._expiration_date = expiration_date 26 self._ui_annotations = ui_annotations 27 self._tags = tags 28 self._archived = archived 29 self._internal_name = internal_name 30 self._parent_category = parent_category 31 self._sort_milestones() 32 33 @property 34 def name_message(self): 35 return self._name_message 36 37 @property 38 def description_message(self): 39 return self._description_message 40 41 @property 42 def flavor_text_message(self): 43 return self._flavor_text_message 44 45 @property 46 def icon_id(self): 47 return self._icon_id 48 49 @property 50 def issuer_corp_identifier(self): 51 return self._issuer_corp_identifier 52 53 @property 54 def contribution_method(self): 55 return self._contribution_method 56 57 @property 58 def milestones(self): 59 return self._milestones 60 61 @property 62 def release_date(self): 63 return self._release_date 64 65 @property 66 def expiration_date(self): 67 return self._expiration_date 68 69 @property 70 def expired(self): 71 if self._expiration_date is None: 72 return False 73 return datetime.now() > self._expiration_date 74 75 @property 76 def ui_annotations(self): 77 return self._ui_annotations 78 79 @property 80 def tags(self): 81 return self._tags 82 83 @property 84 def archived(self): 85 return self._archived 86 87 @property 88 def internal_name(self): 89 return self._internal_name 90 91 @property 92 def parent_category(self): 93 return self._parent_category 94 95 @property 96 def is_historic(self): 97 return self.archived or self.expired 98 99 def get_milestone_index(self, milestone_id): 100 for i in range(len(self._milestones)): 101 if self._milestones[i].identifier == milestone_id: 102 return i 103 104 raise DefinitionNotFoundError 105 106 def get_icon_frame_keys(self, is_completed = False): 107 outer_frame = get_icon_outer_frame_from_annotation(self._ui_annotations.get(ICON_OUTER_FRAME_KEY, None)) 108 outer_mask = get_icon_outer_mask_from_annotation(self._ui_annotations.get(ICON_INNER_FRAME_KEY, None)) 109 inner_frame = get_icon_inner_frame_from_annotation(self._ui_annotations.get(ICON_INNER_FRAME_KEY, None), is_completed) 110 return (outer_frame, outer_mask, inner_frame) 111 112 def _sort_milestones(self): 113 114 def _sort_key(m): 115 return m.attributes.cumulated_target 116 117 self.milestones.sort(key=_sort_key) 118 119 @classmethod 120 def from_flatbuffer(cls, fb_data, parent_category_id): 121 return AchievementDefinitionAttributes(name_message=CerberusFormattedMessage(identifier=fb_data.Name(), parameters={}), description_message=CerberusFormattedMessage(identifier=fb_data.Description(), parameters={}), flavor_text_message=CerberusFormattedMessage(identifier=fb_data.FlavorText(), parameters={}) if fb_data.FlavorText() else None, icon_id=fb_data.IconId(), issuer_corp_identifier=fb_data.IssuerNpcCorp() if fb_data.IssuerNpcCorp() else None, contribution_method=ContributionMethodConfiguration.from_flatbuffer(fb_data.Contribution()), milestones=[ AchievementMilestoneDefinitionEntry.from_flatbuffer(fb_data.Milestones(i)) for i in range(fb_data.MilestonesLength()) ], release_date=datetime.fromtimestamp(fb_data.ReleaseDateUnixMs() / 1000.0) if fb_data.ReleaseDateUnixMs() else None, expiration_date=datetime.fromtimestamp(fb_data.ExpirationDateUnixMs() / 1000.0) if fb_data.ExpirationDateUnixMs() else None, ui_annotations={fb_data.UiAnnotations(i).Key():fb_data.UiAnnotations(i).Value() for i in range(fb_data.UiAnnotationsLength())}, tags=[ ContentTag(fb_data.Tags(i), {}) for i in range(fb_data.TagsLength()) ], archived=fb_data.Archived(), internal_name=fb_data.InternalName(), parent_category=parent_category_id) 122 123 def __eq__(self, other): 124 if other is None or not isinstance(other, AchievementDefinitionAttributes): 125 return False 126 return self.name_message == other.name_message and self.description_message == other.description_message and self.flavor_text_message == other.flavor_text_message and self.icon_id == other.icon_id and self.issuer_corp_identifier == other.issuer_corp_identifier and self.contribution_method == other.contribution_method and self.milestones == other.milestones and self.release_date == other.release_date and self.expiration_date == other.expiration_date and self.ui_annotations == other.ui_annotations and self.tags == other.tags and self.archived == other.archived and self.internal_name == other.internal_name and self.parent_category == other.parent_category 127 128 def __ne__(self, other): 129 return not self.__eq__(other) 130 131 def __str__(self): 132 return 'internal name: %s\n' % self.internal_name + 'name: %s\n' % self.name_message.get_localized_text() + 'description: %s\n' % self.description_message.get_localized_text() + 'flavor_text: %s\n' % (self.flavor_text_message.get_localized_text() if self.flavor_text_message else 'None') + 'icon_id: %s\n' % (self.icon_id if self.icon_id else 'None') + 'issuer_corp_identifier: %s\n' % self.issuer_corp_identifier + 'contribution_method: %s\n' % self.contribution_method + 'milestones: %s\n' % '\n, '.join([ s.__str__() for s in self.milestones ]) + 'release_date: %s\n' % self.release_date + 'expiration_date: %s\n' % self.expiration_date + 'ui_annotations: %s\n' % ', '.join([ '%s: %s' % (x, y) for x, y in self.ui_annotations.items() ]) + 'tags: %s\n' % self.tags + 'archived: %s\n' % self.archived